本人对RNN编码器-解码器做出的一点小总结,如有错误,请指正!
1. 概述:
RNN编码器-解码器:由两个递归神经网络(RNN)组成,编码器将可变长度源序列映射成固定长度向量,解码器将固定长度向量映射回可变长度目标序列。这两个RNN的工作大体上正好是相反的。
注意:输入和输出的序列长度可能不同。
要达到的目的是:联合训练解码器和编码器以在给定源序列的情况下使目标序列的条件概率最大化。
2.流程:
编码器顺序读取输入序列x的每个符号。当它读取每个符号时,RNN的隐藏状态h_t会根据等式 :
改变。这说明当前时刻的h_t是由当前时刻的xi 和 上一时刻的h_t-1 共同决定的。
特例:解码器公式有所不同,多出了一个输入序列的总和c,为:
在读取到序列的结尾(由序列结尾符号标记)之后,RNN的隐藏状态是整个输入序列的总和c。
f() 函数是神经网络中的激活函数,做一个非线性的映射,可以实现信息过滤(如将不重要的信息过滤掉,表现为概率低的信息)
使用BPTTX类似于BP反向传播改变参数。
3.优点:
RNN编码器-解码器能够更好地捕捉短语表中的语言规律,间接改善了整体的翻译性能。对该模型的进一步分析表明,RNN编码器-解码器学习一个短语的连续空间表示,该表示保留了短语的语义和句法结构。
4.问题:
RNN存在的问题:梯度消失/梯度爆炸。
梯度消失这一问题更为常见,原因是使用链式法则时,由于激活函数的原因,导致激活函数的导数值小于等于1,会梯度趋近于0,造成梯度消失。改进方法:使用RELU激活函数。
梯度爆炸解决方法为:对梯度做截断(给梯度限定一个值)能够在一定程度上解决梯度爆炸的问题
文献参考:
论文: Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation
知乎: 对RNN的理解