Last updated 5 months ago
迭代公式:
图像:
特性:
0 为中心(zero-centered)
输出范围在 [−1, +1][-1,\ +1][−1, +1] 之间,输出值域对称
当输入在 (−∞, −2.5](-\infty,\ -2.5](−∞, −2.5] 或 (−∞, −2.5](-\infty,\ -2.5](−∞, −2.5] 时,Tanh也会面临梯度趋 000 问题(过饱和问题)
指数计算,较为消耗资源
不难看出 Tanh(x)=2⋅Sigmoid(2x)−1Tanh( x ) = 2 \cdot Sigmoid( 2x ) - 1Tanh(x)=2⋅Sigmoid(2x)−1 。本质上来讲 Tanh 属于Sigmoid 的一种变体,尝试通过平移拉伸变换,来解决 Sigmoid 的非原点对称问题。虽然能够处理梯度堆积带来的影响,但是 tanh 同样不能处理相较于堆积更为严重的梯度消失问题。这也是饱和类激活函数的通病。
利用 C 语言实现对算子的封装,有:
#include <stdio.h> #include <math.h> double tanh(double x) { return (exp(x) - exp(-x)) / (exp(x) + exp(-x)); } int main() { double x = 0.5; double y = tanh(x); printf("The tanh of %f is %f\n", x, y); return 0; }
运行验证可得到结果:
The tanh of 0.500000 is 0.462117