Processing math: 100%

深度生成模型--零

接下来的一系列文章是cs236 notes & PPT的阅读笔记,争取补充更多的代码例子

背景

生成模型的目标是在给定了数据集 D,并且假设这个数据集的底层分布(underlying distribution)是 pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做inference 推理

下面我们简单回顾一下生成模型和判别模型,读者可以自行选择跳过这小节。

生成模型 VS 判别模型

对于判别模型(discriminative model),像逻辑回归模型,是对给定的数据点预测一个标签label,但是对于生成模型,它学习的是整个数据的联合分布(joint distribution)。当然判别模型也可以理解为是给定了输入数据后,标签label的生成模型。但一般生成模型指的是高维数据。

Generative VS Discriminative

那么如果我们的建模方式不一样,对应的模型也是不一样的。假设我们希望求 p(Y|X),对于左边的模型,我们需要用贝叶斯规则计算 p(Y)p(X|Y)。而对于右边的模型,它已经可以直接用来计算 p(Y|X), 因为 p(X) 是给定的,所以我们可以不用给它建模。

我们将随机变量在图上显示出来:

Generative VS Discriminative more

对于生成模型的联合分布: p(Y,X)=p(Y)p(X1|Y)p(X2|Y,X1)...p(Xn|Y,X1,,Xn1) 我们需要考虑的是怎么确定 p(Xi|(X)pa(i),Y) 的参数,这里的 pa(i) 指的是指向随机变量 Xi 的随机变量集合。

对于判别式模型的联合分布: p(Y,X)=p(X1)p(X2|X1)p(X3|X1,X2)...p(Y|X1,,Xn)

生成模型例子-朴素贝叶斯

朴素贝叶斯(Naive Bayes),它是生成模型的一个特例,它假设在给定了label之后,各个随机变量之间是独立的,这就是它 naive 的原因吧,如下图:

naive bayes

用训练数据估计参数,用贝叶斯规则做预测:

p(Y=1|x1,,xn)=p(Y=1)ni=1p(xi|Y=1)y={0,1}p(Y=y)ni=1p(xi|Y=y)

判别模型例子-逻辑回归

p(Y=1|x;a)=f(x,a)=σ(z(a,x))wherez(a,x)=a0+ni=1aixiσ(z)=11+ex

逻辑回归并不要求随机变量之间独立。

但是生成模型依然很有用,根据链式法则:

p(Y,X)=p(X|Y)p(Y)=p(Y|X)p(X)

假设 X 的部分随机变量是可观测的,我们还是要计算 p(Y|Xevidence,那么我们就可以对这些看不到的随机变量marginalize(积分求和)。

学习-Learning

生成模型的学习(learning)是指在给定一个数据分布 pdata 和一个模型家族 M (model family)的情况下,我们要从这个模型家族中找到一个近似分布pθ,使得它和数据分布尽可能的近。

Overview

但是要怎么衡量这个呢?我们用距离来衡量, 写成数学表达式:

minθMd(pdata,pθ)

因此,我们自然而然会对三个问题感兴趣:

  1. 模型家族 M 的表达式是神马?
  2. 目标函数 d() 是什么样子的?
  3. 最小化 d() 的优化过程是什么?

推理-Inference

一个生成模型应该是一个联合概率分布 p(x),假设这个概率分布是从一堆狗狗的图片上学习到的,那么这个概率分布应该可以:

  1. 生成(Generation), 即采样(sampling) xnewp(x),并且采样 xnew 图片应该很像狗狗。

  2. 密度估计(Density estimation),如果给了一张狗狗的图片 x,那么这个概率分布 p(x) 的值应该很高。或者给了一张不相关的图片,p(x) 的值很低,这可以用来做异常检测。

  3. 无监督表示学习(unsupervised representation learning), 我们可以学习到这些图片的一些公共信息,像是一些特征,耳朵,尾巴…

但我们也发现量化评估上面的任务1和任务3其实是很难的;其次,并不是所有的模型家族在这些任务上都推理速度都快且精准,也正是因为推理过程的折中和权衡,导致了各种不同的方法。

  1. 自回归模型
  2. 变分自编码器
  3. 正则化流模型
  4. 生成对抗网络

附录

这里稍微提一下,一些表达式的意思。 比如 pθ 它指的是这个分布的参数为 θ;但是在后面的文章中如果看到了像是 μθ(Z) 这样的表示,说明决定 μθ() 是一个函数,比如一个神经网络神马的, 神经网络的参数为 θ。这里用变分自编码器(Variational autoencoder)为例说明:

pZ,X(z,x)=pZ(z)pX|Z(x|z)ZN(z,σ)X|(Z=z)N(μθ(z),eσϕ(z))

这里的 μθσϕ 都是神经网络,它们的参数分别为 θϕ。虽然说我们的 μϕ 都可以用很深的神经网络来表示,但是函数形式依然是高斯(Gaussian)。

另外也要注意一下,如果随机变量 X 是一个连续随机变量,我们通常用概率密度函数pX来表示。比如,假设它是高斯分布:

XN(μ,θ)ifpX(x)=1σ2πe(xμ)22σ2

假设它是联系随机向量 X,那么我们经常用它的联合概率密度函数来表示它: pX(x)=1(2π)n|Σ|exp(12(xμ)Σ1(xμ))

参考

[1] https://deepgenerativemodels.github.io/