李宏毅机器学习课程3~~~梯度下降法
梯度下降法描述
梯度下降法是為了找到最優的目標函數,尋找的過程就是沿著損失函數下降的方向來確定參數變化的方向。參數更新的過程就是一個不斷迭代的過程,每次更新參數學到的函數都會使得誤差損失越來越小,也就是說學習到的參數函數越來越逼近最優函數。
參數的更新是按照損失函數的等高線的方向進行的。
梯度下降是一階導數,梯度下降是用平面來逼近局部。
牛頓法是二階導數,牛頓法是用曲面逼近局部。
梯度下降法調整學習速率
可視化:參數更新的變化與損失的變化情況。藍色線表示的是學習率太小,導致損失下降太慢。綠色線表示的是學習速率變大,損失很快就變小,但是后面有卡住了,損失不在變化。黃色線表示的是學習速率太大,直接導致損失爆炸。紅色的線是理想的學習速率。
一般情況,在剛開始的時候,可以設置比較大的學習速率,這樣可以快速接近最優的函數。經過幾epochs后,我們會接近最優的函數,這時可以降低學習速率,來確定最終的參數。
不同的參數不同的學習速率。
梯度下降法Adagrad調整學習速率
調節學習率方法一,Adagrad
Adagrade的具體實現過程,學習率的變化與之前微分平方和的均方根有關。Adagrad 可以給不同參數給予不同的學習速率Learning Rate.根據計算公式可以看出,學習速率與前面所有梯度都有關系,是一個梯度平方和的均方根。
Adagrade矛盾的地方是分子是較大的梯度會有較大的step,而分母是較大的梯度反而會有較小的step。這個合理的解釋是每次梯度變化的反差。(現在的梯度與過去梯度之間的反差,見下圖)
Adagrade的第二種合理解釋
一個參數的一階微分,比較合理的步伐應該是與梯度成正比的。因為這樣的步伐才能快速的接近最優點位置,如圖中的極值點。初始點x0與極值點的距離為|2ax0+b|/|2a|,所以最佳的步伐就是|2ax0+b|/|2a|,這個步伐與在x0的一階微分值(|2ax+b|)成正比。
多個參數的一階微分。從圖中可以看出,對于參數w1來說,a點的微分值大于b點的微分值,所以a點的步伐選擇應該大于b點的步伐選擇。同樣參數w2,也是c點的微分值大于d點的微分值,所以c點的步伐值的選擇應該比d點的步伐值要大。
但是我們比較a點和c點的步伐值的選擇。綜合比較發現c點的微分值大于a點的微分值,但實際上是a點離最優點的位置比c點離最優點的位置要大。
所以對于多參數的情況,僅僅根據微分值的大小來確定最終的學習速率(步伐)是不合理的。
對于一個參數的一階微分,我們發現最優步伐是|2ax0+b|/|2a|,分母實際上二階微分,所以最優的步伐選擇應該是 |First derivative|/|Second derivative|
同樣對于多個參數的情況,也需要考慮二階微分,最優的步伐選擇應該是 |First derivative|/|Second derivative|。a點的一階微分較小,a點的二階微分也較小。c點一階微分較大,二階微分也較大。
Adagrade可以類比于這種形式|First derivative|/|Second derivative|。那為什么Adagrade不直接算二階微分,而分母使用的是一次微分呢?這是因為算二次微分會增加計算量,效果不一定比Adagrade現在的效果好。Adagrad在沒有增加計算量的情形下,直接使用一階微分的均方和根,有時候效果比|First derivative|/|Second derivative|不差。
調節學習率方法二,RMSProp。
RMSProp也可以給予不同參數給予不同的學習速率 Learning Rate,即不同參數方向有不同的學習速率。 此外,針對同一方向,可以動態調整學習速率,比如說,在某個區域較為平坦,則需要較小的Learning Rate, 在另外一個區域突然很陡峭,則需要大的學習速率。
根據計算公式可以看出,學習速率與前面所有梯度都有關系,只是給出了新的梯度和舊的梯度給予不同的權重,當相信新的梯度時,給予新的梯度更大的權重,當相信舊的梯度給予舊的梯度更大的權重。
解決局部極值,鞍點的問題,Momentum
慣性的計算可以發現慣性與之前所有的梯度是有關的。通俗的理解為對梯度的平均,使得縱向的擺動變小了,橫向的運動更快了。可加快梯度下降。
Adam: RMSProp 和 Momentum的結合體。
RMSProp + Momentum
梯度下降法Stochastic Gradient Descent調整學習速率
隨機梯度下降法每次只考慮一個樣本,可以重復取一個樣本,也可以按次序取一個樣本。而梯度下降法考慮的是整體所有的樣本。
隨機梯度下降法的學習速率更新了20次(每次只看一個樣本),而梯度下降法的速率只更新了一次(每次看所有的20個樣本)。所以隨機梯度下降法的速率更新速度比較快。
Feature Scaling
不同尺度的特征值,會導致每種特征對損失函數的影響不同。通常情況下,較大尺度的特征對損失函數的影響較大,而那些尺度較小的其他特征對損失函數的影響較小。這就會使得那些尺度較小的特征失去意義。
特征尺度歸一化的原理,最終導致每種特征都是0均值,方差為1的特征。
正則化輸入,可加速訓練。二維示例圖非常有參考價值,可總結借鑒該圖。為何歸一化,可加速訓練,見可參看圖。
不做歸一化,則需要選擇較小的學習速率,較小的步長。而歸一化后的數據,則可選擇較大的步長,這樣學習速率就比較快了。
Gradient Descent Theory
當x接近x0時,泰勒展開可以縮簡為如上形式,后面的高階可以忽略不計。
同理,多參數泰勒展開也可以有類似縮簡。
當紅圈足夠小時,損失函數可以縮簡為如上形式。
當紅圈足夠小,也就是半徑足夠小,也就是學習速率足夠小時,可以很容易得到theata與u,v反向,足夠長到半徑尺度時,才能使得損失函數最小。那么最后給出的學習速率是與梯度成正比的。
上式成立的前提是學習速率足夠小,當選擇的學習速率不恰當時,就會出現損失函數來回波動,并不是一直變小。
梯度下降法的局限性
梯度下降法是找損失函數的局部極值點,也就是梯度為零的點。有時候,梯度為零的點并不總是局部極值點,還有可能是鞍點。實際上,我們往往會選擇梯度比較小的點,來停止我們的參數更新,這時認為我們找到了局部極值點。如上圖所示,梯度比較小的點,有可能是高原平穩點。
Deep Learning會陷入局部最優解的問題
本部分內容轉自:https://www.zhihu.com/question/38549801
對于deep learning,我們是在一個非常高維的世界里做梯度下降。這時的 local minimum 很難形成,因為局部最小值要求函數在所有維度上都是局部最小。更實際得情況是,函數會落到一個saddle-point上,如下圖
在saddle-point上會有一大片很平坦的平原,讓梯度幾乎為0,導致無法繼續下降。反倒是local/global minimum的問題,大家發現其實不同的local minimum其實差不多(反正都是over-fitting training data),一般難找到local minimum,找到的一般是saddle point.
對于saddle point, 可以使用momentum技術。
多層神經網絡,大部分局部極小值都在底部 ,已經非常接近全局最小值,可參考上圖。訓練到底的全局最小值往往意味著過擬合 ,找到全局最小也許反而是件壞事。
?(Pascanu,Dauphin, Ganguli,Bengio,arXiv May 2014): On the saddle point problem for non-convex optimization
?(Dauphin,Pascanu,Gulcehre,Cho,Ganguli,Bengio,NIPS’2014):
identifying and attacking the saddle point problem in high-dimensional non-convex optimization
《Qualitatively characterizing neural network optimization problems》這篇也簡單的論證了sgd中local minimum并不是大問題
參考文獻
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
總結
以上是生活随笔為你收集整理的李宏毅机器学习课程3~~~梯度下降法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钛金卡是什么级别的信用卡?钛金卡等级额度
- 下一篇: 李宏毅机器学习课程4~~~分类:概率生成