優化學習率相關算法

優化學習率的相關算法

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

調整學習率的策略:函數

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

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

下面咱們經過梯度降低算法進行學習率的優化分析spa

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

 那麼,從x[0]出發,每次沿着當前函數梯度反方向移動必定的距離ak,將獲得下面的序列:blog

 則對應的個點的函數值序列的關係爲:io

 當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的最優值。

通常的說,回溯線性搜索和二次插值線性搜索可以基本知足實踐中的須要。
相關文章
相關標籤/搜索