1.背景

对比学习算是比较早就已经提出了一种技术。其中,早期比较有名的一篇文章就是Lecun等在《Dimensionality Reduction by Learning an Invariant Mapping》(简称 DrLIM)文章中提出的对比学习,它主要是通过NN(非线性function)+对比学习任务实现降维,不过当前主要用于作为多任务的一个任务提升模型效果。

这篇文章提出的一段时间以来,对比学习的研究主要集中在CV领域。尤其是最近,自监督学习的兴起,CV领域的一些知名学者又对此做了新的探索,带起了对比学习研究的新一波热潮,比如:

  • Kaiming 等提出的这篇名为《Momentum Contrast for Unsupervised Visual Representation Learning》(简称:MoCo),以及MoCo V2
  • Hinton等提出的这篇名为《A Simple Framework for Contrastive Learning of Visual Representations》(简称:SimCLR)等等。

近两三年以来,Transformer在NLP领域取得巨大成功的原因,CV领域受此启发,在CV领域也尝试引入Transformer,其中,目标检测任务已取得成功。顺着互相借鉴的思路,NLP领域也有不少人尝试将对比学习应用在NLP领域。本人对此也做了尝试,本篇将简单介绍一种对比学习loss: DrLIM中提出的 Contrastive Loss及其在NLP中的应用。

2. Contrastive Loss

2.1 介绍

2.1.1 已有方法简介

已有方法非常之多,最有代表性的两类方法为:Principal Component Analysis(PCA) 和Multi-Dimentional Scaling(MDS)。

  • PCA:将输入映射到一个方差最大化的子空间
  • MDS:最大程度的保留输入样本对的距离

在此基础上,有一些非线性谱方法被提出,这些方法涉及到了一些特殊矩阵求解特征值的问题,比如:ISOMAP、Local Linear Embedding(LLE)、Laplacian Eigenmaps。

1)这些方法的共同点,都主要包含如下三步:

  • ①定义一个每个节点与它邻居的列表,即邻接关系;
  • ②使用这些邻接关系计算一个gram矩阵;
  • ③求解该矩阵的特征值。

2)不同点在于 如何求解这个gram矩阵。

但是一个新的节点加入时,他们都没有考虑:

  • 是不是可以不用重新计算整个embedding
  • 是不是可以不用考虑新节点与训练节点的关系

ps:GNN节点特征初始化也是采用如上步骤构造的

另外,Schoelkopf等人在PCA的基础上提出了PCA核方法,它的主要思路就是将输入映射到高维空间,然后抽取主成分,第一步是用点积表示PCA计算,第二步用核隐式计算高维映射。这里的核方法选择对embeddings的表示影响很大,所以,之后有Weinberger等人研究如何学习这个核矩阵。

2.1.2 已有方法的问题

DrLIM就是在这样的背景下提出的,通过以上介绍,我们可以知道这些降维方法都存在如下两个致命的问题:

  • 样本与输入空间中的距离测度相关:对样本的距离表示限制比较严格。
  • 当新样本与训练数据关系未知时,就不能够准确映射该样本。
2.1.3 DrLIM的优点
  • 仅需要样本间样本的相邻关系。(这样的关系可以来自于先验知识、人工标签、任何其他距离量度等)
  • 对输入的非线性变换保持不变。(非线性变换可以是光影变换,几何畸变等)
  • 没有先验知识的情况下,可以用于映射在训练中没有出现过的样本。
  • 在输出空间上,映射的结果是较平滑的,而且是一致的。
ps:
1)此处优点从本方法设计即可看出,另外,实验也充分表明了这些优点。
2)此处涉及到的降维方法非最新方法,如有需要请自行搜集最新的review或paper。

2.2 原理

简而言之,Contrastive Loss其原理就是是最大化不同类别之间的距离,最小化相同类别之间的距离,实现降维

2.2.1 形式化表示

不同于传统的loss计算所有样本的总和,本loss计算的是样本中的样本对的总和。

  • 样本对距离函数

定义X1,X2∈IX_1,X_2∈IX1,X2I分别为输入的样本对的向量;

定义YYY为样本对的标签,当Y=1Y=1Y=1表示样本对不相似,反之亦然;

定义可学习的DwD_wDw为样本对的距离函数,即:

DW(X1⃗,X2⃗)=∣∣GW(X1⃗)−GW(X2⃗)∣∣2D_W(\vec{X_1},\vec{X_2})=||G_W(\vec{X_1})-G_W(\vec{X_2})||_2DW(X1

,X2

)=GW(X1

)
GW(X2

)2

  • 样本对loss计算

定义相似样本对的loss为LSL_SLS,不相似的为LDL_DLD,则有,某一样本对的loss为:

L(W,(Y,X1⃗,X2⃗)i)=(1−Y)LS(DWi)+YLD(DWi)L(W,(Y,\vec{X_1},\vec{X_2})^{i})=(1-Y)L_S(D_W^{i}) + YL_D(D_W^{i})L(W,(Y,X1

,X2

)i)=(1Y)LS(DWi)+YLD(DWi)

LS和LDL_S和L_DLSLD应该满足这样一个条件:

当最小化LLL时,如果样本对相似,则DWD_WDW得到一个较小的值;如果样本对不相似,DWD_WDW得到一个较大的值,如下图所示:

上图我们可以将其看做是一个普通的凸函数:f(x)=x2f(x)=x^2f(x)=x2,则有:

  • 对于相似样本对的距离:DW=f(x)=x2D_W=f(x)=x^2DW=f(x)=x2,如上图的红色虚线,这时就可以在导数为0(loss最小处)的原点取到较小值。
  • 对于不相似样本对的距离:DW=f(x)=(x−m)2D_W=f(x)=(x-m)^2DW=f(x)=(xm)2,如上图的蓝色实线,这时就可以在导数为0与坐标轴交点为m(loss最小处)处取到较大值,当大于m不再优化。

根据以上思考,所有样本对的loss则被表示为,也即 Contrastive Loss

L(W,Y,X1⃗,X2⃗)=(1−Y)12(DW)2+(Y)12max(0,m−DW)2L(W, Y, \vec{X_1}, \vec{X_2})=(1-Y)\frac{1}{2} (D_W)^2 + (Y)\frac{1}{2}{max(0, m - D_W )}^2L(W,Y,X1

,X2

)=(1Y)21(DW)2+(Y)21max(0,mDW)2

2.2.2 与弹簧模型类比

为了便于理解,这里以弹簧模型为例,如下图:

  • 拉力弹簧(图上半部分):弹簧的静止长度为0,任意正位移X都使弹簧两个端点间产生拉力
  • 斥力弹簧(图下半部分):弹簧的静止长度为m,当X小于m 时,弹簧两个端点相互排斥
2.2.3 算法
  • 第1步,为训练集中任意样本XiX_iXi生成相似样本集和不相似样本集

    • a).用先验知识找到这样一个集SXi⃗={Xj⃗}j=1pS_{\vec{X_i}} = \{\vec{X_j}\}_{j=1}^pSXi

      =
      {Xj

      }j=1p
      ,这里Xj⃗\vec{X_j}Xj

      Xi⃗\vec{X_i}Xi

      相似
    • b).样本XiX_iXi构造相似集和不相似集:
      • 如果Xj⃗∈SXi⃗\vec{X_j}∈S_{\vec{X_i}}Xj

        SXi

        则加入相似集,并且Y=1Y=1Y=1
      • 如果Xj⃗∉SXi⃗\vec{X_j}∉S_{\vec{X_i}}Xj /SXi

        则加入不相似集,并且Y=0Y=0Y=0
  • 第2步,重复直到收敛

    • a).对每一对样本 (Xi⃗,Xj⃗)(\vec{X_i}, \vec{X_j})(Xi

      ,Xj

      )
      ,如下操作:

      • 如果Y=0Y=0Y=0,更新WWW,降低 DW(Xi⃗,Xj⃗)=∣∣GW(Xi⃗)−GW(Xj⃗)∣∣2D_W(\vec{X_i},\vec{X_j})=||G_W(\vec{X_i})-G_W(\vec{X_j})||_2DW(Xi

        ,Xj

        )=
        GW(Xi

        )
        GW(Xj

        )2
      • 反之亦然

2.3 实验

这里采用siamese结构,使用 Contrastive Loss设计了实验的模型结构,做了3组实验,佐证了DrLIM的优点。

2.3.1 实验训练结构

模型输入:样本对
模型输出:是否相似
样本特征表征方法:CNN
loss:contrastive loss

2.3.2 MNIST样本的映射

如下图所示,为测试集降为2维时的分布情况,我们可以看出,尽管测试集中4与9之间的关系没有给出,但是4和9的分布不仅均匀且组织良好。

2.3.3 MNIST样本的平移不变性

如下图所示,对样本中的像素做了水平(-6, -3, +3, and +6 pixels)的相加,我们可以看到5块不同的数据分布,尽管测试集中4与9之间的关系没有给出且对训练集透明,但是4和9的分布仍然分布均匀且组织良好

如下图,对部分样本做了失真处理,使用的是传统的LLE方法进行的降维结果,可以看出下图中测试集中失真的样本集中在输出结果的某一个角落,未失真的没有这个问题。

同理,采用本文的方法,即使失真,表现仍然优秀,如下图所示:

2.3.4 时域与光照映射不变性

数据集:NORB,共有972张,飞机在各种姿势和各种照明下观察半球周围的的图像。
(其中有18个方位角、9个仰角和6个照明条件)
训练样本构造方式:采用基于摄像机时间连续性的模式构造邻域图
ps:如果图像是从相邻的仰角或方位角拍摄的,则它们是相似的,而与照明无关。

  • 如下图所示,圆柱体的周长对应于输入空间中方位角的变化,圆柱体的高度对应于输入空间中的仰角,映射对光照是完全不变的。

  • 为了进行比较,在本实验中,也使用了LLE进行嵌入表示,虽然LLE算法可以使用任意邻域,但该算法通过计算线性重建权值来嵌入样本,严重限制了使用远邻域的效果;如下图所示,图上半部和下半部光照不同,嵌入表示明显不同,说明并没有光照不变这一特性。

3.在文本分类中的应用

在文本分类中,我们可以引入对比学习这一任务,在一般的分类任务的交叉熵loss后面添加一个对比学习loss,代码如下:

# //这里outputs以bert输出为例# 1.分类loss.loss_1 = F.cross_entropy(outputs.logits, b_labels) # 2.contrastive loss.euclidean_distance = F.pairwise_distance(outputs.logits, outputs_neg.logits, p=2) # 这里是计算不相似样本的lossloss_2 = torch.sum(torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2)) # 3.两个loss相加# 用交叉熵loss替换了原本的相似样本对lossloss = loss_1 + loss_2  # * k

4.reference

[1].Dimensionality Reduction by Learning an Invariant Mapping
[2].Momentum Contrast for Unsupervised Visual Representation Learning
[3].A Simple Framework for Contrastive Learning of Visual Representations
[4].FaceNet: A Unified Embedding for Face Recognition and Clustering
[5].https://mp.weixin.qq.com/s/CrEd02pXsc23FAeET0RaWQ
[6].https://zhuanlan.zhihu.com/p/103278453
[7].Reducing the Dimensionality of Data with Neural Networks
[8].https://www.cs.toronto.edu/~hinton/

【论文阅读】Dimensionality Reduction by Learning an Invariant Mapping相关推荐

  1. 论文阅读:GCRN:Learning Complex Spectral Mapping With GatedConvolutional Recurrent Networks forMonaural

    论文名称:使用门控卷积递归网络学习复杂频谱映射以增强单声道语音 论文地址:https://ieeexplore.ieee.org/abstract/document/8910352 1.摘要 相位对于 ...

  2. 论文阅读笔记:SCAN: Learning to Classify Images without Labels

    论文阅读笔记:SCAN: Learning to Classify Images without Labels 摘要 简介和相关工作 方法 表征学习 语义聚类损失 2.3 通过自标记进行微调 3 实验 ...

  3. Zero-shot Learning零样本学习 论文阅读(一)——Learning to detect unseen object classes by between-class attribute

    Zero-shot Learning零样本学习 论文阅读(一)--Learning to detect unseen object classes by between-class attribute ...

  4. 年龄论文阅读——Deep Label Distribution Learning With Label Ambiguity

    论文阅读--Deep Label Distribution Learning With Label Ambiguity 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.c ...

  5. 论文阅读|node2vec: Scalable Feature Learning for Networks

    论文阅读|node2vec: Scalable Feature Learning for Networks 文章目录 论文阅读|node2vec: Scalable Feature Learning ...

  6. 【论文阅读】Neural Transformation Learning for Deep Anomaly Detection Beyond Images 异常检测,可学习变换,时间序列,表格数据

    本博客系博主阅读论文之后根据自己理解所写,非逐字逐句翻译,预知详情,请参阅论文原文. 论文标题:Neural Transformation Learning for Deep Anomaly Dete ...

  7. 【论文阅读】Occupancy Networks: Learning 3D Reconstruction in Function Space

    论文题目:Occupancy Networks: Learning 3D Reconstruction in Function Space(占据网络:在函数空间内学习三维重建,简称ONet) 论文作者 ...

  8. 【论文阅读】Weakly Supervised Learning of Instance Segmentation with Inter-pixel Relations

    一篇经典的弱监督分割论文,发表在CVPR2019上面 论文标题: Weakly Supervised Learning of Instance Segmentation with Inter-pixe ...

  9. 论文阅读:Personalized Federated Learning with Moreau Envelopes

    论文名字 Personalized Federated Learning with Moreau Envelopes 来源   年份 2021.3.3 作者 Canh T. Dinh, Nguyen ...

最新文章

  1. 基于ARMv8的固件系统体系结构
  2. 冠军杜兰特和Deta比赛
  3. C++练习 | C++中Vector的使用
  4. 百度地图API实现地图应用
  5. 取出重复记录的第一条
  6. java.net.SocketException: Broken pipe问题解决
  7. C#LeetCode刷题-字典树
  8. 【NLP】毕设学习笔记(二)transformer
  9. 2019腾讯广告算法大赛方案分享(冠军)
  10. Jmeter自定义Java请求,继承AbstractJavaSamplerClient
  11. 使用openssl库实现des,3des加密
  12. 输入正方体的边长,计算正方体的面积和体积
  13. 工业控制系统基础知识
  14. jsp:session的跟踪方式
  15. 结合MACD看现货白银价格走势图
  16. 原生JS实现飞机大战游戏 超详细解析 快来做一个自己玩吧
  17. 【论文笔记】Learning from Multiple Cities: A Meta-Learning Approach for Spatial-Temporal Prediction
  18. 微信小程序 button 按钮
  19. easyexcel读取合并单元格
  20. 全息投影是计算机领域吗,世界计算机大会丨科技走进课堂:5G+全息投影教学

热门文章

  1. java android毕业设计题目,一个基于android的优秀毕业设计分享
  2. Xshell与Xftp链接
  3. xtgranger:面板格兰杰因果检验
  4. vue.js项目实战运用篇之抖音视频APP-第十一节: 注册登录及验证码功能
  5. 行车记录仪用计算机格式化,行车记录仪怎么格式化,行车记录仪格式化还有记录吗...
  6. 详解:新版 WIN 10 V2004 任务栏和开始菜单全透明
  7. linux 系统命令被后门修改_Linux后门维系(二)
  8. 柱状图特殊处理,每个柱子颜色不同,图例对应。
  9. 二维图形的剪裁_Sutherland-Hodgeman_Cohen—Sutherland
  10. C++ 学习基础篇—— C++与C 的区别