1. 从全局角度概括Transformer
transformer的任务是什么?
进一步细化
进一步细化,注意:每个encoder结构相同,参数不同;decoder同理
原论文中的图如下:
2.Encoder
2.1 输入部分
(1)Embedding:
将输入的离散符号(如单词或字符)转换为连续向量表示的关键步骤。
(2)位置编码:
为什么需要位置编码?
与递归神经网络(RNN)和卷积神经网络(CNN)不同,这些传统模型天然地对输入序列的顺序敏感,因为它们通过连续处理或滑动窗口的方式处理数据。
然而,自注意力机制在计算时会同时考虑序列中所有元素之间的关系,这意味着它本身并不具备捕捉元素相对或绝对位置的能力。在原始的 Transformer 模型中,位置编码是通过正弦和余弦函数来实现的。
2.2 注意力机制
详细讲解见下面博客
https://blog.csdn.net/WBingJ/article/details/144832299?spm=1001.2014.3001.5501
原因:传统的序列到序列(Seq2Seq)模型使用一个固定大小的上下文向量来表示整个输入序列,这在处理长序列时可能会导致信息丢失。注意力机制通过允许模型在每个时间步关注输入序列的不同部分,解决了这一问题。
作用:允许模型在处理输入序列时,能够有选择性地聚焦于最相关的部分,而不是对所有部分一视同仁
- 具体来说,自注意力机制通过计算查询(Query)、键(Key)和值(Value)之间的相似度来生成注意力权重。
残差
- 新的表示 z1z1 和 z2z2 通过残差连接与原始输入相加,并经过归一化层。
- 归一化后的结果再次进入前馈神经网络。
为什么使用残差:
- 缓解梯度消失/爆炸问题:在非常深的神经网络中,随着层数的增加,反向传播过程中梯度会逐渐变小(梯度消失)或变得非常大(梯度爆炸)。这使得网络难以收敛,甚至无法正常训练。残差连接通过引入直接路径来传递信息,使得梯度可以更容易地从输出层反向传播到输入层。
具体步骤
-
输入向量 xx:
- 输入向量 xx 是残差块的初始输入。
-
前馈网络 F(x)F(x):
- 输入 x 通过第一个权重层和 ReLU 激活函数。
- 输出再通过第二个权重层和 ReLU 激活函数。
-
残差连接:
- 将原始输入 x 与前馈网络的输出 z 相加
Layer Normalization
Layer Normalization 是一种用于深度学习模型中的正则化和加速训练的技术,它通过归一化每一层的输入来稳定和加速神经网络的训练过程。与 Batch Normalization 不同,Layer Normalization 对每个样本的所有特征进行归一化,而不是在小批量(mini-batch)上对每个特征进行归一化。
2.3 前馈神经网络
3. Decoder
3.1 多头注意力机制Mask
为什么需要mask:解码器中的未来信息屏蔽,在解码阶段,模型不应该看到未来的词,因为这会导致数据泄露,并且不符合实际应用情境。例如,在机器翻译任务中,当翻译一句话时,每个时刻只能基于之前的词语来预测下一个词。
3.2 交互层Cross Attention Layer
作用:交互层的核心是交叉注意力机制,它使得解码器可以在生成每个输出词时参考编码器的所有输入。
- 查询(Query):来自解码器当前时间步的隐藏状态。
- 键(Key)和值(Value):由编码器生成的隐藏状态提供。
- 计算注意力分布:通过计算查询与所有键之间的相似度得分,并使用 Softmax 函数将其转换为概率分布。然后,该分布用于对值进行加权求和,得到最终的上下文向量。