nlp-keypoints
  • 前言
  • 中文NER掠影
    • overview
    • LatticeLSTM
    • WC-LSTM
    • SoftLexicon
    • FLAT
    • LEBERT
    • 中文NER总结
  • Embedding知识板块
    • Word2Vec
    • Transformer
    • Bert
    • XLNet
    • Albert
    • Roberta
  • ML/DL基础板块
    • 特征工程
    • 初始化
    • 激活函数
    • 正则化
    • Dropout
    • 损失函数
    • 优化方法
    • Attention
    • CNN
    • LSTM
    • CRF
    • Jieba分词原理
    • 其他统计学习
  • 知识图谱板块
    • Brat标注
    • NER
    • NRE
    • 远程监督
    • 事件图谱/事理图谱
  • 文本分类知识板块
    • FastText
    • TextCNN
    • DPCNN
  • 相似匹配板块
    • Ranking Loss
    • 匹配模型
  • 树模型知识板块
    • 决策树考点
    • Bagging vs Boosting
    • GBDT考点
    • Xgboost
  • 面试复盘整理
    • MM科技
    • V哥面的知识图谱
    • HS
    • HSJY
    • HM医疗
    • 平安科技
    • M科技
由 GitBook 提供支持
在本页
  • 问题1:请你谈一谈Transformer?
  • 问题2:Transformer结构是什么样的?
  • 2.1 Encoder端
  • 2.2 Decoder端
  • 2.3 其他细节部分
  • 问题3:Self-Attention什么作用?为什么强大?
  • 子问题3.1:Self-Attention与RNN相比捕捉远端依赖?
  • 问题4:为什么使用多头?使用多头Attention的作用?
  • 问题5:Self-Attention中为什么要做Scaled?作用是什么?
  • 问题6:Transformer与seq2seq比优势在与什么?
  • 问题7:Transformer 相比于 RNN/LSTM,有什么优势?为什么?

这有帮助吗?

  1. Embedding知识板块

Transformer

上一页Word2Vec下一页Bert

最后更新于5年前

这有帮助吗?

本部分整理Transformer相关的的知识点内,2018年之后做NLP的如果说自己不会bert,恐怕是入行都是又困的,Transformer的Encoder正是Bert的基本组件。

参考资料:

另外一经典Blog:

上面经典blog的翻译:

问题1:请你谈一谈Transformer?

Transformer是谷歌提出的完全用Attention进行特征提取的模型,模型是个典型的seq2seq模型,其中Encoder由若干个(多头self-attention和FFN)组成,Decoder由多头self-attention、多头Encoder-Decoder Attention、和FFN组成。为了能够训练序列的顺序信息,在Input中用sin-cos的方式对序列进行了编码。

对于Encoder是可以并行编码,在Decoder中通过mask的方式进行shift-right解码。

问题2:Transformer结构是什么样的?

模型总览:

2.1 Encoder端

由 N(原论文中N=6)个相同的Block堆叠而成,其中每个Block又由两个子模块构成:

  • 多头 self-attention 模块

  • 前馈神经网络模块

注意:

  1. 第一个Block(最底下的那个)接收的输入是输入序列的 embedding(embedding 可以通过 word2vec 预训练得来);

  2. 其余Block接收的是其前一个Block的输出;

  3. 最后一个Block的输出作为整个 Encoder 端的输出。

2.2 Decoder端

由 N(原论文中N=6)个相同的Block堆叠而成,其中每个大模块则由三个子模块构成:

  • 多头 self-attention 模块

    • Q, K, V都是相同的

  • 多头 Encoder-Decoder attention 交互模块

    • Q是self-attetion的输出

    • K,V是来自于Encoder的输出

  • 前馈神经网络模块

注意:

  1. 第一个Block(最底下的那个)训练时和测试时的接收的输入是不一样的:

    • 训练时:接收的输入一次送入整个Embedding,每个step通过Mask掉Self-Attention的方式实现shifted right;特别地,当step为1时,其输入为特殊的token:可能是目标序列开始的token,也可能源序列结束的token,也可能是其他(视其他任务而定)

    • 测试时:先生成第1个step的位置的输出,第二次预测时,再将其加入输入序列,以此类推直至预测结束

  2. 其余Block接收的是同样是其前一个Block的输出;

  3. 最后一个模块的输出作为整个Decoder端的输出。

2.3 其他细节部分

  1. FFN模块

    在标准Transformer中,是用relu激活的;在Bert中,是用gelu激活的;

  2. add & Norm部分

    • Add 表示残差连接(详见:XX)

    • Norm 表示 LayerNorm(详见:XX)

    残差连接来源于论文Deep Residual Learning for Image Recognition[1],LayerNorm 来源于论文Layer Normalization[2]。

  3. Position Embedding

    使用不同频率的正弦和余弦函数,公式如下:

    注意:

    • Transformer的Position Embedding不是学习来的,是直接计算来的;

    • Bert中的Position Embedding可是通过预训练过程中训练得到的。

问题3:Self-Attention什么作用?为什么强大?

self-attention,是一种通过自身和自身相关联的 attention 机制,从而得到一个更好的 representation 来表达自身,self-attention 可以看成一般 attention 的一种特殊情况,是Soft-Attention分类下的。

在 self-attention 中,序列中的每个单词(token)和该序列中其余单词(token)进行 attention 计算。self-attention 的特点在于:

无视词(token)之间的距离直接计算依赖关系,从而能够学习到序列的内部结构,且实现起来也比较简单。

子问题3.1:Self-Attention与RNN相比捕捉远端依赖?

  • RNN 或者 LSTM:需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小;

  • Self Attention:会更容易捕获句子中长距离的相互依赖的特征,且计算简单,不用依靠时间步骤的累积,直接建立起两者间的联系

问题4:为什么使用多头?使用多头Attention的作用?

Transformer网络由多个层组成,每个层都由多头注意力机制和前馈网络构成。由于在全局进行注意力机制的计算,忽略了序列中最重要的位置信息。Transformer为输入添加了位置编码(Positional Encoding),使用正弦函数完成,为每个部分的位置生成位置向量,不需要学习,用于帮助网络学习其位置信息。

问题5:Self-Attention中为什么要做Scaled?作用是什么?

参考材料:

在数量级比较大的时候,softmax会把概率全部分配给了最大值,趋近于得到一个One-Hot的向量,进而导致SoftMax的梯度消失,造成更新困难。证明如下:

因此,结合上面的推导,可以得到:

然后我们看,这样趋向于输出One-Hot对于梯度的影响。

把这个矩阵展开:

根据前面,当X元素都比较大的时候,会产生一个近似One-Hot的向量,那么此时,上面的矩阵就近似为0了。

下面再看维度与点积之间得到关系,为什么用维度的根号来缩放?

那么,则有:

将方差控制为1,也就有效地控制了前面提到的梯度消失的问题。

问题6:Transformer与seq2seq比优势在与什么?

seq2seq 最大的问题在于:将 Encoder 端的所有信息压缩到一个固定长度的向量中,并将其作为 Decoder 端首个隐藏状态的输入,来预测 Decoder 端第一个单词(token)的隐藏状态。

  • 在输入序列比较长的时候,这样做显然会损失 Encoder 端的很多信息;

  • 而且这样一股脑的把该固定向量送入 Decoder 端,Decoder 端不能够关注到其想要关注的信息。

问题7:Transformer 相比于 RNN/LSTM,有什么优势?为什么?

  1. RNN系列的模型并行计算能力比较差

    • 因为RNN的建模过程是当前Cell依赖于上一个Cell的输出,必须序列建模才能抽取到信息特征;

    • 而Transformer的Encoder的Self-Attention是可以无视序列的step顺序关系,建模整个query的依赖关系,所以是可以并行执行的

  2. Transformer特征提取能力从在一些主流任务的实验表现优于RNN系列

    • 因为Transformer一定程度上,通过self-attention的方式,摒弃了RNN系列step-by-step的建模方式,可以通过直接计算Attention的weight的方式来建模,从一定程度上能够强化更长远依赖的建模能力;但这并不表明可以无脑Transformer,遇到任务还是需要具体问题具体分析。

Attention(Q,K,V)=Softmax(QKTdk)⋅VAttention(Q,K,V)=Softmax\bigg(\frac{QK^T}{\sqrt{d_k} }\bigg) \cdot VAttention(Q,K,V)=Softmax(dk​​QKT​)⋅V
FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_1+b_1)W_2+b_2FFN(x)=max(0,xW1​+b1​)W2​+b2​
Output=LayerNorm(x+Sublayer(x))Output = LayerNorm(x+Sublayer(x))Output=LayerNorm(x+Sublayer(x))
PE(pos,2i)=sin(pos100002i/dim)PE(pos,2i+1)=cos(pos100002i/dim)\begin{align} PE_{(pos,2i)} &= sin \bigg( \frac{pos}{10000^{2i/dim}} \bigg) \\ \\ PE_{(pos,2i+1)} &= cos \bigg( \frac{pos}{10000^{2i/dim}} \bigg) \end{align}PE(pos,2i)​PE(pos,2i+1)​​=sin(100002i/dimpos​)=cos(100002i/dimpos​)​​

假设固定输入X∈RnX\in R^nX∈Rn不变,变化参数β\betaβ,假设输入XXX中有唯一的最大值xkx_kxk​,则有:

limβ→+∞σβ(X)i=limβ→+∞exp(βxi)∑j=1nexp(βxj)=limβ→+∞11+∑j=1,j≠inexp(β(xj−xi))\begin{align} \mathop{lim}\limits_{\beta \to + \infty}\sigma_\beta(X)_i &= \mathop{lim}\limits_{\beta \to + \infty} \frac{exp(\beta x_i)}{\sum_{j=1}^n exp(\beta x_j)} \\ \\ &= \mathop{lim}\limits_{\beta \to + \infty} \frac{1}{1 + \sum_{j=1,j \ne i}^n exp\Big( \beta (x_j - x_i)\Big)} \end{align}β→+∞lim​σβ​(X)i​​=β→+∞lim​∑j=1n​exp(βxj​)exp(βxi​)​=β→+∞lim​1+∑j=1,j=in​exp(β(xj​−xi​))1​​​

不妨设g(X,β,i)=∑j=1,j≠inexp(β(xj−xi))g(X,\beta,i)=\sum^n_{j=1,j \ne i} exp \Big(\beta (x_j - x_i)\Big)g(X,β,i)=∑j=1,j=in​exp(β(xj​−xi​)),可以分类讨论一下:

当i=ki=ki=k,则∀j≠i,xj−xi<0\forall j \ne i, x_j-x_i<0∀j=i,xj​−xi​<0,此时:

limβ→+∞g(X,β,i)=0\mathop{lim}\limits_{\beta \to + \infty}g(X,\beta,i)=0β→+∞lim​g(X,β,i)=0

当i≠ki\ne ki=k,则∃j≠i,xj−xi>0\exists j \ne i, x_j-x_i>0∃j=i,xj​−xi​>0,此时:

limβ→+∞g(X,β,i)=+∞\mathop{lim}\limits_{\beta \to + \infty}g(X,\beta,i)=+\inftyβ→+∞lim​g(X,β,i)=+∞
limβ→+∞σβ(X)i={1,i=k0,i≠k\mathop{lim}\limits_{\beta \to + \infty} \sigma_\beta(X)_i= \left\{\begin{align}1,i=k\\\\0,i\ne k\end{align}\right.β→+∞lim​σβ​(X)i​=⎩⎨⎧​1,i=k0,i=k​​

即,当β\betaβ取无穷大时,非标准softmax的输出收敛到一个one-hot向量,其中最大输入对应的输出值是1,其他输出是0。

不妨简记softmax函数为g(⋅)g(\cdot)g(⋅),softmax得到的分布向量y^=g(X)\hat y=g(X)y^​=g(X)。对于输入XXX的梯度为:

∂g(X)∂X=diag(y^)−y^y^T\frac{\partial g(X)}{\partial X}=diag(\hat y)-\hat y \hat y^T∂X∂g(X)​=diag(y^​)−y^​y^​T

假设向量qqq和kkk的各个分量是互相独立的随机变量,均值是0,方差是1,那么点积q⋅kq \cdot kq⋅k的均值是0,方差是dkd_kdk​。下面是推导:

对于∀i=1,...,dk\forall i=1,...,d_k∀i=1,...,dk​,qiq_iqi​和kik_iki​都是随机变量,为了方便书写,不妨记X=qiX=q_iX=qi​,Y=kiY=k_iY=ki​。这样有:D(X)=D(Y)=1D(X)=D(Y)=1D(X)=D(Y)=1,E(X)=E(Y)=0E(X)=E(Y)=0E(X)=E(Y)=0

E(XY)=E(X)E(Y)=0×0=0E(XY)=E(X)E(Y)=0\times 0 =0E(XY)=E(X)E(Y)=0×0=0

D(XY)=E(X2⋅Y2)−[E(XY)]2=E(X2)E(Y2)−[E(X)E(Y)]2=E(X2−[E(X)]2)E(Y2−[E(Y)]2)−[E(X)E(Y)]2=D(X)D(Y)−[E(X)E(Y)]2=1×1−(0×0)2=1\begin{align} D(XY) &= E(X^2\cdot Y^2)-[E(XY)]^2 \\ &= E(X^2)E(Y^2) - [E(X)E(Y)]^2 \\ &= E(X^2 -[E(X)]^2)E(Y^2 -[E(Y)]^2)-[E(X)E(Y)]^2 \\ &= D(X)D(Y)-[E(X)E(Y)]^2 \\ &= 1 \times 1 - (0 \times 0)^2 \\ &= 1 \end{align}D(XY)​=E(X2⋅Y2)−[E(XY)]2=E(X2)E(Y2)−[E(X)E(Y)]2=E(X2−[E(X)]2)E(Y2−[E(Y)]2)−[E(X)E(Y)]2=D(X)D(Y)−[E(X)E(Y)]2=1×1−(0×0)2=1​​

这样∀i=1,...,dk\forall i=1,...,d_k∀i=1,...,dk​,qi⋅kiq_i \cdot k_iqi​⋅ki​的均值是0,方差是1。又由期望和方差的性质,对相互独立的分量ZiZ_iZi​,有:

E(∑iZi)=∑iE(Zi)D(∑iZi)=∑iD(Zi)E(\sum_i Z_i)=\sum_i E(Z_i) \\ \\ D(\sum_i Z_i)=\sum_i D(Z_i) \\E(i∑​Zi​)=i∑​E(Zi​)D(i∑​Zi​)=i∑​D(Zi​)

所以有q⋅kq \cdot kq⋅k的均值是E(q⋅k)=0E(q \cdot k)=0E(q⋅k)=0,方差D(q⋅k)=dkD(q \cdot k)=d_kD(q⋅k)=dk​。方差越大也就说明,点积的数量级越大(以越大的概率取大值)。那么一个自然的做法就是把方差稳定到1,做法是将点积除以dk\sqrt{d_k}dk​​ ,这样有:

D(q⋅kdk)=dk(dk)2=1D(\frac{q \cdot k}{\sqrt{d_k}})=\frac{d_k}{(\sqrt{d_k})^2}=1D(dk​​q⋅k​)=(dk​​)2dk​​=1
https://www.zhihu.com/question/339723385/answer/811341890
https://zhuanlan.zhihu.com/p/79585726
https://mp.weixin.qq.com/s/lPXlsXX0eS0EYBBNjqSBZA
https://jalammar.github.io/illustrated-transformer/
https://zhuanlan.zhihu.com/p/59629215