作者 | 得未曾有

出品 | 对白的算法屋

编者寄语:

通过对比学习来区分李沁和孙怡。

Contrastive Learning (对比学习) 是这两年深度学习非常热的话题,可以说是刷新了很多人对无监督学习对认知。最初谷歌写的Representation Learning with Contrastive Predictive Coding (CPC) 公式十分抽象,不好理解。我在做完了一个CPC的项目以后,决定做一张超直观的图帮助大家摆脱公式理解。

在讲CPC之前,我会先在第一部分用脸盲的例子,让大家先理解什么是Contrastive Learning,它为什么有用?它到底是如何学习的。 笔者始终相信,科研创新都是先有直觉(intuition),再有严密的公式推理。如果不明白intuition,是很难真正理解公式的

第二部分我会用一张自己做的图来解释CPC。

整篇文章我会围绕着理解contrastive learning的关键思想来讲:

  1. 构造positive pairs (正样本对) 和 negative pairs (负样本对)

  2. 在对比 positive pairs 和 negative pairs 的过程里提高辨识能力

一、发现自己脸盲时,你会怎么做?

很多人都有脸盲的体验,对我而言,脸盲是一大难题。不仅看外国电影会脸盲,连内地明星我也会。比如,假如你在不同的电视剧里分别看到李沁和孙怡两个人,深感困惑到底谁是谁的时候,你会怎么做?如果是我的话,我会去搜一下孙怡长什么样,李沁长什么样

⬇⬇⬇⬇⬇ 孙怡

⬇⬇⬇⬇⬇ 李沁

接下来,我猜你已经无意识的滑动手机图对比她俩了吧?

我们下意识地,在对比着她俩在不同情景下的图片,通过不断的对比,提升自己**【提取特征】**的能力。这里样本量可能不够大,这两位明星各三张图片,我仍然难以辨认她们。而对于天天见她们的导演,在日积月累的对比下,想必能抓取到更多特征。而阅人无数的导演,大概是不会像我们这么容易脸盲的。

在这个例子里,我想强调的是,我们在日常生活里,下意识地就会去构建正样本对(孙怡的不同照片,李沁的不同照片),和**负样本对****(**一张孙怡的照片 v.s. 一张李沁的照片)。

对于分辨能力比较弱,没见过多少妆容精致的女明星的我,正样本对和负样本对看起来可能差不多,我可能无法判断正样本对和负样本对,也就是说,从上面六张图里,你挑两张给我,我都不知道是不是同一个人。

而对于不脸盲的人来说,你挑两张图,他可能就知道是不是同一个人。

而我们改善自己脸盲问题的方式,就是不断的去学习,哪对图片是同一个人,哪对是不同人,从而提高分辨能力。

=========================

这就是

对比学习 (Contrastive Learning)

========================

二、现在我们来讲CPC

说好无公式,咱真的就不谈公式

这个图的主要部分是对一个个体的CPC的特征提取过程。请注意脚标 j 代表这是个体 j 。

灰色的长矩阵 代表个体j的时间序列,对于每一个frame,我们对它做 特征提取 (encode) ,也就是图中的箭头 ,然后每个frame会得到对应的黄色矩阵 ,

接下来,CPC原文里提到,它希望学得一些global information, 也称context information。什么是context information呢?举例来说,你在看电视剧的时候,看到了前面几十集 (对应图里的原时间序列 ),作为一个看片(不对,看剧)无数的人,你从前几十集觉察到了他们的感情逐渐有了罅隙(你作为encoder提取了 )),然后,你可能就开始【预言了】 :xxxx 和 yyyyy肯定会感情越来越糟糕( )。(context information)。但你其实是无法准确预测后来到底会具体发生什么事情,即

跳出电视剧来说,CPC会在样本里随机选一个时间点 , 把 前面提取到的所有的 用一个回归模型来总结前面所有信息(比如用RNN得到图里的 ),然后用线性变换去预测出

【重点来了】

那么怎么对比学习呢?

理想来说,你是一个阅剧无数的人,那么从这个电视剧后面的真实剧情 的感情走向 和你预测的感情走向 应该是极为相似的。

如果此时有人谈到另一个电视剧 (你看的电视剧叫 ) 的感情走向 ,那你一定能判断出他在谈的不是你在看的电视剧

可是如果你是一个小孩(初始化的神经网络,你可能就无法分辨不同剧的感情走向是不是对应的)

就像很多人模仿某作家的文风会被专业人士看出,却能欺骗过大众。

所以,正样本对和负样本对的定义是这样的:

(这里的k可以取1, 2, …, K), K是你认为最多能预测的timestep

那么网络到底是怎么进行学习的呢??

对不起,下面不得不有个公式:

定义对于单独一个样本j的NCE Loss:

这里f是一个相似度衡量函数,可以直接用exp(内积( ))。 (之所以不用MSE是因为CPC并不想要element wise的一致,而希望更全局的slowly changed 信息一致,希望mutual information一致)

这里分母的m=1,…, N 是采样的不是j的个体的embedding,通常取一个batch里的所有样本(包括样本j)。这样做比较方便写代码和计算。(不过Kaiming He最近有paper提出从batch之外采样效果更好。)

现在我们来看,对于牛逼的神经网络,分子的相似度应该很高,值会很大。

而分母的每一项,除了m=j的时候,其他项都应该非常小,甚至接近于0。

那么整个loss就会

而对于什么都不会的神经网络,假如是random guess,那么

所以,我们的只要minimize这个L,就是在优化这个神经网络,让它越来越能辨识正负样本对。

三、总结

这就是CPC的整个学习过程,通过这个正负样本对的loss来更新网络的所有参数。你可以理解为,逼着它更新特征提取器来学会辨识正负样本对。

更广一点contrastive learning的工作的思想也是这样的,只是正负样本对的构建方式不一样。

机器学习/对比学习算法交流群

已建立机器学习/深度学习算法交流群!想要进交流群学习的同学,可以直接加我的微信号:duibai996

加的时候备注一下:昵称+学校/公司。群里聚集了很多学术界和工业界大佬,欢迎一起交流算法心得,日常还可以唠嗑~

关于我

你好,我是对白,清华计算机硕士毕业,现大厂算法工程师,拿过8家大厂算法岗SSP offer(含特殊计划),薪资40+W-80+W不等。

高中荣获全国数学和化学竞赛二等奖。

本科独立创业五年,两家公司创始人,拿过三百多万元融资(已到账),项目入选南京321高层次创业人才引进计划。创业做过无人机、机器人和互联网教育,保研清华后退居股东。

我每周至少更新三篇原创,分享人工智能前沿算法、创业心得和人生感悟。我正在努力实现人生中的第二个小目标,上方关注后可以加我微信交流。

期待你的关注,我们一起悄悄拔尖,惊艳所有~

深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起相关推荐

  1. 黄浴:基于深度学习的超分辨率图像技术发展轨迹一览

    作者 | 黄浴 转载自知乎 导读:近年来,使用深度学习技术的图像超分辨率(SR)取得了显著进步.本文中,奇点汽车自动驾驶首席科学家黄浴对基于深度学习技术的图像超分辨率技术进行了一次全面的总结,分析了这 ...

  2. 笔记:深度学习与有向无环图SVM结合用于年龄估计的局部调整

    阅读论文:Combined Deep Learning With Directed Acyclic Graph SVM for Local Adjustment of Age Estimation | ...

  3. 2017深度学习最新报告及8大主流深度学习框架超详细对比(内含PPT)

    2017深度学习最新报告(PPT) ​ 深度学习领军人物 Yoshua Bengio 主导的蒙特利尔大学深度学习暑期学校目前"深度学习"部分的报告已经全部结束. 本年度作报告的学术 ...

  4. Arxiv最新论文,深度学习热点论文,Arxiv每日更新

    最新论文 https://arxiv.org/list/cs/recent 深度学习热点论文 https://deeplearn.org/ github 顶会摘要 每日更新 https://githu ...

  5. 对比学习系列论文CPCforHAR(一):Contrastive Predictive Coding for Human Activity Recognition

    0.Abusurt 0.1逐句翻译 Feature extraction is crucial for human activity recognition (HAR) using body-worn ...

  6. 对比学习系列论文CPC(二)—Representation Learning with Contrastive Predictive Coding

    0.Abstract 0.1逐句翻译 While supervised learning has enabled great progress in many applications, unsupe ...

  7. 深度学习基础 | 超详细逐步图解 Transformer

    作者 | Chilia 整理 | NewBeeNLP 首先,请阅读先修知识: 深度学习基础 | 从Language Model到RNN 深度学习基础 | RNN家族全面解析 深度学习基础 | Seq2 ...

  8. 深度学习炼丹-超参数设定和模型训练

    前言 网络层内在参数 使用 3x3 卷积 使用 cbr 组合 尝试不同的权重初始化方法 图片尺寸与数据增强 batch size 设定 背景知识 batch size 定义 选择合适大小的 batch ...

  9. 深度学习的关键:无监督深度学习简介(附Python代码)

    作者 | Faizan Shaikh 译者 | 马卓奇 编辑 | Vincent AI 前线导读:在这篇文章中,我们用一个直观的案例研究概述了无监督深度学习的概念.并且详解了在 MNIST 数据集上进 ...

最新文章

  1. linux 更改服务的启动顺序
  2. 每日记载内容总结44
  3. c盘python27文件夹可以删除嘛_电脑C盘那些文件夹可以删除
  4. xml文件转为ftl_idea freemarker热部署,自动加载修改的ftl页面
  5. 计算机课实验报告收获体会,计算机实验报告总结.doc
  6. 共识指数榜单0904
  7. python爬虫【2021.02.01】
  8. Photoshop和WPF双剑配合,打造炫酷个性的进度条控件
  9. ubuntu11.04 --- 没有了上边的导航 和左边的导航 怎么办?
  10. 通过jenkins+gitlab构建CI/CD流水线
  11. kali Linux的设置和优化(双系统)
  12. 一文了解数据分析师与商业分析师的区别(二)
  13. 句柄php,什么是PHP句柄
  14. BUAAOJ989 御坂御坂 约瑟夫环
  15. 按年复利和连续复利的区别及计算
  16. OmniSLAM:多鱼眼相机的SLAM系统
  17. chatGPT AI绘画
  18. 产品 电信nb接口调用_基于NB-IoT平台数据透传模式的应用接入平台设计方法与流程...
  19. 深度学习中的patch是什么?
  20. 文件的读和写(Python)

热门文章

  1. Xcode 常用编译选项设置
  2. 从零学会Photoshop经典教程300集
  3. React父组件调用子组件的方法【class组件和函数组件】
  4. 英伟达显卡安装老驱动388.71
  5. 2022 lineCTF WEB复现WriteUp
  6. 如何分类保存下载京东商城无官方水印商品主图
  7. 自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
  8. goinception审核规则
  9. Android画图方式
  10. Collision Filtering(selective collisions) 碰撞过滤(选择性碰撞)