一、Transformer总体架构
(一)编码器 - 解码器架构
- 基本功能
- 原始的Transformer模型由编码器和解码器构成,适用于序列到序列的任务,如机器翻译。编码器的主要任务是对输入序列进行特征提取和编码,将其转换为一种中间表示形式。解码器则基于编码器生成的中间表示,逐一生成输出序列。
- 应用场景
- 在语言翻译中,输入的源语言句子首先进入编码器,得到的中间表示再由解码器转换为目标语言句子。
(二)自注意力机制
- 原理
- 自注意力机制是Transformer的关键创新。对于输入序列中的每个单词(或元素),自注意力机制会计算它与序列中其他所有单词的相关性得分。这些得分通过点积运算等方式得到,反映了不同单词之间的关联程度。
- 例如,在句子“我喜欢吃苹果”中,当处理“喜欢”这个词时,自注意力机制会考虑“我”“吃”“苹果”与“喜欢”的相关性。
- 优势
- 相比于传统的循环神经网络(RNN)和卷积神经网络(CNN),自注意力机制能够并行处理序列中的所有单词,大大提高了计算效率。同时,它能够捕捉长距离依赖关系,克服了RNN中长序列信息传递容易丢失的问题。
二、编码器结构
(一)多头注意力机制
- 运作方式
- 编码器包含多个自注意力层,即多头注意力。每个头独立计算自注意力,从不同的表示子空间中学习信息。
- 假设在一个有8个头的多头注意力机制中,每个头会对输入序列进行不同角度的关注。
- 融合信息
- 各个头的输出会进行拼接,并经过一个线性变换层,将拼接后的高维向量转换为合适的维度,用于后续的处理。
(二)前馈神经网络
- 结构
- 在多头注意力机制之后是前馈神经网络,它由两个线性变换层和一个激活函数(如ReLU)组成。第一个线性变换将输入向量的维度进行扩展,激活函数引入非线性,第二个线性变换再将维度恢复到合适大小。
- 作用
- 前馈神经网络对经过多头注意力处理后的每个位置的表示进行进一步的非线性变换,增强模型的表达能力。
三、解码器结构
(一)带掩码的多头注意力机制
- 掩码的必要性
- 在解码器中,自注意力层在生成当前单词时不能看到未来的单词,因此需要使用掩码。例如在生成一个句子时,当生成第3个单词时,不能让模型知道第4个及以后的单词。
- 实现方式
- 通过在计算注意力得分时将未来位置的权重设置为负无穷,经过softmax操作后,未来位置的影响就被消除了。
(二)编码器 - 解码器注意力机制
- 信息传递
- 解码器中的这一机制用于关注编码器的输出。解码器在生成输出序列时,需要利用输入序列的信息,编码器 - 解码器注意力机制实现了这种信息的传递。
- 计算过程
- 它的计算方式类似于多头注意力机制,只是查询向量来自解码器,键值向量来自编码器的输出。
四、位置编码
(一)位置信息的重要性
- 在Transformer中,由于没有像RNN那样的循环结构,模型本身无法直接获取序列中的位置信息。然而,位置信息在自然语言中至关重要,例如“我打他”和“他打我”中词语相同,但位置不同导致语义不同。
(二)位置编码的实现
- 正弦和余弦函数编码
- Transformer通常采用基于正弦和余弦函数的位置编码。对于序列中的每个位置,都会生成一个特定的位置编码向量。
- 假设序列长度为n,位置编码向量的每个维度值按照公式PE_{(pos,2i)}=\sin(pos/10000^{2i/d_{model}})和PE_{(pos,2i + 1)}=\cos(pos/10000^{2i/d_{model}})计算,其中pos是位置,i是维度索引,d_{model}是模型的维度。
- 与词嵌入相加
- 位置编码向量会被加到输入词嵌入上,使得模型在处理序列时能够区分不同位置的单词,进而更好地理解序列的语义。
五、总结
Transformer模型结构凭借其自注意力机制、多头注意力、带掩码的注意力以及位置编码等创新设计,在自然语言处理领域取得了巨大的成功。它不仅解决了传统神经网络在处理长序列数据时的诸多问题,还为ChatGPT等先进语言模型的发展奠定了坚实的基础。对Transformer的深入研究和学习,有助于进一步推动自然语言处理技术的发展和应用。