判别式模型与生成式模型
机器学习模型有两个重要类别:判别式模型与生成式模型。这两种模型的区别,是很多初学者会遇到的一个坎儿。
判别式模型的意思是,给出一条数据,模型要为数据给出一个类别。一般来说,数据是比较复杂的,比如一句话、一张图这样的;类别则比较简单,一般就是「是」或「否」,或者有限的几个类别。用 X 表示数据,Y 表示类别,则判别式模型建模的就是 P(Y|X)。至于 X 本身的分布是怎样的,判别式模型并不关心。
而生成式模型的意思是,模型要具有凭空生成数据和类别的能力,即它要建模 P(X,Y)。这通常是通过建模 P(Y) 和 P(X|Y) 这两步来实现的。P(Y) 就是一个简单的二项或多项分布,没什么意思,所以生成式模型的重点在于 P(X|Y),即建模每个类别下数据的分布。
对比判别式模型和生成式模型,可以发现 P(Y|X) 是「从复杂到简单」,而 P(X|Y) 是「从简单到复杂」。这说明生成式模型里含有的「知识」比判别式模型要多。如果有了一个生成式模型,可以根据贝叶斯公式 得到一个判别式模型;反过来,仅有一个判别式模型,是推不出一个生成式模型的。
这在日常生活中有什么体现呢?比如,你有 100 个朋友,当你看到一张脸时,你能够认出这是谁;但让你凭记忆描述出一个朋友的长相,你可能就有很多细节记不清楚。这是因为,辨认出一个朋友并不一定需要记住他/她长相的所有方面 —— 比如,左脸上有颗痣可能就已经能锁定一个朋友了,你并不需要记住他/她是什么发型、是单眼皮还是双眼皮、戴不戴眼镜等等。一般来讲,我们对朋友们长相的记忆足以构成一个判别式模型,但不足以构成一个生成式模型。在心理学上,上面的判别叫做「再认」,而生成叫做「回忆」,回忆是比再认更困难的任务。
在知乎上,我们经常看到一句话,叫做「评价冰箱好不好,不用自己会制冷」。这里,「评价冰箱好不好」就是判别式模型的任务,而「自己会制冷」则是生成式模型的任务。这句话在机器学习中就很有道理,因为如果目的只是做判别的话,并不需要生成式模型那么多的知识。
判别式模型有一个「缺陷」,就是当输入数据偏离真实分布时,模型不会察觉到异常,而是会像对待正常数据一样输出一个类别。在这种情况下,输出的类别很可能是无意义的。曾经有一则「绿茶验尿」的新闻闹得沸沸扬扬。实际上,这就属于输入数据(茶)偏离真实分布(尿)的情况,而检测尿的仪器只是一个判别式模型,它无从知道输入数据有问题,在这种情况下,它无论给出怎样的输出,都是无意义的。