吳恩達Deep Learning學習筆記——第二課 改善深層神經(jīng)網(wǎng)絡

目錄鏈接:吳恩達Deep Learning學習筆記目錄

?1.deep learning 實用層面
?2.優(yōu)化算法
?3.超參數(shù)調(diào)整
?4.多分類問題

1. deep learning實用層面

? 1.1 Bias and Variance

??為了加速模型的構(gòu)建,提高模型性能,在訓練模型時,一般將數(shù)據(jù)data劃分為訓練集、驗證集、和測試集,訓練集用于訓練模型內(nèi)的參數(shù),如W,b;但還有許多超參數(shù)(learning rate、網(wǎng)絡結(jié)構(gòu)參數(shù),激活函數(shù)選擇,正則化參數(shù)等)是人為設定的,需要通過驗證集來對這些超參數(shù)進行優(yōu)化,測試集用于評估模型的泛化能力。
??對于training、validation、test的劃分比例,在小量數(shù)據(jù)集上(如10000),可能是6:2:2的比例,但在大規(guī)模的數(shù)據(jù)集下(如1 million),如果按照這個比例來劃分,validation、test的數(shù)量太大,對于訓練數(shù)據(jù)資源來說是一種浪費,可能我們的劃分比例會是95:4:1,劃分數(shù)據(jù)集時,各數(shù)據(jù)集應該是同分布的。
??什么是偏差(Bias)和方差(Variance)呢?假設數(shù)據(jù)集如下圖所示,a)通過邏輯回歸擬合得到一條直線將兩類數(shù)據(jù)分開,將有許多數(shù)據(jù)被分類錯誤,這時候稱為欠擬合(outfitting),對應高偏差,如果夸張一些,模型預測出的結(jié)果可能和瞎猜差不多(50%概率),模型并沒有進行充分的訓練,所學習到的信息有限;b)則是一種較為合適的分類結(jié)果(假設數(shù)據(jù)分類即是如此),僅有少量的誤差;c)當擬合曲線極其曲折時,雖然它將所有訓練數(shù)據(jù)都分類正確,(假設數(shù)據(jù)真實分布按照b劃分),但用新的數(shù)據(jù)去進行預測的時候,很可能得到錯誤的結(jié)果(如圖中綠x),此時成為過擬合(overfitting),對應高偏差;d)采用曲線函數(shù)或更高次的函數(shù),可能會出現(xiàn)這種情況,它處于欠擬合狀態(tài),但其又將圖中兩個數(shù)據(jù)擬合正確,將會使得模型的偏差和方差都很高。


??對于只有兩個特征的數(shù)據(jù)集我們可以用可視化的方法來展現(xiàn)數(shù)據(jù)的擬合情況,但對于高維的數(shù)據(jù),我們無法可視化。此時采用訓練誤差和驗證集誤差來進行判別BiasVariance。如下圖所示,對于貓和狗的兩類圖片,我們認為人眼去識別時,識別錯誤率為0%(最優(yōu)誤差)。①當模型training識別誤差為1%、validation識別誤差為11%時,模型過擬合,高方差;②模型training識別誤差為15%、validation識別誤差為16%時,模型欠擬合,高偏差;③模型training識別誤差為15%、validation識別誤差為30%時,模型不僅高偏差,還高方差;④模型training識別誤差為0.5%、validation識別誤差為1%時,模型低偏差、低方差,擬合適度。所以,在此,是基于最優(yōu)誤差較小、training和validation同分布的情況下,采用trainin誤差與最優(yōu)誤差之間的差別用于判斷是否高偏差,而validation誤差與最優(yōu)誤差間的差別用于判斷是否高方差。
??但是當我們無法獲取最優(yōu)誤差或者獲得的最優(yōu)誤差較高時,如圖片模糊,人眼也無法識別(無法對數(shù)據(jù)進行標注?),如何判斷數(shù)據(jù)擬合情況?

? 1.2 Basic recipe for machine learing

如何優(yōu)化模型?
? ? ①通過一個baseline訓練結(jié)束后,獲取到training error,如果偏差過高甚至無法擬合training,解決的方法一般為增加NN的規(guī)模(有作用,一般而言,只要模型足夠復雜,通常可以很好的擬合training)、花費更多的時間來訓練模型(不一定有用)、或者選擇其他NN(不一定有用);
? ?②當偏差降低到可以接收的范圍,獲取validation error,當方差過高時,一般選擇增加訓練數(shù)據(jù)量(比較難,數(shù)據(jù)獲取不易)、采用正則化項(regularization)、修改模型
? ?③重復①②直到找到一個低偏差、低方差的模型。
? ?balance bias and variance:在機器學習的早期階段,基本沒有什么方法,可以在影響方差時而不影響偏差,影響偏差時而不影響方差,而在deep learning中,人們不太考慮偏差、方差平衡問題,因為增加數(shù)據(jù)規(guī)模、增加模型復雜度,在適當?shù)恼齽t下通常可以構(gòu)建一個較好的模型,增加數(shù)據(jù)規(guī)模,可以在減小方差的同時,對偏差影響較小。

? 1.3 Regularization

??Logistics Regression:
??L2正則:

??L1正則:

? ?如果采用L1正則,W最終將會是稀疏的。λ為正則化參數(shù),通常設置為較小的數(shù)值,以避免過擬合。
??Neural network:
n[l]表示第l層隱藏層的單元數(shù),這個范數(shù)矩陣為Frobenius范數(shù),權(quán)重參數(shù)更新,等式右邊第一項中dw代表后向傳播中計算得到的W的導數(shù):
F范數(shù)是矩陣中各個元素絕對值平方的總和,范數(shù)作用參見關(guān)于范的知識整理。

? 1.4 Why regularization reduces overfitting

? ① 當λ設置到足夠大時,W將會被”壓縮“到足夠小,使得某些權(quán)值w約等于0,使得某些單元的影響減小,理解為簡化了網(wǎng)絡結(jié)構(gòu)(實際上隱藏單元還在),從而減小方差;
? ②當λ設置太小時,正則項將不起作用,所以λ需要設置一個合適的值。



? 此外,另一種理解方式是,當λ設置到足夠大時,W很小,對于激活函數(shù)而言,Z將被限制到0附近,在這個區(qū)域內(nèi),激活函數(shù)近似于線性,激活函數(shù)就失去了其本該有的性質(zhì),神經(jīng)網(wǎng)絡退變接近logistics回歸,從而欠擬合。

? 1.5 Dropout regularization

? ?Dropout策略會在每一隱藏層設置單元被保留和丟棄的概率,然后消除到這些節(jié)點的連線,最后得到一個簡化后的神經(jīng)網(wǎng)絡,對于每個樣本,都采用同一個簡化后神經(jīng)網(wǎng)絡來訓練。


? ?Dropout方法:Incerted dropout(反向隨機失活)
? ?假設要消除layer=3的隱藏層20%的神經(jīng)元,設置keep_prob=0.8,即保留80%神經(jīng)元,通過np.random.rand()函數(shù)生成一個[0,1)的隨機均勻分布,通過下述第一行代碼將會得到一個shape與a3.shape相同向量,向量值均為True或False,True的占比為80%,通過第二行代碼即將第三層的輸出值消除20%,第三行代碼用于補償被拋棄的20%,維持a3的期望值,當a3輸入到下一層時,相當于layer=3層被消除20%神經(jīng)元。在測試數(shù)據(jù)時不進行dropout(否則會導致預測結(jié)果變得隨機,或需要多次預測,增加了計算量),所有神經(jīng)元都會被啟用。

d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob
a3 = np.multiply(a3, d3)
a3 /= keep_prob

? ?dropout能夠提升模型性能的原因是:
? ?①在訓練過程中,每次被隨機消除的神經(jīng)元,其權(quán)重不進行更新但保存,可以理解為通過訓練不同的子網(wǎng)絡來對結(jié)果進行投票(隨機森林?),提升網(wǎng)絡的泛化能力;
? ?②由于每次訓練被消除的神經(jīng)元是隨機的,最后的輸出結(jié)果將對各個神經(jīng)元依賴程度減小,將權(quán)重分配到各神經(jīng)元較為”均勻“(雞蛋不要放在一個籃子里),起到類似于L2正則的效果。
? ?其缺點是,①增加了超參數(shù)的搜索量(每一層的keep_prob都不同),②明確定義的代價函數(shù)每次迭代都是下降的,添加dropout后代價函數(shù)不能再被明確定義,因為每次訓練的網(wǎng)絡都是隨機的,每次代價函數(shù)都不一樣,代價函數(shù)很難被計算出來。所以,計算代價函數(shù)時需要關(guān)閉dropout,然后再打開dropout,以確保代價函數(shù)單調(diào)遞減。

? 1.6 Other regularization methods

? ?①數(shù)據(jù)增強(data argumentation):對于圖片,可以進行水平翻轉(zhuǎn),隨機翻轉(zhuǎn)后裁剪;對于字符識別,可以通過隨機扭曲、翻轉(zhuǎn)、變形等;
? ?②early_stopping:繪制迭代次數(shù)與(training error、validation error)間關(guān)系圖,對于validation error一開始是下降的,到某次迭代后開始上升,early_stopping就是在這個epoch停止迭代訓練(如early_stopping=100,如發(fā)現(xiàn)本次loss相比上一次未降低,則再迭代100次后停止)。一般而言,代價函數(shù)、w、b參數(shù)是通過訓練(SGD、Adam等)來優(yōu)化,而過擬合問題又是通過超參數(shù)搜索(正則化、數(shù)據(jù)增強等)來解決,再進行正交,而early_stopping在同時優(yōu)化loss和降低方差兩個問題,所以其缺點是,可能會導致停止優(yōu)化loss后,loss的值沒有達到期望范圍內(nèi),而同時又不希望過擬合。

? 1.7 Normalizing

??當特征尺度相差過大時,量級較大的特征在訓練過程中可能對于參數(shù)的影響較大,從而影響預測結(jié)果,標準化可以消除尺度上的差異,使各特征對于參數(shù)的影響相近;Normalizeing還可以避免數(shù)值問題,加速網(wǎng)絡收斂,分析參見神經(jīng)網(wǎng)絡為什么要歸一化。
??z-score 標準化:x = (x-μ) / σ,第一步均值化,第二步方差歸一化,測試集歸一化時所使用得μ和σ應與訓練集相同,而不是在兩個集合上分別計算μ和σ。

? 1.8 Vanishing/exploding gradients

??如下圖,為一個深層神經(jīng)網(wǎng)絡,假設激活函數(shù)為g(z)=z,假設每一層W>1,此時預測結(jié)果呈指數(shù)級增長,而W<1時,預測結(jié)果呈指數(shù)級遞減,同理W的梯度也呈現(xiàn)相同的趨勢,導致梯度變得極大或極小,這被稱為梯度消失(彌散)和梯度爆炸,導致網(wǎng)絡難以收斂。參見梯度消失和梯度爆炸原因及其解決方案。

? 1.9 Weight initialization

??既然神經(jīng)網(wǎng)絡容易出現(xiàn)梯度消失和梯度爆炸問題,那么權(quán)重W的初始化顯得較為重要,否則可能導致無法收斂。為避免這個兩個問題,Xavier Glorot在論文中指出兩個經(jīng)驗性的準則:①每一層神經(jīng)元的激活值的均值要保持為0;②每一層激活值得方差保持不變(反向傳播,梯度值方差保持不變),則(激活函數(shù)為tanh)權(quán)值Wl要滿足:


??在實現(xiàn)W初始化時僅僅需要:np.random.randn(shape)*np.sqrt(1/n[l-1]),randn()函數(shù)生成的隨機數(shù)服從μ=0,σ2=1的正態(tài)分布,乘以√(1/n[l-1])后即服從上述公式分布。推導及其他初始化方法見權(quán)值初始化 - Xavier和MSRA方法。

? 1.10 Gradients checking

??(1)梯度的數(shù)值逼近

??(2)梯度檢驗

??先將所有W和b轉(zhuǎn)化為一個大的向量θ=[w1,w2,...,b1,b2,....],再做梯度近似計算:
??注意:①不要用來訓練時計算梯度,調(diào)試的時候,僅用于檢驗反向傳播梯度計算是否正確,因為計算量太大;②如果代價函數(shù)有正則項,梯度檢驗也應包括正則項;③不要同時與dropout使用;④一種極端情況,w、b初始化在0附近,此時后向傳播計算正確,但w、b變大后,后向傳播計算可能開始變得不準確,此時,需要在w初始化過程中執(zhí)行梯度檢驗,在反復訓練網(wǎng)絡后再進行梯度檢驗。

2. 優(yōu)化算法

?2.1 Mini-batch 梯度下降法

??機器學習是一個極其依賴經(jīng)驗的過程,需要多次的迭代,訓練多個模型才能找到合適的那一個。Deep leraning雖然可以用大量級數(shù)據(jù)來訓練,但其訓練速度很慢,優(yōu)化后的快速算法能夠大大提高效率。

??向量化能夠有效的同時對所有m的樣本進行計算,假設m=500 million,那么在執(zhí)行梯度下降法時,需要處理整個數(shù)據(jù)集后才能進行一步梯度下降,然后重復,這將是一個緩慢的過程。在梯度下降前先處理一部分數(shù)據(jù),能夠加速模型的訓練。
???如上圖,假設有5,000,000個樣本,每個mini-batch 1000個樣本(batch size),則有5000個mini-batch(即5000個樣本子集),然后執(zhí)行以下算法(偽):
for  t in range(5000):
      forword propagate on X{t} #X{t}指第t個mini-batch,此時同時處理1000個樣本
      compute cost J{t}
      backword propagate
      update gradients

??執(zhí)行上面代碼一次,被稱為1 epoch,意味著只遍歷了一次訓練集(即只訓練了一次)。如果將Batch法(即全部樣本作為一批)和mini-batch法的loss繪制圖如下,會發(fā)現(xiàn)Batch的loss曲線單調(diào)下降,但mini-batch的loss曲線有噪音,這是由于每個mini-batch中數(shù)據(jù)不同,所以計算出的loss會有波動。

??①當batch_size = m 時,即為Batch gradient,梯度下降時較為平滑,其缺點是每個epoch的時間過長;

??②當batch_size = 1 時,即為SGD,梯度下降時較為曲折,其缺點是失去了向量化帶來計算加速。

?2.2 指數(shù)加權(quán)移動平均(EWMA)

??(1)指數(shù)加權(quán)移動平均(EWMA)

??β=0.9時為紅線,β=0.98時為綠線,β=0.5時為黃線:
??①Vt為t時刻的EWMA值,θt為t時刻的溫度值,β是(0,1)之間的權(quán)重參數(shù);
??②當V0=0時,將公式展開后得到
可以看出隨時刻往前移動,該時刻的溫度值所占的權(quán)重呈指數(shù)級衰減,也就是說越往前,前面溫度對于當前值的預測影響越小,這個式子可以看作是t前各時刻溫度與對應指數(shù)衰減函數(shù)(1-β)βt-1相乘得到;
??③為什么說EWMA是平均了當前時刻前N=1/(1-β)天?這是因為
明顯,0.35 * (1-β)的權(quán)重我們覺得它已經(jīng)足夠小,其再往前的數(shù)據(jù)我們不再考慮,將其忽略;
??④既然EWMA近似于近10天數(shù)據(jù),為何不直接計算近10天的均值呢?首先,直接計算近10天均值,則近10天的數(shù)據(jù)對當前的影響相同,EWMA則是距離當前時刻越近,則影響越大;其次,EWMA在實現(xiàn)過程中只每次迭代只需要存儲Vt,而直接計算近10天均值要存儲近10次迭代的梯度值
??(2)EWMA的偏差修正

??實際上,圖中綠色的線是經(jīng)過偏差修正過后的EWMA,未修正的EWMA為紫色曲線,可以看出在時刻前期,未修正的EWMA值偏低,而在時刻后期一致,這是如何造成的呢?
??當V0=0時,θ1=40,通過加權(quán)公式得到V1=0.98 * 0+0.02 * 40=8,可以看出其遠比40小,這是由于V0=0造成的,類似冷啟動問題,所以此時需要將其進行偏差修正:
?? 經(jīng)過修正后V1=(0.98 * 0+0.02 * 40)/ 0.02 =40,而當t很大時,βt趨近于0,公式變?yōu)樵瓉淼墓?,所以偏差修正后的公式主要修正了前期的EWMA值。參見指數(shù)加權(quán)移動平均、優(yōu)化算法之指數(shù)移動加權(quán)平均

?2.3 Momentum梯度下降法

??如下圖所示,采用梯度下降法時,梯度下降并不是平滑下降的,而是來回擺動,當learning_rate過大時,這個擺動的幅度會更大,但learning_rate過下則會導致梯度下降變得很慢,所以我們希望此時在縱軸上學習變慢,減小擺動,但在橫軸上獲得加速,得到類似低learning_rate下降軌跡,但其下降的速度大于低learning_rate時的梯度下降,采用Momentum能夠獲得期望的效果:
for t in range(num_mini_batch):
        compute dW,db # all samples in mini_batch
        Vdw = β Vdw + (1 - β) dW
        Vdb = β Vdb + (1 -β) db

        W = W - α Vdw
        b = b - α Vdb
""" 
注:此時以t做為時刻,即計算t時刻的梯度的EWMA值,而不是計算前幾層dw來計算當前層dw的EWMA值。
t:0-t,則dW:dW0,dW1,...,dWt,計算前幾次迭代的梯度的EWMA代替梯度來更新W
"""

??在平均過程中,縱軸上正負數(shù)相互抵消,所以平均數(shù)接近于0,減小了縱軸上的擺動;或者說,如果將梯度分開來看,在下降時,下降的方向分解到橫軸和縱軸,在縱軸上是相反方向,但在橫軸上是相同方向,計算當前迭代次數(shù)時的梯度下降方向時,將前幾次梯度下降乘上了不用同的權(quán)重參與到當前梯度計算,那么,此時的梯度在橫軸上將獲得前幾次梯度的下降累加,縱軸方向上的梯度出現(xiàn)了抵消,從而使得當前梯度擺動減小。
??一般而言β取0.9,就可以達到不錯的效果,而且在實際應用中不對公式進行偏差修正,因為10次迭代后,EWMA已經(jīng)過了初始階段,不再是一個具有偏差的值,而迭代次數(shù)往往大于10。有的文章里,將(1 - β)去掉,得到 Vdw = βVdw + dW,這樣的結(jié)果就是相當于Vdw縮小了(1 - β)倍,其缺點是,如果你調(diào)整了β,那么α也要被調(diào)整。

?2.4 RMSprop (root mean square prop)

??RMSprop能夠起到同Momentum一樣的作用,減小擺動幅度。
for t in range(num_mini_batch):
        compute dW,db # all samples in mini_batch
        Sdw = β Sdw + (1 - β) (dW)^2
        Sdb = β Sdb + (1 -β) (db)^2

        W = W - α dw/(ε+√Sdw)
        b = b - α db/(ε+√Sdb)
"""√:表示開方"""

??RMSprop(綠線)與Momentum(紅線)的區(qū)別是,在計算EWMA值時將dW放大,計算EWMA值得結(jié)果就是,相對而言,在某個維度方向上的梯度dW較大時,說明此時擺動幅度較大,梯度更新時除以一個較大的值可以減緩這一維度梯度下降的幅度;而當某個維度梯度dW較小時,能基本保持其下降幅度,以此來消除擺動。此外,梯度更新時分母上增加ε是為了避免數(shù)值問題(Sdw出現(xiàn)0時)。

?2.5 Adam optimization

??Adam結(jié)合了Momentum和RMSprop

一般而言,β1默認0.9,β20.999,ε默認10-8,可以得到不錯的效果。

?2.6 Learning rate decay

??一種加快訓練的方法就是,在梯度下降初始時,learning_rate大一些,初始時梯度下降很快,在接近最優(yōu)解時learning_rate小一些,避免越過最優(yōu)解,更新后的值僅僅在最優(yōu)解附近小范圍內(nèi)擺動;如果保持learning_rate不變,更新后的值一直在最優(yōu)解附近較大的范圍內(nèi)擺動。

learning_rate衰減:
learning_rate其他衰減方式:

?2.7 The problem of local optima

??在Deep learning早期,人們往往擔心,優(yōu)化算法會陷在極差的局部最優(yōu)解,但隨著研究的深入,人們對局部最優(yōu)解有了新的認識。


在高維空間中(假設20000維),如果直接陷入到一個局部最優(yōu)中去,這個局部所有維度都是凸的,這個概率很小,實際上,我們時常遇到的梯度為0的點是鞍點,即該處每個維度的函數(shù)可能凸、可能凹,這個概率遠比局部最優(yōu)大。而在梯度為0或接近0的區(qū)域,會導致學習速度變慢。
所以,①不太可能陷入局部最優(yōu);②平緩段,學習速度很慢,而Momentum或是RMSprop,Adam這樣的算法能夠加速這一過程。

3. 超參數(shù)調(diào)整

?3.1 Hyperparameters

(1)超參數(shù)搜索策略
??超參數(shù)調(diào)整是Deep learning的難點之一,你需要調(diào)整大量的超參數(shù),如learning_rate、Momentum的β,Adam的β1 β2 ε、網(wǎng)絡層數(shù)、單元數(shù)、learning_rate衰減參數(shù)、batch size等等。但其中一些參數(shù)相對而言會更為重要,比如learning_rate,其次batch size、β、單元數(shù),再次網(wǎng)絡層數(shù)、learning_rate衰減參數(shù)。
??較早的參數(shù)調(diào)整中,使用的搜索方法是網(wǎng)格搜索,當參數(shù)量很少的時,這個方法很實用。但在Deep learning中,一般在參數(shù)范圍內(nèi)取隨機點,這樣做的原因是,你很難確定哪一些超參數(shù)會比其他參數(shù)更重要。如下圖,總的搜索點都是25個,如果采用傳統(tǒng)的網(wǎng)格搜索,那么一個參數(shù)只搜索了5次獨立的值,而在隨機網(wǎng)格搜索中,一個每個參數(shù)維度都搜索了25次獨立的值,而此時計算量并未增加,這樣找到效果最好的值的概率似乎更大一些。

超參數(shù)取值搜索時的另一個有效的方式是,先在大范圍內(nèi)搜索出較優(yōu)的值,再在較優(yōu)值附近范圍取更為密集的點來進行篩選(由粗到細的策略)。

(2)超參數(shù)搜索取值范圍及其標尺
??隨機網(wǎng)格搜索能夠提升超參數(shù)搜索效率,但并不是在有效值范圍內(nèi)取值,而對于超參數(shù)的搜索,其搜索范圍及標尺很重要。例如,對于網(wǎng)絡層數(shù)和單元數(shù),網(wǎng)絡層數(shù)取值范圍較小,且為整數(shù),可能你可以遍歷所有Layers,而單元數(shù)則采用隨機取值的方式。
??但是這種方法對于某些超參數(shù)不適用,如learning_rate,假設你懷疑其最小值是0.0001,最大值為1,然后在這個范圍內(nèi)隨機取值,結(jié)果就是0.1-1之間的數(shù)占了90%,0.0001-0.1之間只有10%的搜索量,這樣是不合理的。如果采用對數(shù)標尺,數(shù)據(jù)跨度為0.0001,0.001,0.01,0.1,1,再進行隨機取值,那么隨機值就會均勻的分布在各個標尺區(qū)間,這樣的數(shù)據(jù)搜索更為合理,數(shù)據(jù)分布更為均勻。
??另一個例子是給β取值,β再越接近0.999時,對細微的變化變得很敏感,所以在接近0.999的區(qū)間內(nèi),需要更為密集的取值。

?3.2 Batch Normalization

(1)歸一化激活函數(shù)輸入值Z
??Batch Normalization能夠使得超參數(shù)搜索變得更加容易,使神經(jīng)網(wǎng)絡對超參數(shù)得選擇更加穩(wěn)定,超參數(shù)得范圍更大,效果更好,也會使得深層網(wǎng)絡得訓練更容易。
??對于單層網(wǎng)絡,進行歸一化X = (X - μ) / σ后,使得各個維度的數(shù)據(jù)量級相近,也就是是”扁平“的數(shù)據(jù)變得”圓潤“,這樣得好處是梯度下降算法表現(xiàn)更好,收斂速度更快。那么問題來了,對于深層網(wǎng)絡,僅僅將輸入數(shù)據(jù)X進行歸一化,那么,經(jīng)過多層傳導后輸出得A是否還是”圓潤“得呢?大概率會不再”圓潤“,那么對每一層輸出A都進行歸一化以加速訓練呢?實際上,在應用中通常是對Z進行歸一化,再輸入給激活函數(shù)(為啥是Z不是A,A不服氣)。

??Z歸一化后,Z的每一個分量均值都為0,方差都為1;為了更好的利用激活函數(shù)的非線性,我們并不想所有z的分布都是均值0方差1,也許不同的分布會有意想不到的效果,所以要對歸一化后的Z進行重構(gòu),重構(gòu)里的參數(shù)是要學習的參數(shù)γ(設置方差)和β(設置均值),在梯度下降中,如同更新權(quán)重一樣更新。其他分析參見批歸一化(Batch Normalization)詳細解釋筆記。

(2)神經(jīng)網(wǎng)絡中擬合Batch Norm
??hidden layer中Z的歸一化參數(shù)學習,類似權(quán)重W,b的學習:

(3)為什么Batch Norm有效
??①輸入X歸一化后變得”圓潤“,加速學習,而hidden layers中Z的Batch Norm也起到了類似的作用;
??②Batch Norm可以使權(quán)重比你的網(wǎng)絡更滯后或更深層,為什么?
????測試集數(shù)據(jù)分布改變,無法準確預測,參見covariate shift現(xiàn)象的解釋
????每一層的Z由于其前面layers的參數(shù)更新,每次輸出的Z的分布是變化的,在經(jīng)過歸一化后,至少其均值和方差保持穩(wěn)定為訓練好后的γ、β,限制了前面layers的參數(shù)更新,減少了輸入值分布改變帶來的問題。
????即使前面的層保持學習,由于Bath Norm使得輸入的值變得更穩(wěn)定(變化較?。?,迫使了后面的層在前面層參數(shù)改變后依然能適應,或者說減弱了后層參數(shù)對前層參數(shù)的依賴,使得每一層都需要自己學習,與其他層相對獨立。
??③正則化作用。在對Z進行Batch Norm時,因為只是在mini-bacth上計算均值和方差,而不是整個數(shù)據(jù)集,所以相當于添加了一些噪音給了每一層的激活函數(shù),迫使后面的單元不過分依賴任何一個hidden unit(類似dropout?)起到了輕微的正則化效果。
(3)測試集中Batch Norm
??由于在進行Batch Norm時,計算均值和方差只是在mini-batch中計算的,在訓練集中,訓練時,單獨計算每個mini-batch是沒有問題的,因為最終參數(shù)會進行更新,參數(shù)是基于各個mini-batch的歸一化數(shù)據(jù)學習到的,綜合考慮了各個mini-batch(并不是整個數(shù)據(jù)集的mini-batch)。所以在預測測試集時,我們既不能單獨計算每個mini-batch的均值和方差,如此每個mini-batch將會是”獨立分布的“數(shù)據(jù)集用于預測;為了保持Batch Norm時的數(shù)據(jù)量與訓練集相同,也不能計算整個測試集的均值和方差。為了將各個mini-batch的均值和方差聯(lián)系起來,采用EWMA來對各個mini-batch的均值和方差進行追蹤。

4. 多分類問題

?4.1 Softmax regression

??emm...閱圖理解。

????softmax層的梯度:

??第二部分的課程筆記到此結(jié)束,筆記中有的是自己的理解也不知道對不對,有的還不是很清楚,之后慢慢修改...
??大佬的優(yōu)化方法解析深度學習中優(yōu)化方法

最后編輯于
?著作權(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)容