7.1 多元分类
让我们回顾一下现状与目标。我们有一个基于刚性设计的二元分类器,能够识别某个特定数字,例如数字5。这个二元分类器使用加权和的方式传递图像数据,然后通过S型函数将这个加权和压缩到0~1的范围。由于我们需要一个具体的二元分类结果,所以将S型函数值四舍五入为数字1或0中的一个,最终输出一个具体的结论,“是的,这是5”或者“不,这不是5”,如下图所示:
我们的目标是构造一个程序,它能读取一幅图像,并告诉我们这幅图像究竟是代表0~9中的哪个数字,如下图所示:
现在来看看应该如何从现状走到目标。首先,我们把注意力集中在第一张图片中间的方框上,一个加权和计算公式以及一个S型函数。这个计算模块没有通用的名称,我们将其简称为WSS(Weighted Sum plus Sigmoid,加权和加S型函数)。WSS很像一个二元分类器,二者的区别在最后一步,WSS返回的值不是0或1,而是0~1之间的某个浮点数。
现在想象一下:构建一个由10个WSS组成的数组,每个类别一个。从0-WSS只能识别0,到9-WSS只能识别9……如果我们把它们都运行一遍,就会得到一个由10个数字组成的数组,如下表所示:
每个WSS返回一个0~1之间的数值,这个数值表示WSS的置信度有多大。例如,2-WSS返回0.787,这非常接近最大值1。这意味着2-WSS相当确定图像确实是2。相比之下,其他WSS对自己的结果就不那么确定了。例如,4-WSS返回一个接近于0的数字,因此可以肯定图像不会是4。总而言之,2-WSS是置信度最高的,所以这个图像最可能是2。
现在我们有了一个更详细的多元分类计划。首先,对输入图像样本运行10个WSS,每个WSS专门针对某个特定的数字。然后,从中选择置信度最高的WSS模块所匹配的数字作为输出的分类结果。
我们可以通过运行10次相同的WSS代码来实现这个计划,每个类别运行一次。我们是可以这么做,但是还可以做得更好。