常用激活函数总结

神经网络与激活函数

神经网络从数学上来说,就是用来拟合一个函数。把数据扔进去,得到一个预测结果,以此来解决分类和回归等问题。但是针对不同的问题,需要拟合不同的函数,包括线性函数和非线性函数。神经网络中常常会见到各种激活函数,当需要拟合非线性函数时就需要激活函数登场了。

image

对于每个神经元来说,都是先进行线性变换,再将线性变换的结果通过激活函数来进行激活。注意,这里的有效激活函数必须是非线性函数。如果采用线性激活函数,则在前向传播的过程中,相当于一直做线性变换,这样的话,无论多少隐藏层,都是线性变换,也就是隐藏层在这里没有发生作用,仍然是一个单层的感知机。当然对于最后一层的输出层则没有这个要求,可以选择线性或者非线性的激活函数。

常用激活函数总结

这里主要介绍非线性激活函数,线性的激活函数也就是恒等函数,在坐标轴表示为一条直线,通常使用较少。常见的非线性激活函数通常可以分为两类,一种是输入单个变量输出单个变量,如sigmoid函数,Relu函数;还有一种是输入多个变量输出多个变量,如Softmax函数,Maxout函数。

1.Sigmoid函数

Sigmoid函数,也叫做S函数将值限定在 ( 0 , 1 ) (0,1) (0,1) 之间,能够很好的作为概率来解释算法得到的结果。目前在计算机视觉中不常用,只适用于二分类等问题。

缺点是当输入较大的正数或者负数时,导数就会变为0,这时候采用梯度下降方法就会下降很慢,使得神经网络不能正常更新。同时不是以0为对称,容易在更新时产生 zigzag 路径。

函数定义为
a = s i g m o i d ( z ) = 1 1 + e − z a = sigmoid(z) = \frac{1}{1+e^{-z}} a=sigmoid(z)=1+ez1
其求导结果为
a ′ = 1 1 + e − z ( 1 − 1 1 + e − z ) = a ( 1 − a ) a'=\frac{1}{1+e^{-z}}\left( 1 - \frac{1}{1+e^{-z}}\right)=a(1-a) a=1+ez1(11+ez1)=a(1a)
image.png

2.tanh函数

thah函数能够将值限定在 ( − 1 , 1 ) (-1,1) (1,1) 之间,比sigmoid函数更为常用。但是也存在与sigmoid函数一样的缺点,当在z值较大或者较小时,斜率接近0,这时优化速度很慢,这种情况下可以考虑采用ReLU函数。

函数定义为
a = t h a h ( z ) = e z − e − z e z + e − z a = thah(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} a=thah(z)=ez+ezezez

求导结果为
a ′ = 1 − t a n h 2 ( z ) = 1 − a 2 a' = 1 - tanh^2(z) = 1 - a^2 a=1tanh2(z)=1a2

image.png

3. ReLU函数及其变体

ReLU函数,也叫做线性整流函数,能够解决在值较大时产生的梯度为0的问题,能够正常的更新,并且没有复杂的指数计算,使得性能较好,收敛较快,是目前在视觉领域最为常见的激活函数。

ReLU函数为
a = R e L U ( z ) = m a x ( 0 , z ) a = ReLU(z) = max(0,z) a=ReLU(z)=max(0,z)

其导数为
a ′ = { 0 x &lt; 0 1 x &gt; 0 a&#x27; = \left\{\begin{matrix} 0 &amp; x&lt;0 \\ 1 &amp; x&gt;0 \end{matrix}\right. a={01x<0x>0
image

LeakyReLU是为了防止ReLU函数在负数时,斜率为0的情况,但在实际情况中,很难到负数那边去,所以基本采用ReLU就足够了,不过也建议采用交叉验证来试试这个函数。

Leaky ReLU为
a = L e a k y R e L U ( z ) = m a x ( 0.01 z , z ) a = LeakyReLU(z) = max(0.01z,z) a=LeakyReLU(z)=max(0.01z,z)
其导数为
a ′ = { 0.01 x &lt; 0 1 x &gt; 0 a&#x27; = \left\{\begin{matrix} 0.01 &amp; x&lt;0 \\ 1 &amp; x&gt;0 \end{matrix}\right. a={0.011x<0x>0
image

此外,还有几种激活函数由算法来学习负数区域的学习率,如PReLU函数和ELU函数,原理与ReLU函数类似。

4.Softmax函数

softmax函数与sigmoid函数很相似,也是将值变换到 ( 0 , 1 ) (0,1) (0,1) 之间。但是可以针对多个类别,预测出每个类别的归一化概率,所以通常softmax函数是在分类器的输出层使用。

其函数表达式为
σ ( z ) j = e z j ∑ k = 1 K e z k \sigma (z)_{j}= \frac{e^{z_j}}{\sum_{k=1}^{K}e^{z_k}} σ(z)j=k=1Kezkezj

如何选择激活函数

选择激活函数没有固定的规则,每个激活函数适用于不同的应用,比如分类和回归,多分类和二分类任务。但根据每个激活函数的性质,也存在一些基本的规律

  • 对于二分类问题,在输出层可以选择 sigmoid 函数。
  • 对于多分类问题,在输出层可以选择 softmax 函数。
  • 由于梯度消失问题,尽量sigmoid函数和tanh的使用。
  • tanh函数由于以0为中心,通常性能会比sigmoid函数好。
  • ReLU函数是一个通用的函数,一般在隐藏层都可以考虑使用。
  • 有时候要适当对现有的激活函数稍作修改,以及考虑使用新发现的激活函数。

欢迎大家关注公众号“计算机视觉与机器学习”
计算机视觉和机器学习

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值