【P5】Attention Is All You Need

1 模型

Transformer 是基于经典的Encoder-Decoder架构:

  • Encoder 的输入由 Input Embedding 和 Positional Embedding 求和组成。

  • Decoder 的初始输入由 Output Embedding 和 Positional Embedding 求和得到。

上图中 Nx 框出来的部分是 Encoder/Decoder 的一层,Transformer 中 Encoder 和 Decoder 各有6层。

2 Attention机制

2.1 Scaled Dot-Product Attention

 Attention  ( Q , K , V ) = softmax ⁡ ( Q K T d k ) V \text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V  Attention (Q,K,V)=softmax(dk QKT)V
具体计算步骤见:NLP中的Attention机制,这里打分采用缩放点积模型。

公式 Q K T Q K^{T} QKT, 其实就会组成一个word2word的attention map(加了softmax之后就是一个合为1的权重了)。比如说你的输入是一句话 “i have a dream” 总共4个单词,这里就会形成一张4x4的注意力机制的图:

注意:encoder里面是叫self-attention,decoder里面是叫masked self-attention。

masked就是要在做language modelling(或者像翻译)的时候,不给模型看到未来的信息(沿着对角线把灰色的区域用0覆盖掉):

详细来说,i作为第一个单词,只能有和i自己的attention。have作为第二个单词,有和i, have 两个attention。 a 作为第三个单词,有和i,have,a 前面三个单词的attention。到了最后一个单词dream的时候,才有对整个句子4个单词的attention。

做完softmax后就像这样,横轴合为1

2.2 Multi-Head Attention

Multi-Head Attention就是把Scaled Dot-Product Attention的过程做H次,然后把输出Z合起来,结构如下:

 MultiHead  ( Q , K , V ) =  Concat  (  head  1 , … ,  head  h ) W O  where head  i =  Attention  ( Q W i Q , K W i K , V W i V ) \begin{aligned} \text { MultiHead }(Q, K, V) &=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} \\ \text { where head }_{\mathrm{i}} &=\text { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) \end{aligned}  MultiHead (Q,K,V) where head i= Concat ( head 1,, head h)WO= Attention (QWiQ,KWiK,VWiV)

具体计算步骤见:NLP中的Attention机制

3 结构

3.1 Positional Encodings

因为模型不包括Recurrence/Convolution,因此是无法捕捉到序列顺序信息的,例如将K、V按行进行打乱,那么Attention之后的结果是一样的。但是序列信息非常重要,代表着全局的结构,因此必须将序列的分词相对或者绝对position信息利用起来。

positional encodings的计算公式如下:
P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d model  ) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d model  ) \begin{aligned} P E_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(p o s, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \end{aligned} PE(pos,2i)PE(pos,2i+1)=sin(pos/100002i/dmodel )=cos(pos/100002i/dmodel )其中,pos 是 position,i 是 dimension。

Position Embedding本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google选择前述的位置向量公式的一个重要原因是,由于我们有:

这表明位置p+k的向量可以表示成位置p的向量的线性变换,这提供了表达相对位置信息的可能性。

3.2 Position-wise Feed-forward Networks

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出:
F F N ( x ) = W 2 σ ( W 1 x ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 \begin{aligned} F F N(x)&=W_{2} \sigma\left(W_{1} x\right)\\ &=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2} \end{aligned} FFN(x)=W2σ(W1x)=max(0,xW1+b1)W2+b2其中每一层的参数都不同。

为什么是两层的前馈神经网络:只有至少两层的前馈神经网络才能拟合任意的函数(单层的不可以——如只有一层的感知器)。

3.3 Encoder

Encoder 由 6 个相同的层组成,每个层包含 2 个部分:

  • sub-layer1:Multi-Head Self-Attention
  • sub-layer2:Position-Wise Feed-Forward Network,全连接网络

残差网络出处:ResNet

  • 原理:假如输入为x,要得到的输出为H(x)。那么可以通过 H(x) = F(x) + x,转换为学习F(x)。等得到F(x)后,在此基础上加上X即可得H(x)。
  • 解决"网络退化"的机理:
    1. 恒等映射的梯度为1,保证深层的梯度顺畅回传
    2. 传统线性网络难以拟合"恒等映射",即什么都不做

每个sub-layer都模拟了残差网络,每个sub-layer的输出都是:
L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x))

其中Sublayer(x) 表示Sub-layer对输入 x 做的映射,为了确保连接,所有的sub-layers和embedding layer输出的维数都相同,为 d m o d e l d_{model} dmodel

3.4 Decoder

和 Encoder 相似,Decoder 也是由 6 个相同的层组成,每个层包含 3 个部分:

  • sub-layer1:Masked Multi-Head Self-Attention

mask机制的原理:在 decoder 端, 预测的信息是基于encoder 与以及已预测出的单词
mask机制的目的:保证训练时位置 i i i 的预测仅仅依靠位置 i i i 之前的输出,即在生成当前词的时候不会注意到之后的词
参考:Transformer 源码中 Mask 机制的实现

  • sub-layer2:Multi-Head Context-Attention(Encoder-Decoder Attention)

Encoder输出结果跟Decoder第一部分输出结果之间做Attention。
Q为decoder中第一部分的输出,K,V均为encoder的输出。

  • sub-layer3:Position-Wise Feed-Forward Network,全连接网络,与encoder中的相同

Transformer的Decoder的输入输出:Transformer的Decoder的输入输出都是什么

3.5 The Final Linear and Softmax Layer

decoder组件最后会输出一个实数向量,但我们需要得到一个单词:这便是线性变换层(Linear Layer)要做的工作,它之后就是Softmax层。

  • Linear Layer:是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的、被称作对数几率(logits)的向量里。

不妨假设我们的模型从训练集中学习一万个不同的英语单词(我们模型的“输出词表”)。因此对数几率向量为一万个单元格长度的向量——每个单元格对应某一个单词的分数。

  • Softmax Layer:把那些分数变成概率(均为正数、上限1.0)。概率最高的单元格被选中,并且它对应的单词被作为这个时间步的输出。

4 Decode流程演示

decoder从处理输入序列开始。然后,最顶层encoder的输出被转化为一组注意力向量K和V,这些向量要被每个decoder在其 "Encoder-Decoder Attention"层中使用,它帮助decoder将注意力集中在输入序列中的适当位置:
在这里插入图片描述
下面的步骤重复这个过程,直到达到一个特殊的符号(&lend of sentence>),表示decoder已经完成了输出。每一步的输出都会在下一个时间步骤中被输入到最底层的decoder中:
在这里插入图片描述

5 训练过程总结

模型的输出词表在训练之前的预处理流程中就被设定好。假设我们的输出词汇仅仅包含六个单词:“a”, “am”, “i”, “thanks”, “student”以及 “<eof>”(end of sentence的缩写形式)。例如根据输出词表得到"am"的one-hot编码:

损失函数

例如我们正在训练模型——把“merci”翻译为“thanks”。即我们想要一个表示单词“thanks”概率分布的输出。

(untrained)模型产生的概率分布在每个单元格/单词里都赋予了随机的数值。我们可以用真实的输出(correct and desired output)来比较它,然后用反向传播算法来略微调整所有模型的权重,生成更接近结果的输出:

我们的目标输出:

在一个足够大的数据集上训练模型足够长的时间后,我们希望生成的概率分布看起来像这样:

Reference

  1. 细讲 | Attention Is All You Need
  2. The Illustrated Transformer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值