生成模型笔记(八):Flow-Based Models

困于心,衡于虑,而后作;征于色,发于声,而后喻。

第八部分 Flow-Based Model

参考内容

https://jmtomczak.github.io/blog/3/3_flows.html
https://blog.csdn.net/a312863063/article/details/94306107
https://blog.csdn.net/shaoyue1234/article/details/102464867
NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION

8.1 概率基础

上一部分总结的自回归模型是通过乘法法则直接求出 P ( X ) P(X) P(X) ,那么有没有别的直接建模 P ( X ) P(X) P(X) 的方法呢?回顾一下概率论基础的部分,变量替换公式也可以达到这个效果。
f : R D → R D f:\Bbb{R}^D \to \Bbb{R}^D f:RDRD 为可逆变换, x = f ( z ) , z = f − 1 ( x ) x = f(z), z = f^{-1}(x) x=f(z),z=f1(x) X X X 的概率密度为 p x ( x ) p_x(x) px(x) z z z 的概率密度为 p z ( z ) p_z(z) pz(z) 。根据变量替换公式:
p x ( x ) = p z ( z = f − 1 ( x ) ) ∣ ∂ f − 1 ( x ) ∂ x ∣ p_x(x) = p_z(z = f^{-1}(x))|\frac{\partial f^{-1}(x)}{\partial x}| px(x)=pz(z=f1(x))xf1(x)
其中
∣ ∂ f − 1 ( x ) ∂ x ∣ = ∣ d e t   J f − 1 ( x ) ∣ = ∣ d e t   J f ( x ) ∣ − 1 |\frac{\partial f^{-1}(x)}{\partial x}| = |det \textbf{ J}_{f^{-1}}(x)| = |det \textbf{ J}_{f}(x)|^{-1} xf1(x)=det Jf1(x)=det Jf(x)1
即Jacobian矩阵的行列式的绝对值。
于是可得:
p x ( x ) = p z ( z = f − 1 ( x ) ) ∣ d e t   J f ( x ) ∣ − 1 p_x(x) = p_z(z = f^{-1}(x))|det \textbf{ J}_{f}(x)|^{-1} px(x)=pz(z=f1(x))det Jf(x)1

8.2 Flow-Based Model

流模型(Flow-Based Model)采用的思想正是变量替换公式。通过一系列的可逆变换 f k : R D → R D f_k:\Bbb{R}^D \to \Bbb{R}^D fk:RDRD ,先将未知的分布 p x ( x ) p_x(x) px(x) 变换到一个已知的分布 p z 0 ( z 0 ) p_{z_0}(z_0) pz0(z0) 上,比如可以假设 z ∼ N ( z ∣ 0 , I ) z \thicksim N(z | 0, I) zN(z∣0,I) 即标准正态分布。那么通过逆变换就可以将 p z ( z ) p_z(z) pz(z) 变换回 p x ( x ) p_x(x) px(x)
p x ( x ) = p z 0 ( z 0 = f − 1 ( x ) ) ∏ i = 1 K ∣ d e t ∂ f i ( z i − 1 ) ∂ z i − 1 ∣ − 1 = p z 0 ( z 0 = f − 1 ( x ) ) ∏ i = 1 K ∣ J f i ( z i − 1 ) ∣ − 1 \begin{aligned} p_x(x) &= p_{z_0}(z_0 = f^{-1}(x)) \prod_{i=1}^K |det \frac{\partial f_i(z_{i-1})}{\partial z_{i-1}}|^{-1} \\ &= p_{z_0}(z_0 = f^{-1}(x)) \prod_{i=1}^K | \textbf{J}_{f_i}(z_{i-1})|^{-1} \end{aligned} px(x)=pz0(z0=f1(x))i=1Kdetzi1fi(zi1)1=pz0(z0=f1(x))i=1KJfi(zi1)1
在这里插入图片描述

8.3 可逆函数设计

为了设计可逆的神经网络,而且这个可逆变换的Jacobian矩阵需要容易计算,Flow模型设计了特殊的结构。

8.3.1 Coupling Layer:

将输入的 D D D 维向量,进行拆分即 x = [ x a , x b ] = [ x 1 : d , x d + 1 : D ] x = [x_a, x_b] = [x_{1:d}, x_{d+1:D}] x=[xa,xb]=[x1:d,xd+1:D] ,那么coupling layer要做的就是如下转换:
y a = x a y b = e x p ( s ( x a ) ) ⊙ x b + t ( x a ) \begin{aligned} y_a &= x_a \\ y_b &= exp(s(x_a)) \odot x_b + t(x_a) \end{aligned} yayb=xa=exp(s(xa))xb+t(xa)
其中 s ( ⋅ ) s(\cdot) s() t ( ⋅ ) t(\cdot) t() 可以是任意的神经网络,称作scaling和transition。这种coupling layer的变换是可逆的,
x a = y a x b = ( y b − t ( y a ) ) ⊙ e x p ( − s ( y a ) ) \begin{aligned} x_a &= y_a \\ x_b &= (y_b - t(y_a)) \odot exp(-s(y_a)) \end{aligned} xaxb=ya=(ybt(ya))exp(s(ya))
那么这个转换的Jacobian矩阵为:
J = [ I d × d 0 d × ( D − d ) ∂ y b ∂ x a d i a g ( e x p ( s ( x a ) ) ) ] d e t ( J ) = ∏ j − 1 D − d e x p ( s ( x a ) ) j = e x p ( ∑ j − 1 D − d s ( x a ) j ) \begin{aligned} J &= \begin{bmatrix} I_{d \times d} & 0_{d \times (D-d)} \\ \frac{\partial y_b}{\partial x_a} & diag(exp(s(x_a))) \end{bmatrix} \\ det(J) &= \prod_{j-1}^{D-d} exp(s(x_a))_j \\ &= exp(\sum_{j-1}^{D-d} s(x_a)_j) \end{aligned} Jdet(J)=[Id×dxayb0d×(Dd)diag(exp(s(xa)))]=j1Ddexp(s(xa))j=exp(j1Dds(xa)j)

Additive Coupling Layer

举个例子,一种比较特殊的Coupling Layer,叫Additive Coupling Layer,
y a = x a y b = x b + m ( x a ) \begin{aligned} y_a &= x_a \\ y_b &= x_b + m(x_a) \end{aligned} yayb=xa=xb+m(xa)
相应的逆变换就是
x a = y a x b = y b − t ( y a ) \begin{aligned} x_a &= y_a \\ x_b &= y_b - t(y_a) \end{aligned} xaxb=ya=ybt(ya)
这种变换的特殊之处在于它的Jacobian矩阵
J = [ I d × d 0 d × ( D − d ) ∂ y b ∂ x a I ( D − d ) × ( D − d ) ) ] d e t ( J ) = 1 \begin{aligned} J &= \begin{bmatrix} I_{d \times d} & 0_{d \times (D-d)} \\ \frac{\partial y_b}{\partial x_a} & I_{(D-d) \times (D-d)}) \end{bmatrix} \\ det(J) &= 1 \end{aligned} Jdet(J)=[Id×dxayb0d×(Dd)I(Dd)×(Dd))]=1

8.3.2 Scaling Layer

对于Additive Coupling Layer这种,Jaccobian矩阵的行列式为1,如果想对它加入放缩变换怎么做,很简单乘上一个对角矩阵 S S S ,这也就是Scaling Layer。

8.4 目标函数

那么对于Flow模型,依然用极大似然来推导其优化的目标
argmax ⁡ θ P ( D ∣ θ ) = argmax ⁡ θ ∑ n l o g ( P ( x n ∣ θ ) ) + R e g u l a r i z a t i o n l o g ( P ( x ∣ θ ) ) = l o g ( P z ( z = f − 1 ( x ) ) ∏ i = 1 K ∣ J f i ( z i − 1 ) ∣ − 1 ) ) = l o g ( P z ( z = f − 1 ( x ) ) ) − ∑ i = 1 K ( l o g ( ∣ J f i ( z i − 1 ) ∣ ) ) \begin{aligned} \underset{\theta}{\operatorname{argmax}} P(\mathscr{D} | \theta) &= \underset{\theta}{\operatorname{argmax}} \sum_{n} log(P(\pmb{x_n} | \theta)) + Regularization \\ log(P(x | \theta)) &= log(P_z(z = f^{-1}(x)) \prod_{i=1}^K | \textbf{J}_{f_i}(z_{i-1})|^{-1})) \\ &= log(P_z(z = f^{-1}(x))) - \sum_{i=1}^K(log(| \textbf{J}_{f_i}(z_{i-1})|)) \\ \end{aligned} θargmaxP(Dθ)log(P(xθ))=θargmaxnlog(P(xnxnθ))+Regularization=log(Pz(z=f1(x))i=1KJfi(zi1)1))=log(Pz(z=f1(x)))i=1K(log(Jfi(zi1)))
如果取 z ∼ N ( 0 , I ) z \thicksim N(0, I) zN(0,I) ,那么目标的前半部分:
l o g ( P z ( z = f − 1 ( x ) ) ) = − D 2 l o g ( 2 π ) − 1 2 ∣ ∣ f − 1 ( x ) ∣ ∣ 2 log(P_z(z = f^{-1}(x))) = -\frac{D}{2} log(2 \pi) - \frac{1}{2} ||f^{-1}(x)||^2 log(Pz(z=f1(x)))=2Dlog(2π)21∣∣f1(x)2
一目了然,这个前半部分就是在约束从 x x x 经过转换后的 z z z 的分布要与标准正态分布尽可能的相同。

那么后半部分,根据Jacobian矩阵行列式的意义,就是在最大化 z z z 的分布空间到 x x x 分布空间的变化率。
怎么理解,比如现在假设两个随机变量, x ∼ U n i f ( 0 , 1 ) x \thicksim Unif(0,1) xUnif(0,1) 服从0到1的均匀分布, z ∼ U n i f ( 0 , 2 ) z \thicksim Unif(0,2) zUnif(0,2) 服从0到2的均匀分布,那么变换 z = 2 x z = 2x z=2x 就能完成两个分布的变换。此时 ∣ d e t J f ∣ = 2 |det J_f| = 2 detJf=2 就是变化率,因为是把小范围0-1的随机变量,扩到了0-2上,范围在扩大。
那么对于Flow来说, z ∼ N ( 0 , I ) z \thicksim N(0, I) zN(0,I) D D D 维的标准正态分布,那么就有 D D D 个自由度,但是我们的训练数据的 D D D 维之间是互相有关联的,自由度要小于 D D D 。也就是说,我们训练数据的分布空间的范围要比标准正态分布的空间要小,那么就需要增大这个变化率,好让训练数据空间经过可逆映射能够覆盖整个标准正态分布的空间。因为我们最后在利用Flow采样生成新的样本的时候,是要从整个标准正态分布中随机采样的。

8.5 一些补充观点

这里介绍的流模型称作离散流模型,之后会介绍连续流模型。
另外,Flow模型的目标也可以看做是在做变分推断。在这种观点下,x经过K个可逆变换得到的z的分布可以表示为 P ( z ∣ x ) P(z|x) P(zx) ,但是要得到精确分布并不容易,于是采用变分推断的思想,用一个已知的分布 P ( z ) P(z) P(z) ,比如标准正态分布,来逼近后验分布。在这种观点下,Flow的优化目标的前半部分就是在优化先验分布与后验分布之间的KL散度,也就是在最大化变分下界(ELBO)。其实这种变分的思想适用于很多其他模型,比如VAE等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值