https://www.cnblogs.com/hlongch/p/5734105.html
https://blog.csdn.net/wyisfish/article/details/79828789
1. 梯度下降法(Gradient Descent)
梯度下降法是最早最簡單绊袋,也是最為常用的最優(yōu)化方法藐守。梯度下降法實(shí)現(xiàn)簡單糖驴,當(dāng)目標(biāo)函數(shù)是凸函數(shù)時,梯度下降法的解是全局解年局。一般情況下级及,其解不保證是全局最優(yōu)解拼卵,梯度下降法的速度也未必是最快的。梯度下降法的優(yōu)化思想是用當(dāng)前位置負(fù)梯度方向作為搜索方向虏杰,因?yàn)樵摲较驗(yàn)楫?dāng)前位置的最快下降方向讥蟆,所以也被稱為是”最速下降法“。最速下降法越接近目標(biāo)值纺阔,步長越小瘸彤,前進(jìn)越慢。
在機(jī)器學(xué)習(xí)中笛钝,基于基本的梯度下降法發(fā)展了兩種梯度下降方法质况,分別為隨機(jī)梯度下降法和批量梯度下降法。
比如對一個線性回歸(Linear Logistics)模型玻靡,假設(shè)下面的h(x)是要擬合的函數(shù)拯杠,J(theta)為損失函數(shù),theta是參數(shù)啃奴,要迭代求解的值潭陪,theta求解出來了那最終要擬合的函數(shù)h(theta)就出來了。其中m是訓(xùn)練集的樣本個數(shù)最蕾,n是特征的個數(shù)依溯。
批梯度下降 BGD(Batch Gradient Descent)
或者把1/m ?用步長a代替
(3)從上面公式可以注意到瘟则,它得到的是一個全局最優(yōu)解黎炉,但是每迭代一步,都要用到訓(xùn)練集所有的數(shù)據(jù)醋拧,如果m很大慷嗜,那么可想而知這種方法的迭代速度會相當(dāng)?shù)穆淼K裕@就引入了另外一種方法庆械。
隨機(jī)梯度下降(stochastic gradient descent) or 增量梯度下降(incremental gradient descent)
∞崩!(3)隨機(jī)梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬)缭乘,那么可能只用其中幾萬條或者幾千條的樣本沐序,就已經(jīng)將theta迭代到最優(yōu)解了,對比上面的批量梯度下降堕绩,迭代一次需要用到十幾萬訓(xùn)練樣本策幼,一次迭代不可能最優(yōu),如果迭代10次的話就需要遍歷訓(xùn)練樣本10次奴紧。但是特姐,SGD伴隨的一個問題是噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優(yōu)化方向黍氮。
隨機(jī)梯度下降每次迭代只使用一個樣本唐含,迭代一次計(jì)算量為n2,當(dāng)樣本個數(shù)m很大的時候滤钱,隨機(jī)梯度下降迭代一次的速度要遠(yuǎn)高于批量梯度下降方法觉壶。兩者的關(guān)系可以這樣理解:隨機(jī)梯度下降方法以損失很小的一部分精確度和增加一定數(shù)量的迭代次數(shù)為代價,換取了總體的優(yōu)化效率的提升件缸。增加的迭代次數(shù)遠(yuǎn)遠(yuǎn)小于樣本的數(shù)量铜靶。
對批量梯度下降法和隨機(jī)梯度下降法的總結(jié):
批量梯度下降---最小化所有訓(xùn)練樣本的損失函數(shù),使得最終求解的是全局的最優(yōu)解他炊,即求解的參數(shù)是使得風(fēng)險(xiǎn)函數(shù)最小争剿,但是對于大規(guī)模樣本問題效率低下。
隨機(jī)梯度下降---最小化每條樣本的損失函數(shù)痊末,雖然不是每次迭代得到的損失函數(shù)都向著全局最優(yōu)方向蚕苇, 但是大的整體的方向是向全局最優(yōu)解的,最終的結(jié)果往往是在全局最優(yōu)解附近凿叠,適用于大規(guī)模訓(xùn)練樣本情況涩笤。
2 牛頓法和擬牛頓法(Newton's method &?Quasi-Newton Methods)
從本質(zhì)上去看,牛頓法是二階收斂盒件,梯度下降是一階收斂蹬碧,所以牛頓法就更快。如果更通俗地說的話炒刁,比如你想找一條最短的路徑走到一個盆地的最底部恩沽,梯度下降法每次只從你當(dāng)前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時翔始,不僅會考慮坡度是否夠大罗心,還會考慮你走了一步之后里伯,坡度是否會變得更大。所以渤闷,可以說牛頓法比梯度下降法看得更遠(yuǎn)一點(diǎn)疾瓮,能更快地走到最底部。
推廣為向量的情況
其中表達(dá)式中
表示的?(θ)對的偏導(dǎo)數(shù)肤晓;H是一個n*n的矩陣爷贫,稱為Hessian矩陣认然。Hessian矩陣的表達(dá)式為:
牛頓法的優(yōu)缺點(diǎn)總結(jié):
優(yōu)點(diǎn):二階收斂补憾,收斂速度快;
缺點(diǎn):牛頓法是一種迭代算法卷员,每一步都需要求解目標(biāo)函數(shù)的Hessian矩陣的逆矩陣盈匾,計(jì)算比較復(fù)雜。
? 擬牛頓法(Quasi-Newton Methods)
擬牛頓法的本質(zhì)思想是改善牛頓法每次需要求解復(fù)雜的Hessian矩陣的逆矩陣的缺陷毕骡,它使用正定矩陣來近似Hessian矩陣的逆削饵,從而簡化了運(yùn)算的復(fù)雜度。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標(biāo)函數(shù)的梯度未巫。通過測量梯度的變化窿撬,構(gòu)造一個目標(biāo)函數(shù)的模型使之足以產(chǎn)生超線性收斂性。這類方法大大優(yōu)于最速下降法叙凡,尤其對于困難的問題劈伴。另外,因?yàn)閿M牛頓法不需要二階導(dǎo)數(shù)的信息握爷,所以有時比牛頓法更為有效跛璧。如今,優(yōu)化軟件中包含了大量的擬牛頓算法用來解決無約束新啼,約束追城,和大規(guī)模的優(yōu)化問題。
常用的擬牛頓法有DFP算法和BFGS算法(http://blog.csdn.net/qq_27231343/article/details/51791138)
3. 共軛梯度法(Conjugate Gradient)
共軛梯度法是介于最速下降法與牛頓法之間的一個方法燥撞,它僅需利用一階導(dǎo)數(shù)信息座柱,但克服了最速下降法收斂慢的缺點(diǎn),又避免了牛頓法需要存儲和計(jì)算Hesse矩陣并求逆的缺點(diǎn)物舒,共軛梯度法不僅是解決大型線性方程組最有用的方法之一色洞,也是解大型非線性最優(yōu)化最有效的算法之一。?在各種優(yōu)化算法中茶鉴,共軛梯度法是非常重要的一種锋玲。其優(yōu)點(diǎn)是所需存儲量小,具有步收斂性涵叮,穩(wěn)定性高惭蹂,而且不需要任何外來參數(shù)伞插。
(https://en.wikipedia.org/wiki/Conjugate_gradient_method#Example_code_in_MATLAB)
4. 啟發(fā)式優(yōu)化方法
啟發(fā)式方法指人在解決問題時所采取的一種根據(jù)經(jīng)驗(yàn)規(guī)則進(jìn)行發(fā)現(xiàn)的方法。其特點(diǎn)是在解決問題時,利用過去的經(jīng)驗(yàn),選擇已經(jīng)行之有效的方法盾碗,而不是系統(tǒng)地媚污、以確定的步驟去尋求答案。啟發(fā)式優(yōu)化方法種類繁多廷雅,包括經(jīng)典的模擬退火方法耗美、遺傳算法、蟻群算法以及粒子群算法等等航缀。
還有一種特殊的優(yōu)化算法被稱之多目標(biāo)優(yōu)化算法商架,它主要針對同時優(yōu)化多個目標(biāo)(兩個及兩個以上)的優(yōu)化問題,這方面比較經(jīng)典的算法有NSGAII算法芥玉、MOEA/D算法以及人工免疫算法等蛇摸。
我們已經(jīng)知道梯度下降法,需要沿著整個訓(xùn)練集的梯度反向下降灿巧。使用隨機(jī)梯度下降方法赶袄,選取小批量數(shù)據(jù)的梯度下降方向,可以在很大程度上進(jìn)行加速抠藕。SGD及其變種可能是機(jī)器學(xué)習(xí)中應(yīng)用最多的優(yōu)化算法饿肺。我們按照下面的順序一一理解一下這些算法。
SGD->SGDM->NAG->AdaGrad->RMSProp->Adam->Nadam
1盾似、隨機(jī)梯度下降(SGD)
核心是按照數(shù)據(jù)生成分布抽取m個小批量樣本敬辣,通過計(jì)算它們的梯度均值,來得到整體梯度的無偏估計(jì)颜说。
SGD最大的缺點(diǎn)是下降速度慢购岗,而且可能在溝壑的兩邊持續(xù)震蕩,停留在一個局部最優(yōu)點(diǎn)门粪。
2喊积、使用動量的隨機(jī)梯度下降(SGDM)
動量方法旨在加速學(xué)習(xí),特別是處理高曲率玄妈、小但一致的梯度乾吻,或帶噪音的梯度。動量積累了之前梯度指數(shù)級衰減的移動平均拟蜻,并且繼續(xù)沿該方向移動绎签。可以這么理解:為了避免SGD震蕩酝锅,SGDM認(rèn)為梯度下降過程可以加入慣性诡必,下坡的時候如果發(fā)現(xiàn)是陡坡,就利用慣性跑的遠(yuǎn)一點(diǎn)。也就是說梯度下降的方法不僅由當(dāng)前的梯度方向決定爸舒,還由此前積累的下降方向決定蟋字。
這里用速度變量 vv 來表示負(fù)梯度的指數(shù)衰減平均,超參數(shù) α∈[0,1)α∈[0,1) 決定了之前梯度的貢獻(xiàn)衰減得有多快扭勉。更新規(guī)則如下:
3鹊奖、使用Nesterov動量的隨機(jī)梯度下降(NAG)
這是SGD-M的一種變體,用于解決SGD容易陷入局部最優(yōu)的問題涂炎。通俗的理解是:但陷入局部最優(yōu)時忠聚,我們不妨向前多走一步,看更遠(yuǎn)一些唱捣。我們知道動量方法中梯度方向由積累的動量和當(dāng)前梯度方法共同決定两蟀,與其看當(dāng)前梯度方向,不妨先看看跟著積累的動量走一步是什么情況爷光,再決定怎么走垫竞。更新規(guī)則如下:
4澎粟、AdaGrad
我們知道SGD算法中的一個重要參數(shù)是學(xué)習(xí)率蛀序,它對模型的性能有著顯著的影響。那么在整個學(xué)習(xí)過程中自動適應(yīng)這個學(xué)習(xí)率才是正確的做法活烙。
AdaGrad算法的做法是:縮放每個參數(shù)反比于其所有梯度歷史平方值總和的平方根徐裸。具有損失最大偏導(dǎo)的參數(shù)相應(yīng)的有個快速下降的學(xué)習(xí)率,小偏導(dǎo)的參數(shù)具有較小的學(xué)習(xí)率啸盏。效果是在參數(shù)空間中更為平緩的傾斜方向會取得更大的進(jìn)步重贺。
通俗的理解是:對于經(jīng)常更新的參數(shù),我們已經(jīng)積累的大量關(guān)于它的知識回懦,不希望被單個樣本影響太大气笙,所以學(xué)習(xí)率慢一點(diǎn);對于偶爾更新的參數(shù)了解信息少怯晕,希望從樣本中多學(xué)習(xí)點(diǎn)潜圃,即學(xué)習(xí)率大一點(diǎn)。我們用積累的所有梯度值的平方和來度量歷史更新頻率舟茶。
5谭期、AdaDelta/RMSProp
AdaGrad單調(diào)遞減的學(xué)習(xí)率邊化過于激進(jìn)撵割,RMSProp通過:不積累全部歷史梯度结胀,而引入指數(shù)衰減平均來只關(guān)注過去一段時間的下降梯度,丟棄遙遠(yuǎn)過去的歷史梯度丽猬。
6阀捅、Adam
我們總結(jié)上面的算法可以發(fā)現(xiàn):SGD作為最初的算法胀瞪,SGDM在其基礎(chǔ)上加入了一階動量(歷史梯度的累計(jì)),AdaGrad和RMSProp在其基礎(chǔ)上加入了二階動量(歷史梯度的平方累計(jì))饲鄙,那么Adam就是自適應(yīng)?動量了凄诞,其在SGD基礎(chǔ)上加入了一涵紊、二階動量。
7幔摸、最后Nadam就是Adam基礎(chǔ)上按照NAG計(jì)算梯度的變體摸柄。
---------------------
作者:喂魚W_y
來源:CSDN
原文:https://blog.csdn.net/wyisfish/article/details/79828789
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接既忆!