三维重建面试4:Jacobian矩阵和Hessian矩阵
在使用BA平差之前,对每一个观测方程,得到一个代价函数。对多个路标,会产生一个多个代价函数的和的形式,对这个和进行最小二乘法进行求解,使用优化方法。相当于同时对相机位姿和路标进行调整,这就是所谓的BA。
在优化过程中,对每一个代价函数求取雅克比矩阵E和F,形成一个H矩阵,正因为H矩阵的稀疏性,才可是使用稀疏方法对BA进行求解。把一个大的稀疏矩阵,通过特定的消元法,消解为一个小的稠密矩阵,降低计算量。
摘抄部分有趣的链接,如有不适,请移步原文。
参考原文链接:Jacobian矩阵和Hessian矩阵
1. Jacobian
在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式.。
还有, 在代数几何中, 代数曲线的雅可比量表示雅可比簇:伴随该曲线的一个代数群, 曲线可以嵌入其中. 它们全部都以数学家卡尔·雅可比(Carl Jacob, 1804年10月4日-1851年2月18日)命名;英文雅可比量”Jacobian”可以发音为[ja ˈko bi ən]或者[ʤə ˈko bi ən].
雅可比矩阵
雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数.
假设F:Rn→Rm
是一个从欧式n维空间转换到欧式m维空间的函数. 这个函数由m个实函数组成: y1(x1,…,xn), …, ym(x1,…,xn). 这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵, 这就是所谓的雅可比矩阵:
此矩阵表示为:
JF(x1,…,xn),
或者∂(y1,…,ym)∂(x1,…,xn).
这个矩阵的第i行是由梯度函数的转置yi(i=1,…,m)表示的.
如果p是Rn中的一点,F在p点可微分,
那么在这一点的导数由JF(p)给出(这是求该点导数最简便的方法).
在此情况下, 由F(p)描述的线性算子即接近点p的F的最优线性逼近,x逼近于p:F(x)≈F(p)+JF(p)⋅(x–p)
雅可比行列式
如果m = n, 那么F是从n维空间到n维空间的函数,
且它的雅可比矩阵是一个方块矩阵. 于是我们可以取它的行列式, 称为雅可比行列式.
在某个给定点的雅可比行列式提供了 在接近该点时的表现的重要信息. 例如, 如果连续可微函数F在p点的雅可比行列式不是零,
那么它在该点附近具有反函数. 这称为反函数定理. 更进一步, 如果p点的雅可比行列式是正数,
则F在p点的取向不变;如果是负数,
则F的取向相反.
而从雅可比行列式的绝对值, 就可以知道函数F在p点的缩放因子;这就是为什么它出现在换元积分法中.
对于取向问题可以这么理解, 例如一个物体在平面上匀速运动, 如果施加一个正方向的力F,
即取向相同, 则加速运动, 类比于速度的导数加速度为正;如果施加一个反方向的力F,
即取向相反, 则减速运动, 类比于速度的导数加速度为负.
2. 海森Hessian矩阵
在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:
如果f
的所有二阶导数都存在, 那么f
的海森矩阵即:
其中x=(x1,x2…,xn),
即H(f)为:
(也有人把海森定义为以上矩阵的行列式)海森矩阵被应用于牛顿法解决的大规模优化问题.
海森矩阵在牛顿法中的应用
一般来说, 牛顿法主要应用在两个方面, 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)的泰勒展开,
展开到2阶形式:
这个式子是成立的, 当且仅当 Δx无限趋近于0时,f(x+Δx)=f(x),
约去这两项, 并对余项式f′(x)Δx+12f”(x)Δx2=0对Δx求导(注:f′(x),f”(x)
均为常数项. 此时上式等价与:
求解:
得出迭代公式:
一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解.

在上面讨论的是2维情况, 高维情况的牛顿迭代公式是:
其中H是hessian矩阵, 定义见上.
高维情况依然可以用牛顿迭代求解, 但是问题是Hessian矩阵引入的复杂性, 使得牛顿迭代求解的难度大大增加, 但是已经有了解决这个问题的办法就是Quasi-Newton method, 不再直接计算hessian矩阵, 而是每一步的时候使用梯度向量更新hessian矩阵的近似.
[参考: Wikipedia]
此条目由 jacoxu 发表在
Optimization Theory 分类目录,并贴了 Hessian、Jacobian 标签。将固定链接加入收藏夹。
三维重建面试4:Jacobian矩阵和Hessian矩阵的更多相关文章
- Jacobian矩阵和Hessian矩阵
1.Jacobian矩阵 在矩阵论中,Jacobian矩阵是一阶偏导矩阵,其行列式称为Jacobian行列式.假设 函数 $f:R^n \to R^m$, 输入是向量 $x \in R^n$ ,输出为 ...
- Jacobian矩阵、Hessian矩阵和Newton's method
在寻找极大极小值的过程中,有一个经典的算法叫做Newton's method,在学习Newton's method的过程中,会引入两个矩阵,使得理解的难度增大,下面就对这个问题进行描述. 1, Jac ...
- 梯度vs Jacobian矩阵vs Hessian矩阵
梯度向量 定义: 目标函数f为单变量,是关于自变量向量x=(x1,x2,-,xn)T的函数, 单变量函数f对向量x求梯度,结果为一个与向量x同维度的向量,称之为梯度向量: 1. Jacobian 在向 ...
- C#处理医学图像(一):基于Hessian矩阵的血管肺纹理骨骼增强对比
在医院实际环境中,经常遇到有问题的患者,对于一些特殊的场景,比如骨折,肺结节,心脑血管问题 需要图像对比增强来更为清晰的显示病灶助于医生确诊,先看效果: 肺纹理增强: 肺结节增强: 血管对比增强: 骨 ...
- Hessian矩阵
http://baike.baidu.com/link?url=o1ts6Eirjn5mHQCZUHGykiI8tDIdtHHOe6IDXagtcvF9ncOfdDOzT8tmFj41_DEsiUCr ...
- Hessian矩阵【转】
http://blog.sina.com.cn/s/blog_7e1ecaf30100wgfw.html 在数学中,海塞矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,一元函数就是二阶导, ...
- Hessian矩阵与多元函数极值
Hessian矩阵与多元函数极值 海塞矩阵(Hessian Matrix),又译作海森矩阵,是一个多元函数的二阶偏导数构成的方阵.虽然它是一个具有悠久历史的数学成果.可是在机器学习和图像处理(比如SI ...
- Hessian矩阵与牛顿法
Hessian矩阵与牛顿法 牛顿法 主要有两方面的应用: 1. 求方程的根: 2. 求解最优化方法: 一. 为什么要用牛顿法求方程的根? 问题很多,牛顿法 是什么?目前还没有讲清楚,没关系,先直观理解 ...
- 【机器学习】梯度、Hessian矩阵、平面方程的法线以及函数导数的含义
想必单独论及" 梯度.Hessian矩阵.平面方程的法线以及函数导数"等四个基本概念的时候,绝大部分人都能够很容易地谈个一二三,基本没有问题. 其实在应用的时候,这几个概念经常被混 ...
随机推荐
- 【[Offer收割]编程练习赛 14 A】小Hi和小Ho的礼物
[题目链接]:http://hihocoder.com/problemset/problem/1505 [题意] [题解] 考虑Meet in the middle. 因为两个数的和不是很大; 直接用 ...
- Codeforces Round #400 (Div. 1 + Div. 2, combined)——ABCDE
题目戳这里 A.A Serial Killer 题目描述似乎很恶心,结合样例和样例解释猜测的题意 使用C++11的auto可以来一手骚操作 #include <bits/stdc++.h> ...
- 每一个程序猿必知之SEO
似乎由于受这篇文章的影响 http://katemats.com/what-every-programmer-should-know-about-seo/ 于是我也觉得我应该写一个每一个程序猿必知之S ...
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...
- 安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
上周末给Windows 打完补丁后,周一在通过From SharePoint的方式插入图片时,出现了如下错误: Unable to display this Web Part. To troubles ...
- 冒泡排序Vs直接选择排序
什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序.拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先.我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据 ...
- 2017全面JAVA面试经历总结
https://wenku.baidu.com/view/05e8f71afbd6195f312b3169a45177232f60e474.html?from=search JAVA常见面试题及解答2 ...
- Android 6.0 中TimePicker显示为滚动样式的方法
在Android6.0中,TimePicker控件的默认样式为转盘的样式,就像这个样子: 如果想要显示为之前的滚动样式的话也很简单,只要在布局文件中设置TimePicker的timePickerMod ...
- bzoj 3029 守卫者的挑战 —— 概率DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 设 f[i][j][k] 表示第 i 次挑战,已经成功 j 次,剩余容量为 k 的概率 ...
- python3用list实现栈
工作中遇到的需求,****代表标签数据别的信息: D01 ******** 1 ******** D01 ******** 2 ******** D01 ******** 3 ******** D01 ...