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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面

發布時間:2024/7/5 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 訓練,驗證,測試集
    • 2. 偏差,方差
    • 3. 機器學習基礎
    • 4. 正則化
    • 5. 為什么正則化預防過擬合
    • 6. dropout(隨機失活)正則化
    • 7. 理解 dropout
    • 8. 其他正則化
    • 9. 歸一化輸入
    • 10. 梯度消失 / 梯度爆炸
    • 11. 神經網絡權重初始化
    • 12. 梯度的數值逼近
    • 13. 梯度檢驗
    • 14. 梯度檢驗的注意事項
    • 作業

參考:
吳恩達視頻課
深度學習筆記

1. 訓練,驗證,測試集

深度學習是一個典型的迭代過程,迭代的效率很關鍵

創建高質量的訓練數據集驗證集測試集有助于提高循環效率

  • 切分標準:
    小數據量時代,常見做法是三七分,70%驗證集,30%測試集;也可以 60%訓練,20%驗證和20%測試集來劃分。
    大數據時代,數據量可能是百萬級別,驗證集和測試集占總量的比例會趨于變得更小。
    我們的目的就是驗證不同的算法,檢驗哪種算法更有效,不需要拿出20%的數據作為驗證集,很少的一部分占比的數據就已經足夠多了。
  • 數據來源:
    最好要確保 驗證集 和 測試集 的數據來自同一分布,因為要用驗證集來評估不同的模型,如果驗證集和測試集來自同一個分布就會很好

2. 偏差,方差


關鍵數據:
訓練集誤差、驗證集誤差


如果最優誤差(貝葉斯誤差,人分辨的最優誤差)非常高,比如15%。那么上面第二種分類器(訓練誤差15%,驗證誤差16%),15%的錯誤率對訓練集來說也是非常合理的,偏差不高,方差也非常低。
(以上基于假設:基本誤差很小,訓練集和驗證集 來自相同分布

根據這兩個指標,更好的優化算法。

3. 機器學習基礎

4. 正則化

正則化有助于防止過擬合,降低方差

范數(norm) 幾種范數的簡單介紹

  • L1 范數:∣∣X∣∣1=∑i=1n∣xi∣||X||_1 = \sum\limits_{i=1}^n |x_i|X1?=i=1n?xi? 表示非零元素的絕對值之和
  • L2 范數:∣∣X∣∣2=∑i=1nxi2||X||_2 = \sqrt{\sum\limits_{i=1}^n {x_i}^2}X2?=i=1n?xi?2? 表示元素的平方和再開方
    矩陣的范數叫做:弗羅貝尼烏斯范數,所有元素的平方和 ∣∣W∣∣F2||W||_F^{2}WF2?

加上 L2 正則化 的損失函數:
J(ω,b)=1m∑i=1mL(y^(i),y(i))+λ2m∥ω∥22J(\omega, b)=\frac{1}{m} \sum_{i=1}^{m} \mathcal L \left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2 m}\|\omega\|_{2}^{2}J(ω,b)=m1?i=1m?L(y^?(i),y(i))+2mλ?ω22?

  • L1 正則,權重 w 最終變得稀疏,多數變成 0
  • L2 正則,使得權重衰減

W[l]=(1?αλm)?W[l]?α(梯度)W^{[l]} = (1-\frac{\alpha\lambda}{m})*W^{[l]} - \alpha(梯度)W[l]=(1?mαλ?)?W[l]?α()
權重不但減少了,還乘以了小于1的系數進行衰減

5. 為什么正則化預防過擬合

J(ω,b)=1m∑i=1mL(y^(i),y(i))+λ2m∥ω∥22J(\omega, b)=\frac{1}{m} \sum_{i=1}^{m} \mathcal L \left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2 m}\|\omega\|_{2}^{2}J(ω,b)=m1?i=1m?L(y^?(i),y(i))+2mλ?ω22?

λ\lambdaλ 設置的很大的時候,最終 WWW 會變得很接近于 0,神經網絡中的很多單元的作用變得很小,整個網絡越來越接近邏輯回歸



λ\lambdaλ 增大時,整個神經網絡會計算離線性函數近的值,這個線性函數非常簡單,不是復雜的高度非線性函數,不會發生過擬合

L2 正則化是 訓練深度學習模型時最常用的一種方法

6. dropout(隨機失活)正則化


以上是一個樣本的過程,其他樣本也是同樣的過程。

實施 dropout 舉例:最常用的方法 - inverted dropout(反向隨機失活)

用一個三層網絡舉例

  • 定義向量 dddd[3]d^{[3]}d[3] 表示一個三層的 dropout 向量 d3 = np.random.rand(a3.shape[0],a3.shape[1]),對于元素小于 keep-prob 的,對應為 0,其概率為 1 - keep_prob
  • 獲取激活函數 a[3]a^{[3]}a[3], a3 = np.multiply(a3, d3),使得 d[3]d^{[3]}d[3] 中為 0 的元素把 a[3]a^{[3]}a[3] 對應元素歸零
  • 向外擴展 a[3]a^{[3]}a[3],a3 /= keep_prob

反向隨機失活(inverted dropout)方法通過除以keep-prob,確保 a[3]a^{[3]}a[3] 的期望值不變

7. 理解 dropout

  • 其功能類似于 L2 正則化
  • 對于參數集多的層,可以使用較低的 keep-prob 值(不同的層,可以使用不同的值),缺點是:需要交叉驗證更多的參數

dropout 一大缺點就是:代價函數不再被明確定義,每次迭代,都會隨機移除一些節點,想檢查梯度下降的性能,實際上是很難進行復查的

  • 可以先關閉dropout,將keep-prob 設置為 1,確保 J 函數單調遞減
  • 然后再嘗試打開dropout

8. 其他正則化

  • 數據擴增,假如是圖片數據,擴增數據代價高,我們可以:

水平翻轉;隨意剪裁旋轉放大(這種方式擴增數據,進而正則化數據集,減少過擬合成本很低)

對于數字識別圖片,我們可以進行旋轉,扭曲來擴增數據集

  • early stopping

    在驗證集誤差變壞的時候,提早停止訓練

early stopping 缺點:不能同時處理 過擬合 和 代價函數不夠小的問題

  • 提早停止,可能代價函數 J 不夠小
  • 不提早結束,可能會過擬合

不使用 early stopping ,那么使用 L2 正則,這樣訓練時間可能很長,參數搜索空間大,計算代價很高

early stopping 優點:只運行一次梯度下降,可以找出 w 的較小值,中間值,較大值,無需嘗試 L2 正則化超參數 λ\lambdaλ 的很多值

9. 歸一化輸入

歸一化輸入,可以加速訓練

  • 零均值(所有的數據減去均值)
  • 歸一化方差(所有數據除以方差)

注意:μ,σ2\mu, \sigma^2μ,σ2 是由訓練集得到,然后用于其他所有數據集

10. 梯度消失 / 梯度爆炸


在非常深的神經網絡中,權重只要不等于 1,激活函數將會呈指數級遞增或者遞減,導致訓練難度上升,尤其是梯度與 L 相差指數級,梯度下降算法的步長會非常非常小,學習時間很長。

11. 神經網絡權重初始化

上面講到了梯度消失/爆炸,如何緩解這個問題?


為了預防 z 的值 過大 或 過小,n 越大時,你希望 wi 越小,合理的方法是 wi=1/nw_i = 1/nwi?=1/n,n 是輸入特征數量

w[l]=np.random.randn(shape)?np.sqrt(1n[l?1])w^{[l]} = np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}})w[l]=np.random.randn(shape)?np.sqrt(n[l?1]1?)n[l?1]n^{[l-1]}n[l?1] 是給第 lll 層輸入的特征數量

  • 如果使用ReLu激活函數(最常用),?np.sqrt(2n[l?1])*np.sqrt(\frac{2}{n^{[l-1]}})?np.sqrt(n[l?1]2?)
  • 如果使用tanh激活函數,1n[l?1]\sqrt \frac{1}{n^{[l-1]}}n[l?1]1??,或者 2n[l?1]+n[l]\sqrt \frac{2}{n^{[l-1]}+n^{[l]}}n[l?1]+n[l]2??

這樣設置的權重矩陣既不會增長過快,也不會太快下降到 0
從而訓練出一個權重或梯度不會增長或消失過快的深度網絡
我們在訓練深度網絡時,這也是一個加快訓練速度的技巧

12. 梯度的數值逼近

在反向傳播時,有個測試叫做梯度檢驗

我們使用雙邊誤差,
f′(θ)=f(θ+ε)?f(θ?ε)2ε\left.f^{\prime}( \theta\right)=\frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2 \varepsilon}f(θ)=2εf(θ+ε)?f(θ?ε)?
不使用單邊誤差,因為前者更準確。

13. 梯度檢驗

梯度檢驗幫助我們發現反向傳播中的 bug

dθapprox?[i]=J(θ1,θ2,…θi+ε,…)?J(θ1,θ2,…θi?ε,…)2εd \theta_{\text {approx }}[i]=\frac{J\left(\theta_{1}, \theta_{2}, \ldots \theta_{i}+\varepsilon, \ldots\right)-J\left(\theta_{1}, \theta_{2}, \ldots \theta_{i}-\varepsilon, \ldots\right)}{2 \varepsilon}dθapprox??[i]=2εJ(θ1?,θ2?,θi?+ε,)?J(θ1?,θ2?,θi??ε,)?

dθ[i]=?J?θid \theta[i]=\frac{\partial J}{\partial \theta_{i}}dθ[i]=?θi??J?

檢驗 dθapprox?[i]≈dθ[i]d \theta_{\text {approx }}[i] \approx d \theta[i]dθapprox??[i]dθ[i]

∥dθapprox??dθ∥2∥dθapprox?∥2+∣∣dθ∣∣2\frac{\left\|d \theta_{\text {approx }}-d \theta\right\|_{2}}{ \left\|d \theta_{\text {approx }}\right\|_{2}+||d \theta||_2}dθapprox??2?+dθ2?dθapprox???dθ2??
檢查上式的值是否 <10?7< 10^{-7}<10?7

14. 梯度檢驗的注意事項

  • 不要在訓練中使用梯度檢驗,它只用于調試
  • 如果算法的梯度檢驗失敗,要檢查所有項,檢查每一項,并試著找出bug
  • 如果使用了正則化,計算梯度的時候也要包括正則項
  • 梯度檢驗不能與dropout同時使用,可以關閉dropout,進行梯度檢驗,檢驗正確了,再打開dropout
  • 作業

    02.改善深層神經網絡:超參數調試、正則化以及優化 W1.深度學習的實踐層面(作業:初始化+正則化+梯度檢驗)


    我的CSDN博客地址 https://michael.blog.csdn.net/

    長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

    總結

    以上是生活随笔為你收集整理的02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面的全部內容,希望文章能夠幫你解決所遇到的問題。

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