一些high-level的概念和理解

最近在学习图形学的时候遇到很多算法潜在的概念(还没想好怎么严谨地描述),记录下。

参考:

  1. https://www.zhihu.com/question/26683585/answer/33906916
  2. https://zhuanlan.zhihu.com/p/56063836

无偏/有偏估计和一致/非一致估计

无偏估计量指的是估计量的的期望值(Expected value)等于真实值。

一致估计量则是在样本数量越多,估计量的值会向真实值收敛,无穷多样本的时候。估计量也无穷接近于真实值。

这两个属性没有必然联系。无偏估计量可以是非一致的,同样一致估计量也可以是有偏的。

一些通俗的例子是,摇一个六面色子得到数字的均值(真实值3.5)。

  • 估计量1:摇N次,得到的数字求和除以N。这是一个无偏并且一致的估计量。
  • 估计量2:摇N次,用每次得到的数字来当估计量。这是一个无偏但不一致的估计量。因为我估计量的均值的确是3.5,但是我摇无穷多次估计量也不会收敛到3.5。
  • 估计量3:摇N次,得到的数字求和除以N+1。这是一个有偏但一致的估计量。因为估计量的均值绝对不等于3.5,但N越大,估计量的值就越接近3.5。

渲染的过程,就是通过计算Rendering equation的一个估计量去求得这这个积分的值的过程,所以可以通过估计量的属性去划分这些算法的类型:

  1. (理解了)使用蒙特卡罗积分(Monte Clarlo Integration)求解渲染方程的算法肯定是无偏且一致的。例如Path Tracing,Bidirectional Path Tracing这两个经典算法。它们的每一个样本都是这个积分定义域中一个点的值,所有样本的计算都是正确无误的最后积分的结果。
  2. (理解过,有点忘了)基于Density Estimation的那一套方法,例如Photon Mapping,是有偏但一致的。有偏是因为渲染方程是基于光线路径定义的,而Photon Mapping在计算photon密度那一步用一个半径不为0的kernel去加权每个photon的contribution,这和直接计算渲染方程的结果是不一样的。而一致的原因是,算法本身将kernel的半径与photon的数量联系起来,当photon数量无穷的时候,kernel半径就是0了,也就会求得真实解(这和上一段摇色子的估计量3是一样的)。但因为photon数量理论上不可能到无限,所以才有了(stochastic)progressive photon mapping这些逐渐缩小kernel半径的方法,它们同样也都是有偏且一致的。
  3. (TodoList)基于Markov Chain的Metropolis Light Transport那一路算法,情况略复杂一点。Markov Chain的采样概率保证在样本无穷多的时候收敛到和目标函数一致,但Chain的初期的估计是有偏的(Start-up bias)。所以整个方法也是有偏一致的。算法的作者提供了一个消除Start-up bias的方法可以使算法变成无偏不一致

但是,并不是无偏估计就好于有偏估计,同样并不是一致性估计就优于非一致性估计,这些属性的优劣要取决于真实应用场景,比如实时性,具体场景。

原因1:因为无偏算法都是基于采样光线路径的,而光线路径的定义中总有一些奇点(Singularity)或者说delta分布,是根本无法采样的。例如对于点光源来说,一个光线击中3D空间中一个点的概率为0等,因为这些我们不得不通过引入bias来计算那一部分路径。例如下图两个玻璃cube底下那一部分光线路径是没法无偏的去采样到的。

1

2

原因2:无偏和一致只是属性,并不能量化估计量错误的大小。估计量的期望正确,不代表每个单独估计量都很准(方差可以很大)。衡量估计量的准确度则通常用Mean squared error来表示。而这个值的大小在渲染里和材质,光线路径采样的方式,场景,光源分布等都有关系,不好一概而论。

原因3:视觉上来说,无偏算法的错误大多以噪点形式呈现。而大多有偏算法入辐照度缓存(Irradiance Cache),photon map的错误则是以明亮不规则的光斑,也许后者对于人眼的审美来说更容易接受。

最后说一个简单的例子,其实屏幕空间的filter就是一种bias,只有一个像素宽的box filter才是对图像无偏的估计。但是通常情况下我们都还是会用各种filter让我们的画面更平滑。

Split Sum Approximation

图形学中预计算中常常使用一个Split sum approximation进行简化计算,通过故意引入一个误差,产生有偏差的结果,这意味着使用Split sum approximation的方法会产生系统误差,并且增加样本数量并不会减少这个误差。

图形学中有句老话:“如果它看起来是对的,那它就是对的。”,英文是:“If it looks right, it is right”。

图形学不太关心你使用的技术是否有据可依,只要它能使得渲染出来的图形看起来是对的,那么这个技术就是对的。