機(jī)器學(xué)習(xí)中的無(wú)約束優(yōu)化算法摩渺,包括最小二乘简烤、梯度下降、牛頓/擬牛頓法摇幻;樣本量不算很大横侦,且存在解析解挥萌,可選用最小二乘法,速度快枉侧;樣本量大時(shí)使用梯度下降或牛頓法引瀑,二者區(qū)別是梯度下降是梯度求解,牛頓法是二階Hessian矩陣的逆或者偽逆矩陣求解榨馁,相對(duì)而言憨栽,牛頓法收斂快,但每次迭代比梯度下降長(zhǎng)
1辆影、最小二乘
待補(bǔ)充....
2徒像、梯度下降
在機(jī)器學(xué)習(xí)算法中,模型實(shí)例化后就可以給出明確的目標(biāo)函數(shù)蛙讥,我們的目標(biāo)是使得目標(biāo)函數(shù)的表達(dá)逼近真實(shí)值锯蛀,在優(yōu)化目標(biāo)函數(shù)時(shí),最開(kāi)始的就是梯度下降次慢。
[圖片上傳失敗...(image-1fa3d0-1569724487072)]
梯度下降的思想:
因?yàn)樽兞靠臻g中的某一點(diǎn)沿著梯度方向具有最大的變化率旁涤,因此每一步沿著梯度下降的方向去減小函數(shù)值,能更快達(dá)到優(yōu)化目標(biāo)(如極大/極小值)迫像。
梯度下降的步驟
- 確認(rèn)優(yōu)化模型和損失函數(shù)
- 相關(guān)參數(shù)初始化 (如起始位置(默認(rèn)0)劈愚、步長(zhǎng)(學(xué)習(xí)率)、終止距離)
- 確定當(dāng)前位置的梯度
- 確定當(dāng)前下降距離
- 根據(jù)下降的梯度進(jìn)行更新
以線性回歸為例:
- 對(duì)應(yīng)假設(shè)函數(shù)為:
損失函數(shù)為:
- 初始都設(shè)置為0闻妓,步長(zhǎng)為0.1, 終止距離為1e-5或者1e-8
- 當(dāng)前位置梯度:
- 下降距離:
- 參數(shù)更新:
3菌羽、梯度下降家族
上文中的梯度下降(BGD)存在一個(gè)問(wèn)題,就是在使用梯度更新參數(shù)時(shí)由缆,全部樣本參與梯度運(yùn)算注祖,當(dāng)樣本量很大時(shí)更新參數(shù)變慢和困難
因此就有了SGD和Mini-Batch GD
其中SGD是每次只選擇一個(gè)樣本進(jìn)行參數(shù)的更新
for i = 1 to m{
}
Mini-Batch是每次取其中小批量樣本進(jìn)行參數(shù)的更新,是BGD和SGD的折中方案均唉。
4是晨、從SGD到Adam
在深度學(xué)習(xí)領(lǐng)域,優(yōu)化算法得到了極大的發(fā)展舔箭,脈絡(luò)是SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam罩缴。
總體而言,優(yōu)化算法的步驟可分為幾個(gè)部分:
待優(yōu)化的參數(shù):层扶,目標(biāo)函數(shù):箫章,初始學(xué)習(xí)率,對(duì)每個(gè)epoch
- 計(jì)算目標(biāo)函數(shù)關(guān)于當(dāng)前參數(shù)的梯度:
- 根據(jù)歷史梯度計(jì)算一階動(dòng)量和二階動(dòng)量
- 計(jì)算當(dāng)前時(shí)刻的下降梯度:
- 根據(jù)下降梯度進(jìn)行更新:
而不同的優(yōu)化算法對(duì)于步驟3和4基本一致怒医,主要差別體現(xiàn)在1和2上
- SGD 沒(méi)有動(dòng)量的概念炉抒,則, ,帶入3就是稚叹,SGD的缺點(diǎn)是慢焰薄,可能會(huì)造成在溝壑兩邊震蕩拿诸,停留在局部最優(yōu)點(diǎn)。
- SGD with Momentum
改進(jìn)點(diǎn)在于2塞茅,在SGD基礎(chǔ)上引入了一階動(dòng)量亩码,,一階動(dòng)量是各個(gè)時(shí)刻梯度方向的指數(shù)移動(dòng)平均野瘦,約等于個(gè)時(shí)刻的梯度向量和的平均值描沟。若為0.9則時(shí)刻的梯度由當(dāng)前時(shí)刻與前10個(gè)時(shí)刻的梯度共同決定,此時(shí)之前的時(shí)刻就占主導(dǎo)地位鞭光。 - SGD with Nesterov Acceleration
改進(jìn)點(diǎn)在1吏廉,因?yàn)樵赟GD with Momentum中當(dāng)前下降的方向由之前的累積動(dòng)量決定,因?yàn)橐粋€(gè)思路是直接改變梯度的方向惰许,不直接計(jì)算梯度而是計(jì)算按照積累動(dòng)量走一步后的下降方向:
再用下一個(gè)點(diǎn)的梯度方向與歷史積累動(dòng)量相結(jié)合席覆,計(jì)算2中當(dāng)前時(shí)刻積累的動(dòng)量。
- AdaGrad
引入了二階動(dòng)量汹买,即自適應(yīng)學(xué)習(xí)率佩伤,我們希望經(jīng)常更新的參數(shù),學(xué)習(xí)率低一些晦毙,偶爾更新的參數(shù)生巡,學(xué)習(xí)率大些,度量更新頻率的就是二階動(dòng)量:
此時(shí)的學(xué)習(xí)率有變成了见妒,單調(diào)遞減孤荣,至0.
- AdaDelta / RMSProp
對(duì)于二階動(dòng)量,不累積全部梯度须揣,只關(guān)注一段時(shí)間窗口的下降梯度
- Adam
結(jié)合了一階動(dòng)量和二階動(dòng)量垃环,SGD的一階動(dòng)量
加上AdaDelta的二階動(dòng)量:
- Nadam
在adam的基礎(chǔ)上又加上了Nesterov
需要指出的是,常用的Adam和SGD返敬,但是Adam肯能存在不收斂和錯(cuò)過(guò)全局最優(yōu)解的問(wèn)題,所以?xún)?yōu)先使用SGD寥院,也可以先用Adam快速下降劲赠,再SGD調(diào)優(yōu),不過(guò)涉及什么時(shí)候切換算法秸谢,切換后用什么樣的學(xué)習(xí)率的問(wèn)題(Adam用自適應(yīng)的凛澎,SDG得人為給定)
5、牛頓/擬牛頓法
未完待續(xù)....
6估蹄、梯度爆炸塑煎、梯度消失問(wèn)題
在深度網(wǎng)絡(luò)中,使用梯度下降會(huì)引發(fā)梯度爆炸和梯度消失的問(wèn)題臭蚁,梯度消失是因?yàn)榉聪騻鞑ミ^(guò)程中對(duì)梯度的求解會(huì)產(chǎn)生sigmoid導(dǎo)數(shù)和參數(shù)的連乘最铁,sigmoid導(dǎo)數(shù)的最大值為0.25讯赏,權(quán)重一般初始都在0,1之間冷尉,乘積小于1漱挎,多層的話就會(huì)有多個(gè)小于1的值連乘,導(dǎo)致靠近輸入層的梯度幾乎為0雀哨,得不到更新磕谅。梯度爆炸是也是同樣的原因,只是如果初始權(quán)重大于1雾棺,或者更大一些膊夹,多個(gè)大于1的值連乘,將會(huì)很大或溢出捌浩,導(dǎo)致梯度更新過(guò)大放刨,模型無(wú)法收斂。
解決梯度爆炸和梯度消失的方法有:
- 正則
正則的方法主要是針對(duì)梯度爆炸嘉栓,加入正則項(xiàng)使得權(quán)值不至于太大宏榕,一定程度上避免梯度爆炸的發(fā)生。
- 改變激活函數(shù)
一般是Relu激活函數(shù)侵佃,因?yàn)樵谡龜?shù)部分其導(dǎo)數(shù)為1也就解決了累乘時(shí)梯度爆炸和梯度消失的問(wèn)題麻昼,同時(shí)因計(jì)算方便也加速了網(wǎng)絡(luò)的訓(xùn)練。因負(fù)數(shù)部分直接置為0會(huì)導(dǎo)致一些神經(jīng)元無(wú)法激活馋辈,因此可采用Leaky Relu - BN
Batch Normalization即批規(guī)范化抚芦,
BN加速網(wǎng)絡(luò)收斂速度,提升訓(xùn)練穩(wěn)定性的效果
更加詳細(xì)的關(guān)于BN的解釋見(jiàn): - 殘差結(jié)構(gòu)
殘差網(wǎng)絡(luò)的設(shè)計(jì)就是為了解決神經(jīng)網(wǎng)絡(luò)層數(shù)增加時(shí)造成的梯度消失問(wèn)題迈螟, - 類(lèi)似lstm由*變+
參考文章:
https://zhuanlan.zhihu.com/p/32230623
https://www.cnblogs.com/pinard/p/5970503.html