Armijo-Goldstein准则及Wolfe-Powell准则

article/2025/9/25 12:03:58

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


http://chatgpt.dhexx.cn/article/WsLaDaRl.shtml

相关文章

【格拉霍夫定理】【四连杆系统】Grashof’s Law for a Planar Four-Bar Linkage

在《Craig, John J - Introduction to Robotics_ Mechanics and Control-Pearson (2013)》一书中提到 “a four-bar linkage has only one degree of freedom” &#xff0c;即“四连杆机构只有一个自由度”。本文将从零基础开始解释此句的原因。由于自学&#xff0c;恐有疏漏&…

开关功率器件(MOSFET IGBT)损耗仿真方法

说明&#xff1a;IGBT 功率器件损耗与好多因素相关&#xff0c;比如工作电流&#xff0c;电压&#xff0c;驱动电阻。在出设计之前评估电路的损耗有一定的必要性。在确定好功率器件的驱动参数后&#xff08;驱动电阻大小&#xff0c;驱动电压等&#xff09;&#xff0c;开关器…

最优控制理论 六、拉格朗日乘子法和KKT条件

拉格朗日乘子法和KKT条件 1. 等式约束最优化2. 不等式约束最优化2.1 1个不等式约束2.2 KKT条件2.3 二维不等式约束图解 3. MATLAB不等式约束优化总结4. 参考文献 最优控制是建立在最优化基础上的&#xff0c;它所处理的是无穷维路径函数的泛函极值问题&#xff0c;而后者是处理…

Buck变换器MOSFET开关过程分析与损耗计算

为了方便理解MOSFET的开关过程及其损耗&#xff0c;以Buck变换器为研究对象进行说明&#xff08;注&#xff1a;仅限于对MOSFET及其驱动进行分析&#xff0c;不涉及二极管反向恢复等损耗。&#xff09; 图1所示为Buck变换器拓扑&#xff0c;其中用于减小主功率电路的AC Loop&am…

JAVA-如何修改源码(重写JAR包里的类)

今天写代码的时候发现alibaba的druid工具对postgresql数据库的union all语法支持不够完善&#xff0c;具体场景&#xff1a; select id,name from a union all (select id,name from b order by id); 该语法在druid工具中被解析为&#xff1a; select id,name from a uni…

堆的操作(Java)

文章目录 1.堆的存储方式2.堆的创建2.1向下调整2.2向上调整 3.堆的操作3.1元素插入堆3.2取堆顶元素3.3删除堆顶元素 1.堆的存储方式 由堆的概念可知&#xff0c;堆是一棵完全二叉树&#xff0c;因此可以层序的规则采用顺序的方式来存储堆。 注意&#xff1a; 对于非完全二叉树…

[Java]堆

目录 一、堆的概念 二、大小根堆的建立 三、 堆的调整 1. 向下调整 2. 向上调整 三、堆的删除与插入 一、堆的概念 堆可以看做一个完全二叉树&#xff0c;如果有一个关键码的集合K {k0&#xff0c;k1&#xff0c; k2&#xff0c;…&#xff0c;kn-1}&#xff0c;把它的所…

JVM-堆

文章目录 堆&#xff0c;是运行是数据区的一部分堆内存分区&#xff1a;JAVA堆区细分&#xff1a; 设置堆内存大小与OOM设置堆空间大小 OOM Outof Memory Error 举例!!!图解对象分配过程Minor GC、Major GC、Full GC年轻代 GC&#xff08;Minor GC&#xff09;触发机制老年代 G…

jvm堆大小的设置

问题引入&#xff1a; -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio3&#xff0c;,其最小内存值和Survivor区总大小分别是&#xff08;10240m 2048m&#xff09;&#xff1b; 解析&#xff1a; -Xmx&#xff1a;最大堆大小 -Xms&#xff1a;初始堆大小 -Xmn:年轻…

如何修改java中堆、栈空间的默认大小

1、修改堆、栈空间大小的命令 在命令行中输入java -X可以得到设置java堆大小和栈大小的命令 2、修改java运行时的堆和栈空间 进入界面后 按AltV 3、检验堆空间修改 3.1 测试类 public class StackTest {public static void main(String[] args) {//返回Java虚拟机中的堆内存…

java 堆设置

Young&#xff1a;主要是用来存放新生的对象。&#xff08;Eden、survivorSpaces(from、To)&#xff09; Old&#xff1a;主要存放应用程序中生命周期长的内存对象。 Permanent&#xff1a;是指内存的永久保存区域&#xff0c;主要存放Class和Meta的信息,Class在被 Load的时候…

Java堆内存设置

堆内存设置 原理 JVM堆内存分为2块&#xff1a;永久空间和堆空间。 永久即持久代&#xff08;Permanent Generation&#xff09;&#xff0c;主要存放的是Java类定义信息&#xff0c;与垃圾收集器要收集的Java对象关系不大。Heap {Old NEW {Eden&#xff0c;from&#xff0…

OBEX(一)

一、概述 1、OBEX v2.0&#xff08;v2.0版本开始OBEX直接在L2CAP上传输&#xff0c;v2.0版本以前OBEX在RFCOMM上传输&#xff09; 2、OBEX即Object Exchange Protocol&#xff0c;对象交换协议 3、OBEX协议是典型的client/server request-response模型 4、OBEX v2.0蓝牙协议…

利用docker部署oxidized网络设备备份系统

随着网络设备的增多,通过人手备份网络设备倍感压力,而且效率低。有编程基础的人可能会通过Python的parimiko 或者netmiko 连接到设备操作 把文件通过ftp 上传到FTP服务器, 在通过定时任务,定期自动备份。这个应该是现阶段主流非人民币网络玩家的最优解决方案。 今天我们来看看…

网络自动化运维第一篇 自动化备份网络配置

网络设备厂商众多&#xff0c;各种安全厂商&#xff0c;网络厂商&#xff0c;负载均衡厂商&#xff0c;如果想实现自动化备份配置&#xff0c;可以自己写python脚本。如果网络设备厂商多&#xff0c;自己写python 非常耗费时间精力。偶然在网上发现了oxidized 非常好用&#xf…

.odex文件的反编译

0x00 问题呈现 在分析某手机自带应用时&#xff0c;为了在JEB中反编译&#xff0c;将其adb pull到了电脑上。解压后发现如下文件&#xff1a; APK解压目录列表 惊奇的发现该APK包中没有dex文件&#xff0c;一开始特别疑惑没有dex文件&#xff0c;也就是没有代码&#xff0c;那…

ZeroDivisionError: integer division or modulo by zero

这里的错误就是由于数据集太小。 # 2. Split into train / validation partitionsn_val int(len(dataset) * val_percent)n_train len(dataset) - n_val#我这里是刚好有10张数据集然后其中一张被拆分为验证集导致训练集太小&#xff0c;从而报错。

反编译odex

需要工具&#xff1a; 1、baksmali-x.x.x.jar2、smali-x.x.x.jar工具下载&#xff1a;https://bitbucket.org/JesusFreke/smali/downloads/ 步骤&#xff1a; 1、odex转smali&#xff1a; java -jar “D:\google\tool\mony_tool\baksmali-2.2.1.jar” deodex SystemUI.odex -…

ZeroDivisionError:Integer division or modulo by zero

docker环境下&#xff0c;多GPU训练 方式&#xff1a;采用nvidia-docker创建容器 另&#xff1a; 在用sudo无法解决sh文件的pemission denied问题时&#xff0c;采用bash替代sudo

deactive(Deactive breakpoint)

deactive怎么译&#xff1f; de-active 原指吊销, 计算机的专用词叫 "去活". 多指停止某指令.吊销&#xff0c;不激活&#xff0c;关闭 三星bc01指令代码 三星手机总复位&#xff0c;在待机状态下输入*2767*3855#需要专门的智能仪器才可以解开手机密码忘记了 一般普…