强化学习实现看图说话
模型 Actor-Critic Sequence Training for Image Captioning
训练数据:微软Common Objects in COntext(coco)
模型如文章封面图,在传统的seq2seq基础上加入了价值模型(Critic)作为强化学习中的baseline。
首先简单介绍下传统seq2seq实现的图片到文字,使用CNN模型作为提取图片高维特征的输入端,将特征向量初始化RNN的Hidden State,以序列的形式生成文字。
本期的强化学习使用的Actor-Critic算法(下面简称AC),许多state-of-the-art模型使用该算法作为基础,比如AlphaGo。
区别于另一种巧妙的强化学习算法Self-Critic,AC需要多实现一个Critic模型。
CNN模型 - Inception V3
RNN模型 - LSTM
Reward(奖励)- Rouge-L
为了在采样中降低出现重复样本的概率,笔者加入了self attention,而没有使用Beam Search。
模型使用蒙特卡洛采样,折扣因子固定为1
模型训练流程
先单独训练Actor模型。 固定住Actor模型参数,用其生成样本作为Critc模型的输入,使Critc和Actor生成样本无限趋近于相等。 最后,每一个迭代分别训练Criric和Actor
代码
Actor模型实现
64~94行:teacher forcing和采样生成word
Self Attention实现
Critic模型实现
输出actor生成文本的评估分值
Rouge-L实现
结果
由于coco数据量太大,训练非常耗时,笔者在耐心耗尽后模型才训练了几个迭代,不过结果差强人意 : )
Captioning - Desk with a computer and a laptop on it.
Captioning - City street filled with lots of tall buildings.
Captioning - Vase with a flower in it sitting on a table.
Captioning - Man wearing a black jacket and a white shirt.
Captioning - Cat is laying on a couch with a stuffed animal.