现在image caption主要存在的问题有:
1、exposure bias:模型训练的时候用的是叫“Teacher-Forcing”的方式:输入RNN的上一时刻的单词是来自训练集的ground-truth单词。而在测试的时候依赖的是自己生成的单词,一旦生成得不好就会导致误差的积累,导致后面的单词也生成得不好。
2、模型训练的时候用的是cross entropy loss,而evaluate的时候却用的是BLEU、ROUGE、METEOR、CIDEr等metrics,存在不对应的问题。
由于生成单词的操作是不可微的,无法通过反向传播来直接优化这些metrics,因此很多工作开始使用强化学习来解决这些问题。
但强化学习在计算期望梯度时的方差会很大,通常来说是不稳定的。又有些研究通过引入一个baseline来进行bias correction。还有一些方法比如Actor-Critic,训练了一个critic网络来估算生成单词的value。
而本文的方法则没有直接去估算reward,而是使用了自己在测试时生成的句子作为baseline。sample时,那些比baseline好的句子就会获得正的权重,差的句子就会被抑制。具体做法会在后面展开。
两种模型:
FC和attin
第一种和show and tell 的公式差不多,attin和show attend and tell 的区别在于上下文变量,attin只在输入门处添加。
使用ADAM方法优化的时候,这种结构的表现优于其他结构。
原本的结构:
更改之后:
作者的核心思想是,在训练的时候,对于每个批次的预测,按照概率来取词,生成预测结果。与gt比较,计算CIDER作为score1。
同时按照greed算法取词,生成预测结果,作为baseline使用,它与gt比较计算CIDER作为score2。
reward=score1-score2 即为强化学习的奖励。有了baseline,可以避免梯度过大的问题。
将奖励加入损失函数, new_loss=-reawd*loss