優化學習率的相關算法
在使用優化算法的時候,常常會涉及到一些學習率的優化,那么我們應該怎么優化學習率呢?
調整學習率的策略:
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的最優值。