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

image-20211213184433174

  • 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

  • 相对于循环层和卷积层自注意力的优越性
  • 比较了四种不一样的层:
  • image-20211214184952178
  • 几个指标:
    • 计算复杂度(越低越好)
    • 顺序计算(越少越好)
    • 一个信息从一个数据点到另一个数据点的距离(越短越好)

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用到了一个(归纳偏置)

  • 抓取信息的能力较差,需要数据较多

Categories:

Updated: