深度学习笔记-9.各种激活函数的总结与比较

问:什么是激活函数?

在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。

问:激活函数有什么用?

  • 增强模型的拟合能力,理论上只要有足够的神经元,一层隐藏层就可以表达任意函数。

如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。
深度学习最主要的特点就是:多层,非线性。 多层为了能够学习更多的东西;没有非线性,多层和单层没什么区别,就是简单的线性组合,连异或都解决不了。
感兴趣的可以看这篇文章:为什么神经网络需要解决多层和非线性问题

问:激活函数有哪些性质?

  • 可微(多元函数):函数可微保证使用梯度下降优化的可计算性。
  • 单调性:保证梯度方向相对稳定。
  • 输出值范围:当输出有限,由于特征表示受有限权值影响,基于梯度的优化方法会更加稳定;当输出无限,特征表示不受影响,但由于高梯度需要小学习率。
  • 非饱和性:

当激活函数满足如下要求,称为右饱和:

clipboard.png


当激活函数满足如下要求,称为左饱和:

clipboard.png


激活函数饱和会造成梯度值接近0,导致梯度消失使模型无法收敛。

问:介绍一下你熟悉的激活函数?特点,优缺点

1,sigmoid函数

clipboard.png

特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。sigmoid激活函数具有“连续可微”,“单调性”,“输出值有限”。通过查看导函数图像,sigmoid激活函数最大的问题就是两端饱和,造成梯度消失(解决办法:使用relu激活函数,BN等),此外输出不以0中心(以0中心的好处是可以加快模型收敛)。目前sigmoid激活函数多使用在二分类问题(对于大于二分类问题,如果类别之间存在相互关系使用sigmoid,反之使用softmax),门控机制的判断等。

缺点:

1)容易导致梯度消失。

如果我们初始化神经网络的权值为 [0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象。(这里有个坑,面试官可能听你提起反向传播,然后问你:什么是反向传播?会推导公式吗?看大佬博客:神经网络BP反向传播算法原理和详细推导流程
BP算法是一个迭代算法,它的基本思想为:

(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);

(2)计算每一层的误差,误差的计算过程是从最后一层向前推进的(这就是反向传播算法名字的由来);

(3)更新参数(目标是误差变小)。求解梯度用链导法则。迭代前面两个步骤,直到满足停止准则(比如相邻两次迭代的误差的差别很小)。

问:梯度消失和梯度爆炸?改进方法。
解决梯度爆炸:
a.可以通过梯度截断。通过添加正则项。
解决梯度消失:
a.将RNN改掉,使用LSTM等自循环和门控制机制。
b.优化激活函数,如将sigmold改为relu
c.使用batchnorm
d.使用残差结构
可以看这篇文章 详解机器学习中的梯度消失、爆炸原因及其解决方法

2)Sigmoid 的输出不是0均值(即zero-centered)。

sigmoid的输出不是零中心的。这个特性会导致为在后面神经网络的高层处理中收到不是零中心的数据。这将导致梯度下降时的晃动,因为如果数据到了神经元永远时正数时,反向传播时权值w就会全为正数或者负数。这将导致梯度下降不希望遇到的锯齿形欢动。但是,如果采用这些梯度是由批数据累加起来,最终权值更新时就会更准确。因此,这是一个麻烦一些,但是能比上面饱和的激活问题结果好那么一些。
(面试官看你说了数据的偏移,不是0均值,可能会问你,你会哪些normalization[规范化]方法?batch norm,layer norm会不会?这部分重新写一篇。
 

2,tanh函数

clipboard.png

      tanh是双曲正切函数,tanh函数和sigmod函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。与sigmoid激活函数相比具有更大的梯度值,再加上输出值以0为中心,模型收敛更快。不过它依然存在两端饱和,梯度消失问题还是存在,tanh激活函数在RNN模型中应用较多。

优缺点

优点: 

  • Tanh outputs are zero-centered,把输入映射到(-1, 1)区间

缺点: 

  • 虽然 tanh 的导数f^{'}(z^{l})区间为(0, 1],但仍然会导致梯度消失问题!

3,relu函数

clipboard.png

relu与线性单元的区别是在其一半的定义域上输出为0,这使得它易于优化,计算。通过图像可得,relu激活函数的梯度不仅大,而且一致,更重要的是它没有sigmoidtanh激活函数的饱和性,有效缓解了梯度消失问题。目前,relu激活函数是神经网络隐藏层的首选。但是,它最大的问题是当输入小于0时,输出值为0,此时神经元将无法学习。

优点:

  • 解决了梯度消失问题
  • 计算速度非常快,只需要判断输入是否大于0
  • 收敛速度远快于sigmoid和tanh,因为这两个梯度最大为0.25,而relu为1

缺点:

  • 输出不是zero-centered
  • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,少见 。例如w初始化全部为一些负数。(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。(问:初始化你会哪几种方法?[头条算法岗面试]可以看我另一篇博客:深度学习中神经网络的几种权重初始化方法 )这和dropout的实现方法可以类比,可以看我另一篇博客:防止过拟合的方法,及dropout实现原理 - 面试篇
  • 原点不可导
     

4,leaky relu函数

clipboard.png

 

leakyrelu激活函数是relu的衍变版本,主要就是为了解决relu输出为0的问题。如图所示,在输入小于0时,虽然输出值很小但是值不为0。
leakyrelu激活函数一个缺点就是它有些近似线性,导致在复杂分类中效果不好。

 

5,ELU (Exponential Linear Units) 函数

clipboard.png

elurelu的区别在负区间,relu输出为0,而elu输出会逐渐接近,更具鲁棒性。elu激活函数另一优点是它将输出值的均值控制为0(这一点确实和BN很像,BN将分布控制到均值为0,标准差为1)。

 

6,softmax

softmax单元常作为网络的输出层,它很自然地表示了具有 k 个可能值的离散型随机变量的概率分布。

clipboard.png

softmax将向量等比例压缩到[0,1]之间,且保证所有元素之和为1。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值