多分类器
复习二分类器并构建多分类器。
在上一章中,我们实现了构建一个计算机视觉系统的目标,但它只是一个基础版本。我们所构建的程序是一个二分类器,因为它只能将数据划分为两个类别之一:“5” 或 “非5”。现在,我们将进一步改进这个程序,使其能够识别 MNIST 数据集中的任意数字。
与二分类不同,数字识别涉及多个类别,因此被称为多分类问题。
不必对多分类感到担忧,因为我们完全有能力掌握它。以下是实现多分类的一个简单方法:
- 为每个类别分别构建一个二分类器
- 将所有类别的分类器组合成一个统一的多分类器
让我们把这个思路转化为代码。我们已经非常接近构建一个完整的 MNIST 分类器的目标了。
构建一个多分类器
先回顾一下我们目前的状态和目标。我们已有一个专门用于识别特定数字(例如“5”)的二分类器。它将图像输入进行加权求和,然后通过一个 Sigmoid 函数,输出一个介于 0 到 1 之间的数值。接着我们将这个数值四舍五入为 1 或 0,以获得二值结果,判断该图像是否为“5”。如下图所示:
而我们的目标是构建一个程序,能够接收一张图像,并告诉我们它代表的是哪个数字(从 0 到 9):
首先关注第一张图正中央的那个方框。它表示“加权求和”后接一个 Sigmoid 函数的过程。这一序列没有通用名称,为了方便,我们将其简称为“加权和 + Sigmoid”,即 WSS(Weighted Sum + Sigmoid)。一个 WSS 类似于一个二分类器,唯一的区别是:它不直接返回 0 或 1,而是返回一个介于 0 和 1 之间的浮点数。
现在设想,我们为每一个类别(从识别数字 0 的 -WSS 到识别数字 9 的 -WSS)构建一个这样的 WSS,总共十个。当我们同时运行这十个 WSS 时,就会得到一个包含十个数值的数组,如下图所示:
每个 WSS 输出一个 0 到 1 之间的数值,表示它对该图像属于其对应类别的置信度。例如,-WSS 输出 0.787,接近最大值 1,说明它相当确信这张图像确实是数字“2”。相比之下,其他 WSS 对其各自数字的判断则没那么确定。比如,-WSS 的输出接近 0,意味着它很确定这张图像不是“4”。总体来看,-WSS 的置信度最高,因此我们可以判断这张图像很可能是“2”。
现在我们有了更清晰的多分类实现方案:
第一步,对输入图像并行运行十个 WSS,每个对应一个数字;
第二步,选择输出置信度最高的那个数字作为最终预测结果。
理论上,我们可以重复调用相同的 WSS 代码十次来实现这一方案——每个类别运行一次。
我们可以这么做……但还有更好的方式。