-
BatchNormalization介紹
參考知乎深度學習中 Batch Normalization為什么效果好?
參考CSDN對Batch_Normalization的理解
神經(jīng)網(wǎng)絡在訓練的時候隨著網(wǎng)絡層數(shù)的加深,激活函數(shù)的輸入值的整體分布逐漸往激活函數(shù)的取值區(qū)間上下限靠近,從而導致在反向傳播時低層的神經(jīng)網(wǎng)絡的梯度消失。而BatchNormalization的作用是通過規(guī)范化的手段,將越來越偏的分布拉回到標準化的分布,使得激活函數(shù)的輸入值落在激活函數(shù)對輸入比較敏感的區(qū)域,從而使梯度變大,加快學習收斂速度,避免梯度消失的問題。
定義:批規(guī)范化。Google在ICML文中描述的非常清晰,即在每次SGD時,通過mini-batch來對相應的activation做規(guī)范化操作,使得結(jié)果(輸出信號各個維度)的均值為0,方差為1。
作用:1. 加速訓練,加快收斂;2. 降低過擬合風險;3. 提高模型的泛化能力
原理:為了防止“梯度彌散”。關(guān)于梯度彌散,大家都知道一個簡單的例子:
在BN中,是通過將activation規(guī)范為均值和方差一致的手段使得原本會減小的activation的scale變大。
算法:
-
Mini-batch
參考CSDNMini-batch 和batch的區(qū)別
深度學習的優(yōu)化算法,說白了就是梯度下降。每次的參數(shù)更新有兩種方式。
第一種,遍歷全部數(shù)據(jù)集算一次損失函數(shù),然后算函數(shù)對各個參數(shù)的梯度,更新梯度。這種方法每更新一次參數(shù)都要把數(shù)據(jù)集里的所有樣本都看一遍,計算量開銷大,計算速度慢,不支持在線學習,這稱為Batch gradient descent,批梯度下降。
另一種,每看一個數(shù)據(jù)就算一下?lián)p失函數(shù),然后求梯度更新參數(shù),這個稱為隨機梯度下降,stochastic gradient descent。這個方法速度比較快,但是收斂性能不太好,可能在最優(yōu)點附近晃來晃去,hit不到最優(yōu)點。兩次參數(shù)的更新也有可能互相抵消掉,造成目標函數(shù)震蕩的比較劇烈。
為了克服兩種方法的缺點,現(xiàn)在一般采用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把數(shù)據(jù)分為若干個批,按批來更新參數(shù),這樣,一個批中的一組數(shù)據(jù)共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數(shù)與整個數(shù)據(jù)集相比小了很多,計算量也不是很大。
-
梯度消失
在神經(jīng)網(wǎng)絡中,當前面隱藏層的學習速率低于后面隱藏層的學習速率,即隨著隱藏層數(shù)目的增加,分類準確率反而下降了。這種現(xiàn)象叫做消失的梯度問題。
-
BP算法
1.反向傳播的思想
(1)將訓練集數(shù)據(jù)輸入到ANN的輸入層,經(jīng)過隱藏層,最后達到輸出層并輸出結(jié)果,這是ANN的前向傳播過程;
(2)由于ANN的輸出結(jié)果與實際結(jié)果有誤差,則計算估計值與實際值之間的誤差,并將該誤差從輸出層向隱藏層反向傳播,直至傳播到輸入層;
(3)在反向傳播的過程中,根據(jù)誤差調(diào)整各種參數(shù)的值;不斷迭代上述過程,直至收斂。
2.變量定義

上圖是一個三層人工神經(jīng)網(wǎng)絡,layer1至layer3分別是輸入層、隱藏層和輸出層。如圖,先定義一些變量:
表示第層的第個神經(jīng)元連接到第層第個神經(jīng)元的權(quán)重;
表示第層的第個神經(jīng)元的偏置;
表示第層的第個神經(jīng)元的輸入,即
表示第層的第個神經(jīng)元的輸出,即
其中表示激活函數(shù)。
3.代價函數(shù)
代價函數(shù)被用來計算ANN輸出值與實際值之間的誤差。常用的代價函數(shù)是二次代價函數(shù)(Quadratic cost function):
其中表示輸入的樣本,
表示實際的分類,
表示預測的輸出,
表示神經(jīng)網(wǎng)絡的最大層數(shù)。
4.公式及推導
首先,將第層第
個神經(jīng)元中產(chǎn)生的錯誤(即實際值與預測值之間的誤差)定義為:

以一個輸入樣本為例進行說明,此時代價函數(shù)表示為:

公式1(計算最后一層神經(jīng)網(wǎng)絡產(chǎn)生的錯誤):


公式2(由后往前,計算每一層神經(jīng)網(wǎng)絡產(chǎn)生的錯誤):

推導過程:

公式3(計算權(quán)重的梯度):

推導過程:

公式4(計算偏置的梯度):

推導過程:

5.反向傳播算法偽代碼
①輸入訓練集
②**對于訓練集中的每個樣本x,設置輸入層(Input layer)對應的激活值:
??(1)前向傳播:
??(2)計算輸出層產(chǎn)生的錯誤:

??(3)反向傳播錯誤:

③使用梯度下降(gradient descent),訓練參數(shù):


-
誤差逆?zhèn)鞑ニ惴ǎ╡rror BackPropagation,簡稱BP)
參考:周志華西瓜書
前向傳播算法
給定訓練集D{(),(
),...,(
),
},即輸入示例由d個屬性描述,輸出l維實值向量。
給定一個擁有d個輸入神經(jīng)元、l個輸出神經(jīng)元、q個隱層神經(jīng)元的多層前饋網(wǎng)絡結(jié)構(gòu),其中輸出層第j個神經(jīng)元的閾值用,隱層第h個神經(jīng)元的閾值用
表示。
輸入層第i個神經(jīng)元與隱層第h個神經(jīng)元之間的連接權(quán)為,隱層第h個神經(jīng)元與輸出層第j個神經(jīng)元之間的連接權(quán)為
,記隱層第h個神經(jīng)元的接收到的輸入為
,輸出層第j個神經(jīng)元接收到的輸入為
,其中
為隱層第h個神經(jīng)元的輸出,假設隱層和輸出層的神經(jīng)元都是用Sigmoid函數(shù)。
對訓練例假定神經(jīng)網(wǎng)絡的輸出為
,即
則網(wǎng)絡在上的均方誤差為
反向傳播算法
BP算法基于梯度下降(gradient descent)策略,以目標的負梯度方向?qū)?shù)進行調(diào)整。對上述所說的均方誤差,給定學習了
,有
待更新....
-
各種激活函數(shù)對比
轉(zhuǎn)載自深度學習激活函數(shù)比較
深度學習中常用的激活函數(shù)詳解及對比分析(sigmoid)
激活函數(shù)的作用:如果不用激勵函數(shù),每一層輸出都是上層輸入的線性函數(shù),無論神經(jīng)網(wǎng)絡有多少層,輸出都是輸入的線性組合。
如果使用的話,激活函數(shù)給神經(jīng)元引入了非線性因素,使得神經(jīng)網(wǎng)絡可以任意逼近任何非線性函數(shù),這樣神經(jīng)網(wǎng)絡就可以應用到眾多的非線性模型中。
1. Sigmoid
公式:
曲線:

導數(shù):
特點:用于隱層神經(jīng)元輸出,取值范圍為(0,1),它可以將一個實數(shù)映射到(0,1)的區(qū)間,可以用來做二分類。在特征相差比較復雜或是相差不是特別大時效果比較好。
缺點:
激活函數(shù)計算量大,反向傳播求誤差梯度時,求導涉及除法;
反向傳播時,很容易就會出現(xiàn)梯度消失的情況,從而無法完成深層網(wǎng)絡的訓練;
Sigmoids函數(shù)飽和且kill掉梯度;
Sigmoids函數(shù)收斂緩慢。
sigmoid 原函數(shù)及導數(shù)圖形如下:

由圖可知,導數(shù)從 0 開始很快就又趨近于 0 了,易造成“梯度消失”現(xiàn)象
2. Tanh
公式:
曲線:

特點:也稱為雙切正切函數(shù),取值范圍為[-1,1]。tanh在特征相差明顯時的效果會很好,在循環(huán)過程中會不斷擴大特征效果。
與 sigmoid 的區(qū)別是,tanh 是 0 均值的,因此實際應用中 tanh 會比 sigmoid 更好。
缺點:Tanh 激活函數(shù)與sigmoid函數(shù)一樣也具有軟飽和性,沒有改變Sigmoid函數(shù)的最大問題——由于飽和性產(chǎn)生的梯度消失。
3. ReLU
Rectified Linear Unit(ReLU) - 用于隱層神經(jīng)元輸出
公式:
曲線:

特點:輸入信號 <0 時,輸出都是0,出現(xiàn)硬飽和,梯度消失為0;>0 的情況下,輸出等于輸入。
優(yōu)點:
使用 ReLU 得到的 SGD 的收斂速度會比 sigmoid/tanh 快很多;
解決了梯度消失的問題 :在正區(qū)間當輸入值大于0時,梯度保持不變,沒有sigmoid及Tanh函數(shù)的梯度消失的問題;
計算速度快
缺點:訓練的時候很”脆弱”,很容易就”die”了
例如,一個非常大的梯度流過一個 ReLU 神經(jīng)元,更新過參數(shù)之后,這個神經(jīng)元再也不會對任何數(shù)據(jù)有激活現(xiàn)象了,那么這個神經(jīng)元的梯度就永遠都會是 0。如果 learning rate 很大,那么很有可能網(wǎng)絡中的 40% 的神經(jīng)元都”dead”了。
4. Leaky ReLU
公式:
曲線:

特點:解決ReLU函數(shù)的Dead ReLU Problem而提出的激活函數(shù)。
理論上來講,Leaky ReLU有ReLU的所有優(yōu)點,外加不會有Dead ReLU問題,但是在實際操作當中,并沒有完全證明Leaky ReLU總是好于ReLU。
5. ELU
公式:
曲線:

特點:
不會有Dead ReLU問題;
輸出的均值接近0,zero-centered。
它的一個小問題在于計算量稍大。類似于Leaky ReLU,理論上雖然好于ReLU,但在實際使用中目前并沒有好的證據(jù)ELU總是優(yōu)于ReLU。
-
殘差網(wǎng)絡
轉(zhuǎn)自殘差網(wǎng)絡(Deep Residual Learning for Image Recognition)
殘差的思想都是去掉相同的主體部分,從而突出微小的變化。
1.退化問題的直觀理解
隨著網(wǎng)絡層數(shù)的加深,會導致梯度彌散或梯度爆炸。對于該問題的解決方法是正則化初始化和中間的正則化層(Batch Normalization),這樣的話可以訓練幾十層的網(wǎng)絡。雖然通過上述方法能夠訓練了,但是又會出現(xiàn)另一個問題,就是退化問題,網(wǎng)絡層數(shù)增加,但是在訓練集上的準確率卻飽和甚至下降了。這個不能解釋為overfitting,因為overfit應該表現(xiàn)為在訓練集上表現(xiàn)更好才對。退化問題說明了深度網(wǎng)絡不能很簡單地被很好地優(yōu)化。
深度殘差網(wǎng)絡。如果深層網(wǎng)絡的后面那些層是恒等映射,那么模型就退化為一個淺層網(wǎng)絡。那現(xiàn)在要解決的就是學習恒等映射函數(shù)了。 但是直接讓一些層去擬合一個潛在的恒等映射函數(shù)H(x) = x,比較困難,這可能就是深層網(wǎng)絡難以訓練的原因。但是,如果把網(wǎng)絡設計為H(x) = F(x) + x,如下圖。我們可以轉(zhuǎn)換為學習一個殘差函數(shù)F(x) = H(x) - x. 只要F(x)=0,就構(gòu)成了一個恒等映射H(x) = x. 而且,擬合殘差肯定更加容易。

-
RNN
轉(zhuǎn)載自循環(huán)神經(jīng)網(wǎng)絡(RNN)模型與前向反向傳播算法
循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Networks ,以下簡稱RNN),它廣泛的用于自然語言處理中的語音識別,手寫識別以及機器翻譯等領域。
如果訓練樣本輸入是連續(xù)的序列,且序列的長短不一,比如基于時間的序列:一段段連續(xù)的語音,一段段連續(xù)的手寫文字。這些序列比較長,且長度不一,比較難直接的拆分成一個個獨立的樣本來通過DNN、CNN進行訓練。
1.模型

符號解釋:
1)代表在序列索引號t時訓練樣本的輸入。同樣的,和代表在序列索引號和時訓練樣本的輸入。
2)代表在序列索引號t時模型的隱藏狀態(tài)。
由
和
共同決定。
3)代表在序列索引號t時模型的輸出。
只由模型當前的隱藏狀態(tài)
決定。
4)代表在序列索引號t時模型的損失函數(shù)。
5)代表在序列索引號t時訓練樣本序列的真實輸出。
6),
,
這三個矩陣是我們的模型的線性關(guān)系參數(shù),它在整個RNN網(wǎng)絡中是共享的,這點和DNN很不相同。 也正因為是共享了,它體現(xiàn)了RNN的模型的“循環(huán)反饋”的思想。
2.前向傳播算法
隱藏狀態(tài):由
和
得到
為激活函數(shù),一般為
,b為線性關(guān)系的偏倚
模型輸出:由隱藏狀態(tài)
得到
在最終在序列索引號時我們的預測輸出為:
通常由于RNN是識別類的分類模型,所以上面這個激活函數(shù)一般是softmax。
通過損失函數(shù),比如對數(shù)似然損失函數(shù),我們可以量化模型在當前位置的損失,即
和
的差距。