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