本文介绍了集中Flow 模型。
Flow模型
$$
x \leftrightarrow z \sim \mathcal{N}(0,1)(\text{maybe})
$$
同样使用MLE优化:
$$\underset{\theta}{\arg\min}\mathbb{E}_x [-\log p_\theta (x)]$$
与VAE和GAN不同的是,Flow模型选择将分布通过流的形式直接计算出来。
$$
p_\theta(x)=p(z) \frac{dz}{dx}=p(f_\theta(x))\left|\frac{\partial f_\theta(x)}{\partial x}\right|\
\log P_\theta (x)=\log P(f_\theta (x))+\log \left| \det \left[\frac{\partial f_\theta(x)}{\partial x}\right]\right|
$$
其实直观理解我觉得可以是:流是一种替换原始分布的工具,在替换的过程中一部分的能量转移到了流变化(体积)所需要的能量中(第二项)。
因此Flow模型的两个要求条件是:1. 流函数可逆,2. 雅可比行列式容易计算。
NICE: Non-independent component Estimation
针对Flow模型相对比较难求解的第二个问题,NICE给出的解决方法是:
构造一个结构是三角阵的雅可比,那么其行列式计算结果为对角线元素积。
构造方法如下:
$$
\begin{cases}
h_1 = x_1\\
h_2 = x_2 + m(x_1)
\end{cases}
$$
则对应的雅可比矩阵行列式为
$$
\left| \left[ \frac{\partial h}{\partial x} \right] \right| =
\left| \left(
\begin{matrix}
I_d & 0 \\
\frac{\partial m}{\partial x_1} & I_{d:m}
\end{matrix}
\right) \right|
$$
逆变换为:
$$
\begin{cases}
x_1 = h_1 \\
x_2 = h_2 - m(h_1)
\end{cases}
$$
流变换可以以层的形式叠加作用。
对应的雅可比行列式也可以直接乘起来。
为了引入非线性处理方式,这里引入错位,即随机交换 $x_1$, $x_2$。
之后作者为了解决维度浪费的问题,引入了尺度变换层s,实际上是一个与输入同等维度大小的系数。
这里雅可比矩阵就变成了s对角元素。
RealNVP: real-valued non-volume preserving (实值非体积保持)
这篇paper里,作者提出了更加一般的Flow版本,构建方式如下:
$$
\begin{cases}
h_1 = x_1\\
h_2 = s(x_1)\cdot x_2+t(x_1)
\end{cases}
$$
对应的雅克比矩阵的行列式为:
$$
\left|
\left(
\begin{array}{l}
\mathbf{I} & 0\\
\left[\frac{ \partial h_2}{ \partial x_1 } \right] & \mathbf{diag}(s(x_1))
\end{array}
\right)
\right|
$$
在混合信息流的方式上,从原先的在通道上反转交换变成了在通道上随机shuffle。并且在前作(NICE)基础上引入了卷积层。
为了能够增强随机性,作者提出了增多通道的方式,利用名叫squeeze的方法实现。
并且这种方法还可以解决某些单通道灰阶图通道数不够的问题。
在每一个流层上,作者使用了多尺度的通道结构:
GLOW: Generative Flow
该篇论文中,作者混合信息流的方法从RealNVP的shuffle变成了可逆的$1\times 1$卷积。
该卷积方法即对每个通道使用相同的同样的权重来生成新的混合信息流。
另外作者加入了ActNorm,即
$$
\hat{z} = \frac{z-\mu}{\sigma}
$$
其中 $\mu$, $\sigma$是可以训练的参数。
整体的流程如下:
question: why use square loss?
encoder为:
其中的revnet为:
其中的split2d为:
而f为: