深度学习06: 常用激活函数总结(sigmod,tanh,Relu等)

深度学习中几种常见的激活函数理解与总结
https://www.cnblogs.com/XDU-Lakers/p/10557496.html
神经网络梯度消失和梯度爆炸及解决办法
https://blog.csdn.net/program_developer/article/details/80032376

这文章详细分析了几个激活函数优缺点,值得分享;

饱和激活函数:

sigmod:

优点:
提供非线性激活函数
缺点:
1.sigmoid函数饱和,使梯度消失;
2.sigmoid函数输出不是零中心(zero-centered);
3.指数函数计算耗费计算资源;

tanh:

优点:tanh解决了sigmoid的输出非“零为中心”的问题

缺点:
1.依然有sigmoid函数过饱和的问题。
2.依然进行的是指数运算

非饱和激活函数:

ReLu

优点:
1.ReLU解决了梯度消失的问题,至少x在正区间内,神经元不会饱和;
2.由于ReLU线性、非饱和的形式,在SGD中能够快速收敛;
3.计算速度要快很多。ReLU函数只有线性关系,不需要指数计算,不管在前向传播还是反向传播,计算速度都比sigmoid和tanh快

缺点:
1.ReLU的输出不是“零为中心”(Notzero-centered output)。
2.随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。这种神经元的死亡是不可逆转的死亡

总结:训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。所以必须设置一个合理的学习率。为了解决神经元节点死亡的情况,有人提出了Leaky ReLU、P-ReLu、R-ReLU、ELU等激活函数。

Leaky ReLU

优点:

1.神经元不会出现死亡的情况。

2.对于所有的输入,不管是大于等于0还是小于0,神经元不会饱和。

3.由于Leaky ReLU线性、非饱和的形式,在SGD中能够快速收敛。

4.计算速度要快很多。Leaky ReLU函数只有线性关系,不需要指数计算,不管在前向传播还是反向传播,计算速度都比sigmoid和tanh快。

缺点:
1.Leaky ReLU函数中的α,需要通过先验知识人工赋值。

总结:Leaky ReLU很好的解决了“dead ReLU”的问题。因为Leaky ReLU保留了x小于0时的梯度,在x小于0时,不会出现神经元死亡的问题。对于Leaky ReLU给出了一个很小的负数梯度值α,这个值是很小的常数。比如:0.01。这样即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。但是这个α通常是通过先验知识人工赋值的。

RReLU

特点:
(1).RReLU是Leaky ReLU的random版本,在训练过程中,α是从一个高斯分布中随机出来的,然后再测试过程中进行修正。

(2).数学形式与PReLU类似,但RReLU是一种非确定性激活函数,其参数是随机的

总结:

(1)PReLU中的α是根据数据变化的;

(2)Leaky ReLU中的α是固定的;

(3)RReLU中的α是一个在给定范围内随机抽取的值,这个值在测试环节就会固定下来。

ELU

优点:

(1)ELU包含了ReLU的所有优点。

(2)神经元不会出现死亡的情况。

(3)ELU激活函数的输出均值是接近于零的。

缺点:

(1)计算的时候是需要计算指数的,计算效率低的问题。

Maxout

优点:

(1)Maxout具有ReLU的所有优点,线性、不饱和性。

(2)同时没有ReLU的一些缺点。如:神经元的死亡。

缺点:

(1)从这个激活函数的公式14中可以看出,每个neuron将有两组w,那么参数就增加了一倍。这就导致了整体参数的数量激增。

如何选择合适的激活函数?

看了这多激活函数,想必大家都应该有所了解,那这么多的激活函数该如何选择呢?目前还不存在定论,在实践过程中更多还是需要结合实际情况,考虑不同激活函数的优缺点综合使用。我在这里给大家一点在训练模型时候的建议。

(1)通常来说,不能把各种激活函数串起来在一个网络中使用。

(2)如果使用ReLU,那么一定要小心设置学习率(learning rate),并且要注意不要让网络中出现很多死亡神经元。如果死亡神经元过多的问题不好解决,可以试试Leaky ReLU、PReLU、或者Maxout。

(3)尽量不要使用sigmoid激活函数,可以试试tanh,不过我还是感觉tanh的效果会比不上ReLU和Maxout。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章