Transformer
终于说到 Transformer , 基于前面 Self-Attention 和 MultiHead Attention 的知识,
我们可以开始学习 Transformer 的结构了, 如下:
输入是前面的法语例子, 其中 <SOS>
表示 Start of the Sentence, <EOS>
表示 End of theSentence.
再来看结构, 左边是 Encoder, 右边是 Decoder.
Encoder
首先是输入 X 和 QKV, 经过一个 MultiHead Attention
, 然后是 Add & Norm
,Add
这里是 Residual Connection
, 将 x + F(x) 的结果传到下一层,
这个技巧在 ResNet 中也用到 (只关注有差异的部分, 减小梯度消失的情况, 支持构建更深的网络),Norm
是 Layer Normalization, 加速训练和收敛.
之后接 Forward Neural Network
和 Add & Norm
,
Encoder 这个 Block 会重复 N 次, 然后输出到 Decoder.
Decoder
- 输入要 Attend 的 words, 第一个 MultiHead 是
Masked
, 是因为训练时要盖住未知的词
(例如当训练in
时需要 mask 掉<SOS> Jane visites Africa
后边的in September <EOS>
),
然后输出 Q 到 第二个 MultiHead. - 第二个 MultiHead 另外还接收来自 Encoder 的 K 和 V 的输入, 然后输出到 Forward Neural Network,
接着下一步新的输出
会成为 第一个 MultiHead 的输入
(即上一次 Decoder 的 输出 作为下一次的输入),
如此在 Decoder 这个 Block 会重复 N 次. - 最后, 经过 Linear 计算和
Softmax
输出各个词的可能性值.
Positioning Encoding
注意到图里有一个 Positioning-Encoding.
假设有一个 d=4 (dimension 为4) 的 X Word Embedding 向量, 那么也有一个同样 d=4 的 Positioning 向量,
我们定义 $p^{<1>}$ 是 pos=1 时的值, i 对应 Positioning 向量中的每个元素,
那么 $p^{<1>}$ 是一个三角函数值, 如图中 4 个坐标轴的绿色点.
2i 时用 sin(), 2i+1 时用 cos(), 基于三角函数的特性(频率/偏移/..), 包含了词之间的相对位置信息.1>1>
而 $p^{<1>}$ 和 $x^{<1>}$ 在 Encoder 端会进行 add, 使模型能够学习到位置信息,
同样的 Decoder 端也会加入 Positioning Encoding.1>1>
参考
https://www.coursera.org/lecture/nlp-sequence-models/transformer-network-Kf5Y3
https://jalammar.github.io/illustrated-transformer/