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