深度学习中梯度向量的计算,Jacobian矩阵和Hessian矩阵是基础的知识点。

求微分其实就是线性化,导数其实就是线性空间之间的线性变换,Jaocibian矩阵本质上就是导数。

比如,映射处的导数就是处的切空间处的切空间之间的线性映射。切空间都是矢量空间,都有基底,所以这个线性变换就是矩阵。在欧氏空间子空间的开集上,切空间就是某个,比如实轴上的切空间就是,曲面上的切空间为。这样一想,函数的导数无非就是切空间到切空间的线性变换,是一个矩阵,同构于一个实数。

因此,Jacobian矩阵实质上就是切空间之间的基底之间的线性变换,这也是为什么积分中变换坐标时前面会乘以一个Jacobian矩阵的行列式。

1、梯度向量:

定义:

目标函数f为单变量,是关于自变量向量x=(x1,x2,…,xn)T的函数,

单变量函数f对向量x求梯度,结果为一个与向量x同维度的向量,称之为梯度向量;

2、Jacobian矩阵:

定义:

目标函数f为一个函数向量,f=(f1(x),f2(x),…fm(x))T;

其中,自变量x=(x1,x2,…,xn)T;

函数向量f对x求梯度,结果为一个矩阵;行数为f的维数;列数位x的维度,称之为Jacobian矩阵;

其每一行都是由相应函数的梯度向量转置构成的;

【注】:梯度向量Jacobian矩阵的一个特例;

当目标函数为标量函数时,Jacobian矩阵是梯度向量;

雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数.

雅可比行列式

如果m = n, 那么F是从n维空间到n维空间的函数, 且它的雅可比矩阵是一个方块矩阵. 于是我们可以取它的行列式, 称为雅可比行列式.在某个给定点的雅可比行列式提供了 在接近该点时的表现的重要信息. 例如, 如果连续可微函数F在p点的雅可比行列式不是零, 那么它在该点附近具有反函数. 这称为反函数定理. 更进一步, 如果p点的雅可比行列式是正数, 则F在p点的取向不变;如果是负数, 则F的取向相反. 而从雅可比行列式的绝对值, 就可以知道函数F在p点的缩放因子;这就是为什么它出现在换元积分法中.

对于取向问题可以这么理解, 例如一个物体在平面上匀速运动, 如果施加一个正方向的力F, 即取向相同, 则加速运动, 类比于速度的导数加速度为正;如果施加一个反方向的力F, 即取向相反, 则减速运动, 类比于速度的导数加速度为负.

3、Hessian矩阵:

实际上,Hessian矩阵是梯度向量g(x)对自变量x的Jacobian矩阵:

在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵。海森矩阵被应用于牛顿法解决的大规模优化问题.

海森矩阵在牛顿法中的应用

一般来说, 牛顿法主要应用在两个方面, 1, 求方程的根; 2, 最优化.

1),求解方程

并不是所有的方程都有求根公式, 或者求根公式很复杂, 导致求解困难. 利用牛顿法, 可以迭代求解.

原理是利用泰勒公式, 在x0处展开, 且展开到一阶, 即f(x)=f(x0)+(x–x0)f′(x0)

求解方程f(x)=0, 即f(x0)+(x–x0)f′(x0)=0, 求解x=x1=x0–f(x0)/f′(x0), 因为这是利用泰勒公式的一阶展开, f(x)=f(x0)+(x–x0)f′(x0)处并不是完全相等, 而是近似相等, 这里求得的x1并不能让f(x)=0, 只能说f(x1)的值比f(x0)更接近f(x)=0, 于是乎, 迭代求解的想法就很自然了, 可以进而推出xn+1=xn–f(xn)/f′(xn), 通过迭代, 这个式子必然在f(x∗)=0的时候收敛. 整个过程如下图:

2),最优化

在最优化的问题中, 线性最优化至少可以使用单纯形法(或称不动点算法)求解, 但对于非线性优化问题, 牛顿法提供了一种求解的办法. 假设任务是优化一个目标函数f, 求函数f的极大极小问题, 可以转化为求解函数f的导数f′=0的问题, 这样求可以把优化问题看成方程求解问题(f′=0). 剩下的问题就和第一部分提到的牛顿法求解很相似了.这次为了求解f′=0的根, 首先把f(x)在探索点xn处泰勒展开, 展开到2阶形式进行近似:

f(x)=f(xn)+f′(xn)(x−xn)+f′′(xn)2(x−xn)2

然后用f(x)的最小点做为新的探索点xn+1,据此,令:

f′(x)=f′(xn)+f′′(xn)(x−xn)=0

求得出迭代公式:

xn+1=xn−f′(xn)f′′(xn),n=0,1,...

一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解.

在上面讨论的是2维情况, 高维情况的牛顿迭代公式是:

xn+1=xn−[Hf(xn)]–1∇f(xn),n≥0

其中H是hessian矩阵, 定义见上.

高维情况依然可以用牛顿迭代求解, 但是问题是Hessian矩阵引入的复杂性, 使得牛顿迭代求解的难度大大增加, 但是已经有了解决这个问题的办法就是Quasi-Newton method, 不再直接计算hessian矩阵, 而是每一步的时候使用梯度向量更新hessian矩阵的近似.

Jacobian矩阵和Hessian矩阵的理解相关推荐

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

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

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

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

  3. Jacobian矩阵和Hessian矩阵

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 还记得被Jacobian矩阵和Hessian矩阵统治的恐惧吗 ...

  4. 从 Jacobian 矩阵、Hessian 矩阵到 Theano 实现

    T.grad(cost, wrt),一般接收两个参数,第一个参数表示需要求导的函数,放在深度学习的背景下就是代价函数,wrt(with respect to)表示代价函数所关于的参数(通俗地讲,就叫自 ...

  5. 【矩阵学习】Jacobian矩阵和Hessian矩阵

    [矩阵学习]Jacobian矩阵和Hessian矩阵 Jacobian 矩阵 Jacobian 行列式 Hessian 矩阵 Hessian 在牛顿法中的应用 Jacobian 矩阵 在向量分析中, ...

  6. [work] Jacobian矩阵和Hessian矩阵

    1. Jacobian 在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式. 还有, 在代数几何中, 代数曲线的雅可比量表示雅可比簇:伴随该曲线的一个代数群, 曲 ...

  7. Jacobian矩阵、Hessian矩阵

    本文来源于:http://jacoxu.com/jacobian%e7%9f%a9%e9%98%b5%e5%92%8chessian%e7%9f%a9%e9%98%b5/ 由于经常忘记雅克比矩阵和海森 ...

  8. Jacobian矩阵和Hessian矩阵,LM最优化方法

    1. 前言 熟悉机器学习的童鞋都知道,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解无约束最优化问题.实现简单,coding 方便,是训练模型的必备利器之一.这 ...

  9. 【机器学习中的矩阵求导】(六)Jacobian矩阵和Hessian矩阵

    学习总结 (0)回顾矩阵向量化,和 克罗内克积的主要运算法则. (1)梯度向量是雅克比矩阵的特例. (2)Hessian矩阵是梯度向量g(x)对自变量x的Jacobian矩阵,描述了函数的局部曲率. ...

最新文章

  1. 2021年大数据ZooKeeper(一):ZooKeeper基本知识
  2. vim-go开发环境Tagbar插件和NERTree插件安装
  3. 软件介绍网站:“软矿”x-berry
  4. python绘制汉字_OpenCV Python 绘制中文字
  5. c语言编写计算器保存结果的程序,c语言编写计算器程序.doc
  6. 局域网中服务器群配置ssh免密
  7. 飞思卡尔MC9S12G系列单片机flash擦写
  8. ReportingService报表入门
  9. vue Root file specified for compilation
  10. drupal模块_自动测试Drupal 8模块
  11. 量子计算是人工智能的未来吗?
  12. 使用 Docker Compose 构建复杂的多容器 App
  13. 树莓派mjpg-streamer实现监控功能
  14. UE5黑客帝国3d print假室内的一些使用记录
  15. python 爬取墨迹天气预报(超简单!该代码用于实际生产)
  16. 在互联网公司大举进军移动支付和网络理财之际 平安推出壹钱包对战互联网“群狼”
  17. flash右键菜单代码
  18. Python信号分析—波峰波谷
  19. python处理pdf实例_Python实现读取PDF文件案例
  20. 翻译: 使用非线性卡尔曼滤波来估计信号

热门文章

  1. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
  2. 5首页加载慢_UIViewController 预加载方案浅谈
  3. Linux下的shell脚本实战之用户创建
  4. Redis:Redis集群模式(Cluster)原理
  5. RDMA技术详解(二):RDMA Send Receive操作
  6. 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
  7. Windows 操作系统的安全设置
  8. WebStorm2018配置nodejs
  9. HDU ACM 1046 Gridland 找规律
  10. 在asp.net mvc中使用PartialView返回部分HTML段