6.2.2.3softmax输出单元与多项分布

来源:互联网 发布:acrobat for mac 破解 编辑:程序博客网 时间:2024/06/07 09:10

当我们希望表示有n种可能的离散变量的概率分布情况时,softmax函数就隆重登场了。它可以被看为是sigmoid函数的一种推广。

        Softmax函数的身影常出没于多分类任务的分类器中,但是也有一种不太常见的应用,就是当我们希望模型从多个不同的的值中进行选择的时候,softmax函数可以被用于模型内部变量的确定。

 

         我们回顾之前的二分类案例,我们希望产生一个数值:



         因为这个数值应处于0到1之间,而且我们想要这个数值的对数能够在基于log似然的损失函数的梯度下降算法中有很好的性能,我们选择了预测一个数值z=logP(y=1|x)作为替代。通过指数化与标准化,我们得到了一个受到sigmoid函数控制的伯努利分布。

 

         现在来看看更一般的情况,对于有n个可能的离散变量,我们现在需要得到一个向量y,其中yi=P(y=i|x)。我们不仅要求每一个分量yi处于0到1之间,还要求分量之和为1,这样才是一个有效的概率分布。我们还是以分析伯努利分布的方式来分析多项分布。

 

         首先有一个线性层预测尚未归一化的log概率:


        其中,zi=logP(y=i|x)。随后softmax函数将其指数化、归一化就得到了我们希望的y。正式地讲,softmax函数形式如下:

        我们希望最大化logP(y=i|x)=log softmax(z)i.  我们之所以将其对数化,原因还是一个:好计算~(因为log可以抵消exp)


         6.30的第一项表明输入zi对损失函数有直接的影响,因为该项不会饱和所以我们可以断定基于6.30的梯度下降法能够高效的完成(即使第二项饱和也没有关系哦)。当最大化log似然时,第一项zi会趋于增大,而第二项则使得z的所有分量降低;对于第二项,容易发现如果z的某一个分量远大于其他项,那么第二项就会趋向于那个分量的值;因而在迭代的过程中,算法会对误判的样例进行更强的惩罚

         除了log似然,其他目标函数与softmax并不那么搭,还是因为前边层多次提到的梯度下降速度的问题。为了理解为何其他函数会失效,我们需要仔细审视一下softmax函数本身。

         我们先给出结论:类似sigmoid,softmax也有近饱和的问题,在softmax函数中,存在多个输出值,当输入值之间的差别非常大的时候,它的输出值就会近饱和

         好,接下来我们来分析一下这个结论是如何得出的:

         经过仔细观察与推导,我们很容易得到一下结论:

         这个式子的意思就是如果softmax函数的所有变量同时增加或减少同一个标量的话,函数值是不变的!(是不是很神奇0.0 不放心的同学可以自己推一下,其实就是分子分母同时提取了一个exp(c))

         根据上述性质,我们紧接着就会得到如下的式子:


         推到这里寓意就很明显了,当输入值之间的差别非常大的时候,它们的输出值几乎不会变化。这与我们上边的结论首尾呼应!而这个结论其实与sigmoid函数饱和状态的一个推广形式!

         从神经科学的角度来看是很有意思的,我们可以认为softmax函数为输出单元创建了一种竞争模式:由于softmax的输出值之和为1,因此,如果有一个输出单元的值增大了,那么其他所有单元的值都将会受到抑制!而这与生物皮质神经元之间的侧向抑制现象不谋而合啊!在极端的条件下,这就会演化为一种胜者通吃的模式!(winner-take-all)












0 0