趋近智
神经网络 (neural network)的表示能力很大程度上得益于在层之间引入非线性。如果只是简单地堆叠线性变换(如 nn.Linear 层)而没有任何介入函数,整个网络将简化为一个单一的等效线性变换。无论网络有多少层,它都只能学习输入与输出之间的线性关系。
激活函数 (activation function)是引入这些重要非线性的组成部分。它们逐元素应用于层的输出(常被称为预激活值或logit),在将值传递给下一层之前对其进行转换。PyTorch 在 torch.nn 模块中提供了各种各样的激活函数,通常通过将它们实例化为层在模型定义中使用。我们来看看其中最常见的三种:ReLU、Sigmoid 和 Tanh。
修正线性单元,简称ReLU,可以说是现代深度学习 (deep learning)中最受欢迎的激活函数 (activation function),尤其是在卷积神经网络 (neural network) (CNN)中。它的定义非常简单:如果输入为正,它直接输出输入值,否则输出零。
其数学定义为:
在 PyTorch 中,可以使用 nn.ReLU:
import torch
import torch.nn as nn
# 示例用法
relu_activation = nn.ReLU()
input_tensor = torch.randn(4) # 示例输入张量
output_tensor = relu_activation(input_tensor)
print(f"输入: {input_tensor}")
print(f"ReLU 输出: {output_tensor}")
# 在简单模型中的示例
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(10, 20)
self.activation = nn.ReLU()
self.layer2 = nn.Linear(20, 5)
def forward(self, x):
x = self.layer1(x)
x = self.activation(x) # 应用 ReLU
x = self.layer2(x)
return x
model = SimpleNet()
ReLU 函数对负输入为零,对正输入为线性。
优点:
缺点:
Sigmoid 函数,有时也称为逻辑函数,将其输入压缩到 0 到 1 的范围内。它在历史上很受欢迎,尤其是在二元分类模型的输出层,其中输出代表一个概率。
其数学形式为:
在 PyTorch 中,可以使用 nn.Sigmoid:
import torch
import torch.nn as nn
# 示例用法
sigmoid_activation = nn.Sigmoid()
input_tensor = torch.randn(4) # 示例输入张量
output_tensor = sigmoid_activation(input_tensor)
print(f"输入: {input_tensor}")
print(f"Sigmoid 输出: {output_tensor}")
Sigmoid 函数将任意实数平滑地映射到 (0, 1) 的范围内。
优点:
缺点:
由于梯度消失问题,Sigmoid 在今天的深度网络隐藏层中不如 ReLU 常用,但它在特定任务(例如二元分类或多标签分类)的输出层中仍然适用。
双曲正切函数,即 Tanh 函数,在数学上与 Sigmoid 相关,但将其输入压缩到 (-1, 1) 的范围内。
其定义为:
在 PyTorch 中,可以使用 nn.Tanh:
import torch
import torch.nn as nn
# 示例用法
tanh_activation = nn.Tanh()
input_tensor = torch.randn(4) # 示例输入张量
output_tensor = tanh_activation(input_tensor)
print(f"输入: {input_tensor}")
print(f"Tanh 输出: {output_tensor}")
Tanh 函数将任意实数平滑地映射到 (-1, 1) 的范围内。
优点:
缺点:
在 ReLU 兴起之前,Tanh 在隐藏层中通常比 Sigmoid 更受青睐,主要因为其零中心输出范围。它仍然常见于循环神经网络 (neural network) (RNN) 和 LSTM 中。
没有一个“最佳”激活函数适用于所有情况。然而,有一些通用指导原则:
通常需要进行实验,以找到适用于特定架构和数据集的最佳激活函数。在 PyTorch 中,更换激活函数很简单,通常只需更改一行代码,即激活模块实例化或在 nn.Module 的 forward 方法中被调用的位置。
这部分内容有帮助吗?
torch.nn - PyTorch documentation, PyTorch, 2024 - PyTorch神经网络模块的官方文档,详细介绍了ReLU、Sigmoid和Tanh等激活函数的实现和使用。© 2026 ApX Machine LearningAI伦理与透明度•