热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数值优化:经典一阶确定性算法及其收敛性分析

数值优化:经典一阶确定性算法及其收敛性分析-我们在上一篇博客《数值优化:算法分类及收敛性分析基础》介绍了数值优化算法的历史发展、分类及其收敛性复杂度分析基础。本篇博客我们重点关

我们在上一篇博客《数值优化:算法分类及收敛性分析基础》介绍了数值优化算法的历史发展、分类及其收敛性/复杂度分析基础。本篇博客我们重点关注一阶确定性优化算法及其收敛性分析。

1 梯度下降法

1.1 算法描述

梯度下降法[1]是最古老的一阶方法,由Cauchy在1847年提出。
梯度下降法的基本思想是:最小化目标函数在当前迭代点处的一阶泰勒展开,从而近似地优化目标函数本身。具体地,对函数\(f:\mathbb{R}^n \rightarrow \mathbb{R}\),将其在第\(t\)轮迭代点\(w^t\)处求解下述问题:

上式右端关于自变量\(w\)是线性的,并且使得\(\nabla f(w^t)^Tw\)最小的方向与梯度\(\nabla f(w^t)\)的方向相反。于是梯度下降法的更新规则如下:

其中\(\eta>0\)是步长,也常被称作学习率。

梯度下降法描述如下:

1.2 收敛性分析

针对不同性质的目标函数,梯度下降法具有不同的收敛速率。由于梯度下降法只适用于梯度存在的函数(没有梯度需要考虑使用次梯度的方法),这里考虑梯度下降法对于光滑凸函数和光滑强凸函数的收敛速率。

光滑凸函数收敛性 假设目标函数\(f: \mathbb{R}^d \rightarrow \mathbb{R}\)是凸函数,且\(\beta\)-光滑,当步长\(\eta = \frac{1}{\beta}\)时,梯度下降法具有\(\mathcal{O}(\frac{1}{t})\)次线性收敛速率

光滑强凸函数收敛性 假设目标函数\(f: \mathbb{R}^d \rightarrow \mathbb{R}\)\(\alpha\)-强凸函数,且\(\beta\)-光滑,当步长\(\eta = \frac{1}{\beta}\)时,梯度下降法具有\(\mathcal{O}(e^{-\frac{t}{Q}})\)线性收敛速率

其中\(Q = \frac{\beta}{\alpha}\),一般被称为条件数。

通过以上两个定理可知,强凸性质会大大提高梯度下降法的收敛速率。进一步地,强凸性质越好(即\(\alpha\)越大),条件数\(Q\)越小,收敛越快。

而光滑性质在凸和强凸两种情形下都会加快梯度下降法的收敛速率,即\(\beta\)越小(强凸情景下,条件数\(Q\)越小),收敛越快。可以说凸情形中的光滑系数和强凸情形中的条件数在一定程度上刻画了优化问题的难易程度。

2 投影次梯度下降法

2.1 算法描述

梯度下降法有两个局限,一是只适用于无约束优化问题,二是只适用于梯度存在的目标函数。投影次梯度法[2]可以解决梯度下降法的这两个局限性。

投影次梯度下降法相比梯度下降法,具有次梯度选择约束域投影两个特性:

  • 次梯度选择 选取当前迭代点\(w^t\)的次梯度集合\(\partial f(w^t)\)中随机选取一个次梯度\(g^t\),按照梯度下降更新

    得到\(v^{t+1}\)
  • 约束域投影 确定\(v^{t+1}\)是否属于约束域\(\mathcal{W}\),如果属于则直接将其做为\(w^{t+1}\);如果不属于,则需寻找\(v^{t+1}\)到约束域\(\mathcal{W}\)的投影,也就是\(\mathcal{W}\)中离\(v^{t+1}\)最近的点。如下图所示:

    寻找投影的过程可以经由投影映射\(\Pi_{\mathcal{W}}(\space \cdot \space)\)来完成:

投影次梯度下降法描述如下:

2.2 收敛性分析

在一定步长的选取规则下,投影次梯度法是收敛的,并且收敛速度也依赖于目标函数的凸性和光滑性。

对于\(\beta\)-光滑的凸/强凸函数,当步长为\(\frac{1}{\beta}\)时,投影次梯度下降法的收敛率和梯度下降法相同,对于凸函数是\(\mathcal{O}(\frac{1}{t})\),强凸函数是\(\mathcal{O}(e^{-\frac{t}{Q}})\)

不过,由于投影次梯度算法适用于有次梯度存在的目标函数,因而不仅适用于光滑函数的优化,也适用于Lipschitz连续函数的优化。对于Lipschitz连续函数,投影次梯度下降法收敛。对于凸函数,步长\(\eta = \mathcal{O}(\frac{1}{\sqrt{t}})\)时,收敛速率为\(\mathcal{O}(\frac{1}{\sqrt{t}})\);对于强凸函数,步长\(\eta = \mathcal{O}(\frac{1}{t})\)时,收敛速率为\(\mathcal{O}(\frac{1}{t})\)。可以看到其收敛速率在凸和强凸两种情形相比光滑函数显著降低,都是次线性。

3 近端梯度下降法

3.1 算法描述

近端梯度法[3]是投影次梯度法的一种推广,适用于如下形式的部分不可微的凸目标函数的优化问题:

其中\(l(w)\)是其中的可微凸函数部分,\(R(w)\)是不可微的凸函数(例如\(L_1\)正则项)。算法的基本思想是先按照可微的\(l\)函数进行一步梯度下降更新:

然后再经过近端映射\(\text{prox}_R(\space \cdot \space)\)做为本轮最终的迭代更新:

近端梯度下降法描述如下:

3.2 收敛性分析

如下定理所示,近端梯度下降法可以达到线性收敛速率。

近端梯度下降法收敛性 假设目标函数中的\(l\)函数是\(\mathbb{R}^d\)上的\(\alpha\)-强凸函数,且\(\beta\)-光滑;\(R\)函数是\(\mathbb{R}^d\)上的凸函数, 当步长\(\eta = \frac{1}{\beta}\)时,近端梯度下降法具有\(\mathcal{O}(e^{-\frac{t}{Q}})\)线性收敛速率

其中\(Q = \frac{\beta}{\alpha}\)\(l\)函数的条件数。

4 Frank-Wolfe算法

4.1 算法描述

Frank-Wolfe算法[4]是投影次梯度下降法的另一个替代算法。投影次梯度算法虽然适用于有约束优化问题,但是如果投影的计算很复杂,投影次梯度下降的效率将会称为瓶颈。为了解决此问题,不同于投影次梯度下降法中先进行梯度下降再对约束域进行投影的做法,Frank-Wolfe算法在最小化目标函数的泰勒展开时就将约束条件考虑进去,直接得到满足约束的近似最小点,即:

为了使算法的解更稳定,Frank-Wolfe算法将求解上述子问题得到的\(v^t\)与当前状态\(w^t\)做线性加权:

如下图所示:

\

Frank-Wolfe算法描述如下:

4.2 收敛性分析

Frank-Wolfe算法收敛速率如下列定理所示:

Frank-Wolfe法收敛性 假设目标函数中的\(f\)函数是\(\mathbb{R}^d\)上的凸函数,且\(\beta\)-光滑,当加权系数\(\gamma^t = \frac{2}{t+1}\)时,Frank-Wolfe算法具有\(\mathcal{O}(\frac{1}{t})\)次线性收敛速率

其中\(D = \underset{w, v \in \mathcal{W}}{\text{sup}}\lVert w - v \rVert\)
由于Frank-Wolfe算法的收敛速率和投影次梯度下降法相同,可以依据要解决问题中的投影计算是否困难,在两种算法中选择一种使用。

5 Nesterov加速法

5.1 算法描述

考虑以上所有的一阶算法。在Lipschitz连续的条件下,梯度下降法达到了一阶算法的收敛速率下界。然而对于光滑函数,一阶方法的收敛速率的下界小于梯度下降法的收敛速率。一阶方法在凸情形下的收敛率下界为\(\mathcal{O}(\frac{1}{t^2})\),强凸情形下的下界为\(\mathcal{O}(e^{-\frac{t}{\sqrt{Q}}})\);而梯度下降法在凸情形下的收敛率为\(\mathcal{O}(\frac{1}{t})\),强凸情形下的收敛率为\(\mathcal{O}(e^{-\frac{t}{Q}})\)。这说明我们可以针对光滑函数设计收敛速率更快的一阶方法。

Nesterov在1983年对光滑度目标函数提出了加快一阶优化算法收敛的方法[5]。我们这里以梯度下降法为例,介绍Nesterov加速法的具体实现。
Nesterov算法的基本原理如下图所示:

\

当任意时刻\(t\),对当前状态\(w^t\)进行一步梯度迭代得到辅助变量\(v^{t+1}\)

然后将新的辅助变量和上一轮迭代计算的辅助变量\(v^t\)做线性加权,做为第\(t+1\)轮迭代的参数\(w^{t+1}\)。对于凸和强凸的目标函数,线性加权系数有所不同。

具体地,对于强凸的目标函数,加权规则如下:

其中\(\gamma^t = \frac{1-\sqrt{Q}}{1 + \sqrt{Q}}\)\(Q\)为条件数。

对于凸的目标函数,加权规则如下:

其中\(\gamma^t = \frac{1 - \lambda^t}{\lambda^{t+1}}\)\(\lambda^0 = 0\), \(\lambda^t = \frac{1 + \sqrt{1 + 4{(\lambda^{t-1})}^2}}{2}\)

Nesterov加速算法描述如下:

5.2 收敛性分析

Nesterov证明了用以上方法加速之后的梯度下降法的收敛速率可以达到针对光滑目标函数的一阶方法的收敛速率下界:

光滑凸函数收敛性 假设目标函数\(f: \mathbb{R}^d \rightarrow \mathbb{R}\)是凸函数,并且\(\beta\)-光滑,当步长\(\eta = \frac{1}{\beta}\)时,Nesterov加速法能够将收敛速率提高到\(\mathcal{O}({\frac{1}{t^2}})\)(不过仍是次线性收敛速率):

光滑强凸函数收敛性 假设目标函数\(f: \mathbb{R}^d \rightarrow \mathbb{R}\)\(\alpha\)-强凸函数,并且\(\beta\)-光滑,当步长\(\eta = \frac{1}{\beta}\)时,Nesterov加速法能够将收敛速率提高到\(\mathcal{e^{-\frac{t}{\sqrt{Q}}}}\)(不过仍是线性收敛速率):

其中\(Q = \frac{\beta}{\alpha}\)为条件数。

6 坐标下降法

6.1 算法描述

坐标下降法[6]是另外一种常见的最小化实值函数的方法。其基本思想是,在迭代的每一步,算法选择一个维度,并更新这一维度,其它维度的参数保持不变;或者将维度分为多个块,每次只更新某块中的维度,其它维度保持不变。坐标下降法的更新公式如下:

其中,\(\mathcal{W}_j\)为第\(j\)个维度块的约束域。

对于维度的选择,坐标下降法一般遵循以下本征循环选择规则(Essential Cyclic Rule):存在一个常数\(r\geqslant d\),使得对任意的\(s\),对于每一个维度\(j\),在第\(s\)轮和第\(s + r - 1\)轮之间都至少选择一次。最常见的方法是循环选择规则,即对于任意\(j=1,...,d\),分别在第\(j, d + j, 2d + j,...\)次算法迭代中选择维度\(j\)(即每隔\(d\)轮选择一次)。

坐标下降法的算法描述如下所示:

6.2 收敛性分析

可以证明对于强凸并且光滑的目标函数,循环坐标下降法具有线性的收敛速率[6]

参考

  • [1] Cauchy A. Méthode générale pour la résolution des systemes d’équations simultanées[J]. Comp. Rend. Sci. Paris, 1847, 25(1847): 536-538.
  • [2]
    Levitin E S, Polyak B T. Constrained minimization methods[J]. USSR Computational mathematics and mathematical physics, 1966, 6(5): 1-50.
  • [3] Parikh N, Boyd S. Proximal algorithms[J]. Foundations and Trends in optimization, 2014, 1(3): 127-239.
  • [4] Frank M, Wolfe P. An algorithm for quadratic programming[J]. Naval research logistics quarterly, 1956, 3(1‐2): 95-110.
  • [5] Nesterov Y E. A method for solving the convex programming problem with convergence rate O (1/k^ 2)[C]//Dokl. akad. nauk Sssr. 1983, 269: 543-547.
  • [6]
    Wright S J. Coordinate descent algorithms[J]. Mathematical Programming, 2015, 151(1): 3-34.

推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
author-avatar
秘密不能说雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有