接下来的一系列文章是cs236 notes & PPT的阅读笔记,争取补充更多的代码例子
背景
生成模型的目标是在给定了数据集 D,并且假设这个数据集的底层分布(underlying distribution)是 pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做inference 推理
下面我们简单回顾一下生成模型和判别模型,读者可以自行选择跳过这小节。
生成模型 VS 判别模型
对于判别模型(discriminative model),像逻辑回归模型,是对给定的数据点预测一个标签label,但是对于生成模型,它学习的是整个数据的联合分布(joint distribution)。当然判别模型也可以理解为是给定了输入数据后,标签label的生成模型。但一般生成模型指的是高维数据。
那么如果我们的建模方式不一样,对应的模型也是不一样的。假设我们希望求 p(Y|X),对于左边的模型,我们需要用贝叶斯规则计算 p(Y) 和 p(X|Y)。而对于右边的模型,它已经可以直接用来计算 p(Y|X), 因为 p(X) 是给定的,所以我们可以不用给它建模。
我们将随机变量在图上显示出来:
对于生成模型的联合分布: p(Y,X)=p(Y)p(X1|Y)p(X2|Y,X1)...p(Xn|Y,X1,…,Xn−1) 我们需要考虑的是怎么确定 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 的原因吧,如下图:
用训练数据估计参数,用贝叶斯规则做预测:
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+n∑i=1aixiσ(z)=11+e−x逻辑回归并不要求随机变量之间独立。
但是生成模型依然很有用,根据链式法则:
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θ,使得它和数据分布尽可能的近。
但是要怎么衡量这个近呢?我们用距离来衡量, 写成数学表达式:
minθ∈Md(pdata,pθ)因此,我们自然而然会对三个问题感兴趣:
- 模型家族 M 的表达式是神马?
- 目标函数 d(⋅) 是什么样子的?
- 最小化 d(⋅) 的优化过程是什么?
推理-Inference
一个生成模型应该是一个联合概率分布 p(x),假设这个概率分布是从一堆狗狗的图片上学习到的,那么这个概率分布应该可以:
-
生成(Generation), 即采样(sampling) xnew∼p(x),并且采样 xnew 图片应该很像狗狗。
-
密度估计(Density estimation),如果给了一张狗狗的图片 x,那么这个概率分布 p(x) 的值应该很高。或者给了一张不相关的图片,p(x) 的值很低,这可以用来做异常检测。
-
无监督表示学习(unsupervised representation learning), 我们可以学习到这些图片的一些公共信息,像是一些特征,耳朵,尾巴…
但我们也发现量化评估上面的任务1和任务3其实是很难的;其次,并不是所有的模型家族在这些任务上都推理速度都快且精准,也正是因为推理过程的折中和权衡,导致了各种不同的方法。
- 自回归模型
- 变分自编码器
- 正则化流模型
- 生成对抗网络
附录
这里稍微提一下,一些表达式的意思。 比如 pθ 它指的是这个分布的参数为 θ;但是在后面的文章中如果看到了像是 μθ(Z) 这样的表示,说明决定 μθ(⋅) 是一个函数,比如一个神经网络神马的, 神经网络的参数为 θ。这里用变分自编码器(Variational autoencoder)为例说明:
pZ,X(z,x)=pZ(z)pX|Z(x|z)Z∼N(z,σ)X|(Z=z)∼N(μθ(z),eσϕ(z))这里的 μθ 和 σϕ 都是神经网络,它们的参数分别为 θ 和 ϕ。虽然说我们的 μ 和 ϕ 都可以用很深的神经网络来表示,但是函数形式依然是高斯(Gaussian)。
另外也要注意一下,如果随机变量 X 是一个连续随机变量,我们通常用概率密度函数pX来表示。比如,假设它是高斯分布:
X∼N(μ,θ)ifpX(x)=1σ√2πe−(x−μ)22σ2假设它是联系随机向量 X,那么我们经常用它的联合概率密度函数来表示它: pX(x)=1√(2π)n|Σ|exp(−12(x−μ)⊤Σ−1(x−μ))
参考
[1] https://deepgenerativemodels.github.io/