深度學習概述
來源:海豚數據科學實驗室
編輯:王萌 (深度學習衝鴨公衆號)
著作權歸作者所有,本文僅作學術分享,若侵權,請聯繫後臺刪文處理
神經網絡定義
目前,關於神經網絡的定義尚不統一,按美國神經網絡學家 Hecht Nielsen 的觀點,神經網絡的定義是:“神經網絡是由多個非常簡單的處理單元彼此按某種方式相互連接而形成的計算機系統,該系統靠其狀態對外部輸入信息的動態響應來處理信息”。
綜合神經網絡的來源﹑特點和各種解釋,它可簡單地表述爲:人工神經網絡是一種旨在模仿人腦結構及其功能的信息處理系統。
人工神經網絡(簡稱神經網絡):是由人工神經元互連組成的網絡,它是從微觀結構和功能上對人腦的抽象、簡化,是模擬人類智能的一條重要途徑,反映了人腦功能的若干基本特徵,如並行信息處理、學習、聯想、模式分類、記憶等。
深度學習一般指深度神經網絡,這裏的深度指神經網絡的層數(較多)。
深度學習里程碑
單層感知器基本結構
上面的感知器,相當於一個分類器,它使用高維的 X 向量作爲輸入,在高維空間對輸入的樣本進行二分類:當 W^T X>0 時,o=1,相當於樣本被歸類爲其中一類。否則,o=-1,相當於樣本被歸類爲另一類。這兩類的邊界在哪裏呢?就是 W^T X=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 算法訓練網絡的步驟如下:
-
取出下一個訓練樣例 <X, T>,將 X 輸入網絡,得到實際輸出 O。
-
根據輸出層誤差公式(1)求取輸出層δ,並更新權值。
-
對於隱層,根據隱層誤差傳播公式(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
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/DqP3KBsd3gYOEEgMQ7M-xA