之前在csdn上仔细学习了一下对比学习,感觉还是不够透彻,就找了t子去you管上看了一下别的课程。在此记录了一下学习的历程。
之前看了李沐大神的对比学习模型串烧,csdn上有很多笔记。我仔细看了一下,以下这篇是我认为总结最好的。
李沐论文精读系列三:MoCo、对比学习综述(MoCov1/v2/v3、SimCLR v1/v2、DINO等)_moco 对比学习-CSDN博客
但是由于本人是此领域的小白,感觉还学习的还是不够透彻,所以又去找课程学习了一下。
看了一个斯坦福大学的课程,课程名字一会贴在这里
Key idea of Constastive Learning
对比学习的主要思想是:相似的例子应该有相似的表征
如图中左上例子,属于相同类别的例子;右上,同一图片进行了简单的数据处理;左下例子,同一图片中采集了两个图片块;右下,一个视频中时间前后出现的两张图。这些所有,在映射后都应该存在相似的表征。
对比学习背后的关键思想是采用我们直观认为应该具有相似表示的事物或者说encourage他们具有相似的表示(这里是人为的),以便于我们可以利用这个表示空间来转移到不同的下游任务中。
ok那就有问题了:我们是怎么在实践中实现这种直观感觉的呢?举例:
我们可以认为图中上面和下面是分别相似的,我们可以训练一个模型f来人为设定,我们设定其在欧几里得空间或者别的空间也行,距离min:
这时他就有一个退化解了,所以无论输入多少,最终最小距离都是0。(这里应该就是所谓的模型崩塌,这个是我之前一直没整明白怎么一回事的),但是得到0这个结果并不意味着你这个模型训练的很好。这也是对比学习的关键之一,我们不仅需要比较的示例且他们之间有相似表示,我们还要说明白他们之间是有哪些不同的。我们还需要对比图像
图中的意思就是,相似的图片在embedding space中靠近,不想死的图片在embedding space中远离。
对比学习有了两个关键点:
1.损失函数的选择(下面介绍两个,实际上有很多损失函数可以选择)
2.如何选择图像进行对比
损失函数
Triplet loss
关于anchor、正负样本对这些基础的就不说了
Triplet是对比损失最简单形式,他也效果最好,也是一个很好的起点。
我们不仅可以对一个负样本进行采样,也可以对多个负样本采样然后将它们合并起来。这也引出了第二个损失函数。
binary to N-way classification
无监督域训练过程:
此处以simclr为例子,不知道的建议先去看一下论文或者上面李沐老师的论文串讲。
simclr的结果展示:
batch size和epoch有什么影响
前人工作:
基于对比学习的数据增强:
总结:
与原学习的关系
这个系列课程后面还有好几个我想要了解的内容,后续的学习也会发笔记更新出来。