1. Softmax 的含义
Softmax函数可以看作是soft和max的组合,为了更好的理解softmax,我们可以先来看一下一直相对应的HardMax。
对于多分类问题,最简单的做法是哪一个输出的值最大就被分到哪一类,这种方法其实就叫做Hardmax,但是很多时候样本并不是严格的属于某一个单一的类别,比如一篇文章或多或少包含着各种主题信息,这时我们更想知道样本属于不同类别的的概率是多少,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
从softmax的定义其实就能很好理解softmax函数的含义了,其中:
- 分子当前输出映射到(0,+∞)区间后的值
- 分母是所有输出输出映射到(0,+∞)区间后的值的总和
通过上述公式可知 Softmax函数会对同一层所有结点的输出做如下操作:
- 将所有输出通过指数函数(y=exp(x))一个映射到非负(0,+∞)区间
- 求出非负区间上,求出每个值占在所有值之和的比重并输出
2. Softmax 的优势
- 指数函数曲线呈现递增趋势,最重要的是斜率逐渐增大,也就是说在x轴上一个很小的变化,可以导致y轴上很大的变化。经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。
- 在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数的导数是其本身,在求导的时候比较方便。
3. Softmax 的缺点
- 指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,自变量值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。
- 这里需要注意一下,当使用Softmax函数作为输出节点的激活函数的时候,一般使用交叉熵作为损失函数。由于Softmax函数的数值计算过程中,很容易因为输出节点的输出值比较大而发生数值溢出的现象,在计算交叉熵的时候也可能会出现数值溢出的问题。为了数值计算的稳定性,TensorFlow提供了一个统一的接口,将Softmax与交叉熵损失函数同时实现,同时也处理了数值不稳定的异常,使用TensorFlow深度学习框架的时候,一般推荐使用这个统一的接口,避免分开使用Softmax函数与交叉熵损失函数。