当前位置: 首页 > news >正文

CVPR2022 BatchFormer

论文题目:https://arxiv.org/pdf/2203.01522.pdf

代码链接:GitHub - zhihou7/BatchFormer: CVPR2022, BatchFormer: Learning to Explore Sample Relationships for Robust Representation Learning, https://arxiv.org/abs/2203.01522

动机

尽管DNN近期在表示学习中取得了巨大成果,但这些方法严重依赖于大规模数据,大规模数据的收集在现实生活中并不是一件容易的事。因此,如何在数据稀缺的条件下学习鲁棒的深度表示特征收到了广泛关注。下图展示了不同样本之间的关系,相似的种类倾向于共享相似的部分(例如,公鸡、秃鹰共享身体形状和爪形)。 因此,将共享知识从 head/seen classes 转移到 tail/unseen classes 可以促进长尾/零样本学习。 此外,探索属于同一类的图像之间的不变特征也有助于使用少量样本学习鲁棒表示。

创新点

1)从DNN内部结构的角度来探索样本关系

2)提出了BatchFormer,用于探索每个mini-batch中的样本关系

3)大量的实验证明了BatchFormer的有效性,包括长尾识别、零样本学习、域泛化和自监督表示学习

方法论

Overview

不同样本之间的关系是多种多样且复杂的,作者从学习的角度考虑样本关系,目标是使DNN本身能够在端到端的深度表示学习期间从每个小bs中学习样本关系。提出的深度表示学习框架如下图所示。具体来说,首先使用骨干网络来学习单个数据样本的表示,即每个小bs中的不同样本之间没有交互。之后,利用Transformer中的交叉注意力机制对不同样本之间的关系进行建模,称为BatchFormer模块。然后将BatchFormer的输出作为最终分类器的输入。作者为了弥补训练和测试之间的差距,还在BatchFormer模块之前使用了一个辅助分类器,通过在最终分类器和辅助分类器之间共享权重,能够将从样本关系中学到的知识转移到主干和辅助分类器。因此,在测试时可以去掉BatchFormer,直接使用辅助分类器进行分类。

BatchFormer

BatchFormer模块堆叠了多个transformer编码层来学习不同样本之间的关系。

Transformer Encoder

transformer encoder包含了多头自注意力(MSA)及MLP层,后面再接了个LN层。X\epsilon R^{N\times C} 表示一系列输入特征,N是系列特征的长度,C是特征的维度。transformer编码器的公式如下:

其中,l是transformer编码器层数的索引值。MSA已被广泛用于建模通道和空间维度之间的关系。因此,作者认为它也可以扩展到探索batch维度中的关系。与transformer层的典型用法不同,BatchFormer的输入将首先被reshape,把整个batch视为一个序列。这样做就使transformer层中的自注意力机制就变成了BatchFormer不同样本之间的交叉注意力。

Shared Classifier

由于不能假设测试时的batch统计信息,如样本关系,因此BatchFormer模块之前和之后的特征之间可能存在差异。也就是说,我们无法通过直接移除BatchFormer来对新样本进行推理。因此,除了最终分类器之外,作者还引入了一个新的辅助分类器,这不仅可以从最终分类器中学习,还可以与BatchFormer之前的特征保持一致。为了实现这一点,只需在辅助分类器和最终分类器之间共享参数/权重。作者将这种简单而有效的策略称为“共享分类器”。通过提出的“共享分类器”,模型可以在测试期间移除BatchFormer模块,同时仍然受益于使用BatchFormer的样本关系学习。

BatchFormer在pytorch的伪代码如下所示:

BatchFormer: A Gradient View

为了帮助我们更好地理解BatchFormer是如何通过探索样本间的关系来辅助表示学习,作者还从梯度传播的角度为优化提供了直观的解释。直观地说,如果没有BatchFormer,所有损失只会在相应的样本和类别上传播梯度,即一对一,而使用BatchForme在其他样本上也存在梯度,如下图所示:

具体来说,给定N个样本集X以及对应的N个损失Loss,有:

BatchFormer对小batch中样本之间的关系建模,为每个标签yi隐式增加了 N-1 个虚拟样本,可以被视为一种数据增强方法。

实验结果

长尾识别

零样本学习

域泛化

自监督学习

消融实验之batch size

消融实验之shared classifier

结论

作者提出让深度神经网络本身能够探索每个小batch size中样本之间关系。首先将mini-batch中的每张图像(batch dimension)视为一个序列的一个节点,然后在这些图像之间建立一个Transformer Encoder Network来挖掘mini-batch中图像之间的关系。BatchFormer可以将每个标签的梯度传播到 mini-batch中的所有图像,这可以看作是虚拟的样本增强,从而提高了表示学习能力。此外,作者还在训练期间给BatchFormer的前后加入了权重共享分类器。最后作者展示了BatchFormer在十多个数据集上的有效性,并且在不同的任务上实现了性能显著提升。

相关文章:

  • Navicat连接SQLSever报错:[08001] MicrosoftTCP Provider 远程主机强迫关闭了一个现有的连接
  • 【ensp实验】Telnet 协议
  • 找不到mfc140.dll如何解决?mfc140.dll丢失的几种解决方法分享
  • LORA详解
  • 基于享元模式实现连接池
  • Java基础之JVM对象内存分配机制简介
  • android开发平台,Java+性能优化+APP开发+NDK+跨平台技术
  • 深度学习基础(三)循环神经网络(RNN)
  • InnoDB锁介绍
  • lv21 QT对话框3
  • [云原生] K8S声明式资源管理
  • 题目 1282: 公交汽车
  • EXCEL中ADDRESS函数的使用
  • libtorch c++ 搭建分类网络进行训练和预测
  • 初学前端-JavaScript(语法)
  • Hold the door!protobuf从PC到STM32的互相通信
  • 【allegro 17.2软件操作保姆级教程一】软件操作环境设置
  • Python基础内容训练11(面向对象进阶)
  • 不要小看get post的区别
  • 32.(前端)主页布局
  • 【Python】9*9乘法口诀表(while、for两种循环)
  • React中组件通信有哪些方式
  • Redux简单使用
  • 【PyTorch深度学习项目实战100例】—— 基于Conv3D实现三维立体MNIST数据集分类 | 第54例
  • 当心!你的App 可能是山寨的
  • 前端面试问题(5)
  • 十年网安行业代表性案例出炉,中睿天下Web攻击溯源案例实力入选
  • ARMv8/ARMv8的TLB深度学习
  • 【建议背诵】2022下半年软考「集成」100题(8)
  • 昇腾AI室外移动机器人学习指南(1 前言)
  • 【100个 Unity实用技能】| Unity中 检查当前设备网络状态 的几种方法整理
  • Db2数据库计算年龄