机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之三(第1章)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之三(第1章)相关的知识,希望对你有一定的参考价值。
第1章 概率分布的模型表达及建模
1.1 模型
模型有很宽泛的定义,在Wikipedia上对Model的解释里就列出了多种模型及其定义。在我们要讨论的内容的语义下,模型就是输入与输出之间关系的一种表达与实现。我们不关心模型内部对输入量进行了什么样的操作而产生了输出量,我们只关心输入量与输出量之间的关系或者说变化规律。模型与系统有大致相同的意义。
由于这种关系或变化规律有些可以用数学公式来描述,因而有的人会把模型当作函数。比如输入量是x,输出量是y,模型完成的功能用f来表示,我们有y=f(x)。但其实模型不是函数。
函数中的x和y之间的关系是确定的,或者说是静态的。而模型表达的关系则是动态的,甚至是不确定的。比如在某个时刻输入一个x并得到y,但换一个时刻输入同样的x,得到的却是另一个y。用数学来描述就是,y(t) = f{x(t)}。注意,与一般的函数不同,这个模型的输出也是时间的函数。而且,在非因果模型或系统中,输出不仅与当前的输入有关,而且还和过去甚至未来的输入有关。这样的例子有大家熟悉的卷积神经元网络CNN,它也是一个模型或系统而不是函数:这里,变化的不是时间而是空间,如果用不同大小的kernels对同一幅输入图像做卷积操作,你会得到不同的输出结果。用数学来描述,就是y(s) = f{x(s)},s代表kernel的大小(假设 stride和padding的设置是不变的)。当然也可以说,函数表达了一个静态的确定性的模型,是一般模型的一个特例。
1.2 概率分布的模型表达
那么,模型怎么和概率有关系呢?这是因为现实生活中我们遇到的概率问题大多涉及数量很大的随机变量,很难用数学公式来描述它们之间的变化关系,但我们可以用概率模型来描述它们。
当然,我们已经有很多公式来描述多种多样的连续随机变量的概率密度分布和来说随机变量的概率,比如我们常用的高斯分布。这些可以用公式来描述的概率分布称为parametric distributions(参数型分布),即这些分布密度的函数具有固定的数学形式,其具体的函数值则取决于这些数学形式使用的参数。比如连续单变量高斯分布:
其中,x是随机变量,?和?是分布参数,分别代表均值和方差,x的概率分布p(x)的值取决于参数?和?。不同的参数决定了不同的概率分布,但这些分布的形式是一样的。
如果一个概率分布用参数型的公式来描述,那么我们也称这些分布具有closed form(闭式)的表达。如果你知道一个随机变量的概率分布类型(比如高斯型),那么就太好了,因为你只要再想办法确定这个分布的参数值,就完全得到该随机变量的分布了。确定一个模型或系统的随机变量分布参数的通常办法是,先由这个模型产生一些样本{xi}, i=1..N,我们假设这些样本来自概率分布p(x),再通过极大似然法(maximum likelihood,简称 ML)或极大后验概率法(maximum a posteriori, 简称MAP) ,寻找使这些样本最可能出现的参数值。这是后面的核心内容之一。
但如果我们无法用公式来描述随机变量的概率分布呢?有没有别的办法来描述?答案是:有,而且不只一种。比如,用表格的方式就可以描述离散随机变量的概率。举例来说,三个离散随机变量I, D, G,分别取值{i0, i1}、{d0, d1}和{g0, g1, g2}。那么条件概率P(G|I, D)可以用以下表格表示:
进而我们还可以进行一些inference(推理),比如求P(G|I)。这种表格形式的概率表达称为Table CPD (CPD=conditional probability distribution)。
注:简单地说,"inference"指的是计算条件概率,即在观察到某些随机变量的取值时,计算其它变量的各个取值的概率或它们的联合概率。我把它翻译成"推理"。
同时,我们可以用图的方式来表达多随机变量之间的依赖关系。比如:
图1. 贝叶斯网络
这个图里的每个节点代表了一个随机变量,节点之间的有向连线代表了变量之间的直接的依赖关系。比如,Grade(G)的概率受Difficulty (D)和Intelligence (I) 的影响,它的概率是P(G) = P(G|D, I)。括号里的竖线表示条件概率。
这种用图表达随机变量之间的依赖关系的模型,称为概率图模型 (Probabilistic Graphical Model,简称PGM)。其实更准确的叫法是概率的图模型。
上图是有向无环路的图,随机变量(即图的节点)之间有明确的依赖关系,可以表达条件概率,因而称为贝叶斯网络(Bayesian Networks),有时也称为信任网络 (Belief Networks) 或条件随机场(Conditional Random Field,CRF)。Belief Networks可能来自在概率图上进行inference时(比如已知图上各节点的概率,求所有的节点的联合概率)所使用的信任传播方法(Belief Propagation)。
并非所有的情形都能用贝叶斯网络来表达。在有些情形里,随机变量之间的依赖关系并没有明显的方向,或者它们的依赖关系是双向的,这时我们使用无向图来表示它们的关系。无向图(可以有环路)称为马尔可夫网络(Markov Networks)或马尔可夫随机场(Markov Random Felds MRFs)。
这种用图的方式表达随机变量之间复杂的关系的前提假设是,这些随机变量之间的交互关系或相互影响是有所谓的"结构"的(简单的关系比如父-子、上-下或前-后),这种结构就可以用图的方式表达出来,这个图也就等于为这些随机变量所构成的系统建立了模型,即图模型。因此,图模型也称为结构化的概率模型(Structured Probabilistic Models)。我们可以依据这个图模型进行inference(推理)和采样。
举例来说,如果我们用链式法则展开5个随机变量的联合概率:
P(D, I, G, S, L) = P(I) P(D|I) P(G|D, I) P(S|D, I, G) P(L|D, I, G, S)
而图模型具有一个重要优势,就是在图模型上进行推理或采样时,所需的时间和存储量更有可能是"tractable"(易驾驭的),这是因为图模型具有的随机变量之间的结构信息被加以利用了,这大大减少了参与计算的参数的数量。比如上例,
P(D, I, G, S, L) = P(I) P(D) P(G|D, I) P(S|I) P(L|G)
可见,联合概率的计算大大简化了。
而其它非结构化的模型在解决这些问题时非常有可能是"intractable"(不容易驾驭的),即所需时间和存储量按随机变量的数量或取值空间大小的指数增长,因为它们假设所有变量之间都有直接的关系。当然,还有些类型的模型走向另一个极端,即对随机变量之间的独立性做了过多的假设来简化计算,但结果可能有较大的误差。
再举个概率图模型的例子,这是在机器学习里经常遇到的一类模型,叫plate model,用来表达重复出现的随机结果。它与我们后面的讨论有密切的关系。见图2。
图2左图是plate model,方框就是plate,可以重复N次,里面的圆圈代表随机变量z的一次采样结果,该结果出现的概率分布取决于参数?,参数?的值不随时间而变化,为所有的plates共享,所以它在方框外面。右图是左图展开后的表现形式。
图2. Plate Model
如果随机变量是连续的呢?变量之间的依赖关系固然可以用PGM来表达,但概率分布的密度就不方便使用Table CPD了(并非绝对不行)。如果也没有closed form的表达,那么我们就要想象有一个模型,你给它一个输入(随机变量的某个取值或采样条件),它就给你一个输出(概率值或者新的样本),比如人工神经元网络就是一个模型。现在我们要讨论的是建一个概率模型(probabilistic model),它能准确地"捕捉"输入的样本之间的依赖关系及样本的分布,甚至可以自主"学习"不同类别的样本所具有的抽象的"特征",并可以产生符合样本分布的新样本。
1.3 生成式模型(Generative Model)和判别式模型(Discriminative Model)
我们有两类模型可以选择。一类是Generative Model(成生式模型),另一类是Discriminative Model(判别式模型)。
简单地说,生成式模型描述的是联合概率P(x1, x2, …, xn, y),其中, x1, x2, …, xn, y都是随机变量,就这个意义来说,xi和y没有差别(y也可以由xn+1代替)。举例来说,x=(x1, x2, …, xn)代表观察值或者特征值(features),比如一个人的血压、血糖等各项体检得到的生理特征指标,y代表是否有某种疾病(y=1代表有, y=0代表没有)。那么 P(x1, x2, …, xn, y=1)表示具有那些生理指标和有病同时出现的概率,而P(x1, x2, …, xn, y=0) 表示具有那些生理指标但没有病同时出现的概率。
有了这个模型P,我们还可以用它生成新的样本(x1, x2, …, xn, y)。至于具体如何生成,后面会看到。
本文要讲的VAE就是一种生成式模型。
而判别式模型用于描述条件概率P(y| x1, x2, …, xn)。就是说,如果我们知道x=( x1, x2, …, xn)的取值,我们可以根据这个条件概率通过这个模型获得y的各个有效取值的概率。比如上例,P ( y=1 | x1, x2, …, xn)表示当那些生理指标具有观察到的值的时候有病的概率。根据不同的x=( x1, x2, …, xn)值,通过这个模型可以判别哪些人可能有这种疾病,哪些人可能没有。
如果y是连续的,判别式模型可以根据输入对输出做预测。
判别式模型无法生成新的样本,因为它不知道哪些(x1, x2, …, xn)的取值会最可能出现,即缺少P(x1, x2, …, xn)。它只能根据观察到的(x1, x2, …, xn)值被动地对y的取值做判断。从贝叶斯公式出发,我们有
P(x1, x2, …, xn, y) = P ( y | x1, x2, …, xn)P(x1, x2, …, xn)
所以只有P ( y | x1, x2, …, xn)是无法生成新样本(x1, x2, …, xn, y)的,还需要知道P(x1, x2, …, xn)。
生成式模型也可以用于分类,即在y的不同取值时,哪个取值得到的联合概率大,就认为y属于哪个分类。所以,生成式模型获得了每个分类的分布,然后再判断一个新样本最可能属于哪个分类:
而判别式模型获得的是各个类之间的边界。有个比喻是,生成式模型学会所有的语言才能判断某个人说的是哪种语言,而判别式模型不学习任何语言,而只是知道不同语言之间的差别就能判断某个人说的是哪种语言。一般认为,生成式模型未必能准确获取随机变量之间的关联,而判别式模型则不要求知道这种关联(它根据的是全部特征值对y产生的共同作用),所以,在做分类时,判别式模型的性能比生成式模型要好一些。当然,这也要看具体的情况。
我们根据要解决的问题,确定选择什么类型的模型。
1.4 一个生成式模型的实例
再举个例子吧。假如我们有类似以下手写体数字的样本:
在数据集MNIST里,这样的样本有六万个,都是不同的人写的,风格各异,但我们还是能准确认出绝大部分,准确率在99%以上。
我们希望用MNIST样本集建一个模型,它可以产生新的手写体数字,这些数字虽然很像样本集里的那些数字,但仔细看却不完全一样。或者说,新产生的数字没有一个是和原样本集里的一模一样,但仍然很相像。
这就是生成式模型要解决的问题。
假设已知数据集X里有 N个样本(样本也称为数据点):
x = {x(i)}, i=1..N,
其中,x是一个随机变量,x(i)是随机变量x的第i个样本。x可能是多维的,各个维度的取值可以是连续的,也可以是离散的,但必须一致。
比如MNIST样本集,每个样本是一幅28x28大小的图像,因此,x是一个28x28=784维的整数向量。图上每个像素可以有256级灰度值,因此x是离散的随机变量。x 的取值空间巨大,有25628x28个取值可能。如果我们用x={"0"}表示784个像素的取值呈现出 "0"的图像的那些x的集合,那么由于每个人写字的风格不同,这个集合里的元素肯定不止一个。
这些样本的获取或采集过程符合一个所谓i.i.d.的条件,即 independent and identically distributed (i.i.d.)。就是说,每个样本都是独立地采集的,彼此没有影响;而且,每个数字的样本数大致相同。比如MNIST里的各个数字的样本数是:
{0: 5923, 1: 6742, 2: 5958, 3: 6131, 4: 5842, 5: 5421, 6: 5918, 7: 6265, 8: 5851, 9: 5949}
i.i.d.是一个非常重要的条件,许多概率论和机器学习里面的理论推导都要用这个条件。在很多情况下,为了简化解决问题的过程。我们也经常假设这个条件是成立的。但如果这个假设是错误的,那么我们得到的问题的解就有误差。
对于MNIST样本来说,一个784维的向量的取值不是任意的。这784个像素的取值一定要构成一个我们认得出的数字的图形,它才在样本集里。任意取值而构成的图形很可能就是一幅完全没有意义的图。或者说,那些手写数字的人们在写这些数字时,必须遵循每个数字的特定的笔划结构,遵循这样的结构写数字,就是遵循一定的规律给这些像素赋值。这个规律,就是我们要追寻的统计规律Pgt(X),代表probability,gt代表ground truth。为什么用统计规律而不是笔划的结构规律呢?因为前者更通用,而且更容易用数学来表达和建模。
假如我们用x= "8"代表一个样本的784个像素的取值构成数字8的图像。为了讨论方便,我们假设每个像素的灰度值只有0和1。显然,不同的人写出来的 "8"具有不同的风格。但如果你想像一下这些 "8"的图像在784个像素位置的灰度值,你会得出结论,那就是,不同的样本,灰度为1和为0的像素位置即使不完全一样也大致差不多。比如手写数字的倾斜度不同的两个样本上,灰度值为1的彼此对应的点虽然不在同一个像素位置,但它们在相邻的像素位置;或者也许灰度值为1的像素在一些样本上比另一些样本上要多一些(笔画较粗)。但这些不同都不会改变它们具有"8"的结构。每个像素取值1还是0并不是任意的,而是有一定的概率,比如落在"8"的笔画上或附近的像素,取1值的概率远大于取0值的概率。如果样本确实来自分布Pgt(X),那么 Pgt(x="8")告诉我们,只有当784个像素点的灰度值呈现了"8"的结构,这个概率才具有非常大的值,否则就有非常小的值。如果我们只看"8"的样本,那么它们在784维空间里的取值符合高斯分布,这时它是一个条件概率分布,即P(x|z="8"),z是样本的分类,代表数字"0"到"9"。而全体样本的Pgt(X)则像在784维空间里的K-Means或者GMM的结果,它把样本点聚集在10个集群里。
但是,我们几乎没有办法找到Pgt(X),虽然我们知道它是真实存在的。这就如同我们用机器学习算法去找一条拟合样本点的方程h(X)一样,我们无法知道h(X)就是实际产生那些样本点的方程g(X)。所以我们退一步,希望利用那些样本构建一个模型,该模型经过训练,能够学习到样本里蕴含的统计规律P(X),使得P(X)非常接近Pgt(X)。
可见,我们通过样本要构建的模型P(X)是一个概率模型。其实,因为我们希望能用这个模型产生无数多个"0"到"9"的不同的手写体新样本,我们也不需要这个模型实现的是一个确定性的函数(即使有这种可能)。
建立好的模型(具有确定的模型结构和训练好的模型参数),除了可以产生新的样本外,我们还可以用它来做推理(inference),即根据观察到的一些随机变量的取值,推理出另一些随机变量出现不同取值的概率,这涵盖分类,去噪音,修补残缺的图等应用。
1.5 建模的思路
一般来说,我们首先建一个模型的结构,比如深度学习网络。初始时,这个模型输出的数据的分布肯定离我们的目标分布相差很远。同时,我们有大量的样本,并且相信,这些样本来自一个未知但真实的概率分布Pgt。然后,模型结构利用这些样本不断修改自身的参数(即学习的过程,比如依据最大似然原则,使用梯度下降法),使其输出数据的分布越来越接近数据样本的分布。当二者足够接近时,我们就获得了所需的模型,它包含模型的结构和模型的参数。
同样的模型结构使用不同的训练方式,我们会获得不同类型的模型。通常,生成式模型的训练是Unsupervised Learning(其实是self-supervised learning),判别式模型的训练是Supervised Learning。
我们要建的是概率模型(probabilistic models),而不是确定性的模型。这个模型的输入输出都可被视作是随机变量。这个模型必须能准确"捕获"这些数据样本所具有的内在统计规律,即它的P(X)是真实的概率分布Pgt(X) 的近似。我们的任务就是估算数据集的概率密度或概率分布。
如果我们选取假想的P(X)是参数型的概率分布,那么,我们的目标是通过观察到的样本数据集X获得样本数据分布的参数集?。注意,?是可能包含多个参数的向量,而且每个参数可能是多维的。
我们从贝叶斯公式出发:
其中:
P(?)是分布参数??的prior(先验概率)。这是一开始我们要做的假设,或者说在观察到任何数据前,我们相信?符合分布P(?)。数据集X会在P(?)之上不断调整?的分布,直至它足够接近真正的分布,即后验概率分布。
P(X|?)是likelihood(似然概率),即在当前参数?下,出现我们观察到的数据X的概率。如果数据集X里有多个样本,我们假设它们都是i.i.d.的,这样当我们计算似然概率时,可以单独计算每个样本出现的似然概率,再把它们相乘(取log-likelihood时就是相加)。
注意,如果?是固定的而X是随机变量,则P(X|?)是X的采样(sampling)。
有的文献使用marginal likelihood一词,它与P(X|?)差不多,但是增加一个latent variable(隐藏变量)向量z,再把z"边缘化"(即marginalized或在z为离散量时被sum-out):
至于为什么引入latent variables,我们后面再解释。
P(X)是evidence(证据)、即我们观察到的数据集X出现的概率。
P(?|X)是posterior (后验概率),是我们的目标,即在观察到数据X后,分布参数?应该调整到什么值。此即新的分布参数?。为了与当前参数区分开,我们给?加上下标:?New 和?Current 。
在此规范一下本文使用的一些术语和记法:(来自http://www.deeplearningbook.org/contents/notation.html)。
如果?是确定性的未知量,如图2中的?,我们把它称为参数,则似然概率分布记为P(X ; ?),意思是数据X是由参数为?的分布产生的。由于P(X; ?)是?的函数,故一般称它为似然函数;如果参数被当作未知随机变量的一部分(贝叶斯的哲学是所有未知量都是随机变量,所以?也有概率分布),则把似然概率分布记为P(X|?)。
对于参数,我们可以估计其实际值,即从非完整、非确定且有噪音的数据X中计算出X的近似分布参数?。而对于随机变量,我们使用推理(inference)来计算它的分布,即用X的观察值和先验证据推导出后验概率P(?|X)的过程。前者计算出参数?的本身,后者推导出参数?的分布(把?当作随机变量)。
目前,寻找数据集的分布参数或其后验概率的途径有两个,一是采样法,比如MCMC;另一个是使用类似最大似然法的优化法,获得近似解。后一个途径又有两个常用的算法,一是Expectation-Maximization (EM) 算法,另一个是与本文的重点密切相关的Variational Inference (VI) 算法,有时也叫Variational Bayesian Inference(VB)。我们一一介绍。
下一章先对MCMC用于Bayesian Inference做个简要介绍。
以上是关于机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之三(第1章)的主要内容,如果未能解决你的问题,请参考以下文章
机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之九(第5章 总结)
机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之二(作者简介)
机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之七(第4章 之 梯度估算)
机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之六(第3章 之 VI/VB算法)