上一篇《Hessian-Hamiltonian MC Rendering》的思路是将哈密顿力学应用在MCMC中,从而达到优化复杂场景的渲染效果。既然哈密顿可以,朗之万立马说到“我也可以”。今天这篇论文,就是基于Hessian-Hamiltonian MC (H2MC) Rendering论文的思想,引入Langevin Monte Carlo Rendering实现渲染上的优化。
简单说,之前的H2MC一个大的问题是Hessian Matrix,这玩意需要的计算量太大,因此,导致该算法往往适合解决复杂场景,因为简单的场景不配用该算法。本论文借鉴Adam的思想,以一种简单的方式来估算Hessian,并引入布朗运动的思想优化LMC。
该算法的主要贡献是:
该论文涉及的研究包括gradient-based and controlled Markov chain Monte Carlo、MCMC rendering、derivatives in rendering、caching in rendering。
Langevin MC
LMC在其他MCMC应用领域已经得到广泛的应用,然后在pbr领域并没有太多应用,直到H2MC的出现。而LMC基于Langevin方程实现基于梯度的随机性的状态转移,从而实现MCMC的采样。Langevin随机微分方程描述了布朗运动而产生的无规则运动:
这里,
是一个时间连续的马尔可夫过程,给定一个值始终不小于0的函数
,定义一个drift term,是
的梯度,另一个是随机的布朗运动
,如上公式满足马尔可夫的遍历性,平稳分布符合函数
。给定一个step size
:
这里,满足
的随机正态分布将产生一个随机的动量,而drift term对应的梯度则导向
贡献值更大的方向。这就是Metropolis-adjusted Langevin algorithm(MALA)。
此时还有一个小问题,相比上篇的H2MC,此时的MALA中
因为没有计算Hessian,covariance matrix是单位矩阵,属于isotropic,因此,此处假设我们可以获取该矩阵,称为preconditioning matrix
,将MALA改进为:、
该论文中,提出了一种只需要计算梯度(一阶导数)就可以近似获取
的方式,同时也要保证MLT算法的遍历行(ergodic)。最后,我们对比H2MC,当HMC的step size为1时,或H2MC中采用高斯分布来近似求解势能时,和本论文中的MALA+Hessian本质上是相同的。
Online Adaptation
下面,主要的工作就是如何利用一阶导数,近似求解
。理想情况下,
应该是Hessian的逆(倒数)。这里,对应的就是牛顿法和伪牛顿法之间的区别。后者在每次迭代中使用一阶导数的累计值来逼近Hessian Matrix。论文中主要是基于Adam算法,每个迭代更新梯度值,并计算其平均值和方差,而数学上可证明,covariance matrix和Hessian matrix互逆。
如上,我们可以不需要计算Hessian而获取其近似解, 节省了大量的计算量,我们用对角矩阵来替换全矩阵,目的也是解决计算量。另外,Adam中采用了动量的概念来优化收敛速度:
上图是采用online adaptation后的接受率对比
至此,尽管可以以迭代的方式来求解二阶导,但出现了一个新问题,此时获取采样点的方法和时间t有关,不再是time-homogeneous,而我们的随机数生成中并没有考虑该因素,因此并不能保证遍历行。这里,通过Controlled MCMC解决的问题:采样(Sample)时考虑时间因子
,并在迭代中更新(Update)该因子
,在这个过程中要保证:
是紧凑的
跟t有关,并在
时收敛
为此,更新计算
和
,满足上述的三点,从而保证ergodic:
如上是采用online adaptation和controlled MCMC方法下的效果对比,可见,online adaptation的优势以及采用diminishing adaptation(DA)后收敛。
这种思路本质上就是以时域的方式来计算二阶导数,自然存在一个问题,在迭代初期样本不够时误差较大,而对于MLT这种存在global exploration时,属于一个large step,需要清空之前的积累重新开始,此时就会导致variance增大,论文中提到通过减少global exploration的比例来减少该影响,同时,也提到了类似path guiding中采用的caching思路,在空域角度来计算二阶导的思路。
CACHE-DRIVEN AND HYBRID ADAPTATION
首先,我们定义一个gradient caching的集合:
这里,
是Primary Sample Space(PSS)中的一个采样点,表示一个完整的光路,
是该光路对应的梯度,我们对该集合给出一个Query方法:
如上,当我们获取一个光路的PSS,对应为
,我们遍历集合
中元素
并计算和
的欧式距离,当距离小于
时,则认为两者相近。这样,我们可以通过caching的机制来获取对应的precondition和momentum:
该方式下好处是不需要考虑迭代次数t的影响,对global和local的exploration都可以适用,缺点是这个kd tree应该很复杂,毕竟这个PSS是高维的,而且一条path的length不同,应该不能互相计算对应的欧式距离,其次就是初始期间,因为caching数据少,不准确,需要积累足够多的caching才有效,这涉及到variance的部分。
因此,在论文中给出了一个阈值
,当Query的样本数大于H时,采用caching机制,如果小于H,则还是采用online的方式。
至此,算法的要点基本如上,效果对比图如下:
今天有点事情,与其仓促收尾,不如就此结束,本文缺少implementation和result,以及最后的conclusion三个部分。