非线性规划中的自适应步长随机梯度下降法基础题
字数 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}\)

解题过程

  1. 问题分析

    • 目标函数 \(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\) 计算梯度近似。
  2. 算法选择:自适应步长随机梯度下降

    • 标准随机梯度下降(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\)
  3. 迭代步骤

    • 初始化:设 \(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 轮或定期计算全梯度以避免噪声)。
  4. 收敛性说明

    • 自适应步长通过 \(s_k\) 累积梯度平方,对频繁更新的参数减小步长(避免震荡),对稀疏参数保持大步长(加速收敛)。
    • 在非凸问题中,算法可能收敛到局部极小点,但适当学习率下梯度范数会趋于零。
    • 本题中,通过多次迭代(如 100-200 轮),\(x\) 将接近理论极小点 \((1, -2)\)(可通过解析梯度验证)。

关键点

  • 自适应步长优于固定步长,尤其当梯度分量尺度差异大时。
  • 随机梯度引入噪声,需定期检查全梯度以确保收敛。
  • 实际应用中需调整学习率 \(\alpha\)\(\epsilon\) 以平衡速度与稳定性。
非线性规划中的自适应步长随机梯度下降法基础题 题目描述 考虑一个无约束非线性规划问题: 最小化 \( 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 \) 计算梯度近似。 算法选择:自适应步长随机梯度下降 标准随机梯度下降(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 \)。 迭代步骤 初始化 :设 \( 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 \) 以平衡速度与稳定性。