softmax

激活函数旨在帮助网络学习数据中的复杂模式,类似于人类大脑中的神经元模型,激活函数决定了向像一个传经元传递的数值。

将其过程可视化如下图所示:

而softmax是用于多分类问题的激活函数,在多分类问题中,超过两个类标签则需要类成员关系,对于长度为 𝐾 的任意实向量,Softmax可以将其压缩为长度为𝐾,值在(0,1)范围,并且向量中元素和为1的实向量。

softmax函数与max函数不同,max函数只输出最大值,而softmax确保较小的值具有较小的概率,并不会直接丢弃,可以认为它是argmax函数的概率版或soft版本,但这个soft其实并不那么soft。softmax函数的分母结合了输出值的所有因子,这意味着softmax函数获得的各种概率彼此相关,但softmax函数的缺点是在零点不可微,负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生拥不激活的死亡神经元。

一、softmax

设计初衷视是希望特征对概率的影响是乘性的,存在的问题不能有效学习得到使得类内较为紧凑,类间较为离散的特征,即当softmax进行指数操作时,当上一层输出较大时,会长生overflow,而当上一层输出较小时,又会使得梯度接近于0。

那为什么现在的分类会是softmax与交叉熵损失函数呢?先看一下sigmoid函数:

这个函数的导数可以用原函数相乘得到, 𝐻(𝑝,𝑞)=−𝑙𝑜𝑔(𝑞(𝑥)),𝑝(𝑥)=1

那么 𝑞(𝑥) 呢?

这使得softmax产生的结果过于自信,对于一个毫不相关的二分类图像输入到网络进行预测,理论上来说应该是[0.5, 0.5],而softmax并不会产生类似的结果,那传递到softmax的向量为[1, 1.1]和[1, 2]可以看出:

因此,softmax的指数特性决定了其很难使得二者的输出概率接近[0.5, 0.5],其中一种方式就是给softmax函数加上一层约束,可以考虑使用熵来限制,希望结果的熵越大越好,从而避免softmax的输出过于自信。

二、LogSoftmax

当上一层的输出,也就是softmax的输入比较大的时候,可能会产生overflow,超过了float能表示的范围。同理,当输入为负数且绝对值也很大的时候,会出现分子、分母变得极小,有可能四舍五入为0,导致下限溢出。

log_softmax能够解决函数overflow和underflow,加快运算速度,提高数据稳定性。

尽管在数学表达式上是对softmax取对数的情况,但实际操作:

log⁡[𝑓(𝑥𝑖)]=log⁡(𝑒𝑥𝑖𝑒𝑥1+𝑒𝑒2+⋯+𝑒𝑥𝑛)=log⁡(𝑒𝑥𝑖𝑒𝑀𝑒𝑥1𝑒𝑀+𝑒𝑥2𝑒𝑀+⋯+𝑒𝑥𝑛𝑒𝑀)=log⁡(𝑒𝑥𝑖−𝑀∑𝑗𝑛𝑒𝑥𝑗−𝑀)=log⁡(𝑒𝑥𝑖−𝑀)−log⁡(∑𝑗𝑛𝑒𝑥𝑗−𝑀)=(𝑥𝑖−𝑀)−log⁡(∑𝑗𝑛𝑒𝑥𝑗−𝑀)

其中𝑀=𝑚𝑎𝑥(𝑥𝑖),𝑖=1,2,…,𝑛 即 𝑀 为所有的 𝑥𝑖 中最大的值。可以解决这个问题,在快速运算速度的同时,可以保持数值的稳定性。

二、softmax的soft是真的soft吗?

模型蒸馏[1]的文章中提到设计软标签的损失函数时使用了一种特殊的softmax,

𝑞𝑖=𝑒𝑥𝑝(𝑧𝑖/𝑇)∑𝑗𝑒𝑥𝑝(𝑧𝑗/𝑇)其中,T是softmax函数的温度超参数。对于随机生成的输出,经过函数处理,分布变化如下图:

最左边是随机生成的分布模拟模型输出, z∈𝑅10∼𝑁(10,2) ,中间分别为T=8,T=4,T=2,T=1和T=0.5使用softmax得到的结果,其中温度系数T=1相当于原始的softmax分布,从左到右这些输出结果逐渐地从均匀分布向尖锐分布过度,其中保留的除正确类别以外的信息越来越少。

<

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值