课程
当我们谈到优化、模型训练或理解损失曲面的曲率时,通常会想到代价函数和梯度。代价函数解释了模型的表现如何,而梯度作为其一阶导数,指向损失减少最快的方向。不过,梯度只告诉我们斜率,而不是斜率本身如何变化。
这正是常被忽视的 Hessian 矩阵变得重要的地方。它是一个关于标量函数的二阶偏导数组成的方阵,能够刻画梯度如何演化,从而揭示损失曲面的曲率。在数据科学中,它在涉及高级优化算法、模型诊断,以及评估机器学习模型的稳定性和收敛性等任务中尤为关键。
Hessian 矩阵将单变量函数的二阶导数概念推广到多变量情境。它编码了函数的局部曲率信息,用于量化函数在给定点附近如何弯曲。它有助于分析极小值、极大值和鞍点等临界点,并为高级数值优化技术提供指引。
本文重点在于理解 Hessian 矩阵如何帮助把握优化算法的行为以及它们的收敛速度。面对包含许多变量的复杂模型时,它尤为有用。对于熟悉梯度向量和 Jacobian 矩阵的读者,Hessian 是下一步。它告诉您函数在高维空间中的表现。
什么是 Hessian 矩阵?
来看这样一个方程,s a 可二次可微的标量函数:
![]()
这意味着该函数可以求二阶导,并返回一个单个数。f 的 Hessian 矩阵,记为 Hf(x),是一个 n × n 的方阵,包含了 f 的所有二阶偏导数。
形式化地,Hessian 矩阵的每个元素定义为:

这意味着 Hessian 告诉我们函数的梯度(一阶导数)相对于每个输入变量如何变化。
如果 f 的所有二阶偏导数在某点的邻域内连续,根据克莱罗定理(也称施瓦茨定理),混合偏导相等,即求导次序不影响结果:

这种对称性意味着在此类情形下 Hessian 矩阵是对称的。
需要强调的是,Hessian 矩阵仅对标量函数定义,也就是返回单个数值的函数。处理向量值函数时,如下:
![]()
则二阶导数的概念将扩展为三阶张量而非矩阵。该张量刻画了 F 的每个输出分量如何随每一对输入而变化。
设 Rn -> R 为一个二次可微的标量函数。Hessian 矩阵(f 的)是一个 n × n 矩阵,定义为:

每个元素 Hij 是相应的二阶偏导:

Hessian 矩阵示例
考虑函数:

一阶偏导:

二阶偏导:



Hessian 矩阵

在 (x,y) = (1,1) 处求值

判别式
![]()
负的判别式意味着该临界点是鞍点。欢迎在我们的课程 Introduction to Optimization in Python 中查看鞍点技术的讲解,了解 Hessian 的实际应用。
下面是在 Python 中实现的相同示例:
import sympy as sp
x, y = sp.symbols('x y')
f = x**3 - 2*x*y - y**6
# Compute gradient
grad_f = [sp.diff(f, var) for var in (x, y)]
# Compute Hessian
hessian_f = sp.hessian(f, (x, y))
# Evaluate at point (1,1)
eval_hessian = hessian_f.subs({x: 1, y: 1})
determinant = eval_hessian.det()
print("Gradient:")
sp.pprint(grad_f)
print("")
print("Hessian matrix:")
sp.pprint(hessian_f)
print("")
print("Hessian at (1,1):")
sp.pprint(eval_hessian)
print("")
print("Discriminant:", determinant)

此代码使用符号求导来计算 Hessian 矩阵,并在特定点进行求值。像 SymPy 这样的工具可作为实用的“Hessian 矩阵计算器”,既适用于教学,也适用于应用研究。
判别式与二阶导数检验
多元情形的二阶导数检验使用 Hessian 矩阵来对临界点进行分类:
设 X0 为满足以下条件的临界点,his is true.
![]()
设 Hessian 为
![]()
解释取决于 Hessian 的正定性:
- 正定(所有特征值 > 0):X0 为局部极小值。
- 负定(所有特征值 < 0):X0 为局部极大值。
- 不定(特征值有正有负):X0 为鞍点。
- 奇异(行列式为零):检验无定论。
我们用这四种情形的示例来理解:
import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols, diff, hessian, lambdify
# Define symbols
x, y = symbols('x y')
# List of 4 functions for different discriminant cases
functions = [
("x**2 + y**2", "Positive definite (local minimum)"),
("-x**2 - y**2", "Negative definite (local maximum)"),
("x**2 - y**2", "Indefinite (saddle point)"),
("x**4 + y**4", "Zero determinant (inconclusive)")
]
# Prepare plots
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.ravel()
for i, (func_str, title) in enumerate(functions):
f = eval(func_str)
# Compute gradients and Hessian
fx = diff(f, x)
fy = diff(f, y)
H = hessian(f, (x, y))
# Evaluate Hessian at (0,0) (critical point for all these functions)
H0 = H.subs({x: 0, y: 0})
det_H0 = H0.det()
fxx0 = H0[0, 0]
# Classification
if det_H0 > 0 and fxx0 > 0:
classification = "Local Minimum"
elif det_H0 > 0 and fxx0 < 0:
classification = "Local Maximum"
elif det_H0 < 0:
classification = "Saddle Point"
else:
classification = "Inconclusive"
# Prepare function for plotting
f_lamb = lambdify((x, y), f, 'numpy')
X, Y = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-2, 2, 100))
Z = f_lamb(X, Y)
# Plot
ax = axes[i]
cp = ax.contourf(X, Y, Z, levels=50, cmap='coolwarm')
ax.set_title(f"{title}\n{func_str}\nDet(H)={det_H0}, fxx={fxx0} → {classification}")
ax.plot(0, 0, 'ko') # critical point
fig.colorbar(cp, ax=ax)
plt.tight_layout()
plt.show()

在上面的等高线图中,从“蓝色”为最低到“红色”为最高,数值逐渐升高。
该检验是单变量函数二阶导数检验的推广,并常与泰勒级数和凸优化等主题一同讨论。
优化中的 Hessian 矩阵
Hessian 矩阵自然地出现在标量函数的二阶 Taylor 展开中:

这种二次近似使牛顿类方法能够高效地寻找临界点。牛顿法按如下方式更新变量:

在高维情形下,计算和存储完整的 Hessian 代价可能很高。为此,诸如 BFGS 和 L-BFGS 的拟牛顿方法通过梯度差分迭代地近似 Hessian。
此外,Hessian-向量积 Hv 可在不显式计算完整矩阵的情况下,用差分近似得到:

这种近似在利用自动微分的深度学习框架中尤为实用。
在机器学习与数据科学中的应用
在机器学习中,Hessian 矩阵为损失景观的曲率提供洞察:
- 在神经网络中,分析 Hessian 可以揭示鞍点与平坦区域的存在。
- 在凸优化问题中,Hessian 有助于验证凸性并为二阶求解器提供指导。
- 在微调模型时,了解 Hessian 有助于根据局部曲率调整学习率。
除优化外,Hessian 还用于:
- 统计诊断(例如最大似然估计中的 Fisher 信息矩阵)。
- 计算机视觉中,如 Hessian 行列式(DoH)斑点检测器用于特征检测。
- 分子动力学,尤其是在振动谱的正常模分析中。
理解 Hessian 能让从业者超越梯度下降,应用更复杂的算法,如 BFGS,这在诸如 Machine Learning Fundamentals in Python 等课程中使用。这些技术依赖于诸如泰勒级数和矩阵代数等高级微积分主题。
结论
Hessian 矩阵封装了关于标量函数的二阶信息,提供了分析曲率、识别临界点与求解优化问题的有力框架。梯度提供方向,而 Hessian 则细化了对形状与尖锐程度的理解,尤其是在机器学习常见的高维问题中。
对于已熟悉 Jacobian 与梯度的从业者,掌握 Hessian 将更全面地理解算法行为与问题结构。
我是一名 AI 策略与伦理专家,致力于在数据科学、产品与工程的交汇处构建可扩展的机器学习系统。曾入选全球“200 位顶尖商业与技术创新者”之一,我的使命是让机器学习走向大众,打破术语壁垒,让每个人都能参与这场变革。
常见问题
什么是 Hessian 矩阵?它为何在优化中重要?
Hessian 矩阵是一个关于标量函数的二阶偏导数组成的方阵。它刻画函数的曲率,帮助确定临界点的性质,并为优化算法提供指导以实现更好的收敛性。
Hessian 与梯度、Jacobian 有何不同?
梯度提供一阶导数(最陡上升方向),Jacobian 将这一概念扩展到向量值函数;而 Hessian 更进一步,描述梯度本身如何变化,提供关于函数在多维空间中的曲率信息。
Hessian 矩阵在何种情况下是对称的?
当某点邻域内所有二阶偏导连续时,根据克莱罗(或施瓦茨)定理,Hessian 矩阵是对称的。这一对称性有助于简化理论分析与计算。
如何用 Hessian 对临界点进行分类?
使用二阶导数检验:
- Hessian 正定 → 局部极小值
- Hessian 负定 → 局部极大值
- Hessian 不定 → 鞍点
- 行列式为零 → 检验无定论
能否使用 Python 计算并可视化 Hessian?
可以。像 SymPy 这样的符号数学库可以在特定点计算并评估 Hessian 矩阵。这些工具既适合学习,也适用于数据科学与机器学习中的实际优化任务。
