机器学习与算法2.3 —— Jacobian矩阵和Hessian矩阵
在我们了解了偏导数之后,知道如何梯度下降,那么面对复杂函数呢?
前言
来到这里,无论如何授予你最高勋章 —— “算你牛逼!”
在我们了解了偏导数和梯度之后,问题进一步变得复杂。机器学习的目的,或者说算法的目的往往是为了精确的预测或是判断一些内容。
正如在前文提到的内容,计算梯度下降的方向尤为重要。不过,如果此时函数变得十分复杂该怎么办?比如你的 f(x) = f((x1,x2,x3,x4))。
此刻引出我们今日的内容Jacobian矩阵和Hessian矩阵,这两个矩阵的应用在深度学习中有重要作用(反向传播),这也是深度学习的基底理论。
“顺应逻辑的事情,往往都很简单。” —— 本人
为了避免新手的困惑,先科普一个内容:“向量”:
我们可以把“向量”理解为一个同时具备大小和方向的量。日常中,我们会看到一些只有大小的量,比如温度、体积、时间等,这些都是标量。但当我们说到风速、速度、力等时,我们不仅需要知道它们有多大,还要知道它们的方向,这就是向量的概念。
例子:风速
假设天气报告说某个地方的风速是10米/秒(大小),向东(方向)。这里的“10米/秒向东”就是一个向量,因为我们知道它的大小是10米/秒,方向是东。
在数学上,向量通常写成如下形式:
,其中每个元素(比如v1和v2)代表不同方向上的分量,组成了一个完整的向量。回想一下初中物理的受力分析的感觉。
1. Jacobian 矩阵
1. 什么是 Jacobian 矩阵?
Jacobian矩阵是一个用来描述向量值函数对其输入变量的偏导数的矩阵。
假设有一个向量值函数
,其中:
- 输入变量 x=(x1,x2,…,xn)∈R^n,是一个 n 维向量;
- 输出变量 f(x)=(f1,f2,…,fm)∈R^m,是一个 m 维向量。
Jacobian矩阵 J(f) 是一个 m×n 的矩阵,其中每个元素
表示
对
的偏导数:

补充说明:
在数学中,符号 f:R^n→R^m 表示一个从 R^n到 R^m 的映射或函数。具体而言:
- f 是一个函数或映射。
- R^n 表示一个 n 维实数空间,也就是说,输入是一个具有 n 个实数的向量。例如,当 n=2时,R^2 表示平面上的点,向量形式为 (x1,x2);当 n=3 时,R^3表示三维空间中的点,向量形式为 (x1,x2,x3)。
- R^m 表示一个 m 维实数空间,即输出是一个具有 m 个实数的向量。例如,当 m=1时,输出是一个实数;当 m=3 时,输出是一个三维向量 (y1,y2,y3)。
因此,f:R^n→R^m 表示一个将 n 维向量映射到 m 维向量的函数。
具体例子
标量值函数(即 m=1 的情况):如果 f:R^2→R,例如
,则该函数接收一个二维向量 (x1,x2) 作为输入,并返回一个实数作为输出。
向量值函数(即 m>1m > 1m>1 的情况):如果 f:R^2→R^3,例如
,那么这个函数接收一个二维向量 (x1,x2) 作为输入,并返回一个三维向量 (y1,y2,y3)作为输出。
2. Jacobian 矩阵在机器学习中的应用
Jacobian矩阵在机器学习中广泛应用于:
- 反向传播(Backpropagation):在深度学习中,神经网络的反向传播依赖于计算损失函数对各层参数的偏导数。Jacobian矩阵帮助我们得到各层的输出相对于输入的变化。
- 卷积神经网络(CNNs):在卷积操作中,Jacobian矩阵用于计算输出特征映射(feature map)对输入图像的敏感度。
- 梯度下降法:在优化问题中,Jacobian矩阵提供了输出变量对参数的变化率,使得我们可以更有效地进行梯度更新。
示例:
假设我们有一个神经网络层的输出向量
,其中 x=(x1,x2)。那么对应的 Jacobian 矩阵为:

2. Hessian 矩阵
1. 什么是 Hessian 矩阵?
Hessian矩阵是用来描述一个标量值函数的二阶偏导数的矩阵。它主要用于分析函数的曲率,即函数的凹凸性 (下方有说明),这在优化问题中尤其重要。
假设有一个标量值函数 f:R^n→R,其中输入变量 x=(x1,x2,…,xn)。
Hessian矩阵 H(f) 是一个 n×n 的矩阵,其中每个元素
表示 f 对
和
(i,j是下标序号,矩阵中横着排是i,竖着j) 的二阶偏导数:

2. Hessian 矩阵在机器学习中的应用
Hessian矩阵在机器学习中非常重要,尤其在以下场景中:
- 优化算法:在二阶优化算法(如牛顿法)中,Hessian矩阵帮助我们了解损失函数的曲率,从而使得参数调整更为高效和精确。
- 模型收敛性:Hessian矩阵的正负性可以帮助判断优化过程是否接近局部极小值或鞍点。如果 Hessian 是正定的,表明在该点附近损失函数是凸的;如果是负定的,则是凹的;而不定则是鞍点。
- 神经网络训练稳定性:Hessian矩阵的特征值(即曲率信息)有助于判断损失函数表面的平缓程度,从而决定训练过程中的步长和收敛速度。
示例:
假设我们有一个损失函数
,那么 Hessian 矩阵可以写为:

这个 Hessian 矩阵可以帮助我们判断函数在该点附近的曲率特性,进而确定更新方向。
补充说明
在数学中,函数的凹凸性描述的是一个函数在其定义域内是向上“开”还是向下“开”的性质。我们可以通过观察函数的图像,或通过二阶导数来判断函数是凸的还是凹的。
- 凸函数(Convex Function):如果函数的图像在某一区域内是向上开的,即在任意两个点之间的连线总是在函数图像的上方,我们称这个函数在该区域是凸的。
- 凹函数(Concave Function):如果函数的图像在某一区域内是向下开的,即在任意两个点之间的连线总是在函数图像的下方,我们称这个函数在该区域是凹的。
简单来说,如果一个函数是凸的,那么它的图像看起来像一个“碗”,而凹的函数则看起来像一个“拱桥”。
凹凸性的数学定义
对于一个单变量函数 f(x):
- 凸函数:如果对于任意的 x1,x2∈(代表属于从属)定义域 和 λ(lambda)∈[0,1] ,满足

- 凹函数:如果对于任意的 x1,x2∈定义域和 λ∈[0,1],满足

则 f(x)f(x)f(x) 是凹函数。
二阶导数判别法
对于二次可导的单变量函数 f(x),可以通过其二阶导数 f′′(x) 来判断凹凸性:
- 如果 f′′(x)>0 在某区间内成立,则函数在该区间内是凸的。
- 如果 f′′(x)<0 在某区间内成立,则函数在该区间内是凹的。
对于多变量函数,凹凸性可以通过Hessian矩阵来判断:
- 如果函数的 Hessian 矩阵在某区域内是正定的,则函数在该区域内是凸的。
- 如果函数的 Hessian 矩阵在某区域内是负定的,则函数在该区域内是凹的。
凹凸性在机器学习中的应用
在机器学习优化中,凸函数特别有用,因为它们具有一个重要的性质——全局最优解。对于一个凸函数,我们只要找到一个局部最小值,它一定是全局最小值。因此,在优化损失函数时,如果损失函数是凸的,我们可以确保找到的最小值是最优解,这使得凸优化问题相对容易解决。
3. Jacobian矩阵和Hessian矩阵的例子
假设我们有一个多变量函数:
对于机器学习优化问题,我们需要理解它在不同点的变化速率,也就是梯度和二阶导数信息。我们可以用Jacobian矩阵和Hessian矩阵来帮助我们更精确地理解这一点。
1. Jacobian矩阵
假设我们有一组输出和输入,输出有两个函数:
Jacobian矩阵表示的是这组输出对输入的偏导数。Jacobian矩阵可以写成:

计算各偏导数:

因此,Jacobian矩阵为:

在机器学习中,Jacobian矩阵在反向传播中可以帮助我们计算每一层的偏导数,使我们能够高效地更新参数。
2. Hessian矩阵
对于上面的函数
,Hessian矩阵可以帮助我们理解函数的曲率变化情况。
Hessian矩阵是函数的二阶偏导数组成的矩阵:

计算二阶偏导数:

因此,Hessian矩阵为:

在优化算法中(例如牛顿法),Hessian矩阵帮助我们确定优化步长和方向,以找到函数的最小值或最大值。
4. 总结
- Jacobian 矩阵用于描述向量值函数的偏导数,是反向传播中计算误差传播的关键工具。
- Hessian 矩阵用于描述标量值函数的二阶偏导数,主要用于优化算法中,以帮助判断损失函数的曲率,优化更新的方向和步长。
在实际应用中,这些矩阵的计算帮助我们在复杂的模型优化中有效地进行参数更新,从而实现更快的收敛和更好的模型性能。