深度學習

深度學習的三個步驟

定義一組函式(most significant)

給定評價的標準

挑選最好的函式

為什麼需要多個隱含層?隱含層越多是否越好?

| 深度*每層

神經元

個數 | 語音識別錯誤率 |

| ———————— | ———————— |

| 1*2k | 24。2% |

| 2*2k | 20。4% |

| 3*2k | 18。4% |

| 4*2k | 17。8% |

| 5*2k | 17。2% |

| 7*2k | 17。1% |

……從增加模型的複雜度來看,增加隱層的樹木顯然比增加

隱層神經元

的數目更有效。因為增加隱層數不僅增加了擁有啟用函式的神經元數目,還增加了啟用函式巢狀的層數。然而,多隱層神經網路難以直接用經典演算法(例如標準BP)進行訓練,因為誤差在多隱層內逆傳播時,往往會“發散”而不能收斂到穩定狀態……

—— 《機器學習》

周志華

深度學習可以模組化。其解決了資料少的問題。第一層隱含層為基分類器,後一層是由基分類器組成新的

分類器

,以此類推。

模組化可以以完全不同的輸入,得到非常相似的輸出。

深度學習中的問題&技巧

結果差不總是過學習引起的(訓練不足、資料不足等)。

對於某些激勵函式(Sigmoid)來說,深度似乎沒有帶來效能的改進(梯度消失)。深度學習一般使用ReLU作為激勵函式,不存在深到一定程度效能趨向平緩。

ReLU:Rectified Linear Unit,在

(-\infty,0]

上,函式影象與x軸負半軸重合,在

[0,+\infty)

上,影象為 y = x。對於ReLU來說,表示式為

\sigma(z),(a\leftarrow y,z \leftarrow x)

ReLU額外的好處:計算快;仿生效果。

ReLU

​擴充套件參考連結

本質

:max{y=0,y=x}

對每一個輸入而言,它是線性改變的;但是對不同的輸入而言,最後的輸出改變是非線性的。

誤差正則化

正則化的意義​

L2正則化:

\dot{E}(w) = E(w)+\frac{1}{2}\lambda\left \|w  \right \|_{2}\\ \left \|w  \right \|_{2} = w_{0}^{2}+w_{1}^{2}+...+w_{n}^{2}\\

\dot{E}(w) = E(w)+\frac{1}{2}\lambda\left \|w  \right \|_{2}\\ \left \|w  \right \|_{2} = w_{0}^{2}+w_{1}^{2}+...+w_{n}^{2}\\

梯度:

\frac{\partial{\dot{E}}}{\partial{w_{i}}} = \frac{\partial{E}}{\partial{w_{i}}} +\lambda w_{i}\\ w_{i}=w_{i}+\Delta{w_{i}}=w_{i}-\eta\frac{\partial{\dot{E}}}{\partial{w_{i}}} =w_{i}-\eta(\frac{\partial{E}}{\partial{w_{i}}} +\lambda w_{i})=(1-\eta\lambda)w_{i}-\eta\frac{\partial{E}}{\partial{w_{i}}}

最後輸出結果

w_{i}

係數趨於0

L1正則化:

\dot{E}(w) = E(w)+\frac{1}{2}\lambda\left \|w  \right \|_{1}\\ \left \|w  \right \|_{1} = |w_{0}|+|w_{1}|+...+|w_{n}|\\

梯度:

\frac{\partial{\dot{E}}}{\partial{w_{i}}} = \frac{\partial{E}}{\partial{w_{i}}} +\lambda sgn(w_{i})\\ w_{i}=w_{i}+\Delta{w_{i}}=w_{i}-\eta\frac{\partial{\dot{E}}}{\partial{w_{i}}} =w_{i}-\eta(\frac{\partial{E}}{\partial{w_{i}}} +\lambda sgn(w_{i}))=w_{i}-\eta\frac{\partial{E}}{\partial{w_{i}}}-\eta\lambda sgn(w_{i})

Dropout

dropout是指在深度學習網路的訓練過程中,對於

神經網路單元

,按照一定的機率將其暫時從網路中丟棄,注意是暫時。這裡暫時把丟棄的機率設定為 p%。

輸出層不可被dropout。

從0~1的機器學習:深度學習與CNN-學習筆記

Dropout就是使的原來的網路變得更“瘦”,這樣對於N個神經元的網路中相當於有了

2^n

個模型集合,擺脫了為了

解決過擬合

要訓練更多次N個神經元的模型而帶來的

費時

的問題,同時解決了因為正常過擬合時間過長所可能帶來的

欠學習

的副作用。Dropout強迫一個

神經單元

,和隨機挑選出來的其他神經單元共同工作,達到好的效果,消除減弱了神經元節點間的聯合適應性,增強了

泛化能力

測試

沒有Dropout

。注意在乘

權值

的時候,所有的權值需要乘 (1 - p%)。

從0~1的機器學習:深度學習與CNN-學習筆記

(最後輸出的是測試模型集合的約等。上圖中

無框的四個模型

中的w1,w2是各自不同的,

虛線綠框

中的w1是前四個模型中w1的平均,w2類似;

實線綠框

中的w1,w2指

虛線綠框

中的w1w2。)

卷積神經網路(CNN)

CNN在

影象處理

語音識別

有著出色表現。因為

重要的模式

通常

比影象本身小,要發現某個模式其實只需要區域性就夠了。

相比較其他深度、

前饋神經網路

,卷積神經網路需要考量的

引數

更少。

二次抽樣不會改變我們關注的模式,二次抽樣會減少引數,簡化運算。

卷積層

卷積神經網路中每層卷積層由若干卷積單元組成,每個卷積單元的引數都是透過

反向傳播演算法

最最佳化得到的。卷積運算的目的是提取輸入的

不同特徵

,第一層卷積層可能只能提取一些低階的特徵如邊緣、線條和角等層級,更多層的網路能從低階特徵中迭代提取更復雜的特徵。

卷積核

卷積核的模式需要與我們需要的重要模式相同。可以有多個卷積核。

卷積的操作

卷積的操作與ANN的操作類似,選取的矩陣與卷積核對應相乘,然後相加得到一個卷積結果。根據設定的步長右/下移一個步長,重複進行。最後卷積結果根據順序排列得到一個矩陣。此矩陣的大小與步長相關,相同的步長得到的

矩陣大小

是固定的。

值得注意的是:

左邊資料(選取的矩陣)在變化,每次卷積核都是針對某一區域性的資料視窗進行卷積,這就是所謂的CNN中的

區域性感知

機制。

資料視窗滑動,導致輸入在變化,但中間卷積核的權重(即每個神經元連線資料視窗的權重)是固定不變的,這個權重不變即所謂的CNN中的

引數(權重)共享

機制。

因為

權重共享機制

是卷積之所以簡便的重點(權重不變的情況下可以減少相同權重變數的數量),而w_i = w_i + delta w_i,delta w_i不可估測,所以在不操作的情況下無法確定更新後的權重是否一樣,所以在卷積完一層後,對其

權重求和取平均值

,再重新賦給權重,可以保障權重的共享機制。

最大池化Max Pooling

將輸入的影象劃分為若干個矩形區域,對每個子區域輸出

最大值

從0~1的機器學習:深度學習與CNN-學習筆記

直覺上,這種機制能夠有效地原因在於,在發現一個特徵之後,它的精確位置遠不及它和其他特徵的相對位置的關係重要。

池化層

會不斷地減小資料的空間大小,因此引數的數量和計算量也會下降,這在一定程度上也控制了

過擬合

。通常來說,CNN的卷積層之間都會週期性地插入池化層。 —— Wiki百科 “卷積神經網路”

卷積與池化兩個操作可以多次重複,新圖的通道數目等於捲起核的數目。將通道拉直成為一個向量,再將其進行

深度網路

的計算。

CNN in Keras

從0~1的機器學習:深度學習與CNN-學習筆記

從0~1的機器學習:深度學習與CNN-學習筆記

一開始是 1 x 28 x 28 的影象,卷積核為 3x3。

第一次conv運算後有 25 x ( 9 + 26 x 26 )個引數。(25是本層設定的卷積核個數,9是本層卷積核的神經元個數,26是本層卷積運算後的矩陣大小28-3+1)

第一次pooling運算後變成了

一張

13 x 13的影象。(池化的引數設定為(2,2),)

第二次conv運算後有 50 x ( 9 x 25 + 11 x 11)個引數。(每個卷積核生成一張圖片的

一個通道

,25個卷積核生成25個通道,每個通道有9個不同的卷積核,但是同一張圖片的權重是一樣的,即11x11x1而不用乘25。)

以此類推,如果沒有經過池化,下一層與本層便是全連線。

最後經過拉直得到輸入向量,1250是50 x 5 x 5個輸入引數,要額外加上w0,共1251個引數。

深度訓練下的程式碼output_dim是輸出的神經元個數。

小結

深度學習問題中的技巧

新的激勵函式

正則化

DropOut

卷積神經網路在影象語音識別中的效果非常好, 原因有三:

原因一:重要的模式通常都比影象本身小

原因二:相同的模式會出現在不同的區域

原因三:二次抽樣不會改變我們關注的模式