Lecture3 Flow Model
上一节的Autoregressive Model主要探讨的是discrete的数据 x x x,那么随之而来的问题就是连续数据怎么处理。对于连续的 x ∈ R n x \in R^n x∈Rn,我们依然希望模型能够做到以下这几点:
- 学习到数据潜在的分布 p θ ( x ) p_{\theta}(x) pθ(x)
- 对于新的数据 x x x,能够得到相应的 p θ ( x ) p_{\theta}(x) pθ(x)
- 能够根据 p θ ( x ) p_{\theta}(x) pθ(x)进行采样
- 能够得到有意义的representation
一个比较直接能想到的方法是利用混合高斯分布来进行拟合,然而,当数据的维度非常高的时候(比如图像数据 28 × 28 × 3 28\times28\times3 28×28×3),mixture of Gaussian效果并不理想。下图就是一个用混合高斯来生成狗狗图像的例子,可以看到生成的结果很差。
而Flow Model是比较经典的模型之一,我们一步一步来看他是怎么拟合连续数据分布的。
1-D Flow
我们首先从一维的简单情况入手。Flow Model的做法是,我们不去直接输出 p θ ( x ) p_{\theta}(x) pθ(x),而是生成一个 z = f θ ( x ) z=f_{\theta}(x) z=fθ(x)。而这个 z z z满足 z ∼ p Z ( z ) z \sim p_{Z}(z) z∼pZ(z), p Z ( z ) p_{Z}(z) pZ(z)是我们可以指定的。
这整个 x → z x \rightarrow z x→z的过程就叫做一个flow。特别的,当 z ∼ N ( 0 , 1 ) z \sim N(0,1) z∼N(0,1)的时候,我们把它叫做Normalizing Flow。
Train
下面看如何来train,方法还是maximize log-likelihood:
m
a
x
θ
∑
i
log
p
θ
(
x
(
i
)
)
max_{\theta} \sum_{i}\log p_{\theta}(x^{(i)})
maxθi∑logpθ(x(i))
但是由于我们现在的输出是
z
z
z而不是
p
θ
(
x
)
p_{\theta}(x)
pθ(x),因此不能直接使用maximize log-likelihood。接下来的部分需一些数学推导。
我们已知
z
=
f
θ
(
x
)
z=f_{\theta}(x)
z=fθ(x),而还有一个比较隐蔽的等式关系是:
p
(
x
)
d
x
=
p
(
z
)
d
z
p(x)dx=p(z)dz
p(x)dx=p(z)dz。这个的原因是
z
z
z其实是对
x
x
x进行了某种仿射变换得到的结果,考虑在
x
x
x和
z
z
z的方向上各取一个极小量
d
x
dx
dx和
d
z
dz
dz,我们需要保证变化量一样,因此这个等式必须成立。有了这个等式以后,我们把
z
z
z代入就得到:
p
θ
(
x
)
=
p
(
f
θ
(
x
)
)
∣
d
f
θ
(
x
)
d
x
∣
p_{\theta}(x)\ =\ p(f_{\theta}(x))|\frac{df_{\theta}(x)}{dx}|
pθ(x) = p(fθ(x))∣dxdfθ(x)∣
这个过程叫做Change of Variable。得到了
p
θ
(
x
)
p_{\theta}(x)
pθ(x)关于
z
z
z的表示,我们就可以应用最大似然法进行训练了:
m
a
x
θ
∑
i
log
p
θ
(
x
(
i
)
)
=
m
a
x
θ
log
p
(
f
θ
(
x
(
i
)
)
)
+
log
∣
d
f
θ
(
x
(
i
)
)
d
x
∣
max_{\theta}\ \sum_{i}\log p_{\theta}(x^{(i)})\ =\ max_{\theta}\ \log p(f_{\theta}(x^{(i)}))\ +\ \log |\frac{df_{\theta}(x^{(i)})}{dx}|
maxθ i∑logpθ(x(i)) = maxθ logp(fθ(x(i))) + log∣dxdfθ(x(i))∣
但是这里要注意,我们的
f
θ
f_{\theta}
fθ必须是differentiable的。
Sample
sample比较简单,我们首先从 p Z ( z ) p_{Z}(z) pZ(z)sample出一个 z z z,然后 x = f θ − 1 ( z ) x=f^{-1}_{\theta}(z) x=fθ−1(z)。但是这里 f θ f_{\theta} fθ又多了一个条件,就是必须是invertible的。
上图是一个简单的例子,我们指定的 p Z ( z ) p_{Z}(z) pZ(z)是一个均匀分布,可以看到训练后 z z z的分布确实与均匀分布比较接近。
现在我们的 f θ f_{\theta} fθ有两个要求:differentiable & invertible,接下来的任务自然是想什么样的函数符合这两点。我们可以考虑Cumulative Distribution Function (CDF),这个函数是单调递增的,并且是连续的,因此符合上述两个条件。但是实际情况下,我们通常会采用neural network的模型来作为我们的 f θ f_{\theta} fθ,那么如果我们能保证每一层都是一个合法的flow,整个网络就会是一个flow了。如果使用NN,那么differentiable自动满足了,唯一要考虑的就是invertible的问题。
N-D Flow
之前提到mixture of Gaussian的一个问题就是不能处理高维数据,我们介绍了简单的1-D Flow,下面来看general的情况。
Autoregressive Flow
Flow模型也可以是Autoregressive的,基本的形式就是
x
1
∼
p
θ
(
x
1
)
z
1
=
f
θ
(
x
1
)
x
1
=
f
θ
−
1
(
z
1
)
x
2
∼
p
θ
(
x
2
∣
x
1
)
z
2
=
f
θ
(
x
2
;
x
1
)
x
2
=
f
θ
−
1
(
z
2
;
x
1
)
x
3
∼
p
θ
(
x
3
∣
x
1
,
x
2
)
z
3
=
f
θ
(
x
3
;
x
1
,
x
2
)
x
3
=
f
θ
−
1
(
z
3
;
x
1
,
x
2
)
x_1\ \sim\ p_{\theta}(x_1) \ \ \ \ \ \ z_1\ =\ f_{\theta}(x_1)\ \ \ \ \ \ x_1\ =\ f^{-1}_{\theta}(z_1) \\ x_2\ \sim\ p_{\theta}(x_2|x_1) \ \ \ \ \ \ z_2\ =\ f_{\theta}(x_2;x_1)\ \ \ \ \ \ x_2\ =\ f^{-1}_{\theta}(z_2;x_1) \\ x_3\ \sim\ p_{\theta}(x_3|x_1,x_2) \ \ \ \ \ \ z_3\ =\ f_{\theta}(x_3;x_1,x_2)\ \ \ \ \ \ x_3\ =\ f^{-1}_{\theta}(z_3;x_1,x_2) \\
x1 ∼ pθ(x1) z1 = fθ(x1) x1 = fθ−1(z1)x2 ∼ pθ(x2∣x1) z2 = fθ(x2;x1) x2 = fθ−1(z2;x1)x3 ∼ pθ(x3∣x1,x2) z3 = fθ(x3;x1,x2) x3 = fθ−1(z3;x1,x2)
这种形式是和之前基本一致的,只不过变成了auto regressive的结构
Inverse Autoregressive Flow
我们以可以把上面的结构进行一个反转,
x
→
z
x \rightarrow z
x→z使用sampling的结构,
z
→
x
z \rightarrow x
z→x使用计算log-likelihood的结构。
z
1
=
f
θ
−
1
(
x
1
)
x
1
=
f
θ
(
z
1
)
z
2
=
f
θ
−
1
(
x
2
;
z
1
)
x
2
=
f
θ
(
z
2
;
z
1
)
z
3
=
f
θ
−
1
(
x
3
;
z
1
,
z
2
)
x
3
=
f
θ
(
z
3
;
z
1
,
z
2
)
z_1\ =\ f^{-1}_{\theta}(x_1) \ \ \ \ \ \ x_1\ =\ f_{\theta}(z_1) \\ z_2\ =\ f^{-1}_{\theta}(x_2;z_1)\ \ \ \ \ \ x_2\ =\ f_{\theta}(z_2;z_1) \\ z_3\ =\ f^{-1}_{\theta}(x_3;z_1,z_2)\ \ \ \ \ \ x_3\ =\ f_{\theta}(z_3;z_1,z_2) \\
z1 = fθ−1(x1) x1 = fθ(z1)z2 = fθ−1(x2;z1) x2 = fθ(z2;z1)z3 = fθ−1(x3;z1,z2) x3 = fθ(z3;z1,z2)
其实就是把
x
x
x和
z
z
z做了一个互换。这样的形式就叫做Inverse Autoregressive Flow (IAF)
AF和IAF各有优缺点,在Autoregressive Model中我们提到sampling的过程是比较慢的,因为要等前面的先生成出来。我们可以看到AF中sampling的过程是autoregressive的,因此AF是slow sampling,但是evaluate p ( x ) p(x) p(x)是快的,因此fast evalution。再看IAF,由于我们的 z z z是服从于一个已知的分布 p Z ( z ) p_{Z}(z) pZ(z)的,所以IAF的sampling是很快的,因为我们可以获得 z 1 , z 2 , z 3 z_1,z_2,z_3 z1,z2,z3然后sampling的过程是可以parallel的,但是train的过程变慢了,因为 x → z x \rightarrow z x→z的过程现在是autoregressive的。总结一下:
- AF:slow sampling,fast evaluation of p ( x ) p(x) p(x)
- IAF:fast sampling,slow training on log-likelihood
RealNVP
当数据来到了高维,我们再来回顾我们的目标函数:
m
a
x
θ
∑
i
log
p
θ
(
x
(
i
)
)
=
m
a
x
θ
log
p
(
f
θ
(
x
(
i
)
)
)
+
log
∣
d
f
θ
(
x
(
i
)
)
d
x
∣
max_{\theta}\ \sum_{i}\log p_{\theta}(x^{(i)})\ =\ max_{\theta}\ \log p(f_{\theta}(x^{(i)}))\ +\ \log |\frac{df_{\theta}(x^{(i)})}{dx}|
maxθ i∑logpθ(x(i)) = maxθ logp(fθ(x(i))) + log∣dxdfθ(x(i))∣
把最后一项拿出来并考虑一般形式
∣
d
f
θ
(
x
)
d
x
∣
|\frac{df_{\theta}(x)}{dx}|
∣dxdfθ(x)∣
那么当
x
∈
R
n
x \in R^{n}
x∈Rn时,
d
z
d
x
\frac{dz}{dx}
dxdz应该是一个Jacobian matrix,而我们计算的是他的determinant。那对于
f
θ
f_{\theta}
fθ的第三个条件也随之到来,我们希望这个determinant是容易计算的。
Flow Composition
Flow的一个性质是可以compose,比如
x
→
f
1
→
f
2
→
⋯
→
f
k
→
z
x \rightarrow f_1 \rightarrow f_2 \rightarrow \dots \rightarrow f_k \rightarrow z
x→f1→f2→⋯→fk→z,train的过程可以表示为
z
=
f
k
∘
⋯
∘
f
1
(
x
)
z\ =\ f_k \circ \dots \circ f_1(x)
z = fk∘⋯∘f1(x),sampling的过程可以表示为
x
=
f
1
−
1
∘
⋯
∘
f
k
−
1
(
z
)
x\ =\ f^{-1}_{1}\circ \dots \circ f^{-1}_{k}(z)
x = f1−1∘⋯∘fk−1(z)。而training objective就改写为:
m
a
x
θ
log
p
(
f
θ
(
x
(
i
)
)
)
+
∑
j
=
1
k
log
∣
d
f
j
d
f
j
−
1
(
x
(
i
)
)
∣
max_{\theta}\ \log p(f_{\theta}(x^{(i)}))\ +\ \sum_{j=1}^{k}\log |\frac{df_{j}}{df_{j-1}}(x^{(i)})|
maxθ logp(fθ(x(i))) + j=1∑klog∣dfj−1dfj(x(i))∣
导数那里要用到chain rule
Affine Flow
Flow的参数可以用一个invertible矩阵 A A A和一个向量 b b b来表示, f ( x ) = A − 1 ( x − b ) f(x)\ =\ A^{-1}(x-b) f(x) = A−1(x−b)。sampling就以可以表示为 x = A z + b x\ =\ Az + b x = Az+b, z ∼ N ( 0 , 1 ) z \sim N(0,1) z∼N(0,1)。由于 z z z服从的是一个高斯分布,因此affine flow也可以叫做multivariate Gaussian。
Elementwise Flow
element-wise flow指的是每个variable
x
i
x_i
xi都通过独立的flow
f
θ
(
x
1
,
x
2
,
…
,
x
d
)
=
(
f
θ
(
x
1
)
,
f
θ
(
x
2
)
,
…
,
f
θ
(
x
d
)
)
f_{\theta}(x_1,x_2,\dots,x_d)\ =\ (f_{\theta}(x_1),f_{\theta}(x_2),\dots,f_{\theta}(x_d))
fθ(x1,x2,…,xd) = (fθ(x1),fθ(x2),…,fθ(xd))
那么
d
z
d
x
=
d
i
a
g
(
f
θ
′
(
x
1
)
,
…
,
f
θ
′
(
x
d
)
)
=
∏
i
=
1
d
f
θ
′
(
x
i
)
\frac{dz}{dx}\ =\ diag(f'_{\theta}(x_1),\dots,f'_{\theta}(x_d)) \\=\prod_{i=1}^{d}f'_{\theta}(x_i)
dxdz = diag(fθ′(x1),…,fθ′(xd))=i=1∏dfθ′(xi)
element-wise的flow很方便evaluate
RealNVP
下面来看RealNVP是如何解决
f
θ
f_{\theta}
fθ三个要求的。作者把
x
x
x分成两个部分
x
1
:
d
/
2
,
x
d
/
2
:
d
x_{1:d/2},x_{d/2:d}
x1:d/2,xd/2:d,然后定义如下的mapping
z
1
:
d
/
2
=
x
1
:
d
/
2
z
d
/
2
:
d
=
x
d
/
2
:
d
⋅
s
θ
(
x
1
:
d
/
2
)
+
t
θ
(
x
1
:
d
/
2
)
z_{1:d/2}\ =\ x_{1:d/2}\\ z_{d/2:d}\ =\ x_{d/2:d} \cdot s_{\theta}(x_{1:d/2}) + t_{\theta}(x_{1:d/2})
z1:d/2 = x1:d/2zd/2:d = xd/2:d⋅sθ(x1:d/2)+tθ(x1:d/2)
同时利用到了上面介绍的三点:coupling,affine,和element-wise。上面的
s
θ
s_{\theta}
sθ和
t
θ
t_{\theta}
tθ可以是任意的neural net并且是element-wise的
Differentiable
∂ z ∂ x = [ I 0 ∂ z d / 2 : d ∂ x 1 : d / 2 d i a g ( s θ ( x 1 : d / 2 ) ) ] \frac{\partial{z}}{\partial{x}}\ =\ \left[\begin{matrix} I & 0 \\ \frac{\partial{z_{d/2:d}}}{\partial{x_{1:d/2}}} & diag(s_{\theta}(x_{1:d/2})) \end{matrix}\right] ∂x∂z = [I∂x1:d/2∂zd/2:d0diag(sθ(x1:d/2))]
Invertible
x 1 : d / 2 = z 1 : d / 2 x d / 2 : d = z d / 2 : d − t θ ( x 1 : d / 2 ) s θ ( x 1 : d / 2 ) x_{1:d/2}\ =\ z_{1:d/2}\\ x_{d/2:d}\ =\ \frac{z_{d/2:d}-t_{\theta}(x_{1:d/2})}{s_{\theta}(x_{1:d/2})} x1:d/2 = z1:d/2xd/2:d = sθ(x1:d/2)zd/2:d−tθ(x1:d/2)
Jacobian Determinant
∣ d e t d z d x ∣ = d i a g ( s θ ( x 1 : d / 2 ) ) = ∏ k = 1 d / 2 s θ ( x k ) |det\frac{dz}{dx}|\ =\ diag(s_{\theta}(x_{1:d/2}))\\ =\prod_{k=1}^{d/2}s_{\theta}(x_{k}) ∣detdxdz∣ = diag(sθ(x1:d/2))=k=1∏d/2sθ(xk)
如此一来,我们的neural net结构就不受任何限制了,因为上面的函数完美的符合了我们的要求并且对 s θ s_{\theta} sθ和 t θ t_{\theta} tθ没有任何限制。
Checkerboard Partition
根据上述的函数,另一需要考虑的事情就是如何划分 x x x,文中提出了checkerboard partition,就是间隔分割
这样的分割能够让模型获取到更多的信息,因为函数中 x d / 2 : d x_{d/2:d} xd/2:d是依赖于 x 1 : d / 2 x_{1:d/2} x1:d/2的,因此这两个部分的相关性越强自然越好。