VQA as Meta Learning Task [元学习]
Introduction
VQA是一个典型的监督学习任务,一个经过训练的VQA系统只能从一个与训练集非常相似的分布中产生正确的答案,扩展模型知识或扩展它的领域覆盖只能通过重新训练模型来达到,这造成了大量的计算花费,所以这种方法根本无法实现VQA的最终承诺,即回答关于一般图像的一般问题
为了解决这些问题,作者提出了元学习(meta-learning)的方法,使模型学会学习(learn to learn),在测试的时候,模型会从支持集(support set)中学习一些样本以回答给定问题
支持集不是固定的,而且需要注意,支持集可能很大,而且它的大多数元素可能与当前问题无关,它在测试时被提供给模型,并且可以通过附加的示例进行扩展,以扩展模型的能力,所谓的模型”学会学习”就是在测试时动态地识别和利用潜在的大型支持集中的相关示例,因此,向模型提供更多的信息不需要再重新训练,而利用这种支持集的能力极大地提高了系统的实用性和延展性,一个实际的VQA系统最终需要适应新的领域,并随着可用数据的增加而不断改进。这是一个长期的目标,而这项工作只是朝这个方向迈出了一小步
文章的主要贡献是将SOTA的VQA模型应用到了元学习的场景下,得到的模型是一个深度神经网络,它使用一系列动态参数——也被称为快速权值——根据提供的支持集在测试时确定,动态参数允许自适应地修改由网络执行的计算,并根据支持集调整其行为,作者进行了详细的研究,以评估这些技术在不同的训练体制和支持集大小下的有效性,这些实验是基于VQA v2基准测试的,为此作者提出了适当的数据分割来研究元学习设置
通过这种方法产生的系统拥有一种新的能力,即产生全新的答案(不曾在训练集中出现过的答案),同时这个系统改进了对稀有答案的处理,由于VQA的数据集显示出严重的类不平衡,少数的答案比大多数其他的答案更频繁,模型很容易回到频繁的”安全”答案,相比之下,所提出的模型本质上不太可能成为数据集bias的受害者,而且对罕见的答案有更高的召回率,所提出的模型在总的准确率上并没有超过现有的方法,这是可以预料到的,因为它没有过拟合数据集的bias,但是它仍然展示了令人满意的总体表现
文章的贡献有:
将VQA视为元学习,在测试时提供一个支持集
描述了一个采用元学习的神经网络架构和训练过程,模型基于SOTA的VQA系统,从最近的元学习文献中获得灵感
提供了在不同的训练体制和支持集大小和跨越不同的设计选择的模型实验评估
结果证明了该模型的独特能力,产生新的答案,即在训练中从未见过的答案,通过学习支持实例,提高了对罕见答案的回忆,并比现有模型有更好的样本效率
Related Work
VQA部分作者介绍VQA和引入外部知识库的VQA,略
Meta learning and few shot learning
元学习旨在让模型”学会学习”,它适用于学习类似梯度下降的算法来更快地训练或微调神经网络,以及学习可以在测试时直接输入训练示例的模型。文中提出的方法属于后一种,VQA被视为一个分类任务,在测试时,提供一些例子来说明可能的答案——可能每个答案都有少量的答案,由于有大量的类,大多数现有的方法并不直接适用于文中的设置
文中的模型在神经网络中引入了一组记忆单元,使用动态权值参数化的网络层,其中一个记忆单元存储loss的梯度,最后的输出阶段,通过答案类别的相似性来计算评分
Continuum learning
元学习的VQA模型的重要意义是能够随着可用数据的增加而改进,这涉及到增量学习和连续学习的领域,这些工作的重点是通过新的训练数据、输出类和/或任务对网络进行微调,相比之下,文中的模型不会随着时间的推移而自我修正,也不会经历消极的领域转移或灾难性遗忘,而这正是连续学习的核心问题,文中提出的框架的一个重要动机是,它可以应用于支持与问题/答案示例不同性质的数据,这将允许利用一般的,非vqa特定的数据,例如从知识库或网络搜索
VQA in a Meta Learning Setting
VQA的传统方法是在监督环境下进行的,训练一个模型来映射一个输入问题Q和图像I来对候选答案进行评分,作者通过引入支持集对该形式进行了扩展,支持集中可以包含训练集中没有的答案
为了利用支持集中包含的信息,模型必须学会在测试时动态地使用这些示例,而不需要对整个模型进行重训练
Proposed Model
模型如图所示,从BUTD基础模型扩展而来
作者将模型结构划分为两个部分:嵌入部分(对图片和问题进行编码)和分类部分(预测答案),文章的贡献主要集中在第二部分,嵌入部分遵循BUTD的实现,即问题嵌入采用GloVe和GRU,图像嵌入使用CNN,并结合了BUTD注意力和问题导向注意力,嵌入的融合采用Hadamard积,记为h,传统方法中对h进行分类通常采用一个非线性层和一个线性的softmax或sigmoid,作者在这里用元学习替代
Nonlinear Transformation
非线性变换的目的主要是将联合嵌入h投射到适合分类的表示上,这种转换可以在具有任意类型非线性层的神经网络中实现,这里作者使用了一个门控双曲切层
$\sigma$是一个logistic激活函数,$W$和$W’$是可学习权值矩阵,$b$和$b’$是可学习偏移量,$\circ$表示Hadamard积(元素点乘),定义$\theta$为向量化的权重和偏移量的矩阵连接,$\theta=[W_:;W_:’;b;b’]$,这个向量包含了非线性变换所使用的所有权值和偏移,传统模型在训练阶段通过反向传播和梯度下降来学习$\theta$,在测试阶段保持静态,作者提出应该在测试时根据输入h和可用的支持集自适应地调整权重,用传统方法学习静态参数$\theta^s$,在测试阶段获得动态参数$\theta^d$,然后将两者结合$\theta=\theta^s+w\theta^d$,$w$为可学习权重,因此,动态权值可以看作是根据输入h对静态权值的调整
在关联存储器M中保存一组候选动态权值,存储的是一个key/value对的一个大集合(和支持集一样大),$M={(\overline{h}_i,\overline{\theta}i^d)}{i \in 1\dots|S|}$,测试的时候,就可以进行动态参数的关键值匹配检索
$d_{cos}(\cdot,\cdot)$是余弦相似度函数
Mapping to Candidate Answers
函数$g_\Phi(h)$将非线性层的输出映射到一个候选答案集的分数向量,这通常是通过简单的仿射或线性变换来实现的,$g_\Phi(h)$本质上输入h和代表可能的答案的原型$\Phi={\phi^a_i}_{i,a}$之间的相似性度量,在传统的模型中每个原型对应权值矩阵的一行,而在作者提出的模型中,可以用多个原型来表示答案a,即表示为${\phi_i^a}_{i=1}^{N^a}$,直观上,当a是正确答案时,原型代表了典型的期望特征向量,因此,h’与a对应原型之间的相似度就可以作为a的得分,如果有多个原型可用,那得分就是取平均值:
$d(\cdot,\cdot)$是相似性测量,$\sigma$是sigmoid(logistic)激活函数,将相似度投射到$[0,1]$,$b’’$是可学习的偏移项,传统模型的相似性函数都是采用的点积,本文采用了点积,和L-p范数分别作为相似性度量的函数
文中模型用了两种原型(prototype),静态$\Phi^s$和动态$\Phi^d$,静态在反向传播和梯度下井时候学习,动态的在测试时候通过支持集决定,最终的prototype为$\Phi=\Phi^s \cup \Phi^d$,当只用静态的原型$\Phi^d$,以及用点积$d_{dot}(\cdot,\cdot)$作为相似度测量时,文中模型和原BUTD模型相同
最后,损失函数采用交叉熵
Processing of Support Set
在函数$f_\theta$和$g_\Phi$中用到的动态参数是取决于支持集的,模型在网络中以前向和后向传播处理整个支持集:support set的处理会在测试过程中,先于预测答案发生。而在训练过程中,它会在每个epoch之前重复进行,随着训练的进行而不断改变的网络静态参数。我们将支持集记为$S$,它的每一个元素,它的特征向量$h$还有loss的梯度,都和静态的权值$\theta$相关,然后将$h$和梯度$\nabla \theta$添加在记忆M中,记忆M就会保留最后处理的那个元素
为了确定动态原型的集合$\Phi^d$,作者收集了所有支持集实例的特征向量$h’=f_\theta(h)$,然后计算它们在具有相同正确答案的实例上的平均值,对于答案a来说其动态原型为$\phi^a=\frac{1}{N^a}\sum_{i:\hat{s}^a_i=1}^{N^a}$
Experiments
实验需要验证三个方面:
模型及其不同组件如何有效地使用支持集
支持集对VQA来说有多有用
是否能够从数据集中学习到不同层面的东西
消融实验
在作者提出VQA-Numbers(VQA2.0的一个split)上实验
对support set进行评估,动态原型+动态权值带来比较大的提升,仅有动态权值效果不好
Conclusions and Future Work
模型在实际应用时需要处理动态权值的内存,目前动态权值随支持集线性增长,聚类可能可以减少其规模,同时哈希方法也许可以加快内容检索的效率
支持集可以替换为web搜索或者知识库