学习
实践
活动
工具
TVP
写文章

神经网络中常用的激活函数的说明

1 为什么要使用激活函数

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。 正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。

2常见的几个激活函数以及说明

2.1 sigmoid函数

Sigmoid函数的表达式y=1/(1+e^(-x))函数曲线如下图所示

从数学上来看,Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小

2.2 tanh函数

y=(e^x-e^(-x))/(e^x+e^-x)也属于S型函数,是0均值,其函数曲线与Sigmoid函数相似,下图是两者的比较

具体应用中,tanh函数比sigmoid函数更好,其实从数学角度,你可以看到

,更一般的我们可以证明

在x轴上任意一点,都有:

所以,当处理big data时,双曲正切的导数的绝对值>sigmoid导数的绝对值导致tanh函数更容易找到局部或者全局最优点(下降速度快)换句话说,如果你用tanh函数作为激活函数,能更快使你的损失函数收敛到局部或者全局最小值。其次,两者的导数范围不一样,sigmoid的导数取值范围是

而tanh函数导数的取值范围是

tanh函数导数的取值范围更大

3 relu函数

relu函数的全称是:Rectified Linear Units,公式是

函数图像如下

相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。

二维情况下,使用relu之后的效果

为什么relu不会造成梯度弥散(梯度消失)

什么叫梯度弥散:具体来说就是当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”

relu的导数图形如下

下面解释为什么Relu不会造成梯度弥散(摘自知乎)

S型函数(如sigmoid函数,tanh函数)在正负饱和区的梯度都接近于0,所以这会造成梯度弥散,而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象

其次:relu函数具有稀疏激活性(原因)

随着训练的推进,部分输入会落入x

relu导数计算更快

参考文献:[1]https://www.zhihu.com/question/52020211

[2]https://stats.stackexchange.com/questions/330559/why-is-tanh-almost-always-better-than-sigmoid-as-an-activation-function

tanhx=2σ(2x)−1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G1XXU300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券