如何区分生成模型和判别模型?

1,803 阅读6分钟

生成模型和判别模型

简单的概念

监督学习的目标是学习的得到一个模型,通过这个模型对给定的输出,得到一个特定的输出,从而预测该数据的类别。这个模型可以称为 classifier。这个模型对应的函数一般是 Y=f(X)或者是P(Y|X) (在数理统计中,随机变量是x,样例是X)。

对于决策函数Y=f(X)类型,需要设置一个阈值threshold用于判断。

对于条件概率分布P(Y|X),由于计算的是属于所有类型的概率,因此选取概率最大的。完成判别。

两者的关联:

两者其实在本质上是一样的。

当网络使用的是Y=f(X)的形式的时候,训练的时候采用的是MSE,该目标函数使得网络可以输出和真实标签(一般采用one\_hot编码)最接近的Y,这其实是一种极大似然思想。对于给定的(X,Y),该次训练网络使得其输出和真实的标签Y逼近(最大化其发生的概率),也就是最大化P(Y|X)=1 或者是P(Y|X)=0(这里的似然是对发生而言的,哪个事件发生了,其对应的概率就要达到极值。)因此,这里的输出其实就是P(Y|X)

当然,当取P(Y|X)的时候,就只直接使用本质函数。。。。

生成方法和判别方法

  监督学习分为生成方法(Generative approach)和判别方法(Discriminative approach)。建立的模型分别为生成模型和判别模型。

判别模型

  由数据直接学习得到一个判别函数(Y=f(X)或者P(Y|X))。典型的判别模型主要有:K近邻,支持向量机,决策树。。。判别模型只关注于如何分类(如何对给定的数据空间进行特征映射和区分,找到最优的分类面)。模型主要反应的是不同类别之间的差异性。判别模型直接对预测进行建模,效率高,效果比较好。

生成模型

  由数据学习联合概率密度分布P(X,Y),(概率密度分布函数用于采样,产生更多该数据集的数据),然后再根据贝叶斯公式求出P(Y|X)作为预测模型,即生成模型:P(Y|X)=P(X,Y)/P(X)。生成模型需要无穷多的样本才可以达到理论是的预测,因为对于P(X),需要很多的样本才可以使得其比较可靠。典型的生成模型有朴素贝叶斯,隐马尔可夫模型等。生成模型关注与数据本身,而不像判别模型,关注于最优的分类界面。生成模型还可以用于带有隐层的的模型中,此时的判别模型是无法使用的。

生成模型和判别模型在深度网络中的对应关系

深度网络可以模拟很多的概率分布函数。

判别模型  分类网络的输出拟合的就是P(Y|X)。假设网络的参数是 \phi ,根据最大似然原理进行训练,网络的输入是X,网络的输出是P(Y|X)。写成数学表达式是:P(Y|X)=f_\phi(X)

生成模型  网络拟合的是P(X,Y),联合概率密度分布函数,之后再利用P(Y|X)=P(X,Y)/P(X),进行判别。这里的生成模型是一个很狭义的概念!!!(因为这里只是在有监督学习学习中,生成模型解决分类的一种情况)。实际中,生成模型(Generative Model)是概率统计和机器学习中的一个概念,指一系列用于随机生成可观测数据的模型。生成模型有两个基本功能,一是学习一个概率分布,即密度估计问题,二是生成数据。对于有监督学习情况下,典型的生成模型有:朴素贝叶斯法、隐马尔科夫模型、混合高斯模型。这些模型都是对P(X,Y)直接进行建模的,最后采用贝叶斯推断得到数据属于的类别。广义上的生成模型,是对数据本身进行建模,用于产生新的数据(GAN和VAE等)。例如VAE中图像的生成采用的是隐层变量的形式:P(X,Z)=P(Z)\times P(X|Z)。蒙特卡洛近似E[f(X)]=\int f(x)p(x)dx \approx \frac{1}{S}\sum_{s=1}^{S}f(x_s),最后得到的是P(X) \approx P(X|Z),其中的Z来自于采样一次。生成模型是用于生成数据的,特别是对于生成图像,那么这体现在哪里呢?如果网络可以对X进行建模,得到一个P(X),且该P(X) \approx P_{gt}(X),那么我们就可以采用该概率分布函数间采样,得到新的数据(注意,这里是没有加入标签的时候),这时候我们就得到一个生成模型P(X)

深度网络对概率的建模:以上的两种都是深度网络对概率的建立,但是需要注意一点,网络的输出不一定就是P(X)或者P(Y|X)。例如对于P(Y|X)是gaussian的时候,网络可以是对(\mu,\sigma)的输出。(理解网络的建模对象以及网络的输出是不一样的!!!千万不要混淆!!)而且网络中的数据在输出输出的时候,带有逻辑上的传递,例如,先验概率,后验概率的形成等。

以下采用VAE中的例子来对深度网络对概率的建模做一些解释:

VAE对真实后验概率P(Z|X)的拟合是采用的MLP进行拟合,网络输出的是(\mu_1,\sigma_1),网络建模的是Q(Z|X)=N(\mu_1,\sigma_1),网络的输出是X。这里的模型称为recognize。 model。网络的后半段是对P(X|Z)的建模,网络的输出是(\mu_2),而\sigma_2手动设定为一个很小的值,网络最终建模的概率分布函数P(X|Z)=N(\mu_2,\sigma_2)。网络的输入是Z,而Z是依概率从前面的recognize的输出中采样得到的。(这里可以直接理解成从P(Z)中采样即可)。因此,网络最终的的输出逻辑是P(Z)P(X|Z)=P(X,Z)。如果对最后的结果只采样一次的话(y由于最后的结果取决于对Z的采样,因此,就是对Z只采样一次),那么就会得到P(X)\approx P(X|Z)。由于当\sigma_2取值很小的时候,网络的输出是\mu_2,此时采样很多的样本很接近\mu_2,因此可以认为网络的输出就是X。而不用再对P(X)进行采样(此时也无法采样??因为采样需要知道具体的表达式??)。网络最后的输出是近似的X,网络建模的是P(X|Z)。 以上就是具体的分析。关于VAE可以看我的下一篇博文。

本人的论述会存在很多的问题,希望大家指出,我尽量改正!!!!

references

【深度学习进阶模型详解】概率图模型/深度生成模型/深度强化学习,复旦邱锡鹏老师《神经网络与深度学习》教程分享05

【机器学习基础】生成模型和判别模型

生成模型与判别模型

机器学习“判定模型”和“生成模型”有什么区别?