有监督机器学习方法可以分为生成方法和判别方法(常见的生成方法有混合高斯模型、朴素贝叶斯法和隐形马尔科夫模型等,常见的判别方法有SVM、LR等),生成方法学习出的是生成模型,判别方法学习出的是判别模型。


 


HMM 是生成模型,因为它对状态序列本身的分布 P(X) 和给定状态后观测值的分布 P(Y|X) 都进行了建模。

DNN 是判别模型,因为它直接对给定观测值后状态的分布 P(X|Y) 进行建模。

在 HMM-DNN 这个框架中,DNN 代替了传统上用于建模 P(Y|X) 的高斯混合模型。但 DNN 给出的分布是 P(X|Y) 的形式,所以需要使用贝叶斯公式转换成 P(Y|X)。


接着对生成模型和判别模型做更详细一点的解释。
这里定义训练数据为(C,X),C={c1,c2,....cn}是n个训练样本的label,X={x1,x2....xn}是n个训练样本的feature。定义单个测试数据为(,),为测试数据的lable,是测试样本的feature。

1)训练完毕后,输入测试数据,判别模型直接给出的是P(\tilde{c}|\tilde{x}),即输出(label)关于输入(feature)的条件分布,实际上,这个分布的条件还有训练数据---------因为实际上我们是“看过”训练数据之后,学习到了对数据分布的后验认识,然后根据这个认识和测试样本的feature来做出测试样本属于哪个label的决策的,所以有P(\tilde{c}|\tilde{x})=P(\tilde{c}|\tilde{x},C,X)

我们认为这个条件分布P(\tilde{c}|\tilde{x},C,X)由参数\theta 决定的,

P(\tilde{c}|\tilde{x},\theta  )------------------------------------------------------------------------------------------------------------①

那么如何由P(\tilde{c}|\tilde{x},\theta  )得到P(\tilde{c}|\tilde{x} )呢?如果我们可以求出参数\theta 关于训练数据的的后验分布(这其实就是学习过程)P(\theta|C,X),那么就可以由

P(\tilde{c}|\tilde{x} )=P(\tilde{c}|\tilde{x},C,X )=\int_{}^{} P(\tilde{c},\theta|\tilde{x},C,X)d\theta=\int_{}^{} P(\tilde{c}|\tilde{x},\theta)\cdot P(\theta|C,X)d\theta  ------------②
来得到想要的答案(关于②如何得到,请参考其他地方的讨论PRML第一章公式1.68如何推导? - 机器学习 - 知乎第31页公式1.68怎么推导的啊..)。

所以现在问题转化成了求条件分布的参数\theta关于训练数据(C,X)的后验分布P(\theta|C,X)。那么我们来看看怎么求这个后验分布。条件分布关于训练数据的似然函数

P(C|X,\theta)=L(\theta)=\prod_{i=1}^{n}P(c_{i}|x_{i},\theta) --------------------------------------------------------------------------③
有没有发现P(C|X,\theta)P(\theta|C,X)有一点像?像在\theta和C互换了位置,互为条件概率,可以考虑使用贝叶斯公式来进行转化,即

P(\theta|C,X)=\frac{P(C|X,\theta)\cdot P(\theta)}{P(C|X)} ------------------------------------------------------------------------------④

所以现在问题又进行了转化,变成了求条件分布关于训练数据的似然函数、参数\theta的先验分布和C关于X的条件分布三个小问题。我们已经知道似然函数怎么求,先验分布也不需要求(先验知识,就是我们在解决问题之前已经知道的知识),而

P(C|X)=\int_{}^{} P(C,\theta|X)d\theta=\int_{}^{}P(C|X,\theta)\cdot P(\theta)d\theta----------------------------------------------⑤

至此问题已经解决,综合上述①-⑤各式,我们终于可以求出输出关于输入的条件分布啦!
P(\tilde{c}|\tilde{x} )=\int_{}^{} P(\tilde{c}|\tilde{x},\theta)\cdot \frac{P(C|X,\theta)\cdot P(\theta)}{\int_{}^{}P(C|X,\theta)\cdot P(\theta)d\theta} d\theta  ---------------------------------------------------⑥

⑥中的两个积分的计算是很麻烦的,在实际解决问题的过程中要想办法省略掉。
对于②中积分公式可以使用variational inference的方法干掉,variational inference用一句话来说就是:如果训练样本足够多的话,可以使用的最大后验分布来对进行点估计(point estimate)。即有:

P(\tilde{c}|\tilde{x} )=P(\tilde{c}|\tilde{x},C,X )=P(\tilde{c}|\tilde{x},\theta_{map})----------------------------------------------------------------------⑦
所以我们干掉了第一个积分问题,把问题简化成了求\theta的最大后验概率P(\theta|C,X)

观察④式可以发现分子P(C|X)是常数,如果我们省略掉④中的分子P(C|X)对结果是没有影响的(只需要对分子进行normalize就可以得到后验概率P(\theta|C,X)),那么我们又干掉了第二个积分公式,将问题简化成了求P(C|X,\theta)\cdot P(\theta)的最大值。如果先验分布在似然函数较大的区间是固定不变或变化较小的,那么问题又可以转化成求最大似然函数!

实际上,在噪声高斯分布的假设下,最小误差平方和优化问题(即求使误差平方和最小的参数)等价于求最大似然函数(即使似然函数最大的参数)。


作者:lixin liu
链接:https://www.zhihu.com/question/22374366/answer/155544744
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

生成模型可以产生数据,判别模型只能根据数据做判断。

其实看名字还比较明显吧:Generative models can generate data. Discriminative models discriminate (given) data.


生成模型(Generaive Model)一般以概率的方式描述了数据的产生方式,通过对模型采样就可以产生数据。

一个简单例子:给定平面上一系列点 \{x_i\}_{i=1}^N ,其中x_i\in\mathbb{R}^2我可以认为这些点是根据一个二维高斯分布\mathcal{N}(\mu,\Sigma) 产生的,这就是一个生成模型,它可以产生数据。我可以用最大似然方法,根据已有的\{x_i\}_{i=1}^N 样本估计出\mu 和\Sigma 。把这两个参数填回模型\mathcal{N}(\mu,\Sigma) ,再对这个模型进行采样,就可以得到更多的样本x_i ,这些样本和之前的样本在空间分布上可能差不多。

高斯混合模型也满足这样的特征,因此它也是一个生成模型。具体来说,一个简单的高斯混合模型是这样的:给定类别总数K ,总共K 组高斯分布的参数\mu_k 和\Sigma_k 。对于指标i ,有z_i\sim\text{Uniform}(1,K) ,以及x_i\sim\mathcal{N}(\mu_{z_i},\Sigma_{z_i}) 。

这其实就已经给出了数据的生成方式,先通过均匀分布产生一个类别号z_i (当然也可以搞带权重的),再根据这一类的参数\mu_{z_i} 和\Sigma_{z_i} 产生一个样本点x_i 。注意这里的数据指的是(z_i, x_i) 这个整体。一般应用中,我们只能拿到部分数据,也就是\{x_i\}_{i=1}^N  。可以通过EM之类的算法估计未知参数\mu_k 和\Sigma_k 。之后我们把估计出的参数值填回模型里,就可以根据这个模型继续生成更多的数据(z_i, x_i)  。所以说混合高斯模型是个生成模型。

判别模型(Discriminative Model)对数据之间的映射关系建模,而不考虑数据本身是如何生成的。判别模型可以根据给定的数据x 预测对应的y (回归),或根据不同的映射结果y来区分(discriminate)给定的数据x (分类)。但模型自身并不能产生数据x 

举例:

1、SVM。超平面y=wx+b 把样本空间分割成两部分,当给定数据x 落在正半平面时则判定为第一类,负半平面判定为第二类。给定空间中两簇点\{(x_i,1)\}_{i=1}^N 和\{(x_j,-1)\}_{j=1}^M ,可以训练一个SVM进行分类,但是SVM不能像高斯混合模型那样生成更多的点x_i 。

2、线性回归y=ax+b 。根据给定的数据\{(x_i,y_i)\}_{i=1}^N ,通过最小二乘方法可以估计出模型参数a 和b 的值。进一步,对于新的数据x^*该模型可以产生一个预测值y^* ,但该模型不能产生更多的x 。

3、使用神经网络做人脸识别。一个神经网络可以根据输入的一张人脸。判定这个人是谁,但这个神经网络不能产生更多的人脸。

生成模型对数据本身建模,更基础。判别模型只考虑输入和输出之间的关系,更直接地面向问题。如果希望用生成模型完成判定模型的任务,一般需要额外的步骤。比如对于多类的分类问题,一个多类SVM可以直接根据输入数据给出分类结果,而使用混合高斯模型的话,则还需要计算后验分布之类的东西。


最后简单发表一下个人看法。目前的答案基本都局限在分类问题上讨论二者的区别,也就有如生成模型对data和label的联合分布建模,而判定模型对label given data的条件分布建模这样的说法。这种说法固然没什么问题,但是我觉得对于讨论两种模型的区别而言显得狭义了一点。我倒是倾向把这个问题放在更一般的情况下讨论,也就是说他们最大的区别在于是面向数据的生成方式建模(how to generate data)还是直接面向判别问题建模(how to descriminate),能生成数据的是生成模型,而只考虑数据之间映射关系的是判别模型。