机器学习:神经网络激活函数总结

神经网络各种激活函数总结


1. 激活函数基本概念

1.1 激活函数的作用

  • 激活函数向神经元中引入了非线性因素,使得神经网络可以逼近任意非线性函数,能应用到诸多非线性场景中。

1.2 激活函数的饱和性

(1) 饱和:激活函数既满足左饱和又满足又饱和。

  • 右饱和:激活函数 f ( x ) 满足:
    lim x + = 0
  • 左饱和:激活函数 f ( x ) 满足:
    lim x = 0

(2) 硬饱和:激活函数既满足左硬饱和,又满足右硬饱和。

  • 对任意的 x ,如果存在常数 c ,当 x > c 时恒有 f ( x ) = 0 则称其为右硬饱和,
  • 如果存在常数 c , 当 x < c 时恒 有 f ( x ) = 0 则称其为左硬饱和。

(3) 软饱和: 只有在极限状态下偏导数才等于0的激活函数,称之为软饱和。


2. Sigmoid函数

Sigmoid 非线性函数数学表达式:

f ( x ) = 1 1 + e x

函数图象为:

这里写图片描述
优点:

  • 求导相对简单。反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:

    f ( x ) = f ( x ) ( 1 f ( x ) )

  • 将输出映射到 ( 0 , 1 ) 之间。单调连续,输出范围有限,优化稳定,可用在输出层神经元。

    扫描二维码关注公众号,回复: 142991 查看本文章

缺点:

(1) sigmoid的饱和性,容易产生梯度消失,导致训练出现问题

  • sigmoid 具有软饱和性,使得在输出值为 0 或 1 时梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个代价函数关于该单元输出的梯度相乘,结果也会接近为 0 。这样,几乎就没有信号通过神经元传到权重再到数据了,因此这时梯度就对模型的更新没有任何贡献。
  • 除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。

(2) 函数不关于原点(0,0)中心对称

  • 这样会使权重更新效率降低,因为如果输入都是正数的话(如 f = w T x + b 中每个元素都 x > 0 ),那么关于 w 的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式 f 而定),这将会导致梯度下降权重更新时出现 z 字型的下降。

(3) sigmoid函数计算量大
- sigmod函数要进行指数运算
- 反向传播求误差梯度时,求导涉及除法

评价

  • sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,的导数就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。
  • 此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

2. tanh函数

双曲正切tanh函数的数学表达式为:

f ( x ) = s i n h ( x ) c o s h ( x ) = e x e x e x + e x

函数图象为:

这里写图片描述

tanh函数曲线 sigmoid 函数曲线很相似,数学关系为:

tanh ( x ) = 2 s i g m o i d ( 2 x ) 1

优点:

  • 与sigmoid函数相比,tanh函数收敛速度更快。
  • tanh函数关于原点中心对称,输出区间是在(-1,1)之间,0均值。
  • tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。

缺点:

  • 同样有饱和问题,没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失

评价:

  • 一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析。

3. ReLU函数

ReLU函数数学表达式为:

f ( x ) = max ( 0 , x ) = { x     ,   x 0 0     ,   x < 0

函数图象为:

这里写图片描述

优点:

(1) 收敛速度快

  • 相较于 sigmoid 和 tanh 函数, ReLU 对于 SGD 的收敛有巨大的加速作用(Krizhevsky et al. 指出有
    6 倍之多)。被认为是由它的线性、非饱和的公式导致的。

(2) 在一定条件下,缓解梯度消失问题

  • 当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。

(3) 计算速度快

  • ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)

缺点:

(1) 在训练时比较脆弱并且可能“死掉”

  • 随着训练的推进,部分输入会落入硬饱和区,流经神经元的梯度从这一点开始将永远是0,导致对应权重无法更新。这种现象被称为“神经元死亡”。
  • 也就是说,这个 ReLU 单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。合理设置学习率,会降低这种情况的发生概率。

(2) ReLU不是以0为中心的函数

  • 与sigmoid类似,ReLU的输出均值也大于0,偏移现象和神经元死亡会共同影响网络的收敛性

评价:

  • ReLU(Rectified Linear Unit)是最近几年非常流行的激活函数

4. PReLU、RReLU与ELU

这几种激活函数都试图解决ReLU函数输入为负时的神经元“死亡现象”。
(1) PReLU重新定义激活函数为:

f ( x ) = { x     ,   x 0 α x     ,   x < 0

这里写图片描述

α 比较小而且固定的时候,称之为LReLU

  • LReLU最初的目的是为了避免梯度消失。但在一些实验中,LReLU对准确率并没有太大的影响。应用LReLU时,必须要非常小心谨慎地重复训练,选取出合适的a,LReLU的表现出的结果才比ReLU好。

因此有人提出了一种自适应地从数据中学习参数的PReLU

  • PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。
  • 这里写图片描述
  • 论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on
    ImageNet Classification中,作者就对比了PReLU和ReLU在ImageNet model A的训练效果

(2) RReLU数学表达式为:

y j i = { x j i     ,   x j i 0 α j i x j i     ,   x < 0 α j i U ( l , u ) , l < u a n d l , u [ 0 , 1 )

其中, α j i 是一个保持在给定范围内取样的随机因子,在测试中是固定的。RReLU在一定程度上能起到正则效果。

这里写图片描述

在论文Empirical Evaluation of Rectified Activations in Convolution Network中,作者对比了RReLU、LReLU、PReLU、ReLU 在CIFAR-10、CIFAR-100、NDSB网络中的效果。

(3) ELU数学表达式为:

f ( x ) = { x       x 0 α ( e x 1 )       x < 0

其中 α > 0
下图为ELU与其他RELU变形的 x < 0 曲线对比:

这里写图片描述

ELU优点

  • ELU减少了正常梯度与单位自然梯度之间的差距,从而加快了学习。
  • 在负的限制条件下能够更有鲁棒性。

5. maxout函数

Maxout 是对 ReLU 和 Leaky ReLU 的一般化归纳,它的函数公式是(二维时):

max ( w 1 T + b 1 , W 2 T + b 2 )
ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当 w 1 , b 1 = 0 时)
评价:

  • Maxout 神经元拥有 ReLU 单元的所有优点(线性和不饱和),而没有它的缺点(死亡的 ReLU 单元)。然而和 ReLU 对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。

6. softmax函数

softmax函数应用于多分类问题,其数学表达式为:

f ( x ) j = e x j k = 1 K e z k

下图为一个计算例子:

这里写图片描述

如果某一个 x j 大过其他 x , 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数:

  • 第一个原因是要模拟 max 的行为,所以要让大的更大。
  • 第二个原因是需要一个可导的函数

Softmax 和 Sigmoid区别:

(1) 应用于分类问题

  • sigmoid将一个real value映射到(0,1)的区间,用来做二分类。
  • softmax 把一个 k 维的real value向量 ( a 1 , a 2 , a 3 , a 4 . ) 映射成 ( b 1 , b 2 , b 3 , b 4 . ) 其中 b i 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 b i 的概率大小来进行多分类的任务。
  • 二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题

(2) 考虑回归预测

softmax是sigmoid的扩展,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地:

这里写图片描述

利用softmax回归参数冗余的特点,从两个参数向量中都减去向量 θ 1 ,得:

这里写图片描述

最后,用 θ′ 来表示 θ 2 θ 1 ,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为

这里写图片描述

另一个类别概率的为

这里写图片描述

这与 logistic回归是一致的。

(3) 模型基于的分布不同

  • softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布

多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。


6. 总结

  • 关于激活函数的选取的问题不存在定论。一般情况下,很少会把各种激活函数串起来在一个网络中使用的。
  • 其次,如果使用 ReLU ,那么一定要小心设置 learning rate ,而且要注意不要让你的网络出现很多 “ dead ”
    神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU 、 PReLU 或者 Maxout.
  • 最好不要用 sigmoid ,可以试试 tanh ,不过可以预期它的效果会比不上 ReLU 和 Maxout.
  • 实践过程中更多还是需要结合实际情况,考虑不同激活函数的优缺点综合使用。

参考资料:

https://blog.csdn.net/kangyi411/article/details/78969642
https://www.v2ex.com/t/340003
https://arxiv.org/pdf/1511.07289v5.pdf
http://www.cnblogs.com/rgvb178/p/6055213.html
https://blog.csdn.net/u011584941/article/details/71534828

猜你喜欢

转载自blog.csdn.net/weixin_40170902/article/details/80022981
今日推荐