優化學習率相關演算法

Lily發表於2020-05-11

優化學習率的相關演算法

在使用優化演算法的時候,常常會涉及到一些學習率的優化,那麼我們應該怎麼優化學習率呢?

調整學習率的策略:

1.在斜率(方向導數)大的地方,使用小的學習率

2.在斜率(方向導數)小的地方,使用大的學習率

下面我們通過梯度下降演算法進行學習率的優化分析

在梯度下降中,設x[k]=a,那麼沿著負梯度方向,移動到x[k+1]=b,則有:

 那麼,從x[0]出發,每次沿著當前函式梯度反方向移動一定的距離ak,將得到下面的序列:

 則對應的個點的函式值序列的關係為:

 當n迭代到一定值的時候,這函式f(x)將收斂到區域性的最小值。

我們將當前點記為x[k],當前的搜尋方向為dk(如:負梯度方向),我們將學習率a看成自變數,因此,我們將函式f(x[k] + adk)看做是關於a的函式h(a),如下所示:

 對於上述函式,當a=0時,h(0)=f(x[k]),對於函式h(a),其導數為:

 在梯度下降中,梯度下降是為了尋找f(x)的最小值,那麼,在x[k]和dk給定的前提下,即尋找函式f(x[k]+adk)的最小值, 即:

 如果函式h(a)可導,那麼對於區域性最小值處的a滿足:

 下面我們就來計算最優學習率:

1.當a=0時,我們帶入得到:

 2.對於下降方向,選擇負梯度方向(或者選擇與負梯度方向夾角小於90度的方向),即:

 可以得到h‘(a) < 0

 3.由此,我們總是能夠選擇足夠大的a,使得h'(a) > 0,這樣,就一定存在某a,使得h'(a) = 0,此時的a即為要尋找的a值。

接下來我們可以採用多種方法計算a值:

1.線性搜尋

最簡單的方式就是採用二分線性搜尋的方式,通過不斷的將區間[a1,a2]分成兩半,選擇端點異號的區間,當區間分的足夠小的時候,我們就能得到一個足夠好的最優學習率。

2.回溯線性搜尋

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

 

 兩種方法的異同:

二分線性搜尋的目標是求得滿足h‘(α)≈0的最優步長近似值,而回溯線性搜尋放鬆了對步長的約束,只要步長能使函式值有足夠大的變化即可。
二分線性搜尋可以減少下降次數,但在計算最優步長上花費了不少代價;回溯線性搜尋找到一個差不多的步長即可。

回溯線性搜尋的思考:插值法

採用多項式插值法(Interpolation) 擬合簡單函式,然後根據該簡單函式估計函式的極值點,這樣選擇合適步長的效率會高很多。現在擁有的資料為: xk處的函式值f(xk)及其導數f’(xk) ,再加上第一次嘗試的步長α0。如果α0滿足條件,顯然演算法退出;若α0不滿足條件,則根據上述資訊可以構造一個二次近似函式:

 這樣,我們可以計算導數為0的最優值。

一般的說,回溯線性搜尋和二次插值線性搜尋能夠基本滿足實踐中的需要。

 

相關文章