sigmoid和tanh求导的特殊技巧

本文详细介绍了两种常见的激活函数:sigmoid和tanh。对于sigmoid函数,其数学表达式为f(z)=1/(1+exp(-z)),导数为f(z)'=f(z)(1-f(z))。而对于tanh函数,其表达式为f(z)=tanh(z),导数为f(z)'=1-(f(z))^2。这两种函数在神经网络中有着广泛的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. sigmoid

函数:f(z) = 1 / (1 + exp( − z))

导数:f(z)' = f(z)(1 − f(z))

2.tanh

函数:f(z) = tanh(z)

导数:f(z)' = 1 − (f(z))2


### Sigmoid Tanh 函数的对比 #### 公式定义 Sigmoid 函数可以表示为: \[ f(x) = \frac{1}{1 + e^{-x}} \] Tanh 函数则通过双曲正切表达,其公式如下: \[ g(x) = \tanh(x)=\frac{(e^{x}-e^{-x})}{(e^{x}+e^{-x})} \] 这两种函数都是平滑连续且可微分的非线性变换。 #### 图像展示 下面展示了两种激活函数随输入变化的趋势图[^3]: ```python import numpy as np from matplotlib import pyplot as plt def tanh(z): return (np.exp(z) - np.exp(-z)) / (np.exp(z) + np.exp(-z)) def sigmoid(z): return 1 / (1 + np.exp(-z)) x = np.arange(-5, 5, 0.1) y1 = tanh(x) y2 = sigmoid(x) plt.figure(figsize=(8, 6)) plt.plot(x, y1, 'r-', label='tanh(x)') plt.plot(x, y2, 'b-', label='sigmoid(x)') plt.title('Comparison between Sigmoid and Tanh Functions') plt.xlabel('Input Value') plt.ylabel('Output Value') plt.legend() plt.grid(True) plt.show() ``` 从图形可以看出,两者都呈现出中间陡峭两端渐缓的特点,但是具体形态有所差异。Sigmoid 的取值范围是从接近于零逐渐增加至约等于一;而 tanh 则是从负一附近上升到正值区域直至逼近加一。 #### 特点分析 - **输出区间** - Sigmoid 将任意实数值压缩到了 $(0,1)$ 范围内,在处理概率估计时特别有用。 - Tanh 输出位于 $[-1,+1]$ ,这使得它更适合某些特定类型的预处理需求或是当希望数据具有均值为零特性的时候使用[^1]。 - **中心化程度** - Sigmoid 不是以原点为中心对称分布的,这意味着如果前一层权重初始化不当可能会导致后续更新过程变得缓慢。 - 相较之下,由于 tanh 是关于坐标轴完全对称的,所以通常收敛速度更快一些[^2]。 #### 应用场景 - 对于浅层模型而言,尤其是在解决简单的二元分类任务时,Sigmoid 可能是一个不错的选择因为它能够很好地给出类别的置信度得分。 - 当构建深层架构时,考虑到梯度传播效率问题,更倾向于采用其他形式比如 ReLU 或者 Leaky-ReLU 来替代传统的 Sigmoid 。不过对于最后一层涉及多标签或多类别预测的情况下仍然会见到 Sigmoid 影子。 - 在实际工程实践中,除非有特殊理由偏好 Sigmoid (例如为了获得明确的概率解释),否则往往优先考虑 tanh 或其它现代改进版激活单元来加速训练并提高性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值