FLOW解读
Flow-based Model
区别于GAN,基于流的生成模型明确的学习了真实数据的概率密度函数,这个模型显式地学习了数据分布,能够有效地完成许多下游任务。
数学基础:
1.Jacobian:对于输入x,输出f(x)的雅可比矩阵为:
\[ \mathbf{J} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \dots & \frac{\partial f_1}{\partial x_n} \\[6pt] \vdots & \ddots & \vdots \\[6pt] \frac{\partial f_m}{\partial x_1} & \dots & \frac{\partial f_m}{\partial x_n} \\[6pt] \end{bmatrix}
\]
2.Determinant:要先掌握行列式的基本运算
\[\det M = \det \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & & \vdots \\ a_{n1} & a_{n2} & \dots & a_{nn} \\ \end{bmatrix} = \sum_{j_1 j_2 \dots j_n} (-1)^{\tau(j_1 j_2 \dots j_n)} a_{1j_1} a_{2j_2} \dots a_{nj_n}
\]
3.change of variable theorem:变量变换定理,这里直接列出多维情况下的结论(对于x=f(z)):
\[P(x)|det(J_f)|=P(z)
\]
模型结构
模型的目标是使得预测出x的概率最大,也就是:
\[G^*=arg~\displaystyle\max_G\sum~log~P_G(x^i)
\]
这里的z是从标准正态分布中采样得到的(这一点和GAN一样),所以分布可以表示为π(z),所以可以得到
\[log~P_G(x^i)=log~π(G^-1(x^i))+log|det(J_{G^-1})|
\]
由于一个生成器G可能无法满足完全拟合从正态分布采样到正式数据x的关系,所以flow-based模型里面一般包含有多个生成器G,最终的目标函数为:
\[log~P_k(x^i)=log~π(z^i)+\sum_{h=1}^klog|det(J_{G_k^-1})|
\]
由于最终训练的时候要从真实数据x反推到z,所以这些生成器实际上是一系列可逆的双射变换函数来实现回归,这也方便反转的计算。具体为:
step1:保持前d个维度不变,也就是前d个维度z=x
step2:在后面的维度,由z仿射变换得到x,其中仿射变换的参数都是前d个维度的函数
这也使得生成器的雅可比行列式变得容易计算:
\[ \mathbf{J} = \begin{bmatrix} \mathbb{I}_d & \mathbf{0}_{d\times(D-d)} \\[5pt] \frac{\partial \mathbf{y}_{d+1:D}}{\partial \mathbf{x}_{1:d}} & \text{diagonal} \end{bmatrix}
\]
这里的雅可比行列式就等于后面step2维度中所有仿射变换的权重相乘(就是对角线)。
由于在真实训练的时候,这样设计网络往往会出现问题,所以提出了Coupling Layer,具体为:对部分生成器的结构进行交换,后面的维度保持不变,前面d个维度的x由z的仿射变换得到。

浙公网安备 33010602011771号