常用梯度下降法與優化器
機器學習中大部分為優化問題,而絕大部分優化問題都可以使用「梯度下降法」處理,
梯度下降法的數學原理是函式沿著梯度方向具有「最大變化率」,那么在優化目標函式時沿著負梯度方向去減少函式值,以此達到優化目標,
通過迭代的方式尋找「最優引數」,最優引數是指是目標函式達到最小值時的引數,
如果目標函式是「凸函式」,那么梯度下降的解是「全域最優解」,不過在一般情況下,梯度下降無法保證全域最優,
Q1 隨機梯度下降與小批量隨機梯度下降
梯度下降法是使用「所有樣本」的平均損失值來更新引數,這樣做可以使得下降更「準確」,但是對應的是如果資料量過大的話會帶來極為「龐大」的計算量,因為每次引數更新都會「遍歷」所有資料,
**隨機梯度下降(SGD)**每次使用單個樣本的損失來近似平均損失,但是會導致準確度不高,常常出現偏差,并且導致目標函式收斂不穩定,甚至不收斂,
「小批量隨機梯度下降」就是為了降低隨機梯度的方差,使得模型迭代更加非穩定,通過批量訓練還有個優點就是利用高度優化的矩陣運算以及并行計算框架,
Q2 動量演算法
動量方法有點類似于二階梯度演算法,從形式上來看,動量演算法引入了變數v充當速度,以及超引數a,a一般取0.5,0.9,0.99,分別表示2倍,10倍,100倍,
動量演算法是為了解決鞍點問題,也可以用于SGD加速,特別是針對高曲率、小幅度但是方向一致的梯度物件,
和物理的近似,一個小球如果沒有慣性,從山上落下只要到達平緩地區就會立即停下,然而也有可能是山上的平地,所以動量模型就相當于增加了慣性,離開平緩的梯度部分,
隨機梯度下降法每次更新的步長只是「梯度乘以學習率」;而動量演算法的步長還取決于「歷史梯度序列」的大小和排列;當若干連續的梯度方向相同時,步長會被不斷增大,
Q3 NAG演算法(Nesterov動量)
NAG是對引數施加當前速度后才進行梯度計算的,這個設計使得演算法有了對前方環境「預判」的能力,換句話講,NAG演算法相當于在標準動量方法中添加一個「修正因子」,并且在計算引數的梯度時,在「損失函式」中減去了動量項,
Q4 自適應學習率演算法
學習率決定了引數空間搜索的步長,所以非常重要,「但也比較難設定」,
過大的學習率會導致優化方向變得「不穩定」,過小的學習率會使得模型「收斂于區域最優解」,因此,學習率的設定對于模型來講有著很顯著的影響,
而自適應學習率演算法可以根據訓練的進度來自動調節學習率的大小,在剛開始的時候引數的值距離最優解很遠,所以采用偏大的學習率,隨著引數值越來越逼近最優值,應該使用比較小的學習率,
以下介紹3種重要的自適應率學習演算法,
(1) 「AdaGrad」
「AdaGrad」演算法雖然可以自動適應學習率,但還需要設定一個學習率γ,這并不是實際的學習率,而是與「以往引數的模」的和成反比的,具有損失最大偏導數的引數學習率下降比較快,而具有小偏導數的引數在學習率上下降比較小,
(2) 「RMSProp」
「RMSrop」演算法是AdaGrad演算法的升級版,在非凸優化問題上表現很好,因為它使用指數衰減來處理歷史資訊,可以使得模型在找到凸結構后快速收斂,
RMSProp可以解決「AdaGrad」在多隱層網路中過早結束訓練的缺點,適合處理非平穩的目標,但同時也引入了新的超引數衰減系數,并且依舊依賴于全域學習率,
(3)「Adam」
Adam(Adaptive Moment Estimation)是非常常見的深度學習訓練時使用的優化器、相比于「AdaGrad」,它能讓每次迭代的學習率都處在一定的范圍內,因而比較穩定,
優化演算法的選擇并沒有絕對的原則,沒有那個演算法具有絕對優勢,應根據具體任務來選擇,事實上在面對具體問題時,可以考慮將Adam和RMSprop都訓練一遍,比較差距再選擇較好的優化器,
Q5試比較牛頓迭代法與梯度下降法
首先介紹牛頓迭代法的基本思想,在現有極小點的估計值xk 的附近,對f(x)做二階泰勒展開,從該點的附近找到極值點的下一個估計值,
牛頓迭代演算法:
給定初值X0和精度閾值β,并令k=0 計算gk和Hk 若||gk||<β,則停止迭代,否則確定搜索方向dk=-Hk-1×gk 計算新的迭代點Xk+1=Xk+dk 令k=k+1,轉到步驟2)
由上可得梯度下降法與牛頓下降法最大區別是梯度下降法使用的梯度資訊是「一階導數」,而牛頓法除了使用一階導數外,還會使用「二階導數」的資訊,
牛頓法的優點是收斂快,能使用更少的迭代次數找到最優解,「缺點」是每一步都要「求解目標函式的海森矩陣的逆矩陣」,計算量非常大,
??最后:
??
想要看更多,請點個關注
你看看我的粉絲數??
來了你就是第一個??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36680.html
標籤:其他
