這一個多周忙別的事去了,忙完了,接着看講義~網絡
這章講的是深度網絡(Deep Network)。前面講了自學習網絡,經過稀疏自編碼和一個logistic迴歸或者softmax迴歸鏈接,顯然是3層的。而這章則要講深度(多層)網絡的優點。函數
Deep Network:學習
爲何要使用深度網絡呢?使用深度網絡最主要的優點在於,它能以簡潔的方式來表達比淺層網絡大得多的函數集合。正式點說,能夠找到一些函數,它們可以用k層網絡簡潔的表達出來(這裏的簡潔指的是使用隱層單元的數目與輸入單元數目是多項式關係),可是對一個只有(k-1)層的網絡而言,除非它使用與輸入單元數目呈指數關係的隱層單元數目,不然不能簡潔表達這些函數。編碼
在處理對象是圖像的狀況下,可以經過使用深度網絡學習到「部分-總體」的分解關係。例如,第一層能夠學習將圖像中的像素組合在一塊兒來檢測邊緣(正如咱們在前面的練習中作的那樣)。第二層能夠將邊緣組合起來檢測更長的輪廓或者簡單的「目標的部件」。在更深的層次上,能夠將這些輪廓進一步組合起來以檢測更爲複雜的特徵。這個能夠參考CSDN上的一篇博文(之前看到的,有點印象,就找了找)http://blog.csdn.net/abcjennifer/article/details/7804962spa
Deep Network無疑具備很大的優點,可是也很顯然的就是訓練的時候是很是困難的。講義中講了3方面的緣由:數據難獲取(標註數據量很是少),局部極值問題和梯度彌散問題。(這裏就不具體寫了,容易理解)。爲了訓練好深度網絡,講義中提到用逐層貪婪訓練的方法:每次只訓練一層網絡,即咱們首先訓練一個只有一層隱層的網絡,僅當這層網絡訓練結束以後纔開始訓練一個有兩層隱層的網絡,以此類推。在每一步中,咱們把已經訓練好的前K層固定,而後增長第K-1層(也就是將咱們已經訓練好的前的輸出做爲輸入)。每一層的訓練能夠是有監督的(例如,將每一步的分類偏差做爲目標函數),可是更常常是無監督的(例如自動編碼器)。下面就是一種逐層貪婪訓練方法的介紹:.net
Stacked Autoencoders:code
棧式自編碼神經網絡。這節中,咱們將會學習如何將自編碼器以貪心分層的方式棧化,從而預訓練(或者說初始化)深度神經網絡的權重。對象
關於這個棧式自編碼神經網絡,其實就是前面說的稀疏自編碼神經網絡一層一層疊起來。即先訓練一個自編碼神經網絡,獲得參數W,b後將原始數據經過W,b轉化成由隱藏單元響應組成的向量,假設該向量爲A,接着把A做爲第二層的輸入,繼續訓練獲得第二層的參數W,b。對後面的各層一樣採用將前層的輸出做爲下一層輸入的方式依次訓練。blog
在上述全部預訓練完成後,再經過一次反響傳播,調整全部層的參數。這個過程叫作微調(fine-tuning)。it
講義舉了MINIST手寫庫識別的例子,感受看這個例子就很清楚了:
首先,須要用原始輸入x(k)訓練第一個自編碼器,它可以學習獲得原始輸入的一階特徵表示 h(1)(k)(以下圖所示)。
接着,把全部原始數據輸入到訓練好的自編碼器中,獲得輸出向量h(1)(k),而後將此輸出向量做爲下一個自編碼器的輸入,來獲得二階特徵:
最後,通過幾回之後,再用softmax分類器進行分類便可。
這樣就獲得了一個深度的神經網絡結構。例如,疊加兩個自編碼器的狀況:
微調。前面提到了,要使結果更好,最後能夠進行一次微調,利用反向傳播法對全部層的參數進行一次調整。反向傳播前面已經看過了,這裏差異不大,直接把講義上的複製過來了:
練習:
最後就是練習了。篇幅太長了,寫在下篇吧。