1. 程式人生 > >周志華《Machine Learning》學習筆記(6)--神經網路

周志華《Machine Learning》學習筆記(6)--神經網路

上篇主要討論了決策樹演算法。首先從決策樹的基本概念出發,引出決策樹基於樹形結構進行決策,進一步介紹了構造決策樹的遞迴流程以及其遞迴終止條件,在遞迴的過程中,劃分屬性的選擇起到了關鍵作用,因此緊接著討論了三種評估屬性劃分效果的經典演算法,介紹了剪枝策略來解決原生決策樹容易產生的過擬合問題,最後簡述了屬性連續值/缺失值的處理方法。本篇將討論現階段十分熱門的另一個經典監督學習演算法–神經網路(neural network)。

5、神經網路

在機器學習中,神經網路一般指的是“神經網路學習”,是機器學習與神經網路兩個學科的交叉部分。所謂神經網路,目前用得最廣泛的一個定義是“神經網路是由具有適應性的簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經系統對真實世界物體所做出的互動反應”。

5.1 神經元模型

神經網路中最基本的單元是神經元模型(neuron)。在生物神經網路的原始機制中,每個神經元通常都有多個樹突(dendrite),一個軸突(axon)和一個細胞體(cell body),樹突短而多分支,軸突長而只有一個;在功能上,樹突用於傳入其它神經元傳遞的神經衝動,而軸突用於將神經衝動傳出到其它神經元,當樹突或細胞體傳入的神經衝動使得神經元興奮時,該神經元就會通過軸突向其它神經元傳遞興奮。神經元的生物學結構如下圖所示,不得不說高中的生化知識大學忘得可是真乾淨…

這裡寫圖片描述

一直沿用至今的“M-P神經元模型”正是對這一結構進行了抽象,也稱“閾值邏輯單元“,其中樹突對應於輸入部分,每個神經元收到n個其他神經元傳遞過來的輸入訊號,這些訊號通過帶權重的連線傳遞給細胞體,這些權重又稱為連線權(connection weight)。細胞體分為兩部分,前一部分計算總輸入值(即輸入訊號的加權和,或者說累積電平),後一部分先計算總輸入值與該神經元閾值的差值,然後通過啟用函式(activation function)的處理,產生輸出從軸突傳送給其它神經元。M-P神經元模型如下圖所示:

這裡寫圖片描述

與線性分類十分相似,神經元模型最理想的啟用函式也是階躍函式,即將神經元輸入值與閾值的差值對映為輸出值1或0,若差值大於零輸出1,對應興奮;若差值小於零則輸出0,對應抑制。但階躍函式不連續,不光滑,故在M-P神經元模型中,也採用Sigmoid函式來近似, Sigmoid函式將較大範圍內變化的輸入值擠壓到 (0,1) 輸出值範圍內,所以也稱為擠壓函式(squashing function)。

這裡寫圖片描述

將多個神經元按一定的層次結構連線起來,就得到了神經網路。它是一種包含多個引數的模型,比方說10個神經元兩兩連線,則有100個引數需要學習(每個神經元有9個連線權以及1個閾值),若將每個神經元都看作一個函式,則整個神經網路就是由這些函式相互巢狀而成。

5.2 感知機與多層網路

感知機(Perceptron)是由兩層神經元組成的一個簡單模型,但只有輸出層是M-P神經元,即只有輸出層神經元進行啟用函式處理,也稱為功能神經元(functional neuron);輸入層只是接受外界訊號(樣本屬性)並傳遞給輸出層(輸入層的神經元個數等於樣本的屬性數目),而沒有啟用函式。這樣一來,感知機與之前線性模型中的對數機率迴歸的思想基本是一樣的,都是通過對屬性加權與另一個常數求和,再使用sigmoid函式將這個輸出值壓縮到0-1之間,從而解決分類問題。不同的是感知機的輸出層應該可以有多個神經元,從而可以實現多分類問題,同時兩個模型所用的引數估計方法十分不同。

給定訓練集,則感知機的n+1個引數(n個權重+1個閾值)都可以通過學習得到。閾值Θ可以看作一個輸入值固定為-1的啞結點的權重ωn+1,即假設有一個固定輸入xn+1=-1的輸入層神經元,其對應的權重為ωn+1,這樣就把權重和閾值統一為權重的學習了。簡單感知機的結構如下圖所示:

這裡寫圖片描述

感知機權重的學習規則如下:對於訓練樣本(x,y),當該樣本進入感知機學習後,會產生一個輸出值,若該輸出值與樣本的真實標記不一致,則感知機會對權重進行調整,若啟用函式為階躍函式,則調整的方法為(基於梯度下降法):

這裡寫圖片描述

其中 η∈(0,1)稱為學習率,可以看出感知機是通過逐個樣本輸入來更新權重,首先設定好初始權重(一般為隨機),逐個地輸入樣本資料,若輸出值與真實標記相同則繼續輸入下一個樣本,若不一致則更新權重,然後再重新逐個檢驗,直到每個樣本資料的輸出值都與真實標記相同。容易看出:感知機模型總是能將訓練資料的每一個樣本都預測正確,和決策樹模型總是能將所有訓練資料都分開一樣,感知機模型很容易產生過擬合問題。

由於感知機模型只有一層功能神經元,因此其功能十分有限,只能處理線性可分的問題,對於這類問題,感知機的學習過程一定會收斂(converge),因此總是可以求出適當的權值。但是對於像書上提到的異或問題,只通過一層功能神經元往往不能解決,因此要解決非線性可分問題,需要考慮使用多層功能神經元,即神經網路。多層神經網路的拓撲結構如下圖所示:

這裡寫圖片描述

在神經網路中,輸入層與輸出層之間的層稱為隱含層或隱層(hidden layer),隱層和輸出層的神經元都是具有啟用函式的功能神經元。只需包含一個隱層便可以稱為多層神經網路,常用的神經網路稱為“多層前饋神經網路”(multi-layer feedforward neural network),該結構滿足以下幾個特點:

* 每層神經元與下一層神經元之間完全互連
* 神經元之間不存在同層連線
* 神經元之間不存在跨層連線

這裡寫圖片描述

根據上面的特點可以得知:這裡的“前饋”指的是網路拓撲結構中不存在環或迴路,而不是指該網路只能向前傳播而不能向後傳播(下節中的BP神經網路正是基於前饋神經網路而增加了反饋調節機制)。神經網路的學習過程就是根據訓練資料來調整神經元之間的“連線權”以及每個神經元的閾值,換句話說:神經網路所學習到的東西都蘊含在網路的連線權與閾值中。

5.3 BP神經網路演算法

由上面可以得知:神經網路的學習主要蘊含在權重和閾值中,多層網路使用上面簡單感知機的權重調整規則顯然不夠用了,BP神經網路演算法即誤差逆傳播演算法(error BackPropagation)正是為學習多層前饋神經網路而設計,BP神經網路演算法是迄今為止最成功的的神經網路學習演算法。

一般而言,只需包含一個足夠多神經元的隱層,就能以任意精度逼近任意複雜度的連續函式[Hornik et al.,1989],故下面以訓練單隱層的前饋神經網路為例,介紹BP神經網路的演算法思想。

這裡寫圖片描述

上圖為一個單隱層前饋神經網路的拓撲結構,BP神經網路演算法也使用梯度下降法(gradient descent),以單個樣本的均方誤差的負梯度方向對權重進行調節。可以看出:BP演算法首先將誤差反向傳播給隱層神經元,調節隱層到輸出層的連線權重與輸出層神經元的閾值;接著根據隱含層神經元的均方誤差,來調節輸入層到隱含層的連線權值與隱含層神經元的閾值。BP演算法基本的推導過程與感知機的推導過程原理是相同的,下面給出調整隱含層到輸出層的權重調整規則的推導過程:

這裡寫圖片描述

學習率η∈(0,1)控制著沿反梯度方向下降的步長,若步長太大則下降太快容易產生震盪,若步長太小則收斂速度太慢,一般地常把η設定為0.1,有時更新權重時會將輸出層與隱含層設定為不同的學習率。BP演算法的基本流程如下所示:

這裡寫圖片描述

BP演算法的更新規則是基於每個樣本的預測值與真實類標的均方誤差來進行權值調節,即BP演算法每次更新只針對於單個樣例。需要注意的是:BP演算法的最終目標是要最小化整個訓練集D上的累積誤差,即:

這裡寫圖片描述

如果基於累積誤差最小化的更新規則,則得到了累積誤差逆傳播演算法(accumulated error backpropagation),即每次讀取全部的資料集一遍,進行一輪學習,從而基於當前的累積誤差進行權值調整,因此引數更新的頻率相比標準BP演算法低了很多,但在很多工中,尤其是在資料量很大的時候,往往標準BP演算法會獲得較好的結果。另外對於如何設定隱層神經元個數的問題,至今仍然沒有好的解決方案,常使用“試錯法”進行調整。

前面提到,BP神經網路強大的學習能力常常容易造成過擬合問題,有以下兩種策略來緩解BP網路的過擬合問題:

  • 早停:將資料分為訓練集與測試集,訓練集用於學習,測試集用於評估效能,若在訓練過程中,訓練集的累積誤差降低,而測試集的累積誤差升高,則停止訓練。

  • 引入正則化(regularization):基本思想是在累積誤差函式中增加一個用於描述網路複雜度的部分,例如所有權值與閾值的平方和,其中λ∈(0,1)用於對累積經驗誤差與網路複雜度這兩項進行折中,常通過交叉驗證法來估計。
    這裡寫圖片描述

5.4 全域性最小與區域性最小

模型學習的過程實質上就是一個尋找最優引數的過程,例如BP演算法試圖通過最速下降來尋找使得累積經驗誤差最小的權值與閾值,在談到最優時,一般會提到區域性極小(local minimum)和全域性最小(global minimum)。

* 區域性極小解:引數空間中的某個點,其鄰域點的誤差函式值均不小於該點的誤差函式值。
* 全域性最小解:引數空間中的某個點,所有其他點的誤差函式值均不小於該點的誤差函式值。

這裡寫圖片描述

要成為區域性極小點,只要滿足該點在引數空間中的梯度為零。區域性極小可以有多個,而全域性最小隻有一個。全域性最小一定是區域性極小,但區域性最小卻不一定是全域性最小。顯然在很多機器學習演算法中,都試圖找到目標函式的全域性最小。梯度下降法的主要思想就是沿著負梯度方向去搜索最優解,負梯度方向是函式值下降最快的方向,若迭代到某處的梯度為0,則表示達到一個區域性最小,引數更新停止。因此在現實任務中,通常使用以下策略儘可能地去接近全域性最小。

* 以多組不同引數值初始化多個神經網路,按標準方法訓練,迭代停止後,取其中誤差最小的解作為最終引數。
* 使用“模擬退火”技術,這裡不做具體介紹。
* 使用隨機梯度下降,即在計算梯度時加入了隨機因素,使得在區域性最小時,計算的梯度仍可能不為0,從而迭代可以繼續進行。

5.5 深度學習

理論上,引數越多,模型複雜度就越高,容量(capability)就越大,從而能完成更復雜的學習任務。深度學習(deep learning)正是一種極其複雜而強大的模型。

怎麼增大模型複雜度呢?兩個辦法,一是增加隱層的數目,二是增加隱層神經元的數目。前者更有效一些,因為它不僅增加了功能神經元的數量,還增加了啟用函式巢狀的層數。但是對於多隱層神經網路,經典演算法如標準BP演算法往往會在誤差逆傳播時發散(diverge),無法收斂達到穩定狀態。

那要怎麼有效地訓練多隱層神經網路呢?一般來說有以下兩種方法:

  • 無監督逐層訓練(unsupervised layer-wise training):每次訓練一層隱節點,把上一層隱節點的輸出當作輸入來訓練,本層隱結點訓練好後,輸出再作為下一層的輸入來訓練,這稱為預訓練(pre-training)。全部預訓練完成後,再對整個網路進行微調(fine-tuning)訓練。一個典型例子就是深度信念網路(deep belief network,簡稱DBN)。這種做法其實可以視為把大量的引數進行分組,先找出每組較好的設定,再基於這些區域性最優的結果來訓練全域性最優。

  • 權共享(weight sharing):令同一層神經元使用完全相同的連線權,典型的例子是卷積神經網路(Convolutional Neural Network,簡稱CNN)。這樣做可以大大減少需要訓練的引數數目。

這裡寫圖片描述

深度學習可以理解為一種特徵學習(feature learning)或者表示學習(representation learning),無論是DBN還是CNN,都是通過多個隱層來把與輸出目標聯絡不大的初始輸入轉化為與輸出目標更加密切的表示,使原來只通過單層對映難以完成的任務變為可能。即通過多層處理,逐漸將初始的“低層”特徵表示轉化為“高層”特徵表示,從而使得最後可以用簡單的模型來完成複雜的學習任務。

傳統任務中,樣本的特徵需要人類專家來設計,這稱為特徵工程(feature engineering)。特徵好壞對泛化效能有至關重要的影響。而深度學習為全自動資料分析帶來了可能,可以自動產生更好的特徵。