Unspervised learning主要任务目标是发掘数据潜在有价值的结构,主要分为clustering,dimentionality reduction,feature learning, density estimation

Generative Model主要任务是给定一个数据集P(data),通过模型P(model)学习样本的分布,可以通过模型生成近似原样本分布的数据。主要属于density estimation范畴。作用主要:
  • 根据需求近似生成真实数据,想像空间非常大,这是一个富裕想像力与创造性的,比如生成马赛克,美颜,生成画作等,当然能生成的也是可以去掉的。
  • 生成时间序列数据,可以用于强化学习
  • 也可以用于feature learning等
Generative Model

按方法分类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的条件概率乘积
Full visible belief network

看图中条件概率是很复杂,自然就可以想到用神经网路去做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 theoryinformation,entropy,differential entropy
  • KL DivergenceKL Divergence和lnp(x)关系
  • Graphical Model
  • Variational Inf
  1. information(I)是来衡量一个随机事件的信息量I = -logP(x),定义上直观理解,一个事件x发生的概率越大,其信息量越小,比如你本来就知道太阳明天会升起,那么我告诉你这个事件,其实并没有带来任何信息
  2. entropy/avg information根据概率平均information,代表随机变数的平均信息量H = sum(P(x)*-logP(x))
  3. differential entropyentropy适用于离散变数,连续变数的entropy叫differential entropy,求和换为积分就ok了
  4. 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. 不是对称的,不具备距离度量公理,但是其实更合理一点,在生活中!
  5. KL Divergence 和 lnP(x)

    举个例子,假设现在有个分布P(x|z),我们不知道这个,所以想用一个分布q(z)来估计它,我们当然也不知q(z)是什么,先来估计吧。那很自然就可以想到用KL Divergence来衡量估计得好坏,KL Divergence刚提到是用来衡量两个分布差异的,越小说明分布差异越小(不得不写公式了)

这里得到了lower bound L,那为什么要用lower bound求解呢,那肯定是lower bound好求么。。一般情况下直接求KL是解不出来的,因为有个条件概率,我们比较好得到联合概率,下面具体说说
  1. Graphical Model简答介绍一点,告诉你为什么条件概率比较难求,简单画个图吧

箭头代表依赖关系,给你这个图可以很容易写出联合概率分布,但是条件概率分母有积分,通常情况下是求不出来。那怎么办呢?得到联合概率是否可以得到条件概率呢,不用计算积分呢?Problem:不积分通过联合概率来求条件概率Yes!不行还说什么,variational inference登场了!variational inference不是唯一的方法解决这个问题,主要还有

  • MCMC:Metropolis hasting、Gibbs sampling通过采样估计,更精确,计算时间较长
  • Variational Inferencedeterministic solution,精度较低,计算时间少
  • Laplace Approximationdeterministic,精度很低,计算很快这里重新回顾一下问题,我们想要估计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的作者好像也没有很好的路子。。。。
  1. Variational Inference作者提出了一个可以简化lower bound的方法,这里不得不写点公式了
Variational Inference1
Variational Inference2

Variational Inference3

下次介绍VAE吧!


推荐阅读:
相关文章