常见的激活函数:
1、二元阶跃函数
x
>
=
0
f
(
x
)
=
1
,
e
l
s
e
f
(
x
)
=
0
x>=0 f(x)=1, else f(x)=0
x>=0f(x)=1,elsef(x)=0
缺点:类别多不能用,求导为0不能反向更新参数
2、线性函数
f
(
x
)
=
a
x
f(x)=ax
f(x)=ax
缺点:倒数为常数,与输入值无关
3、Sigmoid:
1
(
1
+
e
−
x
)
\frac{1}{(1+e^{-x})}
(1+e−x)1 将至转为(0,1)之间,其求导图如下
由图可知,梯度在-3到3之间时有意义的,当值超出(-3,3)梯度值就非常小了,当梯度值趋于0时,网络就学不到东西了
4、tanh函数
其中tanh函数是以0为中心的,所以梯度不会被限制往一个特定方向移动
5、ReLU
m
a
x
(
0
,
x
)
max(0,x)
max(0,x)
与其他激活功能相比,使用ReLU功能的主要优点是它不会同时激活所有神经元,只有当值大于0时才被激活,因此ReLU的计算效率远高于sigmoid和tanh。然而负值梯度为0,由于这个原因,在反向传播过程中,一些神经元的权值和偏差没有更新。这会产生永远不会被激活的死亡神经元。
6、Leaky ReLU
ReLU的改进版本
防止死神经元
7、Parameterised ReLU
f(x) = x, x>=0
= ax, x<0
对于一个参数化的ReLU函数,’ a '也是一个可训练的参数。该网络还学习“a”的值,以更快、更优地收敛。
8、Exponential Linear Unit
f(x) = x, x>=0
= a(e^x-1), x<0
9、Swish
f
(
x
)
=
x
/
(
1
−
e
−
x
)
f(x) = x/(1-e^{-x})
f(x)=x/(1−e−x)
Swish的计算效率和ReLU一样高,在更深层次的模型上比ReLU表现出更好的性能
10 softmax
Sigmoid函数及其组合通常在分类器的情况下工作得更好
Sigmoids和tanh函数有时由于消失梯度问题而被避免
ReLU函数是一个通用的激活函数,目前在大多数情况下都使用
如果我们在我们的网络中遇到一个神经元死亡的案例,泄漏的ReLU函数是最好的选择
永远记住,ReLU函数应该只在隐藏层中使用
根据经验,你可以先使用ReLU函数,然后在ReLU不能提供最佳结果的情况下转移到其他激活函数
参考连接
在隐藏层可以考虑以下常用的三个激活函数:
Recitified Linear Activation(ReLU):max(0.0, x)
不容易出现梯度消失(阻止深度网络训练),但是会出现饱和和“dead” units
使用ReLU激活函数时,可采用"He Normal" or "He Uniform"初始化权重,并将输入标准化到(0,1)
Logistic(Sigmoid):
1
(
1
+
e
−
x
)
\frac{1}{(1+e^{-x})}
(1+e−x)1,值越大越接近1,越小越解决0
使用Sigmoid激活函数时,可采用“Xavier Normal”和“Xavier Uniform”初始化权重,输入缩放到(0,1)之间
Hyperbolic Tangent(Tanh)
(
e
x
−
e
−
x
)
e
x
+
e
−
x
\frac{(e^x - e^{-x})}{e^x+e{-x}}
ex+e−x(ex−e−x) 值越大越接近1,越小越解决-1
使用Tanh激活函数时,可采用“Xavier Normal”和“Xavier Uniform”初始化权重,输入缩放到(1,-1)之间
怎么选
在1990一般使用sigmoid作为默认激活函数,1990后期到2010使用tanh作为默认函数。
sigmoid和tanh两个都因为梯度消失问题不能运用于深层网络,现在多层感知机和CNN常用ReLU或者其扩展。
递归神经网络仍使用sigmoid和tanh作为激活函数
对于输出层常用的三个激活函数:
Linear线性激活函数不会以任何方式改变输入的加权和,而是直接返回值
Sigmoid在输出层中,用于训练具有sigmoid激活函数的模型的目标标签的值为0或1
Softmax输出一个和为1.0的值向量,可以解释为类隶属度的概率 e x ∑ ( e x ) \frac{e^x}{\sum(e^x)} ∑(ex)ex
怎么选
根据要解决的问题的预测来选择,具体来说,就是被预测的变量的类型。
例如,您可以将预测问题分为两大类,预测类别变量(分类)和预测数值变量(回归)。
如果你的问题是一个回归问题,你应该使用一个线性激活函数
二进制分类:一个节点,sigmoid激活。
多类分类:两个或以上互斥的类,每个类一个节点,softmax激活。
多标签分类:两个或更多相互包容的类,每个类一个节点,sigmoid激活。