【问题标题】:What is the difference between a generative and a discriminative algorithm? [closed]生成算法和判别算法有什么区别? [关闭]
【发布时间】:2010-10-27 03:18:31
【问题描述】:

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

【问题讨论】:

标签: algorithm machine-learning generative


【解决方案1】:

下表总结了不同的模型:

图片来源:Supervised Learning cheatsheet - Stanford CS 229 (Machine Learning)

【讨论】:

    【解决方案2】:

    简短的回答

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

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

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

    更广泛和更基本的定义 [2] 似乎同样适合这个一般问题:

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

    Image source


    仔细观察

    即便如此,这个问题在某种程度上暗示了一种错误的二分法 [3]。生成-判别“二分法”实际上是一个,您甚至可以在 [4] 之间进行平滑插值。

    因此,这种区分变得任意且令人困惑,尤其是当许多流行模型不能完全归入其中 [5,6] 或者实际上是混合模型(经典的“判别”和“生成”模型)。

    尽管如此,它仍然是一个非常有用且常见的区别。我们可以列出一些典型的和最近的生成模型和判别模型的明确示例:

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

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

    最后,定义在不断发展,尤其是在这个快速发展的领域:) 最好对它们持保留态度,甚至可以为自己和他人重新定义它们。


    来源

    1. 可能源自“机器学习 - 判别和生成”(Tony Jebara,2004 年)。
    2. Crash Course in Machine Learning by Google
    3. The Generative-Discriminative Fallacy
    4. "Principled Hybrids of Generative and Discriminative Models" (Lasserre et al., 2006)
    5. @shimao's question
    6. Binu Jasim's answer
    7. 比较逻辑回归和朴素贝叶斯:
    8. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/04/DengJaitly2015-ch1-2.pdf
    9. "Your classifier is secretly an energy-based model" (Grathwohl et al., 2019)
    10. Stanford CS236 notes:从技术上讲,概率判别模型也是基于数据的标签的生成模型。但是,生成模型一词通常用于高维数据。

    【讨论】:

    【解决方案3】:

    This 文章对我理解这个概念有很大帮助。

    总之,

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

    一些不错的阅读材料:conditional probabilityJoint PDF

    【讨论】:

      【解决方案4】:

      在实践中,模型使用如下。

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

      考虑到x,它只选择最有可能的类y。这就像我们试图模拟类之间的决策边界。这种行为在神经网络中非常明显,其中计算的权重可以看作是在空间中隔离类元素的复杂形状的曲线。

      现在,使用贝叶斯规则,让我们将等式中的 替换为。由于您只对 arg max 感兴趣,因此您可以消除分母,这对于每个 y 都是相同的。所以,你就剩下了

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

      在第一种情况下,您有 条件概率分布 p(y|x),它模拟了类之间的边界,而在第二种情况下,您有 联合概率分布 @987654331 @,因为p(x | y) p(y) = p(x, y),它显式模拟每个类的实际分布

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

      【讨论】:

      • 根据这个推理,当应用于同一分布时,生成模型和判别模型不相等吗?那么为什么分类行为会有所不同呢?还是在这种最大似然情况下它们是相等的?
      • 要判断它们是否“相等”,我们需要首先定义我们的意思。有许多共同点,但最大的区别在于所采用的策略:对分布建模(生成)与预测类别,而不考虑分布(判别)——例如,考虑一下 KNN。
      【解决方案5】:

      之前的所有答案都很棒,我想再补充一点。

      从生成算法模型中,我们可以推导出任何分布;而我们只能从判别算法模型中得到条件分布P(Y|X)(或者我们可以说它们只对判别Y的标签有用),这就是为什么它被称为判别模型。判别模型不假设 X 在给定 Y($X_i \perp X_{-i} | Y$) 的情况下是独立的,因此对于计算条件分布通常更强大。

      【讨论】:

        【解决方案6】:

        这是 CS299 的 lecture notes 中与该主题相关的最重要部分(作者 Andrew Ng),真的帮助我理解了 discriminative 和 生成式学习算法。

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

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

        这是一种不同的方法。首先,看大象,我们可以建立一个 大象长什么样的模型。然后,看着狗,我们可以建立一个 狗的样子的单独模型。最后,对一种新动物进行分类, 我们可以将新动物与大象模型进行匹配,并将其与 狗模型,看看新动物是否更像大象 或者更像是我们在训练集中看到的狗。我们将这些称为生成学习算法

        【讨论】:

          【解决方案7】:

          假设您有输入数据x,并且您想将数据分类为标签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) 对。

          从上面的描述中,您可能会认为生成模型更普遍有用,因此更好,但事实并非如此简单。 This paper 是关于判别分类器与生成分类器主题的非常受欢迎的参考资料,但它的内容非常繁重。总体要点是判别模型在分类任务中的表现通常优于生成模型。

          【讨论】:

          • 感谢您的论文。作者现在是斯坦福大学的教授,在stanford.edu/class/cs229/materials.html拥有很好的资源
          • Andrew Ng here的一个很好的解释
          • 当盯着矩阵观察时,在第一个矩阵中,所有条目的总和为 1.0,而在第二个矩阵中,每行总和为 1。这将加速启蒙(并减少混乱)
          • Andrew Ng 在这里的注释也很有用:cs229.stanford.edu/notes/cs229-notes2.pdf
          • “这就是为什么直接建模它的算法被称为判别算法”,仍然不确定为什么p(y|x)暗示建模它的算法被称为“判别模型”。
          【解决方案8】:

          假设你的任务是将语音分类为一种语言。

          你可以这样做:

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

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

          第一个是生成方法,第二个是discriminative方法。

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

          【讨论】:

          【解决方案9】:

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

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

          【讨论】:

          • 我得到的是生成模型是基于监督学习的,而判别模型是基于无监督学习的。我说的对吗?
          • @WaseemAhmadNaeem 有点像,但又不是。 y 始终是目标,并且需要作为输入数据的一部分,因此两者都受到监督。生成式似乎是无监督的,因为第一步是获得完整的分布(在所有变量中,不考虑 y 是特殊的)。如果您停在那里并且不将 y 视为特殊的,那么该部分本身就是无人监督的。
          • @Mitch 我可以请你分享一些关于两者区别的论文/笔记/链接吗?实际上我对这个概念有点困惑。提前谢谢你
          • @WaseemAhmadNaeem 搜索Cross Validated.SE(stats/ML SE 站点),尤其是Generative vs DiscriminativeGenerative vs discriminative models in a Bayesian context。基本示例朴素贝叶斯是生成的,逻辑回归是判别的。 More examples of both.
          【解决方案10】:

          生成算法对如何生成数据进行建模,以便对信号进行分类。它提出了一个问题:根据我的生成假设,哪个类别最有可能生成此信号?

          判别算法不关心数据是如何生成的,它只是对给定信号进行分类。

          【讨论】:

          • 这个答案让我很困惑。两类算法都属于监督学习算法类,它们学习标记的训练数据模型以导出预测其他数据的函数。您描述的判别算法听起来好像没有创建模型,对吗?如果你能在这方面加强你的回答,我会很高兴。
          • @mcb 生成算法模拟数据是如何“生成”的,所以你问它“这个或那个类生成这个实例的可能性是多少?”并选择概率更高的那个。判别算法使用数据创建决策边界,因此您会问它“此实例在决策边界的哪一侧?”因此,它不会创建数据生成方式的模型,而是创建它认为的类之间边界的模型。
          • 那么像朴素贝叶斯这样的生成模型,没有决策边界吗?
          • 所以生成模型似乎更具有可解释性?
          【解决方案11】:

          与上面 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:部分答案摘自source

          【讨论】:

            【解决方案12】:

            我的两分钱: 歧视性方法突出差异 生成式方法不关注差异;他们试图建立一个代表班级的模型。 两者之间有重叠。 理想情况下,两种方法都应使用:一种有助于发现相似之处,另一种有助于发现不相似之处。

            【讨论】:

              【解决方案13】:

              一般来说,机器学习社区有一种做法,就是不要学习你不想学习的东西。例如,考虑一个分类问题,其中一个人的目标是将 y 标签分配给给定的 x 输入。如果我们使用生成模型

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

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

              【讨论】:

                猜你喜欢
                • 2011-03-24
                • 2017-07-24
                • 2012-09-16
                • 2010-12-26
                • 2011-02-22
                • 2010-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多