【深度学习6】对比学习(Contrastive Learning)入门

news/2025/2/9 2:28:42

主要内容:

1. 何为对比

2. 如何构造正负样本

3. 对比学习loss

4. 对比学习loss代码

1. 何为对比

「对比学习」属于无监督学习的一种,即给一堆数据,没有标签,自己学习出一种特征表示。

我们知道的无监督方法有聚类(迭代地更新聚类中心,让属于同一类的样本更近,不同类的样本更远),自编码器(输入x->特征隐层编码->解码恢复出x',让x'和x接近),那对比学习又是怎么个操作,怎么构建loss反向传播呢?

对比学习,关键是「对比」,根据聚类和自编码器的思想,对比应该也是有A和B更近,A和C更远这种比较性的思想的。所以关键在于如何拿到B和C。(其实聚类也算是一种对比)

何为对比?

2. 如何构造正负样本

深度学习时代万物皆可创造,没有数据也能造出来数据,最简单的构造样本的方式是这样的:

先来看B,B和A是更近的样本,学名叫“正样本”,怎么造B?只要跟A很像就行了呀,这不就是数据增强吗?拿图片来说,图片旋转、剪切等增加方式都可以往上堆了。文本也有很多增强方式,比如回译(英文-翻译成中文-再翻译回英文),相似词替换等等。

图像正样本构造方法(来自文献[1])

C是和A不像的样本,学名叫“负样本”,最简单粗暴直接的方式就是其他样本都是负样本,因为其他样本和它长的不一样。

3. 对比学习loss

那loss函数其实和聚类思想一样了,A的特征和正样本的距离近,和其他样本的距离远。训练的时候一般会用两个encoder(如ResNet)分别对样本A和它的正负样本提取特征,再分布映射到新的表示空间(比如采用MLP层),在这个空间里根据对比loss训练模型参数。

end-to-end对比学习方式[2]

对比学习常用loss——InfoNCE [2]

其中q就是我们的样本A的特征,k+是正样本,k_i是其他样本。

具体使用的时候,最直接最简单粗暴的训练方式是:以采用一种数据扩增为例,一个batch为N的训练样本,通过数据扩增,变成了2N个样本,其中有1个正样本,2N-2个负样本。

常用的loss:

NT-Xent loss,全称为Normalized Temperature-scaled Cross Entropy Loss

来自[1]simCLR

一个batch 有N 个样本,两条分支就有2N个samples。对于一个anchor样本i,除了对应的augmented image和自己,其余2N-2个都是负样本。分子是正样本之间的相似度,分母是负样本之间相似度。

最终的Loss是每个batch里所有样本对的loss和求平均。

代码实现:

对比损失的PyTorch实现详解_Adenialzz的博客-CSDN博客_对比损失

对比学习Python实现_Reacubeth的博客-CSDN博客_python 对比学习


http://www.niftyadmin.cn/n/3538184.html

相关文章

Android中的消息机制

提到Android中的消息机制,首先想到的必定是Handler,Looper和MesageQueue,我们在开发中接触到的最多的就是Handler,至于Looper和MessageQueue我们是知道的,但是并不会对其进行操作,最多的用法就是在子线程请求数据&…

asp设置cookies的过期时间

2019独角兽企业重金招聘Python工程师标准>>> 在ASP技术中,Cookie是Response的唯一的一个集合,是Web服务器在用户的浏览器中用来代表用户的令牌。当同一浏览器又一次请求同一Cookie设定的页面时,它将从用户端把上一次从Web服务器中…

【云原生】安装Docker、拉取pytorch镜像、拷贝程序到容器

1、安装docker 每台机器上执行下面的命令 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld# 关闭selinux # 永久关闭 sed -i s/enforcing/disabled/ /etc/selinux/config # 临时关闭 setenforce 0 # 关闭swap # 临时 swapoff -a # 永久关闭 sed -ri …

PyQt5 Pyinstaller时出现错误Cannot find PyQt5 plugin directories

环境:anacondapyqt5 pyinstaller时出现错误Cannot find PyQt5 plugin directories 解决方法: 用原生的python3.5 ------------------------------- 不知道Anaconda哪里出现冲突了! 参考: https://stackoverflow.com/questions/397…

jQuery EasyUI:accordion的onselect事件

jQuery EasyUI中accordion又事件onselect。 API中这样写道: 名称 参数 说明 onSelect title,index 当 panel 被选中时触发。 onAdd title,index 当增加一个新 panel 时触发。 onBeforeRemove title,index 当移除一个 p…

获取屏幕大小,用于屏幕自适应

http://blog.csdn.net/xingfuyusheng/article/details/6815865

一起入门Citrix_XenDesktop7系列 五--跟着图片通过PVS7.0交付无盘桌面

产品版本 产品​PVS7.XWindows Client8版本历史 版本更改内容创建者时间0.1创建文档Daniel_Wangjf2013年7月1日​​​​目录1. PVS解决方案介绍... 12. PVS组件... 22.1 许可证服务器... 22.2 Provisioning Services 数据库... 32.3 管理控制台... 32.4 网络服务... 42.5…

ios真机调试步骤

http://blog.csdn.net/jianxuanlu/article/details/7283059 http://www.cnblogs.com/85538649/archive/2012/05/21/2511308.html 第二 真机调试 http://mobile.51cto.com/iphone-276988.htm 发布流程 http://www.cnblogs.com/85538649/archive/2012/05/21/2511308.html http:/…