神经网络训练失败原因总结
文章目錄
- 優(yōu)化不合理
- 解決方法1(泰勒展開)
- 解決方法2(改變batch)
- 解決方法3(設(shè)置momentum)
- 模型震蕩
- 解決辦法1(Adagrad方法)
- 解決辦法2(RMSProp方法)
- 解決辦法3:(Adam)
- 優(yōu)化訓(xùn)練損失函數(shù)
優(yōu)化不合理
現(xiàn)象(梯度很小):
1.模型loss基本不變(梯度消失)
2.模型的loss最后收斂很高(陷入局部最優(yōu))
梯度消失原因:
1.陷入鞍點(saddle point)
2.陷入局部極值點(最大值或最小值)
解決方法1(泰勒展開)
判斷梯度消失是由哪種原因引起的:
由于機器學(xué)習(xí)模型的函數(shù)特別復(fù)雜,為了簡化計算,使用hessian矩陣進行近似。
假設(shè)對于模型的參數(shù)θ,設(shè)θ‘=θ+Δθ,在θ處進行泰勒展開,保留前三項,則可以得到下列式子
其中,g為L在θ處的梯度,H為Hessian矩陣,計算方法如下:
泰勒展開如下:
當(dāng)陷入局部極值點時,g趨向于0,可以忽略不計,則L(θ)和L(θ’)的差異取決于在紅色框框柱的式子。
此時就會出現(xiàn)三種情況:
對于所有的θ’
1.對于?θ,(θ?θ′)TH(θ?θ′)>0,則為局部最小值1.對于?θ,(θ-θ')^TH(θ-θ')>0,則為局部最小值1.對于?θ,(θ?θ′)TH(θ?θ′)>0,則為局部最小值
2.對于?θ,(θ?θ′)TH(θ?θ′)<0,則為局部最大值2.對于?θ,(θ-θ')^TH(θ-θ')<0,則為局部最大值2.對于?θ,(θ?θ′)TH(θ?θ′)<0,則為局部最大值
3.對于?θ,(θ?θ′)TH(θ?θ′)>0或(θ?θ′)TH(θ?θ′)<0,則為鞍點3.對于?θ,(θ-θ')^TH(θ-θ')>0 或(θ-θ')^TH(θ-θ')<0,則為鞍點3.對于?θ,(θ?θ′)TH(θ?θ′)>0或(θ?θ′)TH(θ?θ′)<0,則為鞍點
但是由于無法窮舉所有的θ’,所以需要用到一個數(shù)學(xué)結(jié)論:
eigen value:特征值(下圖部分關(guān)于最大最小值的判斷有誤)
推導(dǎo)如下:
可以把(θ-θ’)看成特征向量的集合,即u是特征向量。
這樣就將窮舉θ轉(zhuǎn)化為了,求負的特征值對應(yīng)的特征向量,然后根據(jù)
θ?θ′=uθ-θ'=uθ?θ′=u
得出θ,對θ’進行更新。
解決方法2(改變batch)
設(shè)置batch,這里有兩張圖
大的batch收斂平穩(wěn),訓(xùn)練速度快,但是往往在測試集上表現(xiàn)差;小的batch收斂噪音大,訓(xùn)練速度慢,但是往往在測試集上表現(xiàn)好。
解決方法3(設(shè)置momentum)
momentum(動量)
考慮物理世界中,如果一個小球從高處沿著斜坡滑下,當(dāng)他遇到局部最低點的時候,由于具有動量(慣性),他會繼續(xù)往前沖一段路,試圖越過前一個坡。
改進梯度下降方式:
momentumn+1=λ?momentumn?η?Gradientnmomentum^{n+1}=λ*momentum^n-η*Gradient^nmomentumn+1=λ?momentumn?η?Gradientn
θn+1=θn+momentumn+1θ^{n+1}=θ^n+momentum^{n+1}θn+1=θn+momentumn+1
(我感覺有點賭,動量的前提是認為翻過這個山能實現(xiàn)更好的效果,但是實際上不一定,可能翻過這個山反而效果反而差)
模型震蕩
現(xiàn)象:
1.loss不變,但gradient仍很大
解決辦法1(Adagrad方法)
當(dāng)訓(xùn)練含有兩個參數(shù)的模型時,如果學(xué)習(xí)率太大,則會反復(fù)震蕩,如果學(xué)習(xí)率太小,則在后期訓(xùn)練緩慢。
所以需要根據(jù)gradient來自適應(yīng)學(xué)習(xí)率,當(dāng)gradient大的時候,學(xué)習(xí)率應(yīng)該小,gradient小的時候,學(xué)習(xí)率應(yīng)該大。
學(xué)習(xí)率應(yīng)該更新如下圖紅框所示:
t表示epoch的次數(shù),i表示為哪一個參數(shù)。第t個epoch的σ計算如下:
σit=1t+1∑1≤t≤ng(it)2σ^t_i=\sqrt{\frac{1}{t+1}\sum_{\mathclap{1\le t\le n}} g(^t_i)^2} σit?=t+11?1≤t≤n?∑?g(it?)2?
上述算法在Adagrad優(yōu)化技術(shù)中用到。
但是上述方法的缺陷是:把每一個梯度視為同等重要,所以可能后期調(diào)整速度較慢。
解決辦法2(RMSProp方法)
計算公式同上,紅框中第t個epoch的σ計算方式變化為:
σit=α(σit?1)2+(1?α)(git)2σ^t_i=\sqrt{α(σ^{t-1}_i)^2+(1-α)(g^t_i)^2} σit?=α(σit?1?)2+(1?α)(git?)2?
將不同時間段產(chǎn)生的梯度考慮給予不同的權(quán)值,越早產(chǎn)生的gradient的權(quán)值越低,可以提高學(xué)習(xí)率的調(diào)整速度。
解決辦法3:(Adam)
Adam=RMSProp+Momentum
相當(dāng)于參數(shù)更新函數(shù)變?yōu)槿缦滤?#xff1a;
σit=α(σt?1)2+(1?α)(gt)2σ^t_i=\sqrt{α(σ^{t-1})^2+(1-α)(g^t)^2} σit?=α(σt?1)2+(1?α)(gt)2?
momentumn+1=λ?momentumn?ησn?Gradientnmomentum^{n+1}=λ*momentum^n-\frac {η}{σ^n}*Gradient^nmomentumn+1=λ?momentumn?σnη??Gradientn
θn+1=θn+momentumn+1θ^{n+1}=θ^n+momentum^{n+1}θn+1=θn+momentumn+1
簡單理解的話,相當(dāng)于在梯度更新速度上加了一個權(quán)值,并且在梯度更新方向上加了一個權(quán)值。
優(yōu)化訓(xùn)練損失函數(shù)
如果在分類問題中,使用MES和交叉熵損失函數(shù),則使用MSE時,會因為MSE在分類問題的求導(dǎo)時,求導(dǎo)項含有梯度分之一,所以在梯度很大時,MES對于分類問題train不起來。
注:pytorch中,cross函數(shù)默認會加上softmax,所以不需要在網(wǎng)絡(luò)的最后一層加上softmax。
總結(jié)
以上是生活随笔為你收集整理的神经网络训练失败原因总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用户开启了iCloud 照片库,选择了“
- 下一篇: 网络渗透作业