激活函数篇 02 —— 双曲正切函数tanh
本篇文章收录于专栏【机器学习】
以下是激活函数系列的相关的所有内容:
一文搞懂激活函数在神经网络中的关键作用
逻辑回归:Sigmoid函数在分类问题中的应用
tanh ( x ) = e x − e − x e x + e − x \tanh(x)=\frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x
- 定义域: ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞)
- 值域: ( − 1 , 1 ) (-1,1) (−1,1)
- 对称性: 关于点 ( 0 , 0 ) (0,0) (0,0) 中心对称
- 可导性: 处处可导
运用场景
- 神经网络隐藏层: 引入非线性,使得模型能够学习复杂的特征。
- 强化学习: 动作选择的概率计算。
- 数据标准化: 将特征值映射到 ( − 1 , 1 ) (-1, 1) (−1,1)区间,便于后续处理。
求导:
d
d
x
tanh
(
x
)
=
d
d
x
(
e
x
−
e
−
x
e
x
+
e
−
x
)
\frac{d}{dx} \tanh(x) = \frac{d}{dx} \left( \frac{e^x - e^{-x}}{e^x + e^{-x}} \right)
dxdtanh(x)=dxd(ex+e−xex−e−x)
d d x ( e x − e − x e x + e − x ) = ( e x + e − x ) ( e x + e − x ) − ( e x − e − x ) ( e x − e − x ) ( e x + e − x ) 2 \frac{d}{dx} \left( \frac{e^x - e^{-x}}{e^x + e^{-x}} \right) = \frac{(e^x + e^{-x})(e^x + e^{-x}) - (e^x - e^{-x})(e^x - e^{-x})}{(e^x + e^{-x})^2} dxd(ex+e−xex−e−x)=(ex+e−x)2(ex+e−x)(ex+e−x)−(ex−e−x)(ex−e−x)
= ( e 2 x + 2 + e − 2 x ) − ( e 2 x − 2 + e − 2 x ) ( e x + e − x ) 2 = 4 ( e x + e − x ) 2 = \frac{(e^{2x} + 2 + e^{-2x}) - (e^{2x} - 2 + e^{-2x})}{(e^x + e^{-x})^2} = \frac{4}{(e^x + e^{-x})^2} =(ex+e−x)2(e2x+2+e−2x)−(e2x−2+e−2x)=(ex+e−x)24
∵ ( e x + e − x ) 2 = cosh 2 ( x ) ; 4 cosh 2 ( x ) = 4 ⋅ sech 2 ( x ) \because (e^x + e^{-x})^2 = \cosh^2(x); \frac{4}{\cosh^2(x)} = 4 \cdot \text{sech}^2(x) ∵(ex+e−x)2=cosh2(x);cosh2(x)4=4⋅sech2(x)
∴ d d x tanh ( x ) = 1 − tanh 2 ( x ) \therefore \frac{d}{dx} \tanh(x) = 1 - \tanh^2(x) ∴dxdtanh(x)=1−tanh2(x)
函数特点
解决了 Sigmoid 函数的输出不以 0 为中心的问题。Sigmoid 函数的输出范围是 ( 0 , 1 ) (0,1) (0,1),而 Tanh 函数的输出范围是 ( − 1 , 1 ) (−1,1) (−1,1),这使得 Tanh 函数的输出以 0 0 0 为中心。这一特性有助于梯度的稳定,因为梯度在正负方向上是对称的,从而避免了梯度更新时的不对称性。
尽管 Tanh 函数解决了输出不以 0 为中心的问题,但它仍然存在梯度消失和幂运算的问题。
梯度消失
梯度消失问题的根本原因是激活函数的导数在输入值较大或较小时接近于 0。对于 Tanh 函数,其导数为:
d
d
x
tanh
(
x
)
=
1
−
tanh
2
(
x
)
\frac{d}{dx} \tanh(x) = 1 - \tanh^2(x)
dxdtanh(x)=1−tanh2(x)
当 x 的绝对值较大时,
tanh
(
x
)
\tanh(x)
tanh(x) 接近于 1 或 -1,此时
tanh
′
(
x
)
\tanh' (x)
tanh′(x) 接近于 0。这导致在反向传播过程中,梯度值变得非常小,几乎无法对权重进行有效更新,从而减慢了训练速度甚至导致训练停滞。
可以使用relu、Leaky Relu、ELU等得以解决。
幂运算
Tanh 函数的计算涉及指数运算,这在某些情况下可能会导致计算效率较低,尤其是在处理大规模数据时。指数运算的计算成本较高,可能会影响模型的训练速度。
可以使用近似方法来计算 Tanh 函数,例如使用泰勒展开或其他近似公式,以减少计算成本。
或者使用更高效的激活函数:例如,ReLU 函数和 Leaky ReLU 函数的计算不涉及指数运算,计算效率更高。