【优化】梯度下降 收敛性 证明

本文详细探讨了梯度下降算法的收敛性,包括基础和扩展的收敛性定义,证明了梯度下降的收敛率为O(1/t),并介绍了β平滑性质,为算法的收敛性提供理论支持。

梯度下降方法的收敛率是 O ( 1 / t ) O(1/t) O(1/t)

本文首先介绍梯度下降算法的定义,之后解释收敛性的意义,并给出梯度下降算法收敛性详细证明过程1

梯度下降算法

设系统参数为 x x x。对于样本 i i i,其代价函数为 f i ( x ) f_i(x) fi(x)。在n个样本组成的训练集上,其整体代价函数为:
f ( x ) = ∑ i = 1 n f i ( x ) f(x)=\sum_{i=1}^nf_i(x) f(x)=i=1nfi(x)

要求 ω \omega ω使得上式最小,由于没有闭式解,需要通过近似迭代逐步逼近。

梯度下降(Gradient Descent)以 η \eta η为学习率,在每次迭代中用一阶泰勒展开近似:
x t + 1 = x t − η ∇ f ( x ) x_{t+1}=x_t - \eta\nabla f(x) xt+1=xtηf(x)

x x x的维度为D,代价函数 f f f是个标量,梯度 ∇ f ( x ) \nabla f(x) f(x)也是一个D维向量。

序列的收敛性

基础定义

有序列 { x t } \{x_t\} { xt},如果序号 t t t趋于无穷时,满足以下条件:
lim ⁡ t → ∞ x t + 1 − x ∗ x t − x ∗ = μ \lim_{t\to \infty}\frac{x_{t+1}-x^*}{x_t-x^*}=\mu tlimxtxxt+1x=μ
则称该方法收敛到 x ∗ x^* x,收敛率为 μ \mu μ, μ ∈ ( 0 , 1 ) \mu\in(0,1) μ(0,1)。也称为以 μ \mu μ收敛到 x ∗ x^* x

例:数列 1 , 1 / 2 , 1 / 4 , 1 / 8... {1,1/2,1/4,1/8...} 1,1/2,1/4,1/8...收敛到 L = 0 L=0 L=0,收敛率为 1 / 2 1/2 1/2

扩展定义

还有一些序列也会随着序号趋于某个定值,但是收敛的速率随着下标发生变化。这里引入一个扩展的收敛率定义。
如果存在序列 { ϵ t } \{ \epsilon_t \} { ϵt},根据基础收敛率定义,以收敛率 μ \mu μ收敛到0。
则如果序列 { x t } \{x_t\} { xt}满足:
∣ x t − x ∗ ∣ < ϵ t |x_t-x^*|<\epsilon_t xtx<ϵt
称该方法收敛到 x ∗ x^* x,收敛率为 ϵ t \epsilon_t ϵt

例:数列{1,1,1/4,1/4,1/16,1/16…}收敛到 L = 0 L=0 L=0,收敛率为 ϵ t = 1 2 t − 1 \epsilon_t=\frac{1}{2^{t-1}} ϵt=2t11={2,1,1/2,1/4,1/8,1/16…}。

梯度下降的收敛性

当我们说“梯度下降的收敛性为 1 / t 1/t 1/t”时,我们指的是:

t t t趋于无穷时,代价函数 f ( x t ) f(x_t) f(xt)收敛到最优解 f ( x ∗ ) f(x^*) f(x),收敛率为 ϵ t = O ( 1 / t ) \epsilon_t=O(1/t) ϵt=O(1/t)

引理

这部分为收敛性证明做准备,步骤较曲折,请关注大流程。
##Lipschitz连续
如果标量函数 f ( x ) f(x) f(x)满足如下条件,称其满足Lipschitz连续性条件
∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ L ∣ ∣ x 1 − x 2 ∣ ∣ |f(x_1)-f(x_2)| \leq L||x_1-x_2|| f(x1)f(x2)Lx1x2
其中 ∣ ∣ x ∣ ∣ ||x|| x表示向量的模长, L L L称为Lipschitz常数。对于固定的 f f f L L L是一个定值。
这个条件对函数值的变化做出了限制。

β \beta β平滑

进一步,如果函数 f ( x ) f(x) f(x)的梯度满足值为 β \beta β的Lipschitz连续,称函数 f ( x ) f(x) f(x) β \beta β平滑:

∣ ∣ ∇ f ( x ) − ∇ f ( y ) ∣ ∣ 2 ≤ β ∣ ∣ x − y ∣ ∣ 2 ||\nabla f(x)- \nabla f(y)||^2\leq \beta ||x-y||^2 f(x)f(y)2βxy2

其中 ∣ ∣ x ∣ ∣ 2 = x T x ||x||^2=x^Tx x2=xTx。这个条件对函数梯度的变化进行了约束:梯度之差的模长,不会超过自变量之差模长的常数倍。

β \beta β平滑性质1

满足 β \beta β平滑的函数有如下性质:

∣ f ( x ) − f ( y ) − ∇ f ( y ) T ( x − y ) ∣ ≤ β 2 ∣ ∣ x − y ∣ ∣ 2 |f(x)-f(y)-\nabla f(y)^T(x-y) | \leq \frac{\beta}{2}||x-y||^2 f(x)f(y)f(y)T(xy)2βxy2

证明如下

构造一个插值函数 g ( t ) = f ( y + t ( x − y ) ) g(t)=f(y+t(x-y)) g(t)=f(y+t(xy)),其关于 t t t的导数:
g ′ ( t ) = ∇ f ( y + t ( x − y ) ) T ( x − y ) g'(t)=\nabla f(y+t(x-y))^T(x-y) g(t)=f(y+t(xy))T(xy)

可以把函数值之差转化为积分:
f ( x ) − f ( y ) = g ( 1 ) − g ( 0 ) = ∫ 0 1 g ′ ( t )   d t = ∫ 0 1 ∇ f ( y + t ( x − y ) ) T ( x − y )   d t f(x)-f(y)=g(1)-g(0)=\int_0^1g'(t)\,dt=\int_0^1\nabla f(y+t(x-y))^T(x-y)\,dt f(x)f(y)=g(1)g(0)=01g(t)dt=01f(y+t(xy))T(xy)dt

代入左侧:
l e f t = ∣ ∫ 0 1 . . .   d t − ∇ f ( y ) T ( x − y ) ∣ left = |\int_0^1...\,dt-\nabla f(y)^T(x-y)| left=01...dtf(y)T(xy)
第二项是和 t t t无关的常数,可以直接写入[0,1]的积分中:
l e f t = ∣ ∫ 0 1 . . .   d t − ∫ 0 1 ∇ f ( y ) T ( x − y )   d t ∣ left = |\int_0^1...\,dt-\int_0^1\nabla f(y)^T(x-y)\,dt| left=01...dt01f(y)T(xy)dt

两个积分号合并:
l e f t = ∣ ∫ 0 1 . . .   d t ∣ left = |\int_0^1...\,dt| left=0

### 投影梯度下降算法收敛性理论证明 投影梯度下降(Projected Gradient Descent, PGD)是一种用于求解带约束优化问题的迭代算法。其基本形式为: $$ x_{k+1} = \text{Proj}_S(x_k - \alpha_k \nabla f(x_k)) $$ 其中,$ f(x) $ 是目标函数,$ S $ 是可行域,$ \alpha_k $ 是步长,$ \text{Proj}_S(\cdot) $ 是在集合 $ S $ 上的欧几里得投影操作。 #### 收敛性证明的基本条件 为了保证投影梯度下降算法收敛性,通常需要满足以下条件: 1. **目标函数的光滑性**:目标函数 $ f(x) $ 在可行域 $ S $ 上具有 Lipschitz 连续的梯度,即存在常数 $ L > 0 $,使得对任意 $ x, y \in S $,有: $$ \|\nabla f(x) - \nabla f(y)\| \leq L \|x - y\| $$ 该条件确保了梯度的变化不会过于剧烈,使得梯度方向可以作为有效的下降方向[^3]。 2. **目标函数的凸性**:目标函数 $ f(x) $ 是凸函数,即对任意 $ x, y \in S $ 和 $ \lambda \in [0, 1] $,满足: $$ f(\lambda x + (1 - \lambda)y) \leq \lambda f(x) + (1 - \lambda)f(y) $$ 凸性保证了梯度下降的方向可以有效地引导算法向全局最小值靠近[^5]。 3. **可行域的闭合性和凸性**:可行域 $ S $ 是一个非空、闭合且凸的集合。这保证了投影操作的定义是良态的,并且投影点是唯一存在的[^4]。 #### 收敛性证明的核心原理 投影梯度下降收敛性分析通常基于以下核心原理: - **投影操作的非扩张性**:对于任意的 $ x, y $,有: $$ \|\text{Proj}_S(x) - \text{Proj}_S(y)\| \leq \|x - y\| $$ 这个性质表明,投影操作不会放大两点之间的距离,从而保证了迭代过程的稳定性。 - **下降引理**:在满足 Lipschitz 连续梯度的前提下,有: $$ f(x_{k+1}) \leq f(x_k) - \frac{\alpha_k}{2}(1 - \alpha_k L)\|\nabla f(x_k)\|^2 $$ 该不等式表明,只要步长 $ \alpha_k $ 选择合适(例如 $ \alpha_k < \frac{1}{L} $),目标函数值会单调递减,从而保证算法收敛性[^2]。 - **收敛速度分析**:如果目标函数是强凸的,即存在常数 $ m > 0 $,使得: $$ \nabla^2 f(x) \succeq mI $$ 则投影梯度下降算法具有线性收敛速度,即存在常数 $ M < 1 $,使得: $$ \|x_{k+1} - x^*\| \leq M \|x_k - x^*\| $$ 其中 $ x^* $ 是最优解[^5]。 #### 收敛性证明的数学推导 设 $ x^* $ 为最优解,考虑第 $ k+1 $ 次迭代的更新公式: $$ x_{k+1} = \text{Proj}_S(x_k - \alpha_k \nabla f(x_k)) $$ 利用投影的非扩张性质,可以得到: $$ \|x_{k+1} - x^*\| \leq \|x_k - \alpha_k \nabla f(x_k) - x^*\| $$ 进一步展开并利用梯度下降收敛性分析,可以推导出: $$ \|x_{k+1} - x^*\| \leq M \|x_k - x^*\| $$ 其中 $ M $ 是一个依赖于步长 $ \alpha_k $ 和目标函数光滑常数 $ L $ 的常数。只要 $ M < 1 $,则说明算法是线性收敛的。 #### 代码示例 以下是一个简单的 Python 实现,展示如何使用投影梯度下降法求解带约束的优化问题: ```python import numpy as np def proj_l2_ball(x, radius=1.0): """将向量 x 投影到 L2 球面上""" norm = np.linalg.norm(x) if norm > radius: return x / norm * radius return x def projected_gradient_descent(f, grad_f, x0, radius=1.0, max_iter=100, step_size=0.1): x = x0.copy() for i in range(max_iter): g = grad_f(x) x = x - step_size * g x = proj_l2_ball(x, radius) print(f"Iteration {i+1}: x = {x}, f(x) = {f(x)}") return x # 示例函数:f(x) = x1^2 + x2^2 def f(x): return np.sum(x**2) def grad_f(x): return 2 * x # 初始点 x0 = np.array([2.0, 2.0]) # 执行投影梯度下降 result = projected_gradient_descent(f, grad_f, x0, radius=1.0, max_iter=50, step_size=0.1) ``` ---
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值