李宏毅2021春机器学习课程笔记——Transformer模型

本文作为自己学习李宏毅老师2021春机器学习课程所做笔记,记录自己身为入门阶段小白的学习理解,如果错漏、建议,还请各位博友不吝指教,感谢!!


本笔记中所涉及的Layer Normalization和Self-Attention笔记如下:

Layer Normalization
Self-Attention


Transformer模型

Transformer模型是一个基于多头自注意力序列到序列模型(seq2seq model),整个网络结构可以分为编码器(Encoder)和解码器(Decoder)两部分。

这个seq2seq模型输出序列的长度是不确定的。我们输入一个sequence后,先由Encoder负责处理,再把处理好的结果输入到Decoder中,由Decoder决定最后输出什么样的sequence。Transformer的完整结构如下图所示:


Encoder

在seq2seq模型中的Encoder要做的事情就是输入一排向量,输出另一排向量。能实现输入一排向量,输出一排向量功能的模型有Self-attention、CNN和RNN等模型,而Transformer中用得到的则是Multi-Head attention模型

如上图所示,Transformer中有N个block,每个block中包含了Multi-Head Attention和Fully Collection的前馈网络,它要做的工作如下图所示:

  • 先做一个self-attention,输入一排向量,经过self-attention考虑整个sequence的资讯后,输出另外一排向量。
  • 接下来将输出的这一排向量输入到fully connected的前馈网络中,得到处理后的向量。

上述两个步骤,仅仅是描述了block中完成的大体工作。Transformer中,在self-attention和fully collected上还额外加了residual connection和layer normalization


Residual Connection & Layer normalization

在self-attention中,输入一排向量,输出的一排向量是考虑了所有input之后的结果。在Transformer中,这个输出的向量 a a a还要直接加上它对应的输入向量 b b b,然后经过Layer Normalization后,才是这个self-attention最终的输出

在这里插入图片描述
在fully connected中也增加了同样的residual网络结构,FC网络的输出先直接加上它对应的输入,然后经过layer normalization之后才是FC网络最终的输出。


Encoder总结

  • 在将输入向量进行self-attention之前,先加上Positional Encoding,也就是输入向量中的位置信息。
  • Multi-Head Attention:进行Multi-Head的self-attention处理得到输出向量。
  • Add & Norm (residual & layer normalization): 也就是将self-attention的输出加上它对应的输入然后对其进行Layer Normalization。
  • Feed Forward:将上一层的输出输入到fully connected中,将得到的输出向量同样经过residual & layer normalization操作后得到该block的最终输出。
  • 将这个block重复n次。

Decoder

Decoder分为Auto regressive(AT)和Non-Auto regressive(NAT)两种。其中AT应用范围更为广泛一些。

Auto regressive(AT)

以语音辨识为例,假设我们要处理的这个NLP问题,每一个Token都用One-Hot的Vector表示,并假设START和END两个special token,其中START表示开始工作,END表示结束工作

  • 在Encoder完成之后,将其输出作为一个输入喂到Decoder中。
  • 同时,输入一个special token:START表示开始工作。
  • Decoder结合这两个输入,输出一个经过softmax处理后的长度为Vocabulary Size的输出向量,该向量中每一个中文字都对应一个数值,数值最大的中文字为最终输出的中文字,下图中,输出的结果是“机”。

接下来,将“机”对应的向量作为Decoder的输入,做下一步计算。这样Decoder会考虑下边两个输入,得出蓝色的输出向量。

  • START对应的向量
  • “机”对应的向量

蓝色向量中“器”对应的softmax值最高,输出“器”。接下来,将“器”对应的向量也作为Decoder的输入,这样Decoder会考虑下边三个输入,得出绿色的输出向量。

  • START对应的向量
  • “机”对应的向量
  • “器”对应的向量

绿色的向量中“学”对应的softmax的值最高,输出“学”。持续这样的过程直到Decoder输出的结果为END对应的向量结束。当然整过过程中Decoder也有考虑Encoder的输出信息,这个后边具体再介绍。如上便是Decoder的计算过程。

Decoder具体结构

如上图所示,通过对比可以看出在每一个block中Decoder比Encoder多了中间的一个Multi-Head Attention,同时第一个自注意力机制使用的是Masked Multi-Head Attention

Masked Multi-Head attention

Masked Multi-Head attention的计算顺序其实是和Decoder的串行计算顺序相对应的,以上边左图中计算 b 2 b^2 b2为例:
我们在计算 b 2 b^2 b2的时候,和原来的self-attention考虑所有输入信息 [ a 1 , a 2 , a 3 , a 4 ] [a^1, a^2, a^3, a^4] [a1,a2,a3,a4]不同,Masked Multi-Head attention只考虑 [ a 1 , a 2 ] [a^1, a^2] [a1,a2],因为此时的 [ a 3 , a 4 ] [a^3, a^4] [a3,a4]还没有计算出来。


Encoder-Decoder数据传输

Encoder和Decoder之间的数据传输由上图中的Cross Attention负责完成,也就是上边说到的Decoder中比Encoder多出来的中的那一个Multi-Head Attention。现在假设Encoder有 [ a 1 , a 2 , a 3 ] [a^1, a^2, a^3] [a1,a2,a3]三个输出。

  • 在cross attention中,首先生成对应的矩阵 [ k 1 , k 2 , k 3 ] [k^1, k^2, k^3] [k1,k2,k3]。每当Decoder生成一个结果 q q q,就将其与 [ k 1 , k 2 , k 3 ] [k^1, k^2, k^3] [k1,k2,k3]一起计算Attention Score得到 [ α 1 , α 2 , α 3 ] [\alpha^1, \alpha^2, \alpha^3] [α1,α2,α3]
  • 将得到的Attention Score分别与 [ a 1 , a 2 , a 3 ] [a^1, a^2, a^3] [a1,a2,a3]对应的 [ v 1 , v 2 , v 3 ] [v^1, v^2, v^3] [v1,v2,v3]计算相加得到输出 v v v,这个 v v v后续将输入全连接网络中进一步的计算。
  • 上述过程持续到Decoder输出END结束。

这里Decoder使用的是Encoder最后一层的输出,当然,也可以和中间的其他层做出各式各样的连接,如下图所示:

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值