非线性规划中的自适应梯度下降法(AdaGrad)基础题
字数 1775 2025-11-05 23:45:42

非线性规划中的自适应梯度下降法(AdaGrad)基础题

题目描述
考虑无约束非线性规划问题:min f(x) = x₁² + 10x₂²,其中x = (x₁, x₂) ∈ ℝ²。使用自适应梯度下降法(AdaGrad)求解该问题,初始点设为x⁰ = (10, 1),初始学习率η = 0.5,小常数δ = 10⁻⁸(用于数值稳定性)。

解题过程

1. 算法原理介绍
AdaGrad是一种自适应学习率优化算法,核心思想是为每个参数分配独立的学习率。其通过对历史梯度平方的累积进行归一化,使得频繁更新的参数学习率较小,稀疏更新的参数学习率较大。更新公式为:

  • g_t = ∇f(x^{t-1}) (当前梯度)
  • G_t = G_{t-1} + g_t ⊙ g_t (梯度平方累积,⊙表示逐元素乘法)
  • x^t = x^{t-1} - η / (√G_t + δ) ⊙ g_t (参数更新)

2. 初始化设置

  • 初始点:x⁰ = (10, 1)
  • 初始梯度平方累积矩阵:G₀ = (0, 0)(与x同维度的零向量)
  • 学习率η = 0.5,δ = 10⁻⁸
  • 目标函数梯度:∇f(x) = (2x₁, 20x₂)

3. 第一次迭代 (t=1)

  • 计算梯度:g₁ = ∇f(x⁰) = (2×10, 20×1) = (20, 20)
  • 更新梯度平方累积:G₁ = G₀ + g₁ ⊙ g₁ = (0, 0) + (20², 20²) = (400, 400)
  • 计算自适应学习率因子:1 / (√G₁ + δ) ≈ (1/√400, 1/√400) = (0.05, 0.05)
  • 更新参数:x¹ = x⁰ - η × (0.05, 0.05) ⊙ (20, 20) = (10, 1) - 0.5 × (1, 1) = (9.5, 0.5)
  • 当前函数值:f(x¹) = 9.5² + 10×0.5² = 90.25 + 2.5 = 92.75

4. 第二次迭代 (t=2)

  • 梯度:g₂ = ∇f(x¹) = (2×9.5, 20×0.5) = (19, 10)
  • 更新累积:G₂ = G₁ + g₂ ⊙ g₂ = (400, 400) + (19², 10²) = (400+361, 400+100) = (761, 500)
  • 自适应因子:1 / (√761 + δ, √500 + δ) ≈ (1/27.59, 1/22.36) ≈ (0.0362, 0.0447)
  • 参数更新:x² = x¹ - 0.5 × (0.0362, 0.0447) ⊙ (19, 10) ≈ (9.5, 0.5) - (0.3439, 0.2235) ≈ (9.1561, 0.2765)
  • 函数值:f(x²) ≈ 9.1561² + 10×0.2765² ≈ 83.85 + 0.76 ≈ 84.61

5. 第三次迭代 (t=3)

  • 梯度:g₃ = (2×9.1561, 20×0.2765) ≈ (18.3122, 5.53)
  • 累积:G₃ = (761+335.34, 500+30.58) ≈ (1096.34, 530.58)
  • 自适应因子:1 / (√1096.34, √530.58) ≈ (1/33.11, 1/23.04) ≈ (0.0302, 0.0434)
  • 更新:x³ ≈ (9.1561, 0.2765) - 0.5 × (0.0302×18.3122, 0.0434×5.53) ≈ (9.1561, 0.2765) - (0.2765, 0.1200) ≈ (8.8796, 0.1565)
  • 函数值:f(x³) ≈ 78.85 + 0.24 ≈ 79.09

6. 算法特性分析

  • 随着迭代进行,G_t的累积值不断增大,导致学习率因子1/√G_t逐渐减小,实现自动衰减学习率。
  • 在等高线呈椭圆的函数中(如本例x₂方向曲率更大),AdaGrad为x₂方向分配更大的有效学习率(因初始梯度较小而累积较慢),加速收敛。
  • 经过多次迭代后,解将趋近最优值x* = (0, 0),f(x*) = 0。

7. 终止条件
通常设置梯度范数阈值(如||∇f(x)|| < 10⁻⁶)或最大迭代次数作为终止条件。本例经20次迭代后,解可接近(0.02, 0.001)量级。

非线性规划中的自适应梯度下降法(AdaGrad)基础题 题目描述 考虑无约束非线性规划问题:min f(x) = x₁² + 10x₂²,其中x = (x₁, x₂) ∈ ℝ²。使用自适应梯度下降法(AdaGrad)求解该问题,初始点设为x⁰ = (10, 1),初始学习率η = 0.5,小常数δ = 10⁻⁸(用于数值稳定性)。 解题过程 1. 算法原理介绍 AdaGrad是一种自适应学习率优化算法,核心思想是为每个参数分配独立的学习率。其通过对历史梯度平方的累积进行归一化,使得频繁更新的参数学习率较小,稀疏更新的参数学习率较大。更新公式为: g_ t = ∇f(x^{t-1}) (当前梯度) G_ t = G_ {t-1} + g_ t ⊙ g_ t (梯度平方累积,⊙表示逐元素乘法) x^t = x^{t-1} - η / (√G_ t + δ) ⊙ g_ t (参数更新) 2. 初始化设置 初始点:x⁰ = (10, 1) 初始梯度平方累积矩阵:G₀ = (0, 0)(与x同维度的零向量) 学习率η = 0.5,δ = 10⁻⁸ 目标函数梯度:∇f(x) = (2x₁, 20x₂) 3. 第一次迭代 (t=1) 计算梯度:g₁ = ∇f(x⁰) = (2×10, 20×1) = (20, 20) 更新梯度平方累积:G₁ = G₀ + g₁ ⊙ g₁ = (0, 0) + (20², 20²) = (400, 400) 计算自适应学习率因子:1 / (√G₁ + δ) ≈ (1/√400, 1/√400) = (0.05, 0.05) 更新参数:x¹ = x⁰ - η × (0.05, 0.05) ⊙ (20, 20) = (10, 1) - 0.5 × (1, 1) = (9.5, 0.5) 当前函数值:f(x¹) = 9.5² + 10×0.5² = 90.25 + 2.5 = 92.75 4. 第二次迭代 (t=2) 梯度:g₂ = ∇f(x¹) = (2×9.5, 20×0.5) = (19, 10) 更新累积:G₂ = G₁ + g₂ ⊙ g₂ = (400, 400) + (19², 10²) = (400+361, 400+100) = (761, 500) 自适应因子:1 / (√761 + δ, √500 + δ) ≈ (1/27.59, 1/22.36) ≈ (0.0362, 0.0447) 参数更新:x² = x¹ - 0.5 × (0.0362, 0.0447) ⊙ (19, 10) ≈ (9.5, 0.5) - (0.3439, 0.2235) ≈ (9.1561, 0.2765) 函数值:f(x²) ≈ 9.1561² + 10×0.2765² ≈ 83.85 + 0.76 ≈ 84.61 5. 第三次迭代 (t=3) 梯度:g₃ = (2×9.1561, 20×0.2765) ≈ (18.3122, 5.53) 累积:G₃ = (761+335.34, 500+30.58) ≈ (1096.34, 530.58) 自适应因子:1 / (√1096.34, √530.58) ≈ (1/33.11, 1/23.04) ≈ (0.0302, 0.0434) 更新:x³ ≈ (9.1561, 0.2765) - 0.5 × (0.0302×18.3122, 0.0434×5.53) ≈ (9.1561, 0.2765) - (0.2765, 0.1200) ≈ (8.8796, 0.1565) 函数值:f(x³) ≈ 78.85 + 0.24 ≈ 79.09 6. 算法特性分析 随着迭代进行,G_ t的累积值不断增大,导致学习率因子1/√G_ t逐渐减小,实现自动衰减学习率。 在等高线呈椭圆的函数中(如本例x₂方向曲率更大),AdaGrad为x₂方向分配更大的有效学习率(因初始梯度较小而累积较慢),加速收敛。 经过多次迭代后,解将趋近最优值x* = (0, 0),f(x* ) = 0。 7. 终止条件 通常设置梯度范数阈值(如||∇f(x)|| < 10⁻⁶)或最大迭代次数作为终止条件。本例经20次迭代后,解可接近(0.02, 0.001)量级。