Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge
1. 介绍
提出的模型基于联合嵌入输入问题和图像的原理,然后对一组候选答案进行多标签分类。实验表明,一些细节对获得高质量的结果很重要。(虽然有很多复杂的算法被提出来,但是一个非常简单的模型,注意实现方式和精心地选择超参数,也能获得不错的效果)。
本文的关键发现可以概括为以下几点:
- 使用 sigmoid output,允许一个问题能有多个正确答案,而不是常用的singele-label softmax;
- 使用 soft socres as groud truth targets, 将任务转换成候选答案分数的回归任务,而不是传统的分类任务;因为一个问题可能有多个不同的标注答案。
- 在所有的非线性层使用 gated tanh activations;
- 使用 image features from bottom-up attention[1],能生成一个 region-specific features,而不是传统的 grid-like feature maps from a CNN;
- 使用 pretrained representations of candidate answers 来初始化输出层的权重,比如 using GloVe and Google Images;
- 在 SGD 优化时,training date 使用 large mini-batches 和 smart shuffling ;
[1] Bottom-up and top-down attention for image captioning and vqa
主要使用的是数据集是 VQA v2,其将一个问题与两个不同的图像匹配起来,从而获得两个不同的答案。(避免了算法直接从问题学习到答案)。另一个数据集是 Visual Genome,包含对图像scene graphs的标注。我们没有直接使用这些注释,但是在[1]中它们用于训练Faster R-CNN模型,我们使用其来获取以对象为中心的图像特征。
2. 提出的模型
2.1 问题编码
2.2 图像特征
2.3 图像注意力
就是使用问题对图像的K个特征进行空间注意力;
2.4 多模态混合
2.5 答案解码
挑选在训练集中出现频率超过8次的,作为候选答案集(最终N=3129);
然后把任务看成一个multi-label classification task,每个问题可能有一个或者多个答案;
同时,因为候选答案集的限制,某些训练问题可能没有答案。这种情况能帮助提供一种有用的训练信号,将输出概率全置成0(在测试集上同样适用)。所以这些数据并没有被丢弃。
最后的预测分数通过以下方式求出:
$$
\hat{s} = \sigma(w_o f_o(h)) \tag{5}
$$h 表示 joint ebedding, $w_o \in R^{N \times 512}$ 是一个可学习的权重,并用下面的方法进行初始化。
然后使用 sigmoid function 来归一化最后的输出到 $(0,1)$,最后使用的损失函数有点像 binary cross-entropy。
其中,$i,j$ 分别表示 M个训练的问题以及 N个候选答案。
这样的解码形式有这样两个好处:
- sigmoid 的输出允许每个问题选择多个答案;
- 使用 soft scoers 作为训练目标比起 binary targets 能够捕获到真实标注下的偶尔出现的不确定性。
2.6 预训练答案分类器
在 $(Eq5)$中表明,第$j$个候选答案的得分由a joint image-question representation $f_o(h)$ ,以及 $w_o$中的第j行 的乘积计算得来(这里有点像计算一个余弦相似度)。所以 在训练的时候,对于每个 candidate answer 的合适表示在$w_o$中的每行可以学习到 。
我们建议使用两个来源的候选答案的先验信息来初始化$w_0$的行。
疑惑:
候选答案是一个短句,是将短句中每个单词的嵌入取平均吗(按论文中的维度来看,是300)?还是应该放入一个共享权重的RNN中计算全局表示?
- 一个方面,使用 answer word 的 GloVe word embeddings 信息来作为 linguistic information。(类似于 Sec 2.1 中描述的问题编码)。 当答案不能在预训练的嵌入中找到时,在 spell checking, removing hyphenation, keeping a single term from multi-word expressions 后使用 closest match 准则来匹配一个。最后得到的记为 $w_o^{text}$;
- 另一个方面是收集 candidate answers 对应的visual representation。具体做法是通过 Google Images来自动收集与候选答案相关的10张图像,然后使用预训练的 ResNet-101 来提取特征,最后10张图像的平均特征作为候选答案的视觉先验信息,大小为 $R^{2048}$,记作 $w_o^{img}$。不利的一面是,抽象的词和表达方式可能无法提供丰富的视觉表示。
最后,我们的答案解码器使用下面的表达式来表示:
其中, $w_o^{etxt},w_o^{img}$使用较小的学习率来微调,分别是$0.5,0.01$。
2.7 非线形层
一个常见的非线性层的实现是 affine layer + ReLU, 但是本文使用的是 a gated hyperbolic tangent activation。这可以看成是一种特殊的 highway networks。
2.8 训练
- 使用 AdaDelta 算法来进行随机梯度下降。因为模型容易过拟合,所以使用early stopping机制。
- 第一次仅使用 VQA v2的训练数据,然后确定最好的精度对应的 epoch,然后加入 Validation 数据训练同样的 epochs;
- 使用来自 VIsual Genome 数据集的问题对(仅使用那些和 VQA v2数据集的答案集合有重叠的数据),大概是 30%;
- 在训练的时候,我们打乱训练数据,使得在相同的 mini-batches 中,保持 balanced pairs(就是那些有着不同答案的相同问题形成一个 pair)。这样能够使学习更加稳定,并鼓励网络辨别配对实例之间的细微差异。
3. 消融实验
每个变体都使用3个不同的随机种子训练三次,报道标准的 VQA accuracy:针对所有问题的答案预测的平均ground truth score。( ground truth score of a candidate answer j to a question i is a value $s_{ij} \in [0,1]$)
3.1 Training data
3.2 Question embedding
- 一方面,使用非VQA数据能得到一定的好处;
- 但是随着数据集的增大,这种好处可能会减弱;
- 为了调测试预训练的词嵌入是否能够捕获 word-specific 信息,我们随机打乱相同的 GloVe vectors,即我们随机将他们和输入的单词联系起来。发现这样比重新训练 word-embedding 的效果还差;
3.3 Image features
- 如果使用 200-ResNet 最后一层的 feature map $R^{14 \times 14 \times 2048}$ ,发现结果下降的厉害;
- 如果直接取 avg-pooling ,不使用空间注意力机制,发现结果下降的更厉害;
- 但是如果进行小幅度的下采样,形成 coarser 7x7 ResNet feature maps(在14x14上使用线性插值,等价于一个步长为2的2x2的平均池化),能得到一个相对不错的结果;一个可能的解释:7x7的维度能够比较好地对应于原图像物体的尺度;
- 如果使用[1]中调整过的特征 bottom-up attention,结果是比较好的,而且还比较稳定;
3.4 Image attention
- 可以发现 ResNet 特征对于这些变化比较稳定;(个人感觉,如果图像上的特征没有相对重要性,而是有或者无比较重要,使用sigmoid attention还是比较说得通的)。
3.5 Output vocabulary
- 本文之前的实验是选择训练集中答案出现频率大于 $l = 8$ 次的作为候选答案集;
3.6 Output classifier
默认的模型是使用sigmoid outputs以及soft scores $s_{ij}$ as ground truth targets。用其和两个二进制的版本做比较:发现默认的soft scores效果比较好。
使用 sigmoid outputs 来代替传统的 softmax outputs 效果也是要好一点的;
为了评估 $w_o^{text},w_o^{img}$的影响,我们使用1)随机初始化;2)使用预训练模型,但是随机打乱,检查预训练权重是否提供了 answer-specific information,还是仅仅由于更好的初始值有助于数值优化;
最后发现提供的初始化方式效果比较好,当训练数据变少时效果应该更明显。
为了进一步分析每种初始化对各种答案的提升,我们计算每个候选答案$j$的 recall值:
具体的效果如下图:(画出提升最大的60种答案)
可以看到 $w_o^{text}$ 可以提升各种答案的recall,$w_o^{img}$ 提升那些有着比较清晰的 visual representation 的表达。(这种直觉很难从主观上进行评估,但是可以用一些例子来说明)
虽然总体的recall率有上升,但是不免有部分答案会因为这种预训练的方式收到影响;(一个观察是,影响比较大的是那些训练数据比较少的)。这证实了该方法具有更好地处理稀有答案的潜力。
3.7 General architecture
- 本文默认的是使用 gated tanh, 其效果比 gated ReLU,simple ReLu or tanh 要好,当然我们也尝试了其它 highway 的变种(residual and gatig connections)但是均未成功。
- 默认的结构使用一个简单的 element-wise product 来融合 image-question representations,本实验中其比 cncatenation 要好,但是没有实验最近提出的各种高级的多模态pooling方法。
3.8 Mini-batch size
3.9 Training set size
为了测试不同的预训练和训练数据大小的关系,我们随机采样了部分数据,然后训练4个模型:
其精度变化如下:
- 只有10%的数据就能获得不错的效果,而且数据10倍增长带来的效果提升并没有那么大。和NLP任务中数据服从Zipf定律,以及其他领域中数据的长尾分布观察类似(少量的数据足以覆盖到常见的case,要想包含更多少见的concepts,数据需要指数级增长)。
- 使用额外的数据预训练单词嵌入和分类器总是有好处的。随着使用了更多VQA特定的培训练数据,与从头开始学习的基准模型之间的差距越来越小。这可能表明足够大的VQA培数据集将完全消除收益。
- 但是,另一种观点是,这些其他信息源对于表示稀有词和概念最有用。
3.9 Ensembling
使用最简单的集成方法,用不同的随机种子训练的相同模型(影响学习参数的初始化以及随机梯度下降的优化)。
在测试时,将所有实例为候选答案预测的分数相加,并从最高分数中确定最终答案。
4. 累计消融实验
上面介绍的所有烧蚀实验一次都考虑参考模型的一两次修改,但是多次修改的累计效果不一定是累积的。与其他优化结合使用时,最初看起来有些希望的某些选择可能不会成功。相反,一旦调整了其他超参数,可能会证明搜索早期放弃的某些选项有效。
上表也表明了本方案中比较有效的几个部分,看开头的介绍。
5. 和现有方法的比较
6. 讨论和总结
- 我们表明,通过更好的图像特征,尤其是[1]的(使用自下而上的注意力的)区域特定特征,仍然可以实现显着的收益。
- 我们还测量到,从其他VQA培训数据中获得的收益尚未达到稳定的水平;
- 我们认为,结合其他信息来源并利用非VQA数据集是一个有前途的方向;
- 性能非常取决于设计选择和实施的各种细节;
- 单纯使用 bag-of-words 也能获得不错的效果(不注重单词的顺序),表明了现在的模型还不能有效的利用语言的结构;
- 经常报告的指标,例如我们的每问题准确性> 70%,似乎令人鼓舞,但留意失败案例和替代绩效指标非常有价值(比如评价模型是否能区分同一问题的两种不同答案,实际准确定却只有35%)。