FakeOrange
预计阅读时间:4分钟16秒

机器学习与算法2.3 —— Jacobian矩阵和Hessian矩阵

在我们了解了偏导数之后,知道如何梯度下降,那么面对复杂函数呢?

0
0

前言


来到这里,无论如何授予你最高勋章 —— “算你牛逼!”


在我们了解了偏导数和梯度之后,问题进一步变得复杂。机器学习的目的,或者说算法的目的往往是为了精确的预测或是判断一些内容。


正如在前文提到的内容,计算梯度下降的方向尤为重要。不过,如果此时函数变得十分复杂该怎么办?比如你的 f(x) = f((x1,x2,x3,x4))。


此刻引出我们今日的内容Jacobian矩阵和Hessian矩阵,这两个矩阵的应用在深度学习中有重要作用(反向传播),这也是深度学习的基底理论。


“顺应逻辑的事情,往往都很简单。” —— 本人


为了避免新手的困惑,先科普一个内容:“向量”:


我们可以把“向量”理解为一个同时具备大小和方向的量。日常中,我们会看到一些只有大小的量,比如温度、体积、时间等,这些都是标量。但当我们说到风速、速度、力等时,我们不仅需要知道它们有多大,还要知道它们的方向,这就是向量的概念。

例子:风速

假设天气报告说某个地方的风速是10米/秒(大小),向东(方向)。这里的“10米/秒向东”就是一个向量,因为我们知道它的大小是10米/秒,方向是东。

在数学上,向量通常写成如下形式:data/78df2c1f-e442-415d-a382-fa7925af0c4b/60942a81-d9ad-41bc-b4dd-6dbd953957b7image.png,其中每个元素(比如v1v2​)代表不同方向上的分量,组成了一个完整的向量。回想一下初中物理的受力分析的感觉。


1. Jacobian 矩阵


1. 什么是 Jacobian 矩阵?


Jacobian矩阵是一个用来描述向量值函数对其输入变量的偏导数的矩阵。

假设有一个向量值函数 data/78df2c1f-e442-415d-a382-fa7925af0c4b/1d37763f-0556-442b-b2f2-0e0d79cb26d7image.png,其中:


  • 输入变量 x=(x1​,x2​,…,xn​)∈R^n,是一个 n 维向量;


  • 输出变量 f(x)=(f1​,f2​,…,fm​)∈R^m,是一个 m 维向量。

Jacobian矩阵 J(f) 是一个 m×n 的矩阵,其中每个元素 data/78df2c1f-e442-415d-a382-fa7925af0c4b/60f51875-9c4e-46d3-b4b3-e4b0d2a2724dimage.png 表示 data/78df2c1f-e442-415d-a382-fa7925af0c4b/30bd5ebd-e363-49c6-a781-c39f26440f97image.pngdata/78df2c1f-e442-415d-a382-fa7925af0c4b/cb9022d7-f78a-4acc-a985-e9c1267de68aimage.png 的偏导数:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/c3151f4b-9cda-425c-b8a8-cd1778b17cd2image.png


补充说明:

在数学中,符号 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,例如 data/78df2c1f-e442-415d-a382-fa7925af0c4b/271fc7ec-3e00-49b8-8019-3287004c857bimage.png​,则该函数接收一个二维向量 (x1,x2) 作为输入,并返回一个实数作为输出。

向量值函数(即 m>1m > 1m>1 的情况):如果 f:R^2→R^3,例如 data/78df2c1f-e442-415d-a382-fa7925af0c4b/0b8df62b-349f-4dd1-9d83-9005ef969391image.png,那么这个函数接收一个二维向量 (x1,x2) 作为输入,并返回一个三维向量 (y1,y2,y3)作为输出。


2. Jacobian 矩阵在机器学习中的应用


Jacobian矩阵在机器学习中广泛应用于:


  • 反向传播(Backpropagation):在深度学习中,神经网络的反向传播依赖于计算损失函数对各层参数的偏导数。Jacobian矩阵帮助我们得到各层的输出相对于输入的变化。


  • 卷积神经网络(CNNs):在卷积操作中,Jacobian矩阵用于计算输出特征映射(feature map)对输入图像的敏感度。


  • 梯度下降法:在优化问题中,Jacobian矩阵提供了输出变量对参数的变化率,使得我们可以更有效地进行梯度更新。


示例:

假设我们有一个神经网络层的输出向量 data/78df2c1f-e442-415d-a382-fa7925af0c4b/4cbfa6e0-b1aa-49f4-a146-514847f3a45eimage.png,其中 x=(x1,x2)。那么对应的 Jacobian 矩阵为:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/08f79dc3-5c34-4f5f-b68b-b44e9c22efa8image.png


2. Hessian 矩阵


1. 什么是 Hessian 矩阵?


Hessian矩阵是用来描述一个标量值函数的二阶偏导数的矩阵。它主要用于分析函数的曲率,即函数的凹凸性 (下方有说明),这在优化问题中尤其重要。

假设有一个标量值函数 f:R^n→R,其中输入变量 x=(x1,x2,…,xn)

Hessian矩阵 H(f) 是一个 n×n 的矩阵,其中每个元素 data/78df2c1f-e442-415d-a382-fa7925af0c4b/f446ebd4-adae-4043-b03d-210fd6294886image.png 表示 f data/78df2c1f-e442-415d-a382-fa7925af0c4b/23985be0-ba5b-4ffa-be8e-f8f2129498a0image.png​ 和 data/78df2c1f-e442-415d-a382-fa7925af0c4b/0723ca7e-23a8-44de-b862-2da0d64ac412image.png (i,j是下标序号,矩阵中横着排是i,竖着j) 的二阶偏导数:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/ec00126d-d60a-4091-bd4b-824063b2dbefimage.png


2. Hessian 矩阵在机器学习中的应用


Hessian矩阵在机器学习中非常重要,尤其在以下场景中:


  • 优化算法:在二阶优化算法(如牛顿法)中,Hessian矩阵帮助我们了解损失函数的曲率,从而使得参数调整更为高效和精确。


  • 模型收敛性:Hessian矩阵的正负性可以帮助判断优化过程是否接近局部极小值或鞍点。如果 Hessian 是正定的,表明在该点附近损失函数是凸的;如果是负定的,则是凹的;而不定则是鞍点。


  • 神经网络训练稳定性:Hessian矩阵的特征值(即曲率信息)有助于判断损失函数表面的平缓程度,从而决定训练过程中的步长和收敛速度。


示例:

假设我们有一个损失函数 data/78df2c1f-e442-415d-a382-fa7925af0c4b/3baf3c11-a16d-4513-bac2-7abd8e2ba50eimage.png,那么 Hessian 矩阵可以写为:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/077be2db-1e88-48d0-b523-6dd02c1f4aebimage.png


这个 Hessian 矩阵可以帮助我们判断函数在该点附近的曲率特性,进而确定更新方向。


补充说明


在数学中,函数的凹凸性描述的是一个函数在其定义域内是向上“开”还是向下“开”的性质。我们可以通过观察函数的图像,或通过二阶导数来判断函数是凸的还是凹的。


  • 凸函数(Convex Function):如果函数的图像在某一区域内是向上开的,即在任意两个点之间的连线总是在函数图像的上方,我们称这个函数在该区域是凸的。


  • 凹函数(Concave Function):如果函数的图像在某一区域内是向下开的,即在任意两个点之间的连线总是在函数图像的下方,我们称这个函数在该区域是凹的。


简单来说,如果一个函数是凸的,那么它的图像看起来像一个“碗”,而凹的函数则看起来像一个“拱桥”。


凹凸性的数学定义

对于一个单变量函数 f(x)

  • 凸函数:如果对于任意的 x1,x2∈(代表属于从属)定义域 和 λ(lambda)∈[0,1] ,满足

data/78df2c1f-e442-415d-a382-fa7925af0c4b/3078d3da-9f14-46f4-a934-9aeec0bb3ff2image.png

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

data/78df2c1f-e442-415d-a382-fa7925af0c4b/2025269c-1c90-40d9-995e-109128bad3b6image.png


则 f(x)f(x)f(x) 是凹函数。


二阶导数判别法

对于二次可导的单变量函数 f(x),可以通过其二阶导数 f′′(x) 来判断凹凸性:

  • 如果 f′′(x)>0 在某区间内成立,则函数在该区间内是凸的。
  • 如果 f′′(x)<0 在某区间内成立,则函数在该区间内是凹的。


对于多变量函数,凹凸性可以通过Hessian矩阵来判断:


  • 如果函数的 Hessian 矩阵在某区域内是正定的,则函数在该区域内是凸的。
  • 如果函数的 Hessian 矩阵在某区域内是负定的,则函数在该区域内是凹的。


凹凸性在机器学习中的应用

在机器学习优化中,凸函数特别有用,因为它们具有一个重要的性质——全局最优解。对于一个凸函数,我们只要找到一个局部最小值,它一定是全局最小值。因此,在优化损失函数时,如果损失函数是凸的,我们可以确保找到的最小值是最优解,这使得凸优化问题相对容易解决。


3. Jacobian矩阵和Hessian矩阵的例子

假设我们有一个多变量函数:data/78df2c1f-e442-415d-a382-fa7925af0c4b/7be140a1-17d6-407d-996d-2ef2d3a18e7aimage.png


对于机器学习优化问题,我们需要理解它在不同点的变化速率,也就是梯度和二阶导数信息。我们可以用Jacobian矩阵和Hessian矩阵来帮助我们更精确地理解这一点。


1. Jacobian矩阵

假设我们有一组输出和输入,输出有两个函数:data/78df2c1f-e442-415d-a382-fa7925af0c4b/f6ba0516-7dfd-49fa-b023-1144324b73fcimage.png


Jacobian矩阵表示的是这组输出对输入的偏导数。Jacobian矩阵可以写成:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/7ef15a8b-15b6-489c-97d2-541316deb407image.png


计算各偏导数:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/9eb9f6e3-c4b0-4b0e-bc4f-058e2c1352efimage.png


因此,Jacobian矩阵为:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/d6e43885-e75b-4707-93fe-0b39eee4f32cimage.png


在机器学习中,Jacobian矩阵在反向传播中可以帮助我们计算每一层的偏导数,使我们能够高效地更新参数。


2. Hessian矩阵

对于上面的函数data/78df2c1f-e442-415d-a382-fa7925af0c4b/558bab52-9404-4ba9-be84-26bc7223b4f0image.png,Hessian矩阵可以帮助我们理解函数的曲率变化情况。

Hessian矩阵是函数的二阶偏导数组成的矩阵:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/0cf6a44c-87a8-4459-a99f-e51e7b4f4527image.png


计算二阶偏导数:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/63a22a01-030b-491e-8700-87f4d816f13fimage.png

因此,Hessian矩阵为:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/9f66d962-54ea-4636-970a-f87e24388a72image.png

在优化算法中(例如牛顿法),Hessian矩阵帮助我们确定优化步长和方向,以找到函数的最小值或最大值。


4. 总结

  • Jacobian 矩阵用于描述向量值函数的偏导数,是反向传播中计算误差传播的关键工具。
  • Hessian 矩阵用于描述标量值函数的二阶偏导数,主要用于优化算法中,以帮助判断损失函数的曲率,优化更新的方向和步长。

在实际应用中,这些矩阵的计算帮助我们在复杂的模型优化中有效地进行参数更新,从而实现更快的收敛和更好的模型性能。

评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号