在使用优化算法的时候,经常会涉及到一些学习率的优化,那么咱们应该怎么优化学习率呢?算法
调整学习率的策略:函数
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的最优值。