【数学与算法】步长一维搜索、梯度下降法、最速下降法、牛顿法
更详细的推导,可以参考这篇博客:一维搜索、最速下降(梯度下降)与牛顿法(拟牛顿法)
1.求解最优步长的方法:
f(x)f(x)f(x)可以理解为目标函数,损失函数。我们的目标是最小化这个损失函数,最小化大多通过迭代得到,那么每一步迭代更新的步长也很重要,知道每一点的函数值下降最快的方向后(负梯度方向),还需要选取最优的步长,可以使得损失函数每一步迭代下降更快。
如果我们不想求解最优步长,那么就只需要设定固定步长即可,但是这样做的话,迭代更新较慢,也有可能取不到(全局或局部)最优解,而是在最优解附近。后面的例子,我们会讨论固定步长的劣势。
每一步的最优步长λk\lambda{_k}λk 由求解式 λk=argminf(xk+λdk)\color{red}\lambda{_k}=arg min f(x_k+λd_k)λk=argminf(xk+λdk)得到,是一种精确步长的搜索方式。
即,由x0x_0x0到x1x_1x1的更新步长为λ0\lambda{_0}λ0,由x1x_1x1到x2x_2x2的更新步长为λ1\lambda{_1}λ1,… ,由xk−1x_{k-1}xk−1到xkx_kxk的更新步长为λk−1\lambda{_{k-1}}λk−1。
dkd_kdk 是在 xkx_kxk 点时的搜索方向,如果是梯度下降法时,我们的方向就变成了 dk=−∇f(xk)d_k =−∇f(x_k)dk=−∇f(xk),(梯度方向是函数值增长最快的方向,梯度下降就是负梯度方向,即函数值减小最快的方向)。
求解这个式子,就需要把f(xk+λdk)f(x_k+λd_k)f(xk+λdk)看做是λ\lambdaλ的函数,令:g(λ)=f(xk+λdk)\color{red}g(\lambda)=f(x_k+λd_k)g(λ)=f(xk+λdk)
那么f(xk+λdk)f(x_k+λd_k)f(xk+λdk)取极小值,就是 g′(λ)=0\color{red}g'(\lambda)=0g′(λ)=0 时,求解 λ\lambdaλ 。
由于f(x),xk,∇f(xk)f(x),x_k,∇f(x_k)f(x),xk,∇f(xk)已知,所以f′(xk+λdk)f'(x_k+λd_k)f′(xk+λdk)中只有λ\lambdaλ一个未知数,那么
g′(λ)=f′(xk+λdk)=0\color{red}g'(\lambda)=f'(x_k+λd_k)=0g′(λ)=f′(xk+λdk)=0
可以求解出λ\lambdaλ。
例子:
一维度函数f(x)=(x+1)2\color{red}f(x)=(x+1)^2f(x)=(x+1)2,在初始值x0=0x_0=0x0=0时,梯度即一阶导
∇f(x0)=2x0+2=2\nabla{f(x_0)}=2x_0+2=2∇f(x0)=2x0+2=2
d0=−∇f(x0)=−2d_0=-\nabla{f(x_0)}=-2d0=−∇f(x0)=−2
f(x1)=f(x0+λd0)=(x0+λd0+1)2=(1−2λ)2\begin {aligned} f(x_{1})&=f(x_0+\lambda{d_0})\\ &=(x_0+\lambda{d_0}+1)^2 \\ &=(1-2{\lambda})^2\\ \end {aligned}f(x1)=f(x0+λd0)=(x0+λd0+1)2=(1−2λ)2
f′(x0+λd0)=2(1−2λ)∗(−2)=0f'(x_0+\lambda{d_0})=2(1-2{\lambda})*(-2)=0f′(x0+λd0)=2(1−2λ)∗(−2)=0
解得:λ=0.5\color{red}\lambda =0.5λ=0.5,从而得到了x0x_0x0到x1x_1x1 的最优步长。
那么就可以求得x1=x0+λd0=0+0.5∗(−2)=−1x_1=x_0+λd_0=0+0.5*(-2)=-1x1=x0+λd0=0+0.5∗(−2)=−1
这就是迭代。
继续下一次迭代:
x1=−1,∇f(x1)=0,d1=0x_1=-1,\nabla{f(x_1)}=0,d_1=0x1=−1,∇f(x1)=0,d1=0,那么
x1=x0+λ∗d1=x0+λ∗0=x0x_1=x_0+\lambda *d_1=x_0+\lambda*0=x_0x1=x0+λ∗d1=x0+λ∗0=x0
我们看到,x1=x0\color{red}x_1=x_0x1=x0,就是说,下一次更新的点还在x0x_0x0就是没更新了,在看前面在x1x_1x1处的梯度∇f(x1)=0\color{red}\nabla{f(x_1)}=0∇f(x1)=0,就是不会再更新了,已经找到了最优点,就是x1=−1x_1=-1x1=−1。到这里,仅仅做了一次迭代就达到了最优点,是因为我这里设置的函数比较简单,取初值也恰好合适,实际情况中不会这么一次就迭代完成。
我们验证一下,x=−1x=-1x=−1是不是f(x)=(x+1)2f(x)=(x+1)^2f(x)=(x+1)2的最小值点呢?
对f(x)f(x)f(x)求导f′(x)=0f'(x)=0f′(x)=0,解得x=−1x=-1x=−1。所以前面的迭代法求得的结果是准确的。
最优步长
对比 固定步长
:
那么,如果我们在每个点xkx_kxk处都设置固定步长为 λ=0.1\lambda=0.1λ=0.1 的话,那么:
x1=x0+λ∗d0=0+0.1∗(−2)=−0.2x_1=x_0+\lambda*d_0=0+0.1*(-2)=-0.2x1=x0+λ∗d0=0+0.1∗(−2)=−0.2
f(x1)=(−0.2+1)2=0.64f(x_1)=(-0.2+1)^2=0.64f(x1)=(−0.2+1)2=0.64
比最优步长得到的函数值0还大很多,需要继续迭代:
d2=−1.6d_2=-1.6d2=−1.6
x2=x1+λ∗d2=−0.2+0.1∗(−1.6)=−0.36x_2=x_1+\lambda*d_2=-0.2+0.1*(-1.6)=-0.36x2=x1+λ∗d2=−0.2+0.1∗(−1.6)=−0.36
f(x2)=(−0.36+1)2=0.642=0.4096f(x_2)=(-0.36+1)^2=0.64^2=0.4096f(x2)=(−0.36+1)2=0.642=0.4096
x2=−0.36x_2=-0.36x2=−0.36处的损失函数值变成了0.4096进一步缩小,再往后迭代几次可能也得不到最优解x∗=−1x^*=-1x∗=−1,而是在-1附近徘徊,我这里不再向后推算,明白原理即可,感兴趣的自己往后推算。
下面这个是最速下降法的性质,即前后两次迭代的梯度向量方向正交,并不是求解步长λ\lambdaλ。
根据求导公式,y=f(a+b∗x)y=f(a+b*x)y=f(a+b∗x)对xxx求导,得到 y′=f′(a+b∗x)∗(b∗x)′y'=f'(a+b*x)*(b*x)'y′=f′(a+b∗x)∗(b∗x)′,
即 y′=f′(a+b∗x)∗by'=f'(a+b*x)*by′=f′(a+b∗x)∗b
那么 g′(λ)=f′(xk+λdk)=0\color{red}g'(\lambda)=f'(x_k+λd_k)=0g′(λ)=f′(xk+λdk)=0 是对λ\lambdaλ求导,则:
g′(λ)=∇f(xk+λkdk)T∗dk=0g'(\lambda)=\nabla f(x_k+λ_kd_k)^T*d_k=0g′(λ)=∇f(xk+λkdk)T∗dk=0
可得:
−∇f(xk+1)T∇f(xk)=0\color{red}-\nabla f(x_{k+1})^T\nabla f(x_k)=0−∇f(xk+1)T∇f(xk)=0
2.梯度下降法 和 最速下降法:
相同点:都是让迭代点沿着负梯度方向前进,保证函数的“最速”下降;
不同点:在于步长λ\lambdaλ的取值:
- 梯度下降法的步长λ\lambdaλ是定值,由工程师指定;
- 最速下降法的步长λ\lambdaλ是通过求解得到最优步长,它能使迭代更快收敛。
因此梯度下降法
只是最速下降法
中的一种特殊形式。
使用最速下降法
得到的迭代路线往往是呈现一个之字形
的走势。而当迭代点越靠近极小点,其移动的步长较小,严重影响到了收敛的速度。虽然从局部来看,每次选择的方向都是函数值下降最快的方向,但是从全局来看,锯齿现象导致当距离极小点较近时需要绕不少弯路才能收敛,反而收敛较慢。
因此,在计算的前中期使用梯度下降,而在接近极小点时使用其他算法进行迭代
,会是更理想的方案。
3.牛顿法迭代法:
牛顿法迭代法
:基本思想是利用二阶泰勒展开
在极小点附近来近似
目标函数,最终解出极小点的一个近似值。
4.梯度下降法 或 牛顿法 进行最优化的步骤:
要最小化目标函数f(x⃗)f(\vec{x})f(x),也就是要找到某个点 xk⃗\vec{x_k}xk使得f(x⃗)f(\vec{x})f(x)最小,即minf(x⃗)min f(\vec{x})minf(x)。
这里 xk⃗\vec{x_k}xk头上打箭头表示xxx是多维点,就是向量。因为实际问题中很少会是一维点的。
一般都是使用迭代法
更新求最优值x∗⃗\vec{x^*}x∗:
4.1.方法1:使用梯度下降法进行更新迭代:
步骤1:给一个初始值x0⃗\vec{x_0}x0,和精度阈值 ϵ\epsilonϵ,并令 k=0k=0k=0;
步骤2:更新迭代计算:
如果步长λ\lambdaλ 需要计算,就在这里进行计算,得到这一步迭代的最优步长;
计算梯度∇f(xk)\nabla f(x_k)∇f(xk)后,按照下式进行迭代更新x⃗\vec{x}x:
xk+1=xk−λ∇f(xk)x_{k+1}=x_{k}-\lambda\nabla f(x_k)xk+1=xk−λ∇f(xk)步骤3:判断迭代停止条件:
若梯度模∣∣∇f(xk)∣∣<ϵ||\nabla f(x_k)||< \epsilon∣∣∇f(xk)∣∣<ϵ,(梯度特别小的点基本就是局部或者全局最优点
),则停止迭代。
梯度模是类似下面这样计算:
zhz:这里迭代停止条件也可以使用:1.连续10次更新得到的f(xk)f(x_k)f(xk)差值∣∣f(xk+1)−f(xk)∣∣<ϵ||f(x_{k+1})-f(x_k)||< \epsilon∣∣f(xk+1)−f(xk)∣∣<ϵ;2.达到多少次迭代后。步骤4:另k=k+1k=k+1k=k+1,转至步骤2;
4.2.方法2:使用牛顿法即 二阶泰勒展开式 更新迭代:
- 步骤1:给一个初始值x0⃗\vec{x_0}x0,和精度阈值 ϵ\epsilonϵ,并令 k=0k=0k=0;
- 步骤2:更新迭代计算:
计算牛顿方向
: -∇2f(xk)−1∇f(xk){\nabla}^2 f(x_k)^{-1} \nabla f(x_k)∇2f(xk)−1∇f(xk)后,按照下式进行迭代更新 x⃗\vec{x}x:
xk+1=xk−∇2f(xk)−1∇f(xk)x_{k+1}=x_{k}- {\nabla}^2 f(x_k)^{-1} \nabla f(x_k)xk+1=xk−∇2f(xk)−1∇f(xk)
或者也加上步长λ\lambdaλ,就变成了阻尼牛顿法
,这里需要使用求解最优步长λ\lambdaλ的方法:
xk+1=xk−λ∇2f(xk)−1∇f(xk)x_{k+1}=x_{k}- \lambda{\nabla}^2 f(x_k)^{-1} \nabla f(x_k)xk+1=xk−λ∇2f(xk)−1∇f(xk) - 步骤3:判断迭代停止条件:
梯度模是类似下面这样计算:
若梯度模∣∣∇f(xk)∣∣<ϵ||\nabla f(x_k)||< \epsilon∣∣∇f(xk)∣∣<ϵ,(梯度特别小的点基本就是局部或者全局最优点
),则停止迭代。
zhz:这里迭代停止条件也可以使用:1.连续10次更新得到的f(xk)f(x_k)f(xk)差值∣∣f(xk+1)−f(xk)∣∣<ϵ||f(x_{k+1})-f(x_k)||< \epsilon∣∣f(xk+1)−f(xk)∣∣<ϵ;2.达到多少次迭代后 - 步骤4:另k=k+1k=k+1k=k+1,转至步骤2;
这里贴上阻尼牛顿法的更新步骤:
4.3.比较两种方法的异同
比较上面两种方法,步骤2开始使用不同方法来迭代更新。对于两种方法的迭代公式,可以看出,方法2牛顿法迭代公式中黑塞矩阵的逆∇2f(xk)−1\nabla^2f(x^k)^{-1}∇2f(xk)−1相当于方法1梯度下降法迭代公式的步长λ\lambdaλ,这样两个公式就一样了。当然,我们也可以在方法2牛顿法中也加上步长λ\lambdaλ,这样,其实是由黑塞矩阵的逆∇2f(xk)−1\nabla^2f(x^k)^{-1}∇2f(xk)−1和λ\lambdaλ共同决定。
对于方法1梯度下降的步长λ\lambdaλ,可以人为设定一个定值,也可以使用最速下降法中的一维搜索寻求最优步长,让算法迭代快速收敛。使用一维搜索的话,就可以参考前面的 argminf(xk+λdk)\color{red}arg min f(x_k+λd_k)argminf(xk+λdk) 求解步长λ\lambdaλ。
一般认为方法2牛顿法
可以利用到曲线本身的信息,比方法1梯度下降法
更容易收敛(迭代更少次数)。
如下图,是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解:
4.4.疑问:实际工程中,什么时候使用梯度下降法呢?什么时候用到牛顿法呢?
如果需要训练神经网络模型,那么可以使用梯度下降法。如果需要实时计算得到最优解的话,梯度下降法需要迭代,那么每一帧数据都迭代的话,如果耗时比较久,就不合适了,如果耗时很短,可以试试。
实际工程中,什么时候用到牛顿法呢?它能保证实时吗?它能用在神经网络吗?还有,特征维度特别大的时候,计算黑塞矩阵就会有维度灾难,计算的代价特别大,可以考虑使用PCA降维?或者不直接计算黑塞矩阵(见阻尼牛顿法的蓝色字体的介绍)?
【数学与算法】步长一维搜索、梯度下降法、最速下降法、牛顿法相关推荐
- 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法
一.梯度下降法 1.总述: 在机器学习中,基于基本的梯度下降法发展了三种梯度下降方法,分别为随机梯度下降法,批量梯度下降法以及小批量梯度下降法. (1)批量梯度下降法(Batch Gradient D ...
- 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法
在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题. - 无约束最优化问题:梯度下降法.牛顿法.拟牛顿法: - 有约束最优化问题:拉格朗 ...
- 常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法
目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) 3. 共轭 ...
- 算法细节系列(3):梯度下降法,牛顿法,拟牛顿法
算法细节系列(3):梯度下降法,牛顿法,拟牛顿法 迭代算法原型 话不多说,直接进入主题.在我看来,不管是梯度下降法还是牛顿法,它们都可以归结为一个式子,即 x=ϕ(x) x = \phi(x) 也就是 ...
- 最小二乘法、迭代优化、坐标轴下降法(Coordinate Descent, CD)、坐标下降和梯度下降对比、梯度下降法/最速下降法
最小二乘法.迭代优化.坐标轴下降法(Coordinate Descent, CD).坐标下降和梯度下降对比.梯度下降法/最速下降法 目录
- 梯度下降法、随机梯度下降法、批量梯度下降法及牛顿法、拟牛顿法、共轭梯度法
http://ihoge.cn/2018/GradientDescent.html http://ihoge.cn/2018/newton1.html 引言 李航老师在<统计学习方法>中将 ...
- 数学优化入门:梯度下降法、牛顿法、共轭梯度法
1.基本概念 1.1 方向导数 1.2 梯度的概念 因此,对于一元函数,即y=f(x),其梯度的方向总是指向x轴正方向或反方向,而大小即该点的导数. 如果考虑z=f(x,y)描绘的是一座在点(x,y) ...
- 机器学习之数学系列(二)梯度下降法(参数更新公式的由来)
一.引言 下山问题 如下图所示,假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山.于是决定走一步算一步,也就是每次选个方向往山下走一步,这样一步一步走下去,一直走到觉得我们已经到了山脚. ...
- ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法
所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-bat ...
- BP算法,用梯度下降法更新权值W与偏置项b
Bp算法实际是输出的误差函数对每一个参数求导,输出层可以直接求出,非输出层则有链式法则求导.这里以上图5层神经网络为例进行说明. 一 符号说明: 1)这里使用激活函数为sigmoid函数: ...
最新文章
- 搭乘“云原生”硬核实践之舟,移动云助力开发者畅游未来创新之旅
- VS2010 使用GDI+创建图片水印的MFC程序
- python在线投票系统 统计票数_python投票统计程序,统计序列中各个数值的份数,字典的应用。...
- java 线程什么时候结束_java线程什么时候让出cpu?
- JavaScript 属性介绍
- 一键加速去不掉加锁的_十年斑点去不掉,大妈巧用蜂蜜擦脸,皮肤白净还年轻...
- 实地集团和广州移动发布首个独立组网5G全场景智能社区
- 使用glob()查找文件
- 语言用符号打印出落叶的图案_普通语言学概要(第一章第二节,语言是符号系统)...
- Android AutoCompleteTextView悬浮提示列表原理简单分析
- office2013安装包下载,专业版完整版官方原版
- 新趋势下的云计算安全行业前沿认证 | CCSK
- 极光尔沃:太空3D打印机首次亮相 航天领域应用潜力巨大
- Vue进阶(四十四):vue 图片加载完成事件
- laravel-集合对象的销毁forget,重组values(),pluck ()方法
- 微信公众号对接电影网站,回复名称推送电影
- 《暗黑2》经典数值公式分析总结(二)
- 清华大学计算机科学与技术系黄必胜,都来看看,我们广西优秀学子在清华大学都读什么专业(2012年)...
- 语音、图像和视频数据的格式
- 二手时间:人类的精神本质就是疲惫和痛苦的