hessian矩阵_梯度,散度,Laplacian,Hessian 连连看

“学数学是为了掌握数学家用的语言”

机器学习中绕不开的一些数学概念:梯度,散度,Laplacian算子,Hessian矩阵,它们有许多应用,如神经网络中重要的梯度下降算法,CV中基础的laplacian filter, GNN中貌似高级的 Laplacian matrix,Hessian matrix也常常出现在各类paper之上。菜鸡如我常常翻了查又忘记,所以这里把目前的理解记录下来。

目录

  1. 梯度
  2. 散度
  3. Laplacian算子
  4. Hessian矩阵
  5. 应用

1. 梯度

1.1 梯度定义及性质
617e2bee8631942f8328c13bb66ff0b9.png
空间里的梯度

为什么有梯度呢?大家一般会举山坡的例子,这里我换个说法来讲。想象二维空间(X,Y)里的一点(没错 就是数学家最爱的词:空间),每一点对应一个f(x,y),因此这是所谓的标量场(对 就是物理学频繁使用的语言:场)。你有移动这个点一丢丢的权利,前后左右都可以,你想知道在单位时间内哪个方向给你f最大的增长(比方f代表薪水)。这个方向就是梯度的方向,这个变化率就是梯度的大小。考虑两个变量下的数学表达如下

这里如果以算子(operator)的角度理解, 梯度算子,输入f,输出一个向量,组件(component)是穷举偏导数

eg.以下是f(x,y) = xy在平面上的一个投影映射,蓝线为等高线:

cfcb7b5dc7513c608c91257ac007a0bc.png
梯度与等高线

箭头是所在点的梯度,对于f(x,y) = xy,

我们可以观察到它与等高线的切线是垂直的,知道一个方向可以求出另一个。


1.2 梯度的指向为何增速最快

然后问题来了,为什么这个叫梯度的向量指向的方向是增速最快的呢?这个问题困扰了鄙人很久。

这里给个解题思路:

定义一个方向导数(可以以字面意思理解),对于一个特定点,它会等于以下这个点乘(不给出证明,假设已经到这步了):

是定点梯度,是任意一个方向的单位向量, 我们可以看到方向导数是一个数值(标量)。目标是最大化这个方向导数也就是任意方向上f的变化率,梯度是已知的,是任取方向的单位向量。我们知道两个向量同方向的时候点积最大,所以最优解时=||,把它带入上面的方向导数,于是这个点积

综上所述,「梯度的方向是使得方向导数最大的方向,梯度的大小是方向导数最大值」。这么个向量估计是频繁被用到的关系吧,所以配拥有姓名,英文是gradient 还有坡度的意思。


2. 散度

梯度研究的空间是输入多维向量输出一维标量(scaler field),比方上面的例子(X,Y)映射到f(X,Y),而散度研究的空间是输入多维,输出多维(vector field)时候输出方的变化率问题。(感慨下变化,不变/守恒哪哪都研究)

大家一般会举水流的例子,因为它是一个你熟悉的向量场,下图可以看作一个水流切面,每个点是质点,点上的箭头方向代表水流的方向,颜色代表大小,越蓝越大,这里大小可以代表流速,数学表达这个向量场为:

数学表达很简洁,结合水流理解,输入一个位置(x,y), 输出一个向量,这个向量的每个组件(component)对应相应坐标x, y。

2325e343b71eb438fcbd8235054f622c.png
水流截面的向量表示

水是由水分子组成,水流中某一点水量变化可以转化为离开这点的水分子多还是进入这点的水分子多。说了这么多是为了引出散度,这里散度用来衡量水流量这个标量,出去的多(发散),散度是正的,进来的多(聚拢),散度是负的。

散度的数学定义为:

从算子角度理解是梯度算子和向量(比方水流向量)的点积

从矩阵角度理解是Jacobian矩阵的迹(穷举所有偏导数的矩阵的对角线和),迹像指纹一样,在可逆的线性变化下有不变性(invariance),比方说旋转坐标系后散度并不发生变化。

至于为什么散度是这么个值,可以由水流的积分取极限得到证明,暂不展开。

总结:散度虽然输入的是个向量但实际是个具有不变性的标量(降维),可以看成梯度算子和一个向量的点积


3. Laplacian算子

复习下:对于梯度,从算子(operator)角度看,梯度算子作用于一维标量f后输出为向量。对于散度,从算子角度看,梯度算子点乘多维向量后输出为标量。如果这个多维向量取梯度向量,结果就是散度。有没有觉得这个很神奇很百搭?看下二维下的数学表达:

或者都可以表示Laplacian算子,第二个更好理解,也就是「梯度的散度」

意义:梯度,散度,这两个拥有姓名的算子都是有意义的,Laplacian算子数学上是两阶偏导数和,我们知道单变量二阶导数代表凹凸性,对于多维的Laplacian算子这个性质依然成立。「Laplacian算子为正代表凹,邻居平均比点大,为负代表凸,邻居平均比点小」

ee264d4e2084b3b4363ceca4f7d6b6e8.png
Laplacian与凹凸性

Laplacian算子结语:导数牛逼,一阶偏导的可以表示方向(梯度),衡量通量(散度),而我两阶偏导可以表达周围所有邻居的和!


4. Hessian矩阵

那么多维的三四五六阶偏导数应该更厉害?难道说能表达整个函数?恭喜你,你猜对了,多维下也有类似一维下的泰勒级数来近似整个函数,在多维下如果用多项式来表达十分变态,而Hessian矩阵可以优雅地简化二项式部分的表达。

2b239610fca935568fdec10a316d7612.png

上图的二项式部分用Hessian矩阵可写成:

a710a7165cc2f2c248886976e99fa88b.png

当矩阵维度增加时,优势十分明显。介绍完功绩,来看下二维下的Hessian矩阵:

这是个对称(symmetric)矩阵, 因为假设二阶导数连续,x,y偏导顺序不重要。


5. 应用

5.1 Laplacian 算子与图像特征检验

Laplacian of the Gaussian(LoG) 是第一代图像特征检验也是最常见的特征检验方法之一,我们前面说过Laplacian作为二阶偏导的有姓名算子,代表了周围小范围的凹凸性,为正,邻居平均比点大,为负邻居平均比点小,Laplacian为零呢?邻居平均和你一样大,换句话说你是周围的平均数。用卷积核的语言表达是:

不难想象,上下左右各1份-4份你衡量了你和平均数的差别。

对于图像来说,这个差别能检测出边(border),如果卷积后为正,周围点数值比较大,那这点就是暗部; 为负,则这点就是亮部。如下图所示:

71cce08e63d6f12285d0b2871debb167.png
Laplacian卷积结果

可以看到,黑色部分是边界的亮部,白色部分是边界的暗部。

Laplacian对于躁点非常敏感(躁点和周围的平均数差别很大),所以之前通常先加个预处理:高斯模糊,组合起来就是Laplacian of Gaussian:

c25db82819ebdd822aa00a0ec04afc46.png
LoG

由于差分可以近似微分,而Gaussian的差成本更低,所以经常用difference of Gaussian(DoG)近似LoG,比方前一段时间专利到期的SIFT算法里用的就是DoG。

5.2 蒙日-安培算子

也叫Hessian行列式,用蒙日-安倍这个名字是因为我经常看的公众号就常提起蒙日-安倍方程,在数学家想象的空间里,三维矩阵的行列式代表体积,二维代表面积

尽管名字听上去很拉风:Monge–Ampère 算子,但是还是逃不开算子的本质:对函数做映射。

输入的L函数代表尺度空间下的表达,尺度为t(比方说这个尺度空间转换是高斯模糊,t就代表方差),在经过算子后得到一个标量,这个标量是也就是Hessian矩阵面积的

这个看似拉风的值有什么用呢?

局部选择x,y,t使得结果最大可以用来检测马鞍点,数学表达如下:

根据Lindeberg的论文,马鞍点在图像的仿射变换下要比凹凸点也就是Laplacian算子检测到的特征点稳定,以此我们可以改进SIFT算法。

结语

导数,算子,这些数学上看起很简洁的东西是对现实世界的高度抽象和概括,一个点的导数可以代表局部甚至全体空间的信息,简单一个公式的背后可能是无数次的实验或者想象,想不明白的时候可以找一个能具象化的‘场’来验证。

References:

[1] [维基百科]: https://en.wikipedia.org/wiki/Blob_detection "Blob detection"

[2][khanacademy]: https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/divergence-grant-videos/v/divergence-intuition-part-1 "Divergence"

[3][khanacademy]: https://www.khanacademy.org/math/multivariable-calculus/applications-of-multivariable-derivatives/quadratic-approximations/a/the-hessian "Quadratic approximations"

[4][khanacademy]: https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/laplacian/v/laplacian-intuition "Laplacian intuition"

[5] [Robert Collins- CSE486]

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hessian矩阵Hessian Matrix)是一个二阶偏导数矩阵,它可以用来描述一个函数的局部曲率特性。在图像处理中,Hessian矩阵被广泛应用于边缘检测、形状分析、纹理分析、特征提取等领域。 在血管增强中,Hessian矩阵可以用来检测血管的中心线,因为血管的中心线通常是血管横截面的最大曲率方向。通过计算Hessian矩阵的特征值和特征向量,可以确定血管中心线的方向和位置,并用于血管分割、血管重建等应用中。 OpenCV是一个开源的计算机视觉库,它提供了丰富的图像处理函数和工具,可以方便地实现Hessian矩阵的计算和应用。以下是使用OpenCV实现Hessian矩阵的简单示例代码: ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 计算Hessian矩阵的特征值和特征向量 hessian = cv2.HessianMatrixEigenvalues(img, sigma=3) # 根据特征值和特征向量确定血管中心线的方向和位置 eigenvector = hessian[:, :, 1] eigenvalue = hessian[:, :, 0] vesselness = np.exp(-(eigenvalue[0]*eigenvalue[1])/(2*(sigma**2))) * np.abs(eigenvector[0]) # 显示结果图像 cv2.imshow('Vesselness', vesselness) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,使用cv2.HessianMatrixEigenvalues函数计算Hessian矩阵的特征值和特征向量,然后根据特征值和特征向量计算血管中心线的方向和位置。最后将结果图像显示出来。 需要注意的是,Hessian矩阵的计算需要选择合适的尺度参数sigma,通常需要进行多次尺度的计算,以得到更加准确的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值