Generative Model(VAE1)
Unspervised learning主要任务目标是发掘数据潜在有价值的结构,主要分为clustering,dimentionality reduction,feature learning, density estimation
Generative Model主要任务是给定一个数据集P(data),通过模型P(model)学习样本的分布,可以通过模型生成近似原样本分布的数据。主要属于density estimation范畴。
作用主要:
- 根据需求近似生成真实数据,想象空间非常大,这是一个富裕想象力与创造性的,比如生成马赛克,美颜,生成画作等,当然能生成的也是可以去掉的。
- 生成时间序列数据,可以用于强化学习
- 也可以用于feature learning等
按方法分类generative model,主要分为explicity and implicity density,这次主要介绍explicity的方法。
从定义上来说,explicity density就是我直接通过定义P(model),然后通过来最大化data likelihood求解P(model)。implicity density就是不直接定义P(model),但是模型可以sample出data。
然后根据定义的density确定的likelihood是否能直接给出求解方法,如果可以那就直接解呗,说明你定义了一个tractable density。
比如Fully visible belief nets的PixelRNN & CNN,按照每个像素定义每一张图的likelihood,用链式法则分解likelihood为给定先前的pixels当前pixel的条件概率乘积
看图中条件概率是很复杂,自然就可以想到用神经网络去做transformation,神经网络是很好的复杂函数的拟合器。重点是如果做这个conditional prob呢?
- generate image pixels starting from corner
- dependency on previous pixels modeled using an RNN(LSTM)
RNN很轻松就可以做成依赖关系,毕竟sequential model.
PixelRNN效果很好,但是缺点是比较慢,毕竟pixel by pixel sequential generation。
那么就出现了PixelCNN,和PixelRNN很像,只是用了CNN来做dependency on previous pixels,根据已经产生的局部块图(content region)来生成pixel。
PixelCNN
PixelCNN训练过程较快,但是生成图片一样的是sequential generation比较慢。
不得不说大神不论在算法还是应用都是很厉害的!这里只简单介绍,其实这个有很多精彩的地方!毕竟这里主要介绍VAE。
VAE
这里我决定给像我这样的小白讲讲variational autoencoder
先讲一下variational inference,为什么会有这个东西,预备知识如下
- information theory
information,entropy,differential entropy - KL Divergence
KL Divergence和lnp(x)关系 - Graphical Model
- Variational Inf
- information(I)是来衡量一个随机事件的信息量I = -logP(x),定义上直观理解,一个事件x发生的概率越大,其信息量越小,比如你本来就知道太阳明天会升起,那么我告诉你这个事件,其实并没有带来任何信息
- entropy/avg information
根据概率平均information,代表随机变量的平均信息量H = sum(P(x)*-logP(x)) - differential entropy
entropy适用于离散变量,连续变量的entropy叫differential entropy,求和换为积分就ok了 - KL Divergence/ Relative Entropy
它是通过entropy来衡量2个分布的距离,KL(p||q)代表根据p概率来衡量q和p的entropy差距,很自然就写出entropy(q) - entropy(p) = sum(-q(x)log(q(x)) - sum(-p(x)log(p(x)),刚提到是按照p的概率,所以写成 KL(p||q) = sum(-p(x)log(q(x)) - sum(-p(x)log(p(x)),按p的概率求和就ok了,整理写成KL(p||q) = sum(p(x)log[p(x)/q(x)])
KL Divergence两个性质:1.大于等于零 2. 不是对称的,不具备距离度量公理,但是其实更合理一点,在生活中! -
KL Divergence 和 lnP(x)
举个例子,假设现在有个分布P(x|z),我们不知道这个,所以想用一个分布q(z)来估计它,我们当然也不知q(z)是什么,先来估计吧。那很自然就可以想到用KL Divergence来衡量估计得好坏,KL Divergence刚提到是用来衡量两个分布差异的,越小说明分布差异越小(不得不写公式了) 这里得到了lower bound L,那为什么要用lower bound求解呢,那肯定是lower bound好求么。。一般情况下直接求KL是解不出来的,因为有个条件概率,我们比较好得到联合概率,下面具体说说
- Graphical Model
简答介绍一点,告诉你为什么条件概率比较难求,简单画个图吧 箭头代表依赖关系,给你这个图可以很容易写出联合概率分布,但是条件概率分母有积分,通常情况下是求不出来。
那怎么办呢?得到联合概率是否可以得到条件概率呢,不用计算积分呢?
Problem:不积分通过联合概率来求条件概率
Yes!不行还说什么,variational inference登场了!variational inference不是唯一的方法解决这个问题,主要还有
- MCMC:Metropolis hasting、Gibbs sampling
通过采样估计,更精确,计算时间较长 - Variational Inference
deterministic solution,精度较低,计算时间少 - Laplace Approximation
deterministic,精度很低,计算很快
这里重新回顾一下问题,我们想要估计p(z|x), 需要计算p(x),因为p(z|x)=p(x,z)/p(x)
,这里p(x)需要通过计算积分,通常是计算不出来的,所以我们想通过一个分布q(z)来近似计算p(z|x)。然后我们利用KL Divergence来使得q(z)逼近p(z|x),最后我们得到了个公式KL[q(z)||p(z|x)]-KL[q(z)||p(z,x)]=logp(x),因为x是给定的,等式右边不变,我们可以改变的只有q(z),目标为让第一项变小,因为计算不了条件概率,最小化KL[q(z)||p(z|x)]等价于最大化-KL[q(z)||p(z,x)],也就是我们的lower bound,这里没有条件概率!
结论:为了找到p(z|x),variational inference通过找一个q(z)来最大化lower bound L
到此终于说清楚了为什么要用variational inference,以及他是怎么做的!但是,找到这个q(z),仍然是一个难题,variational inference的作者好像也没有很好的路子。。。。
-
Variational Inference
作者提出了一个可以简化lower bound的方法,这里不得不写点公式了 1 2 3
没想到写了这么多,还没开始VAE,那就下次吧,上面的公式只是variational inference的求解过程,其实不重要,因为VAE,有自己的技巧。。。。