论文笔记 : Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge

这篇论文提出的模型也叫NICv2(Neural Image Caption),提到这篇文章,就要先贴一下它的原型NIC

NICv2相对于之前做了一些改进,并取得了2015年COCO比赛的第一名。

这里我们先介绍一下原始的NIC,然后讲讲NICv2的改进。

1 模型结构

NIC模型的结构很容易理解:就是encoder-decoder框架。

首先利用CNN(论文中是用当时最好的GoogLeNet)作为encoder,将 Softmax 之前的那一层固定维数的向量作为图像特征;再使用LSTM作为decoder,其中图像特征仅在一开始输入decoder。模型的训练原理和之前在Image caption 初步入门里介绍的一样,使用最大化对数似然来训练,然后在生成测试阶段采用beam search来减小搜索空间。模型结构如下图所示:

NIC

值得注意的是,这里和传统的encoder-decoder有些区别,主要在于一般的encoder-decoder都会将特征持续地输入进LSTM中,而这里只在一开始输入,后面就没有输入了。作者在论文中说,如果在每个时刻都输入图像特征,模型会把图像的噪声放大,而且也容易过拟合。对比后面的一些基于attention来做caption的论文,这些论文提出的模型都需要在每个时刻输入。由此来看这一模型是非常简单的。

稍微总结一下encoder-decoder的优缺点:
优点:非常灵活,不限制输入和输出的模态,也不限制两个网络的类型
缺点:当输入端是文本时,将变长序列表达为固定维数向量,存在信息损失,并且目前还不能处理太长的文本。

2 训练细节

  1. 固定学习率且不加动量(momentum)
  2. 词条化后去掉词频小于5的词
  3. 在ImageNet上预训练GoogLeNet,并且在训练caption模型时这部分的参数保持不变
  4. 在大型新闻语料上预训练词向量
  5. 使用dropout和模型ensemble,并权衡模型的容量
  6. 512维词向量
  7. 使用困惑度(perplexity)来指导调参

3 自动评价与人工评价

作者在论文中多次强调,需要更好的自动评价计算方式。因为以自动评价指标来评测的话,模型的评测结果在很多时候要比人写的caption的评测结果还要好,但人工评价的结果显示,实际上模型的caption相比于人写的caption还有很大差距。

4 迁移学习与数据标注的质量

在Image Caption中,是否可以把在某个数据集下训练的模型迁移到另一数据集?
高质量的标注数据和更多的数据可以补偿多少领域错配问题

首先来看第一个问题,作者指出,在Flickr8k和Flick30k这两个数据集上,如果用Flickr30k来训练,效果会提升4个BLEU,更大量的数据带来了更好的效果,凸显data-driven的价值。但是如果用COCO做训练,尽管数据量五倍于Flickr30k,但由于收集过程不统一,带来了词表的差别以及较大的领域错配,效果下降了10个BLEU。PASCAL数据集没有提供训练集,使用COCO训练的效果要比使用Flickr30k的效果要好。

然后再看后一个的问题。因为SBU数据集的噪声较大,所以可以看作是“弱标注”的(weak labeling),但是如果使用COCO来训练,效果依旧会下降。

5 生成的caption是否具备多样性

作者探讨了模型生成的描述是否有新颖性,是否同时具备多样性和高质量。

example

首先来看多样性(diversity)。作者挑了测试集里的三个图片的caption,每张图片都有模型生成的3-best描述(加粗的是没在训练集中出现过的),可以看出这些描述可以展现图像的不同方面,因此作者认为该模型生成的caption具备多样性。再来看质量。如果只考虑模型生成的最佳候选caption,那么它们中的80%在训练集中出现过;如果考虑top15,则有一半是完全新的描述,但仍然具备相似的BLEU分,因此作者认为该模型生成的caption兼具了多样性和高质量。

6 NIC模型的改进——NICv2

作者给出了一些使他们成为2015COCO比赛第一名的几点改进。

(1)Batch Normalization

在作为encoder的GoogLeNet中引入了Batch Normalization

(2)encoder端的fine tune

在之前的模型中,encoder端的CNN迁移过来后不参与caption模型的训练,其参数值保持不变。而在新模型中则对其进行了fine tune,具体是先固定encoder的参数,训练500k步decoder,然后encoder和decoder联合训练100k步。作者强调,CNN不能从一起从头开始就联合训练,必须在LSTM的表现足够良好的情况下再联合训练,防止迁移过来的CNN被带偏。

CNN的fine tune带来的效果是,模型生成出来的一些句子可以描述颜色了。作者认为,在ImageNet预训练的过程中,抛弃了颜色这样的和分类无关的特征。

(3)使用Scheduled Sampling训练RNN

我们知道Image Caption是一项生成变长序列的任务,训练时,对于输入 I 和目标序列 S 构成的样本 (I, S) ,目标是最大化似然函数 P(S|I) ,进而训练出来模型的参数。似然函数被拆解成条件概率的连乘形式,在每个词的条件概率求解过程中,RNN接受的输入信息包括上一时刻的隐状态、encoder的编码向量以及上一时刻的词。

这就有一个问题,训练时“上一时刻的词”是被指定为目标序列 S 中的词的,也就是说它是“正确的”;而在测试时,“正确的”上一时刻目标词是无法得知的,取而代之使用的是由模型生成的词(由Softmax计算出词表中概率最大的那个词,这会导致在训练时去弥补真实词和softmax生成词之间的loss),训练和测试就产生了不统一(discrepancy)。如果测试过程中的某个时刻生成了错误的词,那么这个错误会被快速放大。

作者在RNN的训练过程中采用了Scheduled Sampling,即在训练RNN时随机地使用模型真实输出来作为下一个时刻的输入,而不是原先那样只会使用期望的生成的目标词来作为下一时刻的输入。作者认为,这种方式可以强迫模型在训练过程中“学会”如何处理错误。

(4)模型ensemble

变更一些训练条件参数,从而训练出多个模型。作者训练了5个Scheduled Sampling模型和10个fine tune CNN模型。

(5)减小beam search的候选结果个数,即k的值

原始NIC模型中,作者只取了k=1和k=20两个值。在后续研究过程中,发现k=3时模型表现最佳。理论上讲,k越大应该越好,但实际上是较小的k取得了最好的结果,这说明模型可能出现了过拟合;同时作者发现减少k适当地可以提升Diversity(模型生成的caption出现在训练集的比例下降了20%),所以认为模型是过拟合了。从这个角度来看,减少k可以视作一种正则化。

最后贴一下效果图
ex

请我吃辣条吧~