12 神经网络基础之激活函数的使用

在前面的教程中,我们学习了如何定义一个神经网络模型。理解神经网络的运作不仅仅依赖于模型的结构,还离不开激活函数的使用。激活函数为神经元的输出添加非线性因素,是使得神经网络能够学习复杂的特征和模式的关键部分。在本篇中,我们将详细探讨常见的激活函数及其在PyTorch中的使用方法。

什么是激活函数?

激活函数定义了神经元的输出。对于任意输入$x$,神经元的输出$y$可以表示为:

$$
y = f(wx + b)
$$

这里,$w$是权重,$b$是偏置,$f$是激活函数。激活函数的选择直接影响到模型的性能。常见的激活函数包括:

  1. Sigmoid
  2. Tanh
  3. ReLU(Rectified Linear Unit)
  4. Leaky ReLU
  5. Softmax

接下来,我们将逐一介绍这些激活函数,并在PyTorch中演示它们的使用。

1. Sigmoid 函数

Sigmoid函数的公式如下:

$$
f(x) = \frac{1}{1 + e^{-x}}
$$

Sigmoid函数的输出范围是$(0, 1)$,非常适合用于二分类问题的输出层。

PyTorch示例:

1
2
3
4
5
6
7
8
9
10
11
import torch
import torch.nn as nn

# 定义Sigmoid激活函数
sigmoid = nn.Sigmoid()

# 测试输入
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output_tensor = sigmoid(input_tensor)

print(output_tensor) # 输出各个值的Sigmoid结果

2. Tanh 函数

tanh函数可表示为:

$$
f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}
$$

Tanh函数的输出范围是$(-1, 1)$。与Sigmoid不同,Tanh在零附近有更强的非线性,通常能带来更好的收敛效果。

PyTorch示例:

1
2
3
4
5
6
7
8
# 定义Tanh激活函数
tanh = nn.Tanh()

# 测试输入
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output_tensor = tanh(input_tensor)

print(output_tensor) # 输出各个值的Tanh结果

3. ReLU 函数

ReLU(Rectified Linear Unit)是最常用的激活函数,公式为:

$$
f(x) = \max(0, x)
$$

它在正数区间内是线性的,并且能有效缓解梯度消失问题。ReLU的输出为$[0, +\infty)$。

PyTorch示例:

1
2
3
4
5
6
7
8
# 定义ReLU激活函数
relu = nn.ReLU()

# 测试输入
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output_tensor = relu(input_tensor)

print(output_tensor) # 输出ReLU结果

4. Leaky ReLU 函数

Leaky ReLUReLU的一种变种,解决了ReLU的“神经元死亡”问题。它的定义为:

$$
f(x) = \begin{cases}
x & \text{如果 } x > 0 \
\alpha x & \text{如果 } x \leq 0
\end{cases}
$$

其中$\alpha$是一个小的常数。

PyTorch示例:

1
2
3
4
5
6
7
8
# 定义Leaky ReLU激活函数
leaky_relu = nn.LeakyReLU(negative_slope=0.01)

# 测试输入
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output_tensor = leaky_relu(input_tensor)

print(output_tensor) # 输出Leaky ReLU结果

5. Softmax 函数

Softmax函数常用于多分类问题,它将模型的输出转换为概率分布,公式如下:

$$
f(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}
$$

Softmax的输出范围是$(0, 1)$,并且所有输出的和等于1。

PyTorch示例:

1
2
3
4
5
6
7
8
# 定义Softmax激活函数
softmax = nn.Softmax(dim=0)

# 测试输入
input_tensor = torch.tensor([1.0, 2.0, 3.0])
output_tensor = softmax(input_tensor)

print(output_tensor) # 输出Softmax结果

小结

在本节中,我们重点探讨了各种激活函数的定义及其在PyTorch中的实现。激活函数是神经网络中至关重要的一环,通过引入非线性,使得模型能够拟合复杂的数据分布。理解不同激活函数的特性可以帮助我们选择合适的激活函数以实现更好的模型性能。

在下一篇教程中,我们将学习如何定义损失函数,进一步提升我们对神经网络训练过程的理解。

12 神经网络基础之激活函数的使用

https://zglg.work/pytorch-zero/12/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论