欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Softmax 函数与 Log-Likelihood 损失详解:理解二者在概率评估中的角色

最编程 2024-07-25 14:37:14
...

softmax神经元

softmax神经元的想法其实就是位神经网络定义一种新式的输出层,开始时和S型神经元一样,首先计算带权输入zjL=kwjkLakL1+bjLz_j^L=\sum_kw_{jk}^La_k^{L-1}+b_j^L。不过们这里我们不会使用S型神经元来获得输出。而是在这一层上应用一种叫做softmax函数在zjLz_j^L上。根据这个函数,第j个神经元的输出值ajLa_j^L就是:

ajL=ezjLkezkL(1)a_j^L=\frac{e^{z_j^L}}{\sum_ke^{z_k^L}} \tag1

其中,分母中的求和是在所有输出神经元上进行的。

为了更好地理解softmax函数的作用,可以先试试这个动画,拖动四个滑块来观察输出的变化。

很明显可以发现一个事情:当你增大一个值的时候,它的输出也会相应地增大,同时,其他三个值的输出都会响应的减少。

并且如果仔细观察的话,可以发现增大的量与减小的量之和是相等的,并且所有输出值之和为1

这一点很容易证明,从定义就可以看出:

jajL=jezjLkezkL=1(2)\sum _j a_j^L=\frac{\sum_j e^{z_j^L}}{\sum_ke^{z_k^L}}=1 \tag2

所以,如果一个值增加,那么其输出也会增加,其他值的输出就会相应减少增加的量,以保证最后各输出的和为1。

同时,根据定义,我们还可以发现无论怎么改变输入值的大小,所有的输出值都是正的

将这两点结合起来我们可以看到softmax的输出是一些相加为1的正数的结合。换言之,softmax的输出可以被看做是一个概率分布

这样的效果非常令人满意,即在数字分类问题中,我们可以将输出看做是网络估计正确数字分类为jj的概率。

log-likelihood 损失函数

我们现在已经对柔性最⼤值神经元层有了⼀定的认识。但是我们还没有看到⼀个柔性最⼤值层会怎么样解决学习缓慢问题。为了解决这点,我们先定义一个log-likelihood(对数似然)代价函数。我们使用xx表示网络的训练输入,yy表示对应的目标输出。然后关联这个训练输入的对数似然代价函数就是:

ClnayL(3)C \equiv -\ln a_y^L \tag3

例如,对于数字识别问题来说,如果输入为7的图像,那么对应的对数似然函数就是lna7L-\ln a_7^L。当网络表现很好的时候,它的输出值a7La_7^L的值就十分接近于1,含义是该数字为7的概率接近100%100\%,这个时候代价函数的值就非常小(ln1\ln 1 接近于0);当网络表现不好的时候,输出值就会离1比较远,这个时候的输出代价函数就会比较大一点。

那么关于学习缓慢的问题呢?为了分析他,我们首先要完求出C对于权重和偏置的偏导数:

CbjL=aJLyjCwjkL=akL1(aJLyj)(4)\begin{aligned} \frac{\partial C}{\partial b_j^L}&=a_J^L-y_j\\ \frac{\partial C}{\partial w_{jk}^L}&=a_k^{L-1}(a_J^L-y_j)\\ \end{aligned} \tag 4

这些方程与cross-entropy(交叉熵)得到的方程类似,尽管后者对整个训练样本进行了平均,不过形式还是一致的。正如对于交叉熵的分析一样,这些表达式确保我们不会遇到学习缓慢的问题。

如果对于cross-entropy损失函数不了解,可以先看一下这篇博客

事实上,把一个具有对数最大似然代价的softmax输出成,看做与一个具有交叉熵代价的S型输出层非常相似,这是很有用的。