激活函数(Activation functions)--(sigmoid、tanh、ReLu)


激活函数(Activation functions

之前用过 sigmoid 函数,sigmoid 函数在这里被称为激活函数,公式为:

   

 

 

 更通常的情况下,使用不同的函数g(z[1])g可以是除了 sigmoid 函数意外的非线性函数 效果总是优于 sigmoid 函数因为函数值域在-1 +1的激活函数,其均值是更接近零均值的

tanh 函数或者双曲正切函数是总体上都优于 sigmoid 函数的激活函数,tanh 函数是 sigmoid 的向下平移和伸缩后的结果,对它进行了变形后,穿过了(0,0)点,并且值域介于+1 -1 之间,sigmoid 函数和 tanh 函数两者共同的缺点是,在z特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度,公式为:

  

 

 

 在机器学习另一个很流行的函数是:修正线性单元的函数(ReLu),ReLu 函数图像是如下图:

   

 

 

 另一个版本的 Relu 被称为 Leaky Relu,当z是负值时,这个函数的值不是等于 0,而是轻微的倾斜,这个函数通常比 Relu 激活函数效果要好,尽管在实际中 Leaky ReLu 使用的并不多,如图:

   

 

 这是一些选择激活函数的经验法则:

sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。

tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合。

ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu 或者Leaky ReLu

 1.51为什么需要非线性激活函数?(why need a nonlinear activation function?

如果你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输,事实证明,如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是计算线性函数,相当于不如直接去掉全部隐藏层,所以除非你引入非线性,否则你无法计算更有趣的函数,即使你的网络层数再多也不行。总而言之,不能在隐藏层用线性激活函数,可以用 ReLU 或者 tanh 或者 leaky ReLU 或者其他的非线性激活函数,唯一可以用线性激活函数的通常就是输出层。还有一些特殊情况,不做讨论。

 1.2 激活函数的导数(Derivatives of activation functions

1sigmoid激活函数

  

(2)Tanh激活函数

   

(3)Rectified Linear Unit (ReLU)

 

 

 注:通常在z= 0 的时候给定其导数 1,0;当然z=0 的情况很少

4Leaky linear unit (Leaky ReLU)

 

注:通常在z= 0的时候给定其导数 1,0.01;当然z = 0的情况很少


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM