本文参考

分布问题

在生成网络中,我们知道的是样本x,即训练数据,我们希望通过概率模型$q_θ(x)$来拟合真实样本$x$,其中$θ$即模型中的参数。

由于我们是不知道真实数据的分布(只有真实数据),想直接用KL Loss去拟合样本数据和真实数据是不可能的。对于连续型分布,我们可以将样本分布改为
$$
q(x) = ∫q(z)q(x|z)dz
$$
其中$q(x|z)$描述了一个由$z$来生成$x$的模型,其中$q(z)$一般是标准高斯分布。

最大似然: 给定一个概率分布函数$f_D$,以及一个分布参数$θ$,我们可以从这个分布中抽出一个具有n个值的采样$X1,X2,...,Xn$,通过利用$f_D$,我们就能计算出其概率: $$ P=(x_1,x_2,...,x_n)=f_D(x_1,x_2,...,x_n|θ) $$ 最大似然就是我们寻找参数$θ$,使得这个采样的可能性最大(最大化拟合分布),定义可能性为 $$ lik(θ)=f_D(x_1,x_2,...,x_n|θ) $$ 在θ的所有取值上,使这个函数最大化。这个使可能性最大的值即被称为$θ$的最大似然估计。

已知分布形式,要想求出参数$θ$,我们可以利用最大似然(求出网络中的参数)。
$$
E_{x{\sim}p(x)}[log q(x)]
$$
只要我们能够最大化上面的似然值,那么我们找到的$θ$就是最能够拟合真实分布的网络参数。

  • VAE
    在VAE中,其通过优化$z$和标准正太分布靠近,且$z$又是通过encoder来进行采样的,即假设后验分布$p(z|x)$是正太分布,从而对于正太分布中的一个$z$,能找到一个相应的$x$。VAE是优化一个更强的上界,这使得它只能是一个近似模型,无法达到良好的生成效果。

  • GAN
    利用对抗学习的方式,和求这个最大似然估计参数无关,用交替训练来使得模型精度不断提升。

可逆神经网络

在flow模型中,则是直接求取这个最大似然的值。
$$
E_{x{\sim}p(x)}[log q(x)]=log\prod_{i=1}^nq(x_i)
$$

假设我们寻找变换$z=f(x)$,使得数据映射到新空间,且各个维度相互独立。
$$
q(z)=\prod_{i=1}^nq(z_i)
$$
假设$f(x)$是可逆的,并且$z$的维度与$x$的维度相同。由概率密度的变量代换我们有:

$$
q(x)=\prod_{i=1}^nq(f(x_i)){\begin{matrix}|det\frac{ {\partial}f}{x}| \end{matrix} }
$$
其中${\begin{matrix}|det\frac{ {\partial}f}{x}| \end{matrix} }$为“雅可比行列式”的绝对值,在空间转换中,雅可比矩阵描述了向量空间中的运行变换,从$n$维空间转换到$m$维空间,当$m=n$,即雅可比行列式,代表了两个空间中体积比率。

在这里,对于flow模型,就需要有两个要求

  1. 可逆,并且易于求逆函数(它的逆g就是我们希望的生成模型);
  2. 对应的雅可比行列式容易计算。

这样,需要要最大化最大似然,就能优化模型求得真实分布:
$$
E_{x{\sim}p(x)}[log q(x)]=log\prod_{i=1}^nq(x_i)=log\prod_{i=1}^nq(f(x_i)){\begin{matrix}|det\frac{ {\partial}f}{x}| \end{matrix} }
$$
当$f(x)$为标准高斯分布时
$$
E_{x{\sim}p(x)}[log q(x)]=logq(x)=\sum_{i=0}^n{-\frac{D}{2}log(2{\pi})-\frac{1}{2}\begin{Vmatrix}f(x_i)\end{Vmatrix}^2+log{\begin{matrix}|det\frac{ {\partial}f}{x}| \end{matrix} } }
$$
在实际的网络训练中,为了最小化loss,通常使用负对数似然损失,即在上面的公式中加上一个符号,同时去掉第一个常数。通过优化这个损失,当训练完成,我们就可以随机采样一个$z$,然后通过$f$的逆来生成一个样本$f^{−1}(z)=g(z)$,这就得到了生成模型。