小言_互联网的博客

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

278人阅读  评论(0)

Hessian矩阵

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

f ( x 1 , x 2 , x n ) f({x_1},{x_2} \ldots ,{x_n})

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

H ( f ) i j ( x ) = D i D j f ( x ) H{(f)_{ij}}(x) = {D_i}{D_j}f(x)

其中 x = ( x 1 , x 2 , x n ) x = ({x_1},{x_2} \ldots ,{x_n}) , 即 H ( f ) H(f) 为:
[ 2 f x 1 2 2 f x 1 x 2 2 f x 1 x n 2 f x 2 x 1 2 f x 2 2 2 f x 2 x n 2 f x n x 1 2 f x n x 2 2 f x n 2 ] \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1\,\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1\,\partial x_n} \\ \\ \frac{\partial^2 f}{\partial x_2\,\partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2\,\partial x_n} \\ \\ \vdots & \vdots & \ddots & \vdots \\ \\ \frac{\partial^2 f}{\partial x_n\,\partial x_1} & \frac{\partial^2 f}{\partial x_n\,\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix}

牛顿法解方程

牛顿法最优化方法原理实际与计算方法中的牛顿法解方程是一致的,是一个迭代的过程。

我们用牛顿法求解 f ( x ) = 0 f(x)=0 这个问题, 首先对将 f ( x ) f(x) x ( k ) x^{(k)} 处做一阶泰勒展开,那么我们就会得到:
f ( x ) = f ( x ( k ) ) + ( x x ( k ) ) f ( x ( k ) ) f(x) = f({x^{(k)}}) + (x – {x^{(k)}})f'({x^{(k)}})
代入求解 f ( x ) = 0 f(x)=0 ,可以得出:
x = x ( k ) f ( x ( 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+1)}} = {x^{(k)}} – f({x^{(k)}})/f’({x^{(k)}})
迭代的原理见下图,注意这里x x ( k ) x^{(k)} 表示第k步迭代时的 x x 取值, x x^* 表示精确解, 这个迭代过程就是不断逼近 x x^* 的过程,其实就是不断的用曲线的切线与x轴交点的横坐标来近似表达曲线与x轴交点的横坐标,所以牛顿法也叫切线法。

牛顿最优化方法

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

我们对 f ( x ) f(x) x ( k ) x^{(k)} 处做二阶泰勒展开,得到:
f ( x ) = f ( x ( k ) ) + f ( x ( k ) ) ( x x ( k ) ) + 1 2 f ( x ( k ) ) ( x x ( k ) ) 2 f(x) = f(x^{(k)}) + f'(x^{(k)})(x-x^{(k)})+ \frac{1}{2}f''(x^{(k)})(x-x^{(k)})^2
f ( x ) f(x) 求导,可以得到:
f ( x ) = f ( x ( k ) ) + f ( x ( k ) ) ( x x ( k ) ) f'(x) = f'(x^{(k)})+ f''(x^{(k)})(x-x^{(k)})
f ( x ) = 0 f'(x)=0 ,即可得到:
0 = f ( x ( k ) ) + f ( x ( k ) ) ( x x ( k ) ) 0 = f'(x^{(k)})+ f''(x^{(k)})(x-x^{(k)})
解方程,并得到以下迭代格式:
x ( k + 1 ) = x ( k ) f ( x ( k ) ) f ( x ( k ) ) x^{(k+1)}=x^{(k)}-\frac{f'(x^{(k)})}{f''(x^{(k)})}
以上讨论的是 y = f ( x ) y=f(x) 这种只包含 x x 这1个自变量的情况,多个自变量情况时牛顿迭代公式是:
x ( k + 1 ) = x ( k ) [ H f ( x ( k ) ) ] 1 f ( x ( k ) ) , n 0 {x^{(k+1)}} = {x^{(k)}} - {[Hf({x^{(k)}})]^{ – 1}}\nabla f({x^{(k)}}),n \ge 0
其中 H f ( x ( k ) ) Hf({x^{(k)}}) 即为Hessian矩阵, f ( x ( k ) ) \nabla f({x^{(k)}}) 是一个向量,向量中的每个元素分别是 f ( x ) f(x) 对各个自变量求偏导后的函数在 x = x ( k ) x=x^{(k)} 时的函数值。

————————————————
版权声明:本文为CSDN博主「CGCVHCI」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cgcvhci/article/details/51049080


转载:https://blog.csdn.net/weixin_39901859/article/details/102138025
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场