NLP学习笔记40-神经网络收敛性
一 序
? 本文屬于貪心NLP訓練營學習筆記系列。
二?optimization of deeplearning
這里老師簡單提了下,我們知道凸函數是有全局最優解的。深度學習是非凸函數,?highly non-convex function.
只有局部最優解。特點:很難訓練。
如何在所有的局部最優解里面尋找最好的局部最優解,導致兩個領域的發展 , "如何更好初始化參數"和"尋求更好地優化器"。
知乎上看了下深度學習為啥非凸?沒找到很清晰通俗的解釋。沒看懂這塊,我猜測收斂的局部極小值不會與全局的差太多,老師說如果能找到這樣的優化方法,就不用這么多層網絡模型了 。
高票答案是反證法:https://www.zhihu.com/question/265516791
一個高維凸函數可以等價于無數個一維凸函數的疊加。
反證:存在這樣的線。找到這個方向上找到兩個點,他們平均的函數值比他們平均值上的函數值要低就行了。
2.2?plateau 問題
上圖是一個函數的曲線,加入我們使用梯度下降法,就是我們沿著梯度的方向前進,當遇到一段平行的區間(紅圈內),梯度已經平穩或者損失函數不在變化,所以會誤認為達到終止條件。
通常需要使用momentum動量?,好處:可以很輕松的跳出偽最優解。下面還有一個好處,使用動量梯度下降法(gradient descent with momentum),其速度會比傳統的梯度下降算法快的多。。推薦看知乎 的這篇文章:https://zhuanlan.zhihu.com/p/34240246
初學者知道有這么問題及優化思路即可。
3 SGD收斂性(SGD with Converge)
在開始本節學習之前。先回顧下神經網絡之前的損失函數介紹。
深度學習算法這里,拋去去模型選擇,主要是對于任意給定的網絡結構,計算出最優的網絡參數,換句話說模型訓練過程本質上就是求解一個最優化問題。
就是???,其中f為損失函數,為網格參數。
具體來說,對于樣本集{} ,x是輸入,y是標簽。
損失函數為各個樣本損失函數的和,f計算的是預測值與真實值y之間的損失值。預測值依賴于輸入值x,網絡結構 ,網絡參數。
之前學習sgd,?
這里?步長有關,太大 會有可能不收斂diverge,太小,時間成本大slow converge.
理論上:滿足以下條件時SGD一定會收斂。
? 式子1
?式子2
舉例當時,?不符合式子1.
通常? 其中?是固定的類似于常數項,?是下降函數。
上面都是理論 的,??使用了變長的步長。
實際情況下,我們想要驗證某個模型的準確率,一開始我們不確定是不是我們程序是不是正確的。
使用固定步長小一些,有助于我們先跑通,減少不確定性參數,方便定位問題。第二步再去做調優。
Early Stopping
這個圖x軸,代表的是nums of epochs. y軸是錯誤數
epoch 是指當一個完整的數據集通過了神經網絡一次并且返回了一次,(換個說法所有訓練樣本在神經網絡中都進行了一次正向傳播和一次反向傳播?)
為啥要nums of epochs 》1?或者要更新多次。
我們需要將完整的數據集在同樣的神經網絡中傳遞多次效果更好,通常會驗著上圖畫大的那樣在訓練數據上。
?通常我們 在訓練的時候已經把數據提前分好了,一部分數據是訓練數據,一部分數據是驗證數據。一邊在訓練集上訓練,一邊也在驗證集上驗證的。注意豎線左側分割為欠擬合,右側過擬合。
在驗證的時候突然發現錯誤率在驗證集上提高了,那就要停下來。在這個點上的參數就是我們最優的參數了。這里老師用了表達叫with look ahead.?
? ?不是上升了立即停,此時可能存在波動的情況,就是截圖的右下角綠色曲線。遇到錯誤率上升了我們先把這個節點記下來,再執行10個循環試試,確實上升了。才真正停止。
在深度學習訓練的時候我們經常會采用EarlyStopping的方式,老師認為它跟dropout? 都是有效的防止過擬合的方法。
補充一個現象:traindata? 與驗證數據 之間曲線距離叫gap.? 簡單模型如線性回歸會比較接近,但是復雜模型如RNN會差距大。
?
?
總結
以上是生活随笔為你收集整理的NLP学习笔记40-神经网络收敛性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数值优化:经典一阶确定性算法及其收敛性分
- 下一篇: Pymoo学习 (5):收敛性分析