激活函数汇总

激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。网络使用非线性激活函数后,可以增加神经网络模型的非线性因素,网络可以更加强大,表示输入输出之间非线性的复杂的任意函数映射。 

网络的输出层可能会使用线性激活函数,但隐含层一般都是使用非线性激活函数。

看激活函数的什么?

主要看激活函数的两样

1)是否为非饱和函数   

2)是否为零均值函数

1. 非饱和函数能解决的“梯度消失”问题。

饱和函数的判断

当x趋向于正无穷时,函数的导数趋近于0,此时称为右饱和。
当x趋向于负无穷时,函数的导数趋近于0,此时称为左饱和。

当一个函数既满足右饱和,又满足左饱和,则称为饱和函数,否则称为非饱和函数。

饱和激活函数有如Sigmoid和tanh,非饱和激活函数有ReLU。

如果接近输出层的激活函数求导后梯度值大于1,那么层数增多的时候,最终求出的梯度很容易指数级增长,就会产生梯度爆炸;相反,如果小于1,那么经过链式法则的连乘形式,也会很容易衰减至0,就会产生梯度消失。

所以饱和函数会出现梯度消失现象。要想梯度消失和爆炸都不出现,激活函数的导数等于1。

梯度消失和梯度爆炸问题都是因为【网络太深】,网络【权值】更新不稳定造成的(激活函数和初始值的设定),本质上是因为梯度反向传播中的连乘效应。

2. 零均值函数解决了收敛问题

零均值函数:以零为中心的函数

为何零均值可以解决收敛问题?

f=\sum w_ix_i+b.                              \frac{df}{dw_i}=x_i                             \frac{dL}{dw_i}=\frac{dL}{df}\frac{df}{dw_i}=\frac{dL}{df}x_i

因为\dfrac{dL}{df}的正负固定,梯度  \dfrac{dL}{dw_i} 的符号取决于x的正负。

当x全为正或者全为负时,每次返回的梯度都只会沿着一个方向发生变化,即梯度变化的方向一会向上太多,一会向下太多。这样就会使得权重收敛效率很低致zig-zagging 出现,不易收敛。

但当x正负数量“差不多”时,就能对梯度变化方向进行“修正”,加速了权重的收敛。

这也是为什么数据处理的时候也是零均值化(zero-mean)。

sigmoid函数

对于神经网络的缺点:

1)计算量大,指数运算求导涉及除法。

2)取值为0-1,始终大于零,非零均值函不易收敛。

3)饱和函数,导数趋近于0而且最大值为0.25,小于1,连乘越来越小,易出现梯度消失

适用场景:

sigmoid目前在网络层中使用的比较少,但是在分类问题特别是二分类,多标签分类的输出层是还是会经常使用的。

和softmax类似

softmax也是将输出归一化到0,1之间,所有元素的和累加起来等于1。可以直接当作概率对待,一般用在分类问题的输出层。多类别分类问题,互斥输出。

tanh函数

看图知,tanh函数解决了收敛问题,但是梯度消失并没有解决。


非饱和函数:

ReLU函数(Rectified Linear Unit)

ReLU优点

1. 不会发生梯度消失问题。ReLU 函数当 x>0 为线性结构,有固定的梯度,不会消失。
2. ReLU激活函数在 x<0 时会输出为0(失活),这可以造成网络的稀疏性。这样可以很好的模拟人脑神经元工作的原理,且可以减少参数间的相互依赖,缓解了过拟合问题的发生。
3. ReLU函数简单,计算量小,速度快。

最大的特点是稀疏性

信息的耦合性低:

首先若是输入的参数发生了一个很小的改动,只有少部分的神经元需要改变状态,不需要全局调整,这就是信息的耦合性低。

表达维度尺寸可变:

其次这种动态开启和关闭神经元的做法,可以支持不同输入维度和中间层为度的特征学习。

一个神经网络是稀疏的,我们就可以通过激活的神经元数量来表示不同大小的信息。

线性可分性:

一般是线性可分或者弱线性可分的,这种性能可以降低网络训练的难度。

保持原有的表达能力:

虽然输出的内容是稀疏的,但是被激活的输出仍然保持原有的表达能力。

这些强大的特性和简单的运算使relu函数成为目前为止应用最广泛的激活函数。

ReLU缺点:

1.没有上界

如果线性单元输出过大,或者网络是循环结构。就会导致梯度累积超出计算机的数值上限,输出为NAN,这就是梯度爆炸现象。这样就需要参数初始化和重新设计网络结构来解决。

2.神经元坏死

某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。 如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。

它可以通过使用leaky ReLU 来缓解,它为x  < 0 分配一个小的正斜率;但是,性能会降低.

3.非零均值函数

会影响网络的收敛效果。但是这个缺陷可以使用输出的归一化方法解决。

4. ReLU分段函数不光滑,在间断点处不可导(特别是原点处),影响网络性能。

Leaky ReLU/Parametric ReLU

L-ReLU保证了稀疏下避免了神经元坏死。

P-ReLU动态调整的参数,是否保留稀疏性或者抑制神经元。都要通过训练过程来确定。

GELU函数

GELU(x)&#61;xF_{X}(x)&#61;xP(X\le x)

ReLU作为神经网络的激活函数,网络需要加入随机正则以提升高模型的泛化性。所以若一个非线性函数其本身就具有随机正则性不是完美吗?所以出现了高斯误差线性单元(GELU),输入本身概率统计量为激活函数提供随机正则性,同时保持输入信息。

GELUs其实是 dropout、zoneout、Relus的综合,GELUs对于输入乘以一个0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X, mask为m,则m服从一个伯努利分布, X服从标准正太分布Φ(x)=P(X<=x),X服从标准正太分布),这么选择是因为神经元的输入趋向于正太分布,这么设定使得当输入x减小的时候,输入会有一个更高的概率被dropout掉,这样的激活变换就会随机依赖于输入了。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值