先验知识
事先在各种场景中,我们已经学会了某种知识,在真正用的时候,我们把这种知识应用到test上。
可约束的算法已经成为一个研究趋势,其中最简单的就是基于先验知识机制的训练模型,用先验知识控制训练过程,使得算法在不违背先验知识,或者可也称为人工强规则的前提下,获取最好的结果。
先验知识很可能对学习起到一定的作用。
语言先验
理想情况下,我们希望视觉问答模型均衡地利用语言先验部分和视觉部分进行学习。但是,例如下面的例子:如果VQA数据集上大部分香蕉是黄色的,少部分香蕉是绿色,那模型就有很大可能记住“香蕉是黄色”这个语言先验,在推断过程中过分依赖问题是什么,而忽略了实际展现的视觉部分,从而给出错误的答案。
语言先验包括有益的语言背景和有害的语言偏差,比如当我们问“多少个“的时候,答案就会限制在数字上;但一问到香蕉颜色就回答”黄色“就是一种有害的语言偏差。我们认为应该删除语言先验中的有害部分,保留有益部分,而不是全部删除。
VQA简介
视觉问答:一个vqa系统以一张图片和一个关于这张图片形式自由、开放式的自然语言问题作为输入,以生成的自然语言答案作为输出。

解决问题
提高模型的域外性能,对VQA来说就是减少语言先验带来的影响。
论文动机
虽然目前的模型已经显示出了非凡的结果,但这些结果是受限的,即对域内数据集有很好的性能,但不能很好地推广到域外或是对抗性数据集。在本文中称为数据集偏差。对于VQA来说就是,许多联合自然语言处理和视觉数据集可以通过忽略任务视觉方面的模型部分求解。即VQA模型容易学到虚假的语言关联,而不是多模态推理的能力。VQA模型的泛化性能差,尤其是在VQA-CP这样的数据集上。
为了解决上述问题,提出了本文的方法。
研究方法和创新点
以这些工作为基础,表明一旦确定了数据集偏差,我们就可以通过防止模型利用该偏差来提高模型的域外性能。为此,我们利用这些偏差通常可以使用简单、受约束的基线方法显式建模的事实,通过基于集成的训练将它们从最终模型中考虑出来。
作者提出了两阶段的方法。首先,我们构建一个仅偏差模型,旨在捕获在训练数据上表现良好的朴素解决方案,但无法推广到域外。接下来,我们使用预先训练的仅偏置模型在集成中训练第二个模型,这会激励第二个模型学习替代策略,并在测试集上单独使用第二个模型。
流程:

[图1将我们的方法应用于可视问题回答 (VQA) 任务的示例。我们假设给定问题的绿色预测在训练数据上几乎总是正确的。为了防止模型学习这种偏差,我们首先训练一个仅使用问题作为输入的仅偏倚模型,然后在与仅偏倚模型的融合中训练一个健壮模型。由于仅偏置模型已经捕获了目标模式,因此健壮模型没有学习它的动力,因此在模式不可靠的测试数据上做得更好]
- 第一阶段的目标是构建一个在训练数据上表现良好的模型,但在域外测试集上可能表现差的模型。对于VQA来说,文中仅仅使用问题类型作为输入。(测试集中问题类型和答案之间的相关性与训练集非常不同。)
- 第二阶段,训练一个鲁棒模型,避免使用仅偏置模型所学习的方法。
- 在测试集合上仅仅使用鲁棒模型。
BiasProduct:

定性分析:

Learned-Mixin:
条件独立性的假设(等式3)往往过于强烈。例如,在某些情况下,鲁棒模型可能能够预测仅偏倚模型对于某些类型的训练示例将不可靠。我们发现,这可能导致鲁棒模型有选择地调整其行为,以补偿仅偏置模型的不准确性,从而导致域外设置中的错误。
相反,我们允许模型显式确定给定输入的偏差的信任程度:

Learned-Mixin+H:

实验设置
数据集:VQA-CP,用于评估VQA模型的泛化能力。训练集和测试集数据分布不同。
主模型:使用BottomUpToDown(Anderson等人,2018)VQA模型的流行实现。
Bias-Only模型:VQA-CP附带有题为65个问题类型之一的问题,与问题的前几个单词相对应(例如,“什么颜色”)。 纯偏差模型使用此分类标签作为输入,并在与主模型相同的多标签目标上进行训练。

实验结果


当偏置模型预测正确时,在训练健壮模型时,可能会学到部分偏差,就是说g(x)越大,训练时给予偏差模型更多的权重,这样一来健壮模型对偏差特征学到的东西就会更少或者说这样让健壮模型对此问题学的不那么好,这样就可以避免学到更多的偏差,这样一来一旦在测试集上就更加减少了对偏差的依赖。
结论
我们的主要贡献是一种利用人类关于哪些方法不能很好地推广的知识来提高模型对域转移的鲁棒性的方法。 我们的方法是先用预先训练好的朴素模型训练一个鲁棒模型,然后在测试时单独使用该鲁棒模型。大量的实验表明,我们的方法在两个对抗性数据集和两个先验变化数据集上都能很好地工作,其中VQA-CP的增益为12点。未来的工作包括学习自动消除数据集偏差,这将允许我们的方法适用于不太具体的先验知识。
论文代码
环境搭建:需要在Linux环境,python2.7,某些代码更新写法,需要更改。
组会问题
-
g(xi)为什么会学为0?
对VQA-CP数据集来说,当偏置预测正确,g(x)值偏大;当偏置预测错误,就会学为0,但是添加熵惩罚会增加g(xi)的值,即会鼓励偏置分量不均匀。 -
添加熵惩罚为什么可以解决g(xi)不为0的问题?
当g(xi)为0时,经过softmax后的每一个向量分量都是(1/n),再经过熵惩罚,就会有较大的误差。 -
当偏置预测正确时,g(x)偏大。


-
既然我们希望g(x)偏大,是否可以将g(x)设置为一个超参数呢?
设置g(x)为8

结果发现精确率比仅偏置产品高,但却低于添加学习参数和熵惩罚的模型。考虑是不是主模型学的太少,以至于忽略了语言先验中某些好的部分。
实验补充图像


本文围绕视觉问答(VQA)模型展开,指出当前模型存在数据集偏差、泛化性能差的问题。为减少语言先验影响、提高域外性能,提出两阶段方法,先构建仅偏差模型,再训练鲁棒模型。实验表明该方法在多个数据集上效果良好,未来将研究自动消除数据集偏差。
最低0.47元/天 解锁文章
1862

被折叠的 条评论
为什么被折叠?



