Flow-based Generative Model
文章为看视频Flow-Based Model-李宏毅的笔记
1.生成模型的分类
- Auto-regressive Model(Component-by-component)
- Variational Auto-encoder:优化的是一个下界
- Generative Adversarial Network
- Flow-based Model:
2.Flow-based Generative Model的数学原理
2.1Jacobian
x = f ( z ) x = f(z) x=f(z)
针对上述函数
f
f
f,它的Jacobian
是x的各项对z的各项求偏微分后组合得到的矩阵

针对函数
f
f
f 和
f
−
1
f^{-1}
f−1:
x
=
f
(
z
)
x = f(z)
x=f(z)
z = f − 1 ( x ) z = f^{-1}(x) z=f−1(x)
f
f
f 和
f
−
1
f^{-1}
f−1 是inverse function
,那么它们的Jacobian
也是inverse
的,即相乘得到
I
I
I(单位矩阵):
J
f
J
f
−
1
=
I
J_f J_{f{-1}}=I
JfJf−1=I
2.2Determinant
意义:将一个矩阵算出一个scalar,代表高维空间的体积
2.3Change of Variable Theorem
针对变化:
x
=
f
(
z
)
x = f(z)
x=f(z)
general的变量变化公式如下:
p
(
x
)
∣
d
e
t
(
J
f
)
∣
=
π
(
z
)
p(x)|det(J_f)| = \pi(z)
p(x)∣det(Jf)∣=π(z)
即:
p
(
x
)
=
π
(
z
)
∣
1
/
d
e
t
(
J
f
)
∣
=
π
(
z
)
∣
d
e
t
(
J
f
−
1
)
∣
p(x) = \pi(z) |1/det(J_f)| = \pi(z) |det(J_{f{-1}})|
p(x)=π(z)∣1/det(Jf)∣=π(z)∣det(Jf−1)∣
最终用的是:
p
(
x
)
=
π
(
z
)
∣
d
e
t
(
J
f
−
1
)
∣
p(x) = \pi(z) |det(J_{f{-1}})|
p(x)=π(z)∣det(Jf−1)∣
2.4Flow-based Model原理
Generator:
x
=
G
(
z
)
x = G(z)
x=G(z)
G
e
n
e
r
a
t
o
r
−
1
Generator^{-1}
Generator−1:
z
=
G
−
1
(
x
)
z = G^{-1}(x)
z=G−1(x)
根据变量变化公式:
p
G
(
x
)
=
π
(
z
)
∣
d
e
t
(
J
G
−
1
)
∣
p_G(x) = \pi(z)|det(J_{G^{-1}})|
pG(x)=π(z)∣det(JG−1)∣
取log(并将
z
=
G
−
1
(
x
)
z = G^{-1}(x)
z=G−1(x)代入得到):
l
o
g
p
G
(
x
)
=
l
o
g
π
(
G
−
1
(
x
)
)
+
l
o
g
∣
d
e
t
(
J
G
−
1
)
∣
logp_G(x) = log\pi(G^{-1}(x)) + log|det(J_{G^{-1}})|
logpG(x)=logπ(G−1(x))+log∣det(JG−1)∣
Flow-based Model要求:
G
∗
=
arg
max
G
∑
i
=
1
m
log
p
G
(
x
i
)
G^* = \arg\max_G \sum_{i=1}^{m} \log p_G(x^i)
G∗=argGmaxi=1∑mlogpG(xi)
其中
x
i
x^i
xi代表从真实分布
p
D
a
t
a
p_{Data}
pData采样得到的真实样本
再具体一些,我们得到的z满足均值为0,方差为1的多变量高斯分布,即z ~ $ N(0, I)$,即
p
Z
(
z
)
=
(
2
π
)
−
d
2
e
−
1
2
z
T
z
p_Z(z) = (2\pi)^{-\frac{d}{2}} e^{-\frac{1}{2} z^T z}
pZ(z)=(2π)−2de−21zTz
因此,计算x的Log-likelihood可以按照下述公式:
l
o
g
p
G
(
x
)
=
−
d
2
log
(
2
π
)
−
1
2
G
−
1
(
x
)
T
G
−
1
(
x
)
+
∑
l
=
1
L
log
∣
det
J
G
l
−
1
(
y
l
−
1
)
∣
logp_G(x) = -\frac{d}{2} \log(2\pi) - \frac{1}{2} G^{-1}(x)^T G^{-1}(x) + \sum_{l=1}^L \log \left| \det J_{G^{-1}_l}(y_{l-1}) \right|
logpG(x)=−2dlog(2π)−21G−1(x)TG−1(x)+l=1∑Llog
detJGl−1(yl−1)
其中,
y
0
=
x
∈
X
y_0 = x ∈ X
y0=x∈X,
y
L
=
z
∈
Z
y_L = z ∈Z
yL=z∈Z,
y
l
=
G
l
−
1
(
y
l
−
1
)
y_l = G^{-1}_l(y_{l-1})
yl=Gl−1(yl−1),其中
{
y
l
}
l
=
1
L
−
1
\{y_l\}^{L-1}_{l=1}
{yl}l=1L−1是
G
−
1
G^{-1}
G−1的中间输出。
其中,
z
=
G
−
1
(
x
)
z = G^{-1}(x)
z=G−1(x),公式也可以写成:
l
o
g
p
G
(
x
)
=
−
d
2
log
(
2
π
)
−
1
2
z
T
z
+
∑
l
=
1
L
log
∣
det
J
G
l
−
1
(
y
l
−
1
)
∣
logp_G(x) = -\frac{d}{2} \log(2\pi) - \frac{1}{2} z^Tz + \sum_{l=1}^L \log \left| \det J_{G^{-1}_l}(y_{l-1}) \right|
logpG(x)=−2dlog(2π)−21zTz+l=1∑Llog
detJGl−1(yl−1)
要确保G可逆,z和x的dimension是一样的(G可逆的必要不充分条件)
2.5多个G串联

2.6实际怎么训练
根据公式:
l
o
g
p
G
(
x
)
=
l
o
g
π
(
G
−
1
(
x
)
)
+
l
o
g
∣
d
e
t
(
J
G
−
1
)
∣
logp_G(x) = log\pi(G^{-1}(x)) + log|det(J_{G^{-1}})|
logpG(x)=logπ(G−1(x))+log∣det(JG−1)∣
我们要最大化
p
G
(
x
)
p_G(x)
pG(x),得到
G
∗
G^*
G∗:
G
∗
=
arg
max
G
∑
i
=
1
m
log
p
G
(
x
i
)
G^* = \arg\max_G \sum_{i=1}^{m} \log p_G(x^i)
G∗=argGmaxi=1∑mlogpG(xi)
其实只涉及到
G
−
1
G^{-1}
G−1,所以我们实际是训练
G
−
1
G^{-1}
G−1(
z
=
G
−
1
(
x
)
z = G^{-1}(x)
z=G−1(x)),
G
−
1
G^{-1}
G−1训练好之后,再把它反过来得到
G
G
G,去完成生成任务(
x
=
G
(
z
)
x = G(z)
x=G(z))

2.7Coupling Layer 和 C o u p l i n g L a y e r − 1 Coupling\ Layer^{-1} Coupling Layer−1
Coupling Layer 和 C o u p l i n g L a y e r − 1 Coupling\ Layer^{-1} Coupling Layer−1相当于G和 G − 1 G^{-1} G−1
Coupling Layer
相当于多个G串联时候的每一个G,是生成器Generator
Generator:由z算x(即:怎么算Coupling Layer
)

C o u p l i n g L a y e r − 1 Coupling\ Layer^{-1} Coupling Layer−1相当于多个 G − 1 G^{-1} G−1串联时候的每一个 G − 1 G^{-1} G−1
C
o
u
p
l
i
n
g
L
a
y
e
r
−
1
Coupling\ Layer^{-1}
Coupling Layer−1:由x算z(即:怎么算Coupling Layer
的inverse
,代表
G
−
1
G^{-1}
G−1)

2.8怎么算Coupling Layer的Jacobian

2.9堆叠Coupling Layer
直接堆Coupling Layer
会导致不变的高斯噪声部分会延续到最终结果中,所以不是直接堆叠。GLOW
中利用1x1Convolution
来交换channel
,然后coupling layer
就可以每次保留固定index
的channel
的信息,最终起到每次保留不同channel的信息,从而不会把高斯噪声带到最后。这里的1x1Convolution
也是生成器的一部分,所以也需要是可逆的,它的Jacobian
见右下角,(只有对角线为3x3
的W矩阵,其余为0,因为只有对着的绿色蓝色部分是互相有影响的,求偏微分有值,其余没有相对着的互相无影响,求偏微分为0),这个Jacobian的det值见左上橙色部分,为
d
e
t
(
W
)
d
∗
d
det(W)^{d*d}
det(W)d∗d
