常用的激活函数总结

激活函数名表达式导数表达式
sigmoidf(x)= 1 1 + e − x \frac{1}{1+e^-x} 1+ex1f’(x)=f(x)(1-f(x))
Tanhf(x) = tanh(x) = e x − e − x e x + e − x \frac{e^x-e^-x}{e^x+e^-x} ex+exexexf’(x)=1- ( ( f x ) ) 2 ((fx))^2 ((fx))2
Relu f ( x ) = m a x ( 0 , x ) = { 0 x ≤ 0   x x > 0 f(x)=max(0,x) = \begin{cases}0&\text{$x\leq0 $ }\\x&\text{$x>0$} \end{cases} f(x)=max(0,x)={0xxx>0 f ′ ( x ) = { 0 x ≤ 0   1 x > 0 f'(x)= \begin{cases}0&\text{$x\leq0 $ }\\1&\text{$x>0$} \end{cases} f(x)={01xx>0
LeakyReLU f ( x ) = m a x ( 0.001 x , x ) = { 0.001 x x ≤ 0   x x > 0 f(x)=max(0.001x,x)=\begin{cases}0.001x&\text{$x\leq0 $ }\\x&\text{$x>0$} \end{cases} f(x)=max(0.001x,x)={0.001xxxx>0 f ′ ( x ) = { 0.001 x ≤ 0   1 x > 0 f'(x)= \begin{cases}0.001&\text{$x\leq0 $ }\\1&\text{$x>0$} \end{cases} f(x)={0.0011xx>0
PReLU f ( x ) = m a x ( 0.001 x , x ) = { α x x ≤ 0   x x > 0 f(x)=max(0.001x,x)=\begin{cases}\alpha x&\text{$x\leq0 $ }\\x&\text{$x>0$} \end{cases} f(x)=max(0.001x,x)={αxxxx>0 f ′ ( x ) = { α x ≤ 0   1 x > 0 f'(x)= \begin{cases}\alpha &\text{$x\leq0 $ }\\1&\text{$x>0$} \end{cases} f(x)={α1xx>0
ELU f ( x ) = { x x ≥ 0 α ( e x − 1 ) x&lt;0 f(x)=\begin{cases}x&amp;\text {$x \geq 0$}\\ \alpha (e^x -1) &amp;\text{x&lt;0}\end{cases} f(x)={xα(ex1)x0x<0 f ′ ( x ) = { 1 x ≥ 0 α e x x &lt; 0 f&#x27;(x)=\begin{cases}1&amp; \text{$x \geq 0$}\\\alpha e^x &amp;\text{$x&lt;0$} \end{cases} f(x)={1αexx0x<0
Maxout f ( x ) = m a x ( w 1 T x + b 1 , w 2 T x + b 2 ) f(x)=max(w_1^T x + b_1,w_2^T x + b_2) f(x)=max(w1Tx+b1,w2Tx+b2) f ( x ) = m a x ( w 1 , w 2 ) f(x)=max(w_1,w_2) f(x)=max(w1,w2)

各种激活函数图像
sigmoid
在这里插入图片描述
Tanh
在这里插入图片描述
RELU
在这里插入图片描述
Leaky ReLU

在这里插入图片描述

PReLU
在这里插入图片描述
ELU
在这里插入图片描述为什么需要激活函数
标准说法

这是由激活函数的性质所决定来, 一般来说, 激活函数都具有以下性质:

非线性: 首先,线性函数可以高效可靠对数据进行拟合, 但是现实生活中往往存在一些非线性的问题(如XOR), 这个时候, 我们就需要借助激活函数的非线性来对数据的分布进行重新映射, 从而获得更强大的拟合能力. (这个是最主要的原因, 其他还有下面这些性质也使得我们选择激活函数作为网络常用层)
可微性: 这一点有助于我们使用梯度下降发来对网络进行优化
单调性: 激活函数的单调性在可以使单层网络保证网络是凸优化的
f(x)≈x:

当激活满足这个性质的时候, 如果参数初值是很小的值, 那么神经网络的训练将会很高效(参考ResNet训练残差模块的恒等映射); 如果不满足这个性质, 那么就需要用心的设值初始值( 这一条有待商榷 )

如果不使用激活函数, 多层线性网络的叠加就会退化成单层网络,因为经过多层神经网络的加权计算,都可以展开成一次的加权计算
更形象的解释

对于一些线性不可分的情况, 比如XOR, 没有办法直接画出一条直线来将数据区分开, 这个时候, 一般有两个选择.

如果已知数据分布规律, 那么可以对数据做线性变换, 将其投影到合适的坐标轴上, 然后在新的坐标轴上进行线性分类

而另一种更常用的办法, 就是使用激活函数, 以XOR问题为例, XOR问题本身不是线性可分的,

关于各个激活函数的比较和适用场景

神经元饱和问题: 当输入值很大或者很小时, 其梯度值接近于0, 此时, 不管从深层网络中传来何种梯度值, 它向浅层网络中传过去的, 都是趋近于0的数, 进而引发梯度消失问题

zero-centered: 如果数据分布不是zero-centered的话就会导致后一层的神经元接受的输入永远为正或者永远为负, 因为 ∂f∂w=x
, 所以如果x的符号固定,那么 ∂f∂w 的符号也就固定了, 这样在训练时, weight的更新只会沿着一个方向更新, 但是我们希望的是类似于zig-zag形式的更新路径 (关于非0均值问题, 由于通常训练时是按batch训练的, 所以每个batch会得到不同的信号, 这在一定程度上可以缓解非0均值问题带来的影响, 这也是ReLU虽然不是非0 均值, 但是却称为主流激活函数的原因之一)

各种激活函数优缺点分析

激活函数名优势劣势适用场景
Sigmoid可以将数据值压缩到[0,1]区间内1. 神经元饱和问题
2.sigmoid的输出值域不是zero-centered的
3. 指数计算在计算机中相对来说比较复杂
在logistic回归中有重要地位
Tanh1. zero-centered: 可以将 (−∞,+∞) 的数据压缩到 [−1,1] 区间内
2.完全可微分的,反对称,对称中心在原点
1. 神经元饱和问题
2. 计算复杂
在分类任务中,双曲正切函数(Tanh)逐渐取代 Sigmoid 函数作为标准的激活函数
ReLU1. 在 (0,+∞) ,梯度始终为1, 没有神经元饱和问题
2. 不论是函数形式本身,还是其导数, 计算起来都十分高效
3. 可以让训练过程更快收敛(实验结果表明比sigmoid收敛速度快6倍)
4. 从生物神经理论角度来看, 比sigmoid更加合理
1. 非zero-centered
2. 如果输入值为负值, ReLU由于导数为0, 权重无法更新, 其学习速度可能会变的很慢,很容易就会”死”掉(为了克服这个问题, 在实际中, 人们常常在初始化ReLU神经元时, 会倾向于给它附加一个正数偏好,如0.01)
在卷积神经网络中比较主流
LeakyReLU1. 没有神经元饱和问题
2. 计算高效
3. 收敛迅速(继承了ReLU的优点)
4. 神经元不会”死”掉(因为在负值时, 输出不为0, 而是x的系数0.001)
PReLU1. 没有神经元饱和问题
2. 计算高效
3. 收敛迅速(继承了ReLU的优点)
4. 神经元不会”死”掉(因为在负值时, 输出不为0, 而是x的系数 α )
5. 相对于Leaky ReLU需要通过先验知识人工赋值, PReLU通过迭代优化来自动找到一个较好的值, 更加科学合理, 同时省去人工调参的麻烦
ELU1. 拥有ReLU所有的优点
2. 形式上更接近于zero-centered
3. 在面对负值输入时,更加健壮
1. 引入了指数计算, 使计算变的复杂
MaxoutMaxout 1. 跳出了点乘的基本形式
2. 可以看作是ReLU和Leaky ReLU 的一般化形式
3. linear Regime(啥意思?)!
4. 在所有输入范围上都没有神经元饱和问题
5. 神经元永远不会”死”掉
6. 拟合能力非常强,它可以拟合任意的的凸函数。作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐含层”节点的个数可以任意多
1. 使得神经元个数和参数个数加倍, 导致优化困难

激活函数的使用原则
1. 优先使用ReLU, 同时要谨慎设置初值和学习率 ( 实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都 “dead” 了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁 )
2. 尝试使用LeakyReLU/PReLU/Maxout/ELU等激活函数
3. 可以试下tanh, 但是一般不会有太好的结果
4. 不要使用sigmoid
其他激活函数
https://www.jiqizhixin.com/articles/2017-10-10-3
参考
激活函数总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值