Deep Learning(深度學習)學習筆記整理系列四
Deep Learning(深度學習)學習筆記整理系列
聲明:
1)該Deep Learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻。
2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系博主刪除。
3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。
4)閱讀本文需要機器學習、計算機視覺、神經網絡等等基礎(如果沒有也沒關系了,沒有就看看,能不能看懂,呵呵)。
5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。大家都共享一點點,一起為祖國科研的推進添磚加瓦(呵呵,好高尚的目標啊)。
目錄:
一、概述
二、背景
三、人腦視覺機理
四、關於特征
4.1、特征表示的粒度
4.2、初級(淺層)特征表示
4.3、結構性特征表示
4.4、需要有多少個特征?
五、Deep Learning的基本思想
六、淺層學習(Shallow Learning)和深度學習(Deep Learning)
七、Deep learning與Neural Network
八、Deep learning訓練過程
8.1、傳統神經網絡的訓練方法
8.2、deep learning訓練過程
九、Deep Learning的常用模型或者方法
9.1、AutoEncoder自動編碼器
9.2、Sparse Coding稀疏編碼
9.3、Restricted Boltzmann Machine(RBM)限制波爾茲曼機
9.4、Deep BeliefNetworks深信度網絡
9.5、Convolutional Neural Networks卷積神經網絡
十、總結與展望
十一、參考文獻和Deep Learning學習資源
接上
九、Deep Learning的常用模型或者方法
9.1、AutoEncoder自動編碼器
Deep Learning最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統,如果給定一個神經網絡,我們假設其輸出與輸入是相同的,然後訓練調整其參數,得到每一層中的權重。自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入數據的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
具體過程簡單的說明如下:
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端對端學習)
一旦監督訓練完成,這個網絡就可以用來分類了。神經網絡的最頂層可以作為一個線性分類器,然後我們可以用一個更好性能的分類器去取代它。
在研究中可以發現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!
AutoEncoder存在一些變體,這裏簡要介紹下兩個:
Sparse AutoEncoder稀疏自動編碼器:
當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。
如上圖,其實就是限制每次得到的表達code盡量稀疏。因為稀疏的表達往往比其他的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經元,其他的大部分的神經元是受到抑制的)。
Denoising AutoEncoders降噪自動編碼器:
降噪自動編碼器DA是在自動編碼器的基礎上,訓練數據加入噪聲,所以自動編碼器必須學習去去除這種噪聲而獲得真正的沒有被噪聲汙染過的輸入。因此,這就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓練。
Deep Learning(深度學習)學習筆記整理系列四