Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 1. 机器学习的实用层面)...
===========第1周 機器學習的實用層面================
?
===1.1 訓練/開發/測試===
早期機器學習時代(數據規模較小),如果不需要dev set,常見的劃分有 70%/30% 的訓練/測試 劃分,如果需要驗證集,常見的是 60%/20%/20%劃分
在big data era,由于數據集非常大,test和dev的占比通常變得更小,因為dev set的目的就是檢測哪個算法更有效,所以dev集只需要big enough for you to evaluate 不同算法,比如你有100million數據,使用1萬data作為dev集is more than enough,test集也是一樣。
MAKE SURE the dev and test sets come from the same distribution
In practice,有時沒有/不需要test set,很多人會直接把train/dev劃分稱為 train/test劃分,Andrew認為這是不嚴謹的
?
===1.2 偏差(Bias) / 方差(Variance)===
High Bias:欠擬合
High Variance: 過擬合
舉個例子,以錯誤率為例,train/dev:1%/11%(高方差,過擬合),15%/16%(高偏差,欠擬合),15%/30%(高偏差+高方差,欠擬合)
?
===1.3 機器學習基礎===
在現代的deep learning,只要bigger network & more data & 合適的其他設置如regulation等,在降低偏差的同時通常可以同時 降低/不傷害 方差,反之亦然。這也是為什么在深度學習中我們不用太關注Bias-Variance trade-off 的原因,Andrew認為這也是deep火起來的一個原因。
?
===1.4 正則化===
以logistic regression為例,我通常只加對W的L2正則項,不加b的正則項目(加不加影響不大),因為W通常是很高維的,高偏差問題主要和它有關,we aren't fitting all the parameters well
L1 norm可以使模型更sparse,有人認為這有利于降低存儲模型的存儲空間,但in practice,我發現L1 norm可以使模型稀疏,但其實并沒有降低太多存儲內存,所以我不認為L1的目的是為了壓縮模型。我在實踐中喜歡L2 norm。
對矩陣的L2正則化叫做 Frobenious norm,而不叫 L2 norm,|| W ||^2
在對于的BP過程中,dW要額外加一項,你可以看到這也是為什么L2 regularization 被稱為i weight decay
?
===1.5 正則化為什么可以減少過擬合===
直觀上來感受,以一個多層神經網絡和L2 正則化為例,通過控制正則化參數lambda,它相當于消除,實踐中更準確的說是降低了許多神經元unit的影響,從而simpler the network。
另一個直觀例子,假設激活函數為tanh(),在靠近0周圍的部分近似線性,而兩邊是非線性的,正則化使得W值變小,W乘以上一層輸入得到的值也變小了,就會集中在線性區。
?
===1.6 dropout正則化===
反向隨機失活 inverted dropout,記得在 a = (a*mask) /?keep_prop
?
?===1.7 理解dropout===
dropout相當于降低了模型復雜度
Intuition: 依然以網絡結構為例,不能依賴any one feature(也就是,給某一個輸入節點賦予過大的權重),因為任何feature都有可能被drop,so have to spread the weights,利用絕大部分特征。
類似L2正則化,dropout通常會產生一個效果,即 shrinking the squared norm of the weights,并且does some outer regularization。甚至更適用于不同scale的輸入范圍。
根據不同層可能過擬合的程度,不同層可以設置不同的keep_prop,缺點是交叉驗證選參數代價大。一直替代的方法是對所有層,keep_prop= 1 / a same number.
除非網絡過擬合了,否則我通常不會用dropout。它在其他領域應用得比較少,主要是在CV,因為通常我們沒有足夠的數據,導致過擬合。
一個缺點是,此時代價函數 J is no longer well-defined,此時你很難監測迭代進行梯度下降時的J的性能,所以我們失去的debug工具繪制損失圖。通常我會先關閉dropout,運行NN,確保J單調遞減,然后再加入dropout。
?
===1.7 其他正則化方法===
Data Augmentation. 比如對稱圖像,隨機旋轉和裁剪,OCR圖像設置可以各種扭曲
early stopping. 畫出 training/dev error 隨著 迭代次數的 曲線。
缺點是,它couple了兩個任務(最優化代價函數J,同時要降低過擬合風險),這使得我們無法獨立地處理這兩個任務。即,我們嘗試用一種方式同時解決兩個問題,這也使得我們的任務變得更復雜。提早停止梯度下降,在某種程度上我們breaking 了 降低J的任務,此時代價函數可能還不夠小
優點是,這個正則化方法不需要額外參數,在梯度下降的過程中就可以完成。但是如果負擔得起 L2 正則化超參數搜索的計算開銷的話,通常我們還是選擇 L2。我發現 L2使得超參數的search space更容易分解(咸魚對這句話的理解是,加了L2之后迭代過程相對固定,只要不斷迭代就行了,最終比較不同超參數組合的J值,而early stopping看中間迭代值,不同超參數組合具體在哪次迭代停止都不一樣,我們關注了中間值使得range search可能也不是那么容易鎖定)。
===1.9 標準化輸入===
當不同特征scale相差較大時,可以看到 J 的等高圖是一個扁長的橢圓(假設此時特征2維),此時直接使用SGD,會導致Z字形軌跡(不同方向梯度大小不一樣,而學習率一樣)。
特征尺度相差不大就不需要做歸一化,但即使做了歸一化也不會有什么harm,所以當我不確定特征scale是否相差很大時,我都會選擇做歸一化。
?
===1.10 梯度消失和梯度爆炸===
直觀理解
Andrew舉了一個使用線性激活函數的例子,那就相當于不斷乘以Wi,那么前向時,Wi略大于1激活值就會爆炸,偏小就會消失接近0,反向時梯度值類似。咸魚覺得Relu會遇到這種情況。
另外CS231n中Karpathy講的以tanh為激活函數時,直接使用高斯隨機產生權重*某較小的數,也會存在梯度消失問題,要么激活值接近0,要么激活值接近1,兩者都導致梯度消失。
===1.11 神經網絡的權重初始化===
使用? 標準高斯函數*一個較小的數? 隨機初始化權重,存在一個問題,隨著輸入數據量的增長,隨機初始化的神經元的輸出數據的分布中的方差也在增大。我們可以除以輸入數據量的平方根來調整其數值范圍,這保證了網絡中所有神經元起始時有近似同樣的輸出分布。實踐經驗證明,這樣做可以提高收斂的速度。
Xavier初始化,以tanh為激活函數,Wi = np.random.randn( Ni - 1 *? Ni?) / np.sqrt( Ni-1),這使得 Zi 和 Ai-1 有大致相同的范圍(方差) 。
In practice,我認為這些初始化公式只是給了你一個起始點,如果你愿意,W的方差參(Xavier將其調整為1/n)數可以作為你可以調整的一個超參數。有時這樣調優的效果很微小,通常這不會是我想要調的首要超參,但在有些應用中調這個參數也能提升了一些性能。考慮到其他超參的重要性,我通常給這個超參低點的優先級。
?
=== 1.12 梯度的數值逼近===
使用? 雙邊的數值梯度? 近似? 解析梯度
=== 1.13 梯度檢驗===
?
?
=== 1.14 關于梯度檢驗實現的標注===
1、不要再訓練中使用梯度檢驗,它只用在調試中。因為梯度檢驗很費時
?2、如果檢驗失敗,look at specific components to try to identify bug
3、記住正則化項
4、Doesn‘t work with dropout。梯度檢驗時先關閉dropout,設置keep_node=1
5、Run at random intialization; perhaps again after some training. 這種情況很少發生,但是也有可能,small random initial values,運行梯度檢驗,有可能是對的,但隨著訓練進行權重away from zero,梯度檢驗將失敗。雖然我不常這么做,但你可以選擇的是,在初始化時跑梯度檢驗,然后讓模型訓練一段時間,權重away from 初始化值后,在進行梯度檢驗。
?
轉載于:https://www.cnblogs.com/JesusAlone/p/8513487.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 1. 机器学习的实用层面)...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 怎么进入路由器的接口配置模式 路由器如何
- 下一篇: charts 画饼图
