Show and Tell: A Neural Image Caption Generator 笔记

看图说话

简介

看图说话,即自动描述图片的内容,有很多的应用,例如帮助盲人更好的理解网上图片的内容。许多之前的想法是把已有的子问题结合起来,而本文用一种端到端的方法、用一种简单的模型,最大化似然函数然产生图片的描述。

基础模型

RNN

h_t为t时刻隐藏层状态,x_t为t时刻输入,则h_{t + 1} = f(h_t, x_t)

LSTM 

包括三个门,sigmoid输出,范围0~1,输入全为t时刻输入x和t-1时刻隐藏层的状态;一个控制遗忘f_t, 一个决定加入信息量i_t, 当前记忆c_t = f_t \bigodot c_{t - 1} + i_t \bigodot h(W_{cx}}x_t + W_{ch}h_{t - 1}), 第三个们决定输出信息o _t; 最终h_t = o_t \bigodot c_t, softmax输出ht 即为输出。

我们知道,CNN由于其稀疏连接和权值共享两大特点广泛应用于图片的表示,我们可以将输入图片通过CNN嵌入到一个定长向量中。

而在seq2seq模型中,RNN在自然语言处理如翻译上有良好的表现。其包括一个encoder,将源语句转化为定长向量,以及一个decoder,以该定长向量的隐藏层状态作为输入,产生目标语句。

一个自然的想法就算是用已经在图片分类任务上训练好的CNN作为encoder表示图片,RNN产生语句。

相关工作

如果这个看图说话有人研究,最naive的思想就是手工搭建一个基于规则的系统,但这种系统往往是局限的,如仅在交通信号、体育等方面。

接下来,当图片的识别已经成熟,就可以将得到的信息带入模板,得到描述。

还有一部分,希望将图片和描述映射到同一空间(space),对于图片检索其最近的语句。这种检索式的方法很显然不可能产生原创的描述,即产生不了之前未见过场景的正确描述。

当然也有神经网络方面的工作,如输入图片,用一个神经网络预测下一个词,最近也有用RNN去预测下一个词的,还有用神经网络将图片和语句嵌入到同一空间。

但是,作者所用的神经网络更强大,更直接,自然效果更好。

模型

\theta 为模型参数,S为描述,I为输入图片,我们想最大似然,即\theta^* = \arg \max_\theta \sum_{I,S} log p(S|I; \theta)

S可表示为\{S_0, S_1,..., S_N\}, 从而上式变为 logp(S|I) = \sum_{t = 0}^N log p(S_t|I, S_0, ..., S_{t - 1})

模型为CNN 加 LSTM,称为NIC;训练使用迁移学习的技巧,使用已经训练好的CNN,将CNN的输出当作x_{-1} 输入LSTM。

采样(sample)是按一定概率选择输出值,beamsearch是每次根绝top-k大的之前的信息,输入模型,选出结果中top-k大的结果。

实验

评价指标

1. 人工打分1-4,取平均

2. BLEU, METEOR, CIDER

3. ranking metrics: recall@k, median rank

数据集

训练细节

CNN初始化为已有模型参数,如imagenet;采用现有的word embedding,但结果没有提升,因此最后没有用。

产生多样化的结果

即考虑原创性,取top-k生成的语句,k越大,原创性语句越多。

rank结果

rank结果证明该模型同样适用于rank

人类评测

证明了BLEU区分不出人的描述和模型的描述。

嵌入分析

虽然此前如没有用,但学到的嵌入反映了词之间的关联。

 

你可能感兴趣的:(其他)