神经网络输出层的设计

输出层的设计:

输出层所用的激活函数,要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。

1、恒等函数
回归问题用恒等函数,恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。

在这里插入图片描述

2、softmax函数
分类问题用softmax函数:

在这里插入图片描述
在这里插入图片描述
e x p ( x ) exp(x) exp(x) 是表示 e x e^{x} ex的指数函数(e=2.7182…)。假设输出层共有n个神经元,计算第k个神经元的输出 y k y_{k} yk。如式所示,softmax函数的分子是输入信号 a k a_{k} ak,分母是所有输入信号的指数函数的和。输出层的输入信号 a k a_{k} ak是上一层隐藏层的输出。

实现softmax函数时的注意事项

实现softmax函数的时候会有缺陷,这个缺陷就是溢出问题。因为softmax函数的实现中要进行指数运算,但是此时指数函数的值很容易变得非常大。比如 e 1000 e^{1000} e1000的值会返回一个表示无穷的inf。

计算机处理 “数” 时, 数值必须在4字节或8字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须 ( 常常 ) 注意。

softmax函数的实现可以像下面这样进行改进:

在这里插入图片描述
C ′ C^{'} C 可以选择任何值,但是为了防止溢出,一般会使用输入信号中的最大值的相反数。

在这里插入图片描述如该例所示,通过减去输入信号中的最大值 ( 上例中的 c ) ,我们发现原本为 nan (not a number,不确定 ) 的地方,现在被正确计算了。综上,我们可以像下面这样实现softmax函数。

def softmax(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()函数,可以按如下方式计算神经网络的输出。
在这里插入图片描述
softmax的输出都是处于[0,1]之间,加起来的和为1。正因为输出为和为1,所以每个输出为概率。如上图,第一个输出概率为18.211%,第二个输出的概率为24.51%,第三个输出的概率为73.6%。从概率来看,第三个输出的概率最高,所以将输入判定为第三个种类。

值得注意的一点是,虽然经过softmax函数,输出变成了概率的形式,但是数与数之间的大小并没有改变。一般而言,在训练过程中输出会使用softmax函数,但是在测试阶段,为了减少计算机运算量(softmax函数的指数运算),会省略softmax函数。

sigmoid函数

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值