離上一次更新沒(méi)過(guò)幾天圃郊,但卻經(jīng)歷了好多事情,2020真的太不尋常了…永遠(yuǎn)不知道明天和意外哪個(gè)會(huì)先來(lái)女蜈!珍惜當(dāng)下~天佑中華持舆!
今天接著記敘項(xiàng)目中需要用到的模型。
Stacked Auto Encoder
Stacked Auto Encoder稱為棧式自動(dòng)編碼伪窖,顧名思義逸寓,它是對(duì)自編碼網(wǎng)絡(luò)的一種使用方法,是一個(gè)由多層訓(xùn)練好的自編碼器組成的神經(jīng)網(wǎng)絡(luò)覆山。先引入關(guān)于 自動(dòng)編碼即(AE)的相關(guān)知識(shí)
Auto Encoder
AE(Auto Encoder)是一種無(wú)監(jiān)督的含有一個(gè)隱含層神經(jīng)網(wǎng)絡(luò)竹伸,其中輸出層被設(shè)置為等于輸入層,AE的目的是盡可能的準(zhǔn)確地重建原始輸入。
整個(gè)模型的結(jié)構(gòu)如下圖所示:
AE由編碼器和解碼器組成勋篓。
先簡(jiǎn)單說(shuō)一下思想:一般的MLP(多層感知機(jī))是一個(gè)有監(jiān)督學(xué)習(xí)的過(guò)程吧享,除了給定輸入數(shù)據(jù)X之外,還要給定label Y譬嚣,然后把X feed 到神經(jīng)網(wǎng)絡(luò)钢颂,并最小化神經(jīng)網(wǎng)絡(luò)的輸出與label Y之間的差值,通過(guò)這種方法來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的參數(shù)拜银。
AE的區(qū)別是這是個(gè)非監(jiān)督學(xué)習(xí)的過(guò)程殊鞭,也就是說(shuō)不需要label Y, 自編碼是這樣干的,它令每個(gè)樣本的標(biāo)簽為y=x尼桶,也就是每個(gè)樣本的數(shù)據(jù)x的標(biāo)簽也是x操灿。自編碼就相當(dāng)于自己生成標(biāo)簽,而且標(biāo)簽是樣本數(shù)據(jù)本身泵督。訓(xùn)練時(shí)的優(yōu)化目標(biāo)是讓輸出值跟輸入值盡可能接近趾盐,最好完全一樣。
我們可以這樣理解:輸入數(shù)據(jù)代表了一些信息幌蚊,起初以一定維度的數(shù)據(jù)來(lái)表示谤碳,然后經(jīng)過(guò)中間隱藏層編碼后溃卡,維度被壓縮(降低)了溢豆,但是最后還是還原成了一個(gè)與原始信息非常接近的數(shù)據(jù)。
舉個(gè)例子瘸羡,這個(gè)過(guò)程漩仙,就好像把文件先壓縮,再解壓縮犹赖,或者把文件加密再解密队他,數(shù)據(jù)的中間的形式(維度)發(fā)生了變化,但數(shù)據(jù)的信息量不變峻村。 這就是核心思想麸折,類似PCA。所以根據(jù)以上思想粘昨,只要訓(xùn)練一個(gè)簡(jiǎn)單的垢啼,單隱藏層的神經(jīng)網(wǎng)絡(luò),就可以用無(wú)監(jiān)督的方式實(shí)現(xiàn)數(shù)據(jù)降維张肾。這就是最基本的AE芭析。
接下來(lái)根據(jù)上面圖片看一下過(guò)程:
1.假設(shè)AE的輸入為:
其中dx是輸入的維數(shù)。
2.編碼器通過(guò)映射函數(shù)f將x從輸入層投影到隱含層其中d(h)是隱含層變量向量的維度吞瞪。其中f(x)函數(shù)表示為其中w是dh×dx權(quán)重矩陣馁启,b∈Rdx是偏差向量。解碼器的激活函數(shù)sf可以是sigmoid函數(shù)芍秆、tanh函數(shù)或者rectified 3.在編碼器中惯疙,通過(guò)映射函數(shù)f將隱含層表示的h映射到輸出層的x∈Rdx翠勉,其中f函數(shù)如下:其中w是dx×dh權(quán)重矩陣,b∈Rdx是輸出層的偏差向量螟碎。同樣sf的激活函數(shù)可以是sigmoid函數(shù)眉菱、tanh函數(shù)或者rectified linear unit function(ReLu函數(shù))。
4.AE用于通過(guò)對(duì)網(wǎng)絡(luò)施加限制(例如限制隱含層單元的數(shù)量)來(lái)重新構(gòu)建輸出x盡可能的與輸入x相似掉分。訓(xùn)練的輸入數(shù)據(jù)表示為其中N是訓(xùn)練樣本總數(shù)俭缓。
每一個(gè)訓(xùn)練樣本xi都被投影到隱含表示hi,然后被映射到重構(gòu)數(shù)據(jù)xi酥郭。為了獲得模型參數(shù)华坦,通過(guò)計(jì)算均方重構(gòu)誤差最小化來(lái)重構(gòu)損失函數(shù)
5.AE的參數(shù)可以通過(guò)梯度下降算法來(lái)更新。
訓(xùn)練完成后不从,AE的權(quán)重和偏差被保存下來(lái)惜姐。這部分具體可參考:[論文學(xué)習(xí)]1——Stacked AutoEncoder(SAE)堆棧自編碼器
回到SAE,SAE是具有分層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)椿息,由多個(gè)AE層逐層連接組成歹袁。
“棧化”過(guò)程的基本實(shí)現(xiàn)思想如下:訓(xùn)練好上述的AE結(jié)構(gòu)后寝优,舍去解碼過(guò)程条舔,此時(shí)我們可以理解為code具有一定的降維、提取特征的能力乏矾。將此時(shí)的code作為輸入孟抗,輸入到新的AE結(jié)構(gòu)中進(jìn)行訓(xùn)練,如下圖所示
在這個(gè)過(guò)程中钻心,特別注意一下凄硼,我們把前面的整體輸出(h1-h4)當(dāng)成這第二層的輸入了,那么構(gòu)建第二個(gè)autoencoder時(shí)捷沸,添加的臨時(shí)輸出層就不再是原始的(x1-x6)了摊沉,而是第一部分的輸出,即(h1-h4)痒给。這一點(diǎn)是避免訓(xùn)練方式的誤解的關(guān)鍵所在说墨。 如此重復(fù),使每次的“棾扌化”過(guò)程都能夠?qū)W習(xí)到近似最優(yōu)婉刀,最后得到code,可以認(rèn)為序仙,這個(gè)code更能夠提取出有效的特征突颊,因?yàn)樗嵌喾N效果的“疊加”,相應(yīng)的,如果是進(jìn)行分類操作律秃,直接將code接入到分類器中爬橡,就可以得到分類結(jié)果,下圖所示的是將code接入到softmax中:故棒动,上述整個(gè)過(guò)程可以如下所示(途中省略了每次訓(xùn)練的解碼過(guò)程):詳例(包含兩個(gè)隱含層的棧式自編碼網(wǎng)絡(luò))及實(shí)戰(zhàn)代碼參考:
自編碼實(shí)例5:棧式自編碼總的來(lái)說(shuō)堆棧自編碼器的思路是:我們已經(jīng)得到特征表達(dá)h糙申,將h作為原始信息,訓(xùn)練一個(gè)新的自編碼器船惨,得到新的特征表達(dá)柜裸。Stacked 就是逐層堆疊的意思,當(dāng)把多個(gè)自編碼器 Stack 起來(lái)之后粱锐,這個(gè)系統(tǒng)看起來(lái)就像這樣:
需要注意的是疙挺,整個(gè)網(wǎng)絡(luò)的訓(xùn)練不是一蹴而就的,而是逐層進(jìn)行的怜浅。
比如說(shuō)我們訓(xùn)練一個(gè)n -> m -> k 結(jié)構(gòu)的網(wǎng)絡(luò)铐然,實(shí)際上我們是先訓(xùn)練網(wǎng)絡(luò) n -> m -> n ,得到 n -> m 的變換恶座,然后再訓(xùn)練 m -> k -> m 網(wǎng)絡(luò)搀暑,得到 m -> k 的變換。最終堆疊成 SAE 跨琳,即為 n -> m -> k 的結(jié)果自点,整個(gè)過(guò)程就像一層層往上面蓋房子,這就是 逐層非監(jiān)督預(yù)訓(xùn)練湾宙。為什么逐層預(yù)訓(xùn)練的SAE有不錯(cuò)的效果樟氢?
一個(gè)直觀的解釋是冈绊,預(yù)訓(xùn)練好的網(wǎng)絡(luò)在一定程度上擬合了訓(xùn)練數(shù)據(jù)的結(jié)構(gòu)侠鳄,這使得整個(gè)網(wǎng)絡(luò)的初始值是在一個(gè)合適的狀態(tài),便于有監(jiān)督階段加快迭代收斂死宣。
友情鏈接:棧式自編碼器的微調(diào)過(guò)程
【模型詳解】AutoEncoder詳解(七)——棧式自編碼:Stacked AutoEncoder
家里蹲第二天…希望疫情快過(guò)去吧伟恶!想重啟2020啊毅该!