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}$$

 

posted @ 2020-11-02 16:34  _yanghh  阅读(2886)  评论(0编辑  收藏  举报