PyTorch 深度学习笔记(十一):非线性激活函数的核心作用与数学原理
·
PyTorch 深度学习笔记(十一):非线性激活函数的核心作用与数学原理
一、核心作用
-
引入非线性能力
若仅使用线性变换($y = Wx + b$),多层网络等价于单层网络($y = W_{\text{eff}}x + b_{\text{eff}}$),无法拟合复杂函数。非线性激活函数打破线性约束,使神经网络具备通用近似能力(Universal Approximation Theorem)。 -
增强特征表达
通过非线性映射(如$\max(0, x)$),网络可学习数据的层次化抽象表示。例如:- 浅层提取边缘、纹理等基础特征
- 深层组合为高级语义特征(如物体轮廓)
-
梯度稳定性控制
合理设计的激活函数(如ReLU)可缓解梯度消失/爆炸问题,确保反向传播中梯度有效更新参数。
二、数学原理与常见函数
-
Sigmoid
- 函数表达式:
$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$ - 导数(反向传播使用):
$$ \sigma'(x) = \sigma(x) \cdot (1 - \sigma(x)) $$ - 特性:输出值域$(0,1)$,但易导致梯度消失($|x|>5$时导数接近0)。
- 函数表达式:
-
Tanh
- 函数表达式:
$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$ - 导数:
$$ \tanh'(x) = 1 - \tanh^2(x) $$ - 特性:输出值域$(-1,1)$,中心对称,梯度消失问题弱于Sigmoid。
- 函数表达式:
-
ReLU (Rectified Linear Unit)
- 函数表达式:
$$ \text{ReLU}(x) = \max(0, x) $$ - 导数:
$$ \text{ReLU}'(x) = \begin{cases} 1 & \text{if } x > 0 \ 0 & \text{if } x \leq 0 \end{cases} $$ - 特性:计算高效,缓解梯度消失,但负区间梯度为0可能导致"神经元死亡"。
- 函数表达式:
-
Leaky ReLU
- 函数表达式($\alpha$为小常数,如$0.01$):
$$ \text{LeakyReLU}(x) = \begin{cases} x & \text{if } x > 0 \ \alpha x & \text{if } x \leq 0 \end{cases} $$ - 导数:
$$ \text{LeakyReLU}'(x) = \begin{cases} 1 & \text{if } x > 0 \ \alpha & \text{if } x \leq 0 \end{cases} $$ - 特性:负区间引入微小梯度,缓解神经元死亡问题。
- 函数表达式($\alpha$为小常数,如$0.01$):
三、PyTorch实现示例
import torch
import torch.nn as nn
# 定义含非线性激活的神经网络
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.act1 = nn.ReLU() # 使用ReLU
self.fc2 = nn.Linear(256, 10)
self.act2 = nn.Softmax(dim=1) # 输出层用Softmax
def forward(self, x):
x = self.act1(self.fc1(x)) # 第一层后接激活函数
x = self.act2(self.fc2(x))
return x
# 计算Sigmoid导数(手动实现)
def sigmoid_derivative(x):
s = torch.sigmoid(x)
return s * (1 - s)
# 测试梯度
x = torch.tensor([1.0], requires_grad=True)
y = torch.sigmoid(x)
y.backward()
print("Sigmoid导数:", x.grad.item()) # 输出 ≈0.1966
四、选择建议
- 隐藏层:优先使用ReLU及其变种(LeakyReLU, ELU),平衡效率与梯度稳定性。
- 输出层:
- 二分类:Sigmoid
- 多分类:Softmax($ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}} $)
- 回归:线性激活(无变换)
- 梯度敏感场景:避免Sigmoid/Tanh,改用Swish($x \cdot \sigma(x)$)等平滑函数。
关键结论:非线性激活函数是神经网络从"线性模型"升级为"万能函数拟合器"的核心组件,其数学特性直接影响模型收敛性、表达能力与训练效率。
更多推荐
所有评论(0)