大名鼎鼎的Transformer,Attention Is All You Need
Transformer概览
论文结构
总览结构
图解总览
其实也是一个Encoder-Decoder
的翻译模型。
由一个Encoders和一个Decoders组成。
Encoders由多个Encoder块组成。
Encoder
总体结构
1个Encoder由Self-Attention和FFN组成
一个Encoder的结果再给到下一个Encoder
Encoder-Decoder
编码实例
对一个句子进行编码
Self-Attention
会对每一个单词进行编码,得到对应的向量。\(\mathbf{x_1}, \mathbf{x_2}, \mathbf{x_3} \to \mathbf{z_1}, \mathbf{z_2}, \mathbf{z_3}\),再给到FFN,会得到一个Encoder的结果\(\mathbf{r_1}, \mathbf{r_2}, \mathbf{r_3}\), 再继续给到下一个Encoder
Attention
Self-Attention
1. 乘以3个矩阵生成3个向量:Query、Key、Value
2. 计算与每个位置的score
编码一个单词时,会计算它与句子中其他单词的得分。会得到每个单词对于当前单词的关注程度。
3. 归一化和softmax得到每个概率
4. 依概率结合每个单词的向量
Attention图示
矩阵形式
其实就是一个注意力矩阵公式
多头注意力
其实就是多个KV注意力。从两个方面提升了Attention Layer
的优点
- 让模型能够关注到句子中的各个不同位置
- Attention Layer可以有多个不同的表示子空间
representation subspaces
多头注意力矩阵形式
经过多头注意力映射,会生成多个注意力\(Z_0, Z_1, \cdots, Z_7\)。
把这些注意力头拼接起来,再乘以一个大矩阵,最终融合得到一个信息矩阵。会给到FFN进行计算。
注意力总结
Attention图示
前向神经网络
Position-wise Feed-Forward Network
,会对每个位置过两个线性层,其中使用ReLU作为激活函数。 \[
\rm{FFN}(x) = \rm{Linear}(\rm{ReLU}(\rm{Linear}(x))) = \rm{max}(0, xW_1 + b_1)W_2 + b_2
\]
位置编码
词向量+位置信息=带位置信息的词向量 \[ \rm{PE}(pos, 2i) = \sin (\rm{pos} / 10000^{\frac{2i}{d}}) \]
\[ \rm{PE}(pos, \rm{2i+1}) = \cos (\rm{pos} / 10000^{\frac{2i}{d}}) \]
示例
再把sin和cos的两个值拼接起来,就得到如下图所示。