DL3 - optimization algorithms
title: DL3 - 加快神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度的優(yōu)化算法
date: 2019-08-17 02:40:57
tags: deeplearning
categories: deeplearning
Welcome to MyBlog!
本文所以截圖以及文字均來(lái)自于:Coursera
1 小批量梯度下降算法(mini-batch gradient descent)
首先將你的訓(xùn)練集拆分成更小的 微小的訓(xùn)練集 即小批量訓(xùn)練集(mini-batch) 比如說(shuō)每一個(gè)微型訓(xùn)練集只有1000個(gè)訓(xùn)練樣例 也就是說(shuō) 取x1至x1000作為第一個(gè)微訓(xùn)練集 也叫做小批量訓(xùn)練集 然后取接下來(lái)的1000個(gè)樣例 x1001至x2000這1000個(gè)樣例 依次繼續(xù)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6i3VgsjS-1610775595598)(https://i.loli.net/2019/08/28/57gxIMFENLkJWv9.png)]
將mini-batch極端的設(shè)置為m,就得到了批量梯度下降
極端地設(shè)置為1,就得到了隨機(jī)梯度下降
兩種方法的區(qū)別:批量梯度下降算法可能從這里開(kāi)始 它的噪聲相對(duì)小些 每一步相對(duì)大些 并且最終可以達(dá)到最小值 而相對(duì)的 隨機(jī)梯度下降算法 讓我們選一個(gè)不同的點(diǎn) 假使從這里開(kāi)始 這時(shí)對(duì)于每一次迭代你就在一個(gè)樣本上做梯度下降 大多數(shù)時(shí)候你可以達(dá)到全局最小值 但是有時(shí)候也可能因?yàn)槟辰M數(shù)據(jù)不太好 把你指向一個(gè)錯(cuò)誤的方向 因此隨機(jī)梯度算法的噪聲會(huì)非常大 一般來(lái)說(shuō)它會(huì)沿著正確的方向 但是有事也會(huì)指向錯(cuò)誤的方向 而且隨機(jī)梯度下降算法 最后也不會(huì)收斂到一個(gè)點(diǎn) 它一般會(huì)在最低點(diǎn)附近擺動(dòng) 但是不會(huì)達(dá)到并且停在那里 實(shí)際上 mini-batch的大小一般會(huì)在這2個(gè)極端之間
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6m4QwgoX-1610775595599)(https://i.loli.net/2019/08/28/YQXVuR8HgA4lrd3.png)]
2 指數(shù)加權(quán)(滑動(dòng))平均
beta*V_(t-1)加上 之前使用的是0.1 現(xiàn)在把它換成(1-beta)*theta_t 之前beta=0.9 出于我們之后會(huì)講的某些原因 當(dāng)你計(jì)算這個(gè)公式的時(shí)候 你可以認(rèn)為V_t近似于 1/(1-beta)天溫度的平均 舉例來(lái)說(shuō) 當(dāng)beta=0.9的時(shí)候 你可以認(rèn)為它是前10天的氣溫平均值
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PWzzACD4-1610775595600)(https://i.loli.net/2019/08/28/Y1HuTEiq6vUFjPl.png)]
3 偏差修正
它能夠幫助你更好地計(jì)算平均值
工作原理:用vt/1-βt代替vt(t是下標(biāo))
在機(jī)器學(xué)習(xí)中 多數(shù)的指數(shù)加權(quán)平均運(yùn)算 并不會(huì)使用偏差修正 因?yàn)榇蠖鄶?shù)人更愿意在初始階段 用一個(gè)稍帶偏差的值進(jìn)行運(yùn)算 不過(guò) 如果在初始階段就開(kāi)始考慮偏差 指數(shù)加權(quán)移動(dòng)均指仍處于預(yù)熱階段 偏差修正可以幫你盡早做出更好的估計(jì)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SuX0Q2Ng-1610775595601)(https://i.loli.net/2019/08/28/9IXPFviqufD4YoS.png)]
4 動(dòng)量梯度下降算法
它幾乎總會(huì)比標(biāo)準(zhǔn)的梯度下降算法更快 一言以蔽之 算法的主要思想是 計(jì)算梯度的指數(shù)加權(quán)平均 然后使用這個(gè)梯度來(lái)更新權(quán)重
可以減少震蕩,原因:如果把這些梯度平均一下 你會(huì)發(fā)現(xiàn)這些震蕩 在縱軸上的平均值趨近于0 所以 在垂直方向上 你會(huì)希望減慢速度 正數(shù)和負(fù)數(shù)在計(jì)算平均時(shí)相互抵消了 平均值接近于0 然而在水平方向上 所有導(dǎo)數(shù)都指向水平方向的右邊 所以水平方向的平均值仍然較大 因此在數(shù)次迭代之后 你會(huì)發(fā)現(xiàn)動(dòng)量梯度下降算法的每一步 在垂直方向上的振蕩非常小 且在水平方向上運(yùn)動(dòng)得更快 這會(huì)讓你的算法選擇更加直接的路徑 或者說(shuō)減弱了前往最小值的路徑上的振蕩
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-gNCN0hA1-1610775595603)(https://i.loli.net/2019/08/28/akwGWuSgt32xMIj.png)]
5 RMSprop 均方根傳遞(root mean square prop)
你希望減慢b方向的學(xué)習(xí) 也就是垂直方向 同時(shí)加速或至少不減慢水平方向的學(xué)習(xí) 這就是RMSprop算法要做的
現(xiàn)在我們來(lái)理解一下它的工作原理 記得在水平方向上 即例子中W的方向上 我們希望學(xué)習(xí)速率較快 而在垂直方向上 即例子中b的方向上 我們希望降低垂直方向上的振蕩 對(duì)于S_dW和S_db這兩項(xiàng) 我們希望S_dW相對(duì)較小 因此這里除以的是一個(gè)較小的數(shù) 而S_db相對(duì)較大 因此這里除以的是一個(gè)較大的數(shù) 這樣就可以減緩垂直方向上的更新
另一個(gè)收效是 你可以使用更大的學(xué)習(xí)率alpha 學(xué)習(xí)得更快 而不用擔(dān)心在垂直方向上發(fā)散
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iRweA9WM-1610775595605)(https://i.loli.net/2019/08/28/azu2tUcdsJ9qBn7.png)]
6 Adam優(yōu)化算法(自適應(yīng)矩估計(jì)Adaptive Moment Estimation)
Adam優(yōu)化算法本質(zhì)上是將 動(dòng)量算法和RMSprop結(jié)合起來(lái):在動(dòng)量梯度下降算法抵消部分震蕩的前提下,利用了rms梯度下降算法降低震蕩
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iVZCCQ6T-1610775595606)(https://i.loli.net/2019/08/28/3LOcsl7n4fFihtW.png)]
t表示迭代次數(shù)
超參數(shù)的選擇
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6ervWB1u-1610775595607)(https://i.loli.net/2019/08/28/cqlDBOVoQ5GRgWa.png)]
7 學(xué)習(xí)率衰減 learning rate decay
如果你想使用學(xué)習(xí)率衰減 你可以嘗試 不同的超參數(shù)組合 包括α0 以及這個(gè)衰減率的超參數(shù) 然后去嘗試尋找一個(gè)效果好的數(shù)值
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TuFiT57x-1610775595608)(https://i.loli.net/2019/08/28/18qR9I4vEFDBTMr.png)]
7.1 其他學(xué)習(xí)率衰減的方法
k表示常數(shù)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-JLTHlD0d-1610775595609)(https://i.loli.net/2019/08/28/tCSQj5FnGyJoNTO.png)]
8 局部最優(yōu)點(diǎn),鞍點(diǎn)
對(duì)于一個(gè)高維空間的函數(shù) 如果梯度為零 則在每個(gè)方向上 它可能是凸函數(shù) 或者是凹函數(shù) 假設(shè)在一個(gè) 2萬(wàn)維的空間中 如果一個(gè)點(diǎn)要成為局部最優(yōu) 則需要在所有的2萬(wàn)個(gè)方向上都像這樣 因此這件事發(fā)生的概率非常低 大概2的負(fù)2萬(wàn)次方 你更有可能遇到的情況是
某些方向的曲線像這樣向上彎曲 同時(shí)另一些方向的曲線則向下彎曲 并非所有曲線都向上彎曲 這就是為什么在高維空間中 你更有可能碰到一個(gè)像右圖這樣的鞍點(diǎn) 而不是局部最優(yōu)
8.1 停滯區(qū)
實(shí)際上是停滯區(qū)(Plateaus) 停滯區(qū)指的是 導(dǎo)數(shù)長(zhǎng)時(shí)間接近于零的一段區(qū)域 如果你在這里 那么梯度下降會(huì)沿著這個(gè)曲面向下移動(dòng) 然而因?yàn)樘荻葹榱慊蚪咏诹?曲面很平 你會(huì)花費(fèi)很長(zhǎng)的時(shí)間 緩慢地在停滯區(qū)里找到這個(gè)點(diǎn) 然后因?yàn)樽髠?cè)或右側(cè)的隨機(jī)擾動(dòng),你的算法終于能夠離開(kāi)這個(gè)停滯區(qū) 它一直沿著這個(gè)很長(zhǎng)的坡往下走, 直到抵達(dá)此處, 離開(kāi)這個(gè)停滯區(qū)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-L6sPtDKC-1610775595610)(https://i.loli.net/2019/08/28/R3zsKiFMrCyvdu2.png)]
首先 實(shí)際上你不太可能陷入糟糕的局部最優(yōu)點(diǎn) 只要你訓(xùn)練的是一個(gè)較大的神經(jīng)網(wǎng)絡(luò) 有很多參數(shù) 代價(jià)函數(shù)J定義在一個(gè)相對(duì)高維的空間上
其次 停滯區(qū)是個(gè)問(wèn)題, 它會(huì)讓學(xué)習(xí)過(guò)程變得相當(dāng)慢 這也是像動(dòng)量(Momentum)算法
或RmsProp算法 或Adam算法能改善你的學(xué)習(xí)算法的地方
總結(jié)
以上是生活随笔為你收集整理的DL3 - optimization algorithms的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 力库华为机试题练习
- 下一篇: intellij idea cpu占用率