数值优化(三)——线搜索最速梯度下降

目录

 

1. 无约束优化

2. step size(步长)选择策略

 3.结语


 

1. 无约束优化

        首先,先回顾一下函数的无约束优化。无约束优化,就是不存在inequality或者equality constraint的情况,minimize找到最优的solution。

994bd61feaaa48f181081c985101cda6.png

        所谓最初梯度下降,其实就是利用函数的一阶信息局部地找一个让函数值下降最快的方向,然后沿着方向去不断地逼近局部极小值。

4c17c707aa6e43b2b170758f6b744f07.png7248d9247dc147d78aec37e38eae1487.png

        当x越趋于最优解时,更新值越小,它会慢慢地收敛。而如何去选择step size?这是一个值得研究的问题。

2. step size(步长)选择策略

4149f4cf9eb640449b2ebc9d76959c53.png

        (一)常数步长

        步长太大会导致发散和震荡。为了收敛稳定性,我们可以将固定的步长设的很小,但我们需要调用太多次f(x)和函数的梯度,会浪费很多时间。当步长比较智能时,会快速收敛。“just right”是一个很难实现的情况。因此,常数步长不是一个智能的策略。

061c1cef7e4a44bda1bb2241398e0ac0.png

        (二)逐渐减少步长

        Diminishing step sizes方法主要是保证步长逐渐变小,同时,变化幅度还不会特别快。这里需要注意的是,次梯度算法并不像梯度下降一样,可以在每一次迭代过程中自适应的计算此次步长(adaptively computed),而是事先设定好的(pre-specified)。

        此策略适用性很强,对于非光滑函数和梯度有噪声的情况下,仍可以收敛到最优解附近,但收敛速率较慢。此策略适用于函数先天条件很差,对收敛速率要求不高的情况。

        (三)精确搜索

        exact line search涉及一个权衡问题,想要得到精准解是一个困难的任务,我们通过迭代的方法来求解f的最优解,在每次迭代中都要解决这样一个任务是很困难的,而且即使计算得到了精准解,这也只是第k次迭代的最优解,对于整个优化问题来说并非关键的。

        算法总的效率取决于迭代次数和每次迭代的代价,求解精确解花费了巨大的代价,但可能迭代次数减少的不多,那就得不偿失了。因此会选择花费很少的代价寻找一个差不多的步长,使得目标函数能有充分的下降,虽然迭代次数会多一点,但总的代价反而更少。此策略计算开销较大,由于计算复杂度在实际应用中已很少使用。

        (四)不精确搜索

        inexact line search的搜索条件如下:

0bc29d79225249e5af6414a507a95db5.png

        既然不要求得到精确的步长,只需要使目标函数充分下降,那么前进一步至少比现在强,但这样够充分吗?显然是不行的。

c28d2154c31348f98d7ed8067635a500.png

 3.结语

        更少的迭代并不保证更高的效率。线搜索的缺点也很明显,由于梯度与等高线是垂直的,当条件数很大或者曲率很大时,等高线几乎平行,迭代次数会很多。当条件数很小时,会导致性能下降。要更快地收敛,曲率是必不可少的。

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
梯度下降法(Steepest Descent Method)是在求解无约束优化问题时常用的一种梯度下降方法。该方法通过每次迭代朝着当前位置的梯度方向走,最终达到最优解。最梯度下降法具有收敛快、精度高等优点,被广泛应用于机器学习、深度学习、神经网络等领域。 在MATLAB中实现最梯度下降法,首先需要确定初始点、目标函数的梯度以及迭代步长。在每次迭代中,通过计算当前点的梯度方向和大小来更新当前点的位置,不断向更优的解逼近。具体地,对于目标函数f(x),设其梯度为g(x),则每次迭代的步骤如下: 1. 计算当前点的梯度g(xk) 2. 计算迭代步长αk,使得下一个点的函数值f(xk+1)最小 3. 更新当前点xk+1 = xk - αk*g(xk) 4. 检查是否满足停止条件,如达到最大迭代次数,目标函数值达到阈值等。若未达到,则返回第1步重新迭代。 MATLAB中可通过fminunc函数进行最梯度下降法的求解,该函数实现了几种求解优化问题的算法,其中包括了最梯度下降法。使用该函数时,需要指定优化问题的目标函数以及初始点等参数。例如,若要求解函数f(x)=x^2的最小值,则可使用如下代码: fun = @(x) x^2; x0 = 1; options = optimoptions('fminunc','Algorithm','quasi-newton') x = fminunc(fun,x0,options) 其中,fun为目标函数,x0为初始点,options为优化选项,可指定最大迭代次数、目标函数值精度等参数。最终求得的x为目标函数的最小值点。通过调整优化选项,可实现不同的求解算法,包括最梯度下降法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽水啤酒花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值