题目
解释神经网络中激活函数的作用并列举三种常见激活函数
信息
- 类型:问答
- 难度:⭐
考点
激活函数作用,常用激活函数特点,非线性转换
快速回答
激活函数在神经网络中的核心作用:
- 引入非线性:使神经网络能够学习复杂模式(无激活函数时网络退化为线性模型)
- 决定神经元输出:将加权和映射到特定范围(如0-1, -1-1)
- 反向传播梯度:通过导数传递误差用于权重更新
三种常见激活函数:
- Sigmoid:输出范围(0,1),适用于二分类输出层
- ReLU:$f(x)=max(0,x)$,计算高效且缓解梯度消失
- Tanh:输出范围(-1,1),中心对称的S型函数
1. 激活函数的核心作用
原理说明:
- 非线性转换:神经网络每层的计算本质是 $\mathbf{z} = \mathbf{W}\mathbf{x} + \mathbf{b}$(线性变换)。激活函数 $\sigma(\mathbf{z})$ 施加非线性变换,使多层堆叠能拟合任意复杂函数(Universal Approximation Theorem)
- 梯度传播:反向传播时需计算 $\frac{\partial \mathcal{L}}{\partial \mathbf{W}} = \frac{\partial \mathcal{L}}{\partial \sigma} \cdot \frac{\partial \sigma}{\partial \mathbf{z}} \cdot \frac{\partial \mathbf{z}}{\partial \mathbf{W}}$,激活函数的导数直接影响梯度稳定性
- 输出范围控制:如Sigmoid将输出压缩到(0,1)符合概率特性,Tanh输出以0为中心有利于优化
2. 三种常见激活函数详解
| 函数 | 公式 | 输出范围 | 导数 | 优点 | 缺点 |
|---|---|---|---|---|---|
| Sigmoid | $\sigma(z) = \frac{1}{1+e^{-z}}$ | (0,1) | $\sigma(z)(1-\sigma(z))$ | 输出概率解释性强 | 梯度消失(两侧饱和区导数→0) |
| ReLU | $f(z) = max(0,z)$ | [0,∞) | $1 \ \text{if} \ z>0 \ \text{else} \ 0$ | 计算简单,缓解梯度消失 | 死亡神经元(负区梯度为0) |
| Tanh | $\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$ | (-1,1) | $1 - \tanh^2(z)$ | 以0为中心,梯度更强 | 梯度消失(|z|大时) |
3. 代码示例(Python/PyTorch)
import torch.nn as nn
# 定义三种激活函数层
sigmoid_layer = nn.Sigmoid()
relu_layer = nn.ReLU()
tanh_layer = nn.Tanh()
# 示例输入(含负值)
input_tensor = torch.tensor([-1.0, 0.0, 2.0])
print("Sigmoid:", sigmoid_layer(input_tensor)) # 输出: [0.2689, 0.5000, 0.8808]
print("ReLU: ", relu_layer(input_tensor)) # 输出: [0.0, 0.0, 2.0]
print("Tanh: ", tanh_layer(input_tensor)) # 输出: [-0.7616, 0.0, 0.9640]4. 最佳实践
- 隐藏层首选ReLU:计算高效且梯度稳定(需配合He初始化)
- 输出层选择:二分类用Sigmoid,多分类用Softmax,回归问题可不用激活函数
- 缓解ReLU缺陷:对死亡神经元问题可使用Leaky ReLU($f(z)=max(0.01z,z)$)或ELU
5. 常见错误
- 全用线性激活函数:导致整个网络退化为单层线性模型
- 输出层误用ReLU:回归问题中限制输出非负(如预测房价可能为负)
- 忽略梯度问题:深层网络中使用Sigmoid/Tanh导致梯度消失
6. 扩展知识
- Swish:$f(z)=z \cdot \sigma(z)$(Google提出,表现常优于ReLU)
- Softplus:$f(z)=\ln(1+e^z)$(ReLU的平滑版本)
- 梯度消失/爆炸:LSTM/GRU通过门控机制缓解,ResNet通过残差连接解决