1、激活函数

更新W有两种方法:穷举法、梯度下降法

如何选择激活函数?

  • 通常来说,很少会把各种激活函数串起来在一个网络中使用。 
  • 如果使用 ReLU ,那么一定要小心设置学习率(learning rate ),预防出现过多的“神经元死亡”问题。
  • 如果这个问题不好解决,那么可以试试 Leaky ReLU 、 PReLU 或者 Maxout。 
  • 最好不要用 sigmoid ,可以试试 tanh ,不过可以预期它的效果会比不上 ReLU 和 Maxout。

激励层建议:

CNN尽量不要使用sigmoid,如果要使用,建议只在全连接层使用

首先使用ReLU,因为迭代速度快,但是有可能效果不佳

如果使用ReLU失效的情况下,考虑使用Leaky ReLu或者Maxout,此时一般情况都可以解决啦

tanh激活函数在某些情况下有比较好的效果,但是应用场景比较少

 

2、方法

Sigmoid

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_02

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_03

缺点:

梯度消失,具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f’(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f’(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数无法被更新,很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在5层之内就会产生梯度消失现象

容易出现软饱和

均值不为零,即函数输出没有0中心化。

如果输入都是正数的话,那么对 w求局部梯度则都为正;结合梯度下降法:在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,这将会导致梯度下降权重更新时出现 z 字型(Zig Zag)的下降。使得收敛缓慢。

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_04

Tanh  双曲正切、双S函数

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_05

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_06

cnn激活函数的作用 cnn的激活函数在哪使用_拟合_07

缺点;

tanh函数也存在梯度饱和问题(也具有软饱和性),造成梯度消失,导致训练效率低下。甚至终止梯度传递(死亡神经元)

与 sigmoid 不同的是,tanh输出是零均值的(0中心化)。

实际应用中,tanh 会比 sigmoid 使得模型收敛速度更快。

 

ReLU  修正线性单元

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_08

 

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_09

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_10

与传统sigmoid激活函数相比,ReLU能有效缓解梯度消失问题。ReLU 在x<0 时硬饱和。x>0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减。f(x) = max(0, x )

均值不为零

计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值就可以得到激活值,而不用去算复杂的(指数)运算。如果x<0, f(x)=0,如果x>0, f(x)=x。加快了正向传播的计算速度。

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

随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。

没有梯度消失和梯度爆炸,收敛速度快,但是有死亡神经元(可以用较小学习率避免)

Leaky ReLU

f(x) = max(σx, x )

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_11

用来解决 ReLU“神经元死亡” 的问题。与 ReLU 不同的是ReLU 中当 x<0 时,函数值为 0 。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01

 

PReLU

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_12

PReLU 是ReLU 和 Leaky ReLU的改进版本,具有非饱和性:

与ReLU相比,PReLU收敛速度更快(因为PReLU的输出更接近0均值)。

RReLU

cnn激活函数的作用 cnn的激活函数在哪使用_拟合_13

核心思想:在训练过程中,aji是从一个高斯分布中随机出来的,然后再在测试过程中进行修正。

 

ELU

cnn激活函数的作用 cnn的激活函数在哪使用_cnn激活函数的作用_14

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_15

cnn激活函数的作用 cnn的激活函数在哪使用_权重_16

右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱和能够让ELU对输入变化或噪声更鲁棒。

ELU的输出均值接近于零(相比sigmoid和ReLU),所以收敛速度更快。

融合了sigmoid和ReLU:左侧具有软饱和性,右侧无饱和性。

Maxout

无神经元饱和,无神经元死亡,计算复杂。

cnn激活函数的作用 cnn的激活函数在哪使用_拟合_17

cnn激活函数的作用 cnn的激活函数在哪使用_激活函数_18

Maxout能够缓解梯度消失,又由于不会陷入硬饱和区

Maxout的拟合能力非常强:它可以拟合任意的的凸函数。

规避了ReLU神经元死亡的缺点。但增加了参数和计算量。