Armijo-Goldstein准则及Wolfe-Powell准则

Armijo-Goldstein准则及Wolfe-Powell准则

line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法。它可以分为精确的一维搜索以及不精确的一维搜索两大类。

本文主要介绍一下,不精确的一维搜索的两大准则:Armijo-Goldstein准则 & Wolfe-Powell准则。

1 为什么要遵循这些准则

由于采用了不精确的一维搜索,所以,为了能让算法收敛(即:求得极小值),人们逐渐发现、证明了一些规律,当你遵循这些规律的时候,算法就很有可能收敛。因此,为了达到让算法收敛的目的,我们就要遵循这些准则。

2 Armijo-Goldstein准则

此准则是在196X年的时候由Armijo和Goldstein提出的。

Armijo-Goldstein准则的核心思想有两个:①目标函数值应该有足够的下降;②一维搜索的步长 α α α不应该太小。

这两个思想的意图非常明显。由于最优化问题的目的就是寻找极小值,因此,让目标函数函数值“下降”是我们努力的方向,所以①正是想要保证这一点。同理,②也类似:如果一维搜索的步长 α α α太小了,那么我们的搜索类似于在原地打转,可能也是在浪费时间和精力。

有了这两个指导思想,我们来看看Armijo-Goldstein准则的数学表达式:
f ( x k + a k d k ) ≤ f ( x k ) + a k ρ g k T d k ⋯ ( 1 ) f(x_k+a_kd_k) \leq f(x_k)+a_k \rho g_k^{T} d_k \cdots(1) f(xk+akdk)f(xk)+akρgkTdk(1) f ( x k + a k d k ) ≥ f ( x k ) + a k ( 1 − ρ ) g k T d k ⋯ ( 2 ) f(x_k+a_kd_k) \geq f(x_k)+a_k (1-\rho) g_k^{T} d_k \cdots(2) f(xk+akdk)f(xk)+ak(1ρ)gkTdk(2)
其中, 0 < ρ < 1 / 2 0<\rho<1/2 0<ρ<1/2。袁亚湘写的《最优化理论与方法》一书证明,如果没有这个条件的话,将影响算法的超线性收敛性。
在这里插入图片描述
Armijo-Goldstein准则可能会把极小值点(可接受的区间)判断在区间bc内。显而易见,区间bc是有可能把极小值排除在外的(极小值在区间ed内)。所以,为了解决这个问题,Wolfe-Powell准则应运而生。

3 Wolfe-Powell准则

Wolfe-Powell准则也有两个数学表达式,其中,第一个表达式与Armijo-Goldstein准则的(1)式相同,第二个表达式为:
▽ f ( x k + a k d k ) T d k ≥ σ g k T d k , σ ∈ ( ρ , 1 ) ⋯ ( 3 ) \bigtriangledown f(x_k+a_kd_k)^{T}d_k \geq \sigma g_k^{T} d_k, \sigma\in\mathbb (\rho,1) \cdots(3) f(xk+akdk)TdkσgkTdkσ(ρ,1)(3)
这个式子已经不是关于函数值的了,而是关于梯度的。此式的几何解释为:可接受点处的切线斜率 ≥ \geq 初始斜率的 σ \sigma σ

上面的图已经标出了 σ g k T d k \sigma g_k^{T} d_k σgkTdk那条线(即 e e e点处的切线),而初始点( α = 0 \alpha=0 α=0的点)处的切线是比 e点处的切线要“斜”的,由于 σ ∈ ( ρ , 1 ) \sigma\in\mathbb (\rho,1) σ(ρ,1),使得 e e e点处的切线变得“不那么斜”了。这样做的结果就是,我们将极小值包含在了可接受的区间内( e e e点右边的区间)。

Wolfe-Powell准则到这里还没有结束!在某些书中,你会看到用另一个所谓的**“更强的条件”**来代替(3)式,即:
∣ ▽ f ( x k + a k d k ) T d k ∣ ≤ − σ g k T d k , σ ∈ ( ρ , 1 ) ⋯ ( 4 ) \vert \bigtriangledown f(x_k+a_kd_k)^{T}d_k \vert \leq -\sigma g_k^{T} d_k, \sigma\in\mathbb (\rho,1) \cdots(4) f(xk+akdk)TdkσgkTdkσ(ρ,1)(4)
这个式子和(3)式相比,就是左边加了一个绝对值符号,右边换了一下正负号(因为 g k T d k < 0 g_k^{T} d_k<0 gkTdk<0 − σ g k T d k > 0 -\sigma g_k^{T} d_k>0 σgkTdk>0),这样做的结果就是:可接受的区间被限制在了 [ b , d ] [b,d] [b,d]内,即红线部分,如图:
在这里插入图片描述
参考: codelast.com

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Armijo-Goldstein 准则是一种常用的学习率更新策略,用于优化算法中的步长选择。其核心思想是在每次更新步长时,根据当前的梯度信息和目标函数的变化情况来动态调整步长的大小,以便更快地收敛。 在 Matlab 中实现 Armijo-Goldstein 准则的学习率更新,可以按照以下步骤进行: 1. 定义目标函数和梯度计算函数。例如,假设目标函数为 f(x),梯度函数为 grad_f(x),可以使用 Matlab 中的函数句柄来定义: ```matlab f = @(x) ... % 目标函数 grad_f = @(x) ... % 梯度函数 ``` 2. 定义 Armijo-Goldstein 准则中的参数。Armijo-Goldstein 准则中有两个参数,一个是收缩因子 rho,另一个是常数 c。可以根据实际情况来调整这两个参数的大小: ```matlab rho = 0.5; % 收缩因子 c = 0.1; % 常数 ``` 3. 实现 Armijo-Goldstein 准则的学习率更新。具体实现方法如下: ```matlab alpha = 1; % 初始学习率 while f(x - alpha * grad_f(x)) > f(x) - c * alpha * norm(grad_f(x))^2 alpha = rho * alpha; % 更新学习率 end ``` 在这段代码中,首先初始化学习率 alpha 为1,然后根据 Armijo-Goldstein 准则的判定条件,如果目标函数的变化量大于一定的阈值,就按照收缩因子 rho 来动态调整学习率。最终,返回更新后的学习率 alpha。 需要注意的是,这里的 x 是优化算法中的参数向量,需要根据具体的优化算法来进行更新。例如,在梯度下降算法中,x 的更新方式为: ```matlab x = x - alpha * grad_f(x); ``` 这样,就可以使用 Armijo-Goldstein 准则来动态调整学习率,提高优化算法的收敛速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值