自編碼神經網路是一種無監督學習演算法,它使用了反向傳播演算法,並讓目標值等於輸入值,它是一種盡可能復現輸入訊號的神經網路。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入資料的最重要的因素,就像pca那樣,找到可以代表原資訊的主要成分。
一、autoencoder演算法的思路
1)給定無標籤資料,用非監督學習學習特徵:
在我們之前的神經網路中,如第乙個圖,我們輸入的樣本是有標籤的,即(input, target),這樣我們根據當前輸出和target(label)之間的差去改變前面各層的引數,直到收斂。但現在我們只有無標籤資料,也就是右邊的圖。那麼這個誤差怎麼得到呢?
如上圖,我們將input輸入乙個encoder編碼器,就會得到乙個code,這個code也就是輸入的乙個表示,那麼我們怎麼知道這個code表示的就是input呢?我們加乙個decoder解碼器,這時候decoder就會輸出乙個資訊,那麼如果輸出的這個資訊和一開始的輸入訊號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調整encoder和decoder的引數,使得重構誤差最小,這時候我們就得到了輸入input訊號的第乙個表示了,也就是編碼code了。因為是無標籤資料,所以誤差的**就是直接重構後與原輸入相比得到。
2)通過編碼器產生特徵,然後訓練下一層。這樣逐層訓練:
那上面我們就得到第一層的code,我們的重構誤差最小讓我們相信這個code就是原輸入訊號的良好表達了,或者牽強點說,它和原訊號是一模一樣的(表達不一樣,反映的是乙個東西)。那第二層和第一層的訓練方式就沒有差別了,我們將第一層輸出的code當成第二層的輸入訊號,同樣最小化重構誤差,就會得到第二層的引數,並且得到第二層輸入的code,也就是原輸入資訊的第二個表達了。其他層就同樣的方法炮製就行了(訓練這一層,前面層的引數都是固定的,並且他們的decoder已經沒用了,都不需要了)。
3)有監督微調:
經過上面的方法,我們就可以得到很多層了。至於需要多少層(或者深度需要多少,這個目前本身就沒有乙個科學的評價方法)需要自己試驗調了。每一層都會得到原始輸入的不同的表達。當然了,我們覺得它是越抽象越好了,就像人的視覺系統一樣。
到這裡,這個autoencoder還不能用來分類資料,因為它還沒有學習如何去鏈結乙個輸入和乙個類。它只是學會了如何去重構或者復現它的輸入而已。或者說,它只是學習獲得了乙個可以良好代表輸入的特徵,這個特徵可以最大程度上代表原輸入訊號。那麼,為了實現分類,我們就可以在autoencoder的最頂的編碼層新增乙個分類器(例如羅傑斯特回歸、svm等),然後通過標準的多層神經網路的監督訓練方法(梯度下降法)去訓練。
也就是說,這時候,我們需要將最後層的特徵code輸入到最後的分類器,通過有標籤樣本,通過監督學習進行微調,這也分兩種,乙個是只調整分類器(黑色部分):
另一種:通過有標籤樣本,微調整個系統:(如果有足夠多的資料,這個是最好的。end-to-end learning端對端學習)
自編碼與變分自編碼
神經網路的本質是資訊壓縮特徵提取,神經網路公式h w x 做內積,所以神經網路是個相關性判斷 研究ai頂級公司研究損失。無監督學習是在沒有資料標籤的情況下,尋找資料特徵。但是無監督學習的標籤是自身,自監督學習,是無監督學習的一種特殊情況,他是將資料切分n塊,然後用各個塊來 其他塊。弱監督學習,是將無...
卷積自編碼
這篇教程是翻譯paolo galeone寫的卷積自編碼分析教程,作者已經授權翻譯,這是原文。卷積操作符會對輸入訊號進行濾波操作,以便提取其內容的一部分。在傳統的方法中,自編碼沒有考慮到訊號可以被看做是和其他訊號的和。相反,卷積自編碼就是使用卷積操作來做訊號的疊加之和。他們對一組簡單的輸入訊號進行編碼...
棧式自編碼
棧式自編碼神經網路 stacked autoencoder,sa 是對自編碼網路的一種使用方法,是乙個由多層訓練好的自編碼器組成的神經網路。由於網路中的每一層都是單獨訓練而來,相當於都初始化了乙個合理的數值。所以,這樣的網路會更容易訓練,並且有更快的收斂性及更好的準確度。棧式自編碼常常被用於預訓練 ...