seq2seq模型理解

声明:本文在paddle book NMT一节的基础上进行了补充,解释decoder cost、attention模型中的对齐公式、decoder引入word embedding,以及深层RNN的一种方式。

一、模型结构图

seq2seq模型理解_第1张图片

二、Encoder

编码阶段分为三步:

  1. one-hot vector表示:将源语言句子的每个词表示成一个列向量,这个向量的维度与词汇表大小相同,并且只有一个维度上有值1其余全是0。
  2. 映射到低维语义空间的词向量:one-hot vector表示存在两个问题,
    1) 生成的向量维度往往很大,容易造成维数灾难;
    2) 难以刻画词与词之间的语义关系。
  3. 用RNN编码源语言词序列,隐向量更新公式如下:
    hi=Φθ(hi1,si)

    整句话的向量表示可以采用h在最后一个时间步T的状态编码,或使用时间维上的池化(pooling)结果。

三、Decoder

A. 训练过程 多分类交叉熵

  1. 每一个时刻,根据源语言句子的编码信息c、真实目标语言序列的第i个词ui和i时刻RNN的隐层状态zi,计算出下一个隐层状态zi+1
    zi+1=Φθ(c,ui,zi)

    实际上,真正计算 zi+1 时用的不是one-hot向量的 ui ,而是 ui 对应的embedding向量,这个地方需要注意:
    zi+1=Φθ(c,Eui,zi)
  2. 将zi+1通过softmax归一化,得到目标语言序列的第i+1个单词的概率分布pi+1
    这里写图片描述
  3. 当前预测的词与真实词可以看做一个多分类问题,目标是希望模型给出的词与训练数据中的词是一致的,多分类交叉熵公式如下:
    这里写图片描述

seq2seq模型理解_第2张图片
Beam Search 是一种启发式图搜索算法,用于在图或树中搜索有限集合中的最优扩展节点,通常用在解空间非常大的系统(如机器翻译、语音识别)中,原因是内存无法装下图或树中所有展开的解。

柱搜索算法使用广度优先策略建立搜索树,在树的每一层,按照启发代价(生成词的log概率之和)对节点进行排序,然后仅留下预先确定的个数(beam size)的节点。只有这些节点会在下一层继续扩展,其他节点就被剪掉了,也就是说保留了质量较高的节点,剪枝了质量较差的节点。因此,搜索所占用的空间和时间大幅减少,但缺点是无法保证一定获得最优解。

beam search前两步的操作和训练过程是一样,不同之处是第三步,根据 pi 采样 ui ,而非计算交叉熵。

五、Attention

seq2seq模型理解_第3张图片

ci=j=1Taijhjai=[ai1,ai2,ai3,...,aiT]

aij=exp(eij)Tk=1exp(eik)

eij=align(zi,hj)

align(zi,hj)=vTatanh(Wazi+Uahj)

六、Deep RNN

七、参考

  • paddle book 机器翻译
  • Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
  • Zhou J, Cao Y, Wang X, et al. Deep recurrent models with fast-forward connections for neural machine translation[J]. arXiv preprint arXiv:1606.04199, 2016.

你可能感兴趣的:(deep-learning)