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的仿射变换得到。

posted @ 2025-07-05 10:34  爱露查  阅读(20)  评论(0)    收藏  举报