Hessian 为什么是梯度再求导及 Hessian 的概念

理解 “Hessian 为什么是梯度再求导”,实际上就是理解:

一阶导数描述变化率,二阶导数描述变化率的变化。

Hessian 本质上就是把这个思想推广到多变量函数

我们从最底层一步一步建立概念。


1. 从一元函数开始:为什么二阶导数存在?

假设:

\[y=f(x) \]

例如:

\[f(x)=x^2 \]

第一次求导

\[f'(x)=2x \]

它表示:

当 x 改变一点点时,y 怎么变化。

例如:

x=3:

\[f'(3)=6 \]

意思:

在 x=3 附近:

x 增加 1 个单位,

y 大约增加 6 个单位。

所以:

\[f'(x) \]

描述的是:

\[\boxed{\text{变化速度}} \]


第二次求导

继续:

\[f''(x)=2 \]

它表示:

\[\boxed{\text{变化速度本身怎么变化}} \]

也就是:

斜率:

\[f'(x) \]

有没有变化。

比如:

直线:

\[f(x)=3x \]

斜率永远:

\[f'(x)=3 \]

所以:

\[f''(x)=0 \]

没有弯曲。


而:

\[f(x)=x^2 \]

斜率:

\[2x \]

随着 x 增大:

斜率越来越大。

所以:

\[f''(x)=2 \]

表示:

曲线向上弯曲。


2. 多变量函数出现问题

现在:

\[f(x,y) \]

例如:

\[f(x,y)=x^2+y^2 \]

它不是一条线,而是一张曲面。

1L

2

3

4

我们需要回答:

问题1:

沿 x 方向变化怎么样?

问题2:

沿 y 方向变化怎么样?

问题3:

x 的变化会不会影响 y 方向?

这就需要一个矩阵保存所有信息。


3. 梯度是什么?

对于:

\[f(x,y) \]

先求一阶偏导:

\[\frac{\partial f}{\partial x} \]

表示:

固定 y:

只改变 x 时,

函数变化速度。


同理:

\[\frac{\partial f}{\partial y} \]

表示:

固定 x:

只改变 y 时,

函数变化速度。


把它们放一起:

\[\boxed{ \nabla f= \begin{bmatrix} f_x\\ f_y \end{bmatrix} } \]

这就是梯度。

例如:

\[f=x^2+y^2 \]

梯度:

\[\nabla f = \begin{bmatrix} 2x\\ 2y \end{bmatrix} \]

它告诉:

当前位置:

\[(x,y) \]

坡度最大的方向。


4. 为什么 Hessian 要对梯度求导?

关键来了。

梯度:

\[\nabla f \]

本身已经是一个函数。

例如:

\[\nabla f = \begin{bmatrix} 2x+3y\\ 3x+4y \end{bmatrix} \]

注意:

它不是一个数。

它是:

\[\text{向量函数} \]


现在我们问:

梯度随着位置变化,变化得怎么样?

也就是:

梯度的变化率。

这就是:

\[\boxed{ H=\nabla(\nabla f) } \]

也就是:

\[\boxed{ H=\nabla^2f } \]


5. 为什么得到矩阵?

因为梯度有多个分量。

例如二维:

\[\nabla f= \begin{bmatrix} f_x\\ f_y \end{bmatrix} \]

现在对它求导。

第一行:

对:

\[f_x \]

求:

\[x,y \]

得到:

\[\begin{bmatrix} \frac{\partial f_x}{\partial x} & \frac{\partial f_x}{\partial y} \end{bmatrix} \]

第二行:

对:

\[f_y \]

求:

\[x,y \]

得到:

\[\begin{bmatrix} \frac{\partial f_y}{\partial x} & \frac{\partial f_y}{\partial y} \end{bmatrix} \]

组合:

\[H= \begin{bmatrix} \frac{\partial f_x}{\partial x} & \frac{\partial f_x}{\partial y} \\ \frac{\partial f_y}{\partial x} & \frac{\partial f_y}{\partial y} \end{bmatrix} \]

因为:

\[f_x=\frac{\partial f}{\partial x} \]

所以:

\[\frac{\partial f_x}{\partial x} = \frac{\partial^2f}{\partial x^2} \]

得到:

\[\boxed{ H= \begin{bmatrix} \frac{\partial^2f}{\partial x^2} & \frac{\partial^2f}{\partial x\partial y} \\ \frac{\partial^2f}{\partial y\partial x} & \frac{\partial^2f}{\partial y^2} \end{bmatrix} } \]

这就是 Hessian 定义。


6. 每个元素代表什么?

这是理解 Hessian 的核心。

假设:

\[H_{11} \]

表示:

\[\frac{\partial^2f}{\partial x^2} \]

意思:

x方向的坡度,随着x变化有多快。

也就是:

x方向弯曲程度。


\[H_{22} \]

表示:

\[\frac{\partial^2f}{\partial y^2} \]

意思:

y方向曲率。


重点:

\[H_{12} \]

表示:

\[\frac{\partial^2f}{\partial x\partial y} \]

什么意思?

先:

\[\frac{\partial f}{\partial x} \]

得到:

x方向坡度。

再:

\[\frac{\partial}{\partial y} \]

问:

当 y 改变时,x方向坡度变化多少?

这就是:

两个方向之间的耦合。


7. 一个直观例子

情况1:

\[f=x^2+y^2 \]

梯度:

\[\nabla f= \begin{bmatrix} 2x\\ 2y \end{bmatrix} \]

Hessian:

\[H= \begin{bmatrix} 2&0\\ 0&2 \end{bmatrix} \]

为什么没有交叉项?

因为:

x变化不会影响y方向。

所以:

\[H_{12}=0 \]


情况2:

\[f=x^2+xy+y^2 \]

梯度:

\[\nabla f= \begin{bmatrix} 2x+y\\ x+2y \end{bmatrix} \]

Hessian:

\[H= \begin{bmatrix} 2&1\\ 1&2 \end{bmatrix} \]

出现:

\[H_{12}=1 \]

表示:

x和y有关联。


8. 从机器学习角度理解

神经网络:

\[Loss=L(w_1,w_2,...,w_n) \]

梯度:

\[\nabla L \]

告诉:

每个参数应该往哪里调整。

但是梯度不知道:

参数之间是否互相影响。

Hessian:

\[H= \nabla^2L \]

告诉:

\[\frac{\partial^2L} {\partial w_i\partial w_j} \]

也就是:

修改参数 (w_i),会不会改变参数 (w_j) 的梯度。


所以:

梯度:

当前位置坡度

Hessian:

坡度地图

9. 最终建立一个数学层次

从低到高:

\[f(x) \]

函数:

地形高度

\[\nabla f \]

梯度:

地形坡度方向

\[\nabla^2f \]

Hessian:

坡度如何变化,即曲率

\[H的特征值 \]

每个主方向上的弯曲程度


所以一句话总结:

\[\boxed{ \text{Hessian 是梯度的导数,因为梯度本身是一个向量函数;求梯度的变化率,就必须对梯度再次求导。} } \]

从几何上:

\[\boxed{ \text{梯度描述“一阶方向”,Hessian描述“方向变化”。} } \]

这也是为什么牛顿法:

\[\Delta x=-H^{-1}\nabla f \]

比普通梯度下降更聪明:它不仅知道“往哪里走”,还知道“地面有多弯”。

几个例子

前面我们从梯度(gradient)→ 方向导数 → 梯度下降讨论过一阶信息。Hessian 矩阵就是进一步研究:

梯度变化的速度和方向。

如果说梯度告诉我们:

“现在往哪里走下降最快?”

那么 Hessian 告诉我们:

“这个下降方向附近,地形弯曲程度如何?”

在机器学习、深度学习优化中,Hessian 是理解二阶优化、牛顿法、损失函数曲率、正定矩阵的核心。


1. 二元函数最简单的 Hessian

先从:

\[f(x,y)=x^2+3xy+2y^2 \]

开始。

第一步:求梯度

梯度:

\[\nabla f= \begin{bmatrix} \frac{\partial f}{\partial x}\\ \frac{\partial f}{\partial y} \end{bmatrix} \]

分别求:

\[\frac{\partial f}{\partial x}=2x+3y \]

\[\frac{\partial f}{\partial y}=3x+4y \]

所以:

\[\nabla f= \begin{bmatrix} 2x+3y\\ 3x+4y \end{bmatrix} \]


第二步:求 Hessian

Hessian 是梯度再求导:

\[H= \nabla^2 f \]

也就是:

\[H= \begin{bmatrix} \frac{\partial^2 f}{\partial x^2} & \frac{\partial^2 f}{\partial x\partial y} \\ \frac{\partial^2 f}{\partial y\partial x} & \frac{\partial^2 f}{\partial y^2} \end{bmatrix} \]

计算:


左上:

\[\frac{\partial}{\partial x}(2x+3y)=2 \]

左下:

\[\frac{\partial}{\partial y}(2x+3y)=3 \]

右上:

\[\frac{\partial}{\partial x}(3x+4y)=3 \]

右下:

\[\frac{\partial}{\partial y}(3x+4y)=4 \]

因此:

\[\boxed{ H= \begin{bmatrix} 2&3\\ 3&4 \end{bmatrix} } \]


这个 Hessian 表示什么?

注意:

\[H= \begin{bmatrix} 2&3\\ 3&4 \end{bmatrix} \]

其中:

对角元素

\[H_{11}=2 \]

表示:

沿 x 方向:

\[\frac{\partial^2 f}{\partial x^2}=2 \]

曲率。


\[H_{22}=4 \]

表示:

沿 y 方向曲率更大。

所以 y 方向比 x 方向更陡。


非对角元素

\[H_{12}=H_{21}=3 \]

表示:

x 和 y 之间存在耦合。

也就是说:

改变 x 会影响 y 方向梯度。

这就是为什么:

\[xy \]

这种交叉项会出现在 Hessian 非对角位置。


2. 三维函数 Hessian

考虑:

\[f(x,y,z) = x^2y+yz^2+\sin(xz) \]

这是更接近机器学习中的复杂形式。


第一步:梯度

对 x:

\[f_x = 2xy+z\cos(xz) \]

因为:

\[\frac{\partial}{\partial x}\sin(xz) = z\cos(xz) \]


对 y:

\[f_y=x^2+z^2 \]


对 z:

\[f_z = y2z+x\cos(xz) \]

所以:

\[\nabla f= \begin{bmatrix} 2xy+z\cos(xz) \\ x^2+z^2 \\ 2yz+x\cos(xz) \end{bmatrix} \]


第二步:Hessian

现在对梯度继续求导。

Hessian 大小:

\[3\times3 \]

形式:

\[H= \begin{bmatrix} f_{xx}&f_{xy}&f_{xz}\\ f_{yx}&f_{yy}&f_{yz}\\ f_{zx}&f_{zy}&f_{zz} \end{bmatrix} \]


计算:

第一行

\[f_{xx} = 2y-z^2\sin(xz) \]

\[f_{xy}=2x \]

\[f_{xz} = \cos(xz)-xz\sin(xz) \]


第二行

\[f_{yx}=2x \]

\[f_{yy}=0 \]

\[f_{yz}=2z \]


第三行

\[f_{zx} = \cos(xz)-xz\sin(xz) \]

\[f_{zy}=2z \]

\[f_{zz} = 2y-x^2\sin(xz) \]


所以:

\[\boxed{ H= \begin{bmatrix} 2y-z^2\sin(xz) & 2x & \cos(xz)-xz\sin(xz) \\ 2x & 0 & 2z \\ \cos(xz)-xz\sin(xz) & 2z & 2y-x^2\sin(xz) \end{bmatrix} } \]


这个 Hessian 告诉我们:

1. x方向曲率

\[H_{11} = 2y-z^2\sin(xz) \]

不是固定值。

说明:

不同位置,地形不同。


2. y方向

\[H_{22}=0 \]

说明:

函数关于 y 是线性的。


3. x-z 耦合

\[H_{13} = \cos(xz)-xz\sin(xz) \]

说明:

x 和 z 的变化强烈相关。


3. 神经网络中的 Hessian(更重要)

假设一个最简单神经元:

\[y=w_1x_1+w_2x_2 \]

损失:

\[L= (y-t)^2 \]

令:

\[e=w_1x_1+w_2x_2-t \]

则:

\[L=e^2 \]


梯度:

\[\nabla L = \begin{bmatrix} 2ex_1\\ 2ex_2 \end{bmatrix} \]


Hessian:

\[H= \begin{bmatrix} \frac{\partial^2L}{\partial w_1^2} & \frac{\partial^2L}{\partial w_1\partial w_2} \\ \frac{\partial^2L}{\partial w_2\partial w_1} & \frac{\partial^2L}{\partial w_2^2} \end{bmatrix} \]

计算:

\[\frac{\partial^2L}{\partial w_1^2} = 2x_1^2 \]

\[\frac{\partial^2L}{\partial w_2^2} = 2x_2^2 \]

交叉:

\[\frac{\partial^2L}{\partial w_1\partial w_2} = 2x_1x_2 \]

因此:

\[\boxed{ H= 2 \begin{bmatrix} x_1^2&x_1x_2\\ x_1x_2&x_2^2 \end{bmatrix} } \]

这就是机器学习里面常见的 Hessian 结构。

注意:

\[H=X^TX \]

类似最小二乘中的矩阵。


4. Hessian 与正定矩阵关系

判断一个点是不是极小值:

看 Hessian。

例如:

\[H= \begin{bmatrix} 4&0\\ 0&2 \end{bmatrix} \]

两个特征值:

\[\lambda_1=4 \]

\[\lambda_2=2 \]

全部:

\[>0 \]

所以:

\[H\succ0 \]

正定。

意味着:

      /
     /
____/____
   /
  /

碗形最低点。


如果:

\[H= \begin{bmatrix} 4&0\\ 0&-2 \end{bmatrix} \]

一个正,一个负:

\[\lambda_1>0,\lambda_2<0 \]

说明:

一个方向向上,一个方向向下。

这是:

\[\text{鞍点} \]


5. 在深度学习中的现实意义

神经网络参数:

\[\theta= (w_1,w_2,...,w_n) \]

损失:

\[L(\theta) \]

那么:

梯度:

\[\nabla L \]

大小:

\[n\times1 \]

告诉:

参数调整方向。


Hessian:

\[H= \nabla^2L \]

大小:

\[n\times n \]

告诉:

每个参数之间如何相互影响。

例如:

\[H_{ij} = \frac{\partial^2L} {\partial w_i\partial w_j} \]

表示:

改变:

\[w_i \]

是否影响:

\[w_j \]


一个重要总结

可以建立这样的层次:

数学对象 回答的问题 几何意义
函数 (f(x)) 高度是多少? 地形
一阶导数 (f') 变化多快? 坡度
梯度 (\nabla f) 往哪里升最快? 方向箭头
Hessian (\nabla^2f) 坡度如何变化? 曲率
特征值 曲率大小 地形弯曲程度
正定 Hessian 所有方向向上 极小值
负定 Hessian 所有方向向下 极大值

从深度学习角度看:

梯度下降是一阶优化,只看“方向”;牛顿法是二阶优化,通过 Hessian 感知“地形弯曲”,因此能更聪明地决定步长。

下一步如果继续深入,最值得学习的是:

\[\boxed{\Delta x=-H^{-1}\nabla f} \]

这个公式就是牛顿法,它把你前面学习的:
梯度 + Hessian + 正定矩阵 + 特征值
全部连接起来。

posted @ 2026-09-14 10:51  立体风  阅读(6)  评论(0)    收藏  举报