五:最優(yōu)化方法:梯度下降(20191202-1208)

0x00 內容

梯度下降:實現(xiàn)梯度下降、線性回歸中的梯度下降

隨機梯度下降:相關代碼即調用

0x01??梯度下降法(回顧四:0x04?梯度下降法)

最小二乘法求損失函數(shù)的最小值,但是這只是一個特例。大多數(shù)復雜復雜情況下,損失函數(shù)就需要用到“梯度算法”。

從損失值出發(fā),去更新參數(shù),且要大幅降低計算次數(shù)。

多元函數(shù)的導數(shù)(derivative)就是梯度(gradient),分別對每個變量進行微分,然后用逗號分割開,梯度是用括號包括起來,說明梯度其實一個向量。

解決局部最低點方案,:首先隨機產(chǎn)生多個初始參數(shù)集,然后分別對每個初始參數(shù)集使用梯度下降法,直到函數(shù)值收斂于某個值,最后從這些值中找出最小值,這個找到的最小值被當作函數(shù)的最小值。

0x02??梯度下降之前需要使用歸一化(回顧四:0x05)

真實數(shù)據(jù)整體不在一個規(guī)模上,解決的方式,就是在梯度下降之前進行數(shù)據(jù)歸一化

0x03?速度更快的隨機梯度下降法

批量梯度下降法BGD(Batch Gradient Descent):每次更新參數(shù)時計算所有樣本,通過對數(shù)據(jù)集所有樣本的計算來求解梯度的方向。這種方法在數(shù)據(jù)量很大時計算的時間成本很高。

隨機梯度下降法SGD(stochastic gradient descent):每次迭代使用一個樣本來對參數(shù)進行更新。雖然不是每次迭代得到的損失函數(shù)都向著全局最優(yōu)方向,但是大的整體的方向是向全局最優(yōu)解的,最終的結果往往是在全局最優(yōu)解附近。(相比于批量梯度,這樣的方法更快,結果也是可以接受的。)

3.1 隨機取值的公式推導

從數(shù)學的角度來看:將批量梯度下降損失函數(shù)(J(θ)=MSE(y,y^))求導后矩陣,乘以m。(樣本數(shù)量求和這一操作去掉)得:

注意,得到的向量是搜索方向不是梯度方向,因此已經(jīng)不算是函數(shù)的梯度了。

3.2 隨機下降與學習率的取值

隨機梯度下降過程就是:每次隨機取出一個i,得到一個向量,沿著這個隨機產(chǎn)生的向量的方向進行搜索,不停的迭代,得到的損失函數(shù)的最小值。

批量搜索,那么每次都是沿著一個方向前進;隨機梯度下降法則不能保證隨機選擇的方向是損失函數(shù)減小的方向(更不能保證一定是減小速度最快的方向),所以搜索路徑會呈現(xiàn)隨機特性。即隨機梯度下降有著不可預知性。

隨機梯度下降法的過程中,學習率η是逐漸遞減。因為如果學習率取一個固定值,可能會導致已經(jīng)在最小值附近的點θ,由于固定步長(點θ的取值)跳出這個點的范圍。

設計一個函數(shù),使學習率η隨著下降循環(huán)次數(shù)的增加而減小。(分子變?yōu)槌?shù)t0,并在分母上增加一個常數(shù)項t1緩解初始情況下,學習率變化太大的情況,且更靈活。)η=t0/(Ii ter+t1)

0x04 BGD&SGD效果比較

梯度下降算法主要比較運行時間迭代次數(shù)這兩個指標。

不同:

1.表達式為:X_b_i.T.dot(X_b_i.dot(theta) - y_i) * 2(傳遞的不是整個矩陣Xb和整個向量y,而是其中一行X_b_i、其中的一個數(shù)值y_i)

2.內置學習率:η=t0/(Ii ter+t1)

3.終止循環(huán)條件:循環(huán)次數(shù)達到上限

代碼中隨機梯度下降,只使用1/3。并且隨機梯度下降中只考慮的1/3的樣本量,且得到的結果一定達到了局部最小值的范圍內。

批量梯度下降法BGD(Batch Gradient Descent)

優(yōu)點:全局最優(yōu)解;易于并行實現(xiàn);

缺點:當樣本數(shù)據(jù)很多時,計算量開銷大,計算速度慢。

隨機梯度下降法SGD(stochastic gradient descent)

(每次迭代使用一個樣本來對參數(shù)進行更新)

優(yōu)點:計算速度快;

缺點:收斂性能不好 。

0x05 ? 梯度下降另外一種調試方式

一種簡單的方法,能夠對梯度下降法中求梯度的公式推導進行調試。?

以一維為例,求某一點(紅色)相應的梯度值(導數(shù)),就是曲線在這個點上切線的斜率。可以使用距離該點左右兩側的兩個藍色點的連線的斜率,作為紅點處切線斜率。

從數(shù)學上來看比較直觀,每個維度上都要求兩次帶入,因此時間復雜度變高了。作為一個調試的手段,在還未完成時,可以使用小數(shù)據(jù)量,進行計算,得到最終結果。(然后再通過推導公式的方式得到的梯度結果,是否和其相同。)在求梯度的時候,可以用這種通用的debug方式先在小數(shù)據(jù)集上對求導公式進行檢驗。

0xFF 總結

批量梯度下降法BGD(Batch Gradient Descent),每次對所有樣本都看一遍,缺點是慢,缺點是穩(wěn)定。

隨機梯度下降法SGD(stochastic gradient descent),每次隨機看一個,優(yōu)點是快,缺點是不穩(wěn)定。

小批量梯度下降法 MBGD(Mini-Batch Gradient Descent),優(yōu)點:減少了計算的開銷量,降低了隨機性。(在每次更新時用b個樣本,其實批量的梯度下降就是一種折中的方法,用一些小樣本來近似全部。)

代碼相關:

1.Jupyter中使用IPython的魔法(Magic)命令“%%time”表示代碼塊用時,必須首行。

參考閱讀:

1.《還不了解梯度下降法?看完這篇就懂了!》(回顧四)

2.《手動實現(xiàn)梯度下降(可視化)》?(回顧四)

3.《線性回歸中的梯度下降》?(回顧四)

4.《速度更快的隨機梯度下降法》

5.《梯度下降番外:非常有用的調試方式及總結》

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容