【機器學習】神經網絡詳解

其他機器學習系列文章見於專題:機器學習進階之路——學習筆記整理,歡迎大家關注。

1. 從感知機到神經網絡

  在上一篇博客【機器學習】感知機原理詳解當中,我們介紹了感知機,這是一種二分類的線性分類模型,只有輸出層神經元進行激活函數處理,即只擁有一層功能神經元,學習能力十分有限。

  將感知機擴展成爲神經網絡,主要從三個方面來增強表達能力:

  1. 隱藏層可以有多層;
  2. 輸出層神經元可以有多個輸出;
  3. 對激活函數作擴展,有sigmoid、tanh、softmax、ReLU等。

2. 基本結構

  常見的神經網絡結構如下圖所示。其網絡層可分爲三類:輸入層、隱藏層和輸出層。

多層前饋神經網絡結構圖

  層與層之間是全互連的,不存在同層鏈接,也不存在跨層鏈接,這樣的結構通常稱爲“多層前饋神經網絡”(前饋並不意味着網絡中信號不能向後傳,而是指網絡拓撲結構上不存在環或迴路)。

3. 誤差逆傳播算法

  誤差逆傳播(error BackPropagation,簡稱BP,又稱反向傳播)算法用來更新參數,它是一個迭代學習算法,基於梯度下降策略,以目標的負梯度方向對參數進行調整。

  具體的更新推導過程可以參考BP推導,這裏不再描述。

4. 損失函數與激活函數

4.1 均方差損失函數+Sigmoid激活函數

  Sigmoid激活函數的表達式爲:
σ(z)=11+ez \sigma ( z ) = \frac { 1 } { 1 + e ^ { - z } }

  函數圖像如下:

  當zz絕對值越來越大,函數曲線趨於平緩,σ(z)\sigma ^ { \prime } ( z )越來越小。通常反向傳播算法使用均方差作爲損失函數,每一層向前遞推都要乘以σ(z)\sigma ^ { \prime } ( z )得到梯度變化值。這意味着在大多數時候,我們的梯度變化值很小,導致我們的W,b更新到極值的速度較慢,也就是我們的算法收斂速度較慢。

4.2 使用交叉熵損失函數+Sigmoid激活函數改進DNN算法收斂速度

  爲了解決sigmoid激活函數和均方差損失函數導致的收斂速度慢的問題,一種解決方法時替換掉sigmoid,另一種方法是利用交叉熵損失函數來代替均方差損失函數。

  二分類時每個樣本的交叉熵損失函數的形式爲:
J(W,b,a,y)=[ylna+(1y)ln(1a)] J ( W , b , a , y ) = - [ y \ln a + ( 1 - y ) \ln ( 1 - a ) ]

  使用交叉熵,得到的的δl\delta ^ { l }梯度表達式中沒有了σ(z)\sigma ^ { \prime } ( z ),這樣W和b的更新公式中也不包含σ(z)\sigma ^ { \prime } ( z ),因此避免了反向傳播收斂速度慢的問題。

4.3 使用對數似然損失函數和softmax激活函數進行DNN分類輸出

  如果是分類問題,那麼輸出是一個個的類別,比如有三個類別,對應輸出層有三個神經元。此時DNN分類模型要求是輸出層神經元輸出的值在0到1之間,同時所有輸出值之和爲1。

  我們可以將輸出層第ii個神經元的激活函數定義爲如下形式:
aiL=eziLj=1nLezjL a _ { i } ^ { L } = \frac { e ^ { z _ { i } ^ { L } } } { \sum _ { j = 1 } ^ { n _ { L } } e ^ { z _ { j } ^ { L } } }

  其中,nLn_L是輸出層第LL層的神經元個數,或者說我們的分類問題的類別數。j=1nLezjL\sum _ { j = 1 } ^ { n _ { L } } e ^ { z _ { j } ^ { L } }作爲歸一化因子保證了所有的aiLa _ { i } ^ { L }之和爲1。

4.4 梯度爆炸梯度消失與ReLU激活函數

  在DNN中,有一個梯度消失和爆炸的問題。什麼是梯度爆炸和梯度消失呢?就是在反向傳播的算法過程中,由於我們使用了是矩陣求導的鏈式法則,有一大串連乘,如果連乘的數字在每層都是小於1的,則梯度越往前乘越小,導致梯度消失,而如果連乘的數字在每層都是大於1的,則梯度越往前乘越大,導致梯度爆炸。

  對於梯度爆炸,則一般可以通過調整我們DNN模型中的初始化參數得以解決。

  梯度消失問題無法完美解決,一個可能部分解決梯度消失問題的辦法是使用ReLU(Rectified Linear Unit,修正線性單元)激活函數,ReLU在卷積神經網絡CNN中得到了廣泛的應用,在CNN中梯度消失似乎不再是問題。CNN表達式爲:
σ(z)=max(0,z) \sigma ( z ) = \max ( 0 , z )

ReLU函數

4.5 其他激活函數

  (1) tanh:是sigmoid的變種,表達式爲:
tanh(z)=ezezez+ez \tanh ( z ) = \frac { e ^ { z } - e ^ { - z } } { e ^ { z } + e ^ { - z } }

  tanh激活函數和sigmoid激活函數的關係爲:
tanh(z)=2sigmoid(2z)1 \tanh ( z ) = 2 \operatorname { sigmoid } ( 2 z ) - 1

  (2) softplus:這個其實就是sigmoid函數的原函數,表達式爲:
softplus(z)=log(1+ez) softplus( z ) = \log \left( 1 + e ^ { z } \right)

  它的導數就是sigmoid函數。

5. 正則化

  神經網絡的正則化方法包括L1&L2正則化、集成學習的思路正則化、dropout正則化、增強數據集正則化等,具體可參考深度神經網絡(DNN)的正則化

參考文獻:

  1. BP推導——續
  2. 深度神經網絡(DNN)模型與前向傳播算法
  3. 深度神經網絡(DNN)損失函數和激活函數的選擇
  4. 深度神經網絡(DNN)的正則化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章