seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
要了解这个首先要对RNN以及BiLSTM模型有一个清晰的理解,需要再回顾的查看以下文章:
梦里寻梦:(五)通俗易懂理解——BiLSTMzhuanlan.zhihu.com接下去要对Encoder-Decoder模型有一个清晰的认识,其在机器翻译上效果十分突出。
如图中所展示,我们要翻译“知识就是力量。”这句话。Encoder是一个RNN,将要翻译的话转换成向量特征,输入到Decoder中。
简而言之,就是输入“知识就是力量”,然后经过神经网络后,输出一个向量,这个向量包含着丰富的语义信息,也即所谓的编码。然后再将该编码输入一套神经网络,最终输出“knowledge is power”。
这是Encoder,一个RNN,C是RNN从输入x_1,x_2,x_3,x_4中提取的向量,或者说对x_1,x_2,x_3,x_4进行一个编码,得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。
获得C以后,就使用另一个RNN,Decoder,来对编码C进行解码,或者说根据向量C来学习获得正确的输出。上面两图中是两种输入方式,将C当做之前的初始状态h0输入到Decoder中和将C当做每一步的输入。
接下来讲述Seq2Seq Attention
大框架如下图所示
接下来按照步骤进行解说,注意查看图片下方的解释说明。
(1)
(2)
我们将获得以下信息,也就是上图中hidden states层,包括encode和decode,但是decode此时只有一个信息:
紧接着我们需要计算权重得分。
在luong中提到了三种score的计算方法。这里图解前两种:
Attention score function: dot
输入是encoder的所有hidden states H: 大小为(hid dim, sequence length)。decoder在一个时间点上的hidden state, s: 大小为(hid dim, 1)。
第一步:旋转H为(sequence length, hid dim) 与s做点乘得到一个 大小为(sequence length, 1)的分数。
(3)
第二步:对分数做softmax得到一个合为1的权重。
(4)
第三步:将H与第二步得到的权重做点乘得到一个大小为(hid dim, 1)的context vector。
(5)
Attention score function: general
输入是encoder的所有hidden states H: 大小为(hid dim1, sequence length)。decoder在一个时间点上的hidden state, s: 大小为(hid dim2, 1)。此处两个hidden state的纬度并不一样。
第一步:旋转H为(sequence length, hid dim1) 与 Wa [大小为 hid dim1, hid dim 2)] 做点乘, 再和s做点乘得到一个 大小为(sequence length, 1)的分数。
(3)
第二步:对分数做softmax得到一个合为1的权重。
(4)
第三步:将H与第二步得到的权重做点乘得到一个大小为(hid dim, 1)的context vector。
(5)
我们得到了如下信息:
从上文步骤我们得到了如下信息,第一个context的信息:
那么接下去就是重复上面一个过程,生成context的第二个第三个信息等到。
下一个时间点
(6)
此时我们获得了如下信息:
(7)
完结
整个完整公式如下:
输入:
输出:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
详细图
很感谢原文作者的无私奉献,让我对这个模型有了进一步的了解,基于我自身看文章时候的困惑,对文章对顺序等方面做了一定的修改。也相信大家看完之后能够更加简单明了地理解该知识点。