神經網路定義
目前,關於神經網路的定義尚不統一,按美國神經網路學家Hecht Nielsen 的觀點,神經網路的定義是:“神經網路是由多個非常簡單的處理單元彼此按某種方式相互連線而形成的計算機系統,該系統靠其狀態對外部輸入資訊的動態響應來處理資訊”。
人工神經網路(簡稱神經網路):是由人工神經元互連組成的網路,它是從微觀結構和功能上對人腦的抽象、簡化,是模擬人類智慧的一條重要途徑,反映了人腦功能的若干基本特徵,如並行資訊處理、學習、聯想、模式分類、記憶等。
深度學習一般指深度神經網路,這裡的深度指神經網路的層數(較多)。
深度學習里程碑
單層感知器基本結構
上面的感知器,相當於一個分類器,它使用高維的X向量作為輸入,在高維空間對輸入的樣本進行二分類:當W^T X>0時,o=1,相當於樣本被歸類為其中一類。否則,o=-1,相當於樣本被歸類為另一類。這兩類的邊界在哪裡呢?就是W^T X=0,這是一個高維超平面。
分割點 |
分割直線 |
分割平面 |
分割超平面 |
Ax+B=0 |
Ax+By+C=0 |
Ax+By+Cz+D=0 |
W^T X+b=0 |
感知器的訓練法則
感知器的訓練法則:對於每一個訓練樣例<X,t>
使用當前的權值計算感知器輸出o;
對於每一個權值做如下的更新:
其中,X為輸入向量,t為目標值,o為感知器當前權值下的輸出,η為學習率,x_i和ω_i為向量X和W的第i個元素。
當訓練樣例線性可分時,反覆使用上面的方法,經過有限次訓練,感知器將收斂到能正確分類所有訓練樣例的分類器。
在訓練樣例線性不可分時,訓練很可能無法收斂。因此,人們設計了另一個法則來克服這個不足,稱為delta法則。它使用梯度下降(Gradient Descent)的方法在假設空間中所有可能的權向量,尋找到最佳擬合訓練樣例的權向量。
梯度下降與損失函式
l對於多元函式o=f(x)=f(x_0,x_1,…,x_n ),其在X^′=〖[〖x_0〗^′,〖x_1〗^′,…,〖x_n〗^′]" " 〗^T處的梯度為:
梯度向量的方向,指向函式增長最快的方向。因此,負梯度向量-∇f,則指向函式下降最快的方向。
當訓練樣例線性不可分的時候,我們無法找到一個超平面,令感知器完美分類訓練樣例,但是我們可以近似地分類他們,而允許一些小小的分類錯誤。怎樣讓這個錯誤最小呢,首先要引數化描述這個錯誤,這就是損失函式(誤差函式),它反映了感知器目標輸出和實際輸出之間的誤差。最常用的誤差函式為L2誤差:
其中,d為訓練樣例,D為訓練樣例集,t_d為目標輸出,o_d為實際輸出。
損失函式的極值
既然損失函式E(W)的自變數是權值,因此他是定義在權值空間上的函式。那麼問題就轉化成了在權值空間中,搜尋使得E(W)最小的權值向量W。然而不幸的是,E(W)=1/2 ∑_(d∈D)▒(t_d-o_d )^2 定義了一個非常負雜的高維曲面,而數學上,對高維曲面的極值求解還沒有有效的方法。既然負梯度方向是函式下降最快的方向,那我們可以從某個點開始,沿著−()方向一路前行,期望最終可以找到E(W)的極小值點,這就是梯度下降法的核心思想。
線性單元全域性梯度下降演算法
對於訓練樣例集D中的每一個樣例記為<X, t>,X是輸入值向量,t為目標輸出,η是學習率。
初始化每個w_i為絕對值較小的隨機值
遇到終止條件前,do:
初始化每個∆w_i為零
對於D中每個<X, t>,do:
將X輸入此單元,計算輸出o
對於此單元的每個w_i,do:∆w_i+= η(t-o) x_i
對於此單元的每個w_i,do:w_i+= ∆w_i
這個版本的梯度下降演算法,實際上並不常用,它的主要問題是:
收斂過程非常慢,因為每次更新權值都需要計算所有的訓練樣例;
如果誤差曲面上有多個區域性極小值,那麼這個過程極易陷入區域性極值。
隨機梯度下降演算法和線上學習
針對原始梯度下降演算法的弊端,一個常見的變體稱為增量梯度下降(Incremental Gradient Descent),亦即隨機梯度下降(SGD:Stochastic Gradient Descent)。其中一種實現稱為線上學習(Online Learning),它根據每一個樣例來更新梯度:
ONLINE-GRADIENT-DESCENT(D, η)
初始化每個_為絕對值較小的隨機值
遇到終止條件前,do:
對於D中每個<X, t>,do:
將X輸入此單元,計算輸出o對於此單元的每個_,do:_ += η(t-o) _Mini-Batch梯度下降
針對上兩種梯度下降演算法的弊端,提出了一個實際工作中最常用的梯度下降演算法,即Mini-Batch SGD。它的思想是每次使用一小批固定尺寸(BS:Batch Size)的樣例來計算∆w_i,然後更新權值。
BATCH-GRADIENT-DESCENT(D, η, BS)
初始化每個w_i為絕對值較小的隨機值
遇到終止條件前,do:
初始化每個∆w_i為零
從D中下一批(BS個)樣例,對這批樣例中的每一個<X, t>,do:
將X輸入此單元,計算輸出o對於此單元的每個w_i,do:∆w_i += η(t-o) x_i對於此單元的每個w_i,do:w_i += ∆w_i
如果已經是最後一批,打亂訓練樣例的順序。
啟用函式 - Sigmoid函式
Sigmoid函式:
tanh函式:
Softsign函式:
ReLU( Rectified Linear Unit )函式:
Softplus函式:
f(x)=ln(e^x+1)
啟用函式設計需考慮的因素
非線性:當啟用函式是非線性的,一個兩層神經網路可以證明是一個通用函式近似值,如果失去了非線性,整個網路就相當於一個單層的線性模型。
連續可微性:這個屬性對基於梯度最佳化方法是必要的,如果選擇了一些具有區域性不可微的函式,則需要強行定義此處的導數。
有界性:如果啟用函式有界的,基於梯度的訓練方法往往更穩定;如果是無界的,訓練通常更有效率,但是訓練容易發散,此時可以適當減小學習率。
單調性:如果啟用函式是單調的,與單層模型相關的損失函式是凸的。
平滑性:有單調導數的平滑函式已經被證明在某些情況下泛化效果更好。
原點附近近似Identity:當啟用函式有這個特點時,對於小的隨機初始化權重,神經網路能夠更有效地學習。否則,在初始化權值時往往需要進行特殊設計。
神經網路的種類
多層全連線人工神經網路
單個感知器的表達能力有限,它只能表達線性決策面(超平面)。如果我們把眾多的感知器互聯起來,就像人的大腦做所的那樣,再將啟用函式更換為非線性函式,我們就可以表達種類繁多的非線性曲面。
前饋神經網路
前饋神經網路是一種最簡單的神經網路,各神經元分層排列。是目前應用最廣泛、發展最迅速的人工神經網路之一。
可以看出,輸入節點並無計算功能,只是為了表徵輸入向量各元素值。
各層節點表示具有計算功能的神經元,稱為計算單元。每個神經元只與前一層的神經元相連。
接收前一層的輸出,並輸出給下一層,採用一種單向多層結構,每一層包含若干個神經元,同一層的神經元之間沒有互相連線,層間資訊的傳送只沿一個方向進行。
反向傳播演算法
有了這個公式,我們就可以訓練神經網路了,公式重列如下:
BP演算法訓練網路的步驟如下:
1.取出下一個訓練樣例<X, T>,將X輸入網路,得到實際輸出O。
2.根據輸出層誤差公式(1)求取輸出層δ,並更新權值。
3.對於隱層,根據隱層誤差傳播公式(2)從輸出往輸入方向反向、逐層、迭代計算各層的δ,每計算好一層的δ,更新該層權值,直至所有權值更新完畢。
返回1中繼續。
卷積神經網路
l卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於影象處理有出色表現。它包括卷積層(convolutional layer),池化層(pooling layer)和全連線層(fully_connected layer)。
l20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於區域性敏感和方向選擇的神經元時發現其獨特的網路結構可以有效地降低反饋神經網路的複雜性,繼而提出了卷積神經網路(Convolutional Neural Networks-簡稱CNN)。
l現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網路避免了對影象的複雜前期預處理,可以直接輸入原始影象,因而得到了更為廣泛的應用。
卷積神經網路
卷積層
卷積神經網路的基本結構,就是前面說的多通道卷積。上一層的輸出(或者第一層的原始影象),作為本層的輸入,然後和本層的卷積核卷積,作為本層輸出。而各層的卷積核,就是要學習的權值。和FCN類似,卷積完成後,輸入下一層之前,也需要經過偏置和透過啟用函式進行啟用。
池化層
Pooling的中文名為池化,它合併了附近的單元,減小了下層輸入的尺寸。常用的Pooling有Max Pooling和Average Pooling,顧名思義,Max Pooling選擇一小片正方形區域中最大的那個值作為這片小區域的代表,而Average Pooling則使用這篇小區域的均值代表之。這片小區域的邊長為池化視窗尺寸。下圖演示了池化視窗尺寸為2的一般Max池化操作。
迴圈神經網路
迴圈神經網路(Recurrent neural networks,簡稱RNN)是一種透過隱藏層節點週期性的連線,來捕捉序列化資料中動態資訊的神經網路,可以對序列化的資料進行分類。
和其他前向神經網路不同,RNN可以儲存一種上下文的狀態,甚至能夠在任意長的上下文視窗中儲存、學習、表達相關資訊,而且不再侷限於傳統神經網路在空間上的邊界,可以在時間序列上有延拓,直觀上講,就是本時間的隱藏層和下一時刻的隱藏層之間的節點間有邊。
RNN廣泛應用在和序列有關的場景,如如一幀幀影象組成的影片,一個個片段組成的音訊,和一個個詞彙組成的句子。
展開的迴圈神經網路
迴圈神經網路型別
標準LSTM結構
深度學習中的正則化
正則化是機器學習中非常重要並且非常有效的減少泛化誤差的技術,特別是在深度學習模型中,由於其模型引數非常多非常容易產生過擬合。因此研究者也提出很多有效的技術防止過擬合,比較常用的技術包括:
引數新增約束,例如L_1、L_2範數等。訓練集合擴充,例如新增噪聲、資料變換等。Dropout引數懲罰
l許多正則化方法透過對目標函式J新增一個引數懲罰Ω(θ),限制模型的學習能力。我們將正則化後的目標函式記為J ̃。
J ̃(θ;X,y)=J(θ;X,y)+αΩ(θ),
其中αϵ[0,∞)是權衡範數懲罰項Ω和標準目標函式J(X;θ)相對貢獻的超引數。將α設為0表示沒有正則化。α越大,對應正則化懲罰越大。
L 1正則
l對模型引數新增L_1範數約束,即
J ̃(w;X,y)=J(w;X,y)+α‖w‖_1,
l如果透過梯度方法進行求解時,引數梯度為
∇J ̃(w)=∝sign(w)+∇J(w).
L 2正則
l引數約束新增L_2範數懲罰項,該技術用於防止過擬合。
J ̃(w;X,y)=J(w;X,y)+1/2 α‖w‖^2,
透過最最佳化技術,例如梯度相關方法可以很快推匯出,引數最佳化方式為
w=(1-εα)ω-ε∇J(w),
其中ε為學習率,相對於正常的梯度最佳化公式,對引數乘上一個縮減因子。
L 2 VS L 1
L_2與L_1的主要區別如下:
透過上面的分析,L_1相對於L_2能夠產生更加稀疏的模型,即當L_1正則在引數w比較小的情況下,能夠直接縮減至0,因此可以起到特徵選擇的作用。
如果從機率角度進行分析,很多範數約束相當於對引數新增先驗分佈,其中L_2範數相當於引數服從高斯先驗分佈;L_1範數相當於拉普拉斯分佈。
資料集合擴充
防止過擬合最有效的方法是增加訓練集合,訓練集合越大過擬合機率越小。資料集合擴充是一個省時有效的方法,但是在不同領域方法不太通用。
在目標識別領域常用的方法是將圖片進行旋轉、縮放等(圖片變換的前提是透過變換不能改變圖片所屬類別,例如手寫數字識別,類別6和9進行旋轉後容易改變類目)。語音識別中對輸入資料新增隨機噪聲。NLP中常用思路是進行近義詞替換。 噪聲注入,可以對輸入新增噪聲,也可以對隱藏層或者輸出層新增噪聲。例如對於softmax 分類問題可以透過 Label Smoothing技術新增噪聲,對於類目0-1新增噪聲,則對應機率變成ε/k,1-(k-1)/k ε。Dropout
lDropout是一類通用並且計算簡潔的正則化方法,在2014年被提出後廣泛的使用。簡單的說,Dropout在訓練過程中,隨機的丟棄一部分輸入,此時丟棄部分對應的引數不會更新。相當於Dropout是一個整合方法,將所有子網路結果進行合併,透過隨機丟棄輸入可以得到各種子網路。例如
最佳化器
在梯度下降演算法中,有各種不同的改進版本。在面向物件的語言實現中,往往把不同的梯度下降演算法封裝成一個物件,稱為最佳化器。
演算法改進的目的,包括但不限於:
加快演算法收斂速度;儘量避過或衝過區域性極值;減小手工引數的設定難度,主要是Learning Rate(LR)。常見的最佳化器如:普通GD最佳化器、動量最佳化器、Nesterov、Adagrad、Adadelta、RMSprop、Adam、AdaMax、Nadam