分块矩阵的块随机梯度下降法在最小二乘问题中的在线优化应用
题目描述
我们考虑大规模线性最小二乘问题:
\[\min_{x \in \mathbb{R}^n} f(x) = \frac{1}{2} \|Ax - b\|_2^2 \]
其中 \(A \in \mathbb{R}^{m \times n}\) 是一个大型矩阵(通常 \(m \gg n\)),\(b \in \mathbb{R}^m\) 是已知向量。当 \(A\) 特别巨大,无法完整载入内存时,传统的批量方法(如正规方程、QR分解)难以直接应用。块随机梯度下降法 将矩阵 \(A\) 按行分块,每次迭代只随机选取一个数据块(子矩阵)计算梯度,从而实现对大规模数据的在线、增量式优化。
本题目讲解如何将分块策略与随机梯度下降结合,设计一个高效、内存友好的求解算法,并分析其收敛性基础。
解题过程
1. 问题重构与分块
首先,我们将矩阵 \(A\) 按行划分为 \(K\) 个块:
\[A = \begin{bmatrix} A_1 \\ A_2 \\ \vdots \\ A_K \end{bmatrix}, \quad b = \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_K \end{bmatrix} \]
其中 \(A_i \in \mathbb{R}^{m_i \times n}, \; b_i \in \mathbb{R}^{m_i}\),且 \(\sum_{i=1}^K m_i = m\)。目标函数可写为:
\[f(x) = \frac{1}{2} \sum_{i=1}^K \|A_i x - b_i\|_2^2 \]
2. 标准梯度下降回顾
若使用全批量梯度下降,更新公式为:
\[x_{k+1} = x_k - \eta_k \nabla f(x_k), \quad \nabla f(x_k) = \sum_{i=1}^K A_i^T (A_i x_k - b_i) \]
每轮迭代需遍历所有 \(K\) 个块,计算开销为 \(O(mn)\),内存需存储整个 \(A\) 或全部 \(A_i^T A_i\),不适合超大规模数据。
3. 块随机梯度下降算法设计
核心思想:每次迭代随机选取一个块 \(A_i\),用该块的梯度近似整体梯度。
算法步骤:
- 初始化:选取初始点 \(x_0 \in \mathbb{R}^n\),学习率序列 \(\{\eta_t\}_{t \ge 0}\),总迭代次数 \(T\)。
- 迭代(对 \(t = 0, 1, \dots, T-1\)):
- 随机采样:以等概率 \(1/K\) 从 \(\{1, 2, \dots, K\}\) 中选取索引 \(i_t\)。
- 块梯度计算:计算选中块的梯度
\[ g_t = A_{i_t}^T (A_{i_t} x_t - b_{i_t}) \]
- 参数更新:
\[ x_{t+1} = x_t - \eta_t g_t \]
- 输出:最终迭代点 \(x_T\) 或历次迭代的平均值。
4. 细节与计算优势
- 内存效率:每次只需加载一个数据块 \(A_{i_t} \in \mathbb{R}^{m_i \times n}\) 和对应的 \(b_{i_t}\),内存占用从 \(O(mn)\) 降至 \(O(m_i n)\),适合外存或分布式存储。
- 计算开销:每轮迭代计算 \(g_t\) 的复杂度为 \(O(m_i n)\),远低于全批量的 \(O(mn)\)。
- 在线学习:新数据块可动态加入,适用于流式数据。
5. 收敛性分析要点
随机梯度下降的收敛性依赖于以下关键条件:
- 梯度无偏性:随机梯度 \(g_t\) 是真实梯度的无偏估计:
\[ \mathbb{E}[g_t] = \sum_{i=1}^K \frac{1}{K} A_i^T (A_i x_t - b_i) = \frac{1}{K} \nabla f(x_t) \]
注意这里差一个常数因子 \(1/K\),可通过调整学习率吸收。
- Lipschitz 连续性:每个块的梯度 Lipschitz 常数 \(L_i\) 满足
\[ \|\nabla f_i(x) - \nabla f_i(y)\| \le L_i \|x - y\|, \quad f_i(x) = \frac{1}{2} \|A_i x - b_i\|^2 \]
且 \(L_i = \|A_i^T A_i\|_2\)。全局 Lipschitz 常数 \(L = \max_i L_i\) 或 \(L = \|A^T A\|_2 / K\) 影响学习率选择。
- 学习率调度:通常要求 \(\eta_t\) 满足 Robbins–Monro 条件:
\[ \sum_{t=0}^\infty \eta_t = \infty, \quad \sum_{t=0}^\infty \eta_t^2 < \infty \]
例如 \(\eta_t = \frac{\alpha}{t + \beta}\)(\(\alpha, \beta > 0\))。
- 收敛结果:在强凸目标下,算法以 \(O(1/t)\) 速率收敛到最优解 \(x^*\)(期望意义下);非强凸时收敛到驻点。
6. 实用改进技巧
- 块大小选择:块大小 \(m_i\) 影响方差与效率。较大的块降低梯度方差,但增加每轮计算量;较小的块增加随机性,可能收敛更快初始阶段。
- 动量加速:引入动量项以平滑梯度更新:
\[ v_{t+1} = \gamma v_t + \eta_t g_t, \quad x_{t+1} = x_t - v_{t+1} \]
其中 \(\gamma \in (0,1)\) 是动量系数。
- 自适应学习率:类似 AdaGrad 或 Adam 的方法,为每个参数调整学习率,可加速收敛。
- 方差缩减:结合 SVRG 或 SAGA 等方法,利用全梯度估计减少随机梯度的方差,改善收敛性能。
7. 与分块矩阵运算的联系
该算法可视为对分块矩阵 \(A\) 的逐块访问与计算,避免了显式构造 \(A^T A\) 或进行大规模矩阵分解。在分布式计算中,不同块可存储在不同节点上,每次迭代选择一个节点计算,适合参数服务器架构。
总结
块随机梯度下降法将大规模最小二乘问题分解为小块处理,通过随机采样块梯度实现内存高效、在线更新的优化。其核心在于合理分块、无偏梯度估计和递减学习率调度。虽然收敛速度较批量梯度下降慢,但其每轮极低的计算成本使其成为处理超大规模数据的实用选择,并可通过动量、自适应学习率等技术进一步加速。