机器学习笔记之优化算法(六)线搜索方法(步长角度;非精确搜索;Glodstein Condition)

引言

上一节介绍了 Armijo \text{Armijo} Armijo准则 ( Armijo Condition ) (\text{Armijo Condition}) (Armijo Condition),本节将继续介绍 Glodstein \text{Glodstein} Glodstein准则 ( Glodstein Condition ) (\text{Glodstein Condition}) (Glodstein Condition)

回顾: Armijo Condition \text{Armijo Condition} Armijo Condition

首先,希望数值解对应的目标函数结果 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0收敛至最优解 f ∗ f^* f
{ f ( x k ) } k = 0 ∞ ⇒ f ∗ \{f(x_k)\}_{k=0}^{\infty} \Rightarrow f^* {f(xk)}k=0f
而数值解对应的目标函数结果满足严格的单调性是一项不可忽视的重要因素:
{ f ( x k + 1 ) = f ( x k + α ⋅ P k ) = ϕ ( α ) ϕ ( α ) = f ( x k + 1 ) < f ( x k ) = ϕ ( 0 ) \begin{cases} \begin{aligned} & f(x_{k+1}) = f(x_k + \alpha \cdot \mathcal P_k) = \phi(\alpha) \\ & \phi(\alpha) = f(x_{k+1}) < f(x_k) = \phi(0) \end{aligned} \end{cases} {f(xk+1)=f(xk+αPk)=ϕ(α)ϕ(α)=f(xk+1)<f(xk)=ϕ(0)
但仅仅满足 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0服从严格的单调性不足以证明 { f ( x k ) } k = 0 ∞ ⇒ f ∗ \{f(x_k)\}_{k=0}^{\infty} \Rightarrow f^* {f(xk)}k=0f。也就是说:后者是前者的必要不充分条件
关于不充分性质的反例,见传送门

Armijo \text{Armijo} Armijo准则产生的动机在于:条件 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk)的约束能力太松散。而具体表现在: ϕ ( α ) \phi(\alpha) ϕ(α)函数中,满足条件 f ( x k + 1 ) < f ( x k ) f(x_{k+1})< f(x_k) f(xk+1)<f(xk) α \alpha α值过多,反而对优秀步长结果的选择产生阻碍
基础条件涵盖范围
观察上图,其中:

  • 蓝色曲线表示 ϕ ( α ) \phi(\alpha) ϕ(α)的函数曲线;
  • 红色虚线表示步长 α \alpha α划分边界 ϕ ( α ) = f ( x k ) \phi(\alpha) = f(x_k) ϕ(α)=f(xk)。因而 f ( x k + 1 ) < f ( x k ) f(x_{k+1})< f(x_k) f(xk+1)<f(xk)描述的是红色虚线下方的部分,具体对应步长 α \alpha α的选择范围见 α \alpha α轴上的红色实线

Armijo Condition \text{Armijo Condition} Armijo Condition关于 f ( x k + 1 ) < f ( x k ) f(x_{k+1})< f(x_k) f(xk+1)<f(xk)条件过于松散的处理方法是:相比于上图中的红色虚线,尝试找到一条更优的直线对 ϕ ( α ) \phi(\alpha) ϕ(α)进行划分,最终使步长 α \alpha α的选择范围明显降低

它选择了 ϕ ( α ) = f ( x k ) \phi(\alpha) = f(x_k) ϕ(α)=f(xk) ϕ ( α ) \phi(\alpha) ϕ(α) α = 0 \alpha=0 α=0处的切线函数: l ( α ) = f ( x k ) + [ ∇ f ( x k ) ] T P k ⋅ α l(\alpha) = f(x_k) + [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha l(α)=f(xk)+[f(xk)]TPkα进行组合,其划分边界函数表示为:
L ( α ) = f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α C 1 ∈ ( 0 , 1 ) \mathcal L(\alpha) = f(x_k) + \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \quad \mathcal C_1 \in (0,1) L(α)=f(xk)+C1[f(xk)]TPkαC1(0,1)
由于 C 1 > 0 , α > 0 \mathcal C_1 >0,\alpha>0 C1>0,α>0(步长的物理意义);并且 [ ∇ f ( x k ) ] T P k < 0 \left[\nabla f(x_k)\right]^T \mathcal P_k < 0 [f(xk)]TPk<0,因此函数 L ( α ) \mathcal L(\alpha) L(α)斜率存在:
关于 [ ∇ f ( x k ) ] T P k < 0 [\nabla f(x_k)]^T \mathcal P_k < 0 [f(xk)]TPk<0详见优化算法——下降方向的推导过程

  • 上界 0 0 0(无法取到),此时 L ( α ) \mathcal L(\alpha) L(α)的函数图像与 ϕ ( α ) = f ( x k ) \phi(\alpha) = f(x_k) ϕ(α)=f(xk)的函数图像重合
  • 下界 [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPk(无法取到),此时 L ( α ) \mathcal L(\alpha) L(α)的函数图像与 l ( α ) l(\alpha) l(α)的函数图像重合

对应函数图像表示如下。可以看到:相比上图, α \alpha α轴上绿色实线描述的步长 α \alpha α选择范围明显小于上图中红色实线描述的范围。从而对最优步长 α \alpha α的选择进行优化。
这里并没有涉及证明过程,仅是从逻辑角度进行描述。
Armijo Condition效果
关于为什么要选择 l ( α ) l(\alpha) l(α)的斜率 [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPk作为下界的描述 ? ? ?主要是因为:该切线函数在局部范围内函数图像(凸函数)中不存在位于该切线下方的函数结果。但这仅仅作用于局部范围。因为我们对完整的 ϕ ( α ) \phi(\alpha) ϕ(α)函数未知,在全局范围中可能存在函数信息位于 l ( α ) l(\alpha) l(α)下方。例如下图描述的 ϕ ( α ) \phi(\alpha) ϕ(α)函数:
初始点对应的切线斜率不是绝对下界
因此,斜率 [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPk并不是绝对下界。但不否认的是: l ( α ) l(\alpha) l(α)的斜率用于划分有效的 α \alpha α步长来说是苛刻,至少比 ϕ ( α ) = f ( x k ) \phi(\alpha) = f(x_k) ϕ(α)=f(xk)描述的范围更加严格。

关于 Armijo Condition \text{Armijo Condition} Armijo Condition的弊端

关于 Armijo \text{Armijo} Armijo规则,我们仅从 L ( α ) \mathcal L(\alpha) L(α)公式的角度也能看出它相比 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) <f(x_k) f(xk+1)<f(xk)更加严格
f ( x k + 1 ) = ϕ ( α ) < L ( α ) = f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α ⏟ < 0 < f ( x k ) f(x_{k+1}) = \phi(\alpha) < \mathcal L(\alpha) = f(x_k) + \underbrace{\mathcal C_1\cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha}_{<0} <f(x_k) f(xk+1)=ϕ(α)<L(α)=f(xk)+<0 C1[f(xk)]TPkα<f(xk)
Armijo \text{Armijo} Armijo规则依然存在弊端:在 C 1 ∈ ( 0 , 1 ) \mathcal C_1 \in (0,1) C1(0,1)的选择过程中,依然存在:满足 ϕ ( α ) < L ( α ) \phi(\alpha) < \mathcal L(\alpha) ϕ(α)<L(α) α \alpha α结果过少,从而这些样本点包含的 α \alpha α范围过小。例如:
其中绿色实线描述 L ( α ) \mathcal L(\alpha) L(α),其对应的有效范围见 α \alpha α轴上的绿色实线。可以看出,覆盖的 α \alpha α范围极小并且对应的 ϕ ( α ) \phi(\alpha) ϕ(α)结果也不够优秀。
包含a范围过小
上述情况是有可能出现的,虽然我们并不执著最小值一定位于 ϕ ( α ) < L ( α ) \phi(\alpha) < \mathcal L(\alpha) ϕ(α)<L(α)所描述的 α \alpha α范围内(因为是求数值解),但我们同样希望:排除掉类似这种 α \alpha α较小,并且质量不高的情况,或者:我们更希望 ϕ ( α ) \phi(\alpha) ϕ(α)核心部分有机会出现在范围内

Glodstein Condition \text{Glodstein Condition} Glodstein Condition

Glodstein Consition \text{Glodstein Consition} Glodstein Consition是在 Armijo Condition \text{Armijo Condition} Armijo Condition的基础上,给 ϕ ( α ) \phi(\alpha) ϕ(α)的范围加上一个下界
{ Glodstein Condition :  f ( x k ) + C 2 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α ⏟ Lower Bound ≤ ϕ ( α ) ≤ f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α ⏟ Upper Bound;Armijo Condition C 1 + C 2 = 1 \begin{cases} \text{Glodstein Condition : }\underbrace{f(x_k) + \mathcal C_2 \cdot [\nabla f(x_k)]^T\mathcal P_k \cdot \alpha}_{\text{Lower Bound}} \leq \phi(\alpha) \leq \underbrace{f(x_k) + \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha}_{\text{Upper Bound;Armijo Condition}} \\ \quad \\ \mathcal C_1 + \mathcal C_2 = 1 \end{cases} Glodstein Condition : Lower Bound f(xk)+C2[f(xk)]TPkαϕ(α)Upper Bound;Armijo Condition f(xk)+C1[f(xk)]TPkαC1+C2=1
经过整理,使用一个参数 C \mathcal C C对上述范围进行描述:
f ( x k ) + ( 1 − C ) [ ∇ f ( x k ) ] T P k ⋅ α ≤ ϕ ( α ) ≤ f ( x k ) + C ⋅ [ ∇ f ( x k ) ] T P k α C ∈ ( 0 , 1 2 ) f(x_k) + (1 - \mathcal C) [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \leq \phi(\alpha) \leq f(x_k) + \mathcal C \cdot [\nabla f(x_k)]^T \mathcal P_k \alpha \quad \mathcal C \in \left(0,\frac{1}{2}\right) f(xk)+(1C)[f(xk)]TPkαϕ(α)f(xk)+C[f(xk)]TPkαC(0,21)
对应的函数图像表示如下:
Goldstein Condition示例
其中两条绿色实线关于 f ( x k ) + 1 2 [ ∇ f ( x k ) ] T P k ⋅ α \begin{aligned}f(x_k) + \frac{1}{2} [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha\end{aligned} f(xk)+21[f(xk)]TPkα(蓝色虚线)对称,两条绿色实线之间的范围就是 ϕ ( α ) \phi(\alpha) ϕ(α)有效的选择范围。其对应的 α \alpha α选择范围见上图 α \alpha α轴上的绿色实线

从而可以通过修改 C \mathcal C C的数值,从而调整上图绿色实线之间的夹角。这种 ϕ ( α ) \phi(\alpha) ϕ(α)的选择方式极大程度地将 ϕ ( α ) \phi(\alpha) ϕ(α)核心部分包含在选择范围内。从而缓解了 Armijo Condition \text{Armijo Condition} Armijo Condition的弊端。

Goldstein Condition \text{Goldstein Condition} Goldstein Condition的弊端

即便 Goldstein Condition \text{Goldstein Condition} Goldstein Condition缓解了 Armijo Condition \text{Armijo Condition} Armijo Condition的弊端。但其自身也同样存在弊端当参数 C \mathcal C C接近 1 2 \begin{aligned}\frac{1}{2}\end{aligned} 21时,上下界均会朝着中心轴 f ( x k ) + 1 2 [ ∇ f ( x k ) ] T P k ⋅ α \begin{aligned}f(x_k) + \frac{1}{2} [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha\end{aligned} f(xk)+21[f(xk)]TPkα方向靠拢。最终可能得到如下效果:

  • 虽然这里描述的 ϕ ( α ) \phi(\alpha) ϕ(α)范围还比较优秀,但这只是特例。在两条绿线之间的夹角极小时,我们映射出的 ϕ ( α ) \phi(\alpha) ϕ(α)范围以及对应的 α \alpha α范围都非常小,后面可能导致其将一些优质的 α \alpha α结果给过滤掉。
  • 但与 Armijo Condition \text{Armijo Condition} Armijo Condition相比, Goldstein Condition \text{Goldstein Condition} Goldstein Condition确实将选择范围集中在 ϕ ( α ) \phi(\alpha) ϕ(α)的核心位置,而不是数量少的,较偏的 ϕ ( α ) \phi(\alpha) ϕ(α)位置上。
    Goldstein Condition的弊端

下一节针对 Glodstein Condition \text{Glodstein Condition} Glodstein Condition C \mathcal C C值过于接近 1 2 \begin{aligned}\frac{1}{2}\end{aligned} 21而导致优质 α \alpha α结果被误杀的情况,我们介绍 Wolfe Condition \text{Wolfe Condition} Wolfe Condition

相关参考:
【优化算法】线搜索方法-步长-Glodstein Condition

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins准备

回到目录 jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&#xff0c;也可独立运行。通常与版本管理工具(SCM)、构…

【设计模式】单例模式

什么是单例模式&#xff1f; 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点 单例模式的应用场景 1.整个程序的运行中只允许有一个类的实例&#xff1b; 2.需要频繁实例化然后销毁的对象。 3.创建对象时耗时过多或者耗资源过多&#xff0c;但又经常用到…

如何在 Rust 中运行 Lua 程序

在Rust中&#xff0c;你可以使用rust-lua这个库来运行Lua程序。下面是一个简单的例子&#xff1a; 首先&#xff0c;将 rust-lua 添加到你的 Cargo.toml 文件中&#xff1a; [dependencies] rust-lua "0.36"然后&#xff0c;在你的Rust代码中&#xff0c;你可以使…

Framework入门02-应用进程

2-1 你知道应用进程是怎么启动的吗? (1) Linux下进程启动的方式 pidfork(),这个方法会返回2次。pid为0时在子进程执行&#xff0c;pid为子进程的进程id时&#xff0c;在父进程执行。若在子进程中&#xff0c;没有execve(path, argv, env)函数&#xff0c;则子进程共享父进程…

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者&#xff1a;海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系&#xff0c;自 2013 年起历经十年发展&#xff0c;可信云服务评估体系已日臻成熟&#xff0c;成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…

linux中校验文件的sha256sum值

用途 下载源文件和校验文件进行校验&#xff0c;防止被中间人篡改文件内容。 同理的还有yum仓库&#xff0c;加载第三方库时&#xff0c;要先导入一个key密钥。 sha256校验 这里用helm软件包示例 curl -LO https://get.helm.sh/helm-v3.12.0-linux-amd64.tar.gzcurl -LO ht…

【云原生】K8S二进制搭建一

目录 一、环境部署1.1操作系统初始化 二、部署etcd集群2.1 准备签发证书环境在 master01 节点上操作在 node01与02 节点上操作 三、部署docker引擎四、部署 Master 组件4.1在 master01 节点上操 五、部署Worker Node组件 一、环境部署 集群IP组件k8s集群master01192.168.243.1…

EventBus 开源库学习(二)

整体流程阅读 EventBus在使用的时候基本分为以下几步&#xff1a; 1、注册订阅者 EventBus.getDefault().register(this);2、订阅者解注册&#xff0c;否者会导致内存泄漏 EventBus.getDefault().unregister(this);3、在订阅者中编写注解为Subscribe的事件处理函数 Subscri…

ceil(),floor(),round()函数C++详解

ceil&#xff08;&#xff09; ceil()函数是这样的&#xff1a; double ceil(double x) ceil函数可以把x上取整。 例子&#xff1a; #include <bits/stdc.h> using namespace std; int main() {double a, b;cin >> a >> b;printf("ceil(%.2f) %.2…

TensorFlow搭建神经网络

TensorFlow版本&#xff1a;2.13.0TensorFlow官方文档TensorFlow官方文档中文版 TensorFlow中搭建并训练一个神经网络分为以下几步&#xff1a; 定义神经网络配置损失函数以及优化器训练&#xff1a;反向传播、梯度下降 下面以LeNet-5为例&#xff0c;搭建一个卷积神经网络用…

消息队列项目(2)

我们使用 SQLite 来进行对 Exchange, Queue, Binding 的硬盘保存 对 Message 就保存在硬盘的文本中 SQLite 封装 这里是在 application.yaml 中来引进对 SQLite 的封装 spring:datasource:url: jdbc:sqlite:./data/meta.dbusername:password:driver-class-name: org.sqlite.…

自定义elementui的主题

通常情况下&#xff0c;我们使用elementui框架的时候默认组件的主题都是白色的&#xff0c;比如&#xff1a; 但是如果想自定义主题&#xff0c;改变主题颜色&#xff0c;以及各种默认颜色&#xff0c;其实也不难&#xff1a; 配置默认主题&#xff0c;选好后点击下载 在vu…

【云计算 | Docker】Docker容器后台运行不了?entrypoint在作妖?

1. 问题 使用镜像alpine起个容器&#xff0c;使其保持后台运行&#xff0c;正常情况有如下的效果&#xff0c;可以发现容器保持运行状态。 [rootk8s-master helloWorld]# docker run -dit docker.io/alpine /bin/sh 8d39d7579d5e4f1a560aef16ba57ab5cae2506ea9105e21cbc0634…

python + seaborn绘制条形图

文章目录 条形图countplotpointplot条形图 条形图是我们熟悉的一种绘图方式,它可以实现这一目标。在 seaborn 中,barplot() 函数对一个完整的数据集进行操作,并应用一个函数来获取估计值(默认情况下取平均值)。当每个类别中有多个观测值时,它还会使用引导法计算估计值的…

墨觉Run Plus耳机真的很好嘛?南卡、韶音、墨觉哪个好

随着近年来蓝牙耳机市场的快速变化&#xff0c;耳机的样式也在不断演变&#xff0c;从入耳式发展到无需入耳的骨传导耳机。骨传导耳机因其可以通过骨传导技术进行声音传输&#xff0c;无需贴合耳道即可实现耳机功能&#xff0c;因此备受市场欢迎。尤其是近两年&#xff0c;骨传…

关于简单C++函数在内存中的存储问题

举例 int main(){... }int data(){... }int add(){... } 在分段式存储管理时&#xff0c;根据人们的需求&#xff0c;人为分段存储 如图&#xff1a;

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日&#xff0c;周三晚上 今天我看到了这样的两行代码&#xff1a; std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问&#xff1a; 为什么有时候用ios_base::o…

Matlab实现支持向量机算法(附上多个完整仿真源码)

支持向量机是一种常见的机器学习算法&#xff0c;它可以用于分类和回归问题。在Matlab中使用支持向量机&#xff0c;可以方便地构建和训练模型&#xff0c;并进行预测和评估。本文将介绍Matlab支持向量机的基本原理以及一个简单的分类案例。 文章目录 1. 支持向量机的基本原理2…

JAVA实现动态代理的两种方式及主要的区别

两种动态代理 JAVA中实现动态代理主要目的是为了实现AOP&#xff0c;即面向切面编程。 而动态代理主要是在程序运行期间&#xff0c;基于原类生成代理类&#xff0c;并且将需要织入的代码加入到代理类的方法中&#xff0c;可以实现动态的代码链接。 JAVA实现动态代理的两种方式…

如何通过 WordPress 数据库启用插件?【进不去后台可用】

如果您无法访问 WordPress 后台并需要激活插件以恢复访问权限&#xff0c;则可以通过 WordPress 数据库来实现。本文将向您展示如何使用数据库轻松激活 WordPress 插件。 何时使用数据库激活 WordPress 插件&#xff1f; 许多常见的 WordPress 错误会阻止网站所有者访问 WordP…