時間:2018-06-04 17:59:31來源:網絡轉載
自編碼器,就是一個程序,目的是讓它的輸出值等于輸入值(trytocopyitsinputtoitsoutput),但是要經過函數變化生成一個中間值,使這個中間值不等于輸入值。例如x—y—z,x為輸入值,y為經過函數變換后的一個中間值,z是y經過變換后的一個輸出值,自編碼器的目的是為了讓z等于x,同時y不等于x。這樣的一個變換中,y就承載了x的全部信息,是極其有意義的。具體有怎樣的意義?提高數據分類效率!
在深入了解自編碼器實現原理之前,首先要明白一個前提,我們利用的是人工神經網絡。那什么是神經網絡呢?簡單來講,神經網絡就是在對原始信號逐層地做非線性變換,如下圖所示。
神經網絡往往用于分類,其目的是去逼近從輸入層x到輸出層y的變換函數,h為多層的隱藏層。因此,我們會定義一個目標函數來衡量當前的輸出和真實結果的差異,利用該函數去逐步調整(如梯度下降)系統的參數,以使得整個網絡盡可能去擬合訓練數據。如果有正則約束的話,還同時要求模型盡量簡單(防止過擬合)。
自編碼器實現原理
如果給定一個神經網絡,我們假設其輸出與輸入是相同的,然后訓練調整其參數,得到每一層中的權重。自然地,我們就得到了輸入的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入數據的最重要的因素,找到可以代表原信息的主要成分。
1)給定無標簽數據,用無監督學習去學習特征:
如上圖,我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么如果輸出的這個信息和一開始的輸入信號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是可靠的。所以,我們就通過調整encoder和decoder的參數,使得輸出和輸入之間的誤差(重構誤差)最小,這時候我們就得到了輸入input信號的第一個表示,就是編碼code了。而此時,輸出的解碼器就已經不重要了,因為code已經表示了input的所有信息,即code已經代表了input。
2)通過編碼器產生特征,然后訓練下一層。這樣逐層訓練:
然后第二層的訓練就以第一層的code作為第二層的input,然后同樣使其輸出等于輸入,獲得code2表示code,第三層code3表示code2……直至多層。我們通常所說的深度學習之中,深度一詞就源于此神經網絡的多層,層數越多,學習深度也就越深。
3)有監督微調:
經過上面的方法,我們就可以得到很多層了。至于需要多少層(或者深度需要多少,這個目前本身就沒有一個科學的評價方法)需要自己試驗調了。每一層都會得到原始輸入的不同的表達。當然了,我們覺得它是越抽象越好了,就像人的視覺系統一樣。
到這里,這個自編碼器還不能用來分類數據,因為它還沒有學習如何去連結一個輸入和一個類。它只是學會了如何去重構或者復現它的輸入而已。或者說,它只是學習獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號。那么,為了實現分類,我們就可以在自編碼器的最頂的編碼層添加一個分類器(例如邏輯回歸、SVM等),然后通過標準的多層神經網絡的監督訓練方法(梯度下降法)去訓練。
也就是說,這時候,我們需要將最后層的特征code輸入到最后的分類器,通過有標簽樣本,通過監督學習進行微調,這也分兩種,一個是只調整分類器(黑色部分):
另一種:通過有標簽樣本,微調整個系統:(如果有足夠多的數據,這個是最好的。即端對端學習)
一旦最后的監督訓練完成,這個系統就可以用來分類了。神經網絡的最頂層可以作為一個線性分類器,然后我們加上自編碼器,做成性能更優的分類器去取代它。
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-06-16
2025-06-09
2025-06-06
2025-05-19
2025-04-30
2025-04-11