380 字
2 分钟
次梯度优化
2026-05-15
无标签

次梯度和次微分#

对于一个凸函数 ff,如果在某点 xx 处不可微分,我们可以定义一个次梯度(subgradient)来代替梯度。次梯度是一个向量,满足以下条件:

f(y)f(x)+gT(yx),yf(y) \geq f(x) + g^T (y - x), \forall y

其中 ggffxx 处的一个次梯度。次梯度的集合称为次微分(subdifferential),记为 f(x)\partial f(x)。次微分是凸的,非空的,和紧的

次梯度和可微的关系:

  • 如果 ffxx 处可微分,那么次微分 f(x)\partial f(x) 只有一个元素,即梯度 f(x)\nabla f(x)
  • 如果 ffxx 处不可微分,那么次微分 f(x)\partial f(x) 包含多个次梯度。

有如下两个等价:

  • 凸集上的可微函数 ff 为凸函数     \iff 对于任意 x,yx,y,都有 f(y)f(x)+f(x)T(yx)f(y) \geq f(x) + \nabla f(x)^T (y - x)
  • 可微函数是凸函数     \iff 定义与是凸集,且其梯度是单调的,即 x,y\forall x,y,都有 (f(x)f(y))T(xy)0(\nabla f(x) - \nabla f(y))^T (x - y) \geq 0

次梯度优化#

关键在于如何更新。不能用传统的 x(k+1)=x(k)λ(k)g(k)g(k)\overline{x^{(k+1)}} = x^{(k)} - \lambda^{(k)} \frac{g^{(k)}}{||g^{(k)}||} 因为次梯度是随便选的,有可能是上升方向。

需要用投影法:

x(k+1)=x(k)λ(k)g(k)g(k)x(k+1)=PX(x(k+1))\overline{x^{(k+1)}} = x^{(k)} - \lambda^{(k)} \frac{g^{(k)}}{||g^{(k)}||}\\[1ex] x^{(k+1)} = P_{X}(\overline{x^{(k+1)}})

也就是把 x(k+1)\overline{x^{(k+1)}} 投影到可行域 XX 上,得到 x(k+1)x^{(k+1)}

算法流程

alt text

关于步长的定理:

  • 如果 λ(k)\lambda^{(k)} 满足 k=1λ(k)=\sum_{k=1}^{\infty} \lambda^{(k)} = \inftylimkλ(k)=0\lim_{k \to \infty} \lambda^{(k)} = 0,则次梯度方法要么有限步数内找到最优解,要么生成一个收敛于最优解的序列。
次梯度优化
https://biscuit0613.github.io/posts/aimath/subgradient/
作者
Biscuit
发布于
2026-05-15
许可协议
CC BY-NC-SA 4.0