作者:SAGAR SHARMA编译:ronghuaiyang
导读
激活函数是神经网络中必不可少的组成部分,这篇文章给大家介绍了各种各样的激活函数,一起来看看吧。
什么是激活函数?
就是在神经网络的输出后面加的一个东西(节点)。也就是转换函数,也可以加在两层神经网络之间。
我们为什么要在神经网络中使用激活函数?
用来决定神经网络的输出,就像是和否一样,将结果映射到0到1或者-1到1之间(根据不同的函数)。
激活函数基本上分为两种类型:
- 线性激活函数
- 非线性激活函数
供参考: 下面有速查表
线性或者说恒等激活函数
你可以看到函数是一条直线,或者说线性的。也就是说,函数的输出不会限制在任何的范围以内。
方程: f(x) = x
范围:(负无穷到正无穷)
它对神经网络的复杂性和常用数据的多种多样的参数没什么帮助。
非线性激活函数
非线性激活函数是最常用的激活函数,非线性的图看起来像下面这样:
它让模型更加容易泛化和适应不同的数据,区别不同的输出。
对于非线性函数,需要理解的主要的术语:
导数或者微分:在x轴上的变化导致在y轴上的变化,也就是常说的斜率。单调函数:函数要么是一直变大的,要么是一直变小的。
非线性激活函数的类型主要根据它们的范围或者曲线的类型来划分:
1. Sigmoid或者Logistic激活函数
Sigmoid函数曲线就像个S型。
我们使用sigmoid函数主要是因为它的输出的范围是0到1。所以,它常常用在那些需要预测概率的模型上面,因为概率的范围就是0到1,sigmoid正好符合。
这个函数可微的,意思是,sigmoid曲线上的任意两点都可以找到一个斜率。
这个函数是单调的,不过函数的导数不是单调的。
sigmoid函数可能会造成神经网络训练的时候卡住。
softmax函数是更加一般性的logistic激活函数,用在多类分类上。
2. Tanh激活函数
tanh和logistic sigmoid差不多,但是更好一点。tanh的函数取值范围是-1到1,tanh也是S型的。
优点是,负的输入会映射成负值,0输入会被映射成0附近的值。
这个函数可微的。
这个函数是单调的,不过函数的导数不是单调的。
tanh函数主要用在区分两个类别的时候。
tanh和logistic sigmoid激活函数都是用在前向网络中。
3. ReLU 激活函数
ReLU是目前世界上用的最多的激活函数,几乎所有的深度学习和卷积神经网络中都在使用它。
你可以看到,ReLU是半整流的,当z小于0时,f(z)是0,当z大于等于0时,f(z)等于z。
取值范围: [ 0,无穷)
这个函数和它的导数都是单调的。
但问题是,所有的负值都会变为零,这降低了模型拟合数据的能力。这意味着任何给ReLU激活函数的负值的输入都会在图中立即转换为零,这样没有合理的映射负值反过来又会影响结果图。
4. Leaky ReLU
它尝试解决ReLU的负值映射为0的问题。
你看到Leak了吗?
leak有助于增加ReLU函数的取值范围,a的值是0.01或者类似的比较小的值。
当a不是0.01时,叫做Randomized ReLU。
所以,Leaky ReLU的取值范围是(负无穷到正无穷)。
Leaky 和 Randomized ReLU函数及其导数都是单调的。
为什么需要用到导数/微分?
当对曲线进行更新时,需要知道更新的方向和大小,这个需要依赖斜率。这就是为什么在几乎所有的机器学习和深度学习中我们都需要使用微分。
原文链接:https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6
更多文章,请关注微信公众号:AI公园