第2次課改善深層神經網絡:超參數優化、正則化以及優化 - week2 優化算法

1. mini-batch,小批量梯度下降法

  • 批量(Batch)和小批量(mini-batch)梯度下降法

向量化輸入輸出

  • 輸入:(nx ,m),n個特徵,m個樣本
    X=[x(1)x(2) ... x(m)]
  • 輸出:(1,m)
    Y=[y(1)y(2) ... y(m)]

Batch & mini-batch定義

  • 批量:一次迭代整個數據集,計算出一個誤差然後更新權值和偏置(w,b)
  • 小批量:一次迭代mini-batch size個樣本,計算一個誤差然後更新參數

算法步驟

  • 假設樣本集大小爲500萬,mini-batch size爲1000,則有5000個mini-batch
  • repeat
    • For t=1…5000
      • Forward prop on X{t}
        • Z[1]=W[1]X{t}+b[1]
        • A[1]=g[1](Z[1])
        • A[L]=g[L](Z[L])
      • Compute cost J{t}=11000Li=1L(y^(i),y(i))+λ21000L||w[l]||2F
      • Backprop to compute gradients using J{t}(X{t},Y{t})
        • W[L]:=W[L]αdW[L],b[L]:=b[L]αdb[L]
    • epoch: 遍歷一次訓練集,使用batch,一次epoch只能更新一次參數,mini-batch如上例,可以更新5000次參數

J下降

  • batch: 一直下降
  • mini-batch: 局部波動,整體下降

選擇mini-batch size

  • mini-batch size=m: Batch gradient descent
  • mini-batch size=1: Stochastic gradient descent
  • 優點和缺點
    • Batch gradient descent: 可以很好的取到最好的參數,但是如果數據集太大會導致迭代一次耗時很長
    • Stochastic gradient descent: 有噪聲,雖然可以通過減小學習率減少噪聲,但是不會取到最好的參數,而且失去了向量化帶來的速度優化
    • mini-batch: 可以向量化,不需要一次性遍歷整個訓練集
  • 選擇mini-batch size的原則
    1. 如果訓練集很小,比如樣本數小於2000,mini-batch size=m
    2. mini-batch size取2的整數倍,比如說64,128,256,512等,有助於計算機加快運算
    3. 確保CPU/GPU能夠加載一個mini-batch

2. 指數加權平均(Exponentially weight average)

計算公式

  • 給定一個時間序列,比如倫敦一年的每天氣溫θ1,θ2,...,θ365

    v0v1vt===00.9v0+0.1θ10.9vt1+0.1θt
  • 維基百科上的定義

    St={Y1,αYt+(1α)St1,t=1t>1

其中α 是權值,Yt 是實際值,St 是加權平均後的值

平均過去多少天

11β
  • 如上β=0.9 ,則約等於10天
  • β 越大,過去的影響越多,曲線越平滑,即時反應越弱

算法本質

v100=0.1θ100+0.10.9θ99+0.10.92θ98 ...
  • 0.9101e ,相當於把過去10天的氣溫指數加權平均作爲當日的氣溫,因爲10天后權重下降到當日的三分之一不到

算法步驟

  • v = 0
  • repeat
    • get θi
    • v := β v+(1-β )θi
  • 好處,節省內存,尤其對於數據大的情況,和移動窗求加權平均稍微差一點

偏差修正(bias correction)

  • 注意到加權平均的第一個值被初始化爲0,所以前幾個值和實際值會相差很大,使用偏差修正來改變
  • 將上述算法計算後的值做如下處理

    vt:=vt1βt
  • 對於第一個值

    v1=βv0+(1β)θ1=(1β)θ1v1:=v11β=θ1
  • 對於第二個值

    v2=βv1+(1β)θ2=(1β)θ2+β(1β)θ1v2:=v21β2=11βθ2+β1βθ1
  • 越往後偏差修正的影響越小

3. 動量梯度下降法(gradient descent with momentum)

  • 計算梯度的指數加權平均數,並利用該梯度更新權重

算法步驟

  • On iteration t:
    • Compute dw, db on current mini-batch
    • vdw=βvdw+(1β)dw
    • vdb=βvdb+(1β)db
    • w:=wαvdw,b:=bαvdb
  • 另一個版本: vdw=βvdw+dw,vdb=βvdb+dbvdw,vdb 減小了1β 倍,所以α 需要相應改變
  • 效果:在抵達最小值的路徑上減少了擺動,通過累加,減少擺動的誤差,增大向極小值的梯度
  • 一般β=0.9

4. RMSprop(root mean square prop)

算法步驟

  • On iteration t:
    • Compute dw, db on current mini-batch
    • Sdw=β2vdw+(1β2)dw2
    • Sdb=β2vdb+(1β2)db2
    • w:=wαvdwSdw+ϵ,b:=bαvdbSdb+ϵ
  • 效果:在抵達最小值的路徑上減少了擺動,比較大的dwi,會被一個大的vdwi除,所以可以減少擺動,同時可以增大學習速率來加快學習
  • ϵ=108 ,防止分母太小導致變化太大

5. Adam(Adaptive moment estimate) optimization algorithm

  • 整合了momentum和RMSprop

算法步驟

  • On iteration t:
    • Compute dw, db on current mini-batch
    • momentum
    • vdw=β1vdw+(1β1)dw,vdb=β1vdb+(1β1)db
    • RMSprop
    • Sdw=β2vdw+(1β2)dw2,Sdb=β2vdb+(1β2)db2
    • bias correction
    • vcorrectiondw=vdw/(1βt1),vcorrectiondb=vdb/(1βt1)
    • Scorrectiondw=Sdw/(1βt2),Scorrectiondb=Sdb/(1βt2)
    • change the w and b
    • w:=wαvcorrectiondwScorrectiondw+ϵ,b:=bαvcorrectiondbScorrectiondb+ϵ

參數設置

  • alpha : 需要調參
  • β1 : 影響dw,db ,作者設置爲0.9,一般不需要改
  • β2 : 影響dw2,db2 ,作者設置爲0.999,一般不需要改
  • ϵ : 一般設置爲108

6. 學習率衰減(learning rate decay)

  • 隨時間慢慢減少學習率,在學習初期步長較大,能夠比較快的接近最小值,後期步長減小,幫助收斂

算法步驟

  • 1 epoch: 迭代一次訓練集
    • α=11+decayrateepochnumα0
    • 或者α=0.95epochnumα0 或者α=kepochnumα0,α=ktα0 或者離散下降(discrete staircase),階梯函數,過幾代就減少,例如減小一半

7. 局部最優問題

  • 不太可能碰到局部最優,J對w,b求導爲0的點一般都是鞍點,w的維度很高,只要有一個是凹函數,就是鞍點
  • plateaus: 導數長時間接近於0的區域,因爲導數很小,所以需要長時間的迭代才能走出來

課程地址:http://mooc.study.163.com/course/deeplearning_ai-2001281003?tid=2001391036#/info

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章