赞
踩
之前的生成模型的问题
component-by-component问题:什么是最好的顺序;生成的慢
VAE问题:优化的是lower bound,不是最终的目的
GAN问题:训练不稳定
generator的问题
G是一个网络,定义了一个概率分布
比如:z是来自于Normal Distribution,但是得到了p是个其他的分布
我们希望这个Pg和真实数据的分布越接近越好
可以用最大似然函数的方式让它接近。
Pg通常比较复杂,可以用flow-based model来直接优化目标。
右下角表示两者的关系。
determinant的含义:高维空间中的体积
z的分布是上图,z的分布是下图
探究他们之间的关系,就是研究generator
例子:z的分布是这样的
x=2z+1,那么px的分布是下面这样的。
p(x)=1/2*pie(z)
在更复杂的情况下:
在deltaz的情况下,因为非常小,可以视为uniform的分布。
蓝色方块和绿色方块有相同的面积。
要加绝对值,因为dz/dx可能为正也可能为负
在二维的情况下
假设做image的生成,输入的z也应该是1001003的,但是不能保证G可逆,G的能力是有限的。
一个G不够,可以加更多吗?
如何训练呢?
训练时,训练G-1,实际生成时使用G。
pie是Normal分布,所以使得zi最小,值最大。但是如果z总是0的话,JG-1就总是0,后面的项就会非常大
使用coupling layer,被用在两个知名的flow-base模型NICE和NVP中
把z拆成两组,前d维和后面的部分,x的前d维等于z的前d维直接复制过去。
用一个functionF把前d维变化成后面的维数,另一个function也变成后面的维数
求inverse也比较简单,看红线就知道
求jacobian的determinant可以看图,非常巧妙。
左上角的是I,右上角,因为浅绿色和浅蓝色的没有关系,所以是0,左下角的没意义,因为求determinant时右上角是O,可以视为左上角和右下角的乘积。右下角的是对角线的。
因为只有对角线的有关系,其他的没有关系。
把coupling layer叠起来,编程一个完整的网络
但是有个问题,如果前半段如果都是直接复制的话,等于最终什么都没有做。
所以要做一些手脚,比如下面的做法。
如果做的是图像的生成的话,拆法有两种,一是根据横轴和纵轴来分,二是根据层来拆。
或者用convolution的方法,比如GLOW。
w可以shuffle不同的channel。w可以视为一个G。
得到的jacobian是下面的
demo
glow的更多做法
语音合成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。