传统seq2seq模型介绍
传统的seq2seq模型通常有以下两种:
- encoder-decoder
- 引入attention的encoder-decoder模型
具体可参见论文:Show and Tell: A Neural Image Caption Generator和
Show, Attend and Tell: Neural Image Caption Generation with Visual Attention。后者与前者的不同即使用注意力机制加入context向量,context由上一个时刻生成的隐层向量和image features作用产生。后续,基于attention的改进Knowing When to Look: Adaptive Attention via A Visual Sentinel for Image Captioning引入注意力哨兵机制。注意力机制层面的修改,有很多的变式,模型不同之处的重点是怎么讲上个时刻隐层向量和图像向量相互作用。但是模型整体的训练并没有本质的改变。
前人模型的一个通病是exposure bias。在训练和测试的时候,模型获得的输入的分布是不同的。训练的时候是数据集的分布,而测试的时候是预测结果的分布。实际来讲,训练的时候,在decoder中输入的是训练集句子的单词,而测试的时候,decoder输入的是上个时刻预测的单词。这样分布的不同将会造成模型非常脆弱。
用采样改进exposure bias
考虑到上面提到的问题,Scheduled Sampling for Sequence Prediction withRecurrent Neural Networks提出了scheduled sampling 的方式,训练的时候以一定概率选择该句子对应ground-truth的词汇,同时以一定概率选择上个时刻预测的词汇。模型图可见下图:
使用ground-truth单词的概率是 ϵ \epsilon ϵ,而使用前一个预测单词的概率是 1 − ϵ 1-\epsilon 1−ϵ。同时这里作者还提出了一个叫做curriculum learning的方法。即刚开始训练的时候更大概率选择ground-truth,在训练的后续阶段更高概率选择预测的单词。因为刚开始训练的时候,模型比较粗糙,预测不准确,如果一开始就大概率使用预测的单词,将会造成很难收敛。所以这里重新对每个epoch定义了一个 ϵ i \epsilon_i ϵi:
ϵ i = k k + e i k \epsilon_i = \frac{k}{k+e^{\frac{i}{k}}} ϵi=k+ekik作者还给出了其他的计算公式,但是之后很多人都用这一个。
但encoder-decoder除了训练上面的问题,还存在评估的问题——训练和测试采用的评估方式不同。训练的时候通常采用交叉熵,而测试的时候通常使用BLUE等评估标准。
采用深度强化学习改进
MIXER模型的提出,将深度强化学习Reinforcement Learning (RL) 引进到seq2seq模型当中,Sequence Level Training with Recurrent Neural Networks。如果直接使用RL,词库非常大,因此将会造成action space非常大,从头开始训练将会非常难。作者提出了一个Mixed Incremental Cross-Entropy Reinforce (MIXER) 的方法,前期用交叉熵训练,后期引入RL训练。关键点在于: ∇ θ L θ = ( r ( w 1 , w 2 … , w T ) − r t + 1 ) ∇