感知机与多层感知机 (MLP)
感知机模型的基本结构是什么?它的数学表达式是怎样的?¶
感知机是模拟单个神经元工作方式的二分类线性模型,由Frank Rosenblatt在1957年提出。它的基本结构包含三个关键部分:

数学表达式为:


两类样本。训练时,感知机采用迭代更新策略:对于每个被误分类的样本,按照规则 w←w+η⋅(ytrue−ypred)⋅x 调整权重,其中 η 是学习率。如果数据是线性可分的,感知机可以在有限步内收敛到正确分类所有样本的解。
然而,感知机的局限性非常明显:它只能处理线性可分的问题。当数据分布无法用一条直线(或超平面)完全分开时,感知机便束手无策,最经典的例子就是异或问题。

为什么单层感知机无法解决异或(XOR)问题?请从线性可分性角度解释。¶

异或逻辑的真值表为:当两个输入相同时输出0,不同时输出1。在二维平面上,四个点分别是 (0,0) 输出0、(0,1) 输出1、(1,0) 输出1、(1,1) 输出0。

对于异或,情况并非如此。正类点 (0,1) 和 (1,0) 与负类点 (0,0) 和 (1,1) 在平面上交错分布,没有任何一条直线可以将它们清晰地分为两类。无论权重如何调整,感知机的决策边界永远是一条直线,它无法在异或这种非线性可分的数据上收敛。这个发现是人工智能早期的一次重大挫折,直接导致了神经网络研究的第一次寒冬。
多层感知机(MLP)是如何解决异或问题的?需要至少几个隐藏层?¶

解决异或的关键在于引入隐藏层,将原始输入空间映射到新的特征空间,使数据在新空间中变得线性可分。
多层感知机仅需一个隐藏层,其中包含两个神经元,就能表示异或函数。具体来说,两个隐藏神经元分别学习输入的不同线性组合,经过非线性激活函数后,产生新的特征表示。输出层再将这两个新特征进行线性组合,即可构造出异或的决策边界。
例如,使用ReLU激活函数:

通过这两个隐藏神经元,模型成功将原始空间映射到一个新的二维空间,使得异或的四个点在新空间中变得线性可分。这体现了深度学习的核心思想——通过多层非线性变换,逐步提取和重组特征,最终解决复杂的非线性问题。
请写出 MLP 前向传播的矩阵形式,并说明每个变量的维度。¶

各变量的维度关系如下:

这种矩阵表示法不仅简洁,而且非常适合利用现代GPU的大规模并行计算能力,是深度学习框架高效实现的基础。
什么是万能近似定理?它说明了 MLP 的什么能力?有什么局限性?¶

万能近似定理由Cybenko和Hornik等人于1989年独立证明,它是神经网络理论中最具影响力的定理之一。定理的核心结论:包含单个隐藏层、隐藏层神经元数量足够多、且使用挤压函数(如sigmoid)作为激活函数的前馈神经网络,能够以任意精度逼近任何定义在紧致子集上的连续函数。
这一定理的意义在于,它从理论上保证了多层感知机具备通用函数逼近的能力。无论目标映射多么复杂——无论是图像识别中的像素到类别的映射、语音识别中的波形到文本的映射,还是复杂物理系统的模拟——只要网络足够宽,就一定存在一组参数使网络输出无限接近目标函数。
然而,万能近似定理也存在显著的局限性。第一,定理只证明存在这样的网络,但并未给出找到这组参数的方法,也没有说明需要多少神经元。在某些情况下,神经元数量可能随问题维度呈指数增长,这在实践中并不可行。第二,定理仅适用于连续函数,对于不连续或高度振荡的函数,浅层网络可能需要极多神经元。第三,即使网络在理论上能完美逼近训练数据,也不能保证它在新数据上具有良好的泛化性能。正是这些局限,促使研究者探索更深的网络架构、更好的优化算法和正则化技术。
隐藏层的数量与宽度如何影响 MLP 的容量?增加深度和宽度的区别是什么?¶
增加隐藏层数量与增加每层神经元数量,都能提升模型的表达能力,但两者的方式和效果有本质区别。
增加宽度(同一层更多神经元)直接扩充了该层表示空间的维度,使网络能够并行学习更多的特征。浅而宽的网络在理论上已经具备万能逼近能力,但往往效率低下:为了表示复杂函数,可能需要极多神经元,导致参数量爆炸,且更容易过拟合。
增加深度(更多隐藏层)则赋予网络层次化特征学习的能力。深层网络通过逐层抽象,能够从原始数据中自动提取从简单到复杂的多层次特征——在图像中,浅层学习边缘和纹理,中层学习形状和部件,深层学习整体物体和场景。这种层次化表示使得深层网络在参数效率上远高于浅层网络,通常用更少的总参数就能达到更好的性能。此外,深度还增强了网络的组合泛化能力,使其能够处理训练中未见过的特征组合。
然而,深度并非没有代价。过深的网络容易出现梯度消失或梯度爆炸问题,需要精心设计的架构和训练技巧。现代实践中,通常会同时增加宽度和深度,并配合残差连接、归一化等技术来保证训练的稳定性和最终性能。
反向传播算法的核心思想是什么?链式法则在其中扮演什么角色?¶
反向传播是训练神经网络最基础也最核心的算法,其本质是一种利用链式法则高效计算损失函数对每层参数的梯度的方法。整个训练过程分为两个阶段:
前向传播阶段:输入数据从输入层开始,逐层计算加权和、经过激活函数,最终得到预测输出,并计算预测值与真实值之间的损失。
反向传播阶段:从输出层开始,沿着网络反向逐层计算损失关于各层参数(权重和偏置)的梯度。这层与层之间的梯度传递,完全依赖于微积分中的链式法则。

这种递归分解的关键在于:每一层只需要知道来自后一层的梯度,再乘上本层输出对本层参数的局部梯度,就能计算出损失对本层参数的梯度,同时将梯度继续向前一层传递。链式法则使得这种逐层传递变得自然且高效,避免了重复计算,让深层网络的训练成为可能。
推导一个包含单隐藏层的 MLP 中,损失对输入层权重的梯度(使用 MSE 损失)。¶

前向计算过程:

反向传播推导:

在反向传播中,“梯度消失”和“梯度爆炸”是如何发生的?与激活函数和权重初始化有什么关系?¶
在深层网络中,梯度从输出层向输入层传播时,每经过一层都要乘以该层激活函数的导数和权重矩阵的谱范数。如果这些因子反复连乘的结果持续小于1,梯度会呈指数级衰减,最终趋近于零,这便是梯度消失。反之,如果反复乘以大于1的数,梯度会指数级增长,导致参数更新量过大,这就是梯度爆炸。
激活函数的选择对这一问题影响深远。早期的sigmoid和tanh函数在输入绝对值较大时,导数趋近于0(饱和),极容易导致梯度消失。ReLU激活函数在正半区导数为1,极大缓解了梯度消失问题,成为深层网络的首选。但ReLU在负半区导数为0,可能造成神经元永久失活,由此又衍生出LeakyReLU等变体。
权重初始化同样至关重要。如果初始化权重过大,前向传播的激活值可能进入饱和区,梯度消失;或者在反向传播中梯度爆炸。如果初始化权重过小,信号在层间迅速衰减,也会导致梯度消失。因此,Xavier初始化和He初始化等方法被提出,它们根据输入和输出维度精心设置权重的方差,使得各层激活值和梯度的方差大致保持恒定,从而有效缓解消失和爆炸问题。
如果 MLP 的所有激活函数都是线性的,会有什么后果?¶
如果网络中所有激活函数都是线性函数,即每层的输出只是输入的线性变换,那么无论堆叠多少层,整个网络都等价于一个单层线性模型。

这种退化的后果是严重的:网络完全丧失了表达非线性函数的能力,无论层数多深、隐藏单元多少,都无法拟合任何非线性关系。深度结构完全白费,增加层数不会带来任何表示能力的提升,模型本质上与没有隐藏层的线性回归无异。这清楚地解释了为什么非线性激活函数是神经网络不可或缺的核心组件——它是网络能够学习复杂模式、成为“通用函数逼近器”的根本原因。
为什么在 MLP 中需要引入偏置项?去掉偏置项会对模型产生什么影响?¶

如果没有偏置项,神经元的输出完全由输入特征的线性组合决定。当所有输入特征为零时,无论权重如何,净输入都为零。经过激活函数(如 sigmoid(0)=0.5,tanh(0)=0,ReLU(0)=0)后,模型的输出将被固定在一个特定值,无法根据数据调整。这意味着模型的决策超平面必须经过原点。对于大量实际问题,数据的最佳分割面并不经过原点,去掉偏置会严重限制模型的表达能力,导致欠拟合。
例如,考虑一个简单的二分类问题,正负样本的中心在平面上分别位于 (2,2) 和 (-2,-2)。一条不经过原点的直线(如 x1+x2=0 实际上经过原点,而 x1+x2−1=0 不经过)能更好地分隔它们。没有偏置的模型无法学习到 x1+x2−1=0 这样的边界,只能勉强找到一条经过原点的次优边界,准确率大幅降低。
从几何角度看,偏置项使得每个神经元能够独立地控制其激活阈值。从生物神经元角度类比,偏置相当于神经元的静息电位,影响神经元被激活的难易程度。因此,偏置是 MLP 中不可或缺的组成部分。
什么是“死亡神经元”现象?它通常由什么激活函数引起?如何缓解?¶
“死亡神经元”是指在训练过程中,某个神经元的输出恒为零(或一个常数),且其梯度也为零,从而无法再被任何训练样本激活和更新,永久失去了学习能力。这一现象最常由 ReLU(Rectified Linear Unit) 激活函数引起。
ReLU 的定义为 f(x)=max(0,x)。当神经元的净输入 z≤0时,输出为零,梯度也为零。在反向传播中,链式法则会将该神经元之前的梯度也变为零,导致其输入权重无法更新。有两种典型情形会导致神经元死亡:
-
初始化不当:如果权重初始化使得某个神经元的输出恒为负,该神经元可能从一开始就死亡。
-
学习率过大:一次过大的权重更新可能将神经元的输入推向一个极负的区域,使得该神经元对所有训练样本的输出都变为负数,从而永久失活。
缓解策略:
-
使用 ReLU 的变体:LeakyReLU(f(x)=max(αx,x)f(x)=max(αx,x),αα 为很小的正数)、PReLU(可学习的 αα)、ELU 等,它们在负半区保留了一个非零的梯度,即使输入为负,神经元仍能缓慢学习,避免完全死亡。
-
合适的初始化:采用 He 初始化(专为 ReLU 设计),保证各层激活值的方差稳定,降低初始时就输出全负的概率。
-
较小的学习率:避免单步更新过大,配合梯度裁剪。
-
梯度监控:定期检查各层神经元输出为零的比例,如果某个神经元长期死亡,可考虑重新初始化或调整超参数。
设计 MLP 时,如何确定隐藏层的神经元数量?有哪些经验法则和验证方法?¶
隐藏层神经元数量是影响模型容量和泛化性能的关键超参数。神经元过少会导致欠拟合,无法捕捉数据中的复杂模式;神经元过多则容易过拟合,且增加计算开销。确定方法结合了经验法则和实验验证:
经验法则:
-
介于输入与输出维度之间:一个古老的规则是隐藏层神经元数量取输入层和输出层维度的平均值。
-
金字塔形:对于深层网络,每层神经元数量逐渐减少,形成压缩表示。
-
基于样本量:模型总参数量应远小于训练样本数,以避免严重过拟合。通常参数量与样本量之比小于 1:10。
-
“足够大”原则:在实践中,往往先选择一个较大的神经元数量(如 128 或 256),再通过正则化(如 Dropout、权重衰减)控制过拟合,因为现代优化器能较好地处理过参数化网络。
验证方法:
-
网格搜索/随机搜索:在一定范围内(如 [32, 64, 128, 256])尝试不同配置,使用交叉验证评估验证集性能,选择验证误差最小的配置。
-
学习曲线分析:逐渐增加神经元数量,观察训练集和验证集的损失。当验证损失停止下降或开始上升时,即为合适的容量。
-
正则化配合:在使用 Dropout 等正则化时,神经元数量可以设得稍大,通过 Dropout 概率来控制有效容量。
-
预训练与剪枝:先训练一个较大的网络,然后通过剪枝移除不重要的神经元,得到一个更紧凑的模型。
最终,神经元数量的选择是任务相关的。对于复杂的图像或文本任务,往往需要数百甚至上千个神经元;对于简单的表格数据,几十个神经元可能就足够。