内容来源于李宏毅2021/2022春机器学习课程p49-50
seq2seq一般由Encoder和Decoder组成
在Encoder进行输入,在Decoder输出结果
Encoder(给一排向量,输出一排向量)
在一个Encoder中会对右侧的模型循环N遍
右侧的模型展开后类似于下面的样子。输入一排向量后,进入self-attention后进入fully connected layers。最后得到输出。
Bolck中的细节:在输入得到的结果a进行于输入的b相加得到的结果在进行norm运算X,得到的结果进入fully connected layers形成Y,将X和Y相加得到的结果再进行一次norm计算后最后的结果就是一个Bolck的输出。
Decoder
我们在字典中设置号begin和end的值,Decoder一个一个读入Encoder的输出,然后自己在一个一个输出结果,当达到条件时候就会出END
Decoder会根据自己的是一个输出结果和Encoder的输入来觉得当前的输出结果。
在Decoder中我们不能简单的运用self-attention,因为我们需要根据前面的输入来一个一个进行当前的输出,而普通的self-attention会一次性的进行全部的输出,所以这边改用Mask self-attention,只考虑前面输入的值,不考虑后面的
Encoder和Decoder之间如何传递
Encoder和Decoder的模型,在Decoder的中间存在着俩个Encoder的数据传入
每次Decoder经过第一个norm后生成的一个q
将q于每个Encoder的结果的a形成的矩阵k计算,再乘上a形成的矩阵v,最后加起来得到V,将这个结果作为Decoder的fully connected的输入