序列模型和注意力机制基础
1. 序列结构的各种序列
语言翻译:
在给出足够多的法语和英语文本,训练这个模型确实有效。。。
图像描述:
这里也确实证明了AleNet模型输出的特征向量确实包含了图片的信息。
总结:
seq2seq模型主要来说就是由一个encoder+一个decoder构成。
对于多个输出序列如何选择的问题,将在后面给出解决算法!
2. 选择最可能的句子
对于语言模型来说,一般最开始的输入是一个0向量,而机器翻译任务我们可以看到,右边decoder与语言模型结构一样,不同的是输入的encoder计算的结果——因此叫条件语言模型,即输出的任一英文句子翻译都是取决于前面输入的法语句子。
我们每次执行获取的翻译其实都相当于从一个分布中随机的取样获得结果。但是我们要的是找到一个英语句子y,使得条件概率最大化。
贪心搜索就是每次都搜索最有可能的词,但是我们需要的是整个序列总体的概率最大化。
看一个例子,
有两个句子,hin明显上面的质量比下面的要高,因此我们要让其条件概率比下面的大。如果使用贪心搜索的话,因为在Jane is的条件下,第三个词是going的概率更大(在英语中更常使用)。因此会得到一个欠佳的句子。
句子可能组合过大。(句子长度×词汇表大小)
这时我们需要一个近似搜索算法,使得挑选出的句子y的条件概率最大化。
3. 集束搜索
算法流程:
输入:集束宽B=3
- 将解码器第一个单元的softmax值取前三个概率最大的单词,存起来。
- 将第一个单词分别作为x输入到下一个解码单元中去,计算在给定法语句子和第一个单词下组成的单词概率最大而产生第二个单词,但是我们优化的是第一和第二个单词组成的单词对的条件概率最大化。(条件概率公式可以改写成第一个单词的概率×第二个单词的概率)。从第二步中所有结果中选3个条件概率最大的单词对。
- 一次类推,直到获得最终句子。
note:如果集束宽度=1,就是贪婪搜索算法。
4. 改进集束搜索
长度归一化:
问题1:乘积概率导致数值下溢
解决办法:取log值,乘变加。
理论依据:log函数是严格单调递增的函数,所以优化结果一样。
问题2:累乘概率低,或者是log累加负数,导致优化时倾向于更短的翻译。
解决方法:归一化,除以单词数量。即,取每个单词的概率对数值的平均。
PS:在单词数量Ty上加个指数a,即,a=0,为1;a=1,长度归一化;其余在两者中间。
理论依据:这里的超参数没有理论依据,但是实践过程中效果很好。
总结:在运行搜索的过程中,对于不同的句子长度大小,都保存3个,最后用上面的目标函数打分,挑出在归一化的log概率目标函数上得分最高的一个。(这个目标函数有时叫做归一化的对数似然目标函数)。