使用softmax中需要注意哪些问题?

关注微信公众号“百面机器学习”获得更多

问题引入

softmax是一个很有用的东西,在我们的分类问题中经常被用到,大家在构建神经网络以及在学习word2vec的时候都会用到softmax函数,那么实际在使用softmax的过程中有哪些需要注意的呢?
看来看好像根据公式直接算就可以了,但是中间还有写细节问题,下面我们一起来看一下。

问题解答

在我们的softmax计算过程中会遇到上溢下溢的问题,这点我们可以从softmax的函数中看到。
f ( x ) = exp ⁡ ( x ) ∑ i = 1 k exp ⁡ ( x ) f(x) = \frac{{\exp (x)}}{{\sum\limits_{i = 1}^k {\exp (x)} }} f(x)=i=1kexp(x)exp(x)
可以看到我们的分子和分母都是指数函数,当 x x x取值过大时会导致数据溢出,当 x x x都很小的时候,分母为0,举个例子,当x=[10000,5000,2000]的时候, e x p ( 10000 ) exp(10000) exp(10000)超过了计算机所能存储的最大范围,就会发生溢出。当x=[-10000,-1000,-34343]的时候,分母很小很小,基本为0,导致计算结果为nan.

那如何解决呢,只要将x进行变换就可以,将原数组变成x-max(x)。对于x=[10000,5000,2000],则变成x=[0,-5000,-8000],这样分母最少为1,分子不用说没问题也不会溢出。为啥减去一个max(x)就可以呢,我们看如下的公式:
exp ⁡ ( x − a ) ∑ i = 1 k exp ⁡ ( x − a ) = exp ⁡ ( x ) exp ⁡ ( − a ) exp ⁡ ( − a ) ∑ i = 1 k exp ⁡ ( x ) \frac{{\exp (x - a)}}{{\sum\limits_{i = 1}^k {\exp (x - a)} }} = \frac{{\exp (x)\exp ( - a)}}{{\exp ( - a)\sum\limits_{i = 1}^k {\exp (x)} }} i=1kexp(xa)exp(xa)=exp(a)i=1kexp(x)exp(x)exp(a)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值