This is my reading note for [NeurIPS 2017] Attention is All You Need.
Abstract
- 简单模型
- 仅依赖于注意力机制
- 更好的并行度和更少的训练时间
- 效果 balabala
BLEU Score: https://zhuanlan.zhihu.com/p/338488036
Conclusion
- 第一个做序列转录的模型(仅依赖于注意力机制)
- 把所有循环程换成了
multi-headed self-attention
- Future work: extend to image/audio/video etc.
Introduction
- Recurrent Models:
- 传统RNN:隐马尔可夫链,不好做并行(按顺序来的)存放 \(h_t\) 内存开销大
- Attention 已经被用在编码-解码器里面了
- Transformer 不再使用循环神经层,转用注意力机制:并行度高,效率高
Background
- 目标:减少时序计算 的相关工作都是用卷积来做,问题是对于长序列难建模(得卷很多次才能融合整个序列)
- 如果使用注意力机制,可以用一层
- 卷积好的地方是可以多输出通道
- -> Multi-headed attention
- end-to-end memory networks
- 相关工作
Model Architecture
编码器/解码器 Concept
机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出, 我们可以设计一个包含两个主要组件的架构: 第一个组件是一个编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。 第二个组件是解码器(decoder): 它将固定形状的编码状态映射到长度可变的序列。 这被称为编码器-解码器(encoder-decoder)架构 - from d2l.ai
- 解码器的词是一个一个生成的(auto-regressive->过去的输出作为现在的输入)
编码器和解码器结构
encoder
- 重复 6 个 layer
- 每个 layer 有两个 sub-layer
- 第一个叫做 multi-headed self attention
- 第二个实质上就是一个 MLP
- 对子层用残差连接,再来个 layer normalization
- 残差需要输入输出同维度,要不得做投影;所以每一层输出维度都是 512 :和 CNN/MLP不一样
- 调参就只调多少层就行了
- 给定二维输入, batchnorm 每次在一个minibatch中把一个特征均值变成 0 方差变成 1 (标准化?)layernorm 每次对一个样本做 normalization
- Transformer 是三维的:batch,seq和feature 情况相似
Decoder
- 解码器也重复 6 个layer
- 每个 layer 有两个子层
- 解码器塞了第三个子层:注意力机制
- layernorm
- 自回归;
- 由于注意力机制可以看到整个输出,而我们要避免这个情况(预测t时刻输出时不可以看到t时刻之后的输入)->带掩码的多头注意力,保证训练和预测时行为一致
Attention
Attention function
- set of key-value pairs to an output
- output is computed as a weighted sum of the values
- 权重实际上和 query 与每个 key 的相似度决定的,越相似权重越大
- 不同相似函数导致不同注意力机制版本
- Transformer 的相似函数是SDPA
- 对QK^T每一行(query对key的内积值)除以dk^1/2做softmax再乘V
- 矩阵乘法好并行
- 两种注意力机制;
- 除dk是因为如果两个向量比较长,点积值可能变大,差距变大,softmax之后两极分化比较严重。之后梯度就小了跑不动
- 做Mask:把\(Q_t/k_t-Q_n/k_n\)的值换成非常大的负数,softmax之后就变成0
Multi-head Attention
- \(V,K,Q\)先进入一个线性层做个投影,再进入一个 Scaled Dot-Product Attention 做 h 次合并在一起再过一个线性投影
- 先投影到一个低维度(w)
- 这里 h = 8
Applications of Attention in our model
- 编码器输入
- 自注意力机制:\(Key,Value,Query\)相同
- 输入了n个Quary,得到n个输出维度为d
- 解码器/编码器第一层自注意力都是差不多的,解码器有一个 mask
- 解码器的Key 和 Value
坏了,有点看不懂 TAT
Feed-Forward Network
Difference between Transformer and RNN
- Transformer 先用注意力机制来抓取所有序列的信息,再做 MLP 就可以分开做了。
- RNN 先单独对每个向量做 MLP,再将结果与下一个输出合并做 MLP。用这样的方式来对整个序列的信息进行利用。
Embeddings and Softmax
- 编码器和解码器都要有一个 embedding:输入是一个个的词(token)映射成一个向量(d=512)
- 权重乘了\(d_{model}^{1/2}\):学 embedding 的时候把 L2 norm 学成比较小的,乘完之后和后面的 Positional Encoding 规模相似
Positional Encoding
- RNN 本身蕴含时序信息(上一个时刻的输出作为下一个时刻的输入,本身即含有时序信息
- Transformer 得手动在输入中加时序信息 - Positional encoding
- 和嵌入层相加
Why Self-attention
- 相对于循环层和卷积层自注意力的优越性
- 比较了四种不一样的层:
- 几个指标:
- 计算复杂度(越低越好)
- 顺序计算(越少越好)
- 一个信息从一个数据点到另一个数据点的距离(越短越好)
Training
Training Data & Batching
- Standard WMT
Hardware & Schedule
Optimizer
- Adam
- Learning rate
- Warmup step
- 没啥可调的:Adam 对 lr 不敏感,时间也还行
Regularization
- 每个子层都有 Dropout. P = 0.1
Label Smoothing
- \(\epsilon_{ls} = 0.1\)
结语
- Attention 如果没有残差/MLP效果较差
-
Attention用到了一个(归纳偏置)
- 抓取信息的能力较差,需要数据较多