一文详解神经网络模型
一個有情懷的公眾號
1
Motivation
在之前的機器學習基石課程中,我們就接觸過Perceptron模型了,例如PLA算法。Perceptron就是在矩gt(x)外面加上一個sign函數,取值為{-1,+1}。現在,如果把許多perceptrons線性組合起來,得到的模型G就如下圖所示:
將左邊的輸入(x0,x1,x2,?,xd)與T個不同的權重(w1,w2,?,wT)相乘(每個wi是d+1維的),得到T個不同的perceptrons為(g1,g2,?,gT)。最后,每個gt給予不同的權重(α1,α2,?,αT),線性組合得到G。G也是一個perceptron模型。
從結構上來說,上面這個模型包含了兩層的權重,分別是wt和α。同時也包含了兩層的sign函數,分別是gt和G。那么這樣一個由許多感知機linear aggregation的模型能實現什么樣的boundary呢?
舉個簡單的例子,如下圖所示,g1和g2分別是平面上兩個perceptrons。其中,紅色表示-1,藍色表示+1。這兩個perceptrons線性組合可能得到下圖右側的模型,這表示的是g1和g2進行與(AND)的操作,藍色區域表示+1。
如何通過感知機模型來實現上述的AND(g1,g2)邏輯操作呢?一種方法是令第二層中的α0=?1,α1=+1,α2=+1。這樣,G(x)就可表示為:
g1和g2的取值是{-1,+1},當g1=?1,g2=?1時,G(x)=0;當g1=?1,g2=+1時,G(x)=0;當g1=+1,g2=?1時,G(x)=0;當g1=+1,g2=+1時,G(x)=1。感知機模型如下所示:
這個例子說明了一些簡單的線性邊界,如上面的g1和g2,在經過一層感知機模型,經線性組合后,可以得到一些非線性的復雜邊界(AND運算)G(x)。
除此之外,或(OR)運算和非(NOT)運算都可以由感知機建立相應的模型,非常簡單。
所以說,linear aggregation of perceptrons實際上是非常powerful的模型同時也是非常complicated模型。再看下面一個例子,如果二維平面上有個圓形區域,圓內表示+1,圓外表示-1。這樣復雜的圓形邊界是沒有辦法使用單一perceptron來解決的。如果使用8個perceptrons,用剛才的方法線性組合起來,能夠得到一個很接近圓形的邊界(八邊形)。如果使用16個perceptrons,那么得到的邊界更接近圓形(十六邊形)。因此,使用的perceptrons越多,就能得到各種任意的convex set,即凸多邊形邊界。之前我們在機器學習基石中介紹過,convex set的VC Dimension趨向于無窮大(2的N次方)。這表示只要perceptrons夠多,我們能得到任意可能的情況,可能的模型。但是,這樣的壞處是模型復雜度可能會變得很大,從而造成過擬合(overfitting)。
總的來說,足夠數目的perceptrons線性組合能夠得到比較平滑的邊界和穩定的模型,這也是aggregation的特點之一。
但是,也有單層perceptrons線性組合做不到的事情。例如剛才我們將的AND、OR、NOT三種邏輯運算都可以由單層perceptrons做到,而如果是異或(XOR)操作,就沒有辦法只用單層perceptrons實現。這是因為XOR得到的是非線性可分的區域,如下圖所示,沒有辦法由g1和g2線性組合實現。所以說linear aggregation of perceptrons模型的復雜度還是有限制的。
那么,為了實現XOR操作,可以使用多層perceptrons,也就是說一次transform不行,我們就用多層的transform,這其實就是Basic Neural Network的基本原型。下面我們就嘗試使用兩層perceptrons來實現XOR的操作。
首先,根據布爾運算,異或XOR操作可以拆分成:
這種拆分實際上就包含了兩層transform。第一層僅有AND操作,第二層是OR操作。這種兩層的感知機模型如下所示:
這樣,從AND操作到XOR操作,從簡單的aggregation of perceptrons到multi-layer perceptrons,感知機層數在增加,模型的復雜度也在增加,使最后得到的G能更容易解決一些非線性的復雜問題。這就是基本神經網絡的基本模型。
順便提一下,這里所說的感知機模型實際上就是在模仿人類的神經元模型(這就是Neural Network名稱的由來)。感知機模型每個節點的輸入就對應神經元的樹突dendrite,感知機每個節點的輸出就對應神經元的軸突axon。
2
Neural Network Hypothesis
上一部分我們介紹的這種感知機模型其實就是Neural Network。輸入部分經過一層一層的運算,相當于一層一層的transform,最后通過最后一層的權重,得到一個分數score。即在OUTPUT層,輸出的就是一個線性模型。得到s后,下一步再進行處理。
我們之前已經介紹過三種線性模型:linear classification,linear regression,logistic regression。那么,對于OUTPUT層的分數s,根據具體問題,可以選擇最合適的線性模型。如果是binary classification問題,可以選擇linear classification模型;如果是linear regression問題,可以選擇linear regression模型;如果是soft classification問題,則可以選擇logistic regression模型。本節課接下來將以linear regression為例,選擇squared error來進行衡量。
上面講的是OUTPUT層,對于中間層,每個節點對應一個perceptron,都有一個transform運算。上文我們已經介紹過的transformation function是階梯函數sign()。那除了sign()函數外,有沒有其他的transformation function呢?
如果每個節點的transformation function都是線性運算(跟OUTPUT端一樣),那么由每個節點的線性模型組合成的神經網絡模型也必然是線性的。這跟直接使用一個線性模型在效果上并沒有什么差異,模型能力不強,反而花費了更多不必要的力氣。所以一般來說,中間節點不會選擇線性模型。
如果每個節點的transformation function都是階梯函數(即sign()函數)。這是一個非線性模型,但是由于階梯函數是離散的,并不是處處可導,所以在優化計算時比較難處理。所以,一般也不選擇階梯函數作為transformation function。
既然線性函數和階梯函數都不太適合作為transformation function,那么最常用的一種transformation function就是tanh(s),其表達式如下:
tanh(s)函數是一個平滑函數,類似“s”型。當|s|比較大的時候,tanh(s)與階梯函數相近;當|s|比較小的時候,tanh(s)與線性函數比較接近。從數學上來說,由于處處連續可導,便于最優化計算。而且形狀上類似階梯函數,具有非線性的性質,可以得到比較復雜強大的模型。
順便提一下,tanh(x)函數與sigmoid函數存在下列關系:
其中,
那么,接下來我們就使用tanh函數作為神經網絡中間層的transformation function,所有的數學推導也基于此。實際應用中,可以選擇其它的transformation function,不同的transformation function,則有不同的推導過程。
下面我們將仔細來看看Neural Network Hypothesis的結構。如下圖所示,該神經網絡左邊是輸入層,中間兩層是隱藏層,右邊是輸出層。整體上來說,我們設定輸入層為第0層,然后往右分別是第一層、第二層,輸出層即為第3層。
對于每層的分數score,它的表達式為:
對于每層的transformation function,它的表達式為:
介紹完Neural Network Hypothesis的結構之后,我們來研究下這種算法結構到底有什么實際的物理意義。還是看上面的神經網絡結構圖,每一層輸入到輸出的運算過程,實際上都是一種transformation,而轉換的關鍵在于每個權重值。每層網絡利用輸入x和權重w的乘積,在經過tanh函數,得到該層的輸出,從左到右,一層一層地進行。其中,很明顯,x和w的乘積越大,那么tanh(wx)就會越接近1,表明這種transformation效果越好。再想一下,w和x是兩個向量,乘積越大,表明兩個向量內積越大,越接近平行,則表明w和x有模式上的相似性。從而,更進一步說明了如果每一層的輸入向量x和權重向量w具有模式上的相似性,比較接近平行,那么transformation的效果就比較好,就能得到表現良好的神經網絡模型。也就是說,神經網絡訓練的核心就是pattern extraction,即從數據中找到數據本身蘊含的模式和規律。通過一層一層找到這些模式,找到與輸入向量x最契合的權重向量w,最后再由G輸出結果。
3
Neural Network Learning
以上是輸出層求偏導的結果。如果是其它層,即l≠L,偏導計算可以寫成如下形式:
神經網絡中,這種從后往前的推導方法稱為Backpropagation Algorithm,即我們常常聽到的BP神經網絡算法。它的算法流程如下所示:
上面采用的是SGD的方法,即每次迭代更新時只取一個點,這種做法一般不夠穩定。所以通常會采用mini-batch的方法,即每次選取一些數據,例如N/10,來進行訓練,最后求平均值更新權重w。這種做法的實際效果會比較好一些。
4
Optimization and Regularization
經過以上的分析和推導,我們知道神經網絡優化的目標就是讓Ein(w)最小化。本節課我們采用error measure是squared error,當然也可以采用其它的錯誤衡量方式,只要在推導上做稍稍修改就可以了,此處不再贅述。
下面我們將主要分析神經網絡的優化問題。由于神經網絡由輸入層、多個隱藏層、輸出層構成,結構是比較復雜的非線性模型,因此Ein(w)可能有許多局部最小值,是non-convex的,找到全局最小值(globalminimum)就會困難許多。而我們使用GD或SGD算法得到的很可能就是局部最小值(local minimum)。
下面從理論上看一下神經網絡模型的VC Dimension。對于tanh這樣的transfer function,其對應的整個模型的復雜度dvc=O(VD)。其中V是神經網絡中神經元的個數(不包括bias點),D表示所有權值的數量。所以,如果V足夠大的時候,VC Dimension也會非常大,這樣神經網絡可以訓練出非常復雜的模型。但同時也可能會造成過擬合overfitting。所以,神經網絡中神經元的數量V不能太大。
為了防止神經網絡過擬合,一個常用的方法就是使用regularization。之前我們就介紹過可以在error function中加入一個regularizer,例如熟悉的L2 regularizer Ω(w):
除了weight-elimination regularizer之外,還有另外一個很有效的regularization的方法,就是Early Stopping。簡而言之,就是神經網絡訓練的次數t不能太多。因為,t太大的時候,相當于給模型尋找最優值更多的可能性,模型更復雜,VC Dimension增大,可能會overfitting。而t不太大時,能有效減少VC Dimension,降低模型復雜度,從而起到regularization的效果。Ein和Etest隨訓練次數t的關系如下圖右下角所示:
那么,如何選擇最佳的訓練次數t呢?可以使用validation進行驗證選擇。
5
Summary
往期回顧
【1】線性支持向量機(LSVM)
【2】深度學習概述
【3】
【4】
【5】卷積神經網絡CNN基礎
【6】循環神經網絡RNN
【7】干貨 | 吳恩達deeplearning.ai專項課程歷史文章匯總
【8】簡單的梯度下降算法,你真的懂了嗎?
【9】力薦 | 臺大林軒田《機器學習基石》資源匯總
長按二維碼
掃描關注
如果喜歡我的文章,就點贊或分享吧!
總結
以上是生活随笔為你收集整理的一文详解神经网络模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员和女教师相亲,晒出每月教师公积金,
- 下一篇: 你还在用自己的电脑跑python程序?大