首先强调一下图文来源,真正的完全图解Seq2Seq Attention模型。本人目前用到此模型,发现该知乎作者的文章写得通俗易懂,于是整理作为自己的笔记。如果小伙伴对模型中各种隐层状态感到不解,请看我之前的一篇博文,RNN、LSTM神经网络输入输出究竟是怎样的?
Start
seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。–简书
大框架如下:
详细图解及公式
(1)
注意:此处encoder中的LSTM默认只有一层隐藏层。
红框中的就是output,即每个时刻最后一层隐藏层的状态,可以理解为融合了上下文信息的word embedding。黄框中的是最后一个时刻的全部(当前为一层)隐藏层的状态,可以传入到其他LSTM中。不理解的去看here里的最后一张图。
(2)
NB:decoder最开始的输入为句首的标志、原始context vector(为0)、以及从encoder最后一个hidden state: h8。
得到当前时刻的hidden state,然后开始attention了。
(3)
当前时刻Decoder的hidden state与Encoder的output作为输入,放入Attention模块开始计算一个context vector。
(4)
接下来将context vector 与decoder 的最后一个隐藏层的状态串起来作为下一时刻的输入。
(5)最后经过一系列非线性转换以及softmax计算得到概率分布。
----- end --------
其实经过一番图解后发现并不难,之前一直不理解是没有搞懂output与hidden state 的区别,区分开后,理解起来还是很容易的。