今天介绍下SimCLR,也是Hinton老爷子在今年提出的工作。首先介绍下为什么下一代神经网络需要无监督对比学习。目前整个人工智能行业的落地,其实都依赖于监督学习模式,无论是OCR、ASR、TTS、ImageDetection,如果没有大量的标注,是很难训练出商业化程度的模型的。这个模式需要被打破,因为世界上存在太多的未知场景,完全依赖人肉标注是不行的。
所以未来无监督学习大势所趋。其实在这方面之前已经有了一些工作,比如Bert模型,就可以基于大量的unlabeled数据训练,然后在小数据集上Fintune来取得效果。类似Bert这一类的训练模式叫做自监督学习。这种模式在NLP领域会有比较好的效果,但是在图像领域效果不明显,因为图像的数据表示会比语意复杂得多。
举个简单例子,“喜欢_ _ _ _的人都会关注凡人机器学习”,这句话虽然空了4个字,但是根据上下文不难猜出这4个字是“机器学习”。所以在NLP领域,自监督是比较好实现的。但是在图像方面,假设戴了墨镜,你能根据一个人的鼻子、嘴和耳朵推测出这个人墨镜后面的样子么?所以图像领域的无监督学习要难的多。
SimCLR基本原理
SimCLR使用无监督对比学习模式在图像领域取得了突破性的成果,可以看下在ImageNet数据集的表现。
那SimCLR究竟是怎么实现的呢,我们分步骤介绍下,看下图:
第一步:Augmentation
无监督对比学习的本质其实是让模型通过不同的类别数据的对比学习出相同类别的属性。所以为了增强同一类别的数据的特征表现,需要做Augmentation,包含数据裁剪、翻转、颜色转换等。
第二步:CNN
可以选用CNN的Resnet网络,做数据的向量表示。Resnet也是最终的分类器模型。
第三步:MLP
通过MLP,也就是全连接层,可以学习出数据的非线性信息,是对上一步的一个增强。通过这一步的学习就可以得出同一类别数据的共同信息特点。如下图所示:
第四步:Optimization
在Optimization这一步,Lossfunction的求法就是要让相同类别的数据对比的Loss最小。比如同是来源于“猫”的图片,他们之间的Loss需要很小,这个Loss的计算需要通过L(猫,猫)去除以L(猫,猫)+L(猫,其它类别)的和。
最终通过Loss去优化CNN和MLP,CNN的输出结果就可以作为最终的模型输出结果了。
参考文献:
[1]https://ai.googleblog.com/2020/04/advancing-self-supervised-and-semi.html
[2]https://blog.youkuaiyun.com/u011984148/article/details/106233313/
————————————————
版权声明:本文为优快云博主「李博Garvin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/buptgshengod/article/details/107899136
方法
SimCLR伪代码[2]
SimCLR示意图[1]
具体而言就是:
- 随机采样一个batch;
- 对batch里每张图像做两种增强,可以认为是两个view;
- 让同一张图的不同view在latent space里靠近,不同图的view在latent space里远离,通过NT-Xent实现。
方法的确蛮简单的,想起了我们2017年的一篇文章Unsupervised Triplet Hashing for Fast Image Retrieval。方法见下图:
Unsupervised Triplet Hashing for Fast Image Retrieval示意图
即:
- 随机采样一个batch;
- 对batch里每张图像,原图和随机旋转可以认为是两个view;
- 让同一张图的不同view在latent space里靠近,不同图的view在latent space里远离,通过triplet loss实现。
我们那篇文章是做无监督图像检索,当时在一些小数据集上(MNIST、CIFAR-10)也取得了不错的效果。
效果
这篇论文我是通过机器之心和量子位看到的。他们的描述如下。
机器之心
如今,在 ImageNet 上的图像识别准确率的性能提升每次通常只有零点几个百分点,而来自图灵奖获得者 Geoffrey Hinton 等谷歌研究者的最新研究一次就把无监督学习的指标 提升了 7-10%,甚至可以媲美有监督学习的效果。
量子位
在 ImageNet 上,SimCLR 方法训练出的线性分类器与有监督的 ResNet-50 性能相匹配,达到了 76.5% 的 top-1 准确率。
媒体报道给我的感觉是无监督能够做到跟有监督差不多好了,情况果真如此乐观了吗?我仔细看了一下论文。
SimCLR在无监督情况下top-1的accuracy是这么得到的:
1、backbone:ResNet-50(4x),即网络宽度是ResNet-50的4倍;
2、测试方式:linear evaluation protocol, where a linear classifier is trained on top of the frozen base network, and test accuracy is used as a proxy for representation quality,也就是说最后一层linear classifier其实是supervised learning训练得到的。
即媒体说的SimCLR可以媲美有监督的ResNet-50,有两个隐含条件:
1、网络参数更多;
2、在SimCLR无监督学习得到的网络之上使用有监督学习的方式训练了一个linear classifier。
SimCLR的效果当然很好,但是无监督跟有监督的差距还是蛮大的,情况没那么乐观。为了更直观地比较无监督和有监督,其实可以这样做:
1、使用相同网络;
2、直接用无监督学习得到的网络作为一个特征提取器,然后在验证集/测试集上通过检索的方式来获取类别,得到分类accuracy。
但是从特征提取器的角度来说,无监督学习的确取得了长足的进步,跟有监督学习的差距越来越小。
Reference
[1]机器之心:Hinton组力作:ImageNet无监督学习最佳性能一次提升7%,媲美监督学习
[2]A Simple Framework for Contrastive Learning of Visual Representations