在看DynamicFusion这篇文章时,同学们有可能会主要到文章运到了一个很让人百思不解的solver叫做Pre-conditioned Conjugate Gradient Solver。在优快云上转了一圈发现,对于conjugate gradient method深入讲解的文章少之又少,所以决定写一篇能让有一定线性代数基础的同学理解得懂的文章。Ok, let’s get started.
迭代优化问题
假设我们有一个线性问题(用AAA,bbb来去求xxx):
Ax=bAx = bAx=b
如果用直接法(direct method)来求得话,我们可以直接得到:
x=(ATA)−1ATbx = (A^TA)^{-1}A^Tbx=(ATA)−1ATb
这种方法好但是如果AAA是一个Rn×nR^{n\times n}Rn×n,n>108n > 10^8n>108的矩阵的话,对ATAA^TAATA直接做Inverse显然是不可取的。于是非直接的迭代优化方式就此诞生。简单来说间接法是用迭代的方式更新xxx来缩小AxAxAx和bbb的距离。
δx=arg minδx(E(x+δx))=arg minδx(12∣∣A(x+δx)−b∣∣2)\delta x = \argmin_{\delta x}(E(x + \delta x)) = \argmin_{\delta x} (\frac{1}{2}||A(x + \delta x)-b||^2)δx=δxargmin(E(x+δx))=δxargmin(21∣∣A(x+δx)−b∣∣2)
x′=x+δxx' = x + \delta xx′=x+δx
不断迭代知道更新后的x′x'x′对距离影响与之前相比不大为止(convergence)。
学视觉或者做神经网的朋友可能都会经常接触到一些常用的迭代优化的算法,如:
- 梯度下降:δx=α∂E∂x\delta x = \alpha \frac{\partial E}{\partial x}δx=α
理解DynamicFusion中的预条件共轭梯度下降

本文详细介绍了预条件共轭梯度下降(Pre-conditioned Conjugate Gradient Solver)在DynamicFusion中的应用。在解决大规模线性问题时,直接法不适用,迭代优化成为首选。共轭梯度下降是其中一种有效方法,利用Krylov子空间的概念逐步优化解。文章通过解释Krylov子空间和序列,帮助读者理解共轭梯度下降的工作原理。
最低0.47元/天 解锁文章
3400

被折叠的 条评论
为什么被折叠?



