AutoEncoder概念【常用】
前言
AutoEncoder是深度學習的另外一個重要內(nèi)容,并且非常有意思,神經(jīng)網(wǎng)絡通過大量數(shù)據(jù)集,進行end-to-end的訓練,不斷提高其準確率,而AutoEncoder通過設計encode和decode過程使輸入和輸出越來越接近,是一種無監(jiān)督學習過程。
AutoEncoder
Introduction
AutoEncoder包括兩個過程:encode和decode,輸入圖片通過encode進行處理,得到code,再經(jīng)過decode處理得到輸出,有趣的是,我們控制encode的輸出維數(shù),就相當于強迫encode過程以低維參數(shù)學習高維特征,這導致的結(jié)果和PCA類似。
AutoEncoder的目的是使下圖中的輸入x和輸出x_head越相似越好,這就需要在每次輸出之后,進行誤差反向傳播,不斷優(yōu)化。
高維數(shù)據(jù)對于我們的感官體驗總是不友好,如果我們將輸入降低至二維,放在二維平面中就會更加直觀,下圖是MNIST數(shù)據(jù)集做AutoEncoder:
上面是PCA的結(jié)果,下面是AutoEncoder的結(jié)果,在二維中結(jié)果很清晰。
encode和decode兩個過程可以理解成互為反函數(shù),在encode過程不斷降維,在decode過程提高維度。當AutoEncoder過程中用卷積操作提取特征,相當于encode過程為一個深度卷積神經(jīng)網(wǎng)絡,好多層的卷積池化,那么decode過程就需要進行反卷積和反池化,那么,反卷積和反池化如何定義呢?
Unpooling
池化過程實際上就是降維過程,假設圖片大小為32x32,池化大小為2x2,就相當于將圖片中相鄰的2x2個像素點替換為四個點中最大數(shù)值(max-pooling),池化處理之后得到的圖片大小為16x16,Unpooling過程則需要將16x16的圖片變?yōu)?2x32,其實在池化過程中,會標記2x2像素點中最大值的位置,在Unpooling過程將最大值還原,其他位置填0。以上并不是Unpooling的唯一做法,在Keras中,不會記住最大值的位置,而是將所有像素均以最大值填充。
Deconvolution
卷積過程是一個矩陣在另一個矩陣上面做滑動運算,反卷積也是一樣,實際上,反卷積就是卷積,看下面的圖,我們熟悉的是左面的卷積過程,假設有5個像素點,卷積核為3,步長為1,卷積之后生成3個feature,我們想象中的反卷積應該是中間所示的情形,由3個輸入生成5個輸出,如果我們將反卷積中的輸入做2的padding,這樣原本3個輸入變成7個輸入,再做卷積,生成5個輸出,對比左右兩側(cè)的圖,是完全相反的,所以,我們加上padding,使反卷積變成了卷積運算。De-noising AutoEncoder
對于AutoEncoder,每一次的訓練都是自身的對比,這回造成輸出和輸入越來越類似,而對同種類的其他圖片表現(xiàn)不敏感,于是,De-noising AutoEncoder派上了用場,如下圖所示,在輸入之前,先將圖片加入隨機噪聲,這樣每次的輸入都會略有差異,然后將帶有噪聲的圖片進行AutoEncoder,將輸出的y與加噪聲之前的圖片進行比較,這樣訓練出來的y就具有抗噪聲的能力,在以圖搜圖的場景下也就提高了泛化能力。參考資料
http://blog.csdn.net/changyuanchn/article/details/15681853http://blog.csdn.net/acdreamers/article/details/44657745
YouTube李宏毅老師的深度學習視頻http://www.cnblogs.com/tornadomeet/archive/2013/03/19/2970101.html
李航《統(tǒng)計學習方法》
總結(jié)
以上是生活随笔為你收集整理的AutoEncoder概念【常用】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot2.0 整合 Qua
- 下一篇: 创建多级目录