在前面的文章中,我们介绍了softmax回归的基本原理和实现方法,这是一种线性模型。然而,线性模型在应对复杂非线性问题时,往往难以取得理想效果。为了克服这种限制,我们引入了多层感知机 (MLP),一种由多层神经单元组成的深度神经网络结构,它可以更好地处理复杂的函数关系。
1. 多层感知机的基本结构
多层感知机(MLP)是一种通过引入隐藏层来增强模型的表达能力的神经网络模型。与线性模型不同,MLP 能够处理更加复杂的、非线性的数据关系,因此被广泛应用于各种分类、回归等任务。
1.1 线性模型可能会出错
线性模型在处理线性关系时表现良好,但面对复杂的非线性数据时常常显得无力。例如,假设我们要对一组数据进行分类,但数据的类别分布是弯曲的、非线性的,线性模型将无法有效地将这类数据分开,如下图所示:
示例:假设我们有两个类别的数据,分布为同心圆。线性模型无法找到一条线性决策边界来分离这两个类别的数据。
为了处理非线性关系,我们需要一种能够捕获数据复杂特征的模型,这就是多层感知机的优势所在。
1.2 在网络中加入隐藏层
多层感知机通过隐藏层提升模型的表达能力。隐藏层位于输入层和输出层之间,每个隐藏层包含若干神经元(或节点),这些神经元通过不同的权重和偏置连接输入数据。隐藏层的输出会作为下一层的输入,通过引入多个隐藏层,模型可以学到更加丰富的数据特征。
1.3 从线性到非线性
MLP 在网络层之间应用激活函数,例如 ReLU(Rectified Linear Unit),使得网络可以引入非线性变换。这种非线性操作使得网络能够学习到复杂的、非线性的映射关系,而不仅仅是简单的线性变换。这一转变正是 MLP 相较于简单的线性模型的优势所在。
具体来说,给定一个输入向量 和一个隐藏层权重矩阵 ,以及偏置 ,隐藏层的输出计算公式为:
其中 表示激活函数。然后,将隐藏层的输出传递到输出层进行进一步计算。
1.4 通用近似定理
通用近似定理指出,在隐藏层有足够神经元的情况下,单隐藏层的多层感知机可以近似任意连续函数。该理论表明,MLP 的潜在表达能力极强,足以应对复杂的非线性关系。虽然在实际应用中我们通常会使用多层隐藏层来构建更深层次的网络,但通用近似定理为理解 MLP 提供了理论依据。
2. 激活函数
激活函数是多层感知机中的关键组件,它们负责将线性变换后的输出转变为非线性形式,使得网络能够捕捉到复杂的特征和模式。常用的激活函数包括 ReLU、Sigmoid 和 Tanh。
2.1 ReLU函数
ReLU(Rectified Linear Unit) 是一种简单且常用的激活函数,定义如下:
ReLU 函数对负值输出零,对正值保持原值,因此计算上非常高效,同时也能解决梯度消失问题。ReLU 的优点在于它的梯度始终为 1,能够有效地缓解反向传播时梯度消失的问题。
import torch
# 示例输入
x = torch.tensor([-1.0, 0.0, 1.0, 2.0])
# 应用 ReLU 激活函数
relu_output = torch.relu(x)
print(relu_output) # 输出:tensor([0., 0., 1., 2.])
2.2 sigmoid函数
Sigmoid 函数常用于二分类问题中,其将输入映射到 区间,适合处理概率问题。定义为:
Sigmoid 在输入很大或很小时会趋近于 0 或 1,因此可能导致梯度消失的问题。它适合输出范围需要在 0 到 1 之间的场景,如二分类任务中的概率输出。
# 示例输入
x = torch.tensor([0.0, 1.0, -1.0])
# 应用 Sigmoid 激活函数
sigmoid_output = torch.sigmoid(x)
print(sigmoid_output) # 输出:tensor([0.5000, 0.7311, 0.2689])
2.3 tanh函数
Tanh(双曲正切) 函数的输出范围在 之间。其定义为:
Tanh 激活函数可以将输入值平滑地映射到 区间,与 Sigmoid 相比,它的值更接近零中心,因此在某些情况下,Tanh 可以更有效地处理梯度流动,适合在深层网络中使用。
# 示例输入
x = torch.tensor([-1.0, 0.0, 1.0])
# 应用 Tanh 激活函数
tanh_output = torch.tanh(x)
print(tanh_output) # 输出:tensor([-0.7616, 0.0000, 0.7616])
总结
多层感知机通过引入隐藏层和非线性激活函数,使得模型能够捕捉到复杂的非线性关系,超越了简单的线性模型。我们讨论了 MLP 的基本结构,并介绍了 ReLU、Sigmoid 和 Tanh 等常用激活函数。通过这些激活函数的应用,MLP 能够在图像分类、自然语言处理等任务中取得优异表现。
多层感知机的结构和激活函数的选择是构建强大深度学习模型的基础,理解它们将为更复杂的深层神经网络(如卷积神经网络和循环神经网络)的学习奠定扎实基础。