让人头大的激活函数:输出层的激活函数softmax

前言

我认为不管是在机器学习里还是深度学习,激活函数的含义不重要,但是这个模型为什么选择这个激活函数很重要。
所以这篇博客我来大概介绍一下那个模型选择那个激活函数。

正文

机器学习中主要可以分为分类问题和回归问题。
分类问题是数据属于哪一个类别的问题,比如区分图像中的人是男是女。
回归问题是根据某个输入预测一个(连续的)数值问题,比如根据图像预测这个人的体重。
输出层的激活函数,要根据求解的问题的性质而定。
一般的,回归问题使用恒等函数,二分类问题使用simgod函数,多元分类问题可以使用softmax函数。
这篇博客就带大家了解一下softmax函数。

softmax函数

在这里插入图片描述

解释:

其中,输出的值为yk
分子为输入参数ak的指数函数
分母为所有输入信号的指数函数的和
其实就是算出来每个分子可能存在的概率。

代码实现:
import numpy as np

#softmax的代码实现
a = np.array([0.3,2.9,4.0])
exp_a = np.exp(a)#实现指数函数
print(exp_a)

在这里插入图片描述

sum_exp_a = sum(exp_a)
sum_exp_a

在这里插入图片描述

sum = exp_a / sum_exp_a
sum

在这里插入图片描述

#完整softmax代码
def softmax(a):
    exp_a = np.exp(a)
    exp_sum = np.sum(exp_a)
    sum = exp_a / exp_sum
    return sum
实现softmax的注意事项:

上述函数存在溢满输出的问题,因为指数函数的值非常容易变得非常大,如e10会超过20000,e100会变成一个后面有40多个0的超大值,e1000的结果会返回一个无穷大的inf。
如果在超大值之间进行除法运算,结果会出现不确定的情况

如何解决

在这里插入图片描述
将分子分母同时乘C
在这里插入图片描述

由这个公式可以看到,softmax在进行运算的时候,加上或者减去某个常数并不会改变运算结果
lnC可以取任何值,但为了防止溢出,我们一般使用信号中的最大值。
改进后的代码:

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    exp_sum = sum(exp_a)
    sum = exp_a / exp_sum
    return sum
单调递增性质

softmax函数是随着输入值越大,输出值也越大的

#多分类,对比softmax与线性的求和
%matplotlib inline
import numpy as np
import matplotlib.pylab as plt
x = np.arange(10)
e = softmax(x)
f = x/np.sum(x)
plt.show(x,e,color='red',marker='o',linestyle='solid')
plt.show(x,f,color='bule',marker='o',linestyle='solid')
plt.show()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值