基于增广拉格朗日的随机方差缩减梯度法(SVRG-AL)基础题
题目描述
考虑一个非线性规划问题:
\[\begin{aligned} \min_{x \in \mathbb{R}^n} \quad & f(x) = \frac{1}{N} \sum_{i=1}^{N} f_i(x) \\ \text{s.t.} \quad & c_j(x) = 0, \quad j = 1, \dots, m \\ & h_k(x) \leq 0, \quad k = 1, \dots, p \end{aligned} \]
其中,目标函数 \(f(x)\) 是 \(N\) 个分量函数 \(f_i(x)\) 的平均(例如大规模机器学习中的经验风险),\(c_j(x)\) 是等式约束,\(h_k(x)\) 是不等式约束。假设 \(f_i(x)\)、\(c_j(x)\)、\(h_k(x)\) 都是连续可微的,且 \(N\) 很大(例如 \(N \geq 10^5\)),因此每次计算全梯度 \(\nabla f(x) = \frac{1}{N} \sum_{i=1}^{N} \nabla f_i(x)\) 的代价很高。要求设计一个基于增广拉格朗日法和随机方差缩减梯度的高效算法,在保证约束精度的同时,降低每次迭代的计算成本。
解题过程循序渐进讲解
1. 问题分析与算法选择动机
大规模约束优化问题中,直接使用传统优化方法(如SQP、内点法)需要反复计算全梯度,计算量随 \(N\) 线性增长,效率低下。
- 增广拉格朗日法:将约束问题转化为一系列无约束子问题,通过迭代更新拉格朗日乘子和罚参数来逼近约束最优解。
- 随机方差缩减梯度:适用于有限和形式的目标,通过动态估计全梯度并采样小批量数据计算方差缩减的梯度估计,大幅降低单次迭代成本。
结合两者,可以设计一个外层更新乘子和罚参数、内层用SVRG求解无约束子问题的两层迭代算法。
2. 增广拉格朗日函数构造
首先引入松弛变量 \(s_k \geq 0\) 将不等式约束转化为等式:
\[h_k(x) + s_k^2 = 0, \quad s_k \in \mathbb{R}. \]
记 \(c(x) = [c_1(x), \dots, c_m(x)]^T\),\(h(x) = [h_1(x), \dots, h_p(x)]^T\),\(s = [s_1, \dots, s_p]^T\)。
增广拉格朗日函数为:
\[\mathcal{L}_{\rho}(x, s, \lambda, \mu) = f(x) + \lambda^T c(x) + \frac{\rho}{2} \|c(x)\|^2 + \mu^T (h(x) + s^2) + \frac{\rho}{2} \|h(x) + s^2\|^2, \]
其中 \(\lambda \in \mathbb{R}^m\)、\(\mu \in \mathbb{R}^p\) 是拉格朗日乘子,\(\rho > 0\) 是罚参数,\(s^2\) 表示逐元素平方。
3. 子问题分解与SVRG应用
在每步外层迭代中,固定 \(\lambda, \mu, \rho\),需要求解关于 \(x\) 和 \(s\) 的无约束子问题:
\[\min_{x, s \geq 0} \mathcal{L}_{\rho}(x, s, \lambda, \mu). \]
由于 \(s\) 只出现在 \(\|h(x) + s^2\|^2\) 项中,可显式求解:对固定 \(x\),令 \(g_k = h_k(x)\),则最优 \(s_k\) 满足
\[s_k^* = \max\left\{0, -\frac{\mu_k}{2\rho} - \frac{g_k}{2}\right\}^{1/2}. \]
代入后,子问题简化为仅关于 \(x\) 的无约束问题:
\[\min_{x} \Phi_{\rho}(x; \lambda, \mu) := f(x) + \lambda^T c(x) + \frac{\rho}{2} \|c(x)\|^2 + \psi_{\rho}(x; \mu), \]
其中
\[\psi_{\rho}(x; \mu) = \sum_{k=1}^p \begin{cases} -\frac{\mu_k^2}{4\rho}, & \text{if } h_k(x) \leq -\frac{\mu_k}{\rho}, \\ \mu_k h_k(x) + \frac{\rho}{2} h_k(x)^2, & \text{otherwise}. \end{cases} \]
(这是通过解析消去 \(s\) 得到的经典结果,推导从略。)
现在 \(\Phi_{\rho}\) 是有限和形式吗?注意 \(f(x) = \frac{1}{N} \sum_i f_i(x)\),而 \(c(x)\)、\(h(x)\) 通常不是有限和,但 \(N\) 很大时,主要计算负担在 \(f(x)\) 的梯度。因此我们对 \(\nabla f(x)\) 采用SVRG估计,而对 \(\nabla c(x)\)、\(\nabla h(x)\) 仍用全量计算(因 \(m, p\) 较小)。
4. SVRG梯度估计的嵌入
设当前外层迭代的乘子为 \(\lambda^t, \mu^t\),罚参数为 \(\rho_t\)。记:
\[F(x) := \Phi_{\rho_t}(x; \lambda^t, \mu^t) = \frac{1}{N} \sum_{i=1}^N f_i(x) + Q(x), \]
其中 \(Q(x) = \lambda^{tT} c(x) + \frac{\rho_t}{2} \|c(x)\|^2 + \psi_{\rho_t}(x; \mu^t)\) 与 \(i\) 无关。
则梯度为:
\[\nabla F(x) = \frac{1}{N} \sum_{i=1}^N \nabla f_i(x) + \nabla Q(x). \]
SVRG的工作方式:
- 在每轮内层迭代开始时,计算“快照”处的全梯度 \(\tilde{g} = \nabla F(\tilde{x}) = \frac{1}{N} \sum_i \nabla f_i(\tilde{x}) + \nabla Q(\tilde{x})\)。
- 内层每次迭代随机选一个索引 \(i_t \in \{1,\dots,N\}\),计算方差缩减的梯度估计:
\[v_t = \nabla f_{i_t}(x_t) - \nabla f_{i_t}(\tilde{x}) + \tilde{g}. \]
注意 \(\nabla Q(x)\) 在 \(v_t\) 中已通过 \(\tilde{g}\) 包含,不需重复采样。
5. 完整算法步骤
算法:SVRG-增广拉格朗日法
- 初始化:\(x^0, s^0, \lambda^0, \mu^0 \geq 0, \rho_0 > 0, \eta > 1\)(罚参数增长因子),内层步长 \(\alpha > 0\),内层迭代数 \(T\)。
- 外层循环(\(t = 0, 1, 2, \dots\)):
a. 固定 \(\lambda^t, \mu^t, \rho_t\),构造 \(\Phi_{\rho_t}(x; \lambda^t, \mu^t)\)。
b. 内层SVRG循环求解 \(\min_x \Phi_{\rho_t}(x)\):- 设内层初始点 \(\tilde{x} = x^t\),计算全梯度 \(\tilde{g} = \nabla \Phi_{\rho_t}(\tilde{x})\)。
- 对 \(\tau = 0\) 到 \(T-1\):
- 随机均匀选取 \(i_{\tau} \in \{1,\dots,N\}\)。
- 计算梯度估计:
\[ v_{\tau} = \nabla f_{i_{\tau}}(x_{\tau}) - \nabla f_{i_{\tau}}(\tilde{x}) + \tilde{g}. \]
* 更新:$ x_{\tau+1} = x_{\tau} - \alpha v_{\tau} $。
- 设置内层输出 $ x^{t+1} = x_T $。
c. 更新松弛变量:\(s_k^{t+1} = \max\{0, -\frac{\mu_k^t}{2\rho_t} - \frac{h_k(x^{t+1})}{2}\}^{1/2}\)。
d. 更新乘子:
\[ \lambda_j^{t+1} = \lambda_j^t + \rho_t c_j(x^{t+1}), \quad j=1,\dots,m, \]
\[ \mu_k^{t+1} = \max\{0, \mu_k^t + \rho_t h_k(x^{t+1})\}, \quad k=1,\dots,p. \]
e. 更新罚参数:若约束违反度未下降足够,则 \(\rho_{t+1} = \eta \rho_t\),否则 \(\rho_{t+1} = \rho_t\)。
3. 终止条件:当约束违反度 \(\|c(x^t)\| + \|\max\{0, h(x^t)\}\|\) 小于容差,且梯度范数足够小时停止。
6. 关键点与注意事项
- 计算优势:内层每次迭代只计算单个 \(\nabla f_{i}(x)\),而不是全梯度,代价从 \(O(Nn)\) 降至 \(O(n)\)。
- 方差缩减:SVRG的估计 \(v_t\) 方差逐渐减小,确保内层收敛速度接近梯度下降。
- 约束处理:增广拉格朗日法将约束违反融入目标,子问题精确求解不必要,只需近似解(内层SVRG迭代有限步),仍能保证外层收敛。
- 步长选择:内层步长 \(\alpha\) 需满足 \(0 < \alpha < 1/L\),其中 \(L\) 是 \(\Phi_{\rho_t}\) 的 Lipschitz 常数估计(可通过 \(f_i\) 和 \(Q\) 的 Lipschitz 常数求和得到)。
- 实际调整:初始 \(\rho_0\) 不宜过大,以免子问题病态;可据约束违反度自适应增加 \(\rho\)。
7. 简单数值例子说明
设 \(N=1000\),\(n=20\),\(f_i(x) = (a_i^T x - b_i)^2\)(线性回归),约束为 \(\|x\|^2 = 1\)(等式)和 \(x_1 \leq 0.5\)(不等式)。
算法步骤:
- 构造增广拉格朗日函数,消去松弛变量。
- 外层固定 \(\lambda, \mu, \rho\),内层用SVRG迭代100步更新 \(x\)。
- 更新乘子:\(\lambda \leftarrow \lambda + \rho (\|x\|^2 - 1)\),\(\mu \leftarrow \max\{0, \mu + \rho (x_1 - 0.5)\}\)。
- 检查约束违反,若仍大则增大 \(\rho\) 继续外层迭代。
该方法在机器学习中带约束的大规模经验风险最小化问题中很有用,例如支持向量机、带约束的深度学习。
总结:本算法结合了增广拉格朗日法的约束处理能力和SVRG的大规模有限和优化效率,通过两层迭代实现了大规模约束非线性规划的高效求解。关键在于内层梯度估计的方差缩减和外层乘子的自适应更新。