Overcoming Language Priors in Visual Question Answering with Adversarial Regularization阅读笔记

本文关注现代视觉问答模型过度依赖语言关联而非图像的现象,提出一种新的对抗性正则化方案。通过仅问题模型与基础VQA模型的对抗训练,减少语言偏见,同时利用仅问题模型评估图像后的模型置信度变化,以增强模型的视觉依赖性。实验表明,这种方法能有效提升模型在语言先验变化情况下的性能。

现代视觉问答(VQA)模型已被证明严重依赖于训练期间所学的问答词之间的表面关联性,而与图像无关。本文提出了一个新的规则化方案,以减少这种影响。引入了一个仅问题模型,它将来自VQA模型的问题编码作为输入,并且必须利用语言偏差来获得成功。然后,将训练过程视为VQA模型和这个仅问题的对手之间的一场对抗性游戏,阻止VQA模型在其问题编码中捕捉语言偏差。此外,在考虑图像后,利用此仅问题模型来估计模型置信度的增加,以鼓励视觉背景。
一、文章引入
回答有关视觉内容的问题的任务称为视觉问答(VQA),提出了一系列丰富的人工智能挑战,涉及计算机视觉和自然语言处理。成功的VQA模型必须理解自然语言中提出的问题,识别图像中的相关实体、对象和关系,并执行基于基础的推理来推断正确的答案。为了应对这些挑战,近年来在数据集管理和建模方面对VQA进行了大量的工作。
对VQA的广泛兴趣导致了越来越复杂的模型在越来越大的基准数据集上获得越来越高的性能;然而,最近的研究表明,许多模型往往具有较差的图像基础,相反,大量利用训练数据集中问题和答案之间的表面相关性来回答问题。结果,这些模型往往表现出不正确的行为——盲目地根据问题的前几个词输出答案,因为它们的测试数据集中存在相同的强语言先验性。
在VQA中,语言优先权的一个直观的衡量标准是“盲”模型的性能,该模型只给出问题的答案,而不给出相关的图像。在这篇论文中,作者对这种直觉进行了整理,引入了一种新的正则化方案,针对仅问题的对立面设置了一个基本的VQA模型,以减少语言偏见的影响。
更具体地说,作者认为VQA中不希望出现的语言偏见是问题与从训练数据集学习到的可能答案之间的过分具体的关系,即那些可以使仅问题模型在没有看到图像的情况下实现相对较高性能的问题;以及明确优化了基本VQA模型中的问题表示,使其对仅问题的对抗性模型没有帮助。在这种对抗机制中,仅问题的模型经过训练,可以根据基本VQA模型提供的问题编码尽可能准确地回答问题;同时,对基础VQA模型进行了训练,以调整其问题编码器(通常实现为递归语言模型),在保持其自身VQA准确性的同时,将仅问题模型的性能降至最低。此外,利用仅问题模型来提供基于图像的可微分概念-考虑图像后模型置信度的变化-明确地将其最大化用于VQA模型。因此,本文的目

由于提供的引用内容未涉及克服神经网络中灾难性遗忘问题的方法,以下是一些常见的克服灾难性遗忘问题的方法: ### 正则化方法 - **弹性权重巩固(EWC)**:通过在损失函数中添加一个正则化项,来约束网络中重要参数的变化。重要性通过计算参数的Fisher信息矩阵来衡量,使得网络在学习新任务时,尽量保留对旧任务重要的参数值,从而减少对旧任务的遗忘 [1]。 ```python # 伪代码示例 import torch import torch.nn as nn # 假设model是神经网络模型 model = ... # 计算Fisher信息矩阵 fisher_matrix = ... # 旧任务的参数值 old_params = {n: p.clone().detach() for n, p in model.named_parameters()} # 定义损失函数 criterion = nn.CrossEntropyLoss() # 正则化系数 lambda_ewc = 0.1 # 训练循环 for inputs, labels in dataloader: outputs = model(inputs) loss = criterion(outputs, labels) # 添加EWC正则化项 for n, p in model.named_parameters(): loss += lambda_ewc * fisher_matrix[n] * (p - old_params[n]).pow(2).sum() optimizer.zero_grad() loss.backward() optimizer.step() ``` - **突触智能(SI)**:它通过跟踪参数的重要性来动态调整正则化强度。重要性是基于参数在学习过程中的变化对损失函数的影响来计算的。在学习新任务时,SI会对那些对旧任务有重要影响的参数变化进行惩罚,从而减少遗忘 [2]。 ### 基于记忆的方法 - **经验回放(Experience Replay)**:在训练新任务时,随机地从旧任务的数据集中采样一些样本,与新任务的数据一起进行训练。这样可以让网络在学习新任务的同时,不断回顾旧任务的数据,从而减轻遗忘 [3]。 ```python # 伪代码示例 import random # 旧任务数据集 old_dataset = ... # 新任务数据集 new_dataset = ... # 经验回放缓冲区大小 replay_buffer_size = 100 replay_buffer = [] # 填充经验回放缓冲区 for data in old_dataset: if len(replay_buffer) < replay_buffer_size: replay_buffer.append(data) else: index = random.randint(0, replay_buffer_size - 1) replay_buffer[index] = data # 训练循环 for new_inputs, new_labels in new_dataset: # 从经验回放缓冲区中采样 replay_inputs, replay_labels = random.choice(replay_buffer) combined_inputs = torch.cat([new_inputs, replay_inputs]) combined_labels = torch.cat([new_labels, replay_labels]) outputs = model(combined_inputs) loss = criterion(outputs, combined_labels) optimizer.zero_grad() loss.backward() optimizer.step() ``` - **生成重放(Generative Replay)**:使用生成模型(如生成对抗网络(GAN)或变分自编码器(VAE))来生成旧任务的数据样本。在学习新任务时,将生成的旧任务样本与新任务数据一起用于训练,以缓解灾难性遗忘 [4]。 ### 架构方法 - **多网络架构**:为不同的任务或任务组分配独立的子网络。当学习新任务时,只更新与该任务相关的子网络,而保留其他子网络的参数不变。这样可以避免不同任务之间的干扰,减少遗忘 [5]。 - **渐进式神经网络(Progressive Neural Networks)**:在学习新任务时,会添加新的列(一组新的神经元和连接)到网络中,同时保留旧任务的列不变。新列可以与旧列进行侧向连接,以利用旧任务的知识,同时不会覆盖旧任务的参数 [6]。 ### 元学习方法 元学习旨在学习如何学习,通过在多个任务上进行训练,让网络学会快速适应新任务,同时减少对旧任务的遗忘。例如,模型无关元学习(MAML)通过在多个任务上进行元训练,使得网络在遇到新任务时,能够快速调整参数以适应新任务,而不会忘记旧任务的知识 [7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值