神经网络:多类别分类#
本页、节要点:
- 多类别分类:从两个以上的候选里挑出答案,而不像二元分类那样只做二选一。
- 两条主要路线:一对多(one-vs.-all)与一对一(one-vs.-one,后者通常就叫 softmax)。
- 一对多:用多个二元分类器,各自独立地算出每一个类别的概率。
- 一对一(softmax):预测每个类别相对于其他所有类别的概率,softmax 保证所有概率加起来正好是 1。
- softmax 的效率:类别少的时候很划算,类别一多计算成本就吃不消;候选采样是提效的替代方案。
前面几节我们接触过的分类模型都只做二选一,比如:
这封邮件是不是垃圾邮件。
这个肿瘤是恶性的还是良性的。
这一节要研究的是多类别分类模型,它们可以从多个候选中挑出答案,比如:
这条狗是比格犬、巴吉度还是寻血猎犬?
这朵花是西伯利亚鸢尾、荷兰鸢尾、蓝旗鸢尾还是矮须鸢尾?
那架飞机是波音 747、空客 320、波音 777,还是巴航工业 190?
这张图是苹果、熊、糖果、狗还是鸡蛋?
真实世界里的多类别问题,甚至可能要在数百万个类别中做选择——比如那种几乎能认出任何东西的图像多类别分类模型。
本节详解多类别分类的两个主要变体:
一对多(one-vs.-all)
一对一(one-vs.-one),通常就叫 softmax
一对多#
一对多给出了一条把二元分类用成一连串「是 / 否」判断的路子。
如果一个分类问题有 N 个可能的答案,一对多方案就是由 N 个彼此独立的二元分类器组成——每种可能的结果配一个。训练的时候,模型依次跑过这一串二元分类器,把每一个都训练成能回答自己那个独立的问题。
举个例子:拿到一张水果的图片,训练时可能会得到 4 个不同的识别器,每个都回答一个不同的是非题:
这张图是苹果吗?
这张图是橙子吗?
这张图是香蕉吗?
这张图是葡萄吗?
下图展示了这套做法在实践中是怎么跑起来的。

提示: 想知道二元分类器到底是怎么做出预测的(也就是怎么设定分类阈值,把模型输出的数值变成「正」或「负」的标签),可以看看分类模块。
当类别总数不多时,这套做法相当合理;但类别一多,效率就越来越差。
不过我们可以用深层神经网络做出一对多得高效得多的模型:让每个输出节点代表一个不同的类别。下图就是这种做法。

一对一(softmax)#
你可能已经注意到,图 8 输出层里那些概率值加起来并不是 1.0(也就是 100%)——实际上它们加起来是 1.43。
在一对多做法里,每一组二元结果的概率都是独立于其他所有组算出来的。也就是说,我们判断「苹果 vs 非苹果」的概率时,并没有把「橙子」「梨」「葡萄」这些选项的可能性考虑进去。
可如果我们想预测的是各种水果彼此之间的概率呢?这时要预测的不再是「苹果 vs 非苹果」,而是「苹果 vs 橙子 vs 梨 vs 葡萄」。这种多类别分类就叫一对一分类。
一对一分类可以沿用一对多那套一模一样的网络架构来实现,只有一个关键区别:输出层需要换一种变换。
一对多里,我们给每个输出节点独立地施加 sigmoid 激活函数,得到的输出值落在 0 到 1 之间,但并不保证这些值加起来恰好等于 1。
一对一里,我们可以改用一个叫 softmax 的函数。它给多类别问题中的每个类别分配一个小数概率,让所有概率加起来正好是 1.0。这条额外的约束能帮助训练比原本更快收敛。
softmax 公式如下:
$$ p(y = j|\textbf{x}) = \frac{e^{(\textbf{w}_j^{T}\textbf{x} + b_j)}}{\sum_{k\in K} {e^{(\textbf{w}_k^{T}\textbf{x} + b_k)}} } $$注意,这个公式基本上就是把逻辑回归的公式扩展到了多个类别。
下图把前面那个一对多的多类别分类任务,重新实现成了一对一的任务。要做 softmax,紧挨着输出层之前的那一层隐藏层(叫 softmax 层)必须和输出层的节点数一样多。

softmax 的几种变体#
可以考虑 softmax 的下面这些变体:
完整 softmax(Full softmax):就是我们前面一直在说的 softmax,也就是为每一个可能的类别都算出一个概率。
候选采样(Candidate sampling):为所有正标签计算概率,但只为随机采样出来的一部分负标签计算概率。比如,如果我们只想判断输入图片是比格犬还是寻血猎犬,那没必要为每一张「非狗」图片都给出概率。
完整 softmax 在类别少的时候相当便宜,但类别数一多,代价就高到难以承受。候选采样能在类别很多的问题上提高效率。
单标签与多标签#
softmax 假设每个样本恰好属于一个类别。但有些样本是可以同时属于多个类别的。对这类样本:
不能使用 softmax。
必须依靠多个逻辑回归。
比如,上面图 9 里的一对一模型假设每张输入图只会画一种水果:苹果、橙子、梨或葡萄。但如果一张输入图里可能同时有好几种水果——比如一碗苹果和橙子混在一起——那就得改用多个逻辑回归了。
MLWM: softmax 的数学原理、它与逻辑回归的关系,可以参见「Softmax 回归原理:从逻辑回归到多分类与深度学习特征抽象」;想亲手实现一遍多分类模型,参见「从零实现MNIST分类:手写体识别3层神经网络代码实战」;本课程里对应的多分类基础概念,参见「多分类原理教程」。
关键术语:
- 二元分类(Binary classification)
- 多类别分类(Multi class classification)
- 一对多分类(One-vs.-all classification)
- softmax(一对一分类)