非线性规划中的自适应梯度下降法(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)量级。