日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 1. 机器学习的实用层面)...

發布時間:2023/12/2 pytorch 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 机器学习的实用层面)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。