AutoEncoder

1.簡(jiǎn)介

?? Autoencoder是一種無監(jiān)督學(xué)習(xí)過程,由encode和decode構(gòu)成,給定輸入之后,經(jīng)過encode將輸入編碼成code,然后在經(jīng)過decode將code解碼成輸出,通過不斷地訓(xùn)練,使得輸入和輸出盡可能相似。通過控制encode的輸出維數(shù),可以實(shí)現(xiàn)以低維參數(shù)學(xué)習(xí)高維特征,實(shí)現(xiàn)了降維。在訓(xùn)練的過程中,主要使用反向傳播進(jìn)行優(yōu)化,使得輸入和輸出盡可能相似。

PAC(上)和autoencode(下)對(duì)比

encode和decode兩個(gè)過程可以理解成互為反函數(shù),在encode過程不斷降維,在decode過程提高維度。當(dāng)AutoEncoder過程中用卷積操作提取特征,相當(dāng)于encode過程為一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò),好多層的卷積池化,那么decode過程就需要進(jìn)行反卷積和反池化(https://blog.csdn.net/roguesir/article/details/77469665)。


架構(gòu)

Autoencode并不需要使完全重構(gòu)輸入,只是需要學(xué)習(xí)到原始圖像的重要特征,實(shí)現(xiàn)降維,從而有利于可視化或分類。下面使李宏毅機(jī)器學(xué)習(xí)可成長(zhǎng)的一個(gè)利用autoencode進(jìn)行text retrieval的例子。

2.應(yīng)用

2.1文本檢索

利用autoencode進(jìn)行Text retrieval

將每一個(gè)文本提取構(gòu)建成一個(gè)向量,那么就可以輕易的根據(jù)余弦相似度等方法得到不同文本之間的相似度,找到我們需要的文本,那個(gè),這個(gè)向量如何構(gòu)建呢,最直接的方法就是利用詞袋,若世界上一共有1000個(gè)詞,那個(gè)這個(gè)文本對(duì)應(yīng)的向量的維度是一千維的,每一個(gè)分量的取值為0或1,表示對(duì)應(yīng)的單詞在文檔中有沒有出現(xiàn)。但是這種方法構(gòu)建的向量復(fù)雜,且沒有考慮語義信息。Autoencode更好的解決了這個(gè)問題。

autoencode可以將向量不斷壓縮,壓縮成一個(gè)二維的向量,右上角的圖是Hinton在Science上發(fā)表的文章的結(jié)果圖,將文章分為了不同的類別,query對(duì)應(yīng)的類別如圖中紅點(diǎn)所示,描述的是Energy markets。而右下角所示的LSA并不能起到這種良好的分類效果。

2.2圖像搜索

或許可以通過圖片在像素上的相似程度來找到相似的圖片,但是這樣可能會(huì)存在問題。如下圖,要找到圖一的邁克爾杰克遜,但是直接計(jì)算像素上的相似性可能得到的相似性圖片是后面那幾張。

用Autoencode就可以解決這個(gè)問題,將圖片層層編碼成一個(gè)code,相當(dāng)于對(duì)原圖進(jìn)行了壓縮和特征提取,最后在code上進(jìn)行處理來比較相似性。

利用自編碼器進(jìn)行圖片搜索


2.3預(yù)訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)

????在進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練的時(shí)候,通常需要初始化一些參數(shù),如權(quán)重等。有一些方法可以實(shí)現(xiàn)這些參數(shù)的初始化,即pre-training,預(yù)訓(xùn)練。那么怎么進(jìn)行這些參數(shù)的初始化呢?autoencode就可以完成這個(gè)工作

預(yù)訓(xùn)練第一層參數(shù)

假如構(gòu)建了一個(gè)如上圖右邊所示的神經(jīng)網(wǎng)絡(luò),每一層的輸入維度分別為784/1000/1000/500,那么在訓(xùn)練第一層的時(shí)候可以利用自編碼器,如右圖所示,將784維的輸入輸進(jìn)自編碼器,中間encode一千維,使得輸出的結(jié)果和input越接近越好,這樣就將輸入轉(zhuǎn)化成了一個(gè)一千維的code,就得到了可以用來初始化的第一層的參數(shù)W1.這里要注意,encode的code如果要比輸入還要大,即這里的1000維大于784維,要小心自編碼器將輸入完全復(fù)制成code的情況,使得輸入和輸出是完全identity的。這一步將第一層的參數(shù)訓(xùn)練好之后就可以進(jìn)行下一步

第二層參數(shù)預(yù)訓(xùn)練

在固定第一層的參數(shù)的之后,可以得到一個(gè)1000維的輸入,在輸入一個(gè)自編碼器中,將輸入轉(zhuǎn)化為1000維的code,保證輸入和輸出盡可能相似,此時(shí)可以得到第二層的參數(shù)W2,如此下去,將W1和W2固定,再通過自編碼器可以得到W3,然后繼續(xù)下圖所示的過程。

微調(diào)第四層參數(shù)

????????將前三層參數(shù)預(yù)訓(xùn)練得到以后,將輸出的結(jié)果進(jìn)入最后一層,最后一層的參數(shù)可以隨機(jī)初始化,然后根據(jù)最后的誤差并利用反向傳播算法進(jìn)行調(diào)整。

4.在CNN上的應(yīng)用

? ? ? ? 在卷積神經(jīng)網(wǎng)絡(luò)中,利用反向傳播算法進(jìn)行學(xué)習(xí)時(shí),會(huì)有反卷積和反池化,就利用到了autoencode。

https://blog.csdn.net/sinat_25346307/article/details/79104612

3.幾種自編碼器?

3.1De-noising auto-encode

https://blog.csdn.net/marsjhao/article/details/73480859

本文只是作者的粗淺的理解,想要了解更多內(nèi)容可以看一下李宏毅老師的課程https://www.bilibili.com/video/av35932863/?p=24

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容