吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化
文章目錄
- 第一周:深度學習的實用層面
- 訓練、開發(fā)、測試集
- 偏差、方差
- 機器學習基本步驟
- L2正則化
- Dropout(隨機失活)正則化
- 其它正則化方法
- 正則化輸入
- 神經(jīng)網(wǎng)絡的權重初始化
- 梯度檢驗
- 第二周:優(yōu)化算法
- Mini-Batch梯度下降法
- 指數(shù)加權平均
- 指數(shù)加權平均的偏差修正
- 動量梯度下降法
- RMSprop
- Adam優(yōu)化算法
- 學習率衰減
- 第三周:超參數(shù)調試、Batch正則化、程序框架
- 調試處理
- 為超參數(shù)選擇合適的范圍
- Batch Norm/z的歸一化處理
- Batch Norm作用的原理
- SoftMax回歸
第一周:深度學習的實用層面
訓練、開發(fā)、測試集
應用深度學習是一個典型的迭代過程,因為不可能一開始就確定最優(yōu)的超參數(shù),需要多次循環(huán)往復,才能設計優(yōu)秀的神經(jīng)網(wǎng)絡,因此循環(huán)該過程的效率是決定項目進展速度的一個關鍵因素,而創(chuàng)建高質量的訓練數(shù)據(jù)集,驗證集和測試集也有助于提高循環(huán)效率。如果不需要無偏估計,也可以不設置測試集。
數(shù)據(jù)規(guī)模較小時,開發(fā)和測試集占總數(shù)據(jù)的30%~40%;數(shù)據(jù)量較大時驗證集和測試集占數(shù)據(jù)總量的比例會趨于變得更小。
建議確保驗證集和測試集的數(shù)據(jù)來自同一分布。
偏差、方差
假設已有一個識別貓的分類器。已知人眼識別的錯誤率接近0%
訓練集錯誤率:15% 測試集錯誤率:16% 擬合結果的偏差較大
訓練集錯誤率:5% 測試集錯誤率:20% 擬合結果方差較大
訓練集錯誤率:20% 測試集錯誤率:40% 擬合結果偏差和方差都較大
訓練集錯誤率:0.1% 測試集錯誤率:1% 擬合結果的誤差和方差合理
機器學習基本步驟
L2正則化
解決高方差通常采用增加數(shù)據(jù)量(如果可行)、正則化的方法。
假設采用tanh作為激活函數(shù),當λ很大而w接近0的時候,z的范圍非常接近0,而對于tanh,接近0的部分約等于線性函數(shù),因此將神經(jīng)網(wǎng)絡的各個層向線性靠近,使得多層的神經(jīng)網(wǎng)絡計算結果更簡單(參考前面課程中介紹的,為什么要使用非線性激活函數(shù)),減輕過擬合的情況。
Dropout(隨機失活)正則化
對于神經(jīng)網(wǎng)絡的每個隱層,對每個節(jié)點設定其失活的概率,被設置為失活的節(jié)點其激活后的值設置為0,不參與神經(jīng)網(wǎng)絡的計算。在測試時不使用dropout方法。
假設有一L=3的神經(jīng)網(wǎng)絡,d3是一個布爾類型的矩陣,d3.shape=(第3層節(jié)點數(shù), 樣本數(shù))
在Python的運算中,將d3中的True解析為1,False解析為0,其中每個元素為True或False的概率由輸入 keep-prob決定。
a3 =np.multiply(a3,d3),讓d3中 0 元素與a3中相對元素歸零。
a3 /= keep-prob,以保證a3的期望值不變。
可以為不同層設置不同的keep-prob值,將易發(fā)生過擬合的層keep-prob值設置得更低;也可以將某些不會發(fā)生過擬合的層的keep-prob值設置為1,即不使用dropout阻塞節(jié)點。
使用dropout的一個缺點是,代價函數(shù)J無法明確定義,不便觀察訓練效果。
其它正則化方法
①數(shù)據(jù)擴增:將原輸入的圖片進行對稱、裁剪、旋轉處理,以較小的代價得到更大的數(shù)據(jù)集。
②提前終止訓練:當神經(jīng)網(wǎng)絡在迭代到某時刻時,其表現(xiàn)已滿足要求,提前終止。
early stopping 的主要缺點就是不能獨立地處理這兩個問題,因為提早停止梯度下降,也就是停止了優(yōu)化代價函數(shù)J,因為終止后不再嘗試降低代價函數(shù)J,所以代價函數(shù)J的值可能不夠小,同時又希望不出現(xiàn)過擬合,沒有采取不同的方式來解決這兩個問題,而是用一種方法同時解決兩個問題,這樣做的結果是要考慮的東西變得更復雜。
注意:正則化有損于訓練集的表現(xiàn),因為它會限制網(wǎng)絡過度擬合訓練集的能力,但是它最終會提高測試集的表現(xiàn)。
正則化輸入
神經(jīng)網(wǎng)絡的權重初始化
為了避免深層神經(jīng)網(wǎng)絡中,梯度爆炸和梯度消失的現(xiàn)象,需要對各層節(jié)點的權值進行合理初始化。
梯度檢驗
注意:
①不要在訓練中使用梯度檢驗,它只用于調試。
②如果𝑑𝜃approx[𝑖]與𝑑𝜃[𝑖]的值相差很大,查找不同的𝑖值,找出是哪個導致𝑑𝜃approx[𝑖]與𝑑𝜃[𝑖]的值相差這么多。如果你發(fā)現(xiàn),相對某些層或某層的𝜃或𝑑𝜃的值相差很大,但是dw[𝑙]的各項非常接近,(𝜃的各項與𝑏和𝑤的各項都是一一對應的)這時可能在計算參數(shù)𝑏的導數(shù)𝑑𝑏的過程中存在 bug。反過來也是一樣。
③在實施梯度檢驗時,如果使用正則化,注意包括正則項。
④梯度檢驗不能與 dropout 同時使用。
第二周:優(yōu)化算法
Mini-Batch梯度下降法
將大規(guī)模的輸入集合切分成子集,并進行梯度下降的處理。如:X具有5,000,000樣本數(shù),minibatch_size=1000,則X可劃分為X{1}…X{5000},對每個子集進行向量化的正向傳播、反向傳播、更新參數(shù)。
采用Mini-Batch梯度下降法時,cost值并非隨著迭代次數(shù)單調下降,但整體趨勢是下降的。
MiniBatch_Size的選擇:
①當MiniBatch_Size=1時,每次迭代僅輸入一個樣本,本質上是隨機梯度下降算法。
②當MiniBatch_Size=m時,本質上是Batch梯度下降法。
因此要在1~m的范圍內選擇合適的值,使得每次迭代都能快速進行,且迭代次數(shù)不至于過多。
batch梯度下降法從某處開始,相對噪聲低些,幅度也大一些。
在隨機梯度下降法中,每次迭代只對一個樣本進行梯度下降,大部分時候向著全局最小值靠近。有時候你會遠離最小值,因為那個樣本恰好給你指的方向不對,因此隨機梯度下降法是有很多噪聲的,平均來看,它最終會靠近最小值,不過有時候也會方向錯誤,因為隨機梯度下降法永遠不會收斂,而是會一直在最小值附近波動,但它并不會在達到最小值并停留在此。
指數(shù)加權平均
基本公式
當β較小時,1-β較大,θt的權重較高,能更快適應變化,但受噪聲影響更大。
反之,θt的權重較低,適應變化更慢,但受噪聲影響小,整體趨于穩(wěn)定。
第100天的數(shù)據(jù)是θ[1-100]的權值和,此時β=0.9,θ[90]及其之前的數(shù)據(jù)的權值很小,因此V100約為最近10天的溫度平均情況。
指數(shù)加權平均的偏差修正
按照上述公式,初始時期對溫度的估計會明顯偏小。
如果關心初始時期的偏差,可以在第t天時用Vt/(1-β^t)估計當天的溫度。
隨著t的增加,偏差修正的效果逐漸下降。因此只有在初期的時候偏差修正起作用。
動量梯度下降法
在梯度下降的過程中,希望縱軸的擺動盡量小,橫軸的跨度盡量大。
注意!右側Vdw并非上一層的Vdw,而是該層上次更新參數(shù)時的Vdw
RMSprop
Adam優(yōu)化算法
本質上是動量法和RMSprop的結合。
學習率衰減
當訓練結果接近最優(yōu)值時,繼續(xù)訓練會使參數(shù)值在其附近擺動,此時可以嘗試減小學習率使其逼近最優(yōu)解。
第三周:超參數(shù)調試、Batch正則化、程序框架
調試處理
在神經(jīng)網(wǎng)絡中,超參數(shù)的重要程度存在差異。如:α是最重要的超參數(shù),而Adam方法中的ε重要性很低。
在搜索超參數(shù)時,采用隨機取樣而不是網(wǎng)格取樣,效果更好。(因為超參數(shù)的重要性存在差異)
在最優(yōu)樣本附近進行細粒度搜索,以確定更好的超參數(shù)值。
為超參數(shù)選擇合適的范圍
例如,對α在[0.0001, 1]進行取值時,用對數(shù)標尺(而非線性標尺)搜索超參數(shù)的方式會更合理。
在 Python 中,使 r=-4*np.random.rand(),α = 10r
當選擇β時,可以考察1-β的值。當β接近1時,其對變化的靈敏度會顯著提高,因此不能使用線性標尺。
Batch Norm/z的歸一化處理
Batch Norm一次只能處理一個 mini-batch 數(shù)據(jù)
默認對每層的z進行歸一化,而非a。
時刻記住:每層網(wǎng)絡的每個單元的輸出z,都是下層網(wǎng)絡的輸入,類比輸入層的一個(或多個樣本的同一位置的)特征。
將Batch Norm擬合進神經(jīng)網(wǎng)絡中,對每個batch第k層的z[k],根據(jù)γ[k]和β[k]計算得歸一化后的值,再進行激活。
因為歸一化的操作,所以z[k]=w[k]*a[k-1]+b[k]中的b[k]可以刪去。
操作流程:
for k in batch_num:
前向傳播計算z{k},并用BN計算z~{k}
反向傳播計算dw{k},dγ{k},dβ{k}
更新參數(shù)w,γ,β # 可以使用梯度法,Adam方法,動量法等
Batch Norm作用的原理
當神經(jīng)網(wǎng)絡在之前層中更新參數(shù),Batch Norm可以確保無論其怎樣變化,得到z的均值和方差保持不變,所以即使z的值改變,至少他們的均值和方差是由β和γ決定的值。
Batch Norm減少了輸入值改變的問題,使這些值變得更穩(wěn)定,神經(jīng)網(wǎng)絡后層會有更堅實的基礎。即使輸入分布改變了一些,后層網(wǎng)絡的值會改變得更少,即使后層適應的程度減小了。它減弱了前層參數(shù)的作用與后層參數(shù)的作用之間的聯(lián)系,使得網(wǎng)絡每層都可以自己學習,稍稍獨立于其它層,這有助于加速整個網(wǎng)絡的學習。
SoftMax回歸
Loss(y, y_hat) = -ylog(y_hat)
Cost(Y, Y_hat) = ΣLoss(Y, Y_hat) / m
dz[l] = y_hat - y
有關tensorflow的用法的章節(jié)不在此記錄。
總結
以上是生活随笔為你收集整理的吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山药皮的功效与作用、禁忌和食用方法
- 下一篇: 白背木耳的功效与作用、禁忌和食用方法