菜单

多层感知机

相关源文件

多层感知机(MLP)是深度学习模型的一个基本类别,通过引入一个或多个隐藏层,超越了简单的线性模型。本页面解释了MLP的架构、实现和训练,包括用于改进其性能的技术,如正则化和适当的初始化。有关线性网络的信息,请参阅线性网络

MLP架构和核心概念

多层感知机的关键创新是在输入层和输出层之间增加了隐藏层,这使得模型能够学习数据中复杂、非线性的模式。与只能表示直线关系的线性模型不同,MLP可以近似任意连续函数。

从线性模型到非线性模型

线性模型受到其单调性假设的限制——特征值的任何增加都必须总是增加或总是减少输出。这对于图像分类等任务来说是成问题的,因为像素和类别之间的关系无法用线性方式表达。

来源:[chapter_multilayer-perceptrons/mlp.md:24-56]

隐藏层和网络结构

MLP的架构包括:

  1. 输入层:接收原始输入特征
  2. 隐藏层:通过加权连接和激活函数转换输入
  3. 输出层:产生最终预测

这是一个典型的单隐藏层MLP

来源:[chapter_multilayer-perceptrons/mlp.md:66-82], [chapter_multilayer-perceptrons/mlp.md:95-116]

数学公式

对于一个批量样本 X ∈ ℝⁿˣᵈ,其中 n 是样本数,d 是输入特征数,以及一个具有 h 个单元的隐藏层:

  • 隐藏层输出:H = σ(XW⁽¹⁾ + b⁽¹⁾)
  • 最终输出:O = HW⁽²⁾ + b⁽²⁾

其中

  • W⁽¹⁾ ∈ ℝᵈˣʰ 和 b⁽¹⁾ ∈ ℝ¹ˣʰ 是隐藏层的权重和偏置。
  • W⁽²⁾ ∈ ℝʰˣᵍ 和 b⁽²⁾ ∈ ℝ¹ˣᵍ 是输出层的权重和偏置。
  • σ 是一个非线性激活函数。

来源:[chapter_multilayer-perceptrons/mlp.md:83-147]

激活函数

激活函数在网络中引入了非线性,使其能够建模复杂的关系。没有它们,多个层仍然只能产生线性变换。

ReLU(Rectified Linear Unit)

由于其简单性和有效性,是最流行的激活函数。

ReLU(x) = max(0, x)

ReLU激活会简单地将负值替换为零,同时保持正值不变。

来源:[chapter_multilayer-perceptrons/mlp.md:171-287]

Sigmoid函数

将输入压缩到(0,1)的范围内。

sigmoid(x) = 1/(1 + exp(-x))

虽然历史上很受欢迎,但sigmoid函数对于大的正值或负值输入可能导致梯度消失,使训练变得困难。

Tanh函数

将输入映射到(-1,1)的范围内。

tanh(x) = (1 - exp(-2x))/(1 + exp(-2x))

与sigmoid类似,但以零为中心,这有助于优化。

来源:[chapter_multilayer-perceptrons/mlp.md:294-453]

实现方法

实现MLP主要有两种方法:从零开始实现和使用高级API。

从零开始实现

从零开始实现方法涉及手动定义:

  1. 网络参数(权重和偏置)
  2. 激活函数
  3. 前向传播
  4. 损失计算和优化

关键实现组件包括:

来源:[chapter_multilayer-perceptrons/mlp-scratch.md:45-186]

简洁实现

使用高级API,可以更简洁地实现相同的MLP。

这种方法利用了预先构建的层、激活函数和优化器组件,让您可以专注于模型架构而不是实现细节。

来源:[chapter_multilayer-perceptrons/mlp-concise.md:35-86]

训练挑战与解决方案

训练MLP会带来一些必须解决的挑战,才能有效学习。

数值稳定性和初始化

适当的初始化对于防止梯度消失和爆炸等问题至关重要。

梯度消失与爆炸

来源:[chapter_multilayer-perceptrons/numerical-stability-and-init.md:14-168]

Xavier初始化

Xavier初始化通过根据层维度设置初始权重方差来帮助保持稳定的梯度流。

Var[W] = 2/(n_in + n_out)

其中 n_in 和 n_out 是该层的输入和输出单元的数量。

来源:[chapter_multilayer-perceptrons/numerical-stability-and-init.md:192-254]

正则化技术

具有足够容量的MLP很容易过拟合训练数据。正则化技术有助于防止这种情况。

权重衰减

权重衰减(L2正则化)根据权重的平方范数向损失函数添加惩罚项。

L_regularized = L_original + (λ/2)||w||²

这鼓励使用较小的权重和更简单的模型。

来源:[chapter_multilayer-perceptrons/weight-decay.md:25-104]

Dropout

Dropout在训练期间会随机禁用神经元,迫使网络更加健壮。

在推理过程中,所有神经元都被使用(通常会适当缩放它们的输出)。

来源:[chapter_multilayer-perceptrons/dropout.md:96-105]

模型选择与评估

过拟合与欠拟合

  • 欠拟合:模型过于简单,无法捕捉潜在模式。
  • 过拟合:模型记住了训练数据,但无法泛化。
  • 正则化有助于找到正确的平衡点。

来源:[chapter_multilayer-perceptrons/underfit-overfit.md:17-131], [chapter_multilayer-perceptrons/underfit-overfit.md:197-214]

交叉验证

K折交叉验证有助于模型选择和超参数调整。

  1. 将数据分成 K 个子集(折)。
  2. 训练模型 K 次,每次使用 K-1 折进行训练,1 折进行验证。
  3. 对 K 次运行的性能指标取平均值。

当数据有限时,这尤其有价值。

来源:[chapter_multilayer-perceptrons/underfit-overfit.md:188-195]

代码组织与实现细节

此代码库中的 MLP 系统组织如下:

这种组织方式允许采用循序渐进的学习方法,从基本概念到实际应用。

万能近似定理

MLP的一个重要理论基础是万能近似定理,该定理指出,具有单个隐藏层的前馈网络可以在任意精度下近似ℝⁿ上的紧致子集上的任何连续函数,前提是隐藏单元足够多。

这为MLP在实践中表现良好的原因提供了理论依据,尽管它不能保证我们能有效地找到正确的参数,或者所需的隐藏单元数量是实际可行的。

来源:[chapter_multilayer-perceptrons/mlp.md:154-169]

总结

多层感知机通过添加带有非线性激活函数的隐藏层来扩展线性模型,使其能够学习数据中的复杂模式。关键概念包括:

  1. 架构:输入层、隐藏层和输出层。
  2. 激活函数:ReLU、sigmoid、tanh,其中ReLU在现代实践中最常见。
  3. 训练挑战::
    • 梯度消失/爆炸。
    • 数值稳定性。
    • 过拟合
  4. 解决方案:
    • 适当的初始化(例如,Xavier)。
    • 正则化(权重衰减、Dropout)。
    • 用于模型选择的交叉验证。

MLP构成了更复杂的神经网络架构的基础,是深度学习系统中必不可少的构建块。