本文档介绍了BFGS算法,一种高效的拟牛顿法,在无需计算Hessian矩阵的情况下求解无约束优化问题,适用于大规模问题求解。
拟牛顿法是一种在数值最优化领域广泛应用的迭代方法,主要用来寻找函数的局部极小值。这种方法模拟了牛顿法的思想,但不需要计算目标函数的Hessian矩阵(二阶导数矩阵),而是通过近似Hessian来实现。BFGS算法是拟牛顿法的一种典型代表,因其高效性和稳定性而受到青睐。
BFGS算法的核心在于逐步更新近似的Hessian矩阵Bk。在每一步迭代中,利用前一次的搜索方向Sk和梯度变化yk来更新Bk,其公式如下:
\[ B_{k+1} = B_k + \frac{y_k y_k^T}{y_k^T S_k} - \frac{B_k S_k S_k^T B_k}{S_k^T B_k S_k} \]
其中,yk是第k次迭代的梯度变化向量,即yk = gk - gk-1;Sk表示从第(k-1)步到第k步的位置更新;gk为第k次迭代的梯度向量。
对于给定的目标函数 \( f(x_1, x_2) = -4x_1 - 6x_2 + 2x_1^2 + 2x_1x_2 + 2x_2^2 \),初始点为 (1, 1),我们首先计算初始梯度g0和Hessian近似矩阵B0,假设B0是单位矩阵。然后按照以下步骤进行迭代:
1. 计算步长αk。
2. 更新位置:\( x_{k+1} = x_k - \alpha_k B_k^{-1} g_k \)。
3. 根据新的梯度g(k+1)和步长向量Sk,利用BFGS公式更新Hessian近似矩阵B(k+1)。
4. 重复步骤2和3直到满足停止准则。
具体计算示例如下:
- 梯度g0:\( (-4, -6)^T \)
- Hessian近似B0:单位矩阵 \( I \)
第一次迭代中,我们得到
- Sk = ( (-1, 0)^T )
- yk = ( (-2, -1)^T )
根据上述信息更新Hessian近似矩阵B(k+1),并计算新的位置和梯度。后续每次迭代都重复此过程直到满足终止条件。
拟牛顿法的效率主要体现在它不需要直接计算复杂的Hessian矩阵,而是通过简单的梯度变化来进行更新,从而大大降低了计算复杂性。同时,BFGS算法具有良好的全局收敛性质,在解决大规模优化问题时表现出色。然而对于非常大的数据集而言,存储和更新Hessian近似矩阵可能成为瓶颈,这时可以考虑使用更节省内存的L-BFGS(有限内存BFGS)算法。