作者:MARCIN ZAB?OCKI导读
编译:ronghuaiyang
如何使用SimCLR框架进行对比学习,看这个就明白了 。在过去的几个月中,NLP和计算机视觉的迁移学习和预训练受到了广泛的关注 。研究表明,精心设计的无监督/自监督训练可以产生高质量的基础模型和嵌入,这大大减少了下游获得良好分类模型所需的数据量 。这种方法变得越来越重要,因为公司收集了大量的数据,但其中只有一部分可以被人类标记 —— 要么是由于标记过程的巨大成本,要么是由于一些时间限制 。
在这里,我将探讨谷歌在这篇arxiv论文中提出的SimCLR预训练框架 。我将逐步解释SimCLR和它的对比损失函数,从简单的实现开始,然后是更快的向量化的实现 。然后,我将展示如何使用SimCLR的预训练例程,首先使用EfficientNet网络架构构建图像嵌入,最后,我将展示如何在它的基础上构建一个分类器 。
理解SimCLR框架一般来说,SimCLR是一个简单的视觉表示的对比学习框架 。这不是什么新的深度学习框架,它是一套固定的步骤,为了训练高质量的图像嵌入 。我画了一个图来解释这个流程和整个表示学习过程 。
文章插图
【SimCLR框架的理解和代码实现以及代码讲解】
流程如下(从左到右):
- 取一个输入图像
- 准备2个随机的图像增强,包括:旋转,颜色/饱和度/亮度变化,缩放,裁剪等 。文中详细讨论了增强的范围,并分析了哪些增广效果最好 。
- 运行一个深度神经网络(最好是卷积神经网络,如ResNet50)来获得那些增强图像的图像表示(嵌入) 。
- 运行一个小的全连接线性神经网络,将嵌入投影到另一个向量空间 。
- 计算对比损失并通过两个网络进行反向传播 。当来自同一图像的投影相似时,对比损失减少 。投影之间的相似度可以是任意的,这里我使用余弦相似度,和论文中一样 。
- 当来自相同输入图像的增强图像投影相似时,对比损失减小 。
- 对于两个增强的图像(i), (j)(来自相同的输入图像 — 我稍后将称它们为“正”样本对),(i)的对比损失试图在同一个batch中的其他图像(“负”样本)中识别出(j) 。
文章插图
最终的损失是batch中所有正样本对损失的算术平均值:
文章插图
请记住,在*l(2k- 1,2k) + l(2k, 2k-1)
推荐阅读
- 最强的开发者技术路线图已经更新到 2020 GitHub 超 118k还有中文
- 是时候更新手里的武器了—Jetpack架构组件简析
- TCP 重置攻击的工作原理
- 想知道是什么占用你的电脑空间,正确使用Windows 10查看磁盘空间
- 为什么你买的光纤跳线那么便宜,原来这里面门道不少
- 火山爆发之后流出的岩浆最后形成什么了 为什么火山里面会有岩浆
- 外星飞碟是否真的存在 UFO外星飞碟
- 有没有比黑洞更厉害的行星 围绕黑洞运转的行星
- 搭建本地 HTTPS 环境
- 泰坦尼克号沉没的真正原因 泰坦尼克号沉没是阴谋吗