参考  Jacobin和Hessian矩阵 - 云+社区 - 腾讯云

有时我们需要计算输入和输出都为向量和函数的所有偏导数。包含所有这样的偏导数的矩阵被称为Jacobian矩阵。具体来说,如果我们有一个函数,的Jacobian矩阵定义为。有时,我们也对导数的导数感兴趣,即二阶导数(second derivative)。例如,有一个函数的一阶导数(关于)关于的导数记为。二阶导数告诉我们,一阶导数(关于)关于的导数记为。在一维情况下,我们可以将。二阶导数告诉我们,一阶导数如何随着输入的变化而改变。它表示只基于梯度信息的梯度下降步骤是否会产生如我们预期那样大的改善,因此它是重要的,我们可以认为,二阶导数是对曲率的衡量。假设我们有一个二次函数(虽然实践中许多函数都是二次的,但至少在局部可以很好地用二次近似),如果这样的函数具有零二阶导数,那就没有曲率,也就是一条完全平坦的线,仅用梯度就可以预测它的值。我们使用沿负梯度方向下降代销为的下降步,当该梯度是1时,代价函数将下降。如果二阶导数是正的,函数曲线是向上凹陷的(向下凸出的),因此代价函数将下降得比少。

当我们的函数具有多维输入时,二阶导数也有很多。我们可以将这些导数合并成一个矩阵,称为Hesian矩阵。Hessian矩阵定义为

Hessian等价于梯度的Jacobian矩阵。

微分算子在任何二阶偏导连续的点处可交换,也就是它们的顺序可以互换:

这意味着,因此Hessian矩阵在这些点上是对称的。在深度学习背景下,我们遇到的大多数函数的Hessian矩阵几乎都是对称的。因为Hessian矩阵是实对称的,我们可以将其分解成一组实特征值和一组特征向量的正交阵。在特定方向d上的二阶导数可以写成。当d是H的一个特征向量时,这个方向的二阶导数就是对应的特征值。对于其他的方向d,方向二阶导数是所有特征值的加权平均,且与d夹角越小的特征向量的权重越大。最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。我们可以通过(方向)二阶导数预期一个梯度下降步骤能表现得多好。我们在当前点处函数f(x)的近似二阶泰勒级数:

其中g是梯度,H是点的Hessian。如果我们使用学习率,那么新的点x将会是。代入上述的近似,可得

其中有3项:函数的原始值、函数息率导致的预期改善和函数曲率导致的校正。当最后一项太大时,梯度下降实际上是可能向上移动的。当为零或负时,近似的泰勒级数表明增加将永远使f下降。在实践中,泰勒级数不会在大的时候也保持准确,因此在这种情况下我们必须采取更具启发式的选择。当为正时,通过计算可得,使近似泰勒级数下降最多的最优步长为

最坏的情况下,g与H最大特征值对应的特征向量对齐,则最优步长是。当我们要最小化的函数能用二次函数很好地近似的情况下,Hessian的特征值决定了学习率的量级。

二阶导数还可以用于确定一个临界点是否是局部极大值点、局部极小值点或鞍点。回想一下,在临界点处。而意味着会随着我们移向右边而增加,移向左边而减少,也就是对足够小的成立。换句话说,当我们移向右边,斜率开始指向右边的上坡;当我们移向左边,斜率开始指向左边的上坡。因此我们得出结论,当时,x是一个局部极小点。同理,当时,x是一个局部极大点。这就是所谓的二阶导数测试。不幸的是,当时,测试是不确定的。在这种情况下,x可以是一个鞍点或平坦区域的一部分。

在多维情况下,我们需要检测函数的所有二阶导数。利用Hessian的特征值分解,我们可以将二阶导数测试扩展到多维情况。在临界点处,我们通过检测Hessian的特征值来判断该临界点是一个局部极大值、局部极小值还是鞍点。当Hessian是正定的(所有特征值都为正的),则该临界点是局部极小值。因为方向二阶导数在任意方向都是正的,参考单位变量的二阶导数测试就能得出此结论。同样的,当Hessian是负定的(所有特征值都是负的),这个点就是局部极大点。在多维情况下,实际上我们可以找到确定该点是否为鞍点的积极迹象(某些情况下)。如果Hessian的特征值中至少一个是正的且至少一个是负的,那么x是f某个横截面的局部极大点。最后多维二阶导数测试可能像单变量版本那样是不正确的。当所有非零特征值是同号的且至少有一个特征值是0时,这个检测就是不确定的。当所有非零特征值是同号的且至少有一个特征值是0时,这个检测就是不正确的。这是因为单变量的二阶导数测试在零特征值对应的横截面上是不确定的。

多维情况下,单个点处每个方向上的二阶导数是不同的。Hessian的条件数衡量这些二阶导数的变化范围。当Hessian的条件数很差时,梯度下降法也会表现得很差。这是因为一个方向上的导数增加得很快,而在另一个方向上增加得很慢。梯度下降不知道导数的这种变化必须足够小,以免冲过最小而向具有较强曲率的方向上升。这通常意味着步长太少,以至于在其他较小的曲率的方向上进展不明显。

我们可以使用Hessian矩阵的信息来指导搜索,以解决这个问题。其中最简单的方法是牛顿法(Nowton's method)。牛顿法基于一个二阶泰勒展开来近似附近的f(x):

接着通过计算,我们可以得到这个函数的临界点:

如果f是一个正定二次函数,牛顿法只要应用一次就能直接跳到函数的最小点。如果f不是一个真正二次但能在局部近似为正定二次,牛顿法则需要更多次迭代。迭代地更新近似函数和跳到近似函数的最小点可以比梯度下降更快地到达临界点。这在接近局部极小点是一个特别有用的性质,但是在鞍点附近是有害的。当临界点是最小点(Hessian的所有特征值都是正的)时牛顿法才适用,而梯度下降不会被吸引到鞍点(除非梯度指向鞍点)。仅使用梯度信息的优化称为一阶优化算法,如梯度下降。使用Hessian矩阵的优化算法称为二阶优化算法,如牛顿法。

Jacobin和Hessian矩阵相关推荐

  1. Hessian矩阵在XGBoost算法的应用小结

    来源:机器学习算法那些事本文约1100字,建议阅读5分钟 本文深入浅出的总结了Hessian矩阵在XGboost算法中的两种应用,即权重分位点算法和样本权重和算法 . 前言 Hessian矩阵最常见的 ...

  2. 神经网络---Hessian矩阵

    2019独角兽企业重金招聘Python工程师标准>>> 对角近似 外积近似 Hessian矩阵的逆矩阵 有限差 Hessian矩阵的精确计算 Hessian矩阵的快速乘法 转载于:h ...

  3. Jacobian矩阵和Hessian矩阵的理解

    深度学习中梯度向量的计算,Jacobian矩阵和Hessian矩阵是基础的知识点. 求微分其实就是线性化,导数其实就是线性空间之间的线性变换,Jaocibian矩阵本质上就是导数. 比如,映射在处的导 ...

  4. 如何理解神经网络优化中Momentem能够缓解hessian矩阵病态的问题

    如何理解神经网络优化中Momentem能够缓解hessian矩阵病态的问题? 1.首先介绍一下,矩阵的病态问题 矩阵病态主要是因为矩阵向量之间相关性太大,在二维上说就是矩阵向量之间的夹角太小,导致这两 ...

  5. 三维重建4:Jacobian矩阵和Hessian矩阵

    在使用BA平差之前,对每一个观测方程,得到一个代价函数.对多个路标,会产生一个多个代价函数的和的形式,对这个和进行最小二乘法进行求解,使用优化方法.相当于同时对相机位姿和路标进行调整,这就是所谓的BA ...

  6. 牛顿法中为何出现hessian矩阵

    牛顿法包含两种用途: 1.函数为0时的解 2.函数极值时的解 对于1有: f′(x0)=f(x0)−0x−x0f'(x_0)=\frac{f(x_0)-0}{x-x_0}f′(x0​)=x−x0​f( ...

  7. 如何计算一个神经网络在使用momentum时的hessian矩阵(论文调研)

    根据[4]中的说法,"Though results on the Hessian of individual layers were not included in this study&q ...

  8. matlab计算hessian矩阵

    根据评论区中的内容,我们回顾数学定义: hessian矩阵 = 梯度矩阵的雅可比矩阵 代码如下: syms x y z; f1=(x^2-2*x)*exp(-x^2-y^2-x*y); % f = x ...

  9. 牛顿法, Jacobian矩阵 和 Hessian矩阵

    牛顿法 主要有两方面的应用: 求方程的根: 求解最优化方法: 为什么要用牛顿法求方程的根? 问题很多,牛顿法 是什么?目前还没有讲清楚,没关系,先直观理解为 牛顿法是一种迭代求解方法(Newton童鞋 ...

最新文章

  1. 局域网流量控制_羡慕多屏协同?这3款 App 让你的电脑也能轻松控制 Android 手机...
  2. linux命令telnet
  3. 输出10000内所有素数
  4. js ajax传对象数组参数,JS传递对象数组为参数给后端,后端获取
  5. cocos2d-x游戏开发(十二)场景切换:滑门效果
  6. 【白话科普】网站图片不显示,背后的原因你都清楚吗
  7. 分治法在求解凸包问题中的应用(JAVA)--快包算法
  8. IE6下的text-indent属性BUG解决方法
  9. 坐地起价、山寨横行、人身骚扰:割韭菜的刀,还是“搬家公司”快
  10. Kraken发言人:公司可能会考虑明年上市,但不适合SPAC模式
  11. XYGame-AI设计3-行为树-第1版本
  12. 黑客攻击公司化:网络犯罪也有商业模式也有CEO
  13. 历经8年双11流量洗礼,淘宝开放平台架构和技术难点解密
  14. java实体类属性比较_实体类之间属性对比的方法
  15. 北京大学计算机辅助翻译招生计划,北京大学计算机辅助翻译硕士复习规划
  16. 关于字体的px和pt
  17. 计算机flash听课记录范文,Flash之《遮罩动画》听课记录
  18. AMP Roadshow技术分享路演中国专场报名
  19. matlab伽玛分布如何表示,matlab绘制gamma曲线
  20. 怎么获得华为手机的产品sn号码imei号

热门文章

  1. 对于android.intent.action.MAIN和android.intent.category.LAUNCHER的理解
  2. 解决:Mysql 重装时 3306 端口被占用及如何释放 3306 端口的问题
  3. VSTO开发入门教程[持续更新中......]
  4. 撒切尔夫人-唐宁街的岁月
  5. s3c-jpeg.c
  6. Android okio简析
  7. 51 个基本的机器学习面试问题和答案
  8. PLM市场规模及行业趋势
  9. 如何为你的模块添加日志
  10. Day 7 A - Age of Moyu HDU 6386 | 最短路 | SPFA | 链式前向星