生成算法和判别算法有什么区别?


587

请帮助我理解生成算法和 判别算法之间的区别,请记住我只是一个初学者。


4
这份文件(以下也由anguyen8指出)是一个很好的文件:cs229.stanford.edu/notes/cs229-notes2.pdf
GuSuku 2015年

5
另请参阅有关stats.SE的同一问题:SE:生成式与区分式
Lenar Hoyt

对于简单和直观的答案,请单击此处stackoverflow.com/a/52412379/7160346
Ravi G

Answers:


840

假设您有输入数据,x并且想要将数据分类为label y。生成模型学习联合概率分布,p(x,y)而判别模型学习条件概率分布p(y|x)-您应将其理解为y给定概率x

这是一个非常简单的示例。假设您具有以下形式的数据(x,y)

(1,0), (1,0), (2,0), (2, 1)

p(x,y)

      y=0   y=1
     -----------
x=1 | 1/2   0
x=2 | 1/4   1/4

p(y|x)

      y=0   y=1
     -----------
x=1 | 1     0
x=2 | 1/2   1/2

如果花几分钟盯着这两个矩阵,您将了解两个概率分布之间的差异。

分布p(y|x)是用于将给定示例分类x为类的自然分布y,这就是为什么将对此直接建模的算法称为判别算法的原因。生成算法模型p(x,y),可以p(y|x)通过应用贝叶斯规则将其转换为模型,然后用于分类。但是,该分发p(x,y)也可以用于其他目的。例如,您可以p(x,y)用来生成可能的(x,y)对。

从上面的描述中,您可能会认为生成模型更有用,因此更好,但是却不那么简单。本文是关于判别式分类器与生成式分类器的非常受欢迎的参考,但它的工作量很大。总体要点是,在分类任务中,区分模型通常要优于生成模型。


48
谢谢你的论文。作者现在是斯坦福大学(Stanford)教授,并在stanford.edu/class/cs229/materials.html上
2009年

26
一个很好的解释也由安德鲁·吴在这里
clyfe

39
凝视矩阵时,请注意在第一个矩阵中,所有条目的总和为1.0,而在第二个矩阵中,每行的总和为1。这将加快启蒙速度(并减少混乱)
Maxim Khesin

5
Ng的注释在这里也非常有用:cs229.stanford.edu/notes/cs229-notes2.pdf
anh_ng8 2014年

1
“这就是为什么直接对其建模的算法被称为判别算法”,仍然不确定为什么p(y|x)暗示将对其建模的算法被称为“判别模型”。
nbro

291

一个生成算法模型如何将数据以分类的信号产生。它提出了一个问题:根据我的世代假设,哪个类别最有可能产生此信号?

一个判别算法不关心是如何产生的数据,它只是分类的给定信号。


6
这个答案使我感到困惑。两种算法都属于有监督学习算法的类别,该算法学习有标签的训练数据模型,以得出预测其他数据的函数。您所描述的区分算法听起来好像没有创建模型,对吗?如果您能在这方面加强回答,我将感到高兴。
Lenar Hoyt 2014年

42
@mcb生成算法对如何“生成”数据建模,因此您问“该类生成该实例的可能性是多少?” 并选择概率更高的那个。判别算法使用数据创建决策边界,因此您会问“此实例在决策边界的哪一边?” 因此,它不会创建数据生成方式的模型,而是会创建其认为​​类之间的边界看起来如何的模型。
安东尼

1
因此,像朴素贝叶斯这样的生成模型没有决策边界吗?
sheetal_158 '16

4
那么生成模型似乎更适合于解释性?
Candic3

157

想象您的任务是将语音分类为一种语言。

您可以通过以下两种方式之一进行操作:

  1. 学习每种语言,然后使用您刚刚获得的知识对其进行分类

要么

  1. 在不学习语言的情况下确定语言模型的差异,然后对语音进行分类。

第一个是生成方法,第二个是判别方法。

检查此参考以获取更多详细信息:http : //www.cedar.buffalo.edu/~srihari/CSE574/Discriminative-Generative.pdf


2
是不是反过来了?考虑到您已经学会了该语言,因此您是在条件分布上进行操作的,因此应该采用区别对待的方法吗?
2015年

在阅读以下答案后,我认为这也是另一种方式-Ghrua撰写的CS299讲义示例
Mitali Cyrus

132

实际上,这些模型的用法如下。

判别模型中,要y根据训练示例预测标签x,您必须评估:

在此处输入图片说明

这只是选择最有可能y考虑的课程x。就像我们试图在类之间的决策边界建模一样。这种行为在神经网络中非常清楚,在神经网络中,计算出的权重可以看作是一条复杂的形状的曲线,隔离了空间中某个类别的元素。

现在,使用贝叶斯(Bayes)规则,在此处输入图片说明将等式中的替换为在此处输入图片说明。由于您只对arg max感兴趣,因此可以消除分母,每个分母都相同y。所以,你剩下

在此处输入图片说明

这是您在生成模型中使用的方程式。

在第一种情况下,您具有条件概率分布 p(y|x),该条件概率模型对类之间的边界进行了建模;在第二种情况下,您具有联合概率分布 p(x, y),因为p(x | y) p(y) = p(x, y)后者显式地对每个类的实际分布进行了建模

使用联合概率分布函数,给定a y,您可以计算(“生成”)其各自的x。因此,它们被称为“生成”模型。


3
以此推理,当将生成模型和判别模型应用于相同分布时,该模型是否相等?那么为什么分类行为有所不同?还是在这种最大可能性情况下它们相等?
塞巴斯蒂安·格拉夫

要判断它们是否“相等”,我们需要首先定义我们的意思。有很多共同点,但是最大的区别是采用的策略:对分布(生成)进行建模与预测类,而不考虑分布(区分)—举例来说,请考虑一下KNN。
Saul Berardo

90

这是与该主题相关的CS299(由Andrew Ng撰写)的讲义中最重要的部分,它确实有助于我理解判别式学习算法与生成式学习算法之间的区别

假设我们有两类动物,大象(y = 1)和狗(y = 0)。而X是动物的特征向量。

给定训练集,诸如逻辑回归或感知器算法之类的算法(基本上)会尝试找到一条将大象和狗分开的直线(即决策边界)。然后,要将新动物归类为大象或狗,它会检查它落在决策边界的哪一侧,并据此做出预测。我们称这些判别学习算法

这是另一种方法。首先,看看大象,我们可以建立一个大象长什么样的模型。然后,查看狗,我们可以为狗的外观建立一个单独的模型。最后,要对新动物进行分类,我们可以将新动物与大象模型进行匹配,并与狗模型进行匹配,以查看新动物看起来更像大象还是更像我们在训练集中看到的狗。我们称这些生成学习算法


33

通常,机器学习社区中有一种惯例是不学习您不想学习的东西。例如,考虑一个分类问题,其中一个目标是将y标签分配给给定的x输入。如果我们使用生成模型

p(x,y)=p(y|x).p(x)

我们必须对与手头任务无关的p(x)建模。诸如数据稀疏之类的实际限制将迫使我们p(x)使用一些弱的独立性假设进行建模。因此,我们直观地使用判别模型进行分类。



22

一个附加的信息点与上面的StompChicken的答案非常吻合。

判别模型生成模型之间的根本区别是:

判别模型学习类之间的(硬或软)边界

生成模型对单个类的分布进行建模

编辑:

生成模型是可以生成数据的模型。它对特征和类(即完整数据)进行建模。

如果我们建模P(x,y):我可以使用这种概率分布来生成数据点-因此所有算法建模P(x,y)都是可生成的。

例如。生成模型

  • 朴素贝叶斯模型P(c)P(d|c)-哪里c是类d为特征向量。

    也, P(c,d) = P(c) * P(d|c)

    因此,朴素贝叶斯在某些形式模型中 P(c,d)

  • 贝叶斯网

  • 马尔可夫网

区分模型是只能用于对数据点进行区分/分类的模型。您只需要P(y|x)在这种情况下建模(即给定特征向量的类概率)。

例如。判别模型:

  • 逻辑回归

  • 神经网络

  • 条件随机场

通常,生成模型需要比区分模型建模得多,因此有时效果不佳。事实上,大多数(不确定是否全部)无监督学习算法(例如聚类等)都可以称为生成式,因为它们可以建模P(d)(并且没有类:P)

PS:部分答案来自资料来源


8

简短的答案

这里的许多答案都依赖于广泛使用的数学定义[1]:

  • 判别模型直接学习条件预测分布p(y|x)
  • 生成模型学习联合分布p(x,y)(或更确切地说,是p(x|y)p(y))。
    • p(y|x)可以使用贝叶斯规则获得预测分布。

尽管非常有用,但是这种狭义的定义采用了监督设置,并且在检查无监督或半监督方法时不那么方便。它也不适用于许多当代的深度生成建模方法。例如,现在我们有了隐含的生成模型,例如,生成对抗网络(GAN),该模型基于采样,甚至没有显式地对概率密度建模p(x)(而是通过鉴别器网络学习发散度量)。但是我们称它们为“生成模型”,因为它们用于生成(高维[10])样本。

一个更广泛,更基础的定义 [2]似乎同样适用于这个一般性问题:

  • 判别模型学习班级之间的界限。
    • 因此,它们可以区分不同类型的数据实例。
  • 生成模型学习数据的分布。
    • 因此,他们可以生成新的数据实例。

来自http://primo.ai/index.php?title=Discriminative_vs._Generative 图片来源


仔细看看

即使这样,这个问题也隐含着错误的二分法[3]。实际上,生成歧视的“二分法”是一个甚至可以在[4]之间平滑内插的频谱

结果,这种区分变得任意而又令人困惑,尤其是当许多流行的模型不能整齐地落入一个模型[5,6]或实际上是混合模型时(经典的“区分”模型和“生成”模型的组合) 。

尽管如此,这仍然是一个非常有用和通用的区别。我们可以列举一些规范的和最新的生成模型和判别模型的清晰示例:

  • 生成的:朴素贝叶斯,潜在狄利克雷分配(LDA),生成对抗网络(GAN),变分自动编码器(VAE),标准化流。
  • 判别式:支持向量机(SVM),逻辑回归,大多数深度神经网络。

还有很多有趣的工作深入研究了生成-区分鸿沟[7]和频谱[4,8],甚至将判别模型转换为生成模型[9]。

最后,定义在不断发展,尤其是在这个快速增长的领域中:)最好带些盐,甚至为自己和他人重新定义。


资料来源

  1. 可能源自“机器学习-判别式和生成式”(Tony Jebara,2004年)。
  2. Google机器学习速成课程
  3. 生成歧视谬论
  4. “生成模型和判别模型的原则混合”(Lasserre等人,2006)
  5. @shimao的问题
  6. Binu Jasim的答案
  7. 比较逻辑回归和朴素贝叶斯:
  8. https://www.microsoft.com/zh-cn/research/wp-content/uploads/2016/04/DengJaitly2015-ch1-2.pdf
  9. “您的分类器是秘密的基于能量的模型”(Grathwohl等,2019)
  10. Stanford CS236注意:从技术上讲,概率判别模型也是基于数据的标签的生成模型。但是,术语生成模型通常保留用于高维数据。

1
这确实应该有更多的支持。您是我发现的“假二分法”想法的唯一答案。我的操作系统类似这样的一个问题:stats.stackexchange.com/questions/408421/...
安东尼奥·路易斯·SOMBRA

1

先前的所有答案都很棒,我想再指出一点。

从生成算法模型中,我们可以得出任何分布。虽然我们只能从判别算法模型中获得条件分布P(Y | X)(或者可以说它们仅用于判别Y的标签),这就是为什么将其称为判别模型的原因。判别模型没有假定X在给定Y($ X_i \ perp X _ {-i} | Y $)的情况下是独立的,因此对于计算该条件分布通常更有效。


0

我的两分钱:歧视性方法凸显差异生成性方法并不关注差异。他们试图建立一个代表班级代表的模型。两者之间存在重叠。理想情况下,应同时使用两种方法:一种将有助于发现相似性,而另一种将有助于发现非相似性。


0

生成算法模型将完全从训练数据中学习并预测响应。

判别算法的工作只是对这两种结果进行分类或区分。


我得到的是生成模型是基于监督学习的,而区分模型则是基于无监督学习的。我对吗?
Waseem Ahmad Naeem '18

@WaseemAhmadNaeem有点,但不是。y始终是目标,并且是输入数据的一部分,因此需要对它们进行监督。生成似乎不受监督,因为第一步是获得完整的分布(在所有var中,不将y视为特殊)。如果您在此处停下来并且不将y视为特殊,则该部分本身将不受监督。
米奇

@Mitch我可以要求您就两者的区别分享一些论文/笔记/链接吗?实际上我对此概念有些困惑。谢谢你在前进
瓦西姆·艾哈迈德纳伊姆

@WaseemAhmadNaeem搜索在跨Validated.SE特别是(统计资料/ ML SE网站)剖成VS判别剖成VS在贝叶斯背景判别模型。基本示例朴素贝叶斯具有生成性,逻辑回归具有判别性。两者都有更多示例
米奇

0

文章帮了我很多理解的概念。

综上所述,

  • 两者都是概率模型,这意味着它们都使用概率(准确地说是条件概率)来计算未知数据的类。
  • 生成分类器对数据集应用联合PDF和贝叶斯定理,并使用这些值计算条件概率。
  • 判别式分类器直接在数据集上找到条件概率

一些不错的阅读材料: 条件概率联合PDF

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.