DEEP LEARNING之二十二:用SoftMax函数来解决多分类问题
之前我们的识别手写数字的例子也是一个多分类的问题,我们最后的输出层用的是多个sigmoid function作为激活函数,我们一共有9种分类,每个输出层的sigmoid function输出代表结果为某个数字的概率。然后对每一个单独的输出引用logistic regression的loss function。
之前这种用法有一个明显的问题是输出的概率和并不是1。因为预测的数字只可能是从0-9,根据可能性大小我们应该把1平分到0-9十个数字上。这样的好处是我们可以得到更有意义的结果,比如一个label为1的数字我们应该预测的结果为0.8的概率为1,0.2的概率为7.其余概率为0.
所以我们引入SoftMax函数作为输出层的激活函数来解决多分类问题。需要注意的是SoftMax解决的是多分类,但是结果只能是多个分类中的一个。不是是多个,而我们之前使用的loss function可以解决多个分类同时成立的问题。比如对于手写识别,虽然备选项有10个,但是我们只能识别为其中一个数字,但是对于一个图片,我们需要识别其中的多个物体,我们的输出就可能对于桌子,人,电脑等多个目标同时为真。这个在我们讲到多任务学习时会说到。
SoftMax
SoftMax激活函数的定义为:
举一个例子:
假如我们有一个4分类问题,输出层有4个元素,Z函数的输出为:
从而
继而
我们可以看到最终输出层的A函数达到了概率和为1的特性。用它来作为最终输出也更为合理。
SoftMax激活函数的输入是一个向量,不是一个单一的值。因为它是要normalize 一个向量,让他们的概率和为1.
SoftMax 的LossFunction
假如有n个分类: