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

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

  • 引言
    • 回顾:精确搜索步长及其弊端
    • 非精确搜索近似求解最优步长的条件
      • 反例论述

引言

上一节介绍了从精确搜索的步长角度观察了线搜索方法,本节将从非精确搜索的步长角度重新观察线搜索方法。

回顾:精确搜索步长及其弊端

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

  • 变量 x k , x k + 1 ∈ { x k } k = 0 ∞ x_k,x_{k+1} \in \{x_{k}\}_{k=0}^{\infty} xk,xk+1{xk}k=0表示先搜索处理优化问题时,迭代过程中产生的数值解
  • α k \alpha_{k} αk是一个标量,表示步长信息;
  • P k \mathcal P_k Pk可视作一个单位向量,描述当前迭代步骤下数值解更新的方向信息。
    如果 P k \mathcal P_k Pk是一个描述方向的常规向量,依然可以将其表示为”系数 × \times ×单位向量“的形式,最后将系数与 α k \alpha_k αk合并即可。

而基于精确搜索线搜索方法寻找最优步长的基本逻辑是:

  • 固定住单位向量 P k \mathcal P_k Pk,此时关于当前时刻数值解对应的目标函数 f ( x k + 1 ) f(x_{k+1}) f(xk+1)可看作是仅与步长变量 α \alpha α相关的一个函数 ϕ ( α ) \phi(\alpha) ϕ(α)
    f ( x k + 1 ) = f ( x k + α ⋅ P k ) ≜ ϕ ( α ) \begin{aligned} f(x_{k+1}) = f(x_k + \alpha \cdot \mathcal P_k) \triangleq \phi(\alpha) \end{aligned} f(xk+1)=f(xk+αPk)ϕ(α)
  • 通过选择合适步长 α k \alpha_k αk,使得目标函数 f ( x k + 1 ) f(x_{k+1}) f(xk+1)达到最小,从而达到当前迭代步骤优化程度最大的目的
    α k = arg ⁡ min ⁡ α > 0 f ( x k + 1 ) \alpha_k = \mathop{\arg\min}\limits_{\alpha > 0} f(x_{k+1}) αk=α>0argminf(xk+1)

具体步骤表示如下:
对每个迭代步骤 k = 1 , 2 , ⋯   , ∞ k=1,2,\cdots,\infty k=1,2,,执行如下操作:
由于此时 f ( x k + 1 ) = ϕ ( α ) f(x_{k+1}) = \phi(\alpha) f(xk+1)=ϕ(α)仅包含 α \alpha α一个变量,因而仅需要对 ϕ ( α ) \phi(\alpha) ϕ(α)求导,然后从极值中选出最小值即可。

  • 关于 ϕ ( α ) \phi(\alpha) ϕ(α) α \alpha α进行求导操作:
    ∂ ϕ ( α ) ∂ α = [ ∇ f ( x k + α ⋅ P k ) ] T ⋅ P k \frac{\partial \phi(\alpha)}{\partial \alpha} = \left[\nabla f(x_k + \alpha \cdot \mathcal P_k)\right]^T \cdot \mathcal P_k αϕ(α)=[f(xk+αPk)]TPk
  • ∂ ϕ ( α ) ∂ α ≜ 0 \begin{aligned}\frac{\partial \phi(\alpha)}{\partial \alpha} \triangleq 0\end{aligned} αϕ(α)0,从而求解位于极值点 α \alpha α信息,再选择使 f ( x k + 1 ) f(x_{k+1}) f(xk+1)最小对应的 α \alpha α即可,示例图像表示如下:
    这仅仅是关于 ϕ ( α ) \phi(\alpha) ϕ(α)的一种描述。由于我们对目标函数 f ( ⋅ ) f(\cdot) f()未知,我们不能得到 ϕ ( α ) \phi(\alpha) ϕ(α)精确的函数图像。唯一知道 ϕ ( 0 ) = f ( x k ) \phi(0) = f(x_k) ϕ(0)=f(xk)(无法取到)且 ∂ ϕ ( α ) ∂ α ∣ α = 0 < 0 \begin{aligned}\frac{\partial \phi(\alpha)}{\partial \alpha} |_{\alpha=0} < 0\end{aligned} αϕ(α)α=0<0,详细过程见上一节。
    phi(alpha)函数图像示例

貌似上述流程看起来并不复杂,但在真实环境下,精确搜索参与的迭代过程可能是麻烦的:

  • 首先,对于目标函数 f ( ⋅ ) f(\cdot) f()的复杂程度我们一无所知。真实环境中, f ( ⋅ ) f(\cdot) f()可能是极复杂的。这意味着: ∂ ϕ ( α ) ∂ α \begin{aligned}\frac{\partial \phi(\alpha)}{\partial \alpha}\end{aligned} αϕ(α)可能极难表达甚至是无法表达
  • 其中求导以及获取极值的操作仅仅是一次迭代过程中的操作。若每一次迭代过程都要执行上述操作,对应的计算代价有可能极高
  • 实际上,精确求解当前迭代步骤的最优步长不是我们关注的重点,我们希望每次迭代过程中,使用较小的计算代价得到一个比较不错的步长结果,从而降低整体计算代价。

很明显,精确搜索的求解过程是一个求解析解的过程。下面我们观察如何通过求解数值解的方式对最优步长的获取过程进行优化。

非精确搜索近似求解最优步长的条件

首先思考:步长变量 α \alpha α需要满足什么条件,才能够使 { 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 ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0服从严格的单调性
ϕ ( α ) = f ( x k + 1 ) < f ( x k ) = ϕ ( 0 ) k = 0 , 1 , 2 , ⋯ \phi(\alpha) = f(x_{k+1}) < f(x_k) = \phi(0) \quad k=0,1,2,\cdots ϕ(α)=f(xk+1)<f(xk)=ϕ(0)k=0,1,2,
新的思考:如果步长变量 α \alpha α仅仅满足上述条件,是否能够保证 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0最终收敛至最优解 ? ? ?

答案是否定的,并且关于两个事件:

  • 事件 1 1 1 ϕ ( α ) = f ( x k + 1 ) < f ( x k ) = ϕ ( 0 ) k = 0 , 1 , 2 , ⋯ \phi(\alpha) = f(x_{k+1}) < f(x_k) = \phi(0) \quad k=0,1,2,\cdots ϕ(α)=f(xk+1)<f(xk)=ϕ(0)k=0,1,2,
  • 事件 2 2 2 { f ( x k ) } k = 0 ∞ ⇒ f ∗ \{f(x_k)\}_{k=0}^{\infty} \Rightarrow f^* {f(xk)}k=0f

事件 1 1 1是事件 2 2 2必要不充分条件。也就是说:事件 1 1 1推不出事件 2 2 2,相反,事件 2 2 2能够推出事件 1 1 1

反例论述

这里描述一个反例

  • 假设真正的目标函数 f ( ⋅ ) f(\cdot) f()表示如下:
    目标函数示例

可以看出,该目标函数存在最小值 − 1 -1 1。而我们的目标是通过求数值解的方式取到 − 1 -1 1

  • 而这个数值解仅仅受到事件 1 1 1的约束。也就是说:在迭代过程中仅满足 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk)即可。至此,假设:数值解 { x k } k = 1 ∞ \{x_k\}_{k=1}^{\infty} {xk}k=1对应的目标函数结果 { f ( x k ) } k = 1 ∞ \{f(x_k)\}_{k=1}^{\infty} {f(xk)}k=1满足如下函数
    f ( x k ) = 5 k f(x_{k}) = \frac{5}{k} f(xk)=k5
    解释:
    函数 f ( x k ) = 5 k \begin{aligned} f(x_k) = \frac{5}{k}\end{aligned} f(xk)=k5我们假设的,隐藏在背后的逻辑。而真正被我们看到的是下面由表格组成的关于 { f ( x k ) } k = 1 ∞ \{f(x_k)\}_{k=1}^{\infty} {f(xk)}k=1的序列信息:
    其中 x 0 x_0 x0是初始化的,不在函数内。这里假设 x 0 = 10 x_0 = 10 x0=10,但在本示例中假设的值要 > 5 = f ( x 1 ) >5 = f(x_1) >5=f(x1)。之所以要将函数设置成这种格式,是因为基于该函数产生的序列满足事件1: f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk)
k k k 0 ( init ) 0(\text{init}) 0(init) 1 1 1 2 2 2 3 3 3 ⋯ \cdots
f ( x k ) f(x_k) f(xk) 10 10 10 5 5 5 5 2 \begin{aligned}\frac{5}{2}\end{aligned} 25 5 3 \begin{aligned}\frac{5}{3}\end{aligned} 35 ⋯ \cdots

至此,我们找到了一组满足事件 1 1 1由数值解的目标函数结果构成的序列 { f ( x k ) } k = 0 ∞ = { 10 , 5 , 5 2 , 5 3 , ⋯ } \{f(x_k)\}_{k=0}^{\infty} = \left\{10,5,\begin{aligned}\frac{5}{2},\frac{5}{3},\cdots\end{aligned} \right\} {f(xk)}k=0={10,5,25,35,},我们观察:这组序列是否能够找到目标函数最优解

  • 初始状态下, [ x 0 , f ( x 0 ) = 10 ] [x_0,f(x_0) = 10] [x0,f(x0)=10]在图中表示如下。
    • 由于此时的梯度仅仅是一个 1 1 1维向量,在函数图像中对应函数在该点上的斜率。而在横坐标上,梯度的方向仅有两个:正向(右侧;顺着坐标轴的方向);反向(逆着坐标轴的方向)。因此,图中所说的下降方向必然是最速下降方向(因为只有两个方向)。
    • 由于 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))在图中对应位置的斜率是正值,因此下一时刻更新的方向必然是负梯度方向(反向),见红色箭头。
      初始化x0
  • 观察第二个点: [ x 1 , f ( x 1 ) = 5 ] [x_1,f(x_1) = 5] [x1,f(x1)=5],对应图像表示如下:
    • 在该目标函数中,函数值为 5 5 5存在两个对应的横坐标。实际上取哪个点都不影响梯度的观察。这里为方便观察,取左侧的横坐标,后续类似情况同理。
    • 左侧点斜率是负值,因而它的负梯度方向是正向,见红色箭头。
      x0x1
  • 同理,可以将 [ x 2 , f ( x 2 ) = 5 2 ] , [ x 3 , f ( x 3 ) = 5 3 ] \begin{aligned} \left[x_2,f(x_2) = \frac{5}{2}\right],\left[x_3,f(x_3) = \frac{5}{3}\right]\end{aligned} [x2,f(x2)=25],[x3,f(x3)=35]及其对应梯度方向表示在图像上:
    x0-x3
  • 以此类推。我们可以按照 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0的顺序,将梯度变化路径用红色箭头描述出来:
    梯度变化路径示例
  • 从上图可以看出,随着迭代次数 k k k的增加,我们都会产生新的点并震荡下去。但是否能够震荡到最小值 ? ? ?这取决于: k → ∞ k \to \infty k时, f ( x k ) f(x_k) f(xk)的取值结果
    lim ⁡ k → ∞ f ( x k ) = 5 ∞ ≈ 0 \mathop{\lim}\limits_{k \to \infty} f(x_k) = \frac{5}{\infty} \approx 0 klimf(xk)=50
    最终,它只会在 x x x轴的上方,无限地朝向 0 0 0的方向震荡,而不会越过 x x x轴,向最优值 − 1 -1 1进行震荡

综上,上述反例满足事件 1 1 1的条件,但它可能不会一定收敛到最优解。也就是说:仅使用 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk)对步长 α \alpha α进行判别是不可行的
上述反例描述的是: { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0能够收敛,但没有收敛到最优解。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

纯靠TikTok解压玩具,21岁小伙成功登顶福布斯!

APA的报告说&#xff0c;每年有四千万左右的大人也在受到焦虑的困扰。看来&#xff0c;在Z世代中有90%的人因压力大出现心理或身体症状的现象并不稀奇了。 近几年越来越严重&#xff0c;大家都在四处找寻解压的良方。TikTok上的“#decompression”&#xff08;减压&#xff09…

实时数据监测与三维可视化:数字孪生技术引领工业互联网发展

随着工业互联网的快速发展&#xff0c;数字孪生技术作为其中的重要组成部分&#xff0c;正逐渐引起广泛关注。数字孪生是将实体世界的实时数据与数字模型相结合&#xff0c;形成实体与数字世界的虚拟镜像&#xff0c;为工业互联网带来了前所未有的效率和质量提升。 首先&#x…

手机python编程软件怎么用,手机python编程软件下载

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;手机python编程软件保存的代码在哪里&#xff0c;手机python编程软件怎么运行&#xff0c;现在让我们一起来看看吧&#xff01; 原标题&#xff1a;盘点几个在手机上可以用来学习编程的软件 前天在悟空问答的时候&#…

给你一个网站如何测试?

主要围绕&#xff0c;功能&#xff0c;页面 UI &#xff0c;兼容&#xff0c;性能&#xff0c;安全&#xff0c;这几个方面去聊&#xff0c;首先是制定测试计划&#xff0c;确定测试范围和测试策略&#xff0c;一般包括以下几个部分&#xff1a;功能性测试&#xff1b;界面测试…

160. 相交链表

160. 相交链表 题目方法1双指针方法2哈希表 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…

【网络】数据链路层

目录 一、以太网 二、以太网帧格式 三、 MTU 1、MTU概念 2、 MTU对IP协议的影响 3、MTU对UDP协议的影响 4、 MTU对于TCP协议的影响 四、MAC地址 五、 ARP协议 1、ARP协议的作用 2、ARP协议的工作流程 3、ARP数据报的格式 4、中间人 数据链路层解决的&#xff0c;是…

自动化测试的优缺点

围绕测试自动化有很多议论&#xff0c;组织正在进行大量投资以利用测试自动化的好处。测试自动化可以指使用软件工具自动执行测试、将实际结果与预期结果进行比较以及报告差异/错误的过程。实施测试自动化的主要原因之一是减少手动工作和相关风险&#xff0c;同时测试重复性任务…

实例详解如何选择滤波算法

在机器视觉中,图像滤波器无处不在。例如,它们用于减少图像噪声,改善对比度或检测边缘。本文将向您介绍MVTec HALCON中一些最常用的滤波器,它们是如何工作的以及可以用于什么。 mean_image:均值滤波器 首先,我们读取具有背景纹理的示例图像。我们的目标是在不改变实际信…

load、unload和pagehide、pageshow

一、load、unload和pagehide、pageshow的主要应用 1&#xff09;load 和 unload 事件监听web页面的进入和离开&#xff0c;一般用于页面的首次加载、刷新和关闭等操作的监听&#xff1b; 2&#xff09;pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…

【C++】——类和对象

目录 面向过程和面向对象的初步认识类的引入类的定义类的访问限定符及封装类的作用域类的实例化this指针类的6个默认成员函数构造函数析构函数 面向过程和面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析求解问题的步骤&#xff0c;通过函数调用…

PHP使用PhpSpreadsheet实现导出Excel时带下拉框列表 (可支持三级联动)

因项目需要导出Excel表 需要支持下拉 且 还需要支持三级联动功能 目前应为PHPExcel 不在维护&#xff0c;固采用 PhpSpreadsheet 效果如图&#xff1a; 第一步&#xff1a;首先 使用composer 获取PhpSpreadsheet 我这里PHP 版本 7.4 命令如下&#xff1a; composer r…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 31 日论文合集)

文章目录 一、检测相关(9篇)1.1 Semi-Supervised Object Detection in the Open World1.2 Multi-layer Aggregation as a key to feature-based OOD detection1.3 Non-invasive Diabetes Detection using Gabor Filter: A Comparative Analysis of Different Cameras1.4 Local …

ABAP 自定义搜索功能 demo1

ABAP 自定义搜索功能 demo1 效果&#xff1a; 双击选中行则为选中对应发票 实现 1定义 定义屏幕筛选参数 SELECTION-SCREEN BEGIN OF SCREEN 9020. SELECT-OPTIONS:s1_belnr FOR rbkp-belnr, s1_gjahr FOR rbkp-gjahr, s1_lifnr FOR rbkp-lifnr, s1_erfna FOR rbkp-erfnam, …

详解AMQP协议

目录 1.概述 1.1.简介 1.2.抽象模型 2.spring中的amqp 2.1.spring amqp 2.2.spring boot amqp 1.概述 1.1.简介 AMQP&#xff0c;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议。 百度百科上的介绍&#xff1a; 一个提供统一消息服务的应用层标准高…

插入排序算法

插入排序 算法说明与代码实现&#xff1a; 以下是使用Go语言实现的插入排序算法示例代码&#xff1a; package mainimport "fmt"func insertionSort(arr []int) {n : len(arr)for i : 1; i < n; i {key : arr[i]j : i - 1for j > 0 && arr[j] > …

深入理解负载均衡原理及算法

1. 前言 在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服…

react中hooks分享

一. HOOKS是什么 在计算机程序设计中&#xff0c;钩子一词涵盖了一系列技术&#xff0c;这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

细讲一个 TCP 连接能发多少个 HTTP 请求(一)

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么&#xff0c;大多数回答都是说请求响应之后 DOM 怎么被构建&#xff0c;被绘制出来。但是你有没有想过&#xff0c;收到的 HTML 如果包含几十个图片标签&#xff0c;这些图片是以什么方式、什么顺序、建…