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′?=σxi??m?归一化后输出。 (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的输入不是由机器自己预测出来的,而是使用提供的正确答案。
|