算法崗面試——深度學習總結(jié)

  • 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):C=\frac{1}{2n}\sum_x ||y(x)-a^L(x)||^2
其中x表示輸入的樣本,y表示實際的分類,a^L表示預測的輸出,L表示神經(jīng)網(wǎng)絡的最大層數(shù)。

4.公式及推導
首先,將第l層第j個神經(jīng)元中產(chǎn)生的錯誤(即實際值與預測值之間的誤差)定義為:


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

公式1(計算最后一層神經(jīng)網(wǎng)絡產(chǎn)生的錯誤):
其中,表示Hadamard乘積,用于矩陣或向量之間點對點的乘法運算。公式1的推導過程如下:

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

推導過程:

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

推導過程:

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

推導過程:

5.反向傳播算法偽代碼

①輸入訓練集
②**對于訓練集中的每個樣本x,設置輸入層(Input layer)對應的激活值a^1:
??(1)前向傳播:
z^l=w^la^{l-1}+b^l,a^l=\sigma(z^l)
??(2)計算輸出層產(chǎn)生的錯誤:


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

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

  • 誤差逆?zhèn)鞑ニ惴ǎ╡rror BackPropagation,簡稱BP)

參考:周志華西瓜書

前向傳播算法

給定訓練集D{(x_1,y_1),(x_2,y_2),...,(x_m,y_m),x_i\epsilon R^d,y_i\epsilon R^l},即輸入示例由d個屬性描述,輸出l維實值向量。
給定一個擁有d個輸入神經(jīng)元、l個輸出神經(jīng)元、q個隱層神經(jīng)元的多層前饋網(wǎng)絡結(jié)構(gòu),其中輸出層第j個神經(jīng)元的閾值用\theta _j,隱層第h個神經(jīng)元的閾值用\gamma _h表示。
輸入層第i個神經(jīng)元與隱層第h個神經(jīng)元之間的連接權(quán)為v_{ih},隱層第h個神經(jīng)元與輸出層第j個神經(jīng)元之間的連接權(quán)為w_{hj},記隱層第h個神經(jīng)元的接收到的輸入為\alpha _h=\sum_{i=1}^d v_{ih}x_i,輸出層第j個神經(jīng)元接收到的輸入為\beta _j=\sum_{h=1}^q w_{hj}b_h,其中b_h為隱層第h個神經(jīng)元的輸出,假設隱層和輸出層的神經(jīng)元都是用Sigmoid函數(shù)。
對訓練例(x_k,y_k)假定神經(jīng)網(wǎng)絡的輸出為\hat{y}_j^k=(\hat y_1^k,\hat y_2^k,...,\hat y_l^k),即\hat y_j^k=f(\beta_j-\theta_j)
則網(wǎng)絡在(x_k,y_k)上的均方誤差為E_k=\frac{1}{2}\sum_{j=1}^l(\hat y_j^k-y_j^k)^2

反向傳播算法

BP算法基于梯度下降(gradient descent)策略,以目標的負梯度方向?qū)?shù)進行調(diào)整。對上述所說的均方誤差E_k,給定學習了\eta,有\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}}

待更新....

  • 各種激活函數(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

公式:f(z)=\frac{1}{1+exp(-z)}
曲線:


導數(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

公式:f(z)=tanh(z)=\frac{e^z - e^{-z}}{e^z + e^{-z}} tanh(x)=2sigmoid(2x)-1
曲線:


特點:也稱為雙切正切函數(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)元輸出
公式:\phi(x)=max(0,x)
曲線:


特點:輸入信號 <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

公式:\phi(x)=max(0.1x,x)
曲線:


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

5. ELU

公式:\left\{\begin{matrix}x,x>0 \\\alpha (e^x -1),x\leq 0 \end{matrix}\right.
曲線:


特點:
不會有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)h^{(t)}代表在序列索引號t時模型的隱藏狀態(tài)。h^{(t)}x^{(t)}h^{(t-1)}共同決定。

3)o^{(t)}代表在序列索引號t時模型的輸出。o^{(t)}只由模型當前的隱藏狀態(tài)h^{(t)}決定。

4)L^{(t)}代表在序列索引號t時模型的損失函數(shù)。

5)y^{(t)}代表在序列索引號t時訓練樣本序列的真實輸出。

6)U,W,V這三個矩陣是我們的模型的線性關(guān)系參數(shù),它在整個RNN網(wǎng)絡中是共享的,這點和DNN很不相同。 也正因為是共享了,它體現(xiàn)了RNN的模型的“循環(huán)反饋”的思想。

2.前向傳播算法

隱藏狀態(tài)h^{(t)}:由x^{(t)}h^{(t-1)}得到
h^{(t)}=\sigma(z^{(t)})=\sigma(Ux^{(t)}+Wh^{(t?1)}+b)
\sigma 為激活函數(shù),一般為tanh,b為線性關(guān)系的偏倚

模型輸出o^{(t)}:由隱藏狀態(tài)h^{(t)}得到
o^{(t)}=Vh^{(t)}+c

在最終在序列索引號t時我們的預測輸出為:
\hat{y}^{(t)}=\sigma (o^{(t)})
通常由于RNN是識別類的分類模型,所以上面這個激活函數(shù)一般是softmax。
通過損失函數(shù)L(t),比如對數(shù)似然損失函數(shù),我們可以量化模型在當前位置的損失,即\hat{y}^{(t)}y^{(t)}的差距。

3.反向傳播算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容