Transformer
它是一个Sequence-to-sequence(Seq2seq)模型,输入一个序列,输出也是一个序列,但是输出序列的长度不知道,是由机器决定的。
Seq2seq可以解决语音识别、机器翻译、语音翻译、QA、文法剖析、多标签分类等问题。
Seq2seq模型有两部分,分别为Encoder和Decoder。
Encoder
Encoder是给出一排向量,然后输出另一排向量。(可用RNN或CNN)
Encoder的结构:
其中,每一个self-attention的输出都考虑到了所有的输入;
Residual的意思是将输出的结果跟输入加起来得到输出;
Fully-conneted也是要先进行residual后进行标准化;
其实先进行layer normalization然后再residual得到的结果会更好。
Decoder
Decoder结构:
种类一、Autoregressive
例子:语音识别
句子的开头BEGIN记为BOS,这是一个特殊的字符,Decoder的每个输入可以用一个独热编码表示。然后将前一个得到的输出结果作为输入,然后下一个输出的结果就是考虑到前面所有的输入得到的输出结果,以此类推,得到整个输出序列。
在输出的结尾要有一个End标识,Begin与End可用同一个符号表示。
Self-attention与Masked Self-attention的区别:
Self-attention:
Masked Self-attention:
是masked的原因在于decoder输出的东西是一个一个产生的,没有办法知道后面的。
种类二:Non-autoregressive(NAT)
与AT不同,NAT的结果是一次产生的。
决定输入的begin的个数的方法:
法一、另外弄一块来预测输出结果的长度(输入为各个输入的向量),得到的是一个数值,然后数值为多少就喂多少个begin进去,然后得到输出结果;
法二、自己决定,然后看输出结果,end后面的就当没有输出。
NAT好处:
(1)平行化,因为一次产生完整句子,速度会更快;
(2)可以自己控制decoder输出的长度。
劣势:但是表现的通常比AT差。
Transformer连接的桥梁:
Cross attention的运作过程:
实际上,cross attention的encoder层的输入不一定只能是Encoder的最后一层的输出结果,也可以有其他的方式。
Transformer的训练
得到的每个向量与独热编码之间都有一个偏差-cross entropy,最终要选偏差最小的。
Decoder的输入是正确答案(Ground Truth),这个技术叫做Teacher Forcing。
Tips:
有时候decoder不一定要自己决定输出,还可以对输入有复制的行为。(如:对话,摘要),用到的技术可以有Pointer Network、Copy Mechanism。
在训练时给decoder的输入加一些错误的东西,否则如果这个模型在训练时没遇到过错误,测试时遇到了就不会处理,这个叫做Scheduled Sampling。
标签:输出,Transformer,attention,Encoder,Decoder,输入 From: https://www.cnblogs.com/qiqi-yi/p/16863028.html