【花师小哲】当代炼金术(神经网络)前沿(6)——对比学习
今天偶然看到一张沙雕图:

然后,我发现,哎,这张图不是很好地诠释了什么是对比学习嘛。想到之前介绍神经网络科普的时候光顾着写BERT了,没有想到另一个著名的预训练任务——对比学习及著名的视觉大模型SimCLR。于是,在这里稍微盘一盘。


1.对比学习
所谓对比学习,思想也非常简单。作为一种自监督方法,对于一张图片,机器是无法直接指导它是只狗还是只猫的,但是我们可以让它知道猫和狗是不同的。对比学习就是希望相似的图片的距离(这里的距离简单理解就是将图片都映射到一个高维空间中的距离)尽可能近,差别很大的图片的距离尽可能远。框架如下:

可以看到,算法分为两支,即每次输入两个实例,如果这两个实例是相似的,我们就认为这是一对正例,就让它们的距离尽可能近;否则就构成一对反例,我们就让它们的距离尽可能远。
对比学习的好处是,虽然通过预训练,神经网络并不知道什么是猫,什么是狗,但它知道猫的图片和狗的图片距离很远,这样在微调时我们给它一些猫的实例和狗的实例它就能很快地进行猫狗的区分(对于其他机器视觉任务也是如此)

2.数据增强
那么问题来了,由于是自监督学习,所以我们甚至不能直接标明两张图片是否是相似的,那么怎么办呢?方法其实也很简单,即数据增强。
对于同一张图片,我们可以稍作修改,例如放缩、旋转、镜像、滤镜、遮挡等,如下图所示:

经过这样操作后的图片我们就认为它和原图片是相似的,这样就构成一对正例。而我们从网上随机扒拉下来的两张图片就构成一对反例(一般是很难做到两张刚好都是狗[还得是很相似的狗,例如都是草地上的一只站立着的腊肠狗]的),这样,我们就可以在无任何标注的情况下训练模型了。

3.预训练大模型
需要注意的是,对比学习依然也是预训练大模型的一种,它能有强大的能力很大程度上也是因为其参数大,记住了大量的实例。