RNN-week3

Sequence to sequence models:由encoder和decoder组成。decoder的前一个输出为当前输入。
应用1:文本翻译
应用2:图像标注。用CNN训练得到特征作为encoder,在后面加上decoder。

文本翻译

文本翻译与语言模型不同之处在于:语言模型在训练好之后是随机输出一个句子,而文本翻译需要找出最有可能的翻译句子。实现这种搜索的启发式搜索方式叫beam search(集束搜索)。(它不一定能够找到全局最优解)

beam search算法

参数:beam width:表示一次考虑的几种可能。例如B=3表示每次考虑3种可能的输出。
第一步:计算P(Y<1>|x),假设单词表中有1000个单词,那么分别计算1000个单词的概率,选出其中概率最大的B个单词,假设这B个单词分别为:in ,Jane,september.
第二步:计算P(y<1>y<2>|x)=P(y<1>|x)P(y<2>|y<1>,x),也就是分别为3个单词计算后面连接1000个单词的概率,也就是3000个P(y<1>y<2>|x),选出其中概率最高的三种。
第三步同样如此,直到句子结束。(遇到结束的特殊符号)。
当B=1时,beam search就是greedy search.

beam search的改进

原始计算概率:

argmaxyt=1TyP(y<t>|x,y<1>,...,y<t1>)
时,有以下两个问题:
1.多次乘积容易导致计算机小数位溢出,解决方法:在计算结果前面加上log,将乘积变成Log的加法;
argmaxyt=1TylogP(y<t>|x,y<1>,...,y<t1>)

2.为了使概率更高,为了使概率更高,会趋向于选择更短的句子,因此将概率做归一化:
1Tyαargmaxyt=1TylogP(y<t>|x,y<1>,...,y<t1>)

其中,α的经验值一般取0.7.

对模型做误差分析

RNN-week3
计算人类翻译的最优解的概率与学习得到的最优解概率。若前者得分高,说明是beam search出了问题,应该增加B的数值,若后者高,说明RNN模型出了问题,可能需要对模型做进一步改进。
用多个例子来对模型作分析,最后找出问题比较严重的部分是RNN还是beam search。

attention model

没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。
模型简介:
RNN-week3
首先根据初始的隐藏单元和输入计算出权重系数,也就是”match”过程,match的方法有几种:
1.利用余弦相似度计算两个向量间的相似度;
2.利用简单的神经网络进行训练;
预测出权重系数之后,利用权重系数计算出c0,作为rnn的输入部分,与隐藏单元z0一起作为输入预测第二个时刻的隐藏单元z1
RNN-week3
RNN-week3
然后继续用z1和各个输入一起预测第二个时刻的权重系数,继续用于第二个时刻的输出,直到翻译结束。
因此在输出每个时刻y时,都利用了不同输入的不同注意力,且这些注意力权重都是通过训练得到的。