學習NLP/AI,必須深入理解「神經網路及其優化問題」
作者:JayLou
著作權歸作者所有。AI開發者獲得授權轉載,禁止二次轉載
https://zhuanlan.zhihu.com/p/56633392
註:封面圖片來自網路
目錄
本文以QA形式對NLP/AI中的神經網路及其優化問題進行總結。
一、神經網路基礎和前饋神經網路
1、神經網路中的激活函數:對比ReLU與Sigmoid、Tanh的優缺點?ReLU有哪些變種?
2、神經網路結構哪幾種?各自都有什麼特點?
3、前饋神經網路叫做多層感知機是否合適?
4、前饋神經網路怎麼劃分層?
5、如何理解通用近似定理?
6、怎麼理解前饋神經網路中的反向傳播?具體計算流程是怎樣的?
7、卷積神經網路哪些部分構成?各部分作用分別是什麼?
8、在深度學習中,網路層數增多會伴隨哪些問題,怎麼解決?為什麼要採取殘差網路ResNet?
二、循環神經網路
1、什麼是循環神經網路?循環神經網路的基本結構是怎樣的?
2、循環神經網路RNN常見的幾種設計模式是怎樣的?
3、循環神經網路RNN怎樣進行參數學習?
4、循環神經網路RNN長期依賴問題產生的原因是怎樣的?
5、RNN中為什麼要採用tanh而不是ReLu作為激活函數?為什麼普通的前饋網路或 CNN 中採取ReLU不會出現問題?
6、循環神經網路RNN怎麼解決長期依賴問題?LSTM的結構是怎樣的?
7、怎麼理解「長短時記憶單元」?RNN中的隱狀態與LSTM中的記憶狀態有什麼區別?
8、LSTM與GRU關係是怎樣的?
三、神經網路的訓練技巧及優化問題
1、神經網路優化的難點體現在哪裡?
2、神經網路數據預處理方法有哪些?神經網路怎樣進行參數初始化?參數初始化為0、過大、過小會怎樣?
3、神經網路優化方法有哪些?(學習率衰減 梯度方向優化)
4、請介紹逐層歸一化(Batch Normalization和Layer Normalization)?
5、神經網路正則化的方法有哪些?
6、神經網路怎麼解決梯度消失/梯度爆炸問題?
神經網路基礎
1、神經網路中的激活函數:對比ReLU與Sigmoid、Tanh的優缺點?ReLU有哪些變種?
優點:
從計算的角度上,Sigmoid和Tanh激活函數均需要計算指數,複雜度高,而ReLU只需要一個閾值即可得到激活值;
ReLU的非飽和性可以有效地解決梯度消失的問題,提供相對寬的激活邊界。
ReLU的單側抑制提供了網路的稀疏表達能力。
修正線性單元(Rectified Linear Unit,ReLU):ReLU函數被認為有生物上的解釋性,比如單側抑制、寬興奮邊界(即興奮程度 也可以非常高)。在生物神經網路中,同時處於興奮狀態的神經元非常稀疏。人 腦中在同一時刻大概只有1 ~ 4%的神經元處於活躍狀態。Sigmoid型激活函數會導致一個非稀疏的神經網路,而ReLU卻具有很好的稀疏性,大約50%的神 經元會處於激活狀態。
缺點:
ReLU和Sigmoid一樣,它們的輸出是非零中心化的,給後一層的神經網路引入偏置偏移, 會影響梯度下降的效率。
ReLU的局限性在於其訓練過程中會導致神經元死亡的問題。
在訓練時,如果參數在一次不恰當的更新後,第一個隱藏層中的某個ReLU神經元在所有的訓練數據上都不能被激活。那麼,這個神經元自身參數的梯度永遠都會是 0,在以後的訓練過程中永遠不能被激活。這種現象稱為死亡 ReLU 問題 (Dying ReLU Problem),並且也有可能會發生在其它隱藏層。
ReLU的變種
在實際使用中,為了避免上述情況,有幾種ReLU的變種也會被廣泛使用:Leaky ReLU、ELU以及softplus函數
ReLU、Leaky ReLU、ELU以及softplus函數
2、神經網路結構哪幾種?各自都有什麼特點?
前饋網路:整個網路中的信息是朝一個方向傳播,沒有反向的信息傳播,可以用一個有向無環路圖表示。前饋網路包括全連接前饋網路和卷積神經網路等。
反饋網路:反饋網路中神經元不但可以接收其它神經元的信號,也可以接收自己的反饋信號。和前饋網路相比,反饋網路中的神經元具有記憶功能,在不同的時刻具有不同的狀態。饋神經網路中的信息傳播可以是單向或雙向傳遞,因此可用一個有向循環圖或無向圖來表示。反饋網路包括循環神經網路、Hopfield 網路、玻爾茲曼機等。
圖網路:圖網路是定義在圖結構數據上的神經網路。圖中每個節點都一個或一組神經元構成。節點之間的連接可以是有向的,也可以是無向的。每個 節點可以收到來自相鄰節點或自身的信息。圖網路是前饋網路和記憶網路的泛化,包含很多不同的實現方式,比如圖卷積網路、消息傳遞網路等。
前饋網路、反饋網路和圖網路
3、前饋神經網路叫做多層感知機是否合適?
前饋神經網路也經常稱為多層感知器(Multi-Layer Perceptron,MLP)。但多層感知器的叫法並不是十分合理,因為前饋神經網路其實是由多層的logistic 回歸模型(連續的非線性函數)組成,而不是由多層的感知器(不連續的非線性函數)組成。
4、前饋神經網路怎麼劃分層?
在前饋神經網路中,各神經元分別屬於不同的層。每一層的神經元可以接受前一層神經元的信號,併產生信號輸出到下一層。第0層叫輸入層,最後一層叫輸出層,其它中間層叫做隱藏層。整個網路中無反饋,信號從輸入層向輸 出層單向傳播,可用一個有向無環圖表示。
5、如何理解通用近似定理?
通用近似定理《神經網路與深度學習》
通用近似定理:對於具有線性輸出層和至少一個使用「擠壓」性質的激活函數的隱藏層組成的前饋神經網路,只要其隱藏層神經元的數量足夠,它可以以任意的精度來近似任何從一個定義在實數空間中的有界閉集函數。說明:
所謂「擠壓」性質的函數是指像 sigmoid 函數的有界函數,但神經網路的通用近似性質也被證明對於其 它類型的激活函數,比如ReLU,也都是適用的。
通用近似定理只是說明了神經網路的計算能力可以去近似一個給定的連續函數,但並沒有給出如何找到這樣一個網路,以及是否是最優的。此外,當應用到機器學習時,真實的映射函數並不知道,一般是通過經驗風險最小化和正則化來進行參數學習。因為神經網路的強大能力,反而容易在訓練集上過擬合。
6、怎麼理解前饋神經網路中的反向傳播?具體計算流程是怎樣的?
上式中,誤差項來表示第層的神經元對最終誤差的影響,也反映了最終的輸出對第層的神經元對最終誤差的敏感程度。
前饋神經網路中反向傳播的實質就是誤差的反向傳播:第層的誤差項可以通過第層的誤差項計算得到,這就是誤差的反向傳播。
誤差反向傳播演算法的具體含義是:第層的一個神經元的誤差項(或敏感性)是所有與該神經元相連的第層的神經元的誤差項的權重和,然後再乘上該神經元激活函數的梯度。
出使用隨機梯度下降的誤差反向傳播演算法的具體訓練過程:
7、卷積神經網路哪些部分構成?各部分作用分別是什麼?
如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:
參數太多;
局部不變性特徵:全連接前饋網路很難提取局部不變特徵,一般需要進行數據增強來提高性能。
卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。卷積神經網路有三個結構上的特性:局部連接,權重共享以及子採樣。
卷積層的作用:局部連接,權重共享;
池化層(pooling layer)也叫子採樣層(subsampling layer)的作用:進行特徵選擇,降低特徵數量,並從而減少參數數
全連接和局部連接
8、在深度學習中,網路層數增多會伴隨哪些問題,怎麼解決?為什麼要採取殘差網路ResNet?
CNN之三大經典網路LeNet-AlexNet-VGG。在VGG中,卷積網路達到了19層,在GoogLeNet中,網路史無前例的達到了22層。那麼,網路的精度會隨著網路的層數增多而增多嗎?隨著網路層數的增加,網路發生了退化(degradation)的現象:隨著網路層數的增多,訓練集loss逐漸下降,然後趨於飽和,當你再增加網路深度的話,訓練集loss反而會增大。注意這並不是過擬合,因為在過擬合中訓練loss是一直減小的。
(1)在深度學習中,網路層數增多會伴隨哪些問題,怎麼解決?
1 計算資源的消耗(GPU)
2 模型容易過擬合(Dropout)
3 梯度消失/梯度爆炸問題的產生(批量歸一化BN):BN層能對各層的輸出做歸一化,這樣梯度在反向層層傳遞後仍能保持大小穩定,不會出現過小或過大的情況。
4 degradation退化問題:隨著網路層數的增多,訓練集loss逐漸下降,然後趨於飽和,當你再增加網路深度的話,訓練集loss反而會增大。注意這並不是過擬合,因為在過擬合中訓練loss是一直減小的。(殘差網路ResNet?)
(2)為什麼要採取殘差網路ResNet?
殘差網路ResNet
殘差塊可以表示為:(參考自詳解殘差網路)
對於一個更深的層,其與層的關係可以表示為
這個公式反應了殘差網路的兩個屬性:
層可以表示為任意一個比它淺的l層和他們之間的殘差部分之和;
,是各個殘差塊特徵的單位累和,而MLP是特徵矩陣的累積。
根據BP中使用的導數的鏈式法則,損失函數關於的梯度可以表示為
上面公式反映了殘差網路的兩個屬性:
在整個訓練過程中,不可能一直為,也就是說在殘差網路中不會出現梯度消失的問題。
表示層的梯度可以直接傳遞到任何一個比它淺的層。
循環神經網路
1、什麼是循環神經網路?循環神經網路的基本結構是怎樣的?
循環神經網路(Recurrent Neural Network,RNN)是一類具有短期記憶能力的神經網路。在循環神經網路中,神經元不但可以接受其它神經元的信息,也可以接受自身的信息,形成具有環路的網路結構。和前饋神經網路相比,循環神經網路更加符合生物神經網路的結構。循環神經網路已經被廣泛應用在語音識別、語言模型以及自然語言生成等任務上。循環神經網路的參數學習可以通過隨時間反向傳播演算法來學習。隨時間反向傳播演算法即按照時間的逆序將錯誤信息一步步地往前傳遞。當輸入序列比較長時,會存在梯度爆炸和消失問題,也稱為長期依賴問題。為了解決這個問題,人們對循環神經網路,進行了很多的改進,其中最有效的改進方式引入門控機制。此外,循環神經網路可以很容易地擴展到兩種更廣義的記憶網路模型:遞歸神經網路和圖網路。——《神經網路與深度學習》
循環神經網路
2、循環神經網路RNN常見的幾種設計模式是怎樣的?
序列到類別模式
同步序列到序列模式
非同步的序列到序列模式
序列到類別模式
同步序列到序列模式
非同步的序列到序列模式
3、循環神經網路RNN怎樣進行參數學習?
隨時間反向傳播(Backpropagation Through Time,BPTT)演算法的主要思想是通過類似前饋神經網路的錯誤反向傳播演算法來進行計算梯度。BPTT演算法將循環神經網路看作是一個展開的多層前饋網路,其中「每一層」對應循環網路中的「每個時刻」。這樣,循環神經網路就可以按按照前饋網路中的反向傳播演算法進行計算參數梯度。在「展開」的前饋網路中,所有層的參數是共享的。因此參數的真實梯度是將所有「展開層」的參數梯度之和。
隨時間反向傳播BPTT演算法示例
定義為第t 時刻的損失對第k 時刻隱藏神經層的凈輸入的導數,同樣對U、W求導時則可得到到隨時間反向傳播的公式:
4、循環神經網路RNN長期依賴問題產生的原因是怎樣的?
RNN產生長期依賴的原因與參數學習BPTT過程有關,實質就是參數U 的更新主要靠當前時刻k 的幾個相鄰狀態來更新,長距離的狀態對U 沒有影響。將展開可得到:
如果令,則可得到:
若,當時,造成系統不穩定,稱為梯度爆炸問題(Gradient Exploding Problem);相反,若,當時會出現和深度前饋神經網路類似的梯度消失問題(gradient vanishing problem)。
在循環神經網路中的梯度消失不是說的梯度消失了,而是的梯度消失了當。也就是說,參數U 的更新主要靠當前時刻k 的幾個相鄰狀態來更新,長距離的狀態對U 沒有影響。
5、RNN中為什麼要採用tanh而不是ReLu作為激活函數?為什麼普通的前饋網路或 CNN 中採取ReLU不會出現問題?
由可以得到,當使用ReLU作為激活函數時,,只要不是單位矩陣,梯度還是會出現消失或者爆炸的現象。
當採用ReLU作為循環神經網路中隱含層的激活函數時,只有當的取值在單位矩陣附近時才能取得比較好的效果,因此需要將初始化為單位矩陣。實驗證明,初始化W為單位矩陣並使用ReLU激活函數在一些應用中取得了與長短期記憶模型相似的結果,並且學習速度比長短期記憶模型更快,是一個值得嘗試的小技巧。
那麼為什麼普通的前饋網路或 CNN 中採取ReLU不會出現梯度消失或梯度爆炸的問題呢?
類似前饋神經網路中的誤差反向傳播:
因為他們每一層的 W 不同,且在初始化時是獨立同分布的,因此可以在一定程度相互抵消。即使多層之後一般也不會出現數值問題。
6、循環神經網路RNN怎麼解決長期依賴問題?LSTM的結構是怎樣的?LSTM又有哪些變種的?
RNN中的長期依賴問題,也就是梯度消失或梯度爆炸可以採取如下方法解決:
1) RNN梯度爆炸的解決方法:梯度截斷
2) RNN梯度消失的解決方法;殘差結構、門控機制(LSTM、GRU)
為了RNN中的長期依賴問題,一種非常好的解決方案是引入門控Hochreiter and Schmidhuber 來控制信息的累積速度,包括有選擇地加入新的信息,並有選擇地遺忘之前累積的信息。這一類網路可以稱為基於門控的循環神經網路(Gated RNN)。
長短期記憶(LSTM)結構
長短期記憶(LSTM)網路和門控循環單元(GRU)網路是兩種主要的基於門控的循環神經
網路。LSTM的結構如上圖所示,LSTM三個門的作用是:
7、怎麼理解「長短時記憶單元」?RNN中的隱狀態與LSTM中的記憶狀態有什麼區別?
為短期記憶,記憶能力由於,但又遠遠短於長期記憶,因此被稱為長的短時記憶。
記憶循環神經網路中的隱狀態h存儲了歷史信息,可以看作是一種記憶(mem-ory)。在簡單循環網路中,隱狀態每個時刻都會被重寫,因此可以看作是一種短期記憶(short-term memory)。在神經網路中,長期記憶(long-term memory)可以看作是網路參數,隱含了從訓練數據中學到的經驗,並更新周期要遠遠慢於短期記憶。而在LSTM網路中,記憶單元c 可以在某個時刻捕捉到某個關鍵信息,並有能力將此關鍵信息保存一定的時間間隔。記憶單元c 中保存信息的生命周期要長於短期記憶h,但又遠遠短於長期記憶,因此稱為長的短期記憶(long short-term memory)。
8、LSTM與GRU關係是怎樣的?
GRU結構
GRU 把遺忘門和輸入門合併為更新門(update)z,並使用重置門(reset)r 代替輸出門;
合併了記憶狀態 C 和隱藏狀態 h
神經網路的訓練技巧及優化問題
神經網路主要的問題集中在優化問題和正則化問題。
(1)優化問題:神經網路模型是一個非凸函數,再加上在深度網路中的梯度消失問題,很難進行優化;另外,深層神經網路模型一般參數比較多,訓練數據也比較大,會導致訓練的效率比較低。
(2)泛化問題:因為神經網路的擬合能力強,反而容易在訓練集上產生過擬合。因此,在訓練深層神經網路時,同時也需要通過一定的正則化方法來改進網路的泛化能力。
對應的優化問題有:
1)如何初始化參數;
2)預處理數據;
3)如何避免陷入局部最優?(學習率衰減 梯度方向優化)
具體展開討論如下:
1、神經網路優化的難點體現在哪裡?
深層神經網路是一個高度非線性的模型,其風險函數是一個非凸函數,因此風險最小化是一個非凸優化問題,會存在很多局部最優點。在高維空間中,非凸優化的難點並不在於如何逃離局部最優點,而是如何逃離鞍點。
2、神經網路數據預處理方法有哪些?神經網路怎樣進行參數初始化?參數初始化為0、過大、過小會怎樣?
(1)神經網路數據預處理方法有哪些?
縮放歸一化:通過縮放將每一個特徵的取值範圍歸一到[0, 1] 或[?1, 1] 之間
標準歸一化:將每一個維特徵都處理為符合標準正態分布(均值為0,標準差為1)。
白化(Whitening):是一種重要的預處理方法,用來降低輸入數據特徵之間的冗餘性。輸入數據經過白化處理後,特徵之間相關性較低,並且所有特徵具有相同的方差。
(2)參數初始化為0、過大、過小會怎樣?
參數為0:在第一遍前向計算時,所有的隱層神經元的激活值都相同。這樣會導致深層神經元沒有區分性。這種現象也稱為對稱權重現象。
參數過大或過小:參數過小還會使得sigmoid型激活函數丟失非線性的能力,這樣多層神經網路的優勢也就不存在了。如果參數取得太大,會導致輸入狀態過大。對於sigmoid 型激活函數來說,激活值變得飽和,從而導致梯度接近於0。
(3)經常使用的初始化方法有以下幾種:
Gaussian 分布初始化:
Xavier均勻分布初始化:參數可以在[?r, r] 內採用均勻分布進行初始化
對於sigmoid 型激活函數:
對於tanh函數:
3、神經網路優化方法有哪些?
幾種優化方法大體上可以分為兩類:一是調整學習率,使得優化更穩定;二是調整梯度方向,優化訓練速度。如圖所示:
AdaGrad:Adagrad 演算法的缺點是在經過一定次數的迭代依然沒有找到最優點時,由於這時的學習率已經非常小,很難再繼續找到最優點。在第t 迭代時,計算每個參數梯度平方的累計值:
RMSprop:計算每次迭代梯度gt 平方的指數衰減移動平均:
動量法:用梯度的移動平均來代替每次的實際梯度:
Adam:Adam 演算法一方面計算梯度平方的指數加權平均(和RMSprop 類似),另一方面計算梯度gt 的指數加權平均(和動量法類似)
4、請介紹逐層歸一化(Batch Normalization和Layer Normalization)?
(1)為什麼要進行逐層歸一化?什麼是內部協變數偏移?
在深層神經網路中,中間某一層的輸入是其之前的神經層的輸出。因此,其之前的神經層的參數變化會導致其輸入的分布發生較大的差異。在使用隨機梯度下降來訓練網路時,每次參數更新都會導致網路中間每一層的輸入的分布發生改變。越深的層,其輸入的分布會改變得越明顯。就像一棟高樓,低樓層發生一個較小的偏移,都會導致高樓層較大的偏移。
協變數偏移:協變數是一個統計學概念,是可能影響預測結果的統計變數。在機器學習中,協變數可以看作是輸入。一般的機器學習演算法都要求輸 入在訓練集和測試集上的分布是相似的。如果不滿足這個要求,這些學 習演算法在測試集的表現會比較差。
從機器學習角度來看,如果某個神經層的輸入分布發生了改變,那麼其參數需要重新學習,這種現象叫做內部協變數偏移。
內部協變數偏移會導致什麼問題?
簡而言之,每個神經元的輸入數據不再是「獨立同分布」。
上層參數需要不斷適應新的輸入數據分布,降低學習速度。
下層輸入的變化可能趨向於變大或者變小,導致上層落入飽和區,使得學習過早停止。
每層的更新都會影響到其它層,因此每層的參數更新策略需要儘可能的謹慎。
為了解決內部協變數偏移問題,就要使得每一個神經層的輸入的分布在訓練過程中要保持一致。最簡單直接的方法就是對每一個神經層都進行歸一化操作,使其分布保存穩定。下面介紹幾種比較常用的逐層歸一化方法:批量歸一化、層歸一化。層歸一化和批量歸一化整體上是十分類似的,差別在於歸一化的方法不同。
動機
訓練的本質是學習數據分布。如果訓練數據與測試數據的分布不同會降低模型的泛化能力。因此,應該在開始訓練前對所有輸入數據做歸一化處理。
而在神經網路中,因為每個隱層的參數不同,會使下一層的輸入發生變化,從而導致每一批數據的分布也發生改變;致使網路在每次迭代中都需要擬合不同的數據分布,增大了網路的訓練難度與過擬合的風險。
(2)批量歸一化(Batch Normalization,BN)的主要作用是什麼?主要原理是什麼?
BN 是一種正則化方法(減少泛化誤差),主要作用有:
加速網路的訓練(緩解梯度消失,支持更大的學習率)
防止過擬合:BN 可以看作在各層之間加入了一個新的計算層,對數據分布進行額外的約束,從而增強模型的泛化能力;
降低了參數初始化的要求。
基本原理
BN 方法會針對每一批數據,在網路的每一層輸入之前增加歸一化處理,使輸入的均值為 0,標準差為 1。目的是將數據限制在統一的分布下。
具體來說,針對每層的第 k 個神經元,計算這一批數據在第 k 個神經元的均值與標準差,然後將歸一化後的值作為該神經元的激活值。
BN 可以看作在各層之間加入了一個新的計算層,對數據分布進行額外的約束,從而增強模型的泛化能力;
但同時 BN 也降低了模型的擬合能力,破壞了之前學到的特徵分布;為了恢複數據的原始分布,BN 引入了一個重構變換來還原最優的輸入數據分布
其中 γ 和 β 為可訓練參數。
(3)BN 在訓練和測試時分別是怎麼做的?
訓練時每次會傳入一批數據,做法如前述;訓練時不採用移動平均,使用 BN 的目的就是為了保證每批數據的分布穩定,使用全局統計量反而違背了這個初衷;
當測試或預測時,每次可能只會傳入單個數據,此時模型會使用全局統計量代替批統計量(移動平均(moving averages))
5、神經網路正則化的方法有哪些?
L1 和L2 正則化:L1 和L2 正則化是機器學習中最常用的正則化方法,通過約束參數的L1 和L2 範數來減小模型在訓練數據集上的過擬合現象
Batch Normalization(同上)
提前停止: 當驗證集上的錯誤率不再下降,就停止迭代。
Dropout:集成學習的解釋:每做一次丟棄,相當於從原始的網路中採樣得到一個子網路。每次迭代都相當於訓練一個不同的子網路,這些子網路都共享原始網路的參數。那麼,最終的網路可以近似看作是集成了指數級個不同網路的組合模型。當在循環神經網路上應用丟棄法,不能直接對每個時刻的隱狀態進行隨機丟棄,這樣會損害循環網路在時間維度上記憶能力。一種簡單的方法是對非時間維度的連接(即非循環連接)進行隨機丟失:
虛線邊表示進行隨機丟棄,不同的顏色表示不同的丟棄掩碼
數據增強:增加數據量,提高模型魯棒性,避免過擬合。目前,數據增強還主要應用在圖像數據上,在文本等其它類型的數據還沒有太好的方法。
標籤平滑:在輸出標籤中添加雜訊來避免模型過擬合。
6、神經網路怎麼解決梯度消失問題?
選擇合適的激活函數:前饋神經網路:ReLU 循環神經網路:tanh
Batch Normalization
採取殘差網路ResNet
推薦崗位1:百度研究院-計算機視覺/NLP等AI方向實習生
推薦崗位2:曠視研究院-人工智慧方向博士
※如何使用 TensorFlow.js 自動化 Chrome 恐龍遊戲?
※C語言中的5種常量以及它們的不同之處
TAG:AI研習社 |