Introduction
Generative Models
- Component-by-component (Auto-regressive Model): best order? slow generation
- Variational Auto-encoder: optimize a lower bound of maximum likelihood 和真实目标之间有差距
- GAN: unstable training
maximum likelihood $G^* = \arg \max \limits_G \sum\limits^m_{i=1}\log _G(x^i)$ 等价于 $min KL(P_{data}||P_G)$.
Flow-based model 直接优化目标函数。
数学背景
Jacobian Matrix
Determinant 行列式: 可以理解为二维中的面积,高维空间中的体积(绝对值)。逆矩阵的行列式是原矩阵的倒数,$det(J_f)=1/det(J_{f^{-1}})$.
Change of Variable Theorem
$\Delta x_{ij}$是$\Delta z_i$变化时$\Delta x_j$的变化量。
Flow-based Model
问题:
- Jacobian matrix可能很大,计算determinant运算量非常大 -> 和GAN, VAE不一样的地方,是输入的$z$和输出的$x$维度是一样的
- $G^{-1}$要容易计算,所以要对$G$的架构做一些限制 -> 能力有限 -> 用一串$G$
实际上是训练$G^{-1}$,而生成时使用$G$。
Coupling Layer: 被用于NICE (2014)和Real NVP (2015)。把输入分成两部分,一部分进行复制,另一部分进行变换。其中,$F$和$H$可以是任何变换。$z_{i \leq d} = x_i$, $z_{i>d}=\frac{x_i-\gamma_i}{\beta_i}$.
为什么左下角不重要?因为右上角是全0,整个矩阵的determinant就是左上角子矩阵和右下角子矩阵的积。左下角的矩阵每个元素的值和$F$和$H$有关,所以$F$和$H$可以是任何变换。右下角很好算,是一个线性变换求偏导,而且还是对角阵。
把Coupling Layer叠起来,变成一个完整的generator。不可以让某一部分一直简单地进行复制,所以叠的时候要让两部分交替进行复制和变换。对于图像来说,可以在像素空间上进行交替,也可以在通道上进行交替。
GLOW (2018)的$1 \times 1$ Convolution逐像素用$3 \times 3$的矩阵$W$来交换通道。$x = f(z) = Wz$,$W$一般来说是可逆的(随机初始化出不可逆的,也就是说Jacobian=0的矩阵概率是比较低的)。
GAN做语音生成效果不好。GLOW用来做语音生成的两篇文章:Parallel WaveNet (2017), WaveGLow (2018)