生成算法和 判别算法有什么区别?
13 回答
假设您有输入数据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)
配对。
从上面的描述中,您可能会认为生成模型更普遍有用,因此更好,但事实并非如此简单。这篇论文是关于判别式与生成式分类器主题的非常受欢迎的参考资料,但它的内容非常繁重。总体要点是判别模型在分类任务中通常优于生成模型。
生成算法对如何生成数据进行建模,以便对信号进行分类。它提出了一个问题:根据我的生成假设,哪个类别最有可能生成此信号?
判别算法不关心数据是如何生成的,它只是对给定的信号进行分类。
想象一下,您的任务是将语音分类为一种语言。
您可以通过以下任一方式进行:
- 学习每种语言,然后使用您刚刚获得的知识对其进行分类
或者
- 在不学习语言的情况下确定语言模型的差异,然后对语音进行分类。
第一个是生成方法,第二个是判别方法。
查看此参考以获取更多详细信息:http ://www.cedar.buffalo.edu/~srihari/CSE574/Discriminative-Generative.pdf 。
在实践中,模型的使用如下。
在判别模型y
中,要从训练示例中预测标签x
,您必须评估:
它只是选择最有可能y
考虑的类x
。就像我们试图对类之间的决策边界进行建模一样。这种行为在神经网络中非常明显,其中计算的权重可以看作是在空间中隔离类元素的复杂形状的曲线。
现在,使用贝叶斯规则,让我们将等式中的 替换为。由于您只对arg max感兴趣,因此您可以消除分母,这对于每个 都是相同的y
。所以,你只剩下
这是您在生成模型中使用的方程。
在第一种情况下,您有条件概率分布 p(y|x)
,它模拟了类之间的边界,而在第二种情况下,您有联合概率分布 p(x, y)
,因为p(x | y) p(y) = p(x, y)
,它明确地模拟了每个类的实际分布。
使用联合概率分布函数,给定 a y
,您可以计算(“生成”)其各自的x
。因此,它们被称为“生成”模型。
这是 CS299(Andrew Ng 撰写)讲义中与该主题相关的最重要部分,它确实帮助我理解了判别式和生成式学习算法之间的区别。
假设我们有两类动物,大象 ( y = 1
) 和狗 ( y = 0
)。x是动物的特征向量。
给定一个训练集,逻辑回归或感知器算法(基本上)试图找到一条直线——即决策边界——将大象和狗分开。然后,为了将新动物分类为大象或狗,它检查它落在决策边界的哪一侧,并据此做出预测。我们将这些称为判别学习算法。
这是一种不同的方法。首先,看大象,我们可以建立一个大象长什么样的模型。然后,看看狗,我们可以建立一个单独的模型来了解狗的样子。最后,为了对新动物进行分类,我们可以将新动物与大象模型进行匹配,并将其与狗模型进行匹配,看看新动物看起来更像大象还是更像我们在训练集中看到的狗. 我们称这些生成学习算法。
一般来说,机器学习社区有一种做法,就是不要学习你不想学习的东西。例如,考虑一个分类问题,其中一个人的目标是将 y 标签分配给给定的 x 输入。如果我们使用生成模型
p(x,y)=p(y|x).p(x)
我们必须对与手头的任务无关的 p(x) 进行建模。数据稀疏等实际限制将迫使我们p(x)
使用一些弱独立性假设进行建模。因此,我们直观地使用判别模型进行分类。
简短的回答
这里的许多答案都依赖于广泛使用的数学定义 [1]:
- 判别模型直接学习条件预测分布
p(y|x)
。- 生成模型学习联合分布
p(x,y)
(或者更确切地说,p(x|y)
和p(y)
)。
p(y|x)
可以使用贝叶斯规则获得预测分布。
虽然非常有用,但这个狭义的定义假设了有监督的设置,并且在检查无监督或半监督方法时不太方便。它也不适用于许多当代深度生成建模方法。例如,现在我们有隐式生成模型,例如生成对抗网络 (GAN),它们是基于采样的,甚至不显式建模概率密度p(x)
(而是通过鉴别器网络学习散度度量)。但我们称它们为“生成模型”,因为它们用于生成(高维 [10])样本。
一个更广泛和更基本的定义[2] 似乎同样适合这个一般问题:
- 判别模型学习类之间的边界。
- 因此它们可以区分不同类型的数据实例。
- 生成模型学习数据的分布。
- 所以他们可以生成新的数据实例。
仔细看看
即便如此,这个问题在某种程度上暗示了一种错误的二分法[3]。生成-判别“二分法”实际上是一个频谱,您甚至可以在 [4] 之间进行平滑插值。
因此,这种区分变得任意且令人困惑,尤其是当许多流行模型没有完全归入其中一种时 [5,6],或者实际上是混合模型(经典的“判别”模型和“生成”模型的组合) .
尽管如此,它仍然是一个非常有用和常见的区别。我们可以列出一些典型的和最近的生成模型和判别模型的明确示例:
- 生成:朴素贝叶斯、潜在狄利克雷分配 (LDA)、生成对抗网络 (GAN)、变分自动编码器 (VAE)、规范化流。
- 判别:支持向量机 (SVM)、逻辑回归、大多数深度神经网络。
还有很多有趣的工作深入研究了生成-判别分界 [7] 和频谱 [4,8],甚至将判别模型转化为生成模型 [9]。
最后,定义在不断发展,尤其是在这个快速发展的领域:) 最好对它们持保留态度,甚至为自己和他人重新定义它们。
来源
- 可能源自“机器学习 - 判别和生成”(Tony Jebara,2004)。
- Google 机器学习速成课程
- 生成-判别谬误
- “生成模型和判别模型的原则混合”(Lasserre 等人,2006 年)
- @shimao的问题
- 比努贾西姆的回答
- 比较逻辑回归和朴素贝叶斯:
- https://www.microsoft.com/en-us/research/wp-content/uploads/2016/04/DengJaitly2015-ch1-2.pdf
- “你的分类器秘密地是一个基于能量的模型”(Grathwohl 等人,2019 年)
- 斯坦福 CS236 笔记:从技术上讲,概率判别模型也是基于数据的标签的生成模型。然而,术语生成模型通常是为高维数据保留的。
一个额外的信息点,与上面 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:部分答案摘自源码
生成算法模型将从训练数据中完全学习并预测响应。
判别算法的工作只是对两种结果进行分类或区分。
之前的所有答案都很棒,我想再补充一点。
从生成算法模型中,我们可以推导出任何分布;而我们只能从判别算法模型中获得条件分布P(Y|X)(或者我们可以说它们只对判别Y的标签有用),这就是为什么它被称为判别模型。在给定 Y($X_i \perp X_{-i} | Y$) 的情况下,判别模型不假设 X 是独立的,因此通常对于计算该条件分布更有效。
我的两分钱: 判别式方法突出差异 生成式方法不关注差异;他们试图建立一个代表班级的模型。两者之间有重叠。理想情况下,两种方法都应使用:一种有助于发现相似之处,另一种有助于发现不相似之处。