自监督学习和对比学习

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


  推荐系统  

作者:炼丹小助手

来自:炼丹笔记

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

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

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

7aae5fda19e5cfbda16d21bd9eecfb0c.png

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

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

e00e319ed632ca995e656a0a1e37bb4c.png

886facafba8b088fcd8554f0aff7af22.png

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

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

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

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

6af6111f6796e4199f5456daf622bfe8.png

3c9ab83adcaca1ba62b95f42c6b28f86.png

962a714c582383c87b4a9d4416d8b428.png

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

  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].

代码也比较简单:

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,最后取得了相当好的效果。

5c9a0809360decf6552878539cbc4850.png

参考文献

c13c24a5091b75814bc649f89746c2c4.png


SimCLR:https://arxiv.org/pdf/2002.05709.pdf

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


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

9c50e2e6c23f605b783b8c5b54122e18.png

记得备注呦

整理不易,还望给个在看!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值