非凸函数上,随机梯度下降能否收敛?网友热议:能,但有条件,且比凸函数收敛更难

本文主要是介绍非凸函数上,随机梯度下降能否收敛?网友热议:能,但有条件,且比凸函数收敛更难,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

非凸函数上,随机梯度下降能否收敛?网友热议:能,但有条件,且比凸函数收敛更难

机器学习研究组订阅  2022-02-07 18:16

非凸优化问题被认为是非常难求解的,因为可行域集合可能存在无数个局部最优点,通常求解全局最优的算法复杂度是指数级的(NP 困难)。那么随机梯度下降能否收敛于非凸函数?针对这一问题,众多网友进行了一番讨论。

在机器学习领域,我们经常会听到凸函数和非凸函数,简单来讲,凸函数指的是顺着梯度方向走,函数能得到最优解 ,大部分传统机器学习问题都是凸的。而非凸指的是顺着梯度方向走能够保证是局部最优,但不能保证是全局最优,深度学习以及小部分传统机器学习问题都是非凸的。

在寻求最优解的过程中,研究者通常采用梯度下降算法。近日,reddit 上的一个热议帖子,帖子内容为「随机梯度下降能否收敛于非凸函数?」

原贴内容包括:大量的研究和工作表明梯度下降算法可以收敛于(确定性)凸函数、可微和利普希茨连续函数

然而,在非凸函数领域,基于梯度下降算法(例如随机梯度下降)的收敛程度有多大,目前看来研究还不够充分。例如,神经网络中的损失函数几乎是非凸的。非凸函数通常有鞍点(即损失函数的一阶导数为 0 的点),我们可以将这些鞍点视为「陷阱」,鞍点的存在阻止梯度下降到最优点,因为梯度下降在导数为 0 时不能向前移动。

两座山中间的鞍点(双纽线的交叉点)

在机器学习、深度学习中使用的优化算法除了常见的梯度下降和随机梯度下降,还包括其他版本,例如 Nesterov 动量、Adam、RMSprop 等几种优化器,这些优化器旨在让梯度远离鞍点。对于这些算法,发帖者很熟悉,但 ta 比较感兴趣的是随机梯度下降算法本身的理论局限性有哪些?

在过去的几周里,发帖人一直在阅读有关这个主题的文章,但是理解其中一些结果所需的数学知识远远超出了 ta 的能力范围。为了弄清这个问题,ta 也查阅了大量的文献,以下是其中 2 篇:

文献 1:Stochastic Gradient Descent for Nonconvex Learning without Bounded Gradient Assumptions

  • 随机梯度下降被大量应用于非凸函数,但研究者对非凸函数的随机梯度下降的理论尚未完全了解(目前仅对凸函数的随机梯度下降有了解);

  • 现阶段随机梯度下降要求对梯度的一致有界性施加一个假设;

  • 论文作者建立了非凸函数随机梯度下降理论基础,使有界假设可以消除而不影响收敛速度;

  • 论文建立了应用于非凸函数随机梯度下降收敛的充分条件和最优收敛速度。

文献 2 :Stochastic Gradient Descent on Nonconvex Functions with General Noise Models

  • 尽管随机梯度下降的最新进展值得注意,但这些进展是建立在对正在优化的函数施加了某些限制(例如,凸性、全局利普希茨连续等)的基础之上;

  • 作者证明,对于一般类的非凸函数,随机梯度下降迭代要么发散到无穷大,要么收敛到概率为 1 的静止点;

  • 作者进一步限制并证明,无论迭代是发散还是保持有限 —— 在随机梯度下降的迭代中评估的梯度函数的范数以概率 1 收敛到零,并且符合预期;从而扩大了随机梯度下降可以应用于的函数范围,同时保持对其全局行为的严格保证。

发帖人表示:基于这些文献,我们是否真的能够证明(随机)梯度下降有潜力在非凸函数上显示类似的全局收敛性质,达到之前仅在凸函数上显示收敛程度

但是我们仍然有理由相信(随机)梯度下降与凸函数相比在非凸函数上收敛更困难。

网友:问题改成「梯度下降在什么条件下会收敛于非凸函数」更好

针对发帖者的这一问题 —— 随机梯度下降能否收敛于非凸函数?网友纷纷从自身经验进行解答。机器之心从中挑选出了几个获赞较多的回复。

首先来看网友 @anonymousTestPoster 的回答。ta 表示,假设存在一个表现良好的非凸函数,可以参见 Issam Laradji 撰写的《非凸优化》文档。

地址:https://www.cs.ubc.ca/labs/lci/mlrg/slides/non_convex_optimization.pdf

如果存在向下延伸至 Hessian 矩阵的 Lipschitz 连续性限制,则文档 19 页中的 Thm 似乎表明可以不断取得进展以接近顶点。

如果想要更复杂的函数,则几乎可以肯定需要的函数是可微的或者利普希茨连续,否则只能选择一些处处连续、无处可微的疯狂函数(crazy function),例如 Weierstrass 函数。

所以,关于「随机梯度下降能否收敛于非凸函数」这一问题,ta 认为在某些条件下「会」,因为很多非凸函数它们可能扰乱 wrt 可微性。在提出反例时,永远不要低估数学家的想象力。

所以,ta 建议发帖者将问题改成「梯度下降在什么条件下会收敛于某类非凸函数」,然后将每类函数作为子问题进行研究,并消除打破传统梯度下降方法的非凸函数反例。

接着来看网友 @astone977 指出了原贴内容中存在的一些问题。ta 表示,当发帖者认为神经网络的误差表面是非凸时,则损失函数也是非凸的。但是,MSE 等损失函数是凸函数。将一个非凸映射(神经网络)应用于一个损失函数的输入,可以创建一个非凸误差表面。

如果我们将 MSE、BCE 等凸函数称为损失函数,那么不应该使用相同的术语来描述一个神经网络的非凸误差表面。这在过去一直是造成混乱的根源,所以 ta 指了出来。

最后,网友 @Funktapus 也表示,如果发帖者只是在讨论优化期间避免局部最小值,则这是优化领域一个普遍且非常古老的问题。通常而言,答案是「会」。

我们可以使用随机方法来跳出小的局部最小值。蒙特・卡罗方法(Monte Carlo)是一种经典的方法。另一种方法是在开始梯度下降之前建立一个网格并找出全局最小值的大区域。

大家如何看待这个问题呢?感兴趣的小伙伴请在留言区积极发言。

参考链接:https://www.reddit.com/r/MachineLearning/comments/slnvzw/d_can_stochastic_gradient_descent_converge_on/

想要了解更多资讯,请扫描下方二维码,关注机器学习研究会

                                          

转自: 机器之心

这篇关于非凸函数上,随机梯度下降能否收敛?网友热议:能,但有条件,且比凸函数收敛更难的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/473072

相关文章

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,