Representation Learning with Contrastive Predictive Coding


Den Oord A V, Li Y, Vinyals O, et al. Representation Learning with Contrastive Predictive Coding.[J]. arXiv: Learning, 2018.

Henaff O J, Srinivas A, De Fauw J, et al. Data-Efficient Image Recognition with Contrastive Predictive Coding[J]. arXiv: Computer Vision and Pattern Recognition, 2019.

@article{den oord2018representation,
title={Representation Learning with Contrastive Predictive Coding.},
author={Den Oord, Aaron Van and Li, Yazhe and Vinyals, Oriol},
journal={arXiv: Learning},
year={2018}}

@article{henaff2019data-efficient,
title={Data-Efficient Image Recognition with Contrastive Predictive Coding},
author={Henaff, Olivier J and Srinivas, Aravind and De Fauw, Jeffrey and Razavi, Ali and Doersch, Carl and Eslami, S M Ali and Den Oord, Aaron Van},
journal={arXiv: Computer Vision and Pattern Recognition},
year={2019}}

與其說是無監督, 不如用表示學習或者特征提取更為貼切. 感覺監督學習的一個瓶頸就是, 你直接告訴了神經網絡它應該到達的終點, 那么它就會找一條最容易的路子去, 所以在訓練中, 可以發現訓練的精度很快就能達到100%, 而在測試集上的精度就差強人意了. 當然, 這錯不在網絡, 畢竟它已經盡可能地完成了我們交代給他的任務, 困難在於, 我們自己不知道該如何給這種兼顧泛化性的任務下達准確的定義(平移不變, 旋轉不變等等只是泛化的冰山一角).
而表示學習的工作實際上就是比簡單的分類損失等更具打磨的空間, 不同的先驗知識可以融入其中. 這篇論文的觀點就是, encoder提取的特征應當具有可預測性, 也就是說, 只有能夠預測別的特征的才是好特征. 當然, 這個是對具有序(時域或者空間)的數據有意義, 對於圖片可以認為構造這種數據, 個人認為這才是有趣的地方.

主要內容

從具有序的數據講起

在這里插入圖片描述

如上圖, 在不同的時間點, 有數據\(x_t\), 其經過第一個encoder \(g_{\mathrm{enc}}\)得到隱變量(特征表示)\(z_t\). 到此打住, 如果是以前, 那可能再來一個decoder, 然后希望解碼后數據和原始數據能夠吻合. 不過作者認為, 這種方式有點太過勉強了, 其實一個好的特征並不是既低維度(高能量密度)又能夠藏住大部分的信息, 一個好的特征應該是抓住最最最主要的信息, 如果是用於分類, 那就是抓住最具有區分度的信息(雖然這個很難下准確的定義).
作者的做法是, 將\(z_i, i\le t\)作為輸入, 構造一個回歸模型\(g_{\mathrm{ar}}\)(比如用RNN), 得到一個實際上具有之前數據信息的一個特征表示\(c_t\). 作者希望利用\(c_t\)來預測之后的\(x_{t+1},\ldots, x_{t+k},\ldots\), 或者\(z_{t+1},\ldots, z_{t+k},\ldots\), 自然最好的是有一個條件概率模型\(p(x_{t+k}|c_t)\), 然后最大化互信息

\[\tag{1} I(x;c)=\sum_{x,c} p(x,c)\log \frac{p(x|c)}{p(x)}. \]

Contrastive Predictive Coding (CPC)

作者並沒有打算構建條件概率模型(感覺這樣就像VAE一樣需要超多假設了), 只是用

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

來衡量二者的關系, 可以把\(W_kc_t\)看成是一個預測\(\hat{z}_{t+k}\).

接下來就要用到對比學習的概念了, 文中說是利用了負樣本采樣, 但是我用負樣本采樣的那個推導實在推不出來他的函數, 但是是有一點類似的(感覺只是套用了負采樣這個思想?). 即從\(p(x_{t+k}|c_t)\)中采樣正樣本\(x_{t+k}\), 從一般的分布\(p(x)\)中采樣N-1個負樣本\(x_j\), 然后最小化下式

\[\tag{4} \mathcal{L}_N=- \mathbb{E}_X [\log \frac{f_k(x_{t+k},c_t)}{\sum_{x_j \in X} f_k(x_j,c_t)}]. \]

其中\(X=\{x_1,\ldots, x_N\}\)(注, 這里\(X\)是固定的, 已知的).

\(\frac{f_k(x_i,c_t)}{\sum_{x_j \in X} f_k(x_j,c_t)}\)看成是第\(i\)個采樣點是正樣本的概率\(\hat{p}_i,i=1, \ldots,N\), 則上面的式子實際上就是一個交叉熵

\[\mathcal{L}_N = -\sum_{i=1}^N p_i \log \hat{p}_i, \]

故令損失最小的概率為\(\hat{p}_i=p_i:=p(d=i|X, c_t)\), 即正樣本在第\(i\)個位置的概率. 又

\[\begin{array}{ll} p(d=i|X, c_t) & = \frac{p(x_i|c_t) \prod_{l\not= i} p(x_l)}{\sum_{j=1}^N p(x_j|c_t)\prod_{l\not= j}p(x_j)} \\ &= \frac{\frac{p(x_i|c_t)}{p(x_i)}}{\sum_{j=1}^N\frac{p(x_j|c_t)}{p(x_j)} }. \end{array} \]

也就是說, 此時

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

圖片構建序

在這里插入圖片描述
如圖所示, 一張256x256的圖片, 均勻分成7x7張, 每張大小為64x64, 兩者最多有50%的重疊部分. 從上到下, 從左往右, 依次可以對其排序, 用前幾行的patches出來的\(z\)來預測后面的\(z\).

疑問: 這個負樣本的采樣空間, 是一個圖片所有的patches還是一個batch的所以的patches呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM