Chen T., Kornblith S., Norouzi M., Hinton G. A Simple Framework for Contrastive Learning of Visual Representations. arXiv: Learning, 2020.

@article{chen2020a,

title={A Simple Framework for Contrastive Learning of Visual Representations},

author={Chen, Ting and Kornblith, Simon and Norouzi, Mohammad and Hinton, Geoffrey E},

journal={arXiv: Learning},

year={2020}}

SimCLR 主要是利用augmentation来生成正负样本对, 虽然没有花里胡哨的结构, 但是通过细致的tricks比之前的方法更为有效.

主要内容

流程

流程是很简单的, 假设有一个batch的样本\(x\), 然后从augmentation\(\mathcal{T}\)中随机选取俩个\(t,t'\), 由此得到两批数据\(\tilde{x}_i=t(x), \tilde{x}_j=t'(x)\), 经过第一个encoder得到特征表示\(h_i,h_j\), 再经由一个非线性变化\(g\)得到\(z_i,z_j\)(注意这一步是和以往方法不同的点), 再由\(z_i, z_j\)生成正负样本对(对应同一个样本的俩个样本构成正样本对, 否则为负样本对).

接下来先介绍一些比较重要的特别的tricks, 再介绍别的.

projection head g

一般方法只有一个encoder \(f(\cdot)\), SimCLR多了一个projection head \(g(\cdot)\), 它把第一次提到的特征再进行一次过滤:

\[z_i = g(h_i)=W^{(2)} \sigma(W^{(1)}h_i),
\]

其中\(\sigma\)为ReLU.

作者说, 这是为了过滤到由augmentation带来的额外的可分性, 让区分特征\(z\)变得更为困难从而学习到更好的特征\(h\).

注: 用于下游任务的特征是\(h\)而非\(z\)!

上表是将特征\(h\)或者\(z\)用于一个二分类任务, 区分输入是否经过了特定的augmentation, 结果显示\(h\)能够更好的分类, 意味着\(h\)比\(z\)含有更多的augmentation的信息.

constractive loss

\[\tag{1}
\ell_{ij}=-\log \frac{\exp(\mathrm{sim}(z_i,z_j)/\tau)}{\sum_{k\not=i} \exp(\mathrm{sim}(z_i,z_k)/\tau)},
\]

其中\(\mathrm{sim}(u,v)=u^Tv/\|u\|\|v\|\).

实验显示这个损失比别的都好用.

augmentation

SimCLR中augmentation是很重要的构造正负样本对的配件, 经过消融实验发现, 最有效的的是crop和color distortion.

另外, 实验还显示, 监督学习比起对比学习来讲, 对augmentation的依赖程度很低, 甚至可以说是不依赖.

other

  1. 大的模型充当encoder效果更好;
  2. 大的batch size 和 更多的 training epoches有助于学习到更好的特征表示;

代码

原文代码

最新文章

  1. 广度优先搜索(BFS)
  2. 高性能MySQL笔记 第4章 Schema与数据类型优化
  3. RDIFramework.NET平台代码生成器V2.8发布-更新于2014-12-31(提供下载)
  4. android TypedValue.applyDimension()的作用
  5. as中的陷阱
  6. boost::token_compress_on
  7. 《mysql数据库备份小脚本》
  8. 12、在XAML中定义处理程序
  9. C#调用java程序
  10. IOS 类别与扩展的区别 (category & extensions)
  11. ios--socket
  12. 01 if
  13. mnist数据集转换bmp图片
  14. opencv 边缘羽化,边缘过渡
  15. group()与groups()的区别
  16. ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(一)—修改数据库连接
  17. 4-20模块 序列化模块 hashlib模块
  18. PAT 1056 组合数的和
  19. WIN7环境变量path误删(windows找不到文件‘%windir%\systempropertiesadvanced.exe’)的解决办法
  20. 网络安装OS(配置文件)

热门文章

  1. Docker学习(三)——Docker镜像使用
  2. java生成cron表达式
  3. HongYun项目启动
  4. 基于war的Spring Boot工程
  5. 【Github】如何下载csv文件/win10如何修改txt文件为csv文件
  6. Netty 编解码奥秘
  7. 回溯——51. N皇后
  8. 程序员Meme 第00期
  9. Tableau如何绘制瀑布图
  10. *CTF pwn write up