現在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