CS236 Deep Generative Models Lecture 8
课程主页: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
- 通过变量变换将简单分布转换为更复杂的分布
- 变换的雅可比行列式要能高效计算
- 正反变换中的计算权衡