“生成”和“判别”这两词在人工智能领域太过于常见了,有时候越是简单的几个字的组合,理解起来越是模糊。这里说的“生成模型”指的是机器学习领域的,而不是NLP里的各种Seq2Seq生成模型,也是一开始在我入门机器学习时忽略掉的一个概念。
- 首先最直观、最好理解的区分方法是:
- 生成模型能表示成联合概率 P ( X , Y ) P(X,Y) P(X,Y) 的形式,然后也可以通过贝叶斯定理 P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y) 转化成判别模型;
- 但是判别模型不行,它是由条件概率
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X) 进行表示的。
- 然后,我们再从上述表示形式出发,探究下这两个模型的本质:
上面这幅图很好的说明了联合概率和条件概率两种表示到底有什么不同:
判别模型它可以看作是有一个判别面的(如上左图),给定输入
X
X
X,通过模型计算我们就可以知道
X
X
X 划分到
Y
Y
Y 各类的概率,将概率最大的看作模型预测结果(这就是判别 的意思);
而生成模型呢,它是将样本
X
X
X 的特征和其标签
Y
Y
Y 统一看作输入特征,来看这一特征处于哪一类的概率最大。生成模型将标签
Y
Y
Y 也看做一个特征,相当于“生成”了n(n为
Y
Y
Y类别的个数)个样本
(
X
,
Y
1
)
,
(
X
,
Y
2
)
.
.
.
(
X
,
Y
n
)
(X,Y_1),(X,Y_2)...(X,Y_n)
(X,Y1),(X,Y2)...(X,Yn),然后将最大的
P
(
X
,
Y
i
)
P(X,Y_i)
P(X,Yi)作为预测结果。
下面是维基百科上Generative条目里的一个经典的案例:
假设有四个Samples
sample 1 | sample 2 | sample 3 | sample 4 | |
---|---|---|---|---|
x | 0 | 0 | 1 | 1 |
y | 0 | 0 | 0 | 1 |
生成式模型的世界是这个样子的
y=0 | y=1 | |
---|---|---|
x=0 | 1 2 \frac{1}{2} 21 | 0 |
x=1 | 1 4 \frac{1}{4} 41 | 1 4 \frac{1}{4} 41 |
∑ P ( x , y ) = 1 \sum P(x, y) = 1 ∑P(x,y)=1
而判别式模型的世界是这个样子的:
y=0 | y=1 | |
---|---|---|
x=0 | 1 | 0 |
x=1 | 1 2 \frac{1}{2} 21 | 1 2 \frac{1}{2} 21 |
∑ y P ( y ∣ x ) = 1 \sum_{y} P(y \mid x)=1 y∑P(y∣x)=1
OK,至此你应该对生成模型和判别模型有了进一步的了解,那两种模型各自有哪些优缺点呢?
- 生成模型:
- 优点:
- 1)生成给出的是联合分布,不仅能够由联合分布计算条件分布(反之则不行),还可以给出其他信息,比如可以使用来计算边缘分布。如果一个输入样本的边缘分布很小的话,那么可以认为学习出的这个模型可能不太适合对这个样本进行分类,分类效果可能会不好,这也是所谓的outlier detection。
- 2)生成模型收敛速度比较快,即当样本数量较多时,生成模型能更快地收敛于真实模型。
- 3)生成模型能够应付存在隐变量的情况,比如混合高斯模型就是含有隐变量的生成方法。
- 缺点:
- 1)天下没有免费午餐,联合分布是能提供更多的信息,但也需要更多的样本和更多计算,尤其是为了更准确估计类别条件分布,需要增加样本的数目,而且类别条件概率的许多信息是我们做分类用不到,因而如果我们只需要做分类任务,就浪费了计算资源。
- 2)另外,实践中多数情况下判别模型效果更好。
- 优点:
- 判别模型:
- 优点:
- 1)与生成模型缺点对应,首先是节省计算资源,另外,需要的样本数量也少于生成模型。
- 2)准确率往往较生成模型高。
- 3)由于直接学习,而不需要求解类别条件概率,所以允许我们对输入进行抽象(比如降维、构造等),从而能够简化学习问题。
- 缺点:
- 没有生成模型的上述优点。
- 优点:
最后唠叨一句:
我发现我学习新东西时很容易一开始图快,以至于许多基础的概念并没有弄懂还抓紧着往深处学,如今入门NLP已快一年了,如果想要在这一个领域深入发展,这打地基的账还是得还的呀!
但是,话说回来,这种“不扎实”也有好处,如果一开始就直接扣这些概念,很容易将自己的一厢”热情“给磨灭掉。反过来,当你学的相关知识多了,这些基础的概念也会在你学习的过当中慢慢的加深理解!