要点速览
- 多层感知机(MLP)是一种前馈神经网络,包含一个或多个隐藏层,能够学习数据中的非线性模式。
- MLP 由输入层、带有非线性激活函数的隐藏层,以及输出层组成。
- 训练使用反向传播计算梯度,并通过随机梯度下降(SGD)迭代更新权重。
- 数据准备至关重要:在训练 MLP 之前,请清洗、缩放并划分数据。
- 从小型架构起步,逐步增加复杂度,并使用正则化技术防止过拟合。
神经网络基础
神经网络(或人工神经网络)是机器学习中的基础工具,为计算机视觉、自然语言处理、机器人等众多领域的前沿算法与应用提供动力。
神经网络由相互连接的节点(称为神经元)组成,并按层组织。每个神经元接收输入信号,使用激活函数对其进行计算,并产生输出信号,传递给网络中的其他神经元。激活函数根据输入确定神经元的输出。这些函数为网络引入非线性,使其能够学习数据中的复杂模式。
网络通常按层组织,首先是引入数据的输入层,然后是进行计算的隐藏层,最后是做出预测或决策的输出层。
相邻层的神经元通过带权连接相连,将信号从一层传递到下一层。连接的强度由权重表示,决定一个神经元的输出对另一个神经元输入的影响程度。在训练过程中,网络会根据训练数据集中的样本学习调整其权重。此外,每个神经元通常还有一个偏置,用于调整神经元的输出阈值。
神经网络使用称为前向传播和反向传播的技术进行训练。在前向传播过程中,输入数据逐层通过网络,每一层基于其接收的输入进行计算,并将结果传递给下一层。
反向传播是一种用于训练神经网络的算法,通过迭代地调整网络的权重和偏置,以最小化损失函数。损失函数(也称为代价函数或目标函数)衡量模型预测与训练数据中真实目标值的匹配程度。损失函数量化模型预测输出与实际输出之间的差异,为训练过程中的优化提供指导信号。
训练神经网络的目标是通过调整权重和偏置最小化该损失函数。调整由优化算法引导,例如梯度下降。我们将在本文后续部分更详细地回顾其中一些主题。
神经网络的类型

生物神经元 vs. 人工神经网络(来源:ResearchGate)
图像右侧所示的 ANN 是一种简单的神经网络,称为“感知机”。它仅由一层(输入层)构成,包含多个各自带权重的神经元;没有隐藏层。感知机算法通过学习输入信号的权重来绘制线性决策边界。
然而,为了解决与图像处理、计算机视觉和自然语言处理相关的更复杂的非线性问题,我们通常采用深度神经网络。
查看我们的深度神经网络入门教程,了解更多关于深度神经网络的知识,并学习如何在 Python 中使用 TensorFlow 和 Keras 从零构建。如果您更倾向于使用 R 语言,我们的在 R 中构建神经网络(NN)模型同样适用。
ANN 有多种类型,每种都针对特定任务和架构需求而设计。在深入探讨 MLP 之前,我们先简要介绍几种最常见的类型。
前馈神经网络(FNN)
这是最简单的 ANN 形式,信息从输入单向流向输出,网络结构中没有循环或回路。多层感知机(MLP)是一种前馈神经网络。
循环神经网络(RNN)
在RNN中,节点之间的连接构成有向循环,使信息能够随时间保留。这使其适用于序列数据任务,如时间序列预测、自然语言处理和语音识别。
卷积神经网络(CNN)
CNN专为高效处理类似网格的数据(如图像)而设计。它由多层卷积滤波器组成,可学习输入数据中特征的分层表示。CNN 广泛用于图像分类、目标检测和图像分割等任务。
长短期记忆网络(LSTM)与门控循环单元(GRU)
这些是为解决传统 RNN 中梯度消失问题而设计的特殊循环神经网络类型。LSTM 和 GRU引入门控机制,以更好地捕获序列数据中的长程依赖,因此在语音识别、机器翻译和情感分析等任务中尤为有效。
自编码器
这是一种用于无监督学习的结构,由将输入数据压缩到低维潜在空间的编码器网络和从潜在表示重构原始输入的解码器网络组成。自编码器常用于降维、数据去噪和生成式建模。
生成对抗网络(GAN)
GAN由两个神经网络组成,即生成器和判别器,在对抗设置中同时训练。生成器学习生成与真实数据无法区分的合成样本,而判别器学习区分真伪样本。GAN 被广泛用于生成逼真的图像、视频等各类数据。
什么是多层感知机(MLP)?
多层感知机是一种前馈神经网络,由全连接神经元和非线性激活函数构成。它被广泛用于区分非线性可分的数据。
MLP 的组成
MLP 已广泛应用于图像识别、自然语言处理、语音识别等诸多领域。其架构的灵活性以及在一定条件下逼近任意函数的能力,使其成为深度学习和神经网络研究中的基础构件。下面深入介绍一些关键概念。
输入层
输入层由接收初始输入数据的节点或神经元组成。每个神经元代表输入数据的一个特征或维度。输入层神经元的数量由输入数据的维度决定。
隐藏层
在输入层和输出层之间可以有一层或多层神经元。隐藏层中的每个神经元从上一层(输入层或另一隐藏层)的所有神经元接收输入,并生成输出传递给下一层。隐藏层的层数以及每层的神经元数量是需要在模型设计阶段确定的超参数。
输出层
该层由产生网络最终输出的神经元组成。输出层神经元的数量取决于任务的性质。在二分类中,根据激活函数不同,可能使用一个或两个神经元来表示属于某一类的概率;而在多分类任务中,输出层可以包含多个神经元。
权重
相邻层的神经元彼此全连接。每个连接都有一个对应的权重,决定连接强度。这些权重在训练过程中学习得到。
偏置神经元
除输入层外,每一层(除了输入层)通常包含一个偏置神经元,为下一层的神经元提供恒定输入。偏置神经元与每个连接也有其对应的权重,同样在训练中学习。
偏置神经元相当于平移后续层神经元的激活函数,使网络能够在决策边界中学习一个偏移量。通过调整连接到偏置神经元的权重,MLP 可以学习控制激活阈值,更好地拟合训练数据。
注意:在 MLP 语境下,“偏差”可指两个相关但不同的概念:机器学习中的一般“偏差”,以及上文定义的“偏置神经元”。在一般机器学习中,偏差指用简化模型近似真实世界问题所引入的误差。偏差衡量模型捕捉数据底层模式的能力。偏差高通常意味着模型过于简单,可能欠拟合;偏差低则表明模型较好地捕捉了底层模式。
激活函数
通常,隐藏层和输出层中的每个神经元都会对其加权输入和应用一个激活函数。常见激活函数包括 sigmoid、tanh、ReLU(修正线性单元)和 softmax。这些函数为网络引入非线性,使其能够学习数据中的复杂模式。
前向传播与反向传播
MLP 使用反向传播算法进行训练,该算法计算损失函数相对于模型参数的梯度,并迭代更新参数以最小化损失。
多层感知机如何逐层工作

具有两个隐藏层的 MLP 示例。作者制图
在多层感知机中,神经元以逐步方式处理信息,执行包含加权求和与非线性变换的计算。让我们逐层看看其中的奥秘。
输入层
- MLP 的输入层接收输入数据,这些数据可以是从数据集样本中提取的特征。输入层的每个神经元代表一个特征。
- 输入层的神经元不进行任何计算;它们只是将输入值传递给第一隐藏层的神经元。
隐藏层
- MLP 的隐藏层由相互连接的神经元组成,这些神经元对输入数据进行计算。
- 隐藏层中的每个神经元从上一层的所有神经元接收输入。输入与相应的权重相乘,记为
w。权重决定一个神经元的输入对另一个神经元输出的影响程度。 - 除了权重外,隐藏层中的每个神经元都有一个对应的偏置,记为
b。偏置为神经元提供额外输入,使其能够调整输出阈值。与权重类似,偏置也在训练中学习得到。 - 对于隐藏层或输出层中的每个神经元,需要计算其输入的加权和。具体为将每个输入与其对应权重相乘,将这些乘积求和,并加上偏置:

其中,n为输入连接总数,wi为第 i 个输入的权重,xi为第 i 个输入值。
- 然后将该加权和传入激活函数,记为
f。激活函数为网络引入非线性,使其能够学习和表示数据中的复杂关系。激活函数决定神经元的输出范围及其对不同输入值的响应行为。激活函数的选择取决于任务性质及网络所需属性。
输出层
- MLP 的输出层产生网络的最终预测或输出。输出层神经元的数量取决于所执行的任务(如二分类、多分类、回归)。
- 输出层中的每个神经元从最后一个隐藏层的神经元接收输入,并应用一个激活函数。该激活函数通常不同于隐藏层所用函数,并产生最终输出值或预测。
在训练过程中,网络通过调整与每个神经元输入相关的权重,最小化预测输出与训练数据中真实目标值之间的差异。通过调整权重并学习合适的激活函数,网络能够近似数据中的复杂模式和关系,从而对新的、未见过的样本做出准确预测。
这种调整由优化算法引导,例如随机梯度下降(SGD),它计算损失函数相对于权重的梯度并迭代更新权重。
下面更近一步了解 SGD 的工作方式。
随机梯度下降(SGD)
- 初始化:SGD 从一组初始模型参数(权重与偏置)开始,这些参数可以随机设定或采用某些预定义方法。
- 迭代优化:此步骤旨在通过沿着函数值下降最快的方向迭代移动,寻找损失函数的最小值。对于训练的每次迭代(或每个 epoch):
- 打乱训练数据,确保模型不会总以相同顺序学习相同模式。
- 将训练数据划分为小批次(mini-batch)。
- 对每个小批次:
- 仅使用该小批次中的数据点,计算损失函数相对于模型参数的梯度。该梯度估计是对真实梯度的随机近似。
- 沿着梯度相反方向更新模型参数,步长由学习率缩放:
θₜ₊₁ = θₜ − η ∇J(θₜ)
其中:
-
θₜ表示第t次迭代时的模型参数(如权重和偏置) -
∇J(θₜ)是损失函数J在第t次迭代时相对于参数的梯度 -
η(eta)为学习率,控制优化时的步长
- 下降方向:损失函数的梯度指示最陡上升方向。为最小化损失,梯度下降沿着相反方向移动,即最陡下降方向。
- 学习率:每次迭代的步长由称为学习率的参数决定,以上面所示的
n表示。该参数控制向最小值迈进的步幅。若学习率过小,收敛可能很慢;若过大,算法可能震荡或发散。 - 收敛:重复上述过程,直到达到固定迭代次数或满足收敛准则(例如损失函数变化低于某一阈值)。
随机梯度下降使用更小的数据子集更频繁地更新模型参数,在大数据集上尤其具有计算效率。SGD 引入的随机性还可起到正则化作用,防止模型过拟合训练数据。它也非常适合在线学习场景,当新数据逐步到来时,能够快速用每个新数据点或小批次更新模型。
但 SGD 也存在一些挑战,例如由于梯度估计的随机性带来更大的噪声,以及需要调节学习率等超参数。为应对这些挑战并提升收敛与性能,发展出了多种 SGD 的扩展与改进方法,如小批量随机梯度下降、动量法,以及 AdaGrad、RMSProp、Adam 等自适应学习率方法。
您已经了解了多层感知机的分层工作机制,并学习了随机梯度下降;要将一切串联起来,还有最后一个主题需要深入:反向传播。
反向传播
反向传播是“误差的反向传播”的简称。在反向传播的背景下,SGD 基于每个训练小批次计算得到的梯度迭代更新网络参数。与使用整个训练集计算梯度(对大数据集而言计算代价高)不同,SGD 使用称为小批次的随机数据子集计算梯度。以下是反向传播算法的工作概览:
- 前向传播:在前向传播过程中,将输入数据送入神经网络,网络逐层计算输出。每个神经元计算其输入的加权和,应用激活函数,并将结果传递给下一层神经元。
- 损失计算:前向传播结束后,将网络输出与真实目标值进行比较,计算损失函数,以衡量预测输出与实际输出之间的差异。
- 反向传播(梯度计算):在反向传播过程中,利用微积分的链式法则计算损失函数相对于网络参数(权重和偏置)的梯度。梯度表示损失函数对每个参数的变化率,提供如何调整参数以降低损失的信息。
- 参数更新:一旦计算出梯度,就沿着梯度的相反方向更新网络参数,以最小化损失函数。该更新通常使用如我们前文讨论的随机梯度下降(SGD)等优化算法执行。
- 迭代过程:重复步骤 1–4,直至达到固定的 epoch 数或满足收敛标准。每次迭代中,网络参数根据反向传播计算的梯度进行调整,损失逐步降低,模型性能不断提升。
为 MLP 做数据准备
为训练 MLP 做数据准备包括数据清洗、预处理、缩放、划分、格式化,甚至可能包括数据增强。根据所用激活函数与输入特征量纲,数据可能需要标准化或归一化。通常需要尝试不同的预处理技术并评估其对模型性能的影响,以确定最适合特定数据集与任务的方法。
- 数据清洗与预处理
- 处理缺失值:删除或填补数据集中的缺失值。
- 编码类别变量:将类别变量转换为数值表示,例如独热编码。
- 特征缩放
- 标准化或归一化:将特征缩放到相近量级,以确保优化过程高效收敛。
- 标准化(Z 分数标准化):减去均值并除以标准差,使数据以零为中心并具有单位方差。
- 归一化(最小-最大缩放):将特征缩放到固定范围,通常为 0 到 1,通过减去最小值并除以范围(最大值-最小值)。
- 标准化或归一化:将特征缩放到相近量级,以确保优化过程高效收敛。
想进一步了解特征缩放,请查看 Datacamp 的《Python 中的机器学习特征工程》课程。
- 训练-验证-测试集划分
- 将数据集划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调参和监控模型性能,测试集用于评估最终模型在未见数据上的表现。
- 数据格式化
- 确保数据格式适合训练。这可能涉及重塑数据或转换为所需的数据类型(例如将类别变量转换为数值)。
- 可选的数据增强
- 对于图像分类等任务,可以应用旋转、翻转、缩放等数据增强技术,以增加训练数据的多样性并提升模型泛化能力。
- 归一化与激活函数
- 在 MLP 中选择标准化还是归一化,可能取决于所用激活函数。sigmoid 与 tanh 对输入数据量纲较为敏感,常从标准化中受益;而 ReLU 对量纲不太敏感,可能不需要标准化。
实现提示与最佳实践
实现 MLP 涉及多个步骤,从数据预处理到模型训练与评估。为 MLP 选择层数和神经元数量需要在模型复杂度、训练时间与泛化性能之间权衡。并无通用答案,最优架构取决于任务复杂度、可用数据量与计算资源等因素。不过,以下是实现 MLP 时可参考的一些通用指南:
1. 模型架构
- 从简单架构开始,按需逐步增加复杂度。先用单隐藏层和少量神经元,如果需要再尝试增加层数与神经元。
2. 任务复杂度
- 对于相对简单的任务,如在小数据集上的二分类或回归,较浅的架构(更少的层和神经元)可能已足够。
- 对于更复杂的任务,如高维数据上的多分类或回归,可能需要更深的架构(更多层与神经元)来捕捉数据中的复杂模式。
3. 数据预处理
- 清洗并预处理数据,包括处理缺失值、对类别变量编码以及缩放数值特征。
- 将数据划分为训练、验证和测试集,以评估模型性能。
4. 初始化
- 合理初始化 MLP 的权重与偏置。常见方法包括小尺度随机初始化,或使用 Xavier、He 初始化等技术。
5. 实验
- 最佳方法是对不同架构进行试验,变更层数与神经元数量,并通过实证评估其性能。
- 使用交叉验证与超参数调优等技术,系统性地探索不同架构,找到在当前任务上表现最佳者。
6. 训练
- 使用训练数据训练 MLP,并在验证集上监控其表现。
- 尝试不同的批大小、epoch 数量及其他超参数,以找到最优训练设置。
- 利用损失与准确率等指标可视化训练进程,以诊断问题并跟踪收敛。
7. 优化算法
- 尝试不同学习率,并考虑使用学习率调度或自适应学习率等技术。
8. 避免过拟合
- 谨防通过引入不必要的复杂度而使模型对训练数据过拟合。
- 使用正则化(如 L1、L2 正则)、dropout 和提前停止等技术,防止过拟合并提升泛化性能。
- 根据模型在验证集上的表现调节正则化强度。
9. 模型评估
- 在训练过程中监控模型在独立验证集上的表现,以评估架构变更的影响。
- 在测试集上评估训练完成的模型,以衡量其泛化能力。
- 使用准确率、损失和验证误差等指标评估模型表现,并据此指导架构决策。
10. 迭代与实验
- 通过不同的架构、超参数与优化策略进行实验,以提升模型性能。
- 基于训练与评估结果获得的见解,不断迭代实现方案。
MLP 的优势与局限
在为项目选择 MLP 之前,了解其擅长之处及其他架构可能更适合的场景会有所帮助。
优势
- 通用逼近能力:在具备足够的神经元与层数时,MLP 可逼近任意连续函数,对各类任务具有高度灵活性。
- 非线性建模:与单层感知机不同,MLP 通过隐藏层与非线性激活函数处理非线性可分数据。
- 通用性强:MLP 适用于分类、回归与模式识别等任务,覆盖金融、医疗、自然语言处理等领域。
- 实现简洁:诸如Keras、PyTorch 和 scikit-learn 等库提供开箱即用的 MLP 实现,设置成本低。
局限
- 不适合空间或序列数据:对于图像,CNN可利用空间结构而优于 MLP;对于序列,RNN和 LSTM 更能捕捉时间依赖。
- 易过拟合:参数众多的 MLP 容易记忆训练数据。可通过正则化、dropout 与提前停止等技术缓解。
- 计算开销大:全连接层在输入维度增大时扩展性较差,相较 CNN 等架构需要更多参数与训练时间。
- 对特征缩放敏感:MLP 需要恰当缩放的输入特征以实现高效收敛。
- “黑箱”特性:与树模型或线性方法相比,解释 MLP 学到的内容更具挑战。
结语
多层感知机是人工神经网络中基础而多才多艺的一类,对机器学习与人工智能的发展做出了重要贡献。借助互联的神经元层与非线性激活函数,MLP 能够学习数据中的复杂模式与关系,适用于广泛的任务。MLP 的发展历程体现了从早期感知机模型到当今支撑众多前沿系统的现代深度学习架构的探索、发现与创新之旅。
在本文中,您学习了人工神经网络的基础,重点了解了多层感知机,并掌握了随机梯度下降与反向传播。如果您希望亲自动手,使用深度学习技术解决真实问题,如预测房价、构建用于建模图像与文本的神经网络——我们强烈推荐您学习我们的Keras 工具箱学习路径。
在使用 Keras 的过程中,您将学习神经网络、深度学习模型工作流,以及如何优化模型。Datacamp 还提供了一份Keras 速查表,非常实用!

我曾在多个行业工作,身兼数职:软件开发工程师、机器学习研究员、数据科学家、产品经理。但归根结底,我是一名热爱学习并乐于分享知识的程序员!
常见问题解答
什么是单层感知机?
单层感知机是最简单的神经网络形式,仅由输入层和输出层组成,没有任何隐藏层。它主要用于线性分类任务,通过调整输入信号的权重来学习一条线性决策边界,以分隔数据点。
感知机与多层感知机有什么区别?
感知机是具有单层神经元的简单神经网络,通常用于线性分类任务。它由输入层和输出层组成,没有隐藏层。多层感知机(MLP)包含多层结构,包括一个或多个隐藏层,因此能够学习和表示数据中更复杂的非线性关系。
什么是感知机学习算法?
感知机学习算法是一种用于训练单层感知机的监督学习算法。它根据预测输出与实际输出之间的误差调整输入信号的权重,迭代地优化决策边界,直到正确分类训练数据或达到预设的迭代次数。
为何常用 ReLU 激活函数?
ReLU(修正线性单元)之所以流行,是因为其形式简单,并有助于缓解 sigmoid 或 tanh 常见的梯度消失问题,从而加快模型训练。
我该如何选择隐藏层和神经元的数量?
从小规模开始,并根据任务难度和表现逐步增加复杂度。使用验证数据与实验来找到合适的平衡。
MLP 能用于图像或文本任务吗?
可以。不过对于像图像或序列这样的高维数据,CNN 和 RNN 的表现通常更好。对于更简单的任务或较小的输入,MLP 仍然可行。
反向传播与 SGD 有何区别?
反向传播用于计算所有模型参数的梯度。SGD 则是基于这些梯度更新参数的优化技术。
神经网络是现代机器学习和人工智能的核心。在众多类型中,多层感知机(MLP)是深度学习系统的基础构件之一。本文教程将介绍人工神经网络的概念,讲解 MLP 的工作机制,并带您了解诸如反向传播和随机梯度下降等关键组件。
人工神经网络(ANN)是一种受人脑中互联神经元网络结构与功能启发的机器学习模型。它由称为人工神经元的互联节点构成,并按层组织。信息在网络中流动,每个神经元对输入信号进行处理并产生输出信号,进而影响网络中的其他神经元。
多层感知机(MLP)是一种由多个神经元层组成的人工神经网络。MLP 中的神经元通常使用非线性激活函数,使网络能够学习数据中的复杂模式。MLP 在机器学习中意义重大,因为它可以学习数据中的非线性关系,因此在分类、回归和模式识别等任务中表现强大。在本教程中,我们将更深入地了解 MLP 的基础并理解其内部工作原理。