日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习中的互信息:无监督提取特征

發(fā)布時(shí)間:2024/10/8 pytorch 112 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习中的互信息:无监督提取特征 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


作者丨蘇劍林

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

研究方向丨NLP,神經(jīng)網(wǎng)絡(luò)

個(gè)人主頁丨kexue.fm


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


本文整體思路源于 Deep INFOMAX 的原始論文,但并沒有照搬原始模型,而是按照這自己的想法改動(dòng)了模型(主要是先驗(yàn)分布部分),并且會(huì)在相應(yīng)的位置進(jìn)行注明。


?隨機(jī)采樣的KNN樣本


我們要做什么


自編碼器


特征提取是無監(jiān)督學(xué)習(xí)中很重要且很基本的一項(xiàng)任務(wù),常見形式是訓(xùn)練一個(gè)編碼器將原始數(shù)據(jù)集編碼為一個(gè)固定長度的向量。自然地,我們對(duì)這個(gè)編碼器的基本要求是:保留原始數(shù)據(jù)的(盡可能多的)重要信息。?


我們?cè)趺粗谰幋a向量保留了重要信息呢?一個(gè)很自然的想法是這個(gè)編碼向量應(yīng)該也要能還原出原始圖片出來,所以我們還訓(xùn)練一個(gè)解碼器,試圖重構(gòu)原圖片,最后的 loss 就是原始圖片和重構(gòu)圖片的 mse。這導(dǎo)致了標(biāo)準(zhǔn)的自編碼器的設(shè)計(jì)。后來,我們還希望編碼向量的分布盡量能接近高斯分布,這就導(dǎo)致了變分自編碼器。?


重構(gòu)的思考


然而,值得思考的是“重構(gòu)”這個(gè)要求是否合理??


首先,我們可以發(fā)現(xiàn)通過低維編碼重構(gòu)原圖的結(jié)果通常是很模糊的,這可以解釋為損失函數(shù) mse 要求“逐像素”重建過于苛刻。又或者可以理解為,對(duì)于圖像重構(gòu)事實(shí)上我們并沒有非常適合的 loss 可以選用,最理想的方法是用對(duì)抗網(wǎng)絡(luò)訓(xùn)練一個(gè)判別器出來,但是這會(huì)進(jìn)一步增加任務(wù)難度。?


其次,一個(gè)很有趣的事實(shí)是:我們大多數(shù)人能分辨出很多真假幣,但如果要我們畫一張百元大鈔出來,我相信基本上畫得一點(diǎn)都不像。這表明,對(duì)于真假幣識(shí)別這個(gè)任務(wù),可以設(shè)想我們有了一堆真假幣供學(xué)習(xí),我們能從中提取很豐富的特征,但是這些特征并不足以重構(gòu)原圖,它只能讓我們分辨出這堆紙幣的差異。也就是說,對(duì)于數(shù)據(jù)集和任務(wù)來說,合理的、充分的特征并不一定能完成圖像重構(gòu)。


最大化互信息


互信息


上面的討論表明,重構(gòu)不是好特征的必要條件。好特征的基本原則應(yīng)當(dāng)是“能夠從整個(gè)數(shù)據(jù)集中辨別出該樣本出來”,也就是說,提取出該樣本(最)獨(dú)特的信息。如何衡量提取出來的信息是該樣本獨(dú)特的呢?我們用“互信息”來衡量。?


讓我們先引入一些記號(hào),用 X 表示原始圖像的集合,用 x∈X 表示某一原始圖像,Z 表示編碼向量的集合,z∈Z 表示某個(gè)編碼向量,p(z|x) 表示 x 所產(chǎn)生的編碼向量的分布,我們?cè)O(shè)它為高斯分布,或者簡單理解它就是我們想要尋找的編碼器。那么可以用互信息來表示 X,Z 的相關(guān)性。



這里的 p?(x) 原始數(shù)據(jù)的分布,p(z) 是在 p(z|x) 給定之后整個(gè) Z 的分布,即:



那么一個(gè)好的特征編碼器,應(yīng)該要使得互信息盡量地大,即:



互信息越大意味著(大部分的)應(yīng)當(dāng)盡量大,這意味著 p(z|x) 應(yīng)當(dāng)遠(yuǎn)大于 p(z),即對(duì)于每個(gè) x,編碼器能找出專屬于 x 的那個(gè) z,使得 p(z|x) 的概率遠(yuǎn)大于隨機(jī)的概率 p(z)。這樣一來,我們就有能力只通過 z 就從中分辨出原始樣本來。


注意:(1) 的名稱為互信息,而對(duì)數(shù)項(xiàng)我們稱為“點(diǎn)互信息”,有時(shí)也直接稱為互信息。兩者的差別是:(1) 計(jì)算的是整體關(guān)系,比如回答“前后兩個(gè)詞有沒有關(guān)系”的問題;計(jì)算的是局部關(guān)系,比如回答“‘忐’和‘忑’是否經(jīng)常連在一起出現(xiàn)”的問題。


先驗(yàn)分布


前面提到,相對(duì)于自編碼器,變分自編碼器同時(shí)還希望隱變量服從標(biāo)準(zhǔn)正態(tài)分布的先驗(yàn)分布,這有利于使得編碼空間更加規(guī)整,甚至有利于解耦特征,便于后續(xù)學(xué)習(xí)。因此,在這里我們同樣希望加上這個(gè)約束。?


Deep INFOMAX 論文中通過類似 AAE 的思路通過對(duì)抗來加入這個(gè)約束,但眾所周知對(duì)抗是一個(gè)最大最小化過程,需要交替訓(xùn)練,不夠穩(wěn)定,也不夠簡明。這里提供另一種更加端到端的思路:設(shè) q(z) 為標(biāo)準(zhǔn)正態(tài)分布,我們?nèi)プ钚』?p(z) 與先驗(yàn)分布 q(z) 的 KL 散度。



將 (1) 與 (4) 加權(quán)混合起來,我們可以得到最小化的總目標(biāo):



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


逐個(gè)擊破


簡化先驗(yàn)項(xiàng)


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



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



下面我們主攻互信息這一項(xiàng)。


互信息本質(zhì)


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



這個(gè)形式揭示了互信息的本質(zhì)含義:p(z|x)p?(x) 描述了兩個(gè)變量 x,z 的聯(lián)合分布,p(z)p?(x) 則是隨機(jī)抽取一個(gè) x 和一個(gè) z 時(shí)的分布(假設(shè)它們兩個(gè)不相關(guān)時(shí)),而互信息則是這兩個(gè)分布的 KL 散度。而所謂最大化互信息,就是要拉大 p(z|x)p?(x) 與 p(z)p?(x) 之間的距離。?


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



JS 散度同樣衡量了兩個(gè)分布的距離,但是它有上界,我們最大化它的時(shí)候,同樣能起到類似最大化互信息的效果,但是又不用擔(dān)心無窮大問題。于是我們用下面的目標(biāo)取代式 (7):



當(dāng)然,這并沒有改變問題的本質(zhì)和難度,JS 散度也還是沒有算出來。下面到了攻關(guān)的最后一步。


攻克互信息


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



對(duì)于 JS 散度,給出的結(jié)果是:



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



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


其實(shí) (12) 式的含義非常簡單,它就是“負(fù)采樣估計(jì)”:引入一個(gè)判別網(wǎng)絡(luò) σ(T(x,z)),x 及其對(duì)應(yīng)的 z 視為一個(gè)正樣本對(duì),x 及隨機(jī)抽取的 z 則視為負(fù)樣本,然后最大化似然函數(shù),等價(jià)于最小化交叉熵。?


這樣一來,通過負(fù)采樣的方式,我們就給出了估計(jì) JS 散度的一種方案,從而也就給出了估計(jì) JS 版互信息的一種方案,從而成功攻克了互信息。現(xiàn)在,對(duì)應(yīng)式 (9),具體的 loss 為:



現(xiàn)在,理論已經(jīng)完備了,剩下的就是要付諸實(shí)踐了。


從全局到局部


batch內(nèi)打亂


從實(shí)驗(yàn)上來看,式 (13) 就是要怎么操作呢?先驗(yàn)分布的 KL 散度那一項(xiàng)不難辦,照搬 VAE 的即可。而互信息那一項(xiàng)呢??


首先,我們隨機(jī)選一張圖片 x,通過編碼器就可以得到 z 的均值和方差,然后重參數(shù)就可以得到 zx,這樣的一個(gè) (x,zx) 對(duì)構(gòu)成一個(gè)正樣本。


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


局部互信息


上面的做法,實(shí)際上就是考慮了整張圖片之間的關(guān)聯(lián),但是我們知道,圖片的相關(guān)性更多體現(xiàn)在局部中(也就是因?yàn)檫@樣所以我們才可以對(duì)圖片使用 CNN)。換言之,圖片的識(shí)別、分類等應(yīng)該是一個(gè)從局部到整體的過程。因此,有必要把“局部互信息”也考慮進(jìn)來。?


通過 CNN 進(jìn)行編碼的過程一般是:



我們已經(jīng)考慮了 x 和 z 的關(guān)聯(lián),那么中間層特征(feature map)和 z 的關(guān)聯(lián)呢?我們記中間層特征為 {Cij(x)|i=1,2,…,h;j=1,2,…,w} 也就是視為 h×w 個(gè)向量的集合,我們也去算這 h×w 個(gè)向量跟 zx 的互信息,稱為“局部互信息”。?


估算方法跟全局是一樣的,將每一個(gè) Cij(x) 與 zx 拼接起來得到 [Cij(x),zx],相當(dāng)于得到了一個(gè)更大的 feature map,然后對(duì)這個(gè) feature map 用多個(gè) 1x1 的卷積層來作為局部互信息的估算網(wǎng)絡(luò) Tlocal。負(fù)樣本的選取方法也是用在 batch 內(nèi)隨機(jī)打算的方案。?


現(xiàn)在,加入局部互信息的總 loss 為:



其他信息


其實(shí),還有很多其他的信息可以考慮進(jìn)去。?


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


還有多尺度信息,可以手動(dòng)在輸入圖片那里做多尺度的數(shù)據(jù)擴(kuò)增,又或者是在編碼器這些引入多尺度結(jié)構(gòu)、Attention 結(jié)構(gòu)。諸如此類的操作,都可以考慮引入到無監(jiān)督學(xué)習(xí)中,提高編碼質(zhì)量。


類似的word2vec


其實(shí),熟悉 NLP 中的 word2vec 模型原理的讀者應(yīng)該會(huì)感覺到:這不就是圖像中的 word2vec 嗎??


沒錯(cuò),在原理和做法上 deep INFOMAX 跟 word2vec 大體都一樣。在 word2vec 中,也是隨機(jī)采集負(fù)樣本,然后通過判別器來區(qū)分兩者的過程。這個(gè)過程我們通常稱為“噪聲對(duì)比估計(jì)”,我們之前也提到過,word2vec 的噪聲對(duì)比估計(jì)過程(負(fù)采樣)的實(shí)際優(yōu)化目標(biāo)就是互信息,細(xì)節(jié)請(qǐng)參考“噪聲對(duì)比估計(jì)”雜談:曲徑通幽之妙。


word2vec 中,固定了一個(gè)窗口大小,然后在窗口內(nèi)統(tǒng)計(jì)詞的共現(xiàn)(正樣本)。而 deep INFOMAX 呢?因?yàn)橹挥幸粡垐D片,沒有其他“詞”,所以它干脆把圖片分割為一個(gè)個(gè)小塊,然后把一張圖片當(dāng)作一個(gè)窗口,圖片的每個(gè)小塊就是一個(gè)個(gè)詞了。當(dāng)然,更準(zhǔn)確地類比的話,deep INFOMAX 更像類似 word2vec 的那個(gè) doc2vec 模型。?


換個(gè)角度來想,也可以這樣理解:局部互信息的引入相當(dāng)于將每個(gè)小局部也看成了一個(gè)樣本,這樣就相當(dāng)于原來的 1 個(gè)樣本變成了 1+hw 個(gè)樣本,大大增加了樣本量,所以能提升效果。


同時(shí)這樣做也保證了圖片的每一個(gè)“角落”都被用上了,因?yàn)榈途S壓縮編碼,比如 32×32×3 編碼到 128 維,很可能左上角的 8×8×3>128 的區(qū)域就已經(jīng)能夠唯一分辨出圖片出來了,但這不能代表整張圖片,因此要想辦法讓整張圖片都用上。


開源和效果圖


參考代碼


其實(shí)上述模型的實(shí)現(xiàn)代碼應(yīng)當(dāng)說還是比較簡單的,總比我復(fù)現(xiàn) Glow 模型容易幾十倍。不管用哪個(gè)框架都不困難,下面是用 Keras 實(shí)現(xiàn)的一個(gè)版本:


https://github.com/bojone/infomax


來,上圖片


無監(jiān)督的算法好壞比較難定量判斷,一般都是通過做很多下游任何看效果的。就好比當(dāng)初詞向量很火時(shí),怎么定量衡量詞向量的質(zhì)量也是一個(gè)很頭疼的問題。deep INFOMAX 論文中做了很多相關(guān)實(shí)驗(yàn),我這里也不重復(fù)了,只是看看它的 KNN 效果(通過一張圖片查找最相近的 k 張圖片)。?


總的來說效果差強(qiáng)人意,我覺得精調(diào)之后做一個(gè)簡單的以圖搜圖問題不大。原論文中的很多實(shí)驗(yàn)效果也都不錯(cuò),進(jìn)一步印證了該思路的威力。


CIFAR-10


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



Tiny ImageNet


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



全局 vs 局部


局部互信息的引入是很必要的,下面比較了只有全局互信息和只有局部互信息時(shí)的 KNN 的差異。



又到終點(diǎn)站


作為無監(jiān)督學(xué)習(xí)的成功,將常見于 NLP 的互信息概念一般化、理論化,然后用到了圖像中。當(dāng)然,現(xiàn)在看來它也可以反過來用回 NLP 中,甚至用到其他領(lǐng)域,因?yàn)樗呀?jīng)被抽象化了,適用性很強(qiáng)。?


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


參考文獻(xiàn)


[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




點(diǎn)擊以下標(biāo)題查看作者其他文章:?


  • 變分自編碼器VAE:原來是這么一回事 | 附開源代碼

  • 再談變分自編碼器VAE:從貝葉斯觀點(diǎn)出發(fā)

  • 變分自編碼器VAE:這樣做為什么能成?

  • RealNVP與Glow:流模型的傳承與升華

  • 全新視角:用變分推斷統(tǒng)一理解生成模型

  • 細(xì)水長flow之NICE:流模型的基本概念與實(shí)現(xiàn)

  • 細(xì)水長flow之f-VAEs:Glow與VAEs的聯(lián)姻


關(guān)于PaperWeekly


PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。


▽ 點(diǎn)擊 |?閱讀原文?| 查看作者博客

總結(jié)

以上是生活随笔為你收集整理的深度学习中的互信息:无监督提取特征的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。