论文阅读笔记AI篇 —— Transformer模型理论+实战 (三)
第三遍阅读(精读)
精读的过程要把每个细节都钻研透,不留有死角。各种维度参数已经在“理论+实战(二)”中说清楚了,若之后还有疑问我再补上。
三、参考文章或视频链接 |
---|
[1] 【超强动画,一步一步深入浅出解释Transformer原理!】 |
3.1 Attention和Self-Attention的区别?
3.2 Transformer是如何进行堆叠的?
原文提到了Encoder与Decoder是可以进行 N × N\times N× 堆叠的,那么堆叠之后的结构是什么?可以看到这就是堆叠之后的结构,这里的features是中间编码,6层decoder,每一层都需要拿features作为输入的一部分,这种设计思想也类似于ResNet。

图1 —— 来自参考文章[1]
再看到原始的Transformer结构图中,对Outputs提到了一个(shifted right),这是什么意思?参考文章[4]中的动图诠释了这一点,shifted right是说不停的拿最新的预测词作为Outputs的输入,其实仔细想想,你写文章也绝对不可能是写下一个词语而不依赖上一句,一定是有前文的信息作为输入,才能让你流畅的写出下一个词语的,聊天在一定程度上就是拽着话头,话赶话。

图2 —— 来自参考文章[4]
3.3 如何理解Positional Encoding?
“需要使用Positional Encoding的原因也很简单,因为 Transformer 摈弃了 RNN 的结构,因此需要一个东西来标记各个字之间的时序,换言之,也即位置关系,而这个东西,就是位置嵌入”[2],文章[2]又说,理想情况下,位置嵌入的设计应该满足以下条件:
- 它应该为每个字输出唯一的编码
- 不同长度的句子之间,任何两个字之间的差值应该保持一致
- 它的值应该是有界的
先来看到文章中的Positional Encoding公式:
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) PE(pos, 2i)=sin(\frac{pos}{10000^\frac{2i}{d_{model}}}) PE(pos,2i)=s