查看原文
其他

一文带你看懂“生成模型”和“判别模型”

ShuYini AINLPer 2023-07-10

点击下方链接🔗关注我们

引言

 深度学习一开的时候,你肯定遇到过生成模型和判别模型,为此今天本文将详细给你介绍一下(已经了解的小伙伴温习一下吧)。在开始之前我们首先介绍决策函数和条件概率分布,然后给出生成模型和判别模型的解释,最后对比两种模型的特点。

决策函数和条件概率分布

 其实监督学习的任务就是从数据中寻找一个函数(也可以称作模型)对给定的输入X预测相应的输出Y。这个函数的一般形式为决策函数Y=f(X)或者条件概率分布P(Y|X)。

「决策函数Y=f(X):你输入一个X,它就输出一个Y,这个Y与一个阈值比较,根据比较结果判定X属于哪个类别」。例如两类(w1和w2)分类问题,如果Y大于阈值,X就属于类w1,如果小于阈值就属于类w2。这样就得到了该X对应的类别了。

「条件概率分布P(Y|X):你输入一个X,它通过比较它属于所有类的概率,然后输出概率最大的那个作为该X对应的类别」。例如:如果P(w1|X)大于P(w2|X),那么我们就认为X是属于w1类的。

 所以上面两个模型都可以实现对给定的输入X预测相应的输出Y的功能。实际上「通过条件概率分布P(Y|X)进行预测也是隐含着表达成决策函数Y=f(X)的形式的」。例如也是两类w1和w2,那么我们求得了P(w1|X)和P(w2|X),那么实际上判别函数就可以表示为Y= P(w1|X)/P(w2|X),如果Y大于1或者某个阈值,那么X就属于类w1,如果小于阈值就属于类w2。而同样,很神奇的一件事是,实际上决策函数Y=f(X)也是隐含着使用P(Y|X)的。因为一般决策函数Y=f(X)是通过学习算法使你的预测和训练数据之间的误差平方最小化,而贝叶斯告诉我们,虽然它没有显式的运用贝叶斯或者以某种形式计算概率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在所有假设模型有相等的先验概率条件下,输出极大似然假设。

 所以呢,「分类器的设计就是在给定训练数据的基础上估计其概率模型P(Y|X)。如果可以估计出来,那么就可以分类了」。但是一般来说,概率模型是比较难估计的。给一堆数给你,特别是数不多的时候,你一般很难找到这些数满足什么规律吧。那能否不依赖概率模型直接设计分类器呢?「事实上,分类器就是一个决策函数(或决策面),如果能够从要解决的问题和训练样本出发直接求出判别函数,就不用估计概率模型了,这就是决策函数Y=f(X)的伟大使命了」。例如支持向量机,我已经知道它的决策函数(分类面)是线性的了,也就是可以表示成Y=f(X)=WX+b的形式,那么我们通过训练样本来学习得到W和b的值就可以得到Y=f(X)了。还有一种更直接的分类方法,它不用事先设计分类器,而是只确定分类原则,根据已知样本(训练样本)直接对未知样本进行分类。包括近邻法,它不会在进行具体的预测之前求出概率模型P(Y|X)或者决策函数Y=f(X),而是在真正预测的时候,将X与训练数据的各类的Xi比较,和哪些比较相似,就判断它X也属于Xi对应的类。

生成方法和判别方法

判别方法

「判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型」。典型的判别模型包括k近邻法、感知机、决策树、逻辑回归、最大熵、SVM、AdaBoost和条件随机场等。

 对于判别式模型来说求得P(Y|X),对未见示例X,根据P(Y|X)可以求得标记Y,即可以直接判别出来,如上图所示,实际是就是直接得到了判别边界,所以传统的、耳熟能详的机器学习算法如线性回归模型、支持向量机SVM等都是判别式模型,这些模型的特点都是输入属性X可以直接得到Y(对于二分类任务来说,实际得到一个score,当score大于threshold时则为正类,否则为反类)~(根本原因个人认为是对于某示例,对正例和反例的标记的条件概率之和等于1,即:

生成方法

 生成方法:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:

「基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类,就像上面说的那样」。这里是先求出P(X,Y)才得到P(Y|X)的,然后这个过程还得先求出P(X)。P(X)就是你的训练数据的概率分布。需要你的数据样本非常多的时候,你得到的P(X)才能很好的描述你数据真正的分布。例如你投硬币,你试了100次,得到正面的次数和你的试验次数的比可能是3/10,然后你直觉告诉你,可能不对,然后你再试了500次,哎,这次正面的次数和你的试验次数的比可能就变成4/10,这时候你半信半疑,不相信上帝还有一个手,所以你再试200000次,这时候正面的次数和你的试验次数的比(就可以当成是正面的概率了)就变成5/10了。这时候,你就觉得很靠谱了。

 生成式模型求得P(Y,X),对于未见示例X,你要求出X与不同标记之间的联合概率分布,然后大的获胜,如上图右边所示,并没有什么边界存在,对于未见示例(红三角),求两个联合概率分布(有两个类),比较一下,取那个大的。「机器学习中朴素贝叶斯模型、隐马尔可夫模型HMM等都是生成式模型,熟悉Naive Bayes的都知道,对于输入X,需要求出好几个联合概率,然后较大的那个就是预测结果」~(根本原因个人认为是对于某示例X_1,对正例和反例的标记的联合概率不等于1,即:

要遍历所有的X和Y的联合概率求和,即

 还有一个问题就是,在机器学习领域有个约定俗成的说法是:不要去学那些对这个任务没用的东西。例如,对于一个分类任务:对一个给定的输入x,将它划分到一个类y中。那么,如果我们用生成模型:那么,我们就需要去对p(x)建模,但这增加了我们的工作量,(除了上面说的那个估计得到P(X)可能不太准确外)。实际上,因为数据的稀疏性,导致我们都是被强迫地使用弱独立性假设去对p(x)建模的,所以就产生了局限性。所以我们更趋向于直观的使用判别模型去分类。 「这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯和隐马尔科夫模型等」

两模型特点对比

 在监督学习中,两种方法各有优缺点,适合于不同条件的学习问题。

生成模型优缺点

「优点1」:生成给出的是联合分布,不仅能够由联合分布计算条件分布(反之则不行),还可以给出其他信息,比如可以使用P(x)=求和(P(x|ci)) 来计算边缘分布P(x)。如果一个输入样本的边缘分布P(x)很小的话,那么可以认为学习出的这个模型可能不太适合对这个样本进行分类,分类效果可能会不好,这也是所谓的outlier detection。生成方法可以算出联合概率分布分布P(X,Y),而判别方法不能。

「优点2」:生成模型收敛速度比较快,即当样本数量较多时,生成模型能更快地收敛于真实模型。

「优点3」:生成模型能够应付存在隐变量的情况,比如混合高斯模型就是含有隐变量的生成方法。此时判别方法就不能用。

「缺点1」:天下没有免费午餐,联合分布是能提供更多的信息,但也需要更多的样本和更多计算,尤其是为了更准确估计类别条件分布,需要增加样本的数目,而且类别条件概率的许多信息是我们做分类用不到,因而如果我们只需要做分类任务,就浪费了计算资源。

「缺点2」:另外,实践中多数情况下判别模型效果更好。

判别模型优缺点

「优点1」:由于直接学习P(Y|X)或f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。与生成模型缺点对应,首先是节省计算资源,另外,需要的样本数量也少于生成模型。

「优点2」:直接面对预测,准确率往往较生成模型高。

「优点3」:判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X),不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。所以允许我们对输入进行抽象(比如降维、构造等),从而能够简化学习问题。「缺点1」:没有生成模型的上述优点。

对于两种模型的思考

「判别式模型举」例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

「生成式模型举例」:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

 细细品味上面的例子,判别式模型是根据一只羊的特征可以直接给出这只羊的概率(比如logistic regression,这概率大于0.5时则为正例,否则为反例),而生成式模型是要都试一试,最大的概率的那个就是最后结果。

 在机器学习中任务是从属性X预测标记Y,判别模型求的是P(Y|X),即后验概率;而生成模型最后求的是P(X,Y),即联合概率。从本质上来说:「判别模型之所以称为“判别”模型,是因为其根据X“判别”Y;而生成模型之所以称为“生成”模型,是因为其预测的根据是联合概率P(X,Y),而联合概率可以理解为“生成”(X,Y)样本的概率分布(或称为 依据)」;具体来说,机器学习已知X,从Y的候选集合中选出一个来,可能的样本有,实际数据是如何“生成”的依赖于P(X,Y),那么最后的预测结果选哪一个Y呢?那就选“生成”概率最大的那个吧。

「由生成模型可以得到判别模型,但由判别模型得不到生成模型」。生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。

推荐阅读

[1]【论文速递 && IJCAI论文干货下载】图神经网络(GNN)(多行为推荐、多模态食谱表示学习、同质图表示学习)

[2]【历年IJCAI论文下载 && 论文速递】无数据对抗蒸馏、垂直联合、预训练微调范式图神经网络(GNN)

[3]【NLP论文分享&&语言表示】有望颠覆Transformer的图循环神经网络(GNN)

[4]【NLP论文分享&&PLM源码】预训练模型BERT玩转Twitter(70亿数据对、100多种语言)

本文转自:https://blog.csdn.net/weixin_39910711/article/details/89483662

点击下方链接🔗关注我们

「创作实属不易,点个赞、再看吧」

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存