深度学习系列之各激活函数对比

  • sigmoid函数

使用sigmoid作为激活函数存在如下两个问题:

1)梯度饱和。当函数激活值接近于0或者1时,函数的梯度接近于0。在反向传播计算梯度过程中:δ(l)=(W(l))Tδ(l+1)∗f′(z(L)),每层残差接近于0,计算出的梯度也不可避免地接近于0。这样在参数微调过程中,会引起参数弥散问题,传到前几层的梯度已经非常靠近0了,参数几乎不会再更新。而且为了防止饱和,对于权重矩阵的初始化需特别留意。

2不是以0为原点对称的。我们更偏向于当激活函数的输入是0时,输出也是0的函数。该问题如果是通过batch训练可以得到缓解。

 

  • tanh双曲正切函数

 

当输入为0时,tanh函数输出为0,符合我们对激活函数的要求。然而,tanh函数也存在梯度饱和问题,导致训练效率低下。

 

  • ReLU激活函数

f(x)=max(0,x)

 

 

相比sigmoid和tanh函数,Relu激活函数的优点在于:

  • 梯度不饱和。梯度计算公式为:1{x>0}。因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。
  • 计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果x<0,f(x)=0,如果x>0,f(x)=x。加快了正向传播的计算速度。

 

Relu激活函数可以极大地加快收敛速度,相比tanh函数,收敛速度可以加快6倍。

ReLU训练时比较脆弱并且可能“死亡”

举例来说:一个非常大的梯度经过一个ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0 。

也就是说,这个 ReLU单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。

合理设置学习率,会降低这种情况的发生概率。

 

Softplus激活函数:可以看作是强制非负校正函数max(0,x)平滑版本。

 

Leaky ReLU:为解决ReLU死亡问题的尝试,ReLU 中当 x<0 时,函数值为 0 。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01 。但效果不是很稳定。

 PReLU ,把负区间上的斜率当做每个神经元中的一个参数来训练。然而该激活函数在在不同任务中表现的效果也没有特别清晰。

Randomized ReLU,在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,l,u属于[0,1],而后测试时修正。

Maxout激活函数:类似理解,k表示每个隐含层节点对应了k个”隐隐含层”节点,可以拟合任意凸函数。

Maxout拥有ReLU线性和梯度不饱和的优点,而没有它容易出现"dead"神经元的缺点;但和ReLU对比,它每个神经元的参数数量增加了k倍。

 

联系:生物神经的稀疏激活性

从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。

从这个角度来看,在经验规则的初始化W之后,传统的Sigmoid系函数同时近乎有一半的神经元被激活,这不符合神经科学的研究,而且会给深度网络训练带来巨大问题。Softplus照顾到了新模型的前两点,却没有稀疏激活性。

此外,稀疏特征并不需要网络具有很强的处理线性不可分机制。

因而,校正函数max(0,x)成了近似符合该模型的最大赢家。ReLu只有负值才会被稀疏掉,即引入的稀疏性是可以训练调节的,是动态变化的。ReLU的使用使得网络可以自行引入稀疏性,这一做法,一定程度等效于无监督的预训练,缩小了无监督和监督学习的代沟。

 

最后提一句:通常来说,很少会把各种激活函数串起来在一个网络中使用的。

 

参考资料:

  1. http://blog.csdn.net/u013146742/article/details/51774093
  1. https://www.v2ex.com/t/340003
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值