在数值优化中, Broyden–Fletcher–Goldfarb–Shanno(BFGS)算法是一种求解无约束非线性优化问题的迭代算法。 [1]和相关的Davidon–Fletcher–Powell算法类似,BFGS算法通过利用曲率信息对梯度进行预处理来确定下降方向。曲率信息则是通过维护一个使用广义的割线法逐步近似的关于损失函数的Hessian矩阵来获得。 此条目或其章节极大或完全地依赖于某个单一的来源。 (2021年5月24日) 算法 从起始点 x 0 {\displaystyle \mathbf {x} _{0}} 和初始的Hessian矩阵 B 0 {\displaystyle B_{0}} ,重复以下步骤, x k {\displaystyle \mathbf {x} _{k}} 会收敛到优化问题的解: 通过求解方程 B k p k = − ∇ f ( x k ) {\displaystyle B_{k}\mathbf {p} _{k}=-\nabla f(\mathbf {x} _{k})} ,获得下降方向 p k {\displaystyle \mathbf {p} _{k}} 。 在 p k {\displaystyle \mathbf {p} _{k}} 方向上进行一维的优化(线搜索),找到合适的步长 α k {\displaystyle \alpha _{k}} 。如果这个搜索是完全的,则 α k = arg min f ( x k + α p k ) {\displaystyle \alpha _{k}=\arg \min f(\mathbf {x} _{k}+\alpha \mathbf {p} _{k})} 。在实际应用中,不完全的搜索一般就足够了,此时只要求 α k {\displaystyle \alpha _{k}} 满足Wolfe条件。 令 s k = α k p k {\displaystyle \mathbf {s} _{k}=\alpha _{k}\mathbf {p} _{k}} ,并且令 x k + 1 = x k + s k {\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\mathbf {s} _{k}} 。 y k = ∇ f ( x k + 1 ) − ∇ f ( x k ) {\displaystyle \mathbf {y} _{k}={\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}} 。 B k + 1 = B k + y k y k T y k T s k − B k s k s k T B k T s k T B k s k {\displaystyle B_{k+1}=B_{k}+{\frac {\mathbf {y} _{k}\mathbf {y} _{k}^{\mathrm {T} }}{\mathbf {y} _{k}^{\mathrm {T} }\mathbf {s} _{k}}}-{\frac {B_{k}\mathbf {s} _{k}\mathbf {s} _{k}^{\mathrm {T} }B_{k}^{\mathrm {T} }}{\mathbf {s} _{k}^{\mathrm {T} }B_{k}\mathbf {s} _{k}}}} 。 f ( x ) {\displaystyle f(\mathbf {x} )} 表示要最小化的目标函数。可以通过检查梯度的范数 | | ∇ f ( x k ) | | {\displaystyle ||\nabla f(\mathbf {x} _{k})||} 来判断收敛性。如果 B 0 {\displaystyle B_{0}} 初始化为 B 0 = I {\displaystyle B_{0}=I} ,第一步将等效于梯度下降,但接下来的步骤会受到近似于Hessian矩阵的 B k {\displaystyle B_{k}} 的调节。 拓展阅读 梯度下降 拟牛顿法 参考文献 [1]Fletcher, Roger, Practical Methods of Optimization 2nd, New York: John Wiley & Sons, 1987, ISBN 978-0-471-91547-8 Wikiwand - on Seamless Wikipedia browsing. On steroids.