优化算法-2.凸性

 

凸性(convexity)在优化算法的设计中起到至关重要的作用, 这主要是由于在这种情况下对算法进行分析和测试要容易。 换言之,如果算法在凸性条件设定下的效果很差, 那通常我们很难在其他条件下看到好的结果此外,即使深度学习中的优化问题通常是非凸的, 它们也经常在局部极小值附近表现出一些凸性。 这可能会产生一些像 (Izmailov et al., 2018)这样比较有意思的新优化变体。

%matplotlib inline
import numpy as np
import torch
from mpl_toolkits import mplot3d
from d2l import torch as d2l

定义

在进行凸分析之前,我们需要定义凸集(convex sets)和凸函数(convex functions)。

凸集

凸集(convex set)是凸性的基础。 简单地说,如果对于任何a,bX,连接a和的线段b也位于X中,则向量空间中的一个集合X是凸(convex)的。 在数学术语上,这意味着对于所有λ[0,1],我们得到

λa+(1λ)bX 当 a,bX.

image

这听起来有点抽象,那我们来看一下下图里的例子。 第一组存在不包含在集合内部的线段,所以该集合是非凸的,而另外两组则没有这样的问题。
image
接下来来看一下交集图11.2.2。 假设Xy是凸集,那么也是XY凸集的。 现在考虑任意a,bXY, 因为Xy是凸集, 所以连接ab的线段包含在Xy中。 鉴于此,它们也需要包含在XY中,从而证明我们的定理。
image
我们可以毫不费力地进一步得到这样的结果: 给定凸集Xi,它们的交集iXi是凸的。 但是反向是不正确的,考虑两个不相交的集合XY=, 取aXby。 因为我们假设XY=, 在 图11.2.3中连接ab的线段需要包含一部分既不在X也不在y中。 因此线段也不在XY中,因此证明了凸集的并集不一定是凸的,即非凸(nonconvex)的。
image
通常,深度学习中的问题是在凸集上定义的。 例如Rd,,即实数的d-维向量的集合是凸集(毕竟Rd中任意两点之间的线存在Rd)中。 在某些情况下,我们使用有界长度的变量,例如球的半径定义为{x|xRd 且 xr}

凸函数

现在我们有了凸集,我们可以引入凸函数(convex function)f。 给定一个凸集X,如果对于所有x,xX和所有λ[0,1],函数f:XR是凸的,我们可以得到

λf(x)+(1λ)f(x)f(λx+(1λ)x).

为了说明这一点,让我们绘制一些函数并检查哪些函数满足要求。 下面我们定义一些函数,包括凸函数和非凸函数。

f = lambda x: 0.5 * x**2  # 凸函数
g = lambda x: torch.cos(np.pi * x)  # 非凸函数
h = lambda x: torch.exp(0.5 * x)  # 凸函数

x, segment = torch.arange(-2, 2, 0.01), torch.tensor([-1.5, 1])
d2l.use_svg_display()
_, axes = d2l.plt.subplots(1, 3, figsize=(9, 3))
for ax, func in zip(axes, [f, g, h]):
    d2l.plot([x, segment], [func(x), func(segment)], axes=ax)

image
不出所料,余弦函数为非凸的,而抛物线函数和指数函数为凸的。 请注意,为使该条件有意义,X是凸集的要求是必要的。 否则可能无法很好地界定f(λx+(1λ)x)的结果。

詹森不等式

给定一个凸函数f,最有用的数学工具之一就是詹森不等式(Jensen’s inequality)。 它是凸性定义的一种推广:

iαif(xi)f(iαixi) and EX[f(X)]f(EX[X]),

其中αi是满足iαi=1的非负实数,X是随机变量。 换句话说,凸函数的期望不小于期望的凸函数,其中后者通常是一个更简单的表达式。 为了证明第一个不等式,我们多次将凸性的定义应用于一次求和中的一项。
詹森不等式的一个常见应用:用一个较简单的表达式约束一个较复杂的表达式。 例如,它可以应用于部分观察到的随机变量的对数似然。 具体地说,由于P(Y)P(XY)dY=P(X)所以

EYP(Y)[logP(XY)]logP(X),

这里,Y是典型的未观察到的随机变量,P(Y)是它可能如何分布的最佳猜测,P(Y)是将Y积分后的分布。 例如,在聚类中Y可能是簇标签,而在应用簇标签时,P(XY)是生成模型。

性质

局部极小值是全局极小值

首先凸函数的局部极小值也是全局极小值。 下面我们用反证法给出证明。

假设xX是一个局部最小值,则存在一个很小的正值p,使得当xX满足0<|xx|p时,有f(x)<f(x)
现在假设局部极小值x不是f的全局极小值:存在xX使得f(x)<f(x)。 则存在λ[0,1),比如λ=1p|xx|

,使得 0<|λx+(1λ)xx|p

然而,根据凸性的性质,有

f(λx+(1λ)x)λf(x)+(1λ)f(x)<λf(x)+(1λ)f(x)=f(x),

这与x是局部最小值相矛盾。 因此,不存在满足。 综上所述,局部最小值也是全局最小值。

例如,对于凸函数f(x)=(x1)2,有一个局部最小值x=1,它也是全局最小值。

f = lambda x: (x - 1) ** 2
d2l.set_figsize()
d2l.plot([x, segment], [f(x), f(segment)], 'x', 'f(x)')

image
凸函数的局部极小值同时也是全局极小值这一性质是很方便的。 这意味着如果我们最小化函数,我们就不会“卡住”。 但是请注意,这并不意味着不能有多个全局最小值,或者可能不存在一个全局最小值。 例如,函数f(x)=max(|x|1,0)在区间[1,1]上都是最小值。 相反,函数f(x)=exp(x)R上没有取得最小值。对于x,它趋近于,但是没有的。

凸函数的下水平集是凸的

我们可以方便地通过凸函数的下水平集(below sets)定义凸集。 具体来说,给定一个定义在凸集X上的凸函数f,其任意一个下水平集

Sb:={x|xX and f(x)b}

是凸的.
让我们快速证明一下。 对于任何x,xSb,我们需要证明:当λ[0,1]时,λx+(1λ)xSb。 因为f(x)bf(x)b,所以

f(λx+(1λ)x)λf(x)+(1λ)f(x)b.

约束

凸优化的一个很好的特性是能够让我们有效地处理约束(constraints)。 即它使我们能够解决以下形式的约束优化(constrained optimization)问题:

minimize xf(x) subject to ci(x)0 for all i{1,,N}.

这里f是目标函数,ci是约束函数。 例如第一个约束c1(x)=x21,则参数被x限制为单位球。 如果第二个约束c2(x)=vx+b,那么这对应于半空间上所有的x。 同时满足这两个约束等于选择一个球的切片作为约束集。

凸函数优化

如果代价函数f是凸的,且限制集合C是凸的,那么就是凸优化问题,那么局部最小一定是全局最小(也就是说优化算法找到的局部最小点一定是全局最优解)
严格凸优化问题有唯一的全局最小
image

  • 上图左侧的函数不是严格的凸函数,不满足严格凸函数的定义,函数上存在两点的连线(除端点外)与函数存在交点

  • 上图右侧的函数是一个严格的凸函数,所以它只有唯一的最小值
    凸和非凸例子:

  • 机器学习绝大部分都不是凸优化

  • 目前为止只有两个是凸的:

    • 线性回归f(x)=||Wxb||22
    • Softmax回归
  • 剩下的都是非凸的

    • MLP:有一个隐藏层的 MLP,因为激活函数不是线性的,导致它是非线性的(非线性的是非凸的)
    • CNN:卷积本身是线性的,但是卷积加了激活函数之后就不是线性的了
    • RNN
    • attetion
    • 。。。。。

所有的模型都是非凸的

  • 凸函数的表达能力是非常有限的
  • 对于深度学习来讲,实用性是排在第一位的,理论是靠后的,如果是研究理论的话,需要从统计的角度来看待问题,从统计的角度来讲会考虑很多的凸优化问题
  • 从深度学习来讲,是从计算机的角度考虑效果,而不是过于考虑理论,所导致基本上做的都是非凸的
  • 优化的很多理论基本上是凸优化,最近也有研究非凸的,但是整体来讲大块是针对凸函数的优化,对于非凸的模型很难说有特别大的指导意义
posted @   lipu123  阅读(163)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示