激活函数(sigmoid和ReLU)

激活函数给神经元引入了非线性因素,如果不用激活函数,神经网络每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
比如对于一个二分类问题:
在这里插入图片描述
如果用线性分类,那就只能按照下图划分:
在这里插入图片描述
如果可以非线性分类,那就可以按照下面的图进行划分:
在这里插入图片描述
激活函数使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

  • sigmoid
    sigmoid函数的定义为:

在这里插入图片描述
sigmoid函数的图像如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
优点:sigmoid函数可以将实数映射到 [公式] 区间内。平滑、易于求导。

缺点:1. 激活函数含有幂运算和除法,计算量大;2. 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练;3. sigmoid的输出不是0均值的,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

  • ReLU

relu激活函数的定义为:

在这里插入图片描述

relu激活函数的图像为:

在这里插入图片描述

优点:1.计算量小;2.激活函数导数维持在1,可以有效缓解梯度消失和梯度爆炸问题;3.使用Relu会使部分神经元为0,这样就造成了网络的稀疏性,并且减少了参数之间的相互依赖关系,缓解了过拟合问题的发生。

缺点:输入激活函数值为负数的时候,会使得输出为0,那么这个神经元在后面的训练迭代的梯度就永远是0了(由反向传播公式推导可得),参数w得不到更新,也就是这个神经元死掉了。这种情况在你将学习率设得较大时(网络训练刚开始时)很容易发生(波浪线一不小心就拐到负数区域了,然后就拐不回来了)。

解决办法:一些对Relu的改进,如ELU、PRelu、Leaky ReLU等,给负数区域一个很小的输出,不让其置0,从某种程度上避免了使部分神经元死掉的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值