官术网_书友最值得收藏!

3.1 神經網絡

神經網絡模擬的是人類大腦中的信號傳播和神經元的激活過程,每個神經元收到來自周圍其他神經元傳遞過來的信號,被激活后將信號傳遞給其他神經元。神經網絡的組成部分是權重(Weight)、偏差(Bias)、神經元(Neuron)、激活函數(Activation),權重和偏差作用于神經元之間的信號傳遞過程,激活函數決定了神經元收到信號之后的輸出。實際上,大腦中的信號常常都是尖峰(Spiking)信號,一個神經元被激活之后會同時激活周圍的許多神經元,而神經網絡模型中的信號是光滑可導的,為誤差的反向傳播提供便利。

3.1.1 神經元

Michael Nielsen于2019年在他的電子書籍Neural Networks and Deep Learning[4]中詳細介紹了神經網絡模型中的權重、偏差、激活函數和誤差反向傳播。圖3.1給出了簡單的神經網絡模型示意圖,它說明了神經網絡模型中的基本概念,為后面介紹元學習中對神經網絡模型的改造打下基礎。

img

圖3.1 神經網絡模型的示意圖

神經網絡模型的深度是指網絡中的層數,神經網絡模型的寬度是指每個隱藏層中神經元的個數。最左邊的是輸入層(Input Layer),輸入層神經元的個數和輸入數據的維度通常是一樣的。中間是隱藏層(Hidden Layer),深度神經網絡中有許多隱藏層,這里進行了簡化,畫成一個隱藏層,隱藏層收到輸入數據之后進行一系列的處理,例如,卷積層(Convolutional Layer)、最大值池化層(Max-Pooling Layer)等。最右邊是輸出層(Output Layer),對隱藏層傳遞出來的信號進行處理,形成與問題目標對應的輸出,例如,對于分類問題,輸出層神經元的個數常常是分類問題的類別總數。

3.1.2 權重、偏差和激活函數

圖3.2給出的是神經網絡模型中參數的示意圖。

img

圖3.2 神經網絡模型的參數示意圖

神經元之間連接的參數是權重,記為img。神經元本身的參數包括偏差(Bias),記為b,神經元收到上一層神經元的信號被激活后的激活函數值是a。最左側是輸入層,輸入層的神經元個數常常等于輸入數據的維度,輸入層對應的激活函數值等于輸入的值,示意圖中的這些參數之間有如下的函數關系:

img

其中,img是上一層神經元按照權重參數加權求和后得到的輸入,img是神經元對應的偏差參數,img是神經元收到輸入被激活后的輸出值。img代表激活函數,選用的激活函數常常是Sigmoid函數,得到的激活函數值在0到1之間,激活函數要求是光滑函數且求導得到的值不易消失,Sigmoid函數是

img

其中,參數θ是正數,參數θ的值常常是1。另一種常用的激活函數是Tanh激活函數:

img

其中,參數θ是正數,參數θ的值常常是1。還有一種常用的激活函數,其是ReLU(Rectified Linear Unit)激活函數:

img

其中,參數θ是正數,參數θ的值常常是1。類似地,其他神經元參數之間的函數關系是

img

最后,輸出層和隱藏層輸出之間的函數關系是

img

其中,φ是將隱藏層輸出映射到神經網絡目標輸出的函數。例如,在分類問題中,φ根據輸入數據給出相應的分類結果,常用的分類函數是Softmax函數。圖3.2給出了只有一個輸出層神經元的簡化情況,深度神經網絡的輸出層中會有很多個神經元,這些神經元根據隱藏層輸出常用Softmax函數解決分類問題。Softmax函數的具體形式如下,N代表類別總數,φi代表輸入樣本屬于類別i的概率:

img

其中,參數θ是正數,參數θ的值常常是1;N是輸出層中神經元的個數,對應的是分類問題中最終分類的類別總數;w是輸出層神經元在分類中的權重值;xk是神經網絡輸出層中第k個神經元收到的來自隱藏層的輸入,在圖3.2中對應的是img。本節介紹了神經網絡模型中的參數——權重和偏差,以及神經網絡模型中參數之間的聯系——激活函數,接下來介紹神經網絡模型中參數的估計方法。

3.1.3 網絡反向傳播算法

在圖3.2所示的簡化的神經網絡模型中,權重和偏差決定了輸入數據在整個神經網絡模型中的傳播過程,求解權重和偏差即可確定整個神經網絡模型中輸入數據的傳播過程。輸入數據在神經網絡模型中傳播,得到的輸出是img,深度神經網絡模型是有監督學習模型,輸入數據是有標注的數據,數據標簽是y,模型根據輸入數據得到的輸出img和實際數據標簽y之間的距離是損失函數(Loss Function)。通過最小化損失函數可以計算出模型中的權重和偏差參數。深度神經網絡有很多層,對應很多權重和偏差參數,因此估計這些參數依賴于大量的有標注數據,而獲取數據標注是有成本的。

常用的損失函數有L2損失函數:

img

其代表了模型輸出和實際標注之間的平方距離。常用的損失函數還有L1損失函數:

img

其代表了模型輸出和實際標注之間的絕對值距離。常常和Softmax輸出層函數配合使用的是交叉熵損失函數(Cross Entropy Loss Function),交叉熵損失函數的常用形式如下:

img

其中,N代表分類問題中所有類別的總數,M代表輸入數據的樣本數,img代表真實分布,即第j個輸入樣本屬于第i個類別的真實概率,是根據數據標簽計算得到的各類別上的真實概率分布:

img

這里的img取值為0或者1,img取值為1代表第j個輸入樣本屬于第i個類別,img取值為0代表第j個輸入樣本不屬于第i個類別。

此外,img代表預測概率分布,即神經網絡模型計算得到的第j個輸入樣本屬于第i個類別的預測概率,是根據模型輸出計算得到的各類別上的預測概率分布:

img

其中,img代表第j個輸入樣本對應的第i個輸出神經元收到的來自隱藏層的輸入。在實際應用中也可以設計新的損失函數來滿足神經網絡模型訓練的需求。當損失函數光滑可導時,最小化損失函數可通過梯度下降法實現;當損失函數不可導時,最小化損失函數可以采用遺傳演化算法。

在深度神經網絡模型中,最小化損失函數常常通過梯度下降法來實現。需要將損失函數對神經網絡模型中所有的參數求導數,這些參數之間存在函數關系,根據求導的鏈式法則,可以依次計算出損失函數對最后一層參數的導數、對倒數第二層參數的導數,一直到對輸入層參數的導數。

圖3.3所示的是簡化的神經網絡模型中誤差反向傳播的示意圖。從損失函數對最后一層的參數求導開始,通過求導的鏈式法則,計算鏈式法則中的所有導數值,從而計算出損失函數對輸入層參數的導數。例如,對于L2損失函數:

img

對于權重參數的導數:

img

對于更早一些層的權重參數的導數:

img
img

圖3.3 神經網絡模型中誤差反向傳播示意圖

可見,離輸出層越遠的層,導數中相乘的項就越多,神經網絡模型中的隱藏層的數目越多,導數中相乘的項也越多,越容易出現很多較小的項相乘導致梯度接近于零,或者很多較大的項相乘導致梯度爆炸,然而隱藏層的數目越多越有利于模型精度的提升。因此,神經網絡模型的改進思路常常在于提升鏈式法則中導數的穩定性。類似地,損失函數對于偏差參數的導數是

img

于是可以求出損失函數對神經網絡模型中所有參數的導數,進而使用隨機梯度下降法,求解最小化損失函數時所有參數的值。

3.1.4 學習率、批尺寸、動量和權值衰減

下面介紹深度神經網絡訓練過程中重要的超參數定義,包括學習率(Learning Rate)、批尺寸(Batch Size)、動量(Momentum)、權值衰減(Weight Decay)。在計算損失函數對參數的導數之后,通過迭代對參數進行更新,例如,權重參數img的更新如下:

img

其中,η是學習率參數,學習率參數的設置在深度神經網絡模型的訓練中很重要。學習率參數較大時,訓練較快,但是訓練不穩定;學習率參數較小時,訓練較慢,但是訓練很穩定。一般情況下,隨著訓練的進行,學習率相應地逐漸減小。Leslie Smith于2017年在論文“Cyclical Learning Rates for Training Neural Networks”[5]中提出了學習率的周期性設置方法(Cyclical Learning Rate)。在訓練過程中,學習率周期性地在上下界之間波動,在初始的幾輪訓練中,學習率線性增加,以此來確定學習率波動的上下界。

深度神經網絡使用隨機梯度下降法進行優化求解,估計梯度值img時使用一個批次中的m個訓練數據來計算梯度平均值img。這里的m就是批尺寸參數,例如,權重參數img的更新變為如下形式[4]

img

此處使用批次中的訓練數據估計損失函數對權重參數的導數值,批尺寸越大,估計的導數值越準確和穩定,批尺寸的大小受到有標注數據量和算力的限制。

在訓練過程中,損失函數對參數導數的估計值不僅由當前批次的訓練數據決定,還受到之前批次訓練數據的影響。動量參數的引入考慮了之前批次訓練數據對當前導數估計值的影響,例如,權重參數img的更新變為如下形式[4]

img

其中μ是動量參數,img是這個批次之前所有批次參數更新時損失函數對權重參數的梯度累積值,img是當前更新后的梯度值,這個梯度值和權重值相加,得到更新后的權重值。

常用的損失函數還有帶正則項的損失函數,即前面的損失函數img加上懲罰項,懲罰項是對神經網絡模型復雜度的懲罰,例子中懲罰項是權重的L2函數[4]

img

使用這個帶有懲罰項的損失函數來進行參數更新時,例如,權重參數img的更新變為如下形式[4]

img

其中,img是權值衰減參數。

Leslie Smith于2018年在論文“A Disciplined Approach to Neural Network Hyper-Parameters: Part 1--Learning Rate, Batch Size, Momentum, and Weight Decay”[6]中給出了對深度神經網絡的超參數學習率、批尺寸、動量、權值衰減的設置方法,訓練深度神經網絡模型時常常需要實時觀察訓練集誤差和驗證集誤差,以判斷模型是否處于欠擬合或者過擬合狀態。適當增加學習率或者動量參數可以加速模型的訓練,權值衰減是學習率和正則項系數的函數,這些超參數的最優值之間是相互關聯的,超參數的最優值往往是同時確定的。論文中給出了如下經驗:

(1)超參數的設置和具體的神經網絡結構有關。例如,對于三層的神經網絡模型,0.01的學習率已經很大了,但是對于ResNet來說,3.0的學習率才算大。一般可以使用學習率區間測試(Learning Rate Range Test)來確定最大的學習率參數,最小的學習率是最大學習率的十分之一,學習率可以在最大值和最小值之間波動。為了訓練的穩定,學習率增大的速率不宜太快。

(2)批尺寸的大小受GPU內存空間的限制。如果訓練中使用了多個GPU,那么總的批尺寸是單個GPU上的批尺寸乘以GPU的個數。小的批尺寸等價于大的正則項,有利于提高模型的泛化能力,大的批尺寸和大的學習率常常搭配使用。

(3)動量參數也可以用類似的周期性方法來設置。訓練過程中讓動量參數在最大值和最小值之間周期性波動,動量參數常常取值為0.99、0.97、0.95、0.9、0.85、0.8。

(4)權值衰減需要通過網格搜索法來確定。權值衰減的具體取值范圍和訓練數據集的大小、深度神經網絡結構的復雜程度有關,訓練數據集越小、模型參數越多,權值衰減程度越大。

3.1.5 神經網絡模型的正則化

深度神經網絡模型中有許多提高模型泛化能力的方法,Ian Goodfellow等作者于2016年在書籍Deep Learning[5]中講述了許多提高深度神經網絡模型泛化能力的方法,并將這些方法統稱為正則化(Regularization)方法。前面提到過,元學習方法MAML的主要目的之一是提高深度神經網絡模型的泛化能力,可以認為提高深度神經網絡模型泛化能力的方法都是正則化方法,也可以認為所有正則化方法都可以實現元學習的目的,即提高深度模型的泛化能力。Deep Learning一書中介紹的這些正則化方法包括:

(1)在最小化損失函數的過程中,對權重參數加上約束條件(Constrained Optimization),可以限制非零權重參數的大小和個數,這等價于求解帶有懲罰項的損失函數最小化問題,懲罰項可以是權重的L1函數、L2函數或者其他常用懲罰項函數。

(2)數據增強(Dataset Augmentation)通過對觀測數據進行已知的變換,例如,圖像扭曲(Distortion)、加入隨機偏差、變形、變色、鏡像變換、隨機轉換背景內容等,將變換后的圖片用來訓練模型,提高模型的泛化能力。

(3)多任務學習(Multi-Task Learning)類似元學習方法,將多個任務進行訓練,發現任務之間的共性,用于模型的泛化。

(4)訓練早停(Early Stopping)需要觀察神經網絡訓練過程中驗證集精度的變化。在一般情況下,隨著訓練迭代次數變多,驗證集精度會先下降后上升,驗證集精度最小的位置就是最優的模型停止訓練的位置。早停可以避免深度模型過擬合,早停得到的結果與第一種帶有權重參數正則項的損失函數優化方法是等價的。

(5)將稠密的參數轉換成稀疏表達(Sparse Representation),參數稀疏的模型常常具有更好的泛化能力。

(6)集成算法(Bagging)通過對訓練數據進行重新有放回抽樣(Resampling),然后重新訓練機器學習模型。通過在多個抽樣數據集上訓練一個精度不高的弱學習器,對結果進行組合,可形成一個精度很高且不會過擬合的強學習器。

(7)隨機失活(Dropout)隨機地刪除深度神經網絡模型中的一些神經元以及連接它們的權重參數,將權重參數的值強制設為0。在神經網絡模型逐層的信息傳遞過程中引入隨機性,可以減少模型中參數的數目,降低模型過擬合的風險。

(8)在對抗樣本(Adversarial Example)上訓練神經網絡模型。對抗樣本是對訓練數據進行小擾動之后生成的樣本,深度神經網絡模型在對抗樣本上的誤差急劇增加,在對抗樣本上訓練深度神經網絡模型,有利于提高深度神經網絡模型的泛化能力。

(9)切線傳播(Tangent Propagation)使輸入數據沿著變換的切線方向進行變換,保證模型對于輸入數據的變換具有不變性。

(10)批歸一化也是神經網絡模型的正則項,批歸一化的使用會抵消隨機失活的效果,因此兩者常常不同時使用。

下面主要介紹批歸一化和隨機失活這兩種為深度神經網絡模型提供正則項的方法,它們在深度學習的編程框架中被廣泛使用,影響深遠。

3.1.6 批歸一化

Sergey Ioffe和Christian Szegedy于2015年在論文“Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”[8]中提出,在神經網絡訓練過程中,層與層之間會產生內部協變量偏移(Internal Covariate Shift),導致神經網絡的梯度爆炸或者消失。為了解決這個問題,文中提出了批歸一化方法,將神經網絡模型每一層輸入值的均值和方差進行標準化和歸一化,這個切實可行且簡單的操作可以有效地提高神經網絡模型訓練過程中導數的穩定性,允許使用更大的學習率參數,以使訓練深度神經網絡模型變得更加容易。

批歸一化方法在深度神經網絡模型中得到了廣泛的應用,關于批歸一化方法有許多討論,典型的案例有如下兩篇論文。

(1)Li Xiang等作者于2019年在論文“Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift”[9]中指出,批歸一化的效果和隨機失活的效果是相互抵消的,兩者同時使用時會帶來更差的模型表現。在神經網絡模型從訓練到測試的過程中,隨機失活會導致神經元激活值的方差發生變化,但是批歸一化會保持神經元激活值的方差不變,而且方差是訓練過程中累積更新得到的。由于在神經元激活值方差上的不同作用效果,在批歸一化之前使用隨機失活會導致訓練過程中出現數值不穩定,進而導致更多錯誤的預測值。

(2)Shibani Santurkar等作者于2018年在論文“How Does Batch Normalization Help Optimization”[10]中指出,批歸一化的改進效果并不是來自解決了內部協變量偏移,而是改進了優化問題的求解,使得尋優過程中的尋優表面更加光滑,進而導致梯度的估計值更加穩定且更容易預測,從而帶來了更快更穩定的訓練過程。

上一層神經元的激活函數到下一層神經元的激活函數之間需要經過三個步驟。第一步通過權重將上一層神經元的激活值進行線性組合;第二步是對這個線性組合進行非線性變換,即非線性的激活函數,前面提到過,常用的非線性激活函數有Sigmoid、Tanh和ReLU函數;第三步是將非線性變換后的值作為神經元的激活值,例如,具體步驟如下面的公式所示:

img

批歸一化發生在第二步,即線性組合之后、非線性激活函數之前,在每一個批次的訓練數據上,對線性組合進行標準化和歸一化。非線性激活函數的導數只在特定的范圍內取值較大,在這個范圍之外,導數較小。如果很多較小的導數相乘,就會導致訓練時誤差反向傳播中梯度消失,因此批歸一化將上一層激活值的線性組合進行歸一化和標準化之后,正好處于激活函數導數值較大的區間內,這樣梯度就不易消失了。

在批歸一化中,在每一個批次B中,有m個輸入數據,計算每一層輸入的均值和方差[8]

img

每一層的輸入img需要進行標準化和歸一化[8]

img

為了保持神經網絡模型的表示力,需要在通過神經網絡模型形成輸出達成結論時將歸一化后的輸入轉變回與歸一化前可比的結果[8]

img

其中,γ是尺度(Scale)參數,β是位置(Shift)參數。在每個批次的訓練數據中,都計算輸入數據的均值和方差。一種常見的設置尺度和位置參數的方法是,計算所有批次的輸入數據均值的平均值作為位置參數,計算所有批次的輸入數據方差的平均值作為尺度參數。

2015年提出的批歸一化又發展出許多變體:

(1)2016年的層歸一化(Layer Normalization)[11]對所有批次上的輸入數據進行了歸一化處理,相對于批歸一化而言,其在不同維度上進行了歸一化處理。

(2)2016年的權重歸一化(Weight Normalization)[12]對權重參數進行歸一化處理。

(3)2016年的實例歸一化(Instance Normalization)[13]僅對單個訓練數據集的輸入進行歸一化處理,在圖片風格傳遞上可以提高圖片生成網絡的效果。

(4)遞歸神經網絡的批歸一化(Recurrent Batch Normalization)[14]將歸一化應用到包含遞歸自連接神經元的長短期記憶網絡,在輸入層到隱藏層之間,以及隱藏層之間都使用了批歸一化,帶來了LSTM更快收斂和更好泛化能力的效果。

(5)余弦距離歸一化(Cosine Normalization)[15]考慮了用余弦距離替代點乘的距離,余弦距離下的歸一化將每一層的輸入變換到更狹窄的區間,帶來了神經網絡訓練過程更加穩定的效果。

(6)互換式歸一化(Switchable Normalization)[16]考慮讓神經網絡模型學會自行歸一化。對于深度模型不同層自動采用合適的歸一化方法,互換式歸一化供選擇的歸一化方法包括批歸一化、層歸一化等。

(7)組歸一化(Group Normalization)[17]解決了批歸一化的結果對批尺寸的變化非常敏感的問題。隨著批尺寸的減小,批歸一化的結果急劇變差,組歸一化考慮對不同批次的訓練數據進行分組,在每個組內進行標準化和歸一化。

3.1.7 隨機失活

Nitish Srivastava等作者于2014年在論文“Dropout: A Simple Way to Prevent Neural Networks from Overfitting”[18]中提出,可使用隨機失活方法來解決深度神經網絡模型中的過擬合問題。隨機失活方法在深度神經網絡模型中隨機地刪除一些神經元以及這些神經元的所有連接,在每一層設定不同的失活概率(Dropout Probability),每層內的神經元有失活概率這么大的可能性會失活。神經元刪除與否的決定服從伯努利分布(Bernoulli Distribution),由于隨機性,隨機失活生成了很多不同的變稀疏之后的神經網絡模型,使用這些稀疏的神經網絡模型進行集成學習(Ensemble Learning),降低了過擬合的可能性。失活概率越大,過擬合可能性的降低程度越大,對深度神經網絡模型的正則化作用越大。隨機失活會增加模型訓練的時間,在一般情況下,加入隨機失活來訓練同樣的模型需要2~3倍的訓練時間。

批歸一化并不會和隨機失活方法同時使用,原因有如下幾個。

(1)隨機失活具有隨機性,如與批歸一化同時使用,會提高誤差反向傳播公式推導的難度。此時每一層輸入的上一層激活值具有隨機性,因此求出的輸入值均值和輸入值方差都具有隨機性。

(2)隨機失活在深度神經網絡中隨機刪除神經元,改變了網絡結構,此時批歸一化計算每層輸入的均值和方差不穩定。每層中對均值和方差影響較大的神經元可能隨機被刪除了,導致均值和方差發生較大改變。

(3)隨機失活單獨使用時已經達到了很好的效果,批歸一化方法單獨使用時也已經達到了很好的效果,沒有必要將二者同時使用,二者同時使用的效果不會更好。

Li Wan等作者于2013年在論文“Regularization of Neural Networks Using DropConnect”[19]中提出了權重隨機失活方法(DropConnect)。DropConnect也可用來解決深度神經網絡模型中的過擬合問題,但與隨機失活方法不同的是,DropConnect隨機地刪除一些神經元之間的連接,而不是隨機地刪除一些神經元。在Dropout中,每層的一些激活值被設置成0;在DropConnect中,每層之間的一些權重值被設置成0。加入DropConnect后的模型訓練時間比加入Dropout后的模型訓練時間更長,但是加入DropConnect后的模型測試集誤差比加入Dropout后的模型測試集誤差低,可以在DropConnect之前使用實例歸一化來對每個輸入的初始訓練數據進行歸一化處理。

主站蜘蛛池模板: 兴安县| 杭锦旗| 武鸣县| 壤塘县| 苗栗县| 泰宁县| 张掖市| 汉寿县| 阿拉善盟| 若尔盖县| 平利县| 望城县| 高尔夫| 磐石市| 英德市| 仙游县| 波密县| 漾濞| 雷波县| 旅游| 巴林右旗| 炉霍县| 高青县| 麻阳| 常熟市| 成安县| 岳西县| 息烽县| 界首市| 兴山县| 拜城县| 宁波市| 定兴县| 忻城县| 安图县| 柞水县| 乐平市| 宁国市| 承德县| 治多县| 嘉定区|