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