CPC

2020.03.21更新

最近自监督学习引起了非常广泛的讨论,知乎大佬们写了一些非常好的总结,供大家参考:

真正的无监督学习之一——Contrastive Predictive Coding

Self-Supervised Learning 入门介绍

Self-supervised Learning 再次入门



Representation Learning with Contrastive Predictive Coding

z_t=g_{enc}(x_t)

观测序列x_t——非线性编码器g_{enc}——潜在表示序列z_t

c_t=g_{ar}(z_{<=t})

潜在表示序列z_{<=t}——自回归模型g_{ar}——上下文潜在表示c_t(——观测值x_{t+k}

不直接用生成模型p_k(x_{t+k}|c_t)预测未来观测值x_{t+k}

密度比(density ratio):保护x_{t+k}c_t的互信息

f_k(x_{t+k},c_t)\propto\frac{p(x_{t+k}|c_t)}{p(x_{t+k})} 

log-bilinear model

f_k(x_{t+k},c_t)=\exp{(z_{t+k}^TW_kc_t)} 

https://blog.csdn.net/u013265285/article/details/69062795

http://licstar.net/archives/328

Three New Graphical Models for Statistical Language Modeling

http://www.doc88.com/p-9089781351111.html


互信息:两个变量之间的相关性 

http://www.omegaxyz.com/2018/08/02/mi/


Data-Efficient Image Recognition with Contrastive Predictive Coding

1 实现框架

1. 无监督预训练(训练蓝色encoder):空间预测任务

a. patch —— encoder —— mean pooling —— single vector

b. center of image —— context network —— context vector —— predict unseen 

2. 用CPC表示进行分类

训练好的encoder + classifier (去掉context) —— 分类结果

2 具体细节

2.1 Feature Encoder

a patch x_{i,j} —— deep residual network —— mean-pooling —— a single vector

256*256 image —— 64*64 patch (32*32 overlap)—— 7*7 feature vector z_{i,j}=f_\theta(x_{i,j})

2.2 Context Network

c_{i,j}=f_{context}(z_{i,j})

PixelCNN (Pixel Recurrent Neural Networks)

PixelCNN (去掉softmax)

Gated PixelCNN (Conditional Image Generation with PixelCNN Decoders)

1 Gate

y=\tanh(W_{k,f}*x)\odot\sigma(W_{k,g}*x)

* conv

2 Blind spot

Horizontal Stack

1 x (n//2+1) conv with pad &crop 把中心点之后的截掉(e.g 3变2,7变4)

Mask B

2 w/o mask


3 w/ mask

Mask A

Vertical Stack

(n//2+1) x n conv with pad:n//2+1

A single layer in Gated PixelCNN

NOTE: 

pixelCNN         https://blog.csdn.net/p_lart/article/details/88602253

gated pixelCNN    https://blog.csdn.net/Jasminexjf/article/details/82499513

CODE: 

http://sergeiturukin.com/2017/02/24/gated-pixelcnn.html

https://github.com/kundan2510/pixelCNN/blob/master/layers.py


2.3 Predictor

根据当前上下文特征向量c_{i,j}预测未来特征向量z_{i+k,j},线性预测:

\hat{z}_{i+k,j}=W_kc_{i,j}



3 对比损失(InfoNCE)

目标:从数据集中的一系列随机采样的patch表示\{z_l\}中,正确找到target(有点像在好多块拼图中找正确的)

用softmax计算target概率,用交叉熵计算损失:位置+预测偏移的损失


其中,负样本\{z_l\}是该图像或其他图像的其他patch,这个损失叫InfoNCE,最大化c_{i,j}z_{i+k,j}的相互信息。

鼠老师的解释

预测 ——> 分类 ——> NCE

匹配程度——点乘相似度:\hat{z}^T_{i+k,j}z_{i+k,j}  (1*4096) * (4096*1) —— 1d

如果 x 高的地方 y 也比较高, x 低的地方 y 也比较低,那么整体的内积是偏大的,也就是说 x 和 y 是相似的。

softmax 归一到0-1之间

交叉熵 H(p,q)=-\sum_xp(x)\log q(x)=-\sum1*\log  (softmax)

NCE 损失 https://www.cnblogs.com/arachis/p/NCE_Loss.html

通俗易懂解释NCE https://www.zhihu.com/question/50043438

负采样 https://blog.csdn.net/qq_28444159/article/details/77514563

NCE+负采样 https://blog.csdn.net/wizardforcel/article/details/84075703


4 patch和image不匹配

symmetric padding

https://blog.csdn.net/guyuealian/article/details/78113325 (有图)

https://blog.csdn.net/Hansry/article/details/84071316

bn

https://www.cnblogs.com/wanghui-garcia/p/10877700.html


利用CPC进行无监督学习

避免trivial shortcuts: ways of solving the problem without learning semantics.

1. make the network larger (deeper & wider ResNet-170)

2. layer normalization

3. upward + downward direction: use different context networks

4. patch augmentation: color dropping (掉色) / randomly flip patches horizontally / jitter

利用CPC进行半监督学习

给定数据集,包含N 张图像\{x_n \} (无标签)

\theta^*= \arg \min_\theta \frac 1N \sum_{n=1}^NL_{CPC}[f_\theta(x_n)]

给定一个小数据集,包含M张图像(x_m,y_m)(有标签)

\phi^*= \arg \min_\phi \frac 1M \sum_{m=1}^ML_{Sup}[g_\phi f_{\theta^*}(x_m),y_m]


实验结果

Experiment 1  (label率 - acc)

Experiment 2 (other methods)

Experiment 3 (Transfer:classification - detection)

Experiment4 (Transfer:frozen / fine-tune)

Experiment5 (Linear Separate)

Experiment6 Iteration

总结

我们的研究结果表明,以前的研究远未充分挖掘上下文信息作为视觉表征学习的监控信号的潜力。

我们通过构建一个更强大的架构来解决一个CPC任务,并增加CPC任务的难度,训练出了更好的图像表示,即使每个类别只训练了13个图像,也比所有以前的方法在ImageNet上有更大幅度提高。这些特征在不进行微调的情况下提供了几乎同样强大的性能,表明了适用于许多视觉任务的通用、无监督功能的潜力。

然而,为了简化比较和全面探索的结构设计,本文仅在单个图像中使用空间预测,仅探索单个图像中的上下文,但还有许多其他预测任务可能进一步促进这些结果,如[15]所建议的。一个理想的任务应该包括时间和其他方式,我们相信对比特征预测可以作为其中许多方法的统一基础。考虑到自监督特征学习的快速发展,我们认为进一步的改进可能会导致无监督特征在视觉社区感兴趣的许多任务中优于有监督特征。

分布式训练

https://blog.csdn.net/m0_38008956/article/details/86559432

https://pytorch.org/docs/master/distributed.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容