梯度下降演算法

2021-07-24 15:13:44 字數 2063 閱讀 7178

注:本文中所有公式和思路來自於鄒博先生的《

機器學習公升級版》,我只是為了加深記憶和理解寫的本文。

梯度下降演算法我個人認為是極其重要的的一種引數優化手段,因為很常用,也容易理解,不多廢話,直接步入主題。

然後我們沿著梯度的方向下降(上公升):

走到這一步似乎問題已經完全解決了,但是學習率α怎麼確定呢?是選乙個固定呢還是變化的更好呢?

我們直觀的想象一下,學習率說白了就是每次梯度下降的大小(並非快慢,快慢是二階導),那麼在引數優化的最初階段,最優值與當前值的差距較大,我們其實可以將步長調大一點,在迭代後期,使用較小的步長增加穩定度和精度。

我們不妨先仔細思考一下梯度下降的執行過程:

假設某次迭代 xk = a,沿著梯度方向,移動到xk+1 = b,則有:

現在假設初始從x0為出發點,每次沿著梯度的反方向移動一定距離得到αk,得到序列:

對應個點直接的關係為:

當n達到一定的值後,函式f(x)收斂到區域性最小值。

現在我們不妨轉換一下視角,記當前點為xk,當前的搜尋方向為dk(如:負梯度方向),因為學習率α是待考察的物件,因此,將下列f(xk + αdk)看作是關於α的函式h(α):

那麼當α等於0的時候易得:

對h(α)求導:

因為梯度下降是尋找f(x)的最小值,那麼在xk和dk給定的前提下,就是尋找f(xk + αdk)的最小值:

那麼我們可以h(α)的導數為0,找到駐點:

將α等於0代入:

走到這一步不知道你是否會感覺不踏實呢,說實話,我第一次看到這的時候是怎麼看怎麼覺得不踏實,我們是為了解決乙個函式的最值而創造了另乙個函式再次求最值,那麼就陷入了乙個迴圈了,所以,我們不妨在此步驟打住,進而分析一下,我們首先選擇了負梯度方向,那麼可得:

從而可以得到:

那麼能夠找到足夠大的α,使得:

既然乙個大於0,乙個小於0,必定存在某α:

那麼這個α*即為我們要找的乙個學習率。

既然存在,咋求呢?

線性搜尋(line search)

這是一種很簡單的方式求乙個最有學習率的方式:二分線性搜尋

具體的做法:

不斷將區間[α1,α2]分成兩半,選擇端點異號的一側,直到區間足夠小或者找到當前最優的學習率。

回溯線性搜尋(backing line search)

基於armijo準測計算收縮方向上的最大步長。

其基本思想是沿著搜尋方向移動乙個較大的步長估計值,然後以迭代的方式不斷縮減步長,直到該步長使得函式值f(xk + αdk)相對於當前函式值f(xk)的減小程度大於預期的期望值(即滿足armijo準則)為止。

那麼回溯線性搜尋和二分線性搜尋有什麼區別呢?

二分線性搜尋的目標是求得滿足h'(α)≈0的最優步長的近似值,而回溯線性搜尋放鬆了對步長的約束,只要求步長能使函式有乙個足夠大的變化即可。

除此之外,二分線性搜尋可以減少下降次數,但是在計算最優步長上花費的代價很大,回溯線性搜尋找到乙個差不多的步長即可。

插值法

我們如果採用了回溯線性搜尋,那麼手裡現在已經有的資料為:

(1):  xk處的函式值

(2):  xk處的導數值

(3):  再加上第一次嘗試的步長α0,如果α0滿足條件,顯然演算法就結束了,如果不滿足,那麼就可以利用α0構造乙個二次近似函式:

顯然導數為0的最優值為:

到此,線性搜尋就介紹完了,當然了我們這一整篇文章都在介紹沿著梯度去下降,那有沒有別的方向呢?

下文將介紹沿著其他的方向去下降。

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...

梯度下降演算法 梯度下降演算法公式推導

場景假設 梯度下降法的基本思想可以模擬為乙個下山的過程。假設這樣乙個場景 乙個人被困在山上,需要從山上下來 找到山的最低點 但此時山上的濃霧很大,導致可視度很低 因此,下山的路徑就無法確定,必須利用自己周圍的資訊一步一步地找到下山的路。這個時候,便可利用梯度下降演算法來幫助自己下山。怎麼做呢,首先以...

梯度下降演算法

機器學習在這幾年得到快速發展,乙個很重要的原因是 large dataset 大規模資料 這節課就來介紹用機器學習演算法處理大規模資料的問題。關於資料的重要性,有一句話是這麼說的 it s not who has the bestalgorithmthat wins.it s who has the...