深度学习基础-多层感知机
2026/6/6 1:01:41 网站建设 项目流程

多层感知机(Multilayer Perceptron, 简称 MLP)是最基础、最经典的深度学习/前馈神经网络(Feedforward Neural Network)模型。

如果把现在大火的 Transformer、CNN、RNN 比作各种高阶的“跑车”,那么MLP 就是汽车的“发动机”和底盘底座。理解了 MLP 的向前传播、激活函数和反向传播,你就真正踏进了深度学习的大门。


一、 MLP 的网络结构:三层架构

MLP 是一种前馈图结构,网络中所有的信号都只朝一个方向流动(从输入到输出,没有循环反馈)。一个标准的 MLP 由以下三层组成:

  1. 输入层(Input Layer)
  • 接收原始数据特征(例如:一张28×2828 \times 2828×28像素的图片展平后的 784 个全连接节点,或者一组金融特征)。输入层不进行任何数学计算。
  1. 隐藏层(Hidden Layer)
  • MLP 的“灵魂”所在。可以有一层或多层(这也是“深度”学习中“深”的来源)。
  • 负责从原始输入中提取高阶的非线性特征
  1. 输出层(Output Layer)
  • 产生最终的预测结果。
  • 如果是分类任务,输出通常是各类别的概率(配合 Softmax);如果是回归任务,输出是一个连续的数值。

核心特点:全连接(Fully Connected / Dense)
在 MLP 中,除了输入层外,每一层的任意一个神经元,都与前一层的所有神经元相连。因此,隐藏层和输出层在代码中通常被称为全连接层(Linear / Dense Layer)


二、 神经元是如何工作的?(数学原理)

全连接网络内部的数学计算非常纯粹,每个神经元都在做两件事:线性组合非线性激活

1. 线性变换(加权求和)

对于某一个神经元,它接收到上一层传来的输入向量x\mathbf{x}x,会与该神经元专属的权重(Weights,w\mathbf{w}w相乘,并加上一个偏置(Bias,bbb

z=∑iwixi+b=wTx+bz = \sum_{i} w_i x_i + b = \mathbf{w}^T \mathbf{x} + bz=iwixi+b=wTx+b

2. 非线性激活(Activation Function)

如果仅仅把线性变换层层堆叠,无论叠加多少层,由于矩阵乘法的复合性,整个网络本质上依然只能表达线性关系(相当于单层网络),无法解决分类中的非线性问题(如经典的异或 XOR 问题)。

为了赋予网络“扭曲空间”、拟合复杂边界的能力,必须在zzz后面接一个非线性激活函数f(z)f(z)f(z)

a=f(z)a = f(z)a=f(z)

常用的激活函数包括

  • ReLU (Rectified Linear Unit)f(x)=max⁡(0,x)f(x) = \max(0, x)f(x)=max(0,x)。现代深度学习最常用的默认激活函数,计算极快,能有效缓解梯度消失。
  • Sigmoid / Tanh:传统的 S 型函数,将输出压缩到(0,1)(0,1)(0,1)(−1,1)(-1,1)(1,1),由于在大数值区梯度接近 0(梯度饱和),现在较少在隐藏层使用。

三、 MLP 的全矩阵前向传播(Forward)

在实际工程计算(如使用 GPU 加速)时,我们不会一个一个神经元去算,而是把它们打包成矩阵运算

假设输入矩阵为XXX(大小为[batch_size, input_dim]),隐藏层的权重矩阵为W1W_1W1(大小为[input_dim, hidden_dim]),偏置为b1b_1b1

  1. 隐藏层输出

H=ReLU(XW1+b1)H = \text{ReLU}(X W_1 + b_1)H=ReLU(XW1+b1)

  1. 输出层输出(假设输出层权重为W2W_2W2,偏置为b2b_2b2):

Y^=HW2+b2\hat{Y} = H W_2 + b_2Y^=HW2+b2


四、 MLP 的训练灵魂:反向传播与梯度下降

MLP 是如何“学会”识别数据特征的?它依赖一个闭环的反馈机制:

  1. 前向传播 (Forward):数据从输入层进入,经过矩阵计算和激活函数,得到预测值Y^\hat{Y}Y^
  2. 计算损失 (Loss):通过损失函数(如均方误差 MSE 或交叉熵 Cross-Entropy)评估预测值Y^\hat{Y}Y^与真实标签YYY之间的差距。
  3. 反向传播 (Backward):利用链式法则(Chain Rule),将误差从输出层反向传回网络,计算出损失函数对每一个权重WWW和偏置bbb梯度(Gradient)
  4. 参数更新 (Optimization):像SGD、RMSprop 或者是 Adam这样的优化器,顺着梯度的反方向微微调整WWWbbb,使得下一次前向传播时的误差更小。

五、 PyTorch 实现一个经典的 MLP 分类器

下面用 PyTorch 展示如何构建一个简单的多层感知机,用于处理三分类任务:

importtorchimporttorch.nnasnnclassMultilayerPerceptron(nn.Module):def__init__(self,input_dim,hidden_dim,output_dim):super(MultilayerPerceptron,self).__init__()# 1. 输入层到隐藏层self.fc1=nn.Linear(input_dim,hidden_dim)# 激活函数self.relu=nn.ReLU()# 2. 隐藏层到输出层self.fc2=nn.Linear(hidden_dim,output_dim)defforward(self,x):# x 形状: [batch_size, input_dim]out=self.fc1(x)out=self.relu(out)# 引入非线性out=self.fc2(out)# 形状: [batch_size, output_dim]returnout# 实例化模型:假设输入特征有 10 个,隐藏层神经元 32 个,分为 3 个类别model=MultilayerPerceptron(input_dim=10,hidden_dim=32,output_dim=3)print(model)

六、 MLP 的局限性与后续演进

虽然 MLP 理论上只要隐藏层神经元足够多,就能拟合任何复杂的连续函数(通用近似定理),但在面对特定高维数据时,它暴露出巨大的局限:

  • 处理图像时(参数量爆炸):若输入一张1000×10001000 \times 10001000×1000的彩色图片,输入层就有3,000,0003,000,0003,000,000个节点。如果隐藏层有 1000 个神经元,仅第一层权重矩阵就需要30亿个参数!不仅极易过拟合,显存也无法承受。这催生了具有局部感受野和权重共享的CNN(卷积神经网络)
  • 处理文本/序列时(无时序记忆):MLP 假设输入之间是相互独立的,无法很好地捕捉前后文的时序关联。这催生了RNN / LSTM以及后来的Transformer

尽管如此,在当今最顶尖的 Transformer 架构(如 BERT、GPT)内部,每个 Attention 层后面依然紧跟着一个叫FFN(Feed-Forward Network)的模块,它的本质其实就是一个双层的 MLP。

你目前是在学习深度学习的基础理论,还是准备在某个具体的回归/分类任务中尝试构建、训练一个 MLP 呢?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询