激活函数Tanh
Tanh的诞生比Sigmoid晚一些,sigmoid函数我们提到过有一个缺点就是输出不以0为中心,使得收敛变慢的问题。而Tanh则就是解决了这个问题。Tanh就是双曲正切函数。等于双曲余弦除双曲正弦。函数表达式和图像见下图。这个函数是一个奇函数。
对tanh函数求导需要一定的数学基础,这里直接给出结果。
t
a
n
h
′
(
x
)
=
1
−
t
a
n
h
2
(
x
)
tanh'(x)=1-tanh^2(x)
tanh′(x)=1−tanh2(x),这个函数同样是根据函数求导数很容易,但是函数值的计算比较复杂。
同样可以很轻易的证明这个函数两边趋于无穷极限是饱和的,函数图像和sigmoid函数非常像,其实就是直接在竖直方向拉伸两倍,然后在y轴向下平移了1个单位,使得函数的中心回到了0,然后在水平方向上拉伸两倍。
t
a
n
h
(
x
)
=
2
s
i
g
m
o
i
d
(
2
X
)
−
1
tanh(x)=2sigmoid(2X)-1
tanh(x)=2sigmoid(2X)−1。解决了sigmoid函数收敛变慢的问题,相对于sigmoid提高了收敛速度。
其他特点都是类似的,根据函数值求导数值简单,但是指数的计算复杂。梯度消失的特点依旧保留,因为两边的饱和性使得梯度消失,进而难以训练。
尽管tanh函数和sigmoid函数存在梯度消失的问题,但是与之类似,如果函数的梯度过大又会导致梯度爆炸的问题,显然tanh和sigmoid的导函数非常有界,根据导数公式,很容易得出
t
a
n
h
′
(
x
)
∈
[
0
,
1
]
tanh'(x)\in[0,1]
tanh′(x)∈[0,1],所以完全不用担心因为使用激活函数而产生梯度爆炸的问题。
系列文章:
神经网络中的激活函数总述
sigmoid激活函数
tanh激活函数
ReLU系列激活函数
maxout激活函数
Swish激活函数
激活函数发展的新里程——EvoNorms