之前我们的识别手写数字的例子也是一个多分类的问题,我们最后的输出层用的是多个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激活函数的定义为:
A^{[L]}=\frac{e^{Z^{[L]}}}{\sum_{i}^{}e^{Z_{i}^{[L]}}}
举一个例子:
假如我们有一个4分类问题,输出层有4个元素,Z函数的输出为:
Z^{[L]}=\begin{pmatrix}5\\2\\-1\\3\end{pmatrix}

e^{Z^{[L]}}=\begin{pmatrix}e^5\\e^2\\e^{-1}\\e^3\end{pmatrix}=\begin{pmatrix}148.4\\7.4\\0.4\\20.1\end{pmatrix}
从而\sum_{i}^{}e^{Z_{i}^{[L]}}=148.4+7.4+0.4+20.1=176.3
继而A^{[L]}=\begin{pmatrix}\frac{148.4}{176.3}\\ \frac{7.4}{176.3}\\ \frac{0.4}{176.3}\\ \frac{20.1}{176.3}\end{pmatrix}=\begin{pmatrix}0.842\\ 0.042\\ 0.002\\ 0.114\end{pmatrix}
我们可以看到最终输出层的A函数达到了概率和为1的特性。用它来作为最终输出也更为合理。

SoftMax激活函数的输入是一个向量,不是一个单一的值。因为它是要normalize 一个向量,让他们的概率和为1.

SoftMax 的LossFunction

假如有n个分类:
\sum_{i=1}^{n}-y_ilog\hat{y_i}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: