多类分类下为什么用softmax而不是用其他归一化方法?

多类分类问题下使用softmax,我理解的功能主要是能把所有类别输出和唯一,也就是说把输出直接看作是该类的概率。但是达到这个目的完全可以用一些归一化方…
关注者
971
被浏览
253,293

21 个回答

补充一下

@王赟 Maigo

的答案。

如果用 cross entropy 做 cost function 的话,backpropagation 的时候要针对 cross entropy 求导,并向后传导。假设当前样本的 label 为 i,对应输出层结点为y_i, 那么 cost 是 L(y) = -\log(y_i),求导可得 L'(y)=-\frac{1}{y_i} y_i'。这里面 y_i' 就是从输出层开始还得往后传继续求导的部分。

这里在y_i(即输出层输出的概率)比较小的时候,会出现 numerically unstable (overflow) 的情况,很容易就强撸灰飞烟灭了。而如果输出层是 softmax(或者二分类时的 sigmoid,其实可以看成 softmax 的一种特殊情况),这个分母部分刚好可以被 softmax 层的导数(y_i'部分)消除。

实际上我从来没见过其他激活函数放在输出层接 cross entropy 做 cost function 的情况。

Pluskid 大神有一篇文章很详细的解释了这个问题:

Softmax vs. Softmax-Loss: Numerical Stability

有两点原因。

softmax的形式为:P(y=i) = \frac{\exp(\sum_d w_{id}x_d)}{\sum_j \exp(\sum_d w_{jd}x_d)}

原因之一在于softmax设计的初衷,是希望特征对概率的影响是乘性的。

原因之二在于,多类分类问题的目标函数常常选为cross-entropy,即L = -\sum_k t_k \log P(y = k),其中目标类的t_k等于1,其它类的t_k等于0。

在神经网络模型(最简单的logistic regression也可看成没有隐含层的神经网络)中,输出层第i个神经元的输入为a_i = \sum_d w_{id}x_d

神经网络是用error back-propagation训练的,这个过程中有一个关键的量是\partial L / \partial a_i

可以算出,同时使用softmax和cross-entropy时,\partial L / \partial a_i = P(y=i) - t_i

这个形式非常简洁,而且与线性回归(采用最小均方误差目标函数)、两类分类(采用cross-entropy目标函数)时的形式一致。