Transformer总结

Transformer总结


前言

该篇博客是笔者学习李宏毅老师课程后所写的学习笔记,如文中有错误,感谢大家指正

通过学习对比,李宏毅老师在Transformer模型的讲解上略逊色与李沫老师,这是学习李沫老师论文精讲的批注,共享在网盘上了
链接: https://pan.baidu.com/s/10wU6LFFlR_ir3ivOZDYufA?pwd=uwhw
提取码: uwhw


一、Sequence-to-Sequence模型

  Sequence-to-Sequence是一种输入输出均为一个序列的模型,也被简称为Seq2seq模型,它的特点是模型的输出长度是不确定的,有可能比输入长,也可能比输入短,且输出的长度由模型自己决定。
应用场景:
(1)语音辨识:模型的输入声音讯号,输出语音辨识的结果,是一段文字
(2)机器翻译:输入一段文字,输出为翻译后的另一个语种的文字
(3)语音翻译 :输入为声音讯号,输出为翻译后的文字,在语言翻译中是直接将声音信号转换成不同 语种文字,没有声音到文字,文字再翻译的中间过程
  在实际应用中,QA的问题(给定一段输入和问题,模型给出一个回答)都有机会用Seq2seq的模型来解,而为了让模型对特定的问题有更好的表现,通常会为该问题定制化一个模型而不是使用一个通用模型。

二、Transformer模型

在这里插入图片描述

  Transformer模型通常由两部分组成,一部分是encoder,另一部分是decoder。需要先将输入送入到encoder部分中,encoder模块对输入进行处理后送入decoder部门进行解码输出,

1.encoder

在这里插入图片描述

  在encoder部分,输入时一排向量,输出是一排与输入个数相同的向量,中间处理的核心就是多个self-attention叠加而成的block
在这里插入图片描述   但此处用到的self-attention是在其基础上做处理部分改动,更多的计算步骤使其能更好的找到序列间内部的联系

在这里插入图片描述在这个改动后的self-attention计算单元中,

b

b

b 计算方法和以前相同,但此处不再是直接将

b

b

b作为输出 ,而是
(1)先将对应的输出

a

a

a

b

b

b相加组成一个residual块,
(2)然后对residual块进行layer normalization处理,其过程为先计算出入向量的均值

m

m

m和标准差

σ

sigma

σ,然后对向量中的每个元素进行

x

i

=

x

i

m

σ

x_i^{'}=dfrac{x_i-m}{sigma}

xi=σxim归一化后输出。
(3)将layer normalization的输出

v

v

v送入全连接网络FC中,
(4)将其输出和

v

v

v相加再组成一个residual块,
(5)对residual块再做一个layer normalization处理后最为self-attention的最终输出。

在这里插入图片描述   此外需要注意,在一个block中,使用的是多头注意力,以达到找到内部多种不同联系的目的;在多头注意力模块输出后还需要一个residua和layer normalization的模块;将多个block组合最终组成encoder

2.decoder

2.1Autoregressive

decoder有两种形式,分别是Autoregressive和 Non Autoregressive
在这里插入图片描述   AT的一个输入和前一个输出共同觉点当前的输出,即一个一个输入、一个一个输出;而NAT是一起送入多个输入,一起返回多个输出,而输出的个数也是由模型自己决定。下面我们将介绍更为常用的Autoregressive的decoder
在这里插入图片描述

  首先把encoder的输出读到decoder中,模型自己会给decoder输入一个BEGIN(或BOS),表示此时开始,这个BEGIN将对应第一个输出。(在完成语音识别的Seq2seq模型中,输出是一个汉字,这个汉字将用一个长度为vocabulary库长度的序列表示,即vocabulary库中有多少个字该向量就有多少行,在这个输出的向量中,每个字对应一个数字,表示输出是这个字的可能性,对这个向量使用softmax使其和为1。)此时模型的BEGIN对应了第一个输出,然后将第一个输出再送入decoder中来预测下一个输出。
  上一个输出决定下一个的输入,这种方式也可能产生负面影响,即一步错步步错。
注意:decoder输出结束的个数需要机器自己决定,vocabulary中需要存一个END,表示输出结束


下面我们来了解一下decoder内部结构
在这里插入图片描述
  在decoder的block中,第一个多头注意力加上了Masked,这种Masked self-attention在计算时,每个输入不考虑它右边的信息,即

a

1

a_1

a1看不到

a

2

a_2

a2

a

3

a_3

a3

a

4

a_4

a4

a

3

a_3

a3能看到

a

1

a_1

a1

a

2

a_2

a2,在计算时也会发生响应的改变,不能被看到的输入的相关性不应被计算进去。这是因为decoder的输出是一个一个产生的,所以一个输入右边的元素此时还没有产生,它右边输入的相关性此时不能被计入其中。
在这里插入图片描述

2.2 Non Autoregressive

  下面我们简述一下Non Autoregressive形式的decoder
  Non Autoregressive 的输出和输入的个数相同,但是由于输出的个数不确定,我们不好直接确定要求输入的个数,可以用另一个预测模型来预测它的长度;或者给很长的Begin,在输出中END并不一定在最后,此时END右边预测出的部分舍弃。

Non Autoregressive的优势:平行化的输入输出,运行的更快, 比较能控制输出的长度。
Non Autoregressive的劣势:错误率更高


2.3cross attention

在这里插入图片描述

  通过对比不难发现它们最大的差别在于decoder比encoder多红框这个部分,正是这个Cross attention部分将它们连接在一起。在这里插入图片描述   Cross attention模块共有三个输入,其中两个来自encoder,一个来自deocder。
在这里插入图片描述
  encoder的输出

a

i

a^i

ai向量分别与矩阵相乘,生成向量

k

i

k^i

ki

v

i

v^i

vi,decoder的输入通过Mask SA后也和矩阵相乘生成向量

q

q

q,计算它们的相关性(过程参考self attention中

α

的计算

alpha^{'}的计算

α的计算)并送入FC后输出在这里插入图片描述
  以此类推计算后面的输出,注意第一个输入以后的decoder输入为上一个decoder的输出

3.Training过程

  在语音辨识的训练中,有一段声音讯号作为输入,对应的中文文字作为输出。训练集的标签为一段语言和对应的正确的中文,中文用独热码来表示。decoder的输出是一个概率的分布,希望不正确字符的概率越小越好,每一个输出都和正确答案计算一个交叉熵,我们希望交叉熵的总和最小。
注意:训练时decoder的输入不是由机器自己预测出来的,而是使用提供的正确答案。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>