近似梯度法在非光滑优化中的应用进阶题:处理L1范数正则化问题的复合优化
字数 3358 2025-12-18 04:49:10

近似梯度法在非光滑优化中的应用进阶题:处理L1范数正则化问题的复合优化


1. 题目描述

考虑一个复合优化问题,目标函数由可微部分与不可微部分叠加而成,具体形式如下:

\[\min_{x \in \mathbb{R}^n} \quad F(x) = f(x) + \lambda \|x\|_1 \]

其中:

  • \(f: \mathbb{R}^n \to \mathbb{R}\) 是一个光滑函数,其梯度 \(\nabla f\) 是 Lipschitz 连续且已知(例如最小二乘损失 \(f(x) = \frac{1}{2} \|Ax - b\|^2\))。
  • \(\|x\|_1 = \sum_{i=1}^n |x_i|\) 是 L1 范数,作为正则项引入以促进解的稀疏性。
  • \(\lambda > 0\) 是正则化参数。

这个问题是典型的非光滑优化问题,因为 L1 范数在坐标为零的点不可微。本题要求使用近似梯度法(Proximal Gradient Method)求解,并分析其收敛行为。


2. 核心思想

近似梯度法(又称近端梯度法)的核心是将目标函数分解为两部分:

  • 光滑部分\(f(x)\),可计算梯度。
  • 非光滑部分\(g(x) = \lambda \|x\|_1\),通常结构简单,可以高效计算其近端算子(proximal operator)。

算法步骤

  1. 在每一步,先对光滑部分 \(f\) 做梯度下降,得到一个中间点。
  2. 然后对非光滑部分 \(g\) 施加近端算子,将中间点映射回可行域,同时保留 \(g\) 的结构特性。
  3. 重复迭代直至收敛。

3. 详细推导与求解过程

步骤1:写出近端算子

对于 L1 范数,近端算子有一个闭式解,称为软阈值算子(soft-thresholding operator):

\[\text{prox}_{\alpha g}(y) = \arg\min_{z} \left\{ \lambda \|z\|_1 + \frac{1}{2\alpha} \|z - y\|^2 \right\} \]

这个优化问题可以按分量独立求解,结果对每个坐标 \(i\) 为:

\[[\text{prox}_{\alpha g}(y)]_i = \text{sign}(y_i) \cdot \max\left( |y_i| - \alpha\lambda, 0 \right) \]

其中 \(\alpha > 0\) 是步长。

步骤2:近似梯度法的迭代格式

给定当前迭代点 \(x^k\),步长 \(\alpha_k > 0\),迭代格式为:

\[x^{k+1} = \text{prox}_{\alpha_k g} \left( x^k - \alpha_k \nabla f(x^k) \right) \]

代入 L1 范数的近端算子,得到:

\[x_i^{k+1} = \text{sign}\left( x_i^k - \alpha_k [\nabla f(x^k)]_i \right) \cdot \max\left( \left| x_i^k - \alpha_k [\nabla f(x^k)]_i \right| - \alpha_k \lambda, 0 \right) \]

步骤3:步长的选择

为了确保收敛,步长 \(\alpha_k\) 通常需要满足:

  • 恒定步长:若 \(\nabla f\) 是 Lipschitz 连续且 Lipschitz 常数为 \(L\),则 \(\alpha_k \in (0, 1/L]\)
  • 回溯线搜索(backtracking line search):从一个初始步长开始,逐步减小直到满足下降条件。

回溯线搜索条件(Armijo 型条件):

\[f(x^{k+1}) \le f(x^k) + \nabla f(x^k)^\top (x^{k+1} - x^k) + \frac{1}{2\alpha_k} \|x^{k+1} - x^k\|^2 \]

实际上,由于涉及 \(g\),通常使用一个组合的下降条件(见下一步)。

步骤4:算法实现(含回溯线搜索)

我们使用一个标准的近似梯度法变体——加速近似梯度法(FISTA,Fast Iterative Shrinkage-Thresholding Algorithm)来提升收敛速度。

FISTA 算法步骤

  1. 初始化 \(x^0 = y^1\)\(t_1 = 1\),最大迭代次数 \(K\)
  2. \(k = 1, 2, \dots, K\) 执行:
    a. 令 \(v = y^k - \alpha_k \nabla f(y^k)\),其中 \(\alpha_k\) 通过回溯线搜索确定。
    b. 计算 \(x^k = \text{prox}_{\alpha_k g}(v)\)(软阈值操作)。
    c. 更新 \(t_{k+1} = \frac{1 + \sqrt{1 + 4 t_k^2}}{2}\)
    d. 计算 \(y^{k+1} = x^k + \frac{t_k - 1}{t_{k+1}} (x^k - x^{k-1})\)(加速步骤)。
  3. 输出 \(x^K\)

步骤5:收敛性分析

  • 标准近似梯度法(无加速)在目标函数 \(F\) 是凸的情况下,收敛速度为 \(O(1/k)\)
  • FISTA(加速版本)达到更快的 \(O(1/k^2)\) 收敛速度。
  • \(f\) 是强凸的,收敛速度可提升至线性收敛。

步骤6:数值示例(以最小二乘为例)

\(f(x) = \frac{1}{2} \|Ax - b\|^2\),则 \(\nabla f(x) = A^\top (Ax - b)\)
给定数据 \(A \in \mathbb{R}^{m \times n}, b \in \mathbb{R}^m, \lambda = 0.1\)
算法步骤:

  1. 初始化 \(x^0 = 0\),初始步长 \(\alpha_0 = 1 / \|A^\top A\|_2\)
  2. 迭代:
    • 计算梯度: \(g_k = A^\top (A y^k - b)\)
    • 回溯步长:从 \(\alpha = \alpha_{k-1}\) 开始,不断尝试 \(\alpha := \beta \alpha\)(如 \(\beta=0.8\))直到满足:

\[ F\left( \text{prox}_{\alpha g}(y^k - \alpha g_k) \right) \le Q_\alpha\left( \text{prox}_{\alpha g}(y^k - \alpha g_k), y^k \right) \]

 其中 $Q_\alpha(z, y) = f(y) + \nabla f(y)^\top (z - y) + \frac{1}{2\alpha} \|z - y\|^2 + \lambda \|z\|_1$ 是近端点模型。
  • 更新 \(x^k\)\(y^{k+1}\) 如上。
  1. 终止条件: \(\|x^k - x^{k-1}\|_\infty < \epsilon\)(如 \(\epsilon = 10^{-6}\))。

4. 关键点总结

  1. 分解目标:将问题拆分为光滑部分 \(f\) 与非光滑部分 \(g\)
  2. 近端算子:对于 L1 范数,近端算子是软阈值算子,有显式解。
  3. 迭代格式:先对光滑部分做梯度步,再对非光滑部分做近端映射。
  4. 步长选择:通过 Lipschitz 常数或回溯线搜索确定步长,确保下降性。
  5. 加速技巧:使用 FISTA 的动量加速,可显著提升收敛速度。
  6. 收敛保证:在凸条件下,算法保证收敛到全局最优解。

这种方法广泛应用于机器学习中的稀疏优化(如 Lasso)、信号处理、压缩感知等领域,因为它能有效处理非光滑正则项且实现简单高效。

近似梯度法在非光滑优化中的应用进阶题:处理L1范数正则化问题的复合优化 1. 题目描述 考虑一个复合优化问题,目标函数由可微部分与不可微部分叠加而成,具体形式如下: \[ \min_ {x \in \mathbb{R}^n} \quad F(x) = f(x) + \lambda \|x\|_ 1 \] 其中: \( f: \mathbb{R}^n \to \mathbb{R} \) 是一个光滑函数,其梯度 \(\nabla f\) 是 Lipschitz 连续且已知(例如最小二乘损失 \( f(x) = \frac{1}{2} \|Ax - b\|^2 \))。 \(\|x\| 1 = \sum {i=1}^n |x_ i|\) 是 L1 范数,作为正则项引入以促进解的稀疏性。 \(\lambda > 0\) 是正则化参数。 这个问题是典型的非光滑优化问题,因为 L1 范数在坐标为零的点不可微。本题要求使用近似梯度法(Proximal Gradient Method)求解,并分析其收敛行为。 2. 核心思想 近似梯度法(又称近端梯度法)的核心是将目标函数分解为两部分: 光滑部分 : \( f(x) \),可计算梯度。 非光滑部分 : \( g(x) = \lambda \|x\|_ 1 \),通常结构简单,可以高效计算其近端算子(proximal operator)。 算法步骤 : 在每一步,先对光滑部分 \( f \) 做梯度下降,得到一个中间点。 然后对非光滑部分 \( g \) 施加近端算子,将中间点映射回可行域,同时保留 \( g \) 的结构特性。 重复迭代直至收敛。 3. 详细推导与求解过程 步骤1:写出近端算子 对于 L1 范数,近端算子有一个闭式解,称为软阈值算子(soft-thresholding operator): \[ \text{prox} {\alpha g}(y) = \arg\min {z} \left\{ \lambda \|z\|_ 1 + \frac{1}{2\alpha} \|z - y\|^2 \right\} \] 这个优化问题可以按分量独立求解,结果对每个坐标 \( i \) 为: \[ [ \text{prox}_ {\alpha g}(y)]_ i = \text{sign}(y_ i) \cdot \max\left( |y_ i| - \alpha\lambda, 0 \right) \] 其中 \(\alpha > 0\) 是步长。 步骤2:近似梯度法的迭代格式 给定当前迭代点 \( x^k \),步长 \(\alpha_ k > 0\),迭代格式为: \[ x^{k+1} = \text{prox}_ {\alpha_ k g} \left( x^k - \alpha_ k \nabla f(x^k) \right) \] 代入 L1 范数的近端算子,得到: \[ x_ i^{k+1} = \text{sign}\left( x_ i^k - \alpha_ k [ \nabla f(x^k)]_ i \right) \cdot \max\left( \left| x_ i^k - \alpha_ k [ \nabla f(x^k)]_ i \right| - \alpha_ k \lambda, 0 \right) \] 步骤3:步长的选择 为了确保收敛,步长 \(\alpha_ k\) 通常需要满足: 恒定步长:若 \(\nabla f\) 是 Lipschitz 连续且 Lipschitz 常数为 \(L\),则 \(\alpha_ k \in (0, 1/L ]\)。 回溯线搜索(backtracking line search):从一个初始步长开始,逐步减小直到满足下降条件。 回溯线搜索条件(Armijo 型条件): \[ f(x^{k+1}) \le f(x^k) + \nabla f(x^k)^\top (x^{k+1} - x^k) + \frac{1}{2\alpha_ k} \|x^{k+1} - x^k\|^2 \] 实际上,由于涉及 \(g\),通常使用一个组合的下降条件(见下一步)。 步骤4:算法实现(含回溯线搜索) 我们使用一个标准的近似梯度法变体——加速近似梯度法(FISTA,Fast Iterative Shrinkage-Thresholding Algorithm)来提升收敛速度。 FISTA 算法步骤 : 初始化 \( x^0 = y^1 \),\( t_ 1 = 1 \),最大迭代次数 \(K\)。 对 \( k = 1, 2, \dots, K \) 执行: a. 令 \( v = y^k - \alpha_ k \nabla f(y^k) \),其中 \(\alpha_ k\) 通过回溯线搜索确定。 b. 计算 \( x^k = \text{prox} {\alpha_ k g}(v) \)(软阈值操作)。 c. 更新 \( t {k+1} = \frac{1 + \sqrt{1 + 4 t_ k^2}}{2} \)。 d. 计算 \( y^{k+1} = x^k + \frac{t_ k - 1}{t_ {k+1}} (x^k - x^{k-1}) \)(加速步骤)。 输出 \( x^K \)。 步骤5:收敛性分析 标准近似梯度法(无加速)在目标函数 \(F\) 是凸的情况下,收敛速度为 \(O(1/k)\)。 FISTA(加速版本)达到更快的 \(O(1/k^2)\) 收敛速度。 若 \(f\) 是强凸的,收敛速度可提升至线性收敛。 步骤6:数值示例(以最小二乘为例) 设 \( f(x) = \frac{1}{2} \|Ax - b\|^2 \),则 \(\nabla f(x) = A^\top (Ax - b)\)。 给定数据 \(A \in \mathbb{R}^{m \times n}, b \in \mathbb{R}^m, \lambda = 0.1\)。 算法步骤: 初始化 \(x^0 = 0\),初始步长 \(\alpha_ 0 = 1 / \|A^\top A\|_ 2\)。 迭代: 计算梯度: \(g_ k = A^\top (A y^k - b)\)。 回溯步长:从 \(\alpha = \alpha_ {k-1}\) 开始,不断尝试 \(\alpha := \beta \alpha\)(如 \(\beta=0.8\))直到满足: \[ F\left( \text{prox} {\alpha g}(y^k - \alpha g_ k) \right) \le Q \alpha\left( \text{prox} {\alpha g}(y^k - \alpha g_ k), y^k \right) \] 其中 \(Q \alpha(z, y) = f(y) + \nabla f(y)^\top (z - y) + \frac{1}{2\alpha} \|z - y\|^2 + \lambda \|z\|_ 1\) 是近端点模型。 更新 \(x^k\) 和 \(y^{k+1}\) 如上。 终止条件: \(\|x^k - x^{k-1}\|_ \infty < \epsilon\)(如 \(\epsilon = 10^{-6}\))。 4. 关键点总结 分解目标 :将问题拆分为光滑部分 \(f\) 与非光滑部分 \(g\)。 近端算子 :对于 L1 范数,近端算子是软阈值算子,有显式解。 迭代格式 :先对光滑部分做梯度步,再对非光滑部分做近端映射。 步长选择 :通过 Lipschitz 常数或回溯线搜索确定步长,确保下降性。 加速技巧 :使用 FISTA 的动量加速,可显著提升收敛速度。 收敛保证 :在凸条件下,算法保证收敛到全局最优解。 这种方法广泛应用于机器学习中的稀疏优化(如 Lasso)、信号处理、压缩感知等领域,因为它能有效处理非光滑正则项且实现简单高效。