这节主要介绍softmax,将其与squared error作对比,体现softmax优越性。
squared error的问题
squared error用来做分类器,通常是使用logistic输出神经元的输出与目标值做差取平方。
具体的,输入是z⃗ ,输出是y⃗ =e−z⃗ 1+e−z⃗ ,目标值为t⃗ 。所有向量的维度等于类别数。其中y⃗ =sigmoid(z⃗ )。
这里面强制使得y⃗ 位于0到1之间,并认为其为相应类别的概率。这个概率假设存在一个明显的问题是,很容易所有类别的概率加和不为1,而这是不符合直觉的。
然后有∂y⃗ ∂z⃗ =y⃗ .∗(1−y⃗ ),其在y⃗ 接近于0和1的时候导数接近于0。在损失函数为squared error情况下,e=(t⃗ −y⃗ )T(t⃗ −y⃗ ),∂e∂yi=−2(t⃗ −y⃗ ),这个导数最大1,并不能平衡z⃗ 对y⃗ 导数趋近于0的部分。假设t=1, y=0.0001,那么虽然误差很大,但是梯度值很小,模型变化不大,这也不是我们想要的。
下面会介绍,上诉两个问题都可以被softmax解决。

Softmax

softmax的定义如上,使用ezi表示相应类别的能量,然后使用归一化强制使得概率和为1。通过这个定义,可以看出softmax可以输出任意概率分布。
y⃗ 对z⃗ 的导数和logistic神经元一样为yi(1−yi)。
然后用最大似然的方法,最大化概率乘积,等价于最大化概率log加和,等价于最小化概率log加和的负数。最终的损失函数叫cross-entropy, C=−t⃗ logy⃗ 。这个损失函数的一个优点就是放大了y很小部分的梯度,而且是1/y倒数的放大比率。所以当y很小的时候,∂Cyi=−1/yi很大,梯度不会趋近于0。同时这种放大也是符合直觉的,因为1e−6和1e−12之间的差值可能小于1e−6,但是差异却很大。
