L3 Flow Model

Lecture3 Flow Model

上一节的Autoregressive Model主要探讨的是discrete的数据 x x x,那么随之而来的问题就是连续数据怎么处理。对于连续的 x ∈ R n x \in R^n xRn,我们依然希望模型能够做到以下这几点:

  1. 学习到数据潜在的分布 p θ ( x ) p_{\theta}(x) pθ(x)
  2. 对于新的数据 x x x,能够得到相应的 p θ ( x ) p_{\theta}(x) pθ(x)
  3. 能够根据 p θ ( x ) p_{\theta}(x) pθ(x)进行采样
  4. 能够得到有意义的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) zpZ(z) p Z ( z ) p_{Z}(z) pZ(z)是我们可以指定的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vAb55KOo-1672627300175)(L3 Flow Model.assets/image-20230101212442282.png)]

这整个 x → z x \rightarrow z xz的过程就叫做一个flow。特别的,当 z ∼ N ( 0 , 1 ) z \sim N(0,1) zN(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θilogpθ(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θ ilogpθ(x(i)) = maxθ logp(fθ(x(i))) + logdxdfθ(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的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMs7cfXF-1672627300176)(L3 Flow Model.assets/image-20230101221241020.png)]

上图是一个简单的例子,我们指定的 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θ(x2x1)      z2 = fθ(x2;x1)      x2 = fθ1(z2;x1)x3  pθ(x3x1,x2)      z3 = fθ(x3;x1,x2)      x3 = fθ1(z3;x1,x2)
这种形式是和之前基本一致的,只不过变成了auto regressive的结构

Inverse Autoregressive Flow

我们以可以把上面的结构进行一个反转, x → z x \rightarrow z xz使用sampling的结构, z → x z \rightarrow x zx使用计算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 xz的过程现在是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θ ilogpθ(x(i)) = maxθ logp(fθ(x(i))) + logdxdfθ(x(i))
把最后一项拿出来并考虑一般形式
∣ d f θ ( x ) d x ∣ |\frac{df_{\theta}(x)}{dx}| dxdfθ(x)
那么当 x ∈ R n x \in R^{n} xRn时, 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 xf1f2fkz,train的过程可以表示为 z   =   f k ∘ ⋯ ∘ f 1 ( x ) z\ =\ f_k \circ \dots \circ f_1(x) z = fkf1(x),sampling的过程可以表示为 x   =   f 1 − 1 ∘ ⋯ ∘ f k − 1 ( z ) x\ =\ f^{-1}_{1}\circ \dots \circ f^{-1}_{k}(z) x = f11fk1(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=1klogdfj1dfj(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) = A1(xb)。sampling就以可以表示为 x   =   A z + b x\ =\ Az + b x = Az+b z ∼ N ( 0 , 1 ) z \sim N(0,1) zN(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=1dfθ(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:dsθ(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] xz = [Ix1:d/2zd/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:dtθ(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=1d/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的,因此这两个部分的相关性越强自然越好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值