歡迎光臨
每天分享高質量文章

深度學習中的互信息:無監督提取特征


作者丨蘇劍林

單位丨廣州火焰信息科技有限公司

研究方向丨NLP,神經網絡

個人主頁丨kexue.fm

對於 NLP 來說,互信息是一個非常重要的指標,它衡量了兩個東西的本質相關性。筆者曾多次討論過互信息,本人也對各種利用互信息的文章頗感興趣。前段時間看到了最近提出來的 Deep INFOMAX 模型 [1],用最大化互信息來對圖像做無監督學習,自然也頗感興趣,研讀了一番,就得到了本文。 


本文整體思路源於 Deep INFOMAX 的原始論文,但並沒有照搬原始模型,而是按照這自己的想法改動了模型(主要是先驗分佈部分),並且會在相應的位置進行註明。


 隨機採樣的KNN樣本

我們要做什麼


自編碼器


特征提取是無監督學習中很重要且很基本的一項任務,常見形式是訓練一個編碼器將原始資料集編碼為一個固定長度的向量。自然地,我們對這個編碼器的基本要求是:保留原始資料的(盡可能多的)重要信息。 


我們怎麼知道編碼向量保留了重要信息呢?一個很自然的想法是這個編碼向量應該也要能還原出原始圖片出來,所以我們還訓練一個解碼器,試圖重構原圖片,最後的 loss 就是原始圖片和重構圖片的 mse。這導致了標準的自編碼器的設計。後來,我們還希望編碼向量的分佈儘量能接近高斯分佈,這就導致了變分自編碼器。 


重構的思考


然而,值得思考的是“重構”這個要求是否合理? 


首先,我們可以發現通過低維編碼重構原圖的結果通常是很模糊的,這可以解釋為損失函式 mse 要求“逐像素”重建過於苛刻。又或者可以理解為,對於圖像重構事實上我們並沒有非常適合的 loss 可以選用,最理想的方法是用對抗網絡訓練一個判別器出來,但是這會進一步增加任務難度。 


其次,一個很有趣的事實是:我們大多數人能分辨出很多真假幣,但如果要我們畫一張百元大鈔出來,我相信基本上畫得一點都不像。這表明,對於真假幣識別這個任務,可以設想我們有了一堆真假幣供學習,我們能從中提取很豐富的特征,但是這些特征並不足以重構原圖,它只能讓我們分辨出這堆紙幣的差異。也就是說,對於資料集和任務來說,合理的、充分的特征並不一定能完成圖像重構。


最大化互信息


互信息


上面的討論表明,重構不是好特征的必要條件。好特征的基本原則應當是“能夠從整個資料集中辨別出該樣本出來”,也就是說,提取出該樣本(最)獨特的信息。如何衡量提取出來的信息是該樣本獨特的呢?我們用“互信息”來衡量。 


讓我們先引入一些記號,用 X 表示原始圖像的集合,用 x∈X 表示某一原始圖像,Z 表示編碼向量的集合,z∈Z 表示某個編碼向量,p(z|x) 表示 x 所產生的編碼向量的分佈,我們設它為高斯分佈,或者簡單理解它就是我們想要尋找的編碼器。那麼可以用互信息來表示 X,Z 的相關性。



這裡的 p̃(x) 原始資料的分佈,p(z) 是在 p(z|x) 給定之後整個 Z 的分佈,即:



那麼一個好的特征編碼器,應該要使得互信息儘量地大,即:



互信息越大意味著(大部分的)應當儘量大,這意味著 p(z|x) 應當遠大於 p(z),即對於每個 x,編碼器能找出專屬於 x 的那個 z,使得 p(z|x) 的概率遠大於隨機的概率 p(z)。這樣一來,我們就有能力只通過 z 就從中分辨出原始樣本來。


註意:(1) 的名稱為互信息,而對數項我們稱為“點互信息”,有時也直接稱為互信息。兩者的差別是:(1) 計算的是整體關係,比如回答“前後兩個詞有沒有關係”的問題;計算的是區域性關係,比如回答“‘忐’和‘忑’是否經常連在一起出現”的問題。


先驗分佈


前面提到,相對於自編碼器,變分自編碼器同時還希望隱變數服從標準正態分佈的先驗分佈,這有利於使得編碼空間更加規整,甚至有利於解耦特征,便於後續學習。因此,在這裡我們同樣希望加上這個約束。 


Deep INFOMAX 論文中通過類似 AAE 的思路通過對抗來加入這個約束,但眾所周知對抗是一個最大最小化過程,需要交替訓練,不夠穩定,也不夠簡明。這裡提供另一種更加端到端的思路:設 q(z) 為標準正態分佈,我們去最小化 p(z) 與先驗分佈 q(z) 的 KL 散度。



將 (1) 與 (4) 加權混合起來,我們可以得到最小化的總標的:



看起來很清晰很美好,但是我們還不知道 p(z) 的運算式,也就沒法算下去了,因此這事還沒完。


逐個擊破


簡化先驗項


有意思的是式 (5) 的 loss 進行稍加變換得到:



註意上式正好是互信息與的加權求和,而 KL(p(z|x)‖q(z)) 這一項是可以算出來的(正好是 VAE 的那一項 KL 散度),所以我們已經成功地解決了整個 loss 的一半,可以寫為:



下麵我們主攻互信息這一項。


互信息本質


現在只剩下了互信息這一項沒解決了,怎麼才能最大化互信息呢?我們把互信息的定義 (1) 稍微變換一下:



這個形式揭示了互信息的本質含義:p(z|x)p̃(x) 描述了兩個變數 x,z 的聯合分佈,p(z)p̃(x) 則是隨機抽取一個 x 和一個 z 時的分佈(假設它們兩個不相關時),而互信息則是這兩個分佈的 KL 散度。而所謂最大化互信息,就是要拉大 p(z|x)p̃(x) 與 p(z)p̃(x) 之間的距離。 


註意 KL 散度理論上是無上界的,我們要去最大化一個無上界的量,這件事情有點危險,很可能得到無窮大的結果。所以,為了更有效地優化,我們抓住“最大化互信息就是拉大 p(z|x)p̃(x) 與 p(z)p̃(x) 之間的距離”這個特點,我們不用 KL 散度,而換一個有上界的度量:JS 散度(當然理論上也可以換成 Hellinger 距離,請參考 f-GAN簡介:GAN模型的生產車間 [2]),它定義為:



JS 散度同樣衡量了兩個分佈的距離,但是它有上界,我們最大化它的時候,同樣能起到類似最大化互信息的效果,但是又不用擔心無窮大問題。於是我們用下麵的標的取代式 (7):



當然,這並沒有改變問題的本質和難度,JS 散度也還是沒有算出來。下麵到了攻關的最後一步。


攻剋互信息


在文章 f-GAN簡介:GAN模型的生產車間 [2] 中,我們介紹了一般的 f 散度的區域性變分推斷,即那篇文章中的式 (13):



對於 JS 散度,給出的結果是:



代入 p(z|x)p̃(x),p(z)p̃(x) 就得到:



你沒看錯,除去常數項不算,它就完全等價於 deep INFOMAX 論文中的式 (5)。我很奇怪,為什麼論文作者放著上面這個好看而直觀的形式不用,非得故弄玄虛搞個讓人茫然的形式。


其實 (12) 式的含義非常簡單,它就是“負採樣估計”:引入一個判別網絡 σ(T(x,z)),x 及其對應的 z 視為一個正樣本對,x 及隨機抽取的 z 則視為負樣本,然後最大化似然函式,等價於最小化交叉熵。 


這樣一來,通過負採樣的方式,我們就給出了估計 JS 散度的一種方案,從而也就給出了估計 JS 版互信息的一種方案,從而成功攻剋了互信息。現在,對應式 (9),具體的 loss 為:



現在,理論已經完備了,剩下的就是要付諸實踐了。

從全域性到區域性

batch內打亂


從實驗上來看,式 (13) 就是要怎麼操作呢?先驗分佈的 KL 散度那一項不難辦,照搬 VAE 的即可。而互信息那一項呢? 


首先,我們隨機選一張圖片 x,通過編碼器就可以得到 z 的均值和方差,然後重引數就可以得到 zx,這樣的一個 (x,zx) 對構成一個正樣本。


負樣本呢?為了減少計算量,我們直接在 batch 內對圖片進行隨機打亂,然後按照隨機打亂的順序作為選擇負樣本的依據,也就是說,如果 x 是原來 batch 內的第 4 張圖片,將圖片打亂後第 4 張圖片是 x̂ ,那麼 (x,zx) 就是正樣本,(x̂,zx) 就是負樣本。 


區域性互信息


上面的做法,實際上就是考慮了整張圖片之間的關聯,但是我們知道,圖片的相關性更多體現在區域性中(也就是因為這樣所以我們才可以對圖片使用 CNN)。換言之,圖片的識別、分類等應該是一個從區域性到整體的過程。因此,有必要把“區域性互信息”也考慮進來。 


通過 CNN 進行編碼的過程一般是:



我們已經考慮了 x 和 z 的關聯,那麼中間層特征(feature map)和 z 的關聯呢?我們記中間層特征為 {Cij(x)|i=1,2,…,h;j=1,2,…,w} 也就是視為 h×w 個向量的集合,我們也去算這 h×w 個向量跟 zx 的互信息,稱為“區域性互信息”。 


估算方法跟全域性是一樣的,將每一個 Cij(x) 與 zx 拼接起來得到 [Cij(x),zx],相當於得到了一個更大的 feature map,然後對這個 feature map 用多個 1×1 的捲積層來作為區域性互信息的估算網絡 Tlocal。負樣本的選取方法也是用在 batch 內隨機打算的方案。 


現在,加入區域性互信息的總 loss 為:



其他信息


其實,還有很多其他的信息可以考慮進去。 


比如我們已經考慮了 Cij 與 z 的互信息,還可以考慮的是 Cij 之間的互信息,即同一張圖片之間的 Cij 應當是有關聯的,它們的互信息應該盡可能大(正樣本),而不同圖片之間的 Cij 應當是沒關聯的,它們的互信息應該盡可能小。不過我實驗過,這一項的提升不是特別明顯。 


還有多尺度信息,可以手動在輸入圖片那裡做多尺度的資料擴增,又或者是在編碼器這些引入多尺度結構、Attention 結構。諸如此類的操作,都可以考慮引入到無監督學習中,提高編碼質量。


類似的word2vec


其實,熟悉 NLP 中的 word2vec 模型原理的讀者應該會感覺到:這不就是圖像中的 word2vec 嗎? 


沒錯,在原理和做法上 deep INFOMAX 跟 word2vec 大體都一樣。在 word2vec 中,也是隨機採集負樣本,然後通過判別器來區分兩者的過程。這個過程我們通常稱為“噪聲對比估計”,我們之前也提到過,word2vec 的噪聲對比估計過程(負採樣)的實際優化標的就是互信息,細節請參考“噪聲對比估計”雜談:曲徑通幽之妙


word2vec 中,固定了一個視窗大小,然後在視窗內統計詞的共現(正樣本)。而 deep INFOMAX 呢?因為只有一張圖片,沒有其他“詞”,所以它乾脆把圖片分割為一個個小塊,然後把一張圖片當作一個視窗,圖片的每個小塊就是一個個詞了。當然,更準確地類比的話,deep INFOMAX 更像類似 word2vec 的那個 doc2vec 模型。 


換個角度來想,也可以這樣理解:區域性互信息的引入相當於將每個小區域性也看成了一個樣本,這樣就相當於原來的 1 個樣本變成了 1+hw 個樣本,大大增加了樣本量,所以能提升效果。


同時這樣做也保證了圖片的每一個“角落”都被用上了,因為低維壓縮編碼,比如 32×32×3 編碼到 128 維,很可能左上角的 8×8×3>128 的區域就已經能夠唯一分辨出圖片出來了,但這不能代表整張圖片,因此要想辦法讓整張圖片都用上。

開源和效果圖

參考代碼


其實上述模型的實現代碼應當說還是比較簡單的,總比我復現 Glow 模型容易幾十倍。不管用哪個框架都不困難,下麵是用 Keras 實現的一個版本:


https://github.com/bojone/infomax


來,上圖片


無監督的演算法好壞比較難定量判斷,一般都是通過做很多下游任何看效果的。就好比當初詞向量很火時,怎麼定量衡量詞向量的質量也是一個很頭疼的問題。deep INFOMAX 論文中做了很多相關實驗,我這裡也不重覆了,只是看看它的 KNN 效果(通過一張圖片查找最相近的 k 張圖片)。 


總的來說效果差強人意,我覺得精調之後做一個簡單的以圖搜圖問題不大。原論文中的很多實驗效果也都不錯,進一步印證了該思路的威力。


CIFAR-10


每一行的左邊第一張是原始圖片,右邊 9 張是最鄰近圖片,用的是 cos 相似度。用歐氏距離的排序結果類似。


Tiny ImageNet


每一行的左邊第一張是原始圖片,右邊 9 張是最鄰近圖片,用的是 cos 相似度。用歐氏距離的排序結果類似。



全域性 vs 區域性


區域性互信息的引入是很必要的,下麵比較了只有全域性互信息和只有區域性互信息時的 KNN 的差異。


又到終點站


作為無監督學習的成功,將常見於 NLP 的互信息概念一般化、理論化,然後用到了圖像中。當然,現在看來它也可以反過來用回 NLP 中,甚至用到其他領域,因為它已經被抽象化了,適用性很強。 


deep INFOMAX 整篇文章的風格我是很喜歡的:從一般化的理念(互信息最大化)到估算框架再到實際模型,思路清晰,論證完整,是我心中的理想文章的風格(除了它對先驗分佈的處理用了對抗網絡,我認為這是沒有必要的)。期待看到更多的這類文章。


參考文獻


[1]. Learning Deep Representations by Mutual Information Estimation and Maximization R Devon Hjelm, Alex Fedorov, Samuel Lavoie, Karan Grewal, Phil Bachman, Adam Trischler, Yoshua Bengio. ArXiv 1808.06670.

[2]. https://kexue.fm/archives/6016


點擊以下標題查看作者其他文章: 

關於PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

▽ 點擊 | 閱讀原文 | 查看作者博客

赞(0)

分享創造快樂