經典機器學習系列之「神經網絡詳解」

這節主要來詳細說一下神經網絡。從神經網絡定義到 M-P模型

再擴展到 單層感知機多層前饋神經網絡 、再到 深層神經網絡 。(本文有一些概念省略了,若有寫得不清楚的地方,我們一起在微信群裡面討論討論)。

神經網絡的定義

在不同的領域、以及不同人的一些偏好。大家對神經網絡的叫法有些許差別。但主要會包括以下幾種命名方式:

  • 神經網絡(Neural Network)
  • 人工神經網絡(Artificial Neural Network)
  • 人工神經系統(Artificial Neural Systems)
  • 神經計算機(Neural Computer)
  • 自適應系統(Adaptive Systems)
  • 自適應網(Adaptive Network)
  • 聯結主義(Connectionisms)

不同的學科對神經網絡的定義也大不相同,比較廣泛的一種定義是:由具有適應性的簡單單元組成的廣泛並行互聯的網絡,它的組織能夠模擬生物神經系統對真實世界物體所作出的反應。

M-P神經元模型

在神經網絡中,最基本的信息處理單元就是M-P神經元模型。

經典機器學習系列之「神經網絡詳解」

一個M-P神經元模型,接收來自其它 個神經元傳遞過來的輸入信號。輸入信號通過帶權重的連接,進行傳遞,神經元接收到的總輸入值將與神經元的 閾值 進行比較,,如果大於閾值,就會通過 激活函數 處理產生神經元的輸出。到這裡,所謂的M-P模型,其本質就是一個廣義的線性迴歸模型。

理想的激活函數是階躍函數,但階躍函數具有不可導的性質一般我麼採用Sigmoid函數,這一點在 經典機器學習系列之【線性模型與廣義線性模型】 有具體詳解。

當M-P神經元模型的激活函數選用Sigmoid函數時,M-P模型其實就是一個邏輯斯蒂迴歸模型。

單層感知機

所謂單層感知機,就是隻擁有一層M-P神經元的神經網絡模型。只包含兩層神經元,輸入層和輸出層。輸入層接收外界輸入信號後,傳遞給輸出層;輸出層是一個或者多個M-P神經元,進行激活處理。

經典機器學習系列之「神經網絡詳解」

給定訓練數據集,權重 以及閾值 可通過學習得到。閾值 可看作一個固定輸入為 的“啞節點”(dummy node)所對應的連接權重 ,這樣,權重和閾值的學習就可統一為權重的學習。

其學習規則為:對訓練樣例 ,若當前感知機的輸出為 ,則感知機權重調整如下所示:

上述公式是誤差對參數 求偏導數所得到的。 稱為學習率(learning rate)。從上式可以看出,若預測正確,誤差為0,感知器參數將不發生調整。否者將會更具錯誤的大小進行修正。

對於線性可分問題,感知機最終將會收斂,而對於線性不可分的異或問題,感知機將會發生振盪(fluctuation), 難以穩定下來,不能求得合適解。例如對下圖所示的異或非線性問題,感知機就難以求解。

經典機器學習系列之「神經網絡詳解」

要解決非線性可分問題,需要考慮使用多層功能神經元。即輸入層和輸出層之間包含一層隱藏層。隱藏層和輸出層神經元都是擁有激活函數的功能神經元。

經典機器學習系列之「神經網絡詳解」

多層前饋神經網絡

當把隱藏層層數擴大之後,神經元之間的連接將會更加複雜。每層神經元與下一層神經元全互連,神經元之間不存在同層連接,也不存在跨層連接,這樣的神經網絡結構通常稱為“

多層前饋神經網絡 ”(multi-layer feedforward neural network)。

其中 多層 指的是,除了輸入層和輸出層以外,還存在一個或者多個隱含層。 前饋 指的是:外界信號從輸入層經由隱含層到達輸出層,不存在信號的逆向傳播。

經典機器學習系列之「神經網絡詳解」

與M-P模型一樣,輸入層神經元接收外界的輸入信號,隱藏層與輸出層對信號進行處理加工,最終結果由輸出層神經元輸出。

神經網絡所需要做的事情就是:依據訓練給定的樣本,來調整神經元之間的“連接權”,以及每個功能神經元的閾值。最終所得到的這個模型,期望對未知樣本有一定的泛化能力。

BP求解單隱層前饋網絡

我們以單隱層前饋網絡為例,對其模型進行求解。由於這裡固定了是單隱層前饋神經網絡,我們就不對其神經網絡結構求解進行討論,只討論其參數學習問題。這裡我們採用 誤差反向傳播算法 (Back Propagation,簡稱BP算法)來對其模型參數進行求解。神經網絡學習就是依據訓練數據來調整神經元之間的連接權值,以及每個M-P神經元的閾值。

給定訓練集 , , ,即輸入樣本由 個屬性描述,輸出是 維實值向量。如下圖所示:

經典機器學習系列之「神經網絡詳解」

假設隱藏層神經元個數為 個。輸出層神經元的閾值用 表示。隱層第 個神經元的閾值用 表示。

  • 輸入層第 個神經元與隱藏層第 個神經元之間的連接權為 。
  • 隱層第 個神經元與輸出層第 個神經元之間的連接權為 。

隱層第 個神經元接收到的輸入為 ;

輸出層第 個神經元接收到的輸入為 。其中 為隱層第 個神經元的輸出。

假設隱層和輸出層神經元都使用Sigmoid激活函數。對訓練例 ,假定神經網絡的輸出為 ,即神經網絡的預測輸出表達式為:

則網絡在樣本集 上的均方誤差為:

到這裡,我麼整個的前饋神經網絡的數學模型就已經建立完成了。接下來我們需要依據使誤差最小這個優化目標,來求解神經網絡參數矩陣。在計算參數矩陣之前,我們先來計算一下神經網絡的參數有多少個:輸入層到隱藏層的 個權值;隱藏層到輸出層的 個權值; 個隱藏層神經元閾值; 個輸出層神經元閾值,總共 個參數。

之後我們需要利用BP算法,對這些參數進行更新估計。BP算法基於梯度下降(gradient descent)策略,以目標的 負梯度方向 對參數進行調整。給定學習率 ,有:

注意到 先影響到第 個神經元的輸入值 ,再影響到其輸出值 ,然後影響到 ,最後有:

依據 的定義 ,有:

由 Sigmoid 函數的性質 可得:

於是可以得到BP算法中關於 的更新公式:

類似這種鏈式求導法則,我們可以得到:

其中:

到這裡模型參數的求解大體過程就完成了。

最後做一個 總結 :基於BP的單隱層前饋神經網絡工作流程如下所示:對每個訓練樣本,先走前向傳播,輸入傳遞給輸入層、隱藏層、輸出層。依據輸出層的輸出結果計算誤差,再將誤差反向傳播到隱藏層神經元,最後依據隱層神經元的誤差來對連接權和閾值進行調整,迭代循環該過程,直到達到設定的終止條件(如設定的迭代次數,或者誤差小於某個值)。

其算法偽代碼如下圖所示:

經典機器學習系列之「神經網絡詳解」

BP算法所存在的問題

在實際的運用過程中,BP算法還會面臨一些實際的問題:

  • 結構學習問題

多層前饋神經網絡包括輸入層、輸出層、一個或者多個隱藏層。

在數學原理上,一個包含足夠多神經元的隱藏層的前饋神經網絡就能以任意精度逼近任意複雜的連續函數。也就是說兩層的前饋神經網絡就足夠逼近任意的連續複雜函數,因此通常選用一個隱含層。

當網絡層數確定下來之後,每層設置的神經元個數又為多少呢?通常,輸入層依據求解問題的數據維度及數據類型而定。輸出層由待分類問題的類別數目所確定的。隱含層神經元個數是一個超參數問題,實際操作過程中依據經驗而定。

  • 初始化問題

在網絡學習之前,連接權重和閾值都初始化為 不同小隨機數 。不同是為了保證網絡可以學習。小隨機數是為了防止其值過大,而提前進入飽和狀態。初始化參數設置不好的話,網絡容易陷入局部最優,若這種情況發生,程序多跑幾次,網絡重新初始化就可以了。

  • 步長設置問題

學習率控制著算法的收斂速度。太大容易振盪,太小收斂速度又過慢。比較好的設置方法是,訓練剛開始時,補償設置較大,隨著訓練進行,步長逐漸縮小。實際應用過程中,可以採取自適應步長,步長隨網絡訓練變化。

  • 權值與閾值的更新問題

標準的BP算法是樣例更新,即每處理一個樣本就更新權值和閾值。樣例更新的缺陷就是:參數更新頻繁,不同樣例之間的下降梯度方向可能抵消,迭代的次數較多。訓練樣例的輸入順序會對訓練結果有較大的影響,單個處理會對最後更新的樣例比較偏愛,而給樣例排序是比較困難的一件事情。

採用的辦法是週期更新制,即處理完一遍所有的訓練樣例才更新權值和閾值。但週期更新的累計誤差下降到一定程度後,進一步下降會非常緩慢。這個時候樣例更新就會比較好。兩者折中就變成了Batch更新。

  • 過擬合問題

神經網絡的過擬合問題表現為:訓練誤差持續降低,但測試誤差卻升高。緩解這個問題可以採取 提前結束訓練正則化 方法。提前結束訓練:就是訓練誤差降低,測試誤差升高的時候停止訓練;正則化:在誤差目標函數中增加描述網絡複雜程度的部分,比如連接權值和閾值的平方和,所體現的是大道至簡的思想。

深層神經網絡

隨著計算能力的大幅提高可緩解訓練低效性;訓練數據的大幅增加則可降低過擬合風險,因此,以深度學習(deep learning)為代表的複雜模型開始受到人們的關注。

典型的深度學習模型就是很深層的神經網絡:包含2個以上隱含層的神經網絡。

經典機器學習系列之「神經網絡詳解」

深度伸進網絡的模型更加複雜,能夠擬合更加複雜的模型,主要是歸功於 隱藏層神經元數目的增多 (模型寬度),和 隱藏層層數的增多 (模型深度)。增加隱藏層層數更容易使得神經網絡模型變複雜,因為隱藏層數目不僅增加了擁有激活函數的神經元數目,還增加了激活函數嵌套的層數。

但是隨著隱藏層的增多,BP算法中誤差一層一層往前傳播會變得越來越困難,導致梯度消失。那如何學習深層神經網絡模型呢?目前主要採取兩種辦法:

  • 預訓練+微調

在預訓練階段,採用無監督逐層訓練,將上一層隱藏層節點的輸出作為輸入,而本層隱藏層結點的輸出作為一下一層隱含層節點的輸入。

預訓練全部完成後,再對整個網絡進行微調訓練,一般使用BP算法。

預訓練+微調的做法可以視為將大量參數進行分組,對每組先找到局部看起來比較好的設置,然後再基於這些局部較優的結果聯合起來進行全局尋優。

  • 權共享

權共享就是讓一組神經元共享相同的連接權值。卷積神經網絡就是典型的權共享網絡。CNN複合多個卷積層和採樣層對輸入信號進行加工,然後在連接層實現與輸出目標之間的映射。

深度學習理解

深度學習通過多層處理,逐漸將初始的低層特徵表示轉化為高層特徵表示後,用“簡單模型”即可完成複雜的分類學習等任務。由此可將深度學習理解為進行“ 特徵學習 ”(feature learning) 或“表示學習” (representation learning)。

非深度學習技術用於解決現實任務時,描述樣本的特徵通常需由人類專家來手工設計,這稱為“ 特徵工程 ” (feature engineering)。眾所周知,特徵的好壞對模型的泛化性能有至關重要的影響,要人類專家手工設計出好特徵並非易事;而特徵學習則通過深度學習技術自動產生好特徵,這使得機器學習向“全自動數據分析”又前進了一步。


分享到:


相關文章: