深度学习:用于multinoulli输出分布的softmax单元

版权声明:作者:Rookiekk 联系邮箱:[email protected] 欢迎转载或分享,但请务必声明文章出处。 https://blog.csdn.net/qq_18888869/article/details/83041186

首先说明Bernoulli分布对应sigmoid单元,Multinoulli分布对应softmax单元。了解multinoulli分布请看:机器学习:Multinoulli分布与多项式分布。

softmax函数可以看作sigmoid函数的扩展,其中sigmoid函数用来表示二值型变量的分布。为了推广得到具有n个值的离散型变量的情况,现在需要创造一个向量\widehat{y},它的每个元素是\widehat{y}_{i}=P(y=i|x)。我们不仅要求每个\widehat{y}_{i}元素介于0和1之间,还要使得整个向量的和为1,使得它表示一个有效的概率分布。首先线性层预测了为归一化的对数概率:

                               z=W^{T}h + b

其中z_{i} = log\widehat{P}(y=i|x).softmax函数然后可以对z指数化和归一化来获得需要的\widehat{y}。得到softmax函数的形式为

                              softmax(z)_{i}=\frac{exp(z_{i})}{\sum _{j}exp(z_{i})}

但是用最大化对数似然训练softmax来输出目标值y时,使用指数函数工作的非常好。我们想要最大化

                              logP(y=i;z)=log\, softmax(z)_{i}

将softmax定义成指数的形式是很自然的,因为对数似然中的log可以抵消softmax中的exp:

                              log\, softmax(z)_{i}=z_{i}-log\sum_{j}exp(z_{j})

当最大化对数似然时,第一项鼓励z_{i}被推高,而第二项则鼓励所有的z被压低。第二项可以大致近似为max_{j}z_{j}

                            log\sum_{j}exp(z_{j})\approx max_{j}z_{j}

这种近似基于对于任何明显小于max_{j}z_{j}z_{k}exp(z_{k})都是不重要的。负对数似然代价函数总是强烈的惩罚最活跃的不正确预测。如果正确答案已经具有了softmax最大输入,那么-z_{i}项和log\sum_{j}exp(z_{j})\approx max_{j}z_{j}=z_{i}项将大致抵消。这个样本对于整体训练代价价贡献很小,这个代价主要由其他未被正确分类的样本产生。

像sigmoid一样,softmax激活函数可能会饱和。对于softmax函数,它有多个输出值,当输出值之间的差异变的极端时,这些输出值可能饱和。softmax函数当所有输入都加上一个相同的常数时softmax的输出不变:

                            softmax(z)=softmax(z+c)

使用这个性质,我们导出一个数值方法稳定的softmax函数的变体:

                           softmax(z)=softmax(z-max_{i}z_{i})

当其中一个输入是最大并且z_{i}远大于其他的输入时,响应的输出softmax(z)_{i}会饱和到1,当z_{i}不是最大值并且最大值非常大时,相应的输出softmax(z)_{i}也会饱和到0。

softmax函数更接近于argmax函数而不是max函数。“soft”这个术语来源于softmax函数是连续可微的。“argmax”函数的结果表示为一个one-hot向量,不是连续可微的。softmax函数因此提供了argmax的“软化版本”。可能最好是把softmax函数称为“softargmax”,但当前名称已经是一个根深蒂固的习惯了。
 

猜你喜欢

转载自blog.csdn.net/qq_18888869/article/details/83041186