课程主页:https://deepgenerativemodels.github.io/

课件资料:https://github.com/Subhajit135/CS236_DGM,https://github.com/deepgenerativemodels/notes

视频地址:https://www.bilibili.com/video/av81625948?from=search&seid=4636291486683332935

这里回顾CS236 Lecture 8的课程内容,这一讲继续介绍了Normalizing Flow Models。

NICE(Nonlinear Independent Components Estimation)

NICE由两种可逆变换组成:分别是加法层和伸缩层,后面具体介绍这两部分。

NICE - Additive coupling layers

将变量划分为两个不相交子集:$\mathbf{z}_{1: d},\mathbf{z}_{d+1: n},1\le d<n$

  • 前向映射$\mathbf z \mapsto \mathbf x$:

    • $\mathbf{x}_{1: d}=\mathbf{z}_{1: d}$
    • $\mathbf{x}_{d+1: n}=\mathbf{z}_{d+1: n}+m_{\theta}\left(\mathbf{z}_{1: d}\right)$
  • 反向映射$\mathbf x \mapsto \mathbf z$:

    • $\mathbf{z}_{1: d}=\mathbf{x}_{1: d}$
    • $\mathbf{z}_{d+1: n}=\mathbf{x}_{d+1: n}-m_{\theta}\left(\mathbf{x}_{1: d}\right)$
  • 前向映射的雅克比矩阵为:

NICE - Rescaling layers

  • NICE前几层由Additive coupling layers组成

  • 最后一层使用伸缩变换

  • 前向映射$\mathbf z \mapsto \mathbf x$:

    其中$s_i>0$是第$i$维的伸缩因子。

  • 反向映射$\mathbf x \mapsto \mathbf z$:

  • 前向映射的雅克比矩阵为:

Samples generated via NICE

NICE的采样结果如下:

Real-NVP: Non-volume preserving extension of NICE

来看NICE的拓展:NVP。

  • 前向映射$\mathbf z \mapsto \mathbf x$:

    • $\mathbf{x}_{1: d}=\mathbf{z}_{1: d}$
    • $\mathbf{x}_{d+1: n}=\mathbf{z}_{d+1: n} \odot \exp \left(\alpha_{\theta}\left(\mathbf{z}_{1: d}\right)\right)+\mu_{\theta}\left(\mathbf{z}_{1: d}\right)$
  • 反向映射$\mathbf x \mapsto \mathbf z$:

    • $\mathbf{z}_{1: d}=\mathbf{x}_{1: d}$
    • $\mathbf{z}_{d+1: n}=\left(\mathbf{x}_{d+1: n}-\mu_{\theta}\left(\mathbf{x}_{1: d}\right)\right) \odot\left(\exp \left(-\alpha_{\theta}\left(\mathbf{x}_{1: d}\right)\right)\right)$
  • 前向映射的雅克比矩阵为:

采样效果如下:

Autoregressive models as flow models

  • 考虑高斯自回归模型:

    其中$i>1$

  • 该模型的采样方式如下:

    • 对$i=1,\ldots,n$采样$u_{i} \sim \mathcal{N}(0,1)$
    • 令$x_{1}=\exp \left(\alpha_{1}\right) u_{1}+\mu_{1}$。计算$\mu_{2}\left(x_{1}\right), \alpha_{2}\left(x_{1}\right)$
    • 令$x_{2}=\exp \left(\alpha_{2}\right) u_{2}+\mu_{2}$。计算$\mu_{3}\left(x_{1}, x_{2}\right), \alpha_{3}\left(x_{1}, x_{2}\right)$
    • 以此类推
  • Flow解释:通过可逆转换($\mu_{i}(\cdot), \alpha_{i}(\cdot)$)将样本从标准高斯$\left(u_{1}, u_{2}, \dots, u_{n}\right)$转换为从模型$\left(x_{1}, x_{2}, \ldots, x_{n}\right)$生成的样本。

Masked Autoregressive Flow (MAF)

  • 前向映射$\mathbf u \mapsto \mathbf x$(序列化):
    • 令$x_{1}=\exp \left(\alpha_{1}\right) u_{1}+\mu_{1}$。计算$\mu_{2}\left(x_{1}\right), \alpha_{2}\left(x_{1}\right)$
    • 令$x_{2}=\exp \left(\alpha_{2}\right) u_{2}+\mu_{2}$。计算$\mu_{3}\left(x_{1}, x_{2}\right), \alpha_{3}\left(x_{1}, x_{2}\right)$
    • 采样时间复杂度为$O(n)$

  • 反向映射$\mathbf x \mapsto \mathbf u$(并行):
    • 计算全部$\mu_{i}, \alpha_{i}$(并行化,利用MADE的方法)
    • 令$u_{1}=\left(x_{1}-\mu_{1}\right) / \exp \left(\alpha_{1}\right)$
    • 令$u_{2}=\left(x_{2}-\mu_{2}\right) / \exp \left(\alpha_{2}\right)$

Inverse Autoregressive Flow (IAF)

  • 前向映射$\mathbf u \mapsto \mathbf x$(并行):
    • 采样$u_{i} \sim \mathcal{N}(0,1),i=1,\ldots,n$
    • 计算$\mu_i,\alpha_i$
    • 令$x_{1}=\exp \left(\alpha_{1}\right) u_{1}+\mu_{1}$
    • 令$x_{2}=\exp \left(\alpha_{2}\right) u_{2}+\mu_{2}$
  • 反向映射$\mathbf x \mapsto \mathbf u$(序列化):
    • 令$u_{1}=\left(x_{1}-\mu_{1}\right) / \exp \left(\alpha_{1}\right)$,计算$\mu_{2}\left(u_{1}\right), \alpha_{2}\left(u_{1}\right)$
    • 令$u_{2}=\left(x_{2}-\mu_{2}\right) / \exp \left(\alpha_{2}\right)$,计算$\mu_{3}\left(u_{1}, u_{2}\right), \alpha_{3}\left(u_{1}, u_{2}\right)$
  • 采样很快,但是计算似然函数比较慢。

IAF vs. MAF

  • 计算权衡
    • MAF:计算似然函数较快,缓慢采样
    • IAF:快速采样,计算似然函数较慢
  • MAF更适合基于MLE,密度估计的训练
  • IAF更适合实时生成

Parallel Wavenet

现在考虑将两者的优势结合,其思路为训练一个teacher$(s)$和一个student$(t)$模型,具体方式如下:

  • 训练
    • 步骤1:通过MLE训练教师模型(MAF)
    • 步骤2:训练学生模型(IAF)以最大程度地减少与老师的KL散度
  • 测试:使用学生模型
  • 结果:采样速度非常快

其中KL散度定义为

Summary of Normalizing Flow Models

  • 通过变量变换将简单分布转换为更复杂的分布
  • 变换的雅可比行列式要能高效计算
  • 正反变换中的计算权衡