论文笔记:Transformer

一、这篇论文解决什么问题

序列转录:具体到论文中,就是机器翻译任务

之前一般如何解决:Encoder-Decoder + CNN/RNN + Attention

本文:只用Attention

二、模型架构

论文笔记:Transformer_第1张图片

基础架构:Encoder-Decoder

  1. Encoder和Decoder其实都是一些相同层的堆叠
  2. Encoder中,z=(x_{1},x_{2},...,x_{n})一次性生成
  3. Decoder中,(y_{1},y_{2},...,y_{m})依次生成:z\rightarrow y_{1}z,y_{1}\rightarrow y_{2}z,y_{1},y_{2}\rightarrow y_{3}...

Embedding和Softmax

  1. 在Encoder输入、Decoder的输入以及Decoder的Linear需要Embedding
  2. 这些Embedding共享权重
  3. 权重需要乘以\sqrt{d_{model}}:训练的过程中,\left \| W \right \|会变小,通过这样的方式可以扩大权重,这样和Positional Encoding的权重就在同一个规模上

论文笔记:Transformer_第2张图片

Positional Encoding

Positional Encoding的功能是在输入时添加时序信息:attention虽然能够提取序列的信息,但是不会提取时序信息(假设词的顺序打乱,顺序会变,但attention提取的信息不受影响)

本质上是用长度为d_{model}的向量表示一个词的位置

Attention

一般的Attention(query、key、value)

  1. 输出是value的加权和
  2. value的权重:根据query和key的相似度得到的(相似度的计算可以有多种方式)

Transformer中的Attention特殊在哪里

Scaled Dot-Product Attention

论文笔记:Transformer_第3张图片

Attention(Q,K,V) = softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V

  1. 相似度使用点积
  2. 为什么要除以\sqrt{d_{k}}:当d_{k}比较大的时候,点积的结果可能会很大,梯度会变得比较小,所以要缩小点积的结果
  3. 如何做mask:在计算权重即计算softmax值的时候,希望部分权重为0,具体操作是在做softmax之前将需要mask的位置设置成很大的负数

Multi-Head Attention

论文笔记:Transformer_第4张图片

 MultiHead(Q,K,V) = Concat(head_{1},...,head_{h})W^OW^{O}\in \mathbb{R}^{hd_{v}\times d_{model}}

其中head_{i} = Attention(Q_{i}^{'}, K_{i}^{'}, V_{i}^{'})=Attention(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V})W_{i}^{Q}\in \mathbb{R}^{d_{model}\times d_{k}}W_{i}^{K}\in \mathbb{R}^{d_{model}\times d_{k}}W_{i}^{V}\in \mathbb{R}^{d_{model}\times d_{v}}

本文的base模型:h=8, d_{model}=512, d_{k}=d_{v}=d_{model}/h=64

执行过程:

  1. 通过一个线性层,将原始的query、key、value投影到较低的维度
  2. 然后做h次scaled Dot-Product Attention
  3. 将上述结果进行拼接
  4. 再通过一个线性层,将拼接向量再次投影到原来的维度

可以看出,如果不做MultiHead,直接做Dot-Product Attention,其实没什么可以学习的参数,而在MultiHead的操作中,两次线性层的投影是可以学习到一些参数的

Transformer中的Attention如何应用

论文笔记:Transformer_第5张图片

1. Multi-Head Self Attention

这个Attention在Encoder中,Q,K,V其实是同一个东西,维度为n\times d_{model},经过投影后,Q^{'},K^{'}的维度均为n\times d_{k}V^{'}的维度为n\times d_{v},得到的每一个head的输出维度为n\times d_{v},拼接之后的维度为n\times hd_{v},经过再次投影输出维度为n\times d_{model}

2. Masked Multi-Head Self Attention

这个Attention在Decoder中,与Encoder中的Multi-Head Self Attention不同的是:增加了mask操作;Q,K,V的维度均为m\times d_{model},m不一定等于n

3. Multi-Head Attention

这个Attention在Decoder中,不是Self Attention,其中K,V是同一个东西,都来自于Encoder的输出,维度为n\times d_{model}Q来自于Decoder中Masked Multi-Head Self Attention的输出,维度为m\times d_{model},经过投影后,Q^{'}的维度为m\times d_{k}K^{'}的维度为n\times d_{k}V^{'}的维度为n\times d_{v},得到的每一个head的输出维度为m\times d_{v},拼接之后的维度为m\times hd_{v},经过再次投影输出维度为m\times d_{model}

LayerNorm

Transformer的Normalization方法是LayerNorm

LayerNorm和BatchNorm的区别:

  1. LayerNorm:针对每个样本;序列长度变化较大的情况下,均值、方差抖动很小
  2. BatchNorm:针对每个特征;序列长度变化较大的情况下,均值、方差抖动很大

论文笔记:Transformer_第6张图片

Position-wise Feed-Forward Networks

FFN(x) = max(0, xW_{1} + b_{1})W_{2}+b_{2}

  1. 两层全连接
  2. max部分:ReLU
  3. FFN处理前后维度不变:W_{1}(512\rightarrow 2048), W_{2}(2048\rightarrow 512)
  4. 为什么是position-wise:attention之后,已经全局地抽取了序列中的信息,这里用MLP只是做一个语义空间的转换(与此不同的是,RNN每个时间步上并没有全局性地拿到序列的信息,因此每次都需要边抽取序列信息边做语义空间的转换)

三、训练时的核心细节——正则化

Residual Dropout

对每一个带权重的层都是用的dropout,P_{drop}=0.1

1. 在子层输出上添加dropout

论文笔记:Transformer_第7张图片

2. 在embedding的和上增加dropout

论文笔记:Transformer_第8张图片

Label Smoothing

\varepsilon _{ls}=0.1意思就是,对于正确的label,softmax的输出超过0.1即可(说明对置信度的要求很低)

四、这篇论文base模型和big模型的超参

model N d_{model} d_{ff} h d_{k} d_{v} P_{drop} \epsilon _{ls} train\_steps
base 6 512 2048 8 64 64 0.1 0.1 100K
big 6 1024 4096 16 64 64 0.3 0.1 300K

 

PS:本文大部分公式和图片都来自于,对本文的理解来自于对论文Attention Is All You Need的学习及对李沐大神讲解李沐大神讲解的学习,有理解不对的地方,欢迎指正 

你可能感兴趣的:(论文笔记,NLP,论文阅读,深度学习,人工智能,transformer)