神經網絡定義
目前,關于神經網絡的定義尚不統一,按美國神經網絡學家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:
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:
對于此單元的每個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許多正則化方法通過對目標函數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范數相當于拉普拉斯分布。
數據集合擴充
防止過擬合最有效的方法是增加訓練集合,訓練集合越大過擬合概率越小。數據集合擴充是一個省時有效的方法,但是在不同領域方法不太通用。
Dropout
lDropout是一類通用并且計算簡潔的正則化方法,在2014年被提出后廣泛的使用。簡單的說,Dropout在訓練過程中,隨機的丟棄一部分輸入,此時丟棄部分對應的參數不會更新。相當于Dropout是一個集成方法,將所有子網絡結果進行合并,通過隨機丟棄輸入可以得到各種子網絡。例如
優化器
在梯度下降算法中,有各種不同的改進版本。在面向對象的語言實現中,往往把不同的梯度下降算法封裝成一個對象,稱為優化器。
算法改進的目的,包括但不限于:
常見的優化器如:普通GD優化器、動量優化器、Nesterov、Adagrad、Adadelta、RMSprop、Adam、AdaMax、Nadam