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

news2024/11/17 19:39:22

机器学习笔记之优化算法——线搜索方法[步长角度,精确搜索]

  • 引言
    • 回顾:线搜索方法——方向角度
      • 关于收敛性的假设
      • 关于单调性的假设
      • 下降方向与最速方向
    • 从步长角度观察线搜索方法
      • 关于方向向量的假设
      • 精确搜索过程

引言

上一节介绍了从方向角度认识线搜索方法,本节继续介绍:从步长角度认识线搜索方法。

回顾:线搜索方法——方向角度

关于线搜索方法的迭代过程表示如下:
x k + 1 = x k + α k ⋅ P k x_{k+1} = x_k + \alpha_k \cdot \mathcal P_k xk+1=xk+αkPk

关于收敛性的假设

关于目标函数 f ( X ) f(\mathcal X) f(X),我们通过求解一系列数值解 { x k } k = 0 ∞ \{x_k\}_{k=0}^{\infty} {xk}k=0的方式使得:

  • 随着迭代次数 k k k的增加,对应的 f ( x k ) f(x_k) f(xk)能够有效地收敛,最终得到目标函数的最小值 min ⁡ X ∈ R n f ( X ) \begin{aligned}\mathop{\min}\limits_{\mathcal X \in \mathbb R^{n}} f(\mathcal X)\end{aligned} XRnminf(X),从而得到数值解的最优值 x ∗ x^* x
    x ∗ = arg ⁡ min ⁡ X ∈ R n f ( X ) x^* = \mathop{\arg\min}\limits_{\mathcal X \in \mathbb R^n} f(\mathcal X) x=XRnargminf(X)

关于单调性的假设

为了简化逻辑,我们仅讨论各迭代步骤的数值解 { x k } k = 0 ∞ \{x_k\}_{k=0}^{\infty} {xk}k=0对应的目标函数结果 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0服从严格的单调性。即:
其中 N N N表示非负整数。
∀ k ∈ N ⇒ f ( x k + 1 ) < f ( x k ) \forall k \in N \Rightarrow f(x_{k+1}) < f(x_k) kNf(xk+1)<f(xk)

下降方向与最速方向

基于上一节的相关假设,我们可以得到如下结论:
f ( x k + 1 ) − f ( x k ) ≈ [ ∇ f ( x k ) ] T ⋅ P k < 0 f(x_{k+1}) - f(x_k) \approx \left[\nabla f(x_k)\right]^T \cdot \mathcal P_k < 0 f(xk+1)f(xk)[f(xk)]TPk<0
将上式继续展开:
∣ ∣ ∇ f ( x k ) ∣ ∣ ⋅ ∣ ∣ P k ∣ ∣ cos ⁡ θ < 0 ||\nabla f(x_k)|| \cdot ||\mathcal P_k|| \cos \theta < 0 ∣∣∇f(xk)∣∣∣∣Pk∣∣cosθ<0
从上式可以看出:

  • ∣ ∣ ∇ f ( x k ) ∣ ∣ ||\nabla f(x_k)|| ∣∣∇f(xk)∣∣ ∣ ∣ P k ∣ ∣ ||\mathcal P_k|| ∣∣Pk∣∣分别表示向量 ∇ f ( x k ) , P k \nabla f(x_k),\mathcal P_k f(xk),Pk的模,因而它们恒正。因而向量 ∇ f ( x k ) , P k \nabla f(x_k),\mathcal P_k f(xk),Pk之间的夹角 θ ∈ ( π 2 , 3 π 2 ) \theta \in \left(\begin{aligned}\frac{\pi}{2},\frac{3\pi}{2}\end{aligned} \right) θ(2π,23π)。见下图:
    下降方向与最速方向
    其中蓝色虚线上方的部分表示 θ ∈ ( π 2 , 3 π 2 ) \theta \in \left(\begin{aligned}\frac{\pi}{2},\frac{3\pi}{2}\end{aligned} \right) θ(2π,23π)的区间,由于 P k \mathcal P_k Pk单位向量,因此蓝色虚线上方圆上的点构成的单位向量 P k \mathcal P_k Pk都可以使 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk),我们称这些方向为下降方向 ( Descent Direction ) (\text{Descent Direction}) (Descent Direction)

  • 由于 x k x_k xk上一次迭代产生的数值解,因而 ∣ ∣ ∇ f ( x k ) ∣ ∣ ||\nabla f(x_k)|| ∣∣∇f(xk)∣∣确定的;并且 ∣ ∣ P k ∣ ∣ = 1 ||\mathcal P_k|| = 1 ∣∣Pk∣∣=1,如何使 ∣ ∣ ∇ f ( x k ) ∣ ∣ ⋅ ∣ ∣ P k ∣ ∣ cos ⁡ θ ||\nabla f(x_k)|| \cdot ||\mathcal P_k|| \cos \theta ∣∣∇f(xk)∣∣∣∣Pk∣∣cosθ达到最小,只能通过调整方向( θ \theta θ)来获取最小值

    θ = π \theta = \pi θ=π时, cos ⁡ θ \cos \theta cosθ取得最小值 − 1 -1 1。这意味着:当向量 P k \mathcal P_k Pk与梯度向量 ∇ f ( x k ) \nabla f(x_k) f(xk)方向相反时,可取得当前迭代步骤的最优方向。该方向也被称作最速下降方向 ( Steepest Descent Direction ) (\text{Steepest Descent Direction}) (Steepest Descent Direction)。而梯度下降法也被称作最速下降法

从步长角度观察线搜索方法

关于方向向量的假设

在观察步长的过程中,我们同样需要固定住方向信息。我们首先假定向量 P k \mathcal P_k Pk的方向是下降方向而非最速下降方向;

也可以说:下降方向需要向量 P k \mathcal P_k Pk与负梯度向量 − ∇ f ( x k ) -\nabla f(x_k) f(xk)之间的夹角是锐角
之所以上一节将其范围描述为 ( − π 2 , π 2 ) \begin{aligned} \left(-\frac{\pi}{2},\frac{\pi}{2}\right)\end{aligned} (2π,2π),是因为这种描述方法是将 − ∇ f ( x k ) -\nabla f(x_k) f(xk)方向固定,仅对 P k \mathcal P_k Pk方向进行约束。但实际上:向量 P k \mathcal P_k Pk与向量 − ∇ f ( x k ) -\nabla f(x_k) f(xk)之间夹角向量 − ∇ f ( x k ) -\nabla f(x_k) f(xk)与向量 P k \mathcal P_k Pk之间夹角之间没有区别。因而可将其夹角范围描述为 ( 0 , π 2 ) \begin{aligned} \left(0,\frac{\pi}{2} \right)\end{aligned} (0,2π)
− [ ∇ f ( x k ) ] T P k > 0 ⇒ [ ∇ f ( x k ) ] T P k < 0 - \left[\nabla f(x_k)\right]^T \mathcal P_k > 0 \Rightarrow \left[\nabla f(x_k)\right]^T \mathcal P_k < 0 [f(xk)]TPk>0[f(xk)]TPk<0

精确搜索过程

关于步长 α k \alpha_k αk,我们在优化算法——无约束优化概述中介绍过:无论 α k \alpha_k αk较大还是较小,都会产生负面影响

  • 步长过大,可能会导致即便方向 P k \mathcal P_k Pk正确,但依然使得 f ( x k + 1 ) > f ( x k ) f(x_{k+1}) > f(x_k) f(xk+1)>f(xk),从而使本次迭代产生的 x k + 1 x_{k+1} xk+1无效;
  • 步长过小,相比于步长过大确实能够更少地出现迭代无效的情况,但一直使用较小步长反而在迭代过程中出现不必要的计算代价

思考:在方向向量 P k \mathcal P_k Pk是下降方向的条件下,如何去选择合适的步长 α k \alpha_k αk ? ? ?一个朴素的想法是:使 f ( x k + 1 ) f(x_{k+1}) f(xk+1)达到最小的步长就是最优步长
这里的 P k \mathcal P_k Pk是给定的, x k x_k xk也是给定的,说明该优化问题是一个关于 α \alpha α的一次的优化问题,因此也将线搜索方法称作一维搜索方法。
α k = arg min ⁡ α > 0 f ( x k + 1 ) = arg min ⁡ α > 0 f ( x k + α ⋅ P k ) = { arg min ⁡ α > 0 ϕ ( α ) ϕ ( α ) ≜ f ( x k + α ⋅ P k ) \begin{aligned} \alpha_k & = \mathop{\argmin}\limits_{\alpha > 0} f(x_{k+1}) \\ & = \mathop{\argmin}\limits_{\alpha > 0} f(x_k + \alpha \cdot \mathcal P_k) \\ & = \begin{cases} \mathop{\argmin}\limits_{\alpha > 0} \phi(\alpha) \\\phi(\alpha) \triangleq f(x_k + \alpha \cdot \mathcal P_k) \end{cases} \end{aligned} αk=α>0argminf(xk+1)=α>0argminf(xk+αPk)= α>0argminϕ(α)ϕ(α)f(xk+αPk)
很明显,这就是仅关于 α \alpha α的一元函数,在 α > 0 \alpha > 0 α>0约束条件下求解它的最值是简单的。这种求解步长 α k \alpha_k αk的方式被称作精确搜索方法

既然是要计算 ϕ ( α ) \phi(\alpha) ϕ(α)最值,首先对该函数的梯度进行描述:
∂ ϕ ( α ) ∂ α = ϕ ′ ( α ) = [ ∇ f ( x k + α ⋅ P k ) ] T ⋅ P k \begin{aligned} \frac{\partial \phi(\alpha)}{\partial \alpha} & = \phi'(\alpha) \\ & = \left[\nabla f(x_k + \alpha \cdot \mathcal P_k)\right]^T \cdot \mathcal P_k \end{aligned} αϕ(α)=ϕ(α)=[f(xk+αPk)]TPk

虽然我们并不清楚函数 ϕ ( α ) \phi(\alpha) ϕ(α)的具体形状,但不妨碍我们对该函数中一些特殊点对应的实际意义:

  • α = 0 ⇒ ϕ ( α ) = f ( x k ) \alpha = 0 \Rightarrow \phi(\alpha) = f(x_k) α=0ϕ(α)=f(xk)
    当然,根据 α \alpha α的定义域,它是不可能取到 0 0 0的。但确实存在实际意义:当步长为 0 0 0时, x k + 1 = x k x_{k+1} = x_k xk+1=xk

    关于 α = 0 \alpha = 0 α=0时的梯度 ϕ ′ ( 0 ) \phi'(0) ϕ(0)可以表示为:
    这正是关于方向向量 P k \mathcal P_k Pk的假设。也就是说,函数 ϕ ( α ) \phi(\alpha) ϕ(α)在零点处的斜率是负值
    ϕ ′ ( 0 ) = [ ∇ f ( x k ) ] T P k < 0 \phi'(0) = \left[\nabla f(x_k)\right]^T \mathcal P_k < 0 ϕ(0)=[f(xk)]TPk<0
    我们可以尝试认知一下零点处的切线方程
    这个关于 α \alpha α的一元一次方程斜率是 [ ∇ f ( x k ) ] T P k \left[\nabla f(x_k)\right]^T \mathcal P_k [f(xk)]TPk,并且过点 [ 0 , f ( x k ) ] [0,f(x_k)] [0,f(xk)]点。
    L ( α ) = [ ∇ f ( x k ) ] T P k ⋅ α + f ( x k ) \mathcal L(\alpha) = [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha + f(x_k) L(α)=[f(xk)]TPkα+f(xk)

从管中窥豹的观察,我们可以做一个简单认知: ϕ ( α ) \phi(\alpha) ϕ(α)自身是一个过 [ 0 , f ( x k ) ] [0,f(x_k)] [0,f(xk)],初始梯度是负值的一个复杂函数。如果想要求解它的最值,仅需要令 ∂ ϕ ( α ) ∂ α ≜ 0 \begin{aligned}\frac{\partial \phi(\alpha)}{\partial \alpha} \triangleq 0 \end{aligned} αϕ(α)0从而求解出 α \alpha α最值结果

虽然 ϕ ( α ) \phi(\alpha) ϕ(α)仅包含一个,并且仅有一次的未知项 α \alpha α,但实际情况下,它的求解并不简单。其核心原因是:我们不清楚目标函数 f ( ⋅ ) f(\cdot) f()的复杂程度
这取决于模型、以及任务类型。

  • 首先,目标函数 f ( x k + α ⋅ P k ) f(x_k + \alpha \cdot \mathcal P_k) f(xk+αPk)自身就是一个复杂函数,并且它的梯度 ∇ f ( x k + α ⋅ P k ) \nabla f(x_k + \alpha \cdot \mathcal P_k) f(xk+αPk)同样也是复杂的。
  • 关于梯度 ∇ f ( x k + α ⋅ P k ) \nabla f(x_k + \alpha \cdot \mathcal P_k) f(xk+αPk)并不是仅计算一次,而是每一次迭代过程中都要计算梯度。这使得计算代价可能极高。

该步骤实际上也是一个求解解析解的过程,但实际上我们对每次迭代精确求解最优步长没有必要。我们只希望迭代产生的 f ( x k ) f(x_k) f(xk)收敛即可

下一节我们将讨论:是否可以使用非精确搜索近似每次迭代步长的最优解

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

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

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

相关文章

Python 面向对象的属性与方法

1.私有属性 私有属性用两个下划线开头&#xff0c;表示这个属性只能在本类中使用 class demo_private:# 测试一个私有属性__a 3# 测试一个公有属性b 4print(__a)print(b)class demo_test:print(demo_private.b)print(demo_private.__a)运行结果为&#xff1a; 3 4 4 Attrib…

linux系统将OpenSSH升级到最高版本

一、背景&#xff1a; 公司安全扫描到主机的OpenSSH安全漏洞&#xff0c;由于是虚拟机只能由自己修复&#xff0c;很多OpenSSH的漏洞厂商都没有提供补丁&#xff0c;只能通过禁用scp或者端口的方式临时解决&#xff0c;但是后面使用就不方便了&#xff0c;而且也不安全&#x…

Linux系统挂载Windows的共享文件夹

1&#xff09; 首先点击共享的文件夹 C:\data\ 右键----属性—共享 首先创建挂载目录 /data mkdir /data/ 安装mount.cifs软件包 yum install cifs-utils -y 开始挂载 mount.cifs //192.168.132.142/data /data/ -o userzhaozhengweir,pass123456

[玩转AIGC]sentencepiece训练一个Tokenizer(标记器)

目录 一、前言二、安装三、自己训练一个tokenizer四、模型运行五、拓展 一、前言 前面我们介绍了一种字符编码方式【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 这种方式是对一个一个字符编码&#xff0c;丢失了很多信息比如“机器学习…

Flutter:滑动面板

前言 无意中发现了这个库&#xff0c;发现现在很多app中都有类似的功能。以手机b站为例&#xff0c;当你在看视频时&#xff0c;点击评论&#xff0c;视频会向上偏移&#xff0c;下方划出评论界面。 sliding_up_panel SlidingUpPanel是一个Flutter插件&#xff0c;用于创建滑…

从Vue 2到Vue 3:深入了解路由配置的变化与升级建议

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏:《 VUE 》 《 javaScript 》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 目录 &#x1f4d8; 前言 vue2路由配置 &#x1f4df; 一、控制台安装vue路由 &#x1f4df; 二、项目src文件夹下创建r…

kubernetes搭建GitLab并提供本地域名服务及业务微服务接口集成GitLab

目录 搭建GitLab服务镜像准备数据卷脚本部署脚本服务脚本路由脚本登录及配置 GitLab接口及业务微服务上传代码GitLab接口注意事项业务微服务上传代码注意事项 搭建GitLab服务 业务管理平台需要将本地的代码上传并进行版本管理&#xff0c;选择搭建gitlab私服较为合理&#xff0…

windows 删除无法删除的文件

有两种原因&#xff1a; 文件被占用文件无权限 解决方案 通用解决方案是进入安全模式进行删除 安全模式&#xff1a; 不会启动非必要的进程有最高的系统权限 进入系统配置 安全引导&#xff0c;重启 删除文件 修改系统配置为正常启动 重启

Springer独立出版 | 2023年触觉与虚拟现实国际会议(ICHVR 2023)

会议简介 Brief Introduction 2023年触觉与虚拟现实国际会议(ICHVR 2023) 会议时间&#xff1a;2023年12月15日-17日 召开地点&#xff1a;中国北海 大会官网&#xff1a;www.ichvr.org 2023年触觉与虚拟现实国际会议(ICHVR 2023)由东南大学、上海交通大学联合主办&#xff1b;…

Mybatis 新增/批量新增, 拿到返回的自增主键ID

单个新增 &#xff1a; /** * 插入菜单 * param menuInfo * return */ int insertMenuInfo(MenuInfo menuInfo); xml&#xff1a; <insert id"insertMenuInfo" parameterType"com.XXXX..MenuInfo" keyProperty"id&quo…

MyBatis 快速入门【下】

&#x1f600;前言 本篇博文是一些功能的实现和实现日志输出&#xff0c;希望能够帮到你&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是…

SpringBoot 对接微信公众号模板消息通知

效果图见测试结果&#xff0c;有问题评论 模板消息 开通模板消息功能 登录微信公众平台开通模板消息功能 (未开通时) 添加模板消息 审核通过后&#xff0c;登录微信公众平台&#xff0c;点击 广告与服务 --> 模板消息公众号如果未设置服务类目&#xff0c;则需要先设置服…

安卓抓包神奇黄鸟HttpCanary安装配置及使用教程

1、下载安装包 黄鸟抓包下载地址 2、安装下载的apk 3、证书安装问题 vivo手机我安装时打开黄鸟app&#xff0c;会直接弹出&#xff0c;直接安装即可 其他手机&#xff0c;需要去系统设置中安装 3.1 搜索 证书&#xff0c;选择CA证书 3.2 进行本人操作验证 3.3 安装HttpCa…

MySQL InnoDB死锁原因及改善建议(InnoDB Deadlocks)

死锁是事务型数据库中一种现象&#xff0c;为了在高并发环境下不出错&#xff0c;数据库引入了"锁"这一数据结构来控制资源的并发访问&#xff0c;但也会导致死锁。 目录 一、死锁概念 1.1 死锁的原因 1.2 死锁监测 二、死锁演示 2.1 死锁生成过程 2.2 死锁信息查看 …

cnvd水证书

日常水个证书 本人比较菜&#xff0c;挖cnvd总是挖不倒漏洞&#xff0c;只能从弱口令入手了&#xff0c;一般使用fofa脚本批量跑。 过程&#xff1a; 日常在佛法中我们总是会遇见设备弱口或系统弱口令 一般是看登录成功的特征和口令&#xff0c;写一个对应的弱口令检测脚本…

OceanMind海睿思获评中国信通院“内审数字化产品评测”卓越级(最高级)!

2023年7月27日&#xff0c;由中国内部审计协会、中国通信标准化协会指导&#xff0c;中国信息通信研究院主办的第二届数字化审计论坛在北京成功召开。 大会聚焦内部审计数字化领域先进实践、研究成果、行业发展举措&#xff0c;重磅发布了多项内部审计数字化领域的最新研究和实…

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

我的MacBook Pro:维护心得与实用技巧

文章目录 我的MacBook Pro&#xff1a;维护心得与实用技巧工作电脑概况&#xff1a;MacBook Pro 2019款 16 寸日常维护措施个人维护技巧其他建议 我的MacBook Pro&#xff1a;维护心得与实用技巧 无论是学习还是工作&#xff0c;电脑都是IT人必不可少的重要武器。一台好电脑除…

优化基于tcp,socket的ftp文件传输程序

原始程序&#xff1a; template_ftp_server_old.py&#xff1a; import socket import json import struct import os import time import pymysql.cursorssoc socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST 192.168.31.111 PORT 4101 soc.bind((HOST,PORT)) p…

03-树1 树的同构(c++)

03-树1 树的同构 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 现…