自适应随机梯度下降(Adaptive Stochastic Gradient Descent, AdaSGD)在非光滑随机优化中的应用基础题
字数 3830 2025-12-09 09:18:14

自适应随机梯度下降(Adaptive Stochastic Gradient Descent, AdaSGD)在非光滑随机优化中的应用基础题

题目描述

考虑如下形式的非光滑随机优化问题

\[\min_{x \in \mathbb{R}^n} F(x) := \mathbb{E}_{\xi}[f(x; \xi)] + g(x) \]

其中:

  • \(f(x; \xi)\) 关于 \(x\)可微但不一定光滑的(即其梯度可能不满足Lipschitz连续),并且我们只能通过随机抽样得到它的随机梯度 \(\nabla f(x; \xi)\)
  • \(g(x)\) 是一个非光滑凸函数(例如 \(\ell_1\) 范数 \(g(x) = \lambda \|x\|_1\) 或示性函数),但它是简单函数,其邻近算子有解析解。
  • 我们假设只能通过随机样本 \(\xi\) 来获取关于 \(F(x)\) 的信息,无法直接计算其精确梯度或函数值。

本题的目标是:设计一种自适应随机梯度下降(AdaSGD)算法,通过自适应调整步长,高效地求解这个非光滑随机优化问题,并解释其核心思想和迭代步骤。


解题过程循序渐进讲解

第一步:问题分析——非光滑随机优化的难点

传统的梯度下降法需要目标函数光滑(梯度连续)且能精确计算梯度。但这里有两个主要挑战:

  1. 随机性:我们只能得到梯度的无偏估计 \(\nabla f(x; \xi)\),而非真实梯度 \(\nabla F(x)\),这导致直接使用梯度下降会产生高方差,收敛缓慢或不稳定。
  2. 非光滑性\(g(x)\) 不可导,使得标准的梯度下降更新无法直接应用。

思路

  • 针对随机性,我们使用随机梯度,并引入自适应步长调整(类似AdaGrad、RMSProp的思想),根据历史梯度信息调整步长,以应对不同维度上梯度的变化幅度,加快收敛。
  • 针对非光滑项 \(g(x)\),我们采用邻近算子(proximal operator) 处理,将迭代步骤分为梯度下降步和邻近映射步,这就是近端随机梯度下降的框架。

第二步:算法框架——近端随机梯度下降

对于一个可微函数 \(h(x)\) 和一个非光滑函数 \(g(x)\),近端梯度下降的迭代公式为:

\[x_{k+1} = \text{prox}_{\eta_k g}(x_k - \eta_k \nabla h(x_k)) \]

其中,\(\eta_k\) 是步长,\(\text{prox}\) 是邻近算子,定义为:

\[\text{prox}_{\eta g}(v) = \arg\min_x \left\{ g(x) + \frac{1}{2\eta} \|x - v\|^2 \right\} \]

在我们的问题中,\(h(x) = \mathbb{E}[f(x; \xi)]\),但我们只能得到随机梯度。因此,基本近端随机梯度下降的迭代为:

\[x_{k+1} = \text{prox}_{\eta_k g}(x_k - \eta_k \nabla f(x_k; \xi_k)) \]

其中 \(\xi_k\) 是第 \(k\) 步抽样的随机样本。

但这里 \(\eta_k\) 如何选择?固定步长通常需要谨慎调节,而自适应步长可以根据历史梯度信息自动调整。


第三步:自适应步长设计

自适应步长(如AdaGrad、RMSProp)的基本思想是:对每个变量 \(x^{(i)}\)\(i=1,\dots,n\))维护一个累积梯度平方和,步长与该累积量的平方根成反比。这样,在历史梯度较大的方向上,步长会减小,从而更稳定。

定义 \(g_k = \nabla f(x_k; \xi_k)\) 为第 \(k\) 步的随机梯度。
定义向量 \(s_k \in \mathbb{R}^n\),其中每个分量 \(s_k^{(i)}\) 累积到第 \(k\) 步为止,第 \(i\) 个维度上梯度平方的指数加权移动平均(或简单累加):

\[s_k^{(i)} = \beta s_{k-1}^{(i)} + (1-\beta) (g_k^{(i)})^2 \quad \text{或} \quad s_k^{(i)} = s_{k-1}^{(i)} + (g_k^{(i)})^2 \]

其中 \(\beta \in (0,1)\) 是衰减因子。

自适应步长为:

\[\eta_{k}^{(i)} = \frac{\eta_0}{\sqrt{s_k^{(i)} + \epsilon}} \]

其中 \(\eta_0\) 是初始步长(全局学习率),\(\epsilon\) 是一个很小的常数(如 \(10^{-8}\))防止除以零。

这样,\(i\) 个变量的步长 \(\eta_k^{(i)}\) 是自适应的:如果历史上这个方向上的梯度很大,\(s_k^{(i)}\) 就大,步长就小,从而在陡峭方向更新更谨慎;反之,在平缓方向步长相对较大,加快更新。


第四步:自适应近端随机梯度下降(AdaSGD)算法步骤

给定:初始点 \(x_0\),初始步长 \(\eta_0\),小常数 \(\epsilon > 0\),衰减因子 \(\beta\)(可选),总迭代次数 \(T\)

  1. 初始化\(s_0 = 0\)(或一个很小的向量,如 \(\epsilon\))。
  2. For \(k = 0, 1, 2, \dots, T-1\)
    a. 随机采样 \(\xi_k\),计算当前点的随机梯度 \(g_k = \nabla f(x_k; \xi_k)\)
    b. 更新累积梯度平方 \(s_k\)(两种常用方式,这里以指数加权平均为例):
    对于每个维度 \(i=1,\dots,n\)

\[ s_{k+1}^{(i)} = \beta s_k^{(i)} + (1-\beta) (g_k^{(i)})^2 \]

c. 计算自适应步长向量 $\eta_k$,其中每个分量 $\eta_k^{(i)} = \frac{\eta_0}{\sqrt{s_{k+1}^{(i)} + \epsilon}}$。
d. 构造自适应步长**对角矩阵** $D_k = \text{diag}(\eta_k^{(1)}, \dots, \eta_k^{(n)})$,则自适应更新方向为 $D_k g_k$。
e. 计算**梯度下降中间点**:$y_k = x_k - D_k g_k$。
f. 计算**近端映射**:$x_{k+1} = \text{prox}_{g, D_k^{-1}}(y_k)$。注意,这里由于 $D_k$ 是对角矩阵且正定,邻近算子定义为:

\[ \text{prox}_{g, D_k^{-1}}(y) = \arg\min_x \left\{ g(x) + \frac{1}{2} (x-y)^T D_k^{-1} (x-y) \right\} \]

    通常,如果 $g(x)$ 是**可分离**的(如 $\ell_1$ 范数),这个邻近算子可以按分量独立求解,且形式与标准邻近算子相同,只是步长参数变为 $\eta_k^{(i)}$ 的缩放。
  1. 输出:最终迭代点 \(x_T\) 或历次迭代的平均。

第五步:邻近算子的计算示例(以 \(\ell_1\) 范数为例)

如果 \(g(x) = \lambda \|x\|_1\),则标准邻近算子(步长为 \(\eta\))是软阈值函数:

\[[\text{prox}_{\eta g}(v)]^{(i)} = \text{sign}(v^{(i)}) \cdot \max\{ |v^{(i)}| - \lambda \eta, 0 \} \]

在自适应步长下,每个维度有自己的步长 \(\eta_k^{(i)}\),则更新公式变为:

\[x_{k+1}^{(i)} = \text{sign}(y_k^{(i)}) \cdot \max\{ |y_k^{(i)}| - \lambda \eta_k^{(i)}, 0 \} \]

其中 \(y_k^{(i)} = x_k^{(i)} - \eta_k^{(i)} g_k^{(i)}\)

直观理解:在梯度变化剧烈的维度,步长自动变小,使得软阈值的“收缩”幅度也变小,更新更稳定。


第六步:算法特性与总结

  • 自适应优势:AdaSGD 能够自动调整每个维度上的步长,特别适用于稀疏数据非平稳目标,其中不同方向的梯度量级差异很大。
  • 处理非光滑:通过邻近算子处理 \(g(x)\),使得算法适用于带 \(\ell_1\) 正则、约束等非光滑问题。
  • 随机性:通过随机抽样,适用于大规模问题,每次迭代只用一个或一小批样本,计算高效。
  • 收敛性:在一定的假设下(如 \(f\) 的梯度有界,\(g\) 凸,步长满足一定衰减条件),AdaSGD 可以收敛到稳定点(对于非凸 \(f\))或最优解(对于凸 \(F\))。

核心思想总结
自适应步长(根据历史梯度平方自适应调整)与近端随机梯度下降结合,形成 AdaSGD 算法。它既能处理随机优化中的噪声,又能应对非光滑项,且通过自适应机制提升了收敛速度和稳定性,特别适合于高维、稀疏、非光滑的随机优化问题。

自适应随机梯度下降(Adaptive Stochastic Gradient Descent, AdaSGD)在非光滑随机优化中的应用基础题 题目描述 考虑如下形式的 非光滑随机优化问题 : $$ \min_ {x \in \mathbb{R}^n} F(x) := \mathbb{E}_ {\xi}[ f(x; \xi) ] + g(x) $$ 其中: $f(x; \xi)$ 关于 $x$ 是 可微但不一定光滑 的(即其梯度可能不满足Lipschitz连续),并且我们只能通过随机抽样得到它的 随机梯度 $\nabla f(x; \xi)$。 $g(x)$ 是一个 非光滑凸函数 (例如 $\ell_ 1$ 范数 $g(x) = \lambda \|x\|_ 1$ 或示性函数),但它是 简单函数 ,其邻近算子有解析解。 我们假设只能通过 随机样本 $\xi$ 来获取关于 $F(x)$ 的信息,无法直接计算其精确梯度或函数值。 本题的目标是: 设计一种自适应随机梯度下降(AdaSGD)算法,通过自适应调整步长,高效地求解这个非光滑随机优化问题,并解释其核心思想和迭代步骤。 解题过程循序渐进讲解 第一步:问题分析——非光滑随机优化的难点 传统的梯度下降法需要目标函数光滑(梯度连续)且能精确计算梯度。但这里有两个主要挑战: 随机性 :我们只能得到梯度的 无偏估计 $\nabla f(x; \xi)$,而非真实梯度 $\nabla F(x)$,这导致直接使用梯度下降会产生高方差,收敛缓慢或不稳定。 非光滑性 :$g(x)$ 不可导,使得标准的梯度下降更新无法直接应用。 思路 : 针对随机性,我们使用 随机梯度 ,并引入 自适应步长调整 (类似AdaGrad、RMSProp的思想),根据历史梯度信息调整步长,以应对不同维度上梯度的变化幅度,加快收敛。 针对非光滑项 $g(x)$,我们采用 邻近算子(proximal operator) 处理,将迭代步骤分为梯度下降步和邻近映射步,这就是 近端随机梯度下降 的框架。 第二步:算法框架——近端随机梯度下降 对于一个可微函数 $h(x)$ 和一个非光滑函数 $g(x)$,近端梯度下降的迭代公式为: $$ x_ {k+1} = \text{prox} {\eta_ k g}(x_ k - \eta_ k \nabla h(x_ k)) $$ 其中,$\eta_ k$ 是步长,$\text{prox}$ 是邻近算子,定义为: $$ \text{prox} {\eta g}(v) = \arg\min_ x \left\{ g(x) + \frac{1}{2\eta} \|x - v\|^2 \right\} $$ 在我们的问题中,$h(x) = \mathbb{E}[ f(x; \xi)]$,但我们只能得到随机梯度。因此, 基本近端随机梯度下降 的迭代为: $$ x_ {k+1} = \text{prox}_ {\eta_ k g}(x_ k - \eta_ k \nabla f(x_ k; \xi_ k)) $$ 其中 $\xi_ k$ 是第 $k$ 步抽样的随机样本。 但这里 $\eta_ k$ 如何选择?固定步长通常需要谨慎调节,而 自适应步长 可以根据历史梯度信息自动调整。 第三步:自适应步长设计 自适应步长(如AdaGrad、RMSProp)的基本思想是:对每个变量 $x^{(i)}$($i=1,\dots,n$)维护一个 累积梯度平方和 ,步长与该累积量的平方根成反比。这样,在历史梯度较大的方向上,步长会减小,从而更稳定。 定义 $g_ k = \nabla f(x_ k; \xi_ k)$ 为第 $k$ 步的随机梯度。 定义向量 $s_ k \in \mathbb{R}^n$,其中每个分量 $s_ k^{(i)}$ 累积到第 $k$ 步为止,第 $i$ 个维度上梯度平方的指数加权移动平均(或简单累加): $$ s_ k^{(i)} = \beta s_ {k-1}^{(i)} + (1-\beta) (g_ k^{(i)})^2 \quad \text{或} \quad s_ k^{(i)} = s_ {k-1}^{(i)} + (g_ k^{(i)})^2 $$ 其中 $\beta \in (0,1)$ 是衰减因子。 自适应步长 为: $$ \eta_ {k}^{(i)} = \frac{\eta_ 0}{\sqrt{s_ k^{(i)} + \epsilon}} $$ 其中 $\eta_ 0$ 是初始步长(全局学习率),$\epsilon$ 是一个很小的常数(如 $10^{-8}$)防止除以零。 这样, 第 $i$ 个变量的步长 $\eta_ k^{(i)}$ 是自适应的 :如果历史上这个方向上的梯度很大,$s_ k^{(i)}$ 就大,步长就小,从而在陡峭方向更新更谨慎;反之,在平缓方向步长相对较大,加快更新。 第四步:自适应近端随机梯度下降(AdaSGD)算法步骤 给定:初始点 $x_ 0$,初始步长 $\eta_ 0$,小常数 $\epsilon > 0$,衰减因子 $\beta$(可选),总迭代次数 $T$。 初始化 :$s_ 0 = 0$(或一个很小的向量,如 $\epsilon$)。 For $k = 0, 1, 2, \dots, T-1$: a. 随机采样 $\xi_ k$,计算当前点的 随机梯度 $g_ k = \nabla f(x_ k; \xi_ k)$。 b. 更新累积梯度平方 $s_ k$(两种常用方式,这里以指数加权平均为例): 对于每个维度 $i=1,\dots,n$: $$ s_ {k+1}^{(i)} = \beta s_ k^{(i)} + (1-\beta) (g_ k^{(i)})^2 $$ c. 计算自适应步长向量 $\eta_ k$,其中每个分量 $\eta_ k^{(i)} = \frac{\eta_ 0}{\sqrt{s_ {k+1}^{(i)} + \epsilon}}$。 d. 构造自适应步长 对角矩阵 $D_ k = \text{diag}(\eta_ k^{(1)}, \dots, \eta_ k^{(n)})$,则自适应更新方向为 $D_ k g_ k$。 e. 计算 梯度下降中间点 :$y_ k = x_ k - D_ k g_ k$。 f. 计算 近端映射 :$x_ {k+1} = \text{prox} {g, D_ k^{-1}}(y_ k)$。注意,这里由于 $D_ k$ 是对角矩阵且正定,邻近算子定义为: $$ \text{prox} {g, D_ k^{-1}}(y) = \arg\min_ x \left\{ g(x) + \frac{1}{2} (x-y)^T D_ k^{-1} (x-y) \right\} $$ 通常,如果 $g(x)$ 是 可分离 的(如 $\ell_ 1$ 范数),这个邻近算子可以按分量独立求解,且形式与标准邻近算子相同,只是步长参数变为 $\eta_ k^{(i)}$ 的缩放。 输出 :最终迭代点 $x_ T$ 或历次迭代的平均。 第五步:邻近算子的计算示例(以 $\ell_ 1$ 范数为例) 如果 $g(x) = \lambda \|x\| 1$,则标准邻近算子(步长为 $\eta$)是软阈值函数: $$ [ \text{prox} {\eta g}(v) ]^{(i)} = \text{sign}(v^{(i)}) \cdot \max\{ |v^{(i)}| - \lambda \eta, 0 \} $$ 在自适应步长下,每个维度有自己的步长 $\eta_ k^{(i)}$,则更新公式变为: $$ x_ {k+1}^{(i)} = \text{sign}(y_ k^{(i)}) \cdot \max\{ |y_ k^{(i)}| - \lambda \eta_ k^{(i)}, 0 \} $$ 其中 $y_ k^{(i)} = x_ k^{(i)} - \eta_ k^{(i)} g_ k^{(i)}$。 直观理解 :在梯度变化剧烈的维度,步长自动变小,使得软阈值的“收缩”幅度也变小,更新更稳定。 第六步:算法特性与总结 自适应优势 :AdaSGD 能够自动调整每个维度上的步长,特别适用于 稀疏数据 或 非平稳目标 ,其中不同方向的梯度量级差异很大。 处理非光滑 :通过邻近算子处理 $g(x)$,使得算法适用于带 $\ell_ 1$ 正则、约束等非光滑问题。 随机性 :通过随机抽样,适用于大规模问题,每次迭代只用一个或一小批样本,计算高效。 收敛性 :在一定的假设下(如 $f$ 的梯度有界,$g$ 凸,步长满足一定衰减条件),AdaSGD 可以收敛到稳定点(对于非凸 $f$)或最优解(对于凸 $F$)。 核心思想总结 : 将 自适应步长 (根据历史梯度平方自适应调整)与 近端随机梯度下降 结合,形成 AdaSGD 算法。它既能处理随机优化中的噪声,又能应对非光滑项,且通过自适应机制提升了收敛速度和稳定性,特别适合于高维、稀疏、非光滑的随机优化问题。