1. 程式人生 > >深度學習及神經網絡學習總結

深度學習及神經網絡學習總結

ons ani online aid size 原理 目標 獲得 bp算法

ps:我是在高一的時候第一次腦海中接觸神經網絡這個概念......,註意只是接觸,一直扔到現在

1. 簡介

神經網絡和深度學習是由Michael Nielsen所寫,其特色是:兼顧理論和實戰,是一本供初學者深入理解Deep Learning的好書。


2. 感知器與sigmoid神經元

2.1 感知器(Perceptrons)

感知器工作原理:接收一系列二進制輸入,經過特定的規則計算之後,輸出一個簡單的二進制。

技術分享

計算規則:通過引入權重(weights)表示每個輸入對於輸出的重要性,則有

技術分享

w?x=jwjxj,b=-threshold,則有

技術分享

其w是權重,b是偏差。

2.2 Sigmoid神經元(Sigmoid Neurons)

為了使學習變得可能,需要具備的【學習特征】:權重或偏差有較小的變化,導致輸出也有較小的變化。如下圖所示:

技術分享

感知器網絡存在的缺陷是:某個感知器較小的權重或偏差變化,可能導致輸出在0與1之間進行翻轉。所以包含感知器的網絡不具備【學習特征】。

幸運的是:Sigmoid神經元具有此【學習特征】,即其較小的權重或偏差變化,導致其輸出變化較小。

Sigmoid函數:

技術分享

Sigmoid神經元輸出:

技術分享

感知器與sigmoid神經元的差別:

1) 感知器只輸出0或1

2)sigmoid神經元不只輸出0或1,而可輸出[0,1]之間的任意值

3. 神經網絡架構

技術分享

3.1 手寫數字識別

技術分享

訓練圖像大小為28x28,每個訓練圖像有一個手寫數字。

在輸出層,如果第一個神經元被激活(即其輸出接近1),則此網絡認為此手寫數字為0;

如果第二個神經元被激活(即其輸出接近1),則此網絡認為此手寫數字為1;

其它以此類推。

3.2 算法描述

設x表示訓練圖像,則x是一個28x28=784維列向量。

技術分享表示輸入圖片x是數字6 。

需要尋找一個算法來發現w和b,使其輸出接近標簽值,為了量化接近程序,定義如下成本函數:

技術分享

w:所有權重的集合

b:所有偏差的集合

n:訓練樣本數

a: 輸出向量(其值依賴x,w,b)

x:一幅訓練圖像

||v||:表示向量的範數,即向量的長度

C:二次成本函數(mean squared error or MSE)

如果技術分享接近於0,表示y(x)接近輸出a,即學習效果很好。

此成本函數中,w和b為變量。

註:hidden layers和output layer中的每個神經元對應一個組w、b。

3.2.1 學習目標

如何找到滿足要求的w和b:答案是梯度下降法(Gradient Descent)

1)最小化二次成本函數

2)檢測分類的準確性

學習目標:在訓練神經網絡中,找到使二次成本最小的w和b的集合。

3.2.2 梯度下降更新規則

技術分享

技術分享:表示學習速度(Learning Rate)

此規則用於在神經網絡中學習參數w和b。

3.2.3 算法推導(梯度下降法: gradient descent)

要求極小值,先討論具有2個變量的簡單情況,然後再推廣:

技術分享

技術分享技術分享為梯度向量,則有:

技術分享

現在的問題是如何選擇技術分享,使技術分享負數,則有:

技術分享

則v的更新規則為:

技術分享

按此規則,一步一步跌代,C值不斷減少,直到全局最小值。

總之,梯度下降法是:重復計算梯度技術分享,然後向相反的方向移動(即下坡最快最陡的方向),如下圖所示:

技術分享

上面討論了只有兩個變量的情況,現在推廣到m個變量的情況,對應公式如下:

技術分享

3.2.4 隨機梯度下降法(Stochastic Gradient Descent)

為不減少計算量,把n個學習樣本分成很多組,每組有m個學習樣本,每次只計算一個組,則有如下推導:

技術分享

則w和b的更新規則為:

技術分享

註:如果m=1,則為在線學習(online)。

3.2.5 w和b的數量

對於hidden layers和輸出層的神經元,每個神經元對應一個w向量和一個b,w向量的維數是其輸入神經元的數量。第一層神經元沒有w和b,其值直接輸出。

第一層就表示原始圖像數據,這些數據不經任何處理,直接作為Xj參與第二層的運算,第二層首先基於每個Xj,計算其z(z=wx+b),然後計算出sigmoid(z),以此類推。直到最後一層,利用BP算法,先計算最後一層w和b的梯度,然後以此向前,直到計算出第二層的梯度為止。

4. BP算法(反向傳播算法)

BP(Backpropagation Algorithm) :是一個計算成本函數梯度的算法。

需要基於每個訓練樣本計算每一層的w和b的梯度,從而更新每一層的w和b。

BP的真正目標:是計算每個樣本的偏導數:技術分享技術分享

4.1 定義標記符號

技術分享

技術分享

則有激活值的如下公式:

技術分享

函數向量化有如下形式:

技術分享

即函數對向量的每個元素分別計算,然後生成對應的向量。

則上面的函數向量表示為:

技術分享

技術分享,則有技術分享

4.2 公式推導過程

4.2.1 計算激活值

技術分享

4.2.2 最後一層(L層)的二次成本函數

技術分享

4.2.3 單個訓練樣本(x)的二次成本函數

技術分享

4.2.4 定義誤差技術分享

技術分享

4.2.5 定義輸出層誤差

技術分享

4.2.6 求最後一層(L層)激活值的偏導數技術分享

技術分享

4.2.7 根據最後一層的誤差計算前一層的誤差

技術分享

4.2.8 計算目標值技術分享

技術分享

4.2.9 BP的四個基本方程式

技術分享

4.3 證明四個基本議程式

4.3.1 證明BP1

技術分享

4.3.2 證明BP2

技術分享

4.4 BP計算過程

技術分享

5. SGD(隨機梯度下降)計算過程

技術分享

6. 改進神經網絡學習方法

理想地,期望我們的神經網絡能從自己的錯誤中快速地進行學習。 神經元通過改變權重和偏差的來進行學習的學習速度由成本函數的偏導數(技術分享技術分享)決定,所以學習速度慢的根本原因是:偏導數太小。

6.1 交叉熵成本函數

交叉熵成本函數定義如下: 技術分享 對權重w的求導結果為(n為訓練樣本數): 技術分享 技術分享
根據上面的求導公式,則避免了在二次成本函數中由技術分享導致的學習速度慢問題。

6.2 推廣交叉成本函數

交叉成本函數推廣到具有多個神經元的多層網絡中,則交叉成本函數變為: 技術分享 技術分享 與二次成本函數相比,唯一不同的是技術分享的計算方法,其它計算方法完全相同。

6.3 交叉熵的含義

粗略地說,交叉熵是“不確定性”的一種度量。特別地,我們的神經元想要計算函數x-> y = y(x)。但是,它用函數x->a = a(x) 進行了替換。假設我們將a 想象成我們神經元估計為y = 1 的概率,而1-a 則是y = 0 的概率。那麽交叉熵衡量我們學習到y的正確值的平均起來的不確定性。如果輸出我們期望的結果,不確定性就會小一些;反之,不確定性就大一些。

6.4 Softmax(柔性最大值)

Softmax+log-likelihood(對數似然)成本函數:在現代圖像分類網絡中最常用。 Softmax為神經網絡定義了一個新的輸出層,即它的激活函數不再是Sigmoid,而是Softmax函數。 技術分享 技術分享 Softmax的每個神經元的輸出都為正,且它們的和為1。所以Softmax層的輸出可以看作一個概率分布。 與Softmax相比,Sigmoid層的輸出不能形成一個概率分布,且沒有一個直觀、簡單的解釋。

6.4.1 Softmax如何解決學習速度慢的問題?

技術分享 從以上梯度公式中可知,對於解決學習速度慢的問題:【Softmax輸出層+對數似然成本函數】與【Sigmoid輸出層+交叉熵成本函數】效果相當。 在二者間如何做出選擇呢? 當你需要把輸出當做概率解釋時,則需要使用【Softmax輸出層+對數似然成本函數】。

7. 過擬合和規範化

7.1 過擬合(Overfitting)

在神經網絡中,過擬合(Overfitting)是一個主要問題。此問題在現代網絡中特別突出,因為現代網絡有大量的權重和偏差。為了進行有效的訓練,我們需要一個檢測是否過擬合的方法,以防止過度訓練(Overtraining),並且我們還需要可以減少過擬合效果的技術。 最直接的檢測過擬合的方法是:跟蹤測試數據在訓練過的網絡中的準確性。如測試數據分類的準確性不再改善,我們應當停止訓練;或測試數據分類的準確性和訓練數據分類的準確性都不再改善,我們應當停止訓練。
如果對訓練樣本過擬合,則其推廣能力就差,導致對新的數據的預測或分類的準確性變差。

7.2 規範化(Regularization)-減少過擬合

增加訓練數據是減少過擬合的方法之一。
規範化(Regularization)也是減少過擬合的方法之一。有時候被稱為權重衰減(weight decay)或者L2 規範化。L2 規範化的思想是增加一個額外的項到成本函數中,這個項叫做規範化項。規範化的交叉熵如下:
技術分享 技術分享>0是規範化參數(regularization parameter) 技術分享 C0是原來常規的成本函數。 如果技術分享較小,我們期望最小化原始成本函數;如果技術分享較大,我們期望最小化權重。 則可得: 技術分享
可進一步得到: 技術分享 權重衰減因子:技術分享 針對小批量訓練樣本(m個),則有: 技術分享

7.3 為什麽規範化可以減少過擬合

權重越小,復雜度就越低;可以為數據提供更簡潔更有力的解釋。 當有異常輸入時,小的權重意味著網絡輸出變化不大,即不易學習到數據中的局部噪聲。總而言之,規範化網絡基於訓練數據的主要規律,從而創建一個相對簡單的模型,並且拒絕學習訓練數據中的噪聲(異常數據)。這樣強制網絡學習數據的本質規律,並把學到的規律進行更好地推廣。

8. 權重初始化

可加快學習速度。 假設輸入層有1000個神經元,且已經使用歸一化的高斯分布初始化了連接第個隱層的權重。如下圖所示: 技術分享 為了簡化,設輸入層一半神經元值為1,另一半為0。讓我們考慮隱層神經元輸入的帶權和z: 技術分享 其中500項消去了,因為對應的輸xj 為0。所以z 是包含501個歸一化的高斯隨機變量的和,包含500個權重項和1個偏差項。因此z本身是一個均值為0、標準差為技術分享(方差為501)的高斯分布。它是一個非常寬的高斯分布,根本不是非常尖的形狀: 技術分享 註: 若隨機變量X服從一個數學期望為μ、方差為σ^2的高斯分布,記為N(μ,σ^2)。 正態分布的期望值μ決定了其位置,其標準差σ決定了分布的幅度。
技術分享 標準正態分布服從N(0,1)
兩個都服從正太分布的變量,例如X服從N(a,b),Y服從N(c,d),且X和Y相互獨立,則有:
1)X+Y服從N(a+c,b+d) 2)X-Y服從N(a-c,b+d) 即兩變量相加減時,期望相應加減,方差始終是相加。
從上圖上可以看出|z|會變得很大,即z>>1或z<<-1。如果這樣,隱層神經元的輸出技術分享就會接近1或者0,即隱層神經元進入飽和狀態了。即隱層神經元的輸出技術分享將非常接近於0或1。在這種情況下,權重的修改對隱層神經元的輸出激活值影響很小,從而對下一層的隱層神經元、直到對輸出層的神經元的輸出都很小,從而導致學習速度慢的問題。 (註:輸出層神經元飽和於錯誤值也會導致學習速度慢的問題,這可以通過選擇成本函數<如交叉熵>來避免,但選擇成本函數的方法不能解決隱層神經元飽和的問題) 從以上分析可知,如果隱層神經元的權重服從N(0,1)分布,它將導致隱層神經元的激活值接近於0或1,並且導致學習速度下降,如何解決此問題呢? 通過選擇更好的初始化權重和偏差可以解決此問題。 答案是:初始化權重服從N(0,1/技術分享)分布,偏差服從N(0,1)。其中技術分享表示此層神經元輸入權重個數(即此隱層神經元的輸入神經元個數,如上例中技術分享=1000)。權重之後為:技術分享,其服從N(0,3/2)。 方差的計算方法:500*1/1000+1=1500/1000=3/2。其圖形非尖,如下圖所示: 技術分享 此神經元飽和的可能性很低,從而導致學習速度慢的可能性也很低。

9. 神經網絡可以計算任何函數

“神經網絡可以計算任何函數”的真正含義: 1)不是說一個網絡可以被用來準確地計算任何函數,而是我們可以獲得盡可能好的一個近似。通過增加隱層神經元的數量,可以提升近似的精度。 2)可以按照上面的方式近似的函數類其實是連續函數。如果函數不是連續的,也就是會有突然、極陡的跳躍,那麽一般來說無法使用一個神經網絡進行近似。
總而言之:包含一個隱層的神經網絡可以被用來按照任意給定的精度近似任何連續函數。

10. 為什麽訓練深度神經網絡比較困難?

對於學習算法,前面使用的是苦力般的學習方法(基於反向傳播的隨機梯度下降)來訓練深度網絡,這樣產生的問題是:深度神經網絡並不比淺層網絡性能好太多。 其根據原因是:在深度網絡中,不同層的學習速度差異很大。尤其是, 在網絡後面層的學習速度很好的時候,前面層在訓練時停滯不變,基本上學不到東西;或先前的層學習的比較好,但是後面層卻停滯不變。其停滯不前的原因是學習速度下降了,學習速度下降與基於梯度的學習方法有關。 實際上,我們發現在深度神經網絡中使用基於梯度下降的學習方法本身存在著內在不穩定性。這種不穩定性使得前面或者後面層的學習速度受到抑制。在真正理解了這些難點之後,我們就能夠獲得有效訓練深度網絡的更深洞察力。 在某些深度神經網絡中,在我們在隱層BP的時候梯度傾向於變小。這意味著在前面的隱層中的神經元學習速度要慢於後面的隱層。在多數的神經網絡中都存在著這個現象,這個現象也被稱作是:消失的梯度問題(Vanishing Gradient Problem)。
在前面層中的梯度會變得非常大,這叫做:激增的梯度問題(Exploding Gradient Problem),這也沒比消失的梯度問題更好處理。更加一般地說,在深度神經網絡中的梯度是不穩定的,在前面層中或會消失,或會激增。這種不穩定性才是深度神經網絡中基於梯度學習的根本問題。

10.1 消失的梯度問題的根本原因?

深度神經網絡中的梯度不穩定性。 由於梯度的值小於1,在隨機梯度下降算法中,前面層的梯度由後面層的梯度參與相乘,所以造成前面層的梯度很小,後面層的梯度依次變大。從而造成了梯度的不均衡性。

11. 卷積神經網絡(CNN)

CNN(Convolutional neural networks):使用了一個特殊架構來進行圖像分類。 它的三個基本概念為:局部感受野(Local receptive fields),共享權重(Shared weights),和混合(Pooling)。

11.1 基本概念

11.1.1 局部感受野

在之前的全連接網絡中,輸入被描繪成縱向排列的神經元,但在卷積神經網絡中,把輸入看作28 x 28的方形神經元排列。第一個隱層中的每個神經元只與輸入圖像的一個小區域(如5x5)連接,這個輸入圖像的小區域叫做隱層神經元的局部感受野(Local receptive fields)。如下圖所示: 技術分享
每個連接學習一個權重,且隱層神經元也學習一個總的偏差。即此隱層神經元正在對輸入圖像的此區域進行學習、了解。一個隱層神經元與一個局部感受野一一對應,即每個隱層神經元有:5x5個權重和1個偏差。
如上圖所示,對於一個28x28的輸入圖像,如果局部感受野的大小為5x5,則第一個隱層中有24x24個神經元。

11.1.2 共享權重和偏差

每組24x24個隱層神經元使用相同的權重和偏差。即對於每組中的第(j,k)隱層神經元,其激活值為: 技術分享 即每組有5x5個權得和1個偏差,其26個需要學習的參數。這表示第一個隱層中的所有神經元在輸入圖像的不同地方檢測相同的特征。(圖像具有平移不變性) 特征映射:從輸入層到隱層的映射。 共享權重:定義特征映射的權重。 共享偏差:定義特征映射的偏差。 卷積核或濾波器:共享權重和偏差。 為了做圖像識別,需要多個特征映射,且一個完整的卷積層由多個不同的特征映射組成,如下圖包含三個特征映射: 技術分享 技術分享 上面20幅圖像對應20個不同的特征映射(或濾波器、或卷積核),每個特征映射用5x5方塊圖表示,對應局部感受野的5x5個權重。白色表示小權重,黑色表示大權重。 共享權重和偏差最大的優點是:大大減少了網絡中參數的數量。如全連接網絡的參數是卷積網絡參數的30倍左右。(卷積網絡20個特征:20x26=520, 全連接20個隱層神經元:20x784=15680)

11.1.3 混合層

卷積神經網絡除包含卷積層之外,還包含混合層(Pooling Layers),混合層在卷積層之後,它的職責是簡化(總結)卷積層輸出的信息。 混合層根據卷積層輸出的所有特征映射,然後提煉出新的特征映射。 1)Max-Pooling 技術分享 從2x2區域中找一個最大的激活值輸出。 技術分享 Max-Pooling是一個用於詢問:是否在圖像的一個區域內發現了指定的特征。 2)L2-Pooling L2-Pooling就是計算矩陣2x2的2範數(先計算4個數的平方的和,然後開平方)。 L2-Pooing:是一個從卷積層提煉信息的方法。

11.1.4 完整的卷積神經網絡

技術分享 最後一層與前面一層是全連接,其連接數為:3x12x12x10。 卷積神經網絡與全連接神經網絡的架構不一樣,但其目標是一樣的, 它們的目標為:使用訓練數據訓練網絡的權重和偏差,然後對輸入的圖像做出正確的分類。

深度學習及神經網絡學習總結