每天给你送来NLP技术干货!


来自:圆圆的算法笔记

对比学习是无监督表示学习中一种非常有效的方法,核心思路是训练query和key的Encoder,让这个Encoder对相匹配的query和key生成的编码距离接近,不匹配的编码距离远。想让对比学习效果好,一个核心点是扩大对比样本(负样本)的数量,即每次更新梯度时,query见到的不匹配key的数量。负样本数量越多,越接近对比学习的实际目标,即query和所有不匹配的key都距离远。

对比学习目前有4种最典型的范式,分别为End-to-End、Memory Bank、Momentum Encoder以及In-Batch Negtive。这几种对比学习结构的差异主要体现在对负样本的处理上,4种方法是一种逐渐演进的关系。下面,我们来看看4种对比学习结构的经典工作。关于对比学习的损失函数,建议参考之前的文章表示学习中的7大损失函数梳理。

1

End-to-End

End-to-End是一种最直接的对比学习方法,对于一个query,每次采样一个正样本以及多个负样本,使用对比学习loss计算损失,正样本和负样本都进行梯度反向传播。下面介绍几篇End-to-End的对比学习经典论文。

第一篇是Unsupervised Embedding Learning via Invariant and Spreading Instance Feature(2019)。本文的目标是学习图像好的表示,满足相似的图像embedding离得近,不相似的图像embedding离得远的特点。具体的,希望同一个图像经过不同的数据增强方式进行转换后,能够具有embedding的不变性,同时不同图像的embedding有明显差异。

这篇文章在原来每个样本为一个类别的分类基础上进行了优化,将每个图像进行一种数据增强的转换后,去让转换前后的图像的embedding离得更近。首先采样一个batch的图像,然后对每一个图像使用一种数据增强方法进行转换。优化的目标是让每一个图像xi转换后的图像xi'能够被分为xi这个样本的类别。模型的训练仍然采用多个二分类的方式,每个样本的loss可以表示为:

最终采用底层共享参数的孪生网络结构进行模型训练。在训练阶段,每个样本的会使用该batch内其他样本作为负样本进行训练,并使用一种随机的argumentation策略生成一个正样本。

LEARNING DEEP REPRESENTATIONS BY MUTUAL INFORMATION ESTIMATION AND MAXIMIZATION(ICLR 2019,DIM)是另一个典型的End-to-End对比学习框架。本文提出在Deep InfoMax基础上进行对比学习,首先介绍一下Deep InfoMax。Deep InfoMax是一种无监督图像表示学习方法,目标是让输入样本和其经过Encoder后的表示互信息最大,互信息越大表明两个变量相关性越强,互信息可以采用InfoNCE、Jensen-Shannon MI estimator等方法求解。

具体实现上,随机采样一个图像,经过卷积得到feature map f(x),再经过网络得到一个图像的表示向量h(f(x)),整个过程相当于取了整个encoder中某一层的表示f(x),以及encoder的最终输出h(f(x)),让这两个表示的互信息尽可能大。同时随机选择其他图像,生成其feature map f(x')。这样f(x)和h(f(x))构成正样本,f(x')和h(f(x))构成负样本,再代入loss进行优化。基本思路采用了MINE的方法,去求一个下界。使用一个discriminator去判别输入是配对的feature map和representaion的联合概率分布还是不配对的feature map和representaion的边缘概率分布的乘积。

最终学习的是中间表示中某一个部分的信息和最终encoder得到feature的相关性,互信息可以理解为在是否获取encoder最终表示的情况下,我们能预测出的中间层某部分的表示会好多少。这是使用相对的预估能力而非绝对的预估能力进行评估。

Learning Representations by Maximizing Mutual Information Across Views(2019)扩展了DIM,学习一个图像的两种不同增强方式的互信息最小。DIM使用同一张图像最终层和中间层的表示计算互信息,而本文采用一个图像的不同增强后的view计算。

End-to-End方法的主要问题在于,采样的负样本数量受到GPU内存限制,因此这种方法的每次更新能够使用到的负样本数量非常有限,影响了对比学习效果。

2

Memory Bank

针对End-to-End负样本采样数量受GPU内存限制的问题,基于Memory Bank的方法进入人们视野。Memory Bank的核心思路是,将某一轮模型对数据集中所有样本的表示存储起来,这些样本在作为负样本时,可以不进行梯度更新,极大提升了每个batch负样本数量。

Memory Bank对比学习的主要论文是Unsupervised feature learning via non-parametric instance discrimination(ICLR 2018)。当进行图像分类时,如果两个类别的图像相似,那么模型更容易把这两类的预测搞混,softmax得分排第二的的类别往往是和待预测类别比较相似的。这说明模型在学习的过程中,能够从图像数据本身学出哪些图片表达相似的事物,而不需要引入标签。因此本文希望只利用无监督的图片,就学习出比较好的图像表示,将原来的分类问题进行一个扩展,每个图片视为一个类别,做多分类任务,这样无需有监督数据就能学习图像表示。同时,将softmax中每个类别对应的权重替换为每个样本的embedding结果,将原来的softmax去掉每个类别的权重参数w后变为了 non-parametric softmax,最终表示为:

然而一个图像为一个类别带来的问题是计算softmax多分类损失时,分类的类别数和样本数相同。因此本文提出利用InfoNCE loss来近似拟合softmax多分类损失,它与层次softmax、negative sampling都是解决类别较多时多分为问题的高效方法InfoNCE loss将多分类问题转换为多个二分类问题,原来是预测当前样本属于哪个类别,转换成判断每个样本(一个正样本和多个负样本)是否和当前样本匹配,或区分数据样本和噪声样本

为了提升运行效率,本文采用Model Bank的方法,每个样本的表示更新后会存储到model bank中。下次需要负样本的时候直接从model bank取该样本表示,而不会进行前向计算和反向传播。每个类别只有一个样本会导致模型训练不稳定,因此本文在损失函数中引入平滑项,让模型在t轮迭代计算的表示和t-1轮相似,引入两轮表示的L2正则。随着模型不断收敛,这一项L2正则会逐渐变为0,整体又变成原来的InfoNCE loss。

Model Bank方法的问题在于,Model Bank中存储的样本表示不是最新训练的encoder产出的,和当前encoder生成的表示有一定差异,导致模型训练过程存在问题,例如当前encoder产出的编码可能要和n轮迭代之前产出的encoder编码做比较。同时,Model Bank侧两次样本表示更新不具备连续性,也会导致训练不稳定

3

Momentum Encoder

Momentum Encoder主要为了解决Model Bank中每个样本缓存的表示和Encoder更新不一致的问题。Momentum Encoder的核心思路是,模型在key侧的encoder不进行训练,而是平滑拷贝query侧encoder的参数,如下面的公式:

这种更新方式保证了key侧参数的平滑性,且每次都能用最新的参数得到key侧样本的表示结果。典型的Momentum Encoder工作是Facebook提出的MoCo,论文Momentum Contrast for Unsupervised Visual Representation Learning

4

In-Batch Negtive

In-Batch Negtive也是对比学习中经常采用的一种扩大负样本数量的方法。对于匹配问题,假设每个batch内有N个正样本对,那么让这N个正样本之间互为负样本,这样每个样本就自动生成了2*(N-1)个负样本。这种技巧提出的很早,在近期对比学习中又得到非常广泛的应用。

A Simple Framework for Contrastive Learning of Visual Representations(2020)就采用了In-Btahc Negtive的方法。此外,本文也提出了对比学习的一些关键发现,包括对数据的argumentation的方式、batch size的大小、生成的embedding进行normalize、对对比学习loss的temperature进行调节都对对比学习效果有重要影响。融合了上述优化,本文提出SimCLR对比学习框架,以最大化同一个图像经过不同argumentation后表示的相关性为目标。整个流程分为3个步骤,首先对图像进行两种不同的增强得到一对正样本,然后经过Encoder得到表示,最后将表示映射后计算对比学习loss,采用In-Batch Negtive的方法进行学习。

在图像和文本匹配的多模态领域,In-Batch Negtive也非常常用,例如Learning Transferable Visual Models From Natural Language Supervision提出的CLIP模型。In-Batch Negtive的优点是非常简单,计算量不会显著增加。缺点是负样本只能使用每个batch内的数据,是随机采样的,无法针对性的构造负样本。

5

总结

本文总结了对比学习的4种基本训练结构,包括End-to-End、Memory Bank、Momentum Encoder以及In-Batch Negtive,以及各自的优缺点。对比学习训练方式发展的核心是,如何实现量级更大、质量更好、更平稳的负样本表示。通过优化负样本,可以显著提升对比学习的效果。


对比学习中的4种经典训练模式相关推荐

  1. Dense Contrastive Learning for Self-Supervised Visual Pre-Training(基于密集对比学习的自我监督视觉预训练)2021

    最前面是论文翻译,中间是背景+问题+方法步骤+实验过程,最后是文中的部分专业名词介绍(水平线分开,翻译word文件可以找我要,能力有限,部分翻译可能不太准确) 摘要: 迄今为止,大多数现有的自监督学习 ...

  2. NeurIPS2021 港大腾讯AI Lab牛津提出:CARE,让CNN和Transformer能在对比学习中“互帮互助”!...

    关注公众号,发现CV技术之美 本文分享NeurIPS 2021 论文『Revitalizing CNN Attentions via Transformers in Self-Supervised V ...

  3. 深度学习中的两种不确定性:偶然不确定性和认知不确定性(Aleatoric Uncertainty Epistemic Uncertainty)

    转载:https://zhuanlan.zhihu.com/p/56986840 注: 本文中,概念.公式与实验均基于 Alex Kendall & Yarin Gal的论文:https:// ...

  4. 从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然

    从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然丨进程管理|内存管理|sk_buff|B树|B+树 视频讲解如下,点击观看: 从底层原理出发详解红黑树在Linux内核中的3种经 ...

  5. 对比学习范式是什么?代理任务和目标函数在对比学习中如何起作用?

    对比学习的典型范式就是:代理任务+目标函数.代理任务和目标函数也是对比学习与有监督学习最大的区别(划重点!!!).回忆一下有监督学习的流程,输入x,通过模型输出得到y,输出的y和真实label(gro ...

  6. Plotly中绘制三种经典的股票交易图表(含视频讲解)

    作者:Lemon 来源:Python数据之道 Plotly中绘制三种经典的 股票交易图表(含视频讲解) 大家好,我是 Lemon . 背景 前一段时间, Lemon 发了一期视频,分享了 Plotly ...

  7. 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3)

    认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 文章目录 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 零.代码地址 ...

  8. 深度学习中的20种卷积

    1. 引言 卷积,是卷积神经网络中最重要的组件之一.不同的卷积结构有着不一样的功能,但本质上都是用于提取特征.比如,在传统图像处理中,人们通过设定不同的算子来提取诸如边缘.水平.垂直等固定的特征.而在 ...

  9. 一文看尽深度学习中的20种卷积(附源码整理和论文解读)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 引言 卷积,是卷积神经网络中最重要的组件之一.不同的卷积结构有着不一样的功能,但本质上都是用于提取特征 ...

最新文章

  1. margin-before: 1em; margin-after: 1em;margin-start:0px;margin-end: 0px;
  2. 修改服务器劫包,APP游戏TCP包被劫持篡改的一些解决方案
  3. 区块链核心技术:拜占庭共识算法之PBFT全面理解
  4. 【机器学习】KNN算法代码练习
  5. 王者服务器维护宝箱礼包都没领,王者荣耀:S19战令最后一天,还没领取奖励的玩家要注意了...
  6. 后台系统可扩展性学习笔记(五)负载均衡
  7. java流类图结构_java学习之IO流(学习之旅,一)
  8. JScript中的条件注释详解(转载自网络)
  9. c语言按键实现跳转程序,C语言中的跳转语句
  10. 早上内部资源共享讨论发言稿
  11. jdbc连接linux下的mysql_Linux JDBC连接MySQL数据库
  12. 纯前端集成视频会议和聊天室
  13. 读吴军博士新浪微博(2012.09-2014.12)信息整理
  14. 如何在数据库中存储用户密码_如何在数据库中存储密码
  15. worldpress小工具自定义html,教程 | 用 worldpress 搭建自己的博客 – 小白教程
  16. 2022第三届云原生编程挑战赛--Serverless VSCode WebIDE使用体验
  17. 执一不二 跬步千里-王子密码2011年11月份心得(十)
  18. 大数据入门:Scala大数据黄金语言
  19. 苏州新导室内定位方案之WIFI RTLS室内定位解决方案
  20. 如何系统学习区块链技术-干货来袭

热门文章

  1. OKhttp 拦截器Intercept token失效验证
  2. ionic3开发系列——实现对手机软件键盘按键的监听
  3. C#与matlab混合编程,MATLAB生成dll出现的问题,请大家一起研究一下,谢谢
  4. CA6110发动机曲轴的加工工艺及夹具设计-说明书+外文翻译+夹具体+毛配图+曲轴零件图+夹具装配图+垫块图+工艺卡片10张
  5. 医学图像处理开源软件集合
  6. 基于vue2+element+springboot+mysql+jpa+mybatis的图书管理系统
  7. 2CoreIDRAW 软件的实际应用
  8. C语言程序设计教程(第三版)课后习题11.1
  9. 【01】层次分析法:01-层次分析法模型讲解
  10. 【C#】创建快捷方式