Softmax 函数
$Softmax$ 函数,又称归一化指数函数。作用是将多分类的结果以概率的形式展现出来,函数定义如下:
$$Softmax(z_{i}) = \frac{e^{z_{i}}}{\sum_{c = 1}^{C}e^{z_{c}}}$$
其中 $z_{i}$ 为第 $i$ 个节点的输出值,$C$ 为输出节点的个数,即分类的类别个数。通过 $Softmax$ 函数就可以将多分类的输出值转换为范围
在 $0,1$ 区间内和为 $1$ 的概率分布。它是连接在输出层后面的,$Softmax$ 层的网络结构长成下面这个样子:
所以 $Softmax$ 层具有两层神经元。引入指数函数对于 $Softmax$ 函数既有有点也有缺点:指数函数曲线呈现递增趋势,最重要的是斜
率逐渐增大,也就是说在 $x$ 轴上一个很小的变化,可以导致 $y$ 轴上很大的变化。这种函数曲线能够将输出的数值拉开距离,这是优点,
但当 $z_{i}$ 值非常大的话,计算得到的数值也会变的非常大,可能会发生溢出。
因为神经网络采用的是反向传播算法进行训练,下面来看看 $Softmax$ 函数如何求导。回顾 $Softmax$ 函数的表达式:
$$Softmax(z_{i}) = \frac{e^{z_{i}}}{\sum_{c = 1}^{C}e^{z_{c}}}$$
其中 $i$ 表示输出节点的编号,对 $z_{j}$ 求偏导分为两种情况:
1)$j = i$
$$\frac{\partial S}{\partial z_{j}} = \frac{e^{z_{i}}\sum_{c = 1}^{C}e^{z_{c}} - e^{z_{i}}e^{z_{j}}}{\left ( \sum_{c = 1}^{C}e^{z_{c}} \right )^{2}} = \frac{e^{z_{i}}\left (\sum_{c = 1}^{C}e^{z_{c}} - e^{z_{j}} \right )}{\left ( \sum_{c = 1}^{C}e^{z_{c}} \right )^{2}} \\
= \frac{e^{z_{i}}}{\sum_{c = 1}^{C}e^{z_{c}}} \cdot \frac{\sum_{c = 1}^{C}e^{z_{c}} - e^{z_{j}}}{\sum_{c = 1}^{C}e^{z_{c}}} \\
= p_{i}(1 - p_{j})$$
2)$j \neq i$
$$\frac{\partial S}{\partial z_{j}} = \frac{- e^{z_{i}}e^{z_{j}}}{\left ( \sum_{c = 1}^{C}e^{z_{c}} \right )^{2}} = \frac{-e^{z_{i}}}{\sum_{c = 1}^{C}e^{z_{c}}} \cdot \frac{e^{z_{j}}}{\sum_{c = 1}^{C}e^{z_{c}}} \\
= -p_{i}p_{j}$$