0%

高斯水溅Gaussian Splatting中的数学

学习任意高斯分布

在《3D Gaussian Splatting for Real-Time Radiance Field Rendering》中,作者通过神经网络来学习3元高斯函数的协方差,并将其协方差定义为缩放矩阵和旋转矩阵两部份。

\[ \Sigma = RSS^TR^T \] 其中,\(R\)\(S\)分别是旋转矩阵和放缩矩阵。

为什么协方差矩阵可以拆解乘这两部份呢?这是因为任意正态分布可以看作对一个标准正态分布先进行放缩,然后再进行旋转,最后移动到均值处得到,后面的章节将对这一结论进行代数和几何上的解释。

To allow independent optimization of both factors, we store them separately: a 3D vector 𝑠 for scaling and a quaternion 𝑞 to represent rotation. These can be trivially converted to their respective matrices and combined, making sure to normalize 𝑞 to obtain a valid unit quaternion.

\(R\)是一个\(3 \times 3\)大小的矩阵,但是作者没有选择直接用神经网络回归这9个变量,因为旋转矩阵虽然是\(3 \times 3\)大小,但是实际的自由度仅有3个(分别表示沿x、y、z轴旋转的角度)。所以,作者选择用回归四元数来方式来学习旋转矩阵。 \[ q = (\cos{\theta}, u_x\sin{\theta}, u_y\sin{\theta},u_z\sin{\theta}) \\ ||q||=1 \]

四元数也有四个变量,但是其模长为1,所以仅有三个变量。你可能要问了,那为什么不直接用仅有三个变量的欧拉角来回归呢?这是因为欧拉角这种表示旋转的方式存在天然的缺陷,可能会遇到死锁问题。至于死锁问题就不在本文的讨论范围内了。

定义

多元正态分布\(X \sim \mathcal{N}(\mathbf{\mu}, \mathbf{\Sigma})\)的概率密度函数可以表示为 \[ f_x(x_1, ...,x_k)=\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} \] 其中默认情况下向量都是列向量,所以\(x,\mu \in R^{k\times1}\),\(\Sigma \in R^{k\times k}\), \(|\Sigma|\)为协方差矩阵的行列式。 \[ \mu = E(X) \\ \Sigma = E((X-E(X))(X-E(X))^T) \] 从定义式可知,对原分布做一个变换\(X'=TX\),则其均值和方差的变化为 \[ \mu'=E(TX)=TE(x)=T\mu \\ \Sigma'=E((TX-E(TX))(TX-E(TX))^T)=T\Sigma T^T \] 多元正态分布比较抽象,我们以二元正态分布为例比较直观。对于二元正态分布而言,其协方差矩阵可以写成: \[ \Sigma = \left[ \begin{matrix} \sigma(x, x) & \sigma(x, y) \\ \sigma(y, x) & \sigma(y, y) \end{matrix} \right] \] 由于\(\sigma(x, y)=\sigma(y, x)\)所以,协方差矩阵是实对称矩阵。

实对称矩阵:如果有n阶矩阵A,其矩阵元素都是实数,且矩阵A的转置等于其本身,即\(A^T=A\),则矩阵A为实对称矩阵

正交矩阵:如果有n阶矩阵A,其行向量和列向量皆是相互正交的单位向量,则A为正交矩阵,此时有\(A^{-1}=A^T\)

半正定矩阵:如果有n阶矩阵A,对于任意非零向量\(x\)\(xAx^T\ge0\),则A为半正定矩阵

正态分布可以由标准正态分布变换而来

对于简单的一元正态分布而言,标准正态分布是指均值为\(\mu=0\),方差为\(\sigma=1\)的正态分布,即\(X_0 \sim \mathcal{N}(0, 1)\)。要得到任意正态分布分布\(X \sim \mathcal{N}(\mu, \sigma^2)\)只需要对原分布进行线性操作,这是我们比较容易理解的部分。 \[ X = \sigma X_0 + \mu \\ \mu = \mathbf{0} + \mu \\ \sigma = \sigma \mathbf{I} \] 对于二元正态分布而言,标准正态分布是指均值\(\mu=[0, 0]^T\),协方差为\(\Sigma = \left[ \begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix} \right]\) 即,即\(X_0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\)。要得到任意正态分布\(X \sim \mathcal{N}(\mathbf\mu, \mathbf{\Sigma})\),需要对其均值和协方差做变换。均值的变换比较好做,对分布作\(X_0+\mathbf{\mu}\)加减可以直接反应到均值上,但是对协方差不能再简单的乘一个变换系数了,因为单位向量乘以任何系数只会变成对角矩阵,而不能表示任意实对称矩阵。

由式3可知,\(X'=TX, \Sigma'=T\Sigma T^T\),所以我们只需要对任意协方差矩阵做对角化即可知道该对标准正态分布做什么变换\(T\)。对\(\Sigma\)进行对角化, \[ \Sigma = U\Lambda U^{-1} \] 其中\(\Lambda\)为其特征值矩阵,\(U\)为对应的单位特征向量的列组成的矩阵其可以进一步写成一个放缩矩阵乘以一个旋转矩阵,即\(T=RS\)\[ \Sigma = U\Lambda U^{-1} = (RS)(RS)^T \] 这是由于协方差矩阵是半正定的实对称矩阵,因此有\(U^{-1}=U^T\),且\(|U|\ge0\),且\(U\)为正交矩阵。行列式为1的正交矩阵可以表示为一个旋转矩阵,因此有 \[ \Sigma = U\Lambda U^T = R \Lambda R^T=RS(SR)^T \]

因此,任意正态分布可以看作对一个标准正态分布先进行放缩,然后再进行旋转,最后移动到均值处得到。\[ X = RSX_0+\mu \]

正交矩阵可以分为两类,一类就是旋转变换矩阵,一类是镜像变换矩阵

几何理解

从图形的角度也可以得到这个结果,对于二元标准正态分布而言,它的图像如下:

whiteneddata

当把协方差矩阵从单位矩阵变成对角矩阵时相当于对其两侧(x轴和y轴)方向进行了拉伸:

eigenvectors

下图为协方差矩阵为\(\left[ \begin{matrix} 5 & 4 \\ 4 & 6 \end{matrix} \right]\)的二元正态分布样本图,直观上来看我们只需要进一步对上述的协方差矩阵为对角矩阵的正态分布样本进行一个旋转操作就可以表示任意的二元正态分布了。

transformeddata

矩阵论拾遗

实对称矩阵:如果有n阶矩阵A,其矩阵元素都是实数,且矩阵A的转置等于其本身,即\(A^T=A\),则矩阵A为实对称矩阵

正交矩阵:如果有n阶矩阵A,其行向量和列向量皆是相互正交的单位向量,则A为正交矩阵,此时有\(A^{-1}=A^T\)

半正定矩阵:如果有n阶矩阵A,对于任意非零向量\(x\)皆有\(xAx^T\ge0\),则A为半正定矩阵

实对称矩阵的特征向量相互正交

证明: \[ 给定一个n维实对称矩阵A满足Ax_1=\lambda_1x_1, Ax_2=\lambda_2x_2,且\lambda_1\not=\lambda \\ 对于 Ax_1=\lambda_1x_1,两边转置有x_1^TA^T=\lambda_1x_1^T,两侧都右乘x_2,得到 \\ x_1^TA^Tx_2=\lambda_1x_1^Tx_2,由于A^T=A,得到 \\ \lambda_2x_1^Tx_2=\lambda_1x_1^Tx_2 \\ 由于\lambda_1 \not= \lambda_2 所以得到x_1^Tx_2=0,故得证 \]

性质:协方差矩阵为半正定矩阵

半正定矩阵:如果有n阶矩阵A,对于任意非零向量\(x\)\(xAx^T\ge0\),则A为半正定矩阵

协方差矩阵定义: \[ \Sigma = E[(x-E(x))(x-E(x))^T] \] 对任意非零向量\(u\in R^{1 \times n}\)\[ u\Sigma u^T = uE[(x-E(x))(x-E(x))^T]u^T \\=E[u(x-E(x))(x-E(x))^Tu^T] \\=E[u(x-E(x))[u(x-E(x))]^T) \\ =E(X'X'^T) \ge 0 \]