首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自监督学习和对比学习

自监督学习和对比学习

作者头像
zenRRan
发布于 2021-12-01 14:11:48
发布于 2021-12-01 14:11:48
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

这篇主要探讨SimCLR,不需要用监督学习(supervision)的方式,采用自监督(self-supervised)的方式使得模型学到很多有用的patterns。众所周知,使用对比学习(修改样本,loss等小trick)就可以显著提高模型的泛化能力,所以我们都需要掌握这项"技艺"。

Self-Supervised Learning(SSL):自监督学习是目前机器学习中一个非常流行的分支,不管监督学习已经多么精准,最终能显著提升监督模型效果的永远是更多的有标签的数据。但是真实情况是,很多任务很难有大量标注的数据。SSL目标就是从无标注数据获取标注,并用他们来训练,在NLP中,我们随机mask掉部分文本,让模型去做完型填空。在几个G的语料库上这样学习后,模型就已经学到了很多语法知识,单词语意等。

研究证明,将这一思想推广到计算机视觉没啥用。想象一下,通过前几帧预测视频中的下一帧。乍一看,这与NLP中的掩蔽非常相似,但问题是,网络可以做出无数看似合理的预测,并且无法计算每一帧的概率,因为我们处于一个超高维、连续的空间中。

Contrastive Learning: 当研究两个物体时,我们很容易区分它们,即使以前从未见过它们。例如,一只狗和一把椅子,尽管它们的颜色可能彼此相似,但会有非常明显的特征,而一对狗,尽管它们的品种差异很小,但属于同一类别,我们会认识到这一事实。换句话说,通过辨别一个物体的视觉特征,能够在它和其他事物之间形成对比。

如下图所示,可以从一个物体中提取三个属性:I)它的颜色有多暗(0表示白色,1表示黑色),II)它有多可爱(0表示一点也不可爱,1表示非常可爱),以及III)它有多“舒适”(0表示一点也不舒适,1表示非常舒适),因此椅子比椅子和狗有更高的余弦相似性。

对比学习的工作原理类似,目的是从图像中提取特征,同时努力将相似的图片(也称为正对)放在一起,而将不同的图片(也称为负对)放在很远的地方。目前对比学习已经做了大量的研究,本文从《A Simple Framework for Contrastive Learning of Visual Representations》一文中的提出的SimCLR入手,SimCLR基本可以认为是学对比学习的基石了。

SimCLR:在图像分类任务中,如果每张照片都属于一个类,最基本的就要构造正负样本对,前者是来自一个类别的实例,后者是来自两个类别的两个数据点。然而,这将破坏SSL的目的,因此我们必须设计一种解决方案,处理成堆的未标记数据。SimCLR的方法是将每个图像视为一个单独的类别,并对其进行扩充,以便为每个所谓的类生成实例。例如,与配对(需要监督)不同,下图每行都是正例,随机取两行,取yige:

  • 正例对: (蓝色的椅子, 白色的椅子)
  • 负例对: (蓝色的椅子,狗)

有趣的是,数据增强在自我监督模型的准确性方面起着决定性的作用,即使它可能会损害监督训练。作者对各种数据增强进行了实验,并提出了三种精度最高的增强方法:

  1. Crop, resize, flip: The picture is cropped (the area of the cropped piece is between 8% to 100% of the original size, and the aspect ratio between 3/4 and 4/3), resized back to its original dimensions, and flipped horizontally (with a 50% chance).
  2. Colour distortion: Colour jitter (alter the brightness, contrast, saturation, and hue) with a hyperparameter to control its intensity in composition with greying out the picture, with probabilities of 80% and 20% respectively.
  3. Gaussian blur: A Gaussian kernel 10% of the size of the picture blurs the image half the time. The standard deviation for creating the kernel is randomly picked from the range [0.1, 2.0].

代码也比较简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torchvision import transforms
# Size used in SimCLR
size = 224
crop_resize_flip = transforms.Compose([transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3)),
                                       transforms.RandomHorizontalFlip(p=0.5)])

# Higher means stronger 
s = 1.0
# 0.8*s and 0.2*s are from the paper
colour_jitter = transforms.ColorJitter(brightness=0.8*s, contrast=0.8*s, saturation=0.8*s, hue=0.2*s)
colour_jitter = transforms.RandomApply([colour_jitter], p=0.8)
colour_distortion = transforms.Compose([colour_jitter,
                                        transforms.RandomGrayscale(p=0.2)])

kernel_size = int(0.1*size)
# The size of the kernel must be odd
kernel_size = kernel_size if kernel_size%2 == 1 else kernel_size+1
gaussian_blur = transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))
gaussian_blur = transforms.RandomApply([gaussian_blur], p=0.5)
                                       
augment = transforms.Compose([crop_resize_flip,
                              colour_distortion,
                              gaussian_blur])

这几项简单的数据增强技术如何能够提供截然不同的图像版本,从而提高SSL的性能。接下来,我们将数据输入模型,并指示它在不同的图像之间进行对比,以获得没有任何标签的有用视觉模式。

有了数据增强,就可以先随机采样一个batch,每个batch两次增强,让同一张图的不同view在latent space里靠近,不同图的view在latent space里远离,如下图所示。SimCLR使用ResNet-50(4x)作为模型,并在无监督学习后训练了一个linear classifier,最后取得了相当好的效果。

参考文献 SimCLR:https://arxiv.org/pdf/2002.05709.pdf

https://zhuanlan.zhihu.com/p/107269105

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自监督学习:机器学习的未来新方向
自监督学习(Self-Supervised Learning, SSL)是近年来机器学习领域的一个重要发展方向,迅速成为许多研究和应用的热点。与传统的监督学习不同,自监督学习利用未标注数据,通过设计自我生成标签的任务,帮助模型从数据中提取有用的特征。这种方法不仅减少了对大量人工标注数据的依赖,也极大地提高了模型在多种任务上的性能。
平凡之路.
2024/11/21
2240
自监督学习:机器学习的未来新方向
自监督学习:从概念到应用的全面解析
自监督学习(Self-Supervised Learning, SSL)是近年来机器学习领域的重要进展,它以未标注数据为核心,通过设计自生成标签的任务,挖掘数据的潜在结构和特征表示。在计算机视觉、自然语言处理(NLP)和语音处理等领域,自监督学习逐步成为研究热点,为减少标注数据依赖和提升模型性能提供了新思路。
用户11292525
2024/11/26
1K0
Hinton组力作:ImageNet无监督学习最佳性能一次提升7%,媲美监督学习
如今,在 ImageNet 上的图像识别准确率的性能提升每次通常只有零点几个百分点,而来自图灵奖获得者 Geoffrey Hinton 等谷歌研究者的最新研究一次就把无监督学习的指标提升了 7-10%,甚至可以媲美有监督学习的效果。
机器之心
2020/02/24
7800
Hinton组力作:ImageNet无监督学习最佳性能一次提升7%,媲美监督学习
「上帝视角」看对比自监督学习,SimCLR、CPC、AMDIM并无本质差异
对比自监督学习(CLS)是从无标签数据中选择和对比Anchor,Positive,Negative(APN)三种特征,学习到有用表征的方法。
新智元
2020/09/17
1.6K0
「上帝视角」看对比自监督学习,SimCLR、CPC、AMDIM并无本质差异
从零开始构建DINO模型与PyTorch:自监督视觉transformer
《从几个“补丁”中重建完整图像 | 构建可扩展学习器的掩模自编码器》这边文章讲了如何构建可扩展学习器,这是我对视觉变换器系列的继续,其中我解释了最重要的架构及其从零开始的实现。
小白学视觉
2024/11/14
5040
从零开始构建DINO模型与PyTorch:自监督视觉transformer
玩转pytorch中的torchvision.transforms
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2020/06/16
3.1K0
玩转pytorch中的torchvision.transforms
无监督学习之RBM和AutoEncoder
本文介绍了自编码器(Autoencoder)的基本概念、应用场景和实现方法。自编码器是一种无监督学习算法,用于学习数据的表征。它包括编码器和解码器两部分,其中编码器将输入数据压缩成低维表示,解码器将低维表示还原为原始输入。自编码器常用于降维、特征提取、生成模型等场景。实现自编码器的方法包括深度学习、统计学习等。
用户1147754
2018/01/02
1.7K0
无监督学习之RBM和AutoEncoder
自监督学习 —— MoCo v1
这里得到的I_pos的维度是**(N,1,1), N个数代表N**张图片的自己与自己的增强图的特征的匹配度。
为为为什么
2022/08/09
1.4K0
自监督学习 —— MoCo v1
拉开你和别人的距离,只差 Contrastive Learning 这一步
在上一篇自监督学习文章中,我们介绍了基于代理任务 (pretext task) 的自监督学习算法,各类任务均取得了一定的效果,然而并没有相对统一且效果令人满意的自监督学习范式。随着 MoCo 横空出世,视觉自监督领域掀起了一股对比学习的浪潮。
OpenMMLab 官方账号
2022/04/08
9420
拉开你和别人的距离,只差 Contrastive Learning 这一步
【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强
【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波
Qomolangma
2024/07/30
5590
【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强
Pytorch 中的数据增强方式最全解释
本文主要介绍 Pytorch 中 torchvision.transforms 几个数据增强函数的使用
机器视觉CV
2019/10/28
7.8K0
Pytorch 中的数据增强方式最全解释
视觉大模型DINOv2:自我监督学习的新领域
如果你对自监督学习感兴趣,可能听说过Facebook人工智能的DINO(无标签知识蒸馏)。我们在以前的文章中也介绍过它。DINOv2不仅是一个新版本而且带来了新的改进,并为判别性自监督学习设定了更高的标准。当然公司的名字也从Facebook变为了Meta。
deephub
2023/08/28
1.2K0
视觉大模型DINOv2:自我监督学习的新领域
自监督图像论文复现 | BYOL(pytorch)| 2020
比较陌生的可能就是torchvision.transforms.ColorJitter()这个方法了。
机器学习炼丹术
2021/02/03
1.5K1
自监督图像论文复现 | BYOL(pytorch)| 2020
自监督学习之对比学习
自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)。
全栈程序员站长
2022/10/05
1.2K0
自监督学习之对比学习
【人工智能】深入理解自监督学习中的表征学习与对比学习
自监督学习是一种无需大规模标注数据的学习方法,通过构造代理任务,模型可以从数据本身获取监督信号,从而学习有用的特征表征。
2的n次方
2024/10/15
5330
【人工智能】深入理解自监督学习中的表征学习与对比学习
ResNets首次反超有监督学习!DeepMind用自监督实现逆袭,无需标注
机器学习中,伴随着更多高质量的数据标签,有监督学习模型的性能也会提高。然而,获取大量带标注数据的代价十分高昂。
新智元
2022/02/24
2810
ResNets首次反超有监督学习!DeepMind用自监督实现逆袭,无需标注
论文推荐:ReLICv2 ,新的自监督学习能否在ResNet 上超越监督学习?
自监督 ResNets 能否在 ImageNet 上没有标签的情况下超越监督学习?
deephub
2022/03/12
4360
论文推荐:ReLICv2 ,新的自监督学习能否在ResNet 上超越监督学习?
自监督学习 —— MoCo v2
file:///C:/Users/issuser/Downloads/202205291635050.pdf
为为为什么
2022/08/09
1.1K0
自监督学习 —— MoCo v2
统一自监督学习框架 (华为)
自我监督学习(SSL)方法旨在利用大量未标记数据进行机器学习(ML),但其基本原理通常是特定于方法的。从具身学习的生物学第一性原理衍生的SSL框架可以统一各种SSL方法,帮助阐明大脑中的学习,并可能改进ML。SSL通常将每个训练数据点转换为一对视图,将这一对的知识用作正(即非对比)自监督标志,并可能将其与不相关(即对比)的负样本对立。在这里,我们表明这种类型的自我监督是神经科学概念的不完整实现,即EfferenceCopy(EC)。具体来说,大脑还通过输出 (即运动命令)来改变环境,但是它会向自己发送完整命令的EC,即不仅仅是一个SSL信号。此外,它的动作表示可能是自我中心的。
CreateAMind
2023/09/01
2790
统一自监督学习框架 (华为)
【源头活水】浅谈图上的自监督学习——对比学习
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2020/11/19
2.3K0
【源头活水】浅谈图上的自监督学习——对比学习
推荐阅读
相关推荐
自监督学习:机器学习的未来新方向
更多 >
交个朋友
加入[腾讯云] DeepSeek开发者交流群
前沿技术深度讨论 发展开发者人脉圈
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
加入AICoding云开发技术交流群
智能编码实践分享 聚焦AI+云开发
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档