12 从零到上手系统学习 PyTorch
1. 激活函数
激活函数是神经网络中用于引入非线性变换的重要组成部分。通过激活函数,神经网络能够学习到复杂的函数映射。
1.1 常见的激活函数
1.1.1 Sigmoid 函数
Sigmoid
函数是最早使用的激活函数之一,其公式为:
$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$
特性:
- 输出范围为 (0, 1)。
- 适合于二分类任务的输出层。
缺点:
- 梯度消失问题。
1 | import torch |
1.1.2 ReLU 函数
ReLU
(Rectified Linear Unit)是目前使用最广泛的激活函数,其公式为:
$$
f(x) = \max(0, x)
$$
特性:
- 非常简单,计算效率高。
- 在正区间梯度恒为 1。
缺点:
- 死亡的 ReLU 的问题:当输入为负时,输出恒为 0。
1 | relu = nn.ReLU() |
1.1.3 Tanh 函数
Tanh
(双曲正切)是另一种常用的激活函数,其公式为:
$$
\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
$$
特性:
- 输出范围为 (-1, 1)。
- 较
Sigmoid
函数更优,输出均值为 0。
缺点:
- 仍然存在梯度消失问题。
1 | tanh = nn.Tanh() |
1.2 自定义激活函数
在某些情况下,我们可能希望使用自定义的激活函数。可以通过继承 nn.Module
来实现。
1 | class CustomActivation(nn.Module): |
2. 损失函数
损失函数用于衡量模型的输出与真实标签之间的差距。通过最小化损失函数,我们可以优化模型的权重。
2.1 常见的损失函数
2.1.1 交叉熵损失
对于分类问题,CrossEntropyLoss
函数通常用于衡量分类的准确性。其公式为:
$$
L = -\sum_{i=1}^{C} y_i \log(p_i)
$$
C
为类别数,y
为真实标签,p
为模型预测。
1 | criterion = nn.CrossEntropyLoss() |
2.1.2 均方误差损失
对于回归问题,常用 MSELoss
(均方误差损失)来衡量模型输出与真实值之间的差距,其公式为:
$$
L = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y_i})^2
$$
1 | criterion = nn.MSELoss() |
2.2 自定义损失函数
可以通过继承 nn.Module
来创建自定义损失函数。
1 | class CustomLoss(nn.Module): |
结论
在这部分内容中,我们详细介绍了 激活函数
和 损失函数
的重要性及常见类型,并展示了如何在 PyTorch 中使用和自定义这些函数。通过对这些概念的掌握,我们可以更好地设计和训练神经网络模型。
12 从零到上手系统学习 PyTorch