非线性规划中的自适应步长随机梯度下降法基础题
字数 2495 2025-11-10 04:43:42
非线性规划中的自适应步长随机梯度下降法基础题
题目描述
考虑一个无约束非线性规划问题:
最小化 \(f(x) = \frac{1}{N} \sum_{i=1}^{N} f_i(x)\),其中 \(x \in \mathbb{R}^n\),每个 \(f_i(x)\) 是光滑但可能非凸的函数,且 \(N\) 非常大(例如大规模机器学习中的经验风险最小化)。目标是通过自适应步长随机梯度下降法(如 AdaGrad 或 Adam 的简化版本)找到 \(f(x)\) 的局部极小点。具体问题设定为:
\(f(x) = \frac{1}{3} \left( (x_1 - 1)^4 + (x_2 + 2)^2 + e^{x_1 + x_2} \right)\),初始点 \(x^{(0)} = (0, 0)\),要求迭代至梯度范数小于 \(10^{-3}\)。
解题过程
-
问题分析
- 目标函数 \(f(x)\) 可视为 \(N=3\) 个分量的平均:
\(f_1(x) = (x_1 - 1)^4\),\(f_2(x) = (x_2 + 2)^2\),\(f_3(x) = e^{x_1 + x_2}\)。 - 梯度 \(\nabla f(x) = \frac{1}{3} \left[ 4(x_1 - 1)^3 + e^{x_1 + x_2}, 2(x_2 + 2) + e^{x_1 + x_2} \right]^T\)。
- 由于 \(N\) 较小,可直接计算全梯度,但为演示算法,仍使用随机梯度:每次迭代随机选一个 \(f_i\) 计算梯度近似。
- 目标函数 \(f(x)\) 可视为 \(N=3\) 个分量的平均:
-
算法选择:自适应步长随机梯度下降
- 标准随机梯度下降(SGD)的更新规则:
\(x^{(k+1)} = x^{(k)} - \alpha_k g_k\),其中 \(g_k\) 是当前迭代的随机梯度(如 \(\nabla f_i(x^{(k)})\))。 - 自适应步长通过调整 \(\alpha_k\) 适应梯度历史信息。以 AdaGrad 为例:
- 维护一个向量 \(s_k \in \mathbb{R}^n\),初始为 \(s_0 = 0\)。
- 每轮更新 \(s_k = s_{k-1} + g_k \odot g_k\)(按元素平方),步长 \(\alpha_k = \frac{\alpha}{\sqrt{s_k + \epsilon}}\)(按元素除法),其中 \(\alpha\) 是全局学习率,\(\epsilon=10^{-8}\) 防除零。
- 更新公式:\(x^{(k+1)} = x^{(k)} - \alpha_k \odot g_k\)。
- 标准随机梯度下降(SGD)的更新规则:
-
迭代步骤
- 初始化:设 \(x^{(0)} = (0, 0)\),\(s_0 = (0, 0)\),全局学习率 \(\alpha = 0.5\),\(\epsilon = 10^{-8}\)。
- 第 1 轮迭代:
- 随机选择 \(i=2\)(对应 \(f_2(x)\)),计算 \(g_1 = \nabla f_2(x^{(0)}) = [0, 2(0 + 2)]^T = [0, 4]^T\)。
- 更新 \(s_1 = s_0 + g_1 \odot g_1 = (0, 0) + (0, 16) = (0, 16)\)。
- 计算自适应步长 \(\alpha_1 = \frac{0.5}{\sqrt{s_1 + \epsilon}} \approx (0.5/10^{-4}, 0.5/\sqrt{16}) = (5000, 0.125)\)。
- 更新 \(x^{(1)} = (0, 0) - (5000 \cdot 0, 0.125 \cdot 4) = (0, -0.5)\)。
- 第 2 轮迭代:
- 随机选择 \(i=3\)(对应 \(f_3(x)\)),计算 \(g_2 = \nabla f_3(x^{(1)}) = [e^{0 + (-0.5)}, e^{0 + (-0.5)}]^T \approx [0.6065, 0.6065]^T\)。
- 更新 \(s_2 = s_1 + g_2 \odot g_2 \approx (0 + 0.3679, 16 + 0.3679) = (0.3679, 16.3679)\)。
- \(\alpha_2 \approx (0.5/\sqrt{0.3679}, 0.5/\sqrt{16.3679}) \approx (0.822, 0.123)\)。
- \(x^{(2)} \approx (0, -0.5) - (0.822 \cdot 0.6065, 0.123 \cdot 0.6065) \approx (-0.498, -0.575)\)。
- 后续迭代:重复过程,每轮随机选 \(i\),更新 \(s_k\) 和 \(x^{(k)}\),并计算全梯度范数 \(\| \nabla f(x^{(k)}) \|\) 检查收敛(每 10 轮或定期计算全梯度以避免噪声)。
-
收敛性说明
- 自适应步长通过 \(s_k\) 累积梯度平方,对频繁更新的参数减小步长(避免震荡),对稀疏参数保持大步长(加速收敛)。
- 在非凸问题中,算法可能收敛到局部极小点,但适当学习率下梯度范数会趋于零。
- 本题中,通过多次迭代(如 100-200 轮),\(x\) 将接近理论极小点 \((1, -2)\)(可通过解析梯度验证)。
关键点
- 自适应步长优于固定步长,尤其当梯度分量尺度差异大时。
- 随机梯度引入噪声,需定期检查全梯度以确保收敛。
- 实际应用中需调整学习率 \(\alpha\) 和 \(\epsilon\) 以平衡速度与稳定性。