Softmax 函数与 Log-Likelihood 损失详解:理解二者在概率评估中的角色
softmax
神经元
softmax
神经元的想法其实就是位神经网络定义一种新式的输出层,开始时和S型神经元一样,首先计算带权输入。不过们这里我们不会使用S型神经元来获得输出。而是在这一层上应用一种叫做softmax
函数在上。根据这个函数,第j个神经元的输出值就是:
其中,分母中的求和是在所有输出神经元上进行的。
为了更好地理解softmax
函数的作用,可以先试试这个动画,拖动四个滑块来观察输出的变化。
很明显可以发现一个事情:当你增大一个值的时候,它的输出也会相应地增大,同时,其他三个值的输出都会响应的减少。
并且如果仔细观察的话,可以发现增大的量与减小的量之和是相等的,并且所有输出值之和为1!
这一点很容易证明,从定义就可以看出:
所以,如果一个值增加,那么其输出也会增加,其他值的输出就会相应减少增加的量,以保证最后各输出的和为1。
同时,根据定义,我们还可以发现无论怎么改变输入值的大小,所有的输出值都是正的。
将这两点结合起来我们可以看到softmax
的输出是一些相加为1的正数的结合。换言之,softmax
的输出可以被看做是一个概率分布。
这样的效果非常令人满意,即在数字分类问题中,我们可以将输出看做是网络估计正确数字分类为的概率。
log-likelihood
损失函数
我们现在已经对柔性最⼤值神经元层有了⼀定的认识。但是我们还没有看到⼀个柔性最⼤值层会怎么样解决学习缓慢问题。为了解决这点,我们先定义一个log-likelihood
(对数似然)代价函数。我们使用表示网络的训练输入,表示对应的目标输出。然后关联这个训练输入的对数似然代价函数就是:
例如,对于数字识别问题来说,如果输入为7的图像,那么对应的对数似然函数就是。当网络表现很好的时候,它的输出值的值就十分接近于1,含义是该数字为7的概率接近,这个时候代价函数的值就非常小(接近于0);当网络表现不好的时候,输出值就会离1比较远,这个时候的输出代价函数就会比较大一点。
那么关于学习缓慢的问题呢?为了分析他,我们首先要完求出C对于权重和偏置的偏导数:
这些方程与cross-entropy
(交叉熵)得到的方程类似,尽管后者对整个训练样本进行了平均,不过形式还是一致的。正如对于交叉熵的分析一样,这些表达式确保我们不会遇到学习缓慢的问题。
如果对于
cross-entropy
损失函数不了解,可以先看一下这篇博客
事实上,把一个具有对数最大似然代价的softmax
输出成,看做与一个具有交叉熵代价的S型输出层非常相似,这是很有用的。