激活函数-softmax

softmax函数常用于神经网络的输出层,将多分类的输出转换为概率分布,其计算涉及指数运算可能导致溢出。通过引入常数C可以解决这个问题,即softmax_plus函数,它在处理最大值后再进行指数运算,防止了溢出,与原始softmax函数等效。
摘要由CSDN通过智能技术生成

softmax

Softmax函数定义如下,其中ak是分类器前级输出单元的输出。i表示类别索引,总的类别个数为n。yk表示的是当前元素的指数与所有元素指数和的比值(函数的输出结果)。通过Softmax函数就可以将多分类的输出数值转化为相对概率,而这些值的累和为1,常用于神经网络输出层。表达式:
y k = exp ⁡ ( a k ) ∑ 1 n exp ⁡ ( a i ) {{\rm{y}}_{\rm{k}}} = \frac{{\exp ({a_k})}}{{\sum\limits_1^n {\exp ({a_i})} }} yk=1nexp(ai)exp(ak)
示例:
在这里插入图片描述
使用numpy实现softmax函数:

# softmax函数
def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

但是如上这种softmax函数非常容易出现溢出的问题,因为指数函数很容易发生指数爆炸现象。故做如下修改:
y k = exp ⁡ ( a k ) ∑ 1 n exp ⁡ ( a i ) = C exp ⁡ ( a k ) C ∑ 1 n exp ⁡ ( a i ) = exp ⁡ ( a k + log ⁡ C ) ∑ 1 n exp ⁡ ( a i + log ⁡ C ) = exp ⁡ ( a k + C ‘ ) ∑ 1 n exp ⁡ ( a i + C ‘ ) {y_k} = \frac{{\exp ({a_k})}}{{\sum\limits_1^n {\exp ({a_i})} }}\\ = \frac{{C\exp ({a_k})}}{{C\sum\limits_1^n {\exp ({a_i})} }}\\ = \frac{{\exp ({a_k} + \log C)}}{{\sum\limits_1^n {\exp ({a_i} + \log C)} }}\\ = \frac{{\exp ({a_k}+C^` )}}{{\sum\limits_1^n {\exp ({a_i} +C^`)} }} yk=1nexp(ai)exp(ak)=C1nexp(ai)Cexp(ak)=1nexp(ai+logC)exp(ak+logC)=1nexp(ai+C)exp(ak+C)
同样也使用numpy实现:

# 升级版softmax函数
def softmax_plus(a):
    c = np.max(a)
    exp_a = np.exp(a - c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

其实这个就是解决了上限的softmax的移除问题的softmax函数,这两个函数是完全相等的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二月w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值