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}=11000∑Li=1L(y^(i),y(i))+λ2∗1000∑L||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]
- Forward prop on
- epoch: 遍歷一次訓練集,使用batch,一次epoch只能更新一次參數,mini-batch如上例,可以更新5000次參數
- For t=1…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的原則
- 如果訓練集很小,比如樣本數小於2000,mini-batch size=m
- mini-batch size取2的整數倍,比如說64,128,256,512等,有助於計算機加快運算
- 確保CPU/GPU能夠加載一個mini-batch
2. 指數加權平均(Exponentially weight average)
計算公式
給定一個時間序列,比如倫敦一年的每天氣溫
θ1,θ2,...,θ365
v0v1vt===00.9v0+0.1θ10.9vt−1+0.1θt 維基百科上的定義
St={Y1,αYt+(1−α)St−1,t=1t>1
其中
α 是權值,Yt 是實際值,St 是加權平均後的值
平均過去多少天
- 如上
β=0.9 ,則約等於10天 β 越大,過去的影響越多,曲線越平滑,即時反應越弱
算法本質
0.910≈1e ,相當於把過去10天的氣溫指數加權平均作爲當日的氣溫,因爲10天后權重下降到當日的三分之一不到
算法步驟
- v = 0
- repeat
- get
θi - v :=
β v+(1-β )θi
- get
- 好處,節省內存,尤其對於數據大的情況,和移動窗求加權平均稍微差一點
偏差修正(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+db ,vdw,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除,所以可以減少擺動,同時可以增大學習速率來加快學習
ϵ=10−8 ,防止分母太小導致變化太大
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,一般不需要改ϵ : 一般設置爲10−8
6. 學習率衰減(learning rate decay)
- 隨時間慢慢減少學習率,在學習初期步長較大,能夠比較快的接近最小值,後期步長減小,幫助收斂
算法步驟
- 1 epoch: 迭代一次訓練集
α=11+decayrate∗epochnumα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