首先说明Bernoulli分布对应sigmoid单元,Multinoulli分布对应softmax单元。了解multinoulli分布请看:机器学习:Multinoulli分布与多项式分布。
softmax函数可以看作sigmoid函数的扩展,其中sigmoid函数用来表示二值型变量的分布。为了推广得到具有n个值的离散型变量的情况,现在需要创造一个向量,它的每个元素是。我们不仅要求每个元素介于0和1之间,还要使得整个向量的和为1,使得它表示一个有效的概率分布。首先线性层预测了为归一化的对数概率:
其中.softmax函数然后可以对z指数化和归一化来获得需要的。得到softmax函数的形式为
但是用最大化对数似然训练softmax来输出目标值y时,使用指数函数工作的非常好。我们想要最大化
。
将softmax定义成指数的形式是很自然的,因为对数似然中的log可以抵消softmax中的exp:
。
当最大化对数似然时,第一项鼓励被推高,而第二项则鼓励所有的被压低。第二项可以大致近似为。
,
这种近似基于对于任何明显小于的,都是不重要的。负对数似然代价函数总是强烈的惩罚最活跃的不正确预测。如果正确答案已经具有了softmax最大输入,那么项和项将大致抵消。这个样本对于整体训练代价价贡献很小,这个代价主要由其他未被正确分类的样本产生。
像sigmoid一样,softmax激活函数可能会饱和。对于softmax函数,它有多个输出值,当输出值之间的差异变的极端时,这些输出值可能饱和。softmax函数当所有输入都加上一个相同的常数时softmax的输出不变:
,
使用这个性质,我们导出一个数值方法稳定的softmax函数的变体:
,
当其中一个输入是最大并且远大于其他的输入时,响应的输出会饱和到1,当不是最大值并且最大值非常大时,相应的输出也会饱和到0。
softmax函数更接近于argmax函数而不是max函数。“soft”这个术语来源于softmax函数是连续可微的。“argmax”函数的结果表示为一个one-hot向量,不是连续可微的。softmax函数因此提供了argmax的“软化版本”。可能最好是把softmax函数称为“softargmax”,但当前名称已经是一个根深蒂固的习惯了。