批量梯度下降和隨機(jī)梯度下降是機(jī)器學(xué)習(xí)中很常用的學(xué)習(xí)方法,批量梯度下降更為準(zhǔn)確,但是每一輪訓(xùn)練都要遍歷全部的樣本而隨機(jī)梯度下降則沒(méi)有這一問(wèn)題,但是他最后的結(jié)果會(huì)在局部最優(yōu)解附近波動(dòng)。下面看看這兩個(gè)算法吧!
批量梯度下降
顧名思義,我們把所有的訓(xùn)練樣本看做一批,每次更新參數(shù)都要對(duì)他們一起遍歷來(lái)判斷走向,例如對(duì)于一個(gè)實(shí)際的問(wèn)題,我們可以用下面的式子來(lái)表示我們的假設(shè):
我們希望hθ(x)可以準(zhǔn)確的預(yù)測(cè)新的樣本也就是,新的樣本的結(jié)果與我們的結(jié)果盡可能的接近,可以用下面的代價(jià)函數(shù)表示這一思想:
那么我們的目標(biāo)就是找到合適的θ使得J的值最小,此時(shí)使用批量梯度下降找到合適的θ:
可以看到他是對(duì)于所有的樣本進(jìn)行了遍歷在每次梯度下降的過(guò)程中。
當(dāng)上式收斂時(shí)則退出迭代,何為收斂,即前后兩次迭代的值不再發(fā)生變化了。一般情況下,會(huì)設(shè)置一個(gè)具體的參數(shù),當(dāng)前后兩次迭代差值小于該參數(shù)時(shí)候結(jié)束迭代。注意以下幾點(diǎn):
(1) a 即learning rate,決定的下降步伐,如果太小,則找到函數(shù)最小值的速度就很慢,如果太大,則可能會(huì)出現(xiàn)overshoot the minimum的現(xiàn)象;
(2) 初始點(diǎn)不同,獲得的最小值也不同,因此梯度下降求得的只是局部最小值;
(3) 越接近最小值時(shí),下降速度越慢;
(4) 計(jì)算批梯度下降算法時(shí)候,計(jì)算每一個(gè)θ值都需要遍歷計(jì)算所有樣本,當(dāng)數(shù)據(jù)量的時(shí)候這是比較費(fèi)時(shí)的計(jì)算。
批梯度下降算法的步驟可以歸納為以下幾步:
(1)先確定向下一步的步伐大小,我們稱(chēng)為L(zhǎng)earning rate ;
(2)任意給定一個(gè)初始值:θ向量,一般為0向量
(3)確定一個(gè)向下的方向,并向下走預(yù)先規(guī)定的步伐,并更新θ向量
(4)當(dāng)下降的高度小于某個(gè)定義的值,則停止下降;
隨機(jī)梯度下降
隨機(jī)梯度下降與批量梯度下降最大的區(qū)別是他不是使用全部的樣本進(jìn)行一次下降,而是使用一部分或者一個(gè)樣本進(jìn)行下降,我們隨機(jī)的選擇樣本選擇一個(gè)或每次選擇N個(gè)直到收斂。
在對(duì)于大數(shù)量樣本的情況下假設(shè)我們需要10輪達(dá)到收斂,那么批量梯度需要10*K次迭代,而隨機(jī)梯度可能在K/2次就達(dá)到收斂,會(huì)快得多。但是兩者各有優(yōu)缺點(diǎn)。
主要就是在于1是速度,2是準(zhǔn)確性。還有就是BGD的學(xué)習(xí)速率比SGD大。
擬牛頓法
前一篇文章說(shuō)了牛頓法下降更快但是在特征過(guò)多的情況下海森陣的計(jì)算很慢,所以不適用于機(jī)器學(xué)習(xí),除了上述的SGD與BGD,參數(shù)優(yōu)化還可以使用偽牛頓法。
擬牛頓法和梯度下降法(Steepest Descent Methods)一樣只要求每一步迭代時(shí)知道目標(biāo)函數(shù)的梯度。通過(guò)測(cè)量梯度的變化,構(gòu)造一個(gè)目標(biāo)函數(shù)的模型使之足以產(chǎn)生超線性收斂性。這類(lèi)方法大大優(yōu)于最速下降法,尤其對(duì)于困難的問(wèn)題。另外,因?yàn)閿M牛頓法不需要二階導(dǎo)數(shù)的信息,所以有時(shí)比牛頓法(Newton's Method)更為有效。如今,優(yōu)化軟件中包含了大量的擬牛頓算法用來(lái)解決無(wú)約束,約束,和大規(guī)模的優(yōu)化問(wèn)題。
擬牛頓法就是模仿牛頓法,主要是不用二階偏導(dǎo)數(shù)構(gòu)造出近似海森陣的正定對(duì)稱(chēng)陣。
擬牛頓條件
來(lái)自
http://blog.csdn.net/itplus/article/details/21896619
常見(jiàn)的擬牛頓法
DFP算法:http://blog.csdn.net/itplus/article/details/21896981
BFGS算法:
http://blog.csdn.net/itplus/article/details/21897443
L-BFGS算法:
http://blog.csdn.net/itplus/article/details/21897715