GPT 之 Transformer 笔记 (三) Transformer

Transformer

终于说到 Transformer , 基于前面 Self-Attention 和 MultiHead Attention 的知识,
我们可以开始学习 Transformer 的结构了, 如下:

(Andrew Transformer PPT)

输入是前面的法语例子, 其中 <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 NetworkAdd & 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(), 基于三角函数的特性(频率/偏移/..), 包含了词之间的相对位置信息.

而 $p^{<1>}$ 和 $x^{<1>}$ 在 Encoder 端会进行 add, 使模型能够学习到位置信息,
同样的 Decoder 端也会加入 Positioning Encoding.

参考

https://www.coursera.org/lecture/nlp-sequence-models/transformer-network-Kf5Y3
https://jalammar.github.io/illustrated-transformer/