優(yōu)化方法
- 梯度下降
- 梯度下降是一種優(yōu)化算法邢享,通過迭代的方式尋找模型的最優(yōu)參數(shù);
- 所謂最優(yōu)參數(shù)指的是使目標函數(shù)達到最小值時的參數(shù);
- 當目標函數(shù)是凸函數(shù)時,梯度下降的解是全局最優(yōu)解扛禽;但在一般情況下,梯度下降無法保證全局最優(yōu)
- 梯度僅僅指示了對于每個參數(shù)各自增長最快的方向皱坛;因此编曼,梯度無法保證全局方向就是函數(shù)為了達到最小值應該前進的方向
- 正負號在告訴輸入向量應該調大還是調小(正調大,負調惺1佟)
- 每一項的相對大小表明每個參數(shù)對函數(shù)值達到最值的影響程度掐场;
- 隨機梯度下降
- 上一個梯度下降的問題在于每次使用全部的數(shù)據(jù)進行計算往扔,當數(shù)據(jù)量很大的時候,需要很大的計算資源熊户。
- 隨機梯度下降每次取一個數(shù)據(jù)進行計算萍膛,計算速度快。
- 小批量SGD的更新過程
每次選擇一批數(shù)據(jù)放到網絡中嚷堡。
- 使用批訓練的另一個主要目的蝗罗,是為了利用高度優(yōu)化的矩陣運算以及并行計算框架
批的大小對于批量SGD的影響
大的批量:得到更加精確的梯度估計
小的批量:能得到更好的泛化誤差,原因是添加了干擾蝌戒,但是意味著更長的訓練時間串塑。
-
批的大小為2的n次方時候,充分利用矩陣運算北苟。
批運算計算公式
image.png -
存在的問題:
* 放棄了梯度的準確性拟赊,僅采用一部分樣本來估計當前的梯度;因此 SGD 對梯度的估計常常出現(xiàn)偏差粹淋,造成目標函數(shù)收斂不穩(wěn)定吸祟,甚至不收斂的情況。- 容易陷入局部最小值桃移,例如峽谷和鞍點
梯度下降的改進:
- 慣性保持(動量)
- 環(huán)境感知(自適應的調整學習率)
帶動量的SGD算法
動量的概念:例如紙團在峽谷中會很慢屋匕,來回反彈,但是如果換成鐵球會很快借杰,
公式
image.png
動量的迭代更新公式如下
image.png
添加了一個以往的更新方向过吻,假設其上一次的方向和本次方向相同,則會在相同的方向上不斷加速蔗衡。
NAG算法
NAG算法把梯度計算放在對參數(shù)附加當前速度之后纤虽。
image.png
自適應的梯度更新方法:
AdaGrad
基本思想:
- 較大的偏導具有較大的學習率,較小的偏導有較小的學習率
問題: - 學習率是單調遞減的绞惦,訓練后期學習率過小會導致訓練困難逼纸,甚至提前結束
RMSProp
基本思想:解決AdaGrad后期的學習率較小,導致難以訓練的問題济蝉。
- 使用指數(shù)衰減平均(遞歸定義)以丟棄遙遠的歷史杰刽,也就是代替r,使其能夠在找到某個“凸”結構后快速收斂王滤;此外贺嫂,RMSProp 還加入了一個超參數(shù) ρ 用于控制衰減速。
問題: - 仍然需要設置一個全局衰減率雁乡,還有一個全局學習率第喳。
AdaDelta
- AdaDelta 進一步解決了 AdaGrad 需要設置一個全局學習率的問題
Adam
- 除了加入歷史梯度平方的指數(shù)衰減平均(r)外,還保留了歷史梯度的指數(shù)衰減平均(s)踱稍,相當于動量曲饱。
基于二階梯度的牛頓法
- 梯度下降算法本質上是使用一階梯度去擬合吩跋,而牛頓法使用的是二階梯度,二階梯度是一個曲面渔工,反應的是梯度的變化率锌钮,一階梯度是平面。
- 通常情況下引矩,二次曲面的擬合會比平面更好梁丘,所以牛頓法選擇的下降路徑會更符合真實的最優(yōu)下降路徑。
- 通俗理解
比如你想找一條最短的路徑走到一個盆地的最底部旺韭,
梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步氛谜;
牛頓法在選擇方向時,不僅會考慮坡度是否夠大区端,還會考慮你走了一步之后值漫,坡度是否會變得更大。
所以织盼,牛頓法比梯度下降法看得更遠杨何,能更快地走到最底部。 - 牛頓法優(yōu)點
更新速度更快
-牛頓法缺點:
每一次都需要計算二階導數(shù)沥邻,速度過慢危虱。