sigmoid 和 softmax的区别在哪里?

今天看vision transformer的程序,看到sigmoid激活函数,偶然想起几个月前跟师兄争论注意力机制中使用sigmoid函数的合理性,发现自己错了,老脸一红😓

关于这两种函数的介绍网上有很多,为了方便就不列公式了,只说当时没有搞清楚的一点:sigmoid和softmax都是对一个batch_size的数据进行归一化到(0, 1)(这里用归一化可能有误导性,重点在(0, 1)),这两者有什么区别?

sigmoid相当于一种投影,即将大小不一的一组数据的每个数都映射在0-1之间,将原来的大尺度的值转换为0-1之间这种小尺度的值,但个人感觉这样做有一个问题就是会改变激活前数据的分布,因为sigmoid是一种非线性函数,举个形象一点的例子,地图将空间信息等比例缩放在一张纸上,同一批数据样本间的相对性不发生改变,因为位置信息前后映射关系是线性关系,而sigmoid不具备这种条件(但是又考虑到神经网络自学的特性,再追究脑子就不够用了)。一个batch_size中的样本使用sigmoid激活之后的和不一定为1,而是每个值都在0-1之间。

对于softmax,他的作用通俗理解就是做归一化,将数据归一化到(0, 1)之间,这种函数也会改变数据的原始分布,并且一个batch_size的权重相加之和为1,意味着样本本身特性的体现会受到batch_size大小的影响,所以很多CV的文章都没有用softmax。

用python做一个小测试,体会下两种函数对数据分布改变的影响:

sigmoid:

 

 softmax:

可以看到sigmoid相比softmax能够更大程度上保留数据的原始分布,除了个别的离散点之外,sigmoid对原来密集处的样本分布能够做到不错的还原,softmax显然就不行了。

ps:有没有大佬知道这方面的数学公式能给证明一下 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值