優化學習率的相關演算法
在使用優化演算法的時候,常常會涉及到一些學習率的優化,那麼我們應該怎麼優化學習率呢?
調整學習率的策略:
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準則)為止。
兩種方法的異同:
回溯線性搜尋的思考:插值法
這樣,我們可以計算導數為0的最優值。