Hessian海森矩阵与牛顿最优化方法

本文介绍了海森矩阵的概念,它是函数的二阶偏导数组成的方块矩阵。接着详细阐述了牛顿法解方程的原理和迭代公式,并解释了牛顿最优化方法如何通过求解函数的一阶导数为0来寻找极值点。最后,展示了多自变量情况下牛顿迭代公式的应用。

Hessian矩阵

在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:

f(x1,x2,xn)

如果f的所有二阶导数都存在, 那么f的海森矩阵即:

H(f)ij(x)=DiDjf(x)

其中x=(x1,x2,xn), 即H(f)为:

2fx212fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fx2n

牛顿法解方程

在讲牛顿最优化方法之前,我们先来回顾一下计算方法中的牛顿法解方程,这其实是一个迭代的过程。

我们用牛顿法求解f(x)=0这个问题, 首先对将f(x)x(k)处做一阶泰勒展开,那么我们就会得到:

f(x)=f(x(k))+(xx(k))f(x(k))

因为f(x)=0,那么我们可以得到:

0=f(x(k))+(xx(k))f(x(k))

解这个方程,我们可以得出:

x=x(k)f(x(k))/f(x(k))

那么这里迭代公式就是:

x(k+1)=x(k)f(x(k))/f(x(k))

迭代的原理见下图,注意这里x(k)表示第k步迭代时的x取值,x表示精确解, 这个迭代过程就是不断逼近x的过程,其实就是不断的用曲线的切线与x轴交点的横坐标来近似表达曲线与x轴交点的横坐标,所以牛顿法也叫切线法。

这里写图片描述

牛顿最优化方法

最优化的问题其实就是求解一个目标函数f(x)的极大极小值问题。我们知道函数的极值点其实就是该函数一阶倒数为0的点,即求解方程f(x)=0的解,这可以通过刚刚提到的牛顿法求解方程组解决.

我们对f(x)xk处做二阶泰勒展开,那么我们会得到:

f(x)=f(x(k))+f(x(k))(xx(k))+12f′′(x(k))(xx(k))2

我们对f(x)求导,可以得到:

f(x)=f(x(k))+f′′(x(k))(xx(k))

f(x)=0,即可得到:

0=f(x(k))+f′′(x(k))(xx(k))

解方程,求得x等于:

x=xkf(x(k))f′′(x(k))

即,迭代格式为:

x(k+1)=x(k)f(x(k))f′′(x(k))

在上面讨论的是y=f(x)这种只包含x这1个自变量的情况, 多个自变量情况时的牛顿迭代公式是:

x(k+1)=x(k)[Hf(x(k))]1f(x(k)),n0

其中Hf(x(k))即为Hessian矩阵,f(x(k))是一个向量,向量中的每个元素分别是f(x)对各个自变量求偏导后的函数在x=x(k)时的函数值。

### 牛顿迭代法海森矩阵的关系 牛顿迭代法是一种用于寻找实值函数零点的方法,在数值优化领域被广泛应用于求解无约束最优化问题。对于一元函数$f(x)$,其基本思想是从初始猜测$x_0$出发,通过泰勒展开近似该函数并找到更接近真实根的位置作为新的估计值。在一维情况下,这一过程依赖于导数的信息;而在多维空间中,则需利用梯度向量$\nabla f(\mathbf{x})$以及二阶偏导数组成的海森矩阵$\mathbf{H}(\mathbf{x})$来构建部二次模型[^1]。 具体来说,给定当前点$\mathbf{x}_k$处的目标函数$f(\mathbf{x})$及其对应的梯度和海森矩阵: $$\begin{align*} \nabla f(\mathbf{x_k}) &= \left[\frac{\partial f}{\partial x_1}, ..., \frac{\partial f}{\partial x_n}\right]^T \\ \mathbf{H}(f)(\mathbf{x_k})_{ij} &= \frac{{\partial ^2f}}{{\partial {x_i}\partial {x_j}}} \end{align*}$$ 则下一次迭代位置可通过如下公式获得: $$\mathbf{x}_{k+1}=\mathbf{x}_k-\alpha [\mathbf{H}(f)(\mathbf{x}_k)]^{-1}\cdot\nabla f(\mathbf{x}_k)\tag{1}$$ 其中$\alpha>0$为步长因子,通常设置为1或经过线搜索调整后的最优值。上述表达式表明了如何基于当前位置附近的曲率信息(即海森矩阵)指导下一步移动方向,从而加速收敛速度并提高精度[^3]。 然而值得注意的是,在实际应用过程中直接计算并存储完整的$n\times n$维度海森矩阵往往成本高昂,尤其是在处理大规模数据集时更是如此。因此出现了许多改进版本如BFGS算法等拟牛顿方法,它们试图用较低开销的方式逼近真实的逆海森矩阵效果,进而达到简化运算的目的[^2]。 ### 应用场景实例展示 考虑一个简单的二维非凸函数最小化案例——Rosenbrock山谷函数: \[f(x,y)=(a-x)^2+b(y-x^2)^2,\quad a=1,b=100.\] 此函数具有明显的鞍点特征,使得很多传统的一阶梯度下降策略难以有效工作。而采用牛顿法能够充分利用目标函数本身的几何特性快速定位全最优解附近区域。下面给出Python代码实现: ```python import numpy as np from scipy.optimize import minimize def rosen_hess_inv(x): """Compute the inverse Hessian matrix of Rosenbrock function.""" x, y = x hinv = np.array([[78 * (y - 3*x**2)**2 + 2, -36*(y - 3*x**2)*(-4*b*x)], [-36*(y - 3*x**2)*(-4*b*x), 12*b]]) return hinv / ((hinv[0][0]*hinv[1][1])-(hinv[0][1]*hinv[1][0])) res = minimize(lambda z: (z[0]-1.)**2 + b*(z[1]-z[0]**2)**2, jac=lambda z: np.r_[2.*(z[0]-1.), 2.*b*(-z[0]+z[0]**3-z[1])], hess=rosen_hess_inv, method='Newton-CG', options={'xtol': 1e-8}, x0=[-1.2, 1]) print(res.x) ``` 这段程序展示了如何定义自定义的海森矩阵逆操作,并将其传递给`minimize()`函数内部使用的牛顿共轭梯度(`'Newton-CG'`)求解器完成最终寻优任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值