Normalizing Flow 入门

 

此学习大量内容来自 https://mp.weixin.qq.com/s/oUQuHvy0lYco4HsocqvH3Q , 在此致谢。

以通过冷漠脸生成笑脸为例

现在我们有一些冷漠脸和对应的笑脸的数据,我们的目标是把手上的一张额外的冷漠脸的变成对应的笑脸。

那么我们可以这么做,我们的目的是要知道冷漠脸和笑脸隐藏在背后的关系,这个我们通过标准化流的方式来进行。假设存在一个工具“标准化流”,可以将这个图像转化为一维的数据.

冷漠脸 ----[逆标准化流]----> Vector z1;
笑脸   ----[逆标准化流]----> Vector z2;

那么 z2 - z1 就代表在 z 空间中,冷漠脸指向笑脸的矢量。这个就是我们要求的东西(也即所谓的规律)。

现在我们可以把另外一张单独的冷漠脸的图片通过“逆标准化流”变到z空间,然后得到一个矢量 z3, 让 z3 加上 z2-z1, 这就得到了这张冷漠脸在 z 空间中对应的笑脸的矢量。然后我们再通过“”标准化流“”变回图片,就完成了我们的目标。

数学基础

行列式

表示对图像的基的放大倍数;

Jacobi 矩阵

表示的是:

\(y=f(x)\) \(x=f^{-1}(y)\) 但并非所有的反函数都容易写出来。但总是可以这么写(这一步是没有近似的): \(\frac{dy}{dt} = \frac{dy}{dx}\frac{dx}{dt}\) 其中的 $\frac{dy}{dx}$ 就是 Jacobi 矩阵.

这是一个线性的矩阵。

Change of Variable Theorem

设存在一个变换函数:

\[x=T(z)\]

那么: \(\int_{x} p_{x}(\mathbf{x}) d \mathbf{x}=1=\int_{z} p_{z}(\mathbf{z}) d \mathbf{z}\)

由于不管你怎么变量替换,事件A发生的概率总是确定的,不管你用 $x$ 还是用 $z$ 来描述它。所以

\(\left|p_{x}(\mathbf{x}) d \mathbf{x}\right| =\left|p_{z}(\mathbf{z}) d \mathbf{z}\right| \\ p_{x}(\mathbf{x}) =p_{z}(\mathbf{z})\left|\frac{d \mathbf{z}}{d \mathbf{x}}\right|\) \(p_{x}(\mathbf{x})=p_{z}(\mathbf{z})\left|\frac{\partial T^{-1}(\mathbf{x})}{\partial \mathbf{x}}\right|\)