想象你走进一家面包店后厨,老师傅手里捏着一份配方:面粉多少克、糖多少克、发酵多久、烤箱多少度。配方写得很死,但烤出的面包却千变万化——因为每个步骤都在把原料“加工”一遍:面团揉好切块,送进醒发箱,再推进烤箱。每一个环节,材料都发生了形态上的转变。 多层感知机(MLP)就是 AI 世界里的“老师傅配方”。它把输入数据当作原料,经过一层又一层的“加工工序”,最后变成你想要的答案——判断一封邮件是不是垃圾邮件,预测明天股价涨跌,识别图片里是不是一只猫。每一层里干的活,其实就是两件事:先把所有输入加权求和,再套一个“激活函数”决定这一层要不要“醒发”得更强烈一点。把这样的层摞个两三层,配上调整配方的“反向传播”手艺,一个能干活的小型大脑就出炉了。 这篇文章会带你完整走一遍 MLP 的配方:前向传播怎么计算、反向传播怎么调参、ReLU 为什么取代了 Sigmoid 成为“标准工序”、以及它在深度学习时代为什么依然被大规模使用。看懂 MLP,你就拿到了打开所有现代神经网络的钥匙。
对 AI 从业者来说,MLP 是所有深度学习模型的“积木块”——Transformer、CNN、甚至大语言模型的底层都有全连接层和激活函数的身影。把这一课吃透,后续学任何网络结构都会轻松一半。
可视化演示
展示前向传播信号流动、反向传播梯度回传及激活函数对比,理解多层感知机的核心计算原理。
本节配有交互动效(进入视口后自动加载,约 3KB)。
前向传播 紫色节点表示输入层,信号逐层前向传播 流动粒子模拟激活值在层间传递 a = f(Wx + b) 每层计算加权求和后经激活函数输出
网络三要素
回到面包店。任何一份配方摆在案板上,都能拆成三个部分:进料口放什么原料、中间经过几道工序、出炉时做成什么形状。MLP 的结构也一模一样的骨架——输入层是进料口,隐藏层是中间工序,输出层是成品形状,而连接每一道工序的“用量多少”,就是权重和偏置。
技术上讲,MLP 由若干全连接层堆叠而成。所谓“全连接”,就是上一层的每个神经元都和下一层的每个神经元两两相连,类似配方里每一种原料都会影响每一道工序。输入层把原始特征原封不动地喂进去,不加工;隐藏层负责把特征重新组合,提取出对人类不可见但很有用的中间规律;输出层则根据最后任务产出结果——回归任务输出一个数,分类任务通常输出每个类别的概率。
每一层的内部参数是权重矩阵 $W$ 和偏置向量 $b$。权重决定“某个输入值的分量有多大”,偏置决定“这层神经元的基础兴奋程度”。它们的数值不是人手工指定的,而是通过训练自动学习出来的——就像老师傅反复试烤,最终调出最优的配料比例。
小结:有了输入层、隐藏层、输出层和权重偏置,MLP 的“骨架”就搭好了。但只靠骨架还不能工作——光有线性变换,叠多少层都只是一次线性变换的重复,必须有激活函数引入“揉面”式的非线性,才能烤出真正有价值的“面包”。
- 输入向量$x$ 是来自上一层或原始数据的特征向量,每个维度对应一个特征。
- 权重矩阵$W$ 的每一行对应一个输出神经元,每一列对应一个输入特征。
- 线性变换$W x$ 将 $n$ 维输入映射为 $m$ 维输出,本质是“加权求和”。
- 加偏置$b$ 对每个输出神经元加一个可学习的常数项。
前向传播
配方写好后,真正干活的时候是从进料口一路往下走:面粉过筛、加糖搅拌、送入醒发箱。每一步的输出都是下一步的输入,中间没有任何回头路。MLP 的前向传播就是这样一条单向流水线——数据从输入层进去,逐层变换,最终在输出层吐出一个预测值。
前向传播在每一层做两件事:第一,计算加权求和得到原始得分 $z$;第二,用激活函数对 $z$ 做非线性变换得到该层的输出 $a$。这一步相当于“醒发”——把死板的面团变得蓬松有弹性,让网络的表达能力不再局限于直线。没有激活函数的神经网络,无论叠多少层,本质上都是一个线性模型,连 XOR 这类简单问题都解不了。
输出的计算过程可以逐层展开:第一层的输出是第二层的输入,第二层的输出继续往后传,直到最后一层。整个网络看下来,就是一个嵌套的复合函数——这也为后面的反向传播埋下了伏笔,因为“嵌套”正好对应求导时的“链式法则”。
前向传播是 MLP 的“推理模式”——模型训练好之后,线上预测只走这条路,速度快、逻辑清晰。但它只解决了“给定配方能烤出什么面包”的问题,还没解决“怎么调配方才能让面包更好吃”的问题,这就需要反向传播登场了。
- 上一层输出$a^{(l-1)}$ 是第 $l-1$ 层神经元经过激活后的输出向量。
- 本层线性变换$W^{(l)}$ 和 $b^{(l)}$ 是本层待学习的参数。
- 非线性激活$f$ 是激活函数,对每个神经元独立施加非线性变换。
- 逐层传递从 $l=1$ 到 $l=L$ 重复上述过程,最后得到网络输出 $\hat{y}$。
反向传播
面包烤出来不好吃怎么办?老师傅不会把整份配方扔掉,而是会倒推:是糖放少了?还是烤箱温度高了?他会从“最终口感”这个结果出发,一层一层往回排查,找出哪个环节出了问题、该往哪个方向调。反向传播干的就是这件事——从最终损失出发,把误差信号逐层回传,算出每个权重该怎么调整。
先说损失:给网络一个输入,前向传播得到一个预测 $\hat{y}$,拿它和真实标签 $y$ 比一比,得到一个损失值 $L$。损失函数五花八门,回归常用均方误差,分类常用交叉熵。损失就像一个“难吃程度评分”,分数越高,说明配方离完美越远。
关键问题来了:怎么知道每个权重该增大还是减小?答案是求导——计算损失对每个权重的偏导数(也就是梯度)。由于网络是层层嵌套的复合函数,求导要用链式法则:先算出损失对最后一层输出的导数,然后借助“中间变量”的导数,一层一层往回传递。整个过程像接力棒一样,把梯度从输出端传到输入端。
有了梯度,参数的更新就交给了梯度下降法:朝梯度的反方向迈一小步,损失就会下降一点点。步长由学习率控制——步子太大容易扯着蛋,步子太小又走得太慢。整个过程交替进行:前向传播算预测,反向传播算梯度,更新参数,再来一轮,直到损失收敛。到这一步,MLP 的“训练闭环”就完整了。
- 损失对输出的导$\frac{\partial L}{\partial a^{(L)}}$ 是损失对最后一层输出的敏感度。
- 激活层局部导$\frac{\partial a^{(L)}}{\partial z^{(L)}}$ 是激活函数的导数。
- 线性层局部导$\frac{\partial z^{(l)}}{\partial W^{(l)}}$ 对权重求导,结果直接关联到上一层的输出 $a^{(l-1)}$。
- 梯度连乘把上述所有局部导数沿路径相乘,得到完整梯度。
激活函数
配方里有一味看似不起眼却决定成败的调料:激活函数。没有它,神经网络再深也只是个“高级线性回归”;有了它,网络才能拟合各种弯弯绕绕的复杂关系。激活函数历史上换了好几代,每一代都是一场“厨房革命”。
早期的标配是 Sigmoid,它把任意实数压缩到 0 和 1 之间,像一个温和的“气压阀”。但它有两个毛病:第一,两端导数趋近于 0,反向传播时梯度连乘多次后会变得极小甚至消失——这就是著名的梯度消失问题,网络越深越难训练;第二,输出不是以 0 为中心,会让优化变得拖沓。后来出现了 Tanh,把输出范围拉到 -1 到 1,缓解了“非零中心”问题,但梯度消失依然存在。
转折点是 ReLU 的登场。ReLU 的规则简单到粗暴:正数原样保留,负数直接归零。正区间梯度恒为 1,反向传播的连乘不再轻易缩小,梯度消失被大幅缓解;同时计算极快,只需要一次比较。代价是负区间梯度为 0,部分神经元可能“永久睡着”(死亡 ReLU),但实践中通常无伤大雅。输出层的选择则看任务:二分类用 Sigmoid,多分类用 Softmax 把得分归一化成概率分布。
激活函数的选择决定了网络“好不好揉、揉得透不透”。如今 ReLU 是绝对主力,但 Sigmoid 和 Softmax 凭各自的输出特性,在输出层依然站岗。理解每种激活函数的“脾气”,是搭建 MLP 时最基本的工程素养。
- 分段定义ReLU 在正半轴是恒等函数,负半轴恒为 0。
- 导数分段正区间导数为 1,负区间导数为 0,0 点通常取 0 或 1。
- 梯度传递特性正电位的梯度在反向传播中原样通过,不会因多层连乘而缩小。
- 输出层配合多分类时最后一层通常使用 Softmax,将得分转为概率。
训练流程
一份配方从草稿到定型,老师傅得反复试烤、记录、调整。MLP 的训练也是一套标准流水线,每一步都有讲究。首先,数据不能一股脑全投进去——要像“分批试吃”一样切三份:训练集用来学参数,验证集用来调超参(比如学习率、层数)并监测是否过拟合,测试集最后登场,只评估一次,模拟真实上线效果。
数据准备好了,训练在一个循环中往复:取一小批样本做前向传播,算出损失;再反向传播算出梯度,交给优化器更新权重。优化器本质是梯度下降的改进版——带动量的 SGD、自适应学习率的 Adam,都是在“怎么迈步子”上做文章。学习率这个超参数最关键:过大直接震荡不收敛,过小则龟速前进。
训练中最常遇见的陷阱是过拟合:模型把训练集的细节背得滚瓜烂熟,换新数据就露馅,如同面包店只做得出当年获奖的那一款,稍有变化就翻车。对策不少:加大训练数据、正则化惩罚大权重、Dropout 随机丢弃部分神经元、早停等。验证集的作用就是当“试吃员”;一旦发现训练损失还在降、验证损失却开始反弹,就要果断停手。
训练流程跑完,一个可用的 MLP 就诞生了。记住:数据切分、损失设计、优化器选择、过拟合控制,这四件套决定了模型最终是“稳定出品的招牌面包”还是“时好时坏的试验品”。工程里真正的老手,功夫大多花在流程的细节上。
- 批量样本每次从训练集中抽 $m$ 个样本计算梯度。
- 平均梯度对每个样本的损失梯度求平均,作为本次更新的方向。
- 学习率$\eta$ 控制每次更新迈多大的步子。
- 参数更新沿着梯度的反方向移动,损失才会下降。
现代应用
你可能会想:深度学习时代有 CNN、Transformer、大模型,MLP 是不是过时了?恰恰相反——MLP 不仅没退场,反而以各种“马甲”活跃在每一张神经网络的结构图里。它就像面包店的基础面团,看似朴素,却是一切花式面包的底座。
第一大主场是表格数据。结构化数据(用户信息、交易记录、传感器读数)没有天然的网格结构,CNN 和 Transformer 反而施展不开,MLP 至今是这类任务最可靠的基线模型,甚至很多比赛里精心调优的 MLP 能打赢复杂的树模型。
第二是大模型的“最后一公里”。无论前面的 Transformer 把文本编码得多好,最后输出层几乎都是全连接层:把高维特征映射到词表大小的得分向量,再用 Softmax 变成下一个词的概率。这一层本质上就是一个线性层——MLP 的“最简形态”。除此之外,各种模态的特征要融合,也常常先经 MLP 投影到同一维度再加总,这就是特征融合里最常见的“降维整容术”。
第三是结构上的无法替代。MLP 中的全连接层是参数最多的组件之一,Transformer 里的 Feed-Forward Network(FFN)本身就是两层的 MLP。可以说,理解了 MLP,你就理解了大模型内部大部分参数在干什么。
一句话总结 MLP 的现代地位:它是深度学习的“母语”,是所有复杂架构的通用零件。学透 MLP,你掌握的不是一个过时的玩具,而是理解整座 AI 大厦的承重墙。
- 隐藏状态$h$ 是前面网络对输入编码得到的特征向量。
- 输出矩阵$W_{\text{out}}$ 将 $d_{\text{model}}$ 维特征映射到词表大小 $V$ 维。
- 加偏置$b_{\text{out}}$ 是输出层的可学习偏置。
- 概率化Softmax 将 $V$ 个得分转成和为 1 的概率分布。
AI 应用场景
信贷风控:用MLP做违约预测
阶段:数据建模与分类预测
解决的问题:银行要判断一个申请者会不会逾期还款。传统逻辑回归只能捕捉线性关系,而用户收入、负债、征信记录、消费习惯等特征之间存在大量非线性交互,手工构造交叉特征既费人力又容易遗漏。MLP 的隐藏层能自动学习特征组合,直接输入原始特征即可端到端预测违约概率。
具体案例:某消费金融公司用 MLP 处理 50 万用户的 30 维特征(年龄、月收入、负债率、历史逾期次数等),模型结构为 30→64→32→1,隐藏层用 ReLU,输出层用 Sigmoid,交叉熵作为损失函数,Adam 优化器训练。上线后与逻辑回归基线相比,AUC 提升了 4 个百分点,坏账率下降了约 1.2%。MLP 成为该场景的标准基线,后续提升再考虑更复杂的模型。
大模型输出层:让模型学会“说人话”
阶段:模型推理与文本生成
解决的问题:GPT 等大语言模型在生成下一个词时,需要把高维语义向量转换成词表大小的概率分布。这个“最后一跳”就是 MLP 中的全连接层加 Softmax——模型先算出每个候选词的得分,再归一化成概率。没有这一层,模型脑子里想的“语义”就无法落到具体的词上。
具体案例:在一个 7B 参数的对话模型里,隐藏状态维度为 4096,词表大小为 32 万。输出层将 4096 维向量通过矩阵乘法映射到 32 万维得分,再经 Softmax 采样出下一个词。这层矩阵占据了模型约 20% 的参数,堪称“用最简单的结构承载最关键的决策”。
多模态特征融合:把文字和图像放进同一个空间
阶段:特征工程与融合
解决的问题:当同时有文本和图像两种输入时,两者维度不同、语义空间也不同。传统做法是手工拼接特征,效果粗糙。MLP 常被用作“投影头”:将两种模态的特征分别经过一层 MLP,映射到同一维度空间,再相加或拼接后送入后续网络。相当于把不同语言的面团各自揉成统一规格,才能放进同一个烤箱。
具体案例:某电商搜索团队做“以图搜商品”时,用 MLP 把图片特征(2048 维)和文本特征(768 维)都投影到 512 维共享空间,再计算余弦相似度做图文匹配。MLP 投影让两个模态的向量可以互相比较,搜索准确率提升了 6.5%。
Python 演示
import numpy as np class MLP: def __init__(self, n_input, n_hidden, n_output, lr=0.1): rng = np.random.default_rng(42) self.w1 = rng.standard_normal((n_input, n_hidden)) * 0.5 self.b1 = np.zeros(n_hidden) self.w2 = rng.standard_normal((n_hidden, n_output)) * 0.5 self.b2 = np.zeros(n_output) self.lr = lr def relu(self, z): return np.maximum(0, z) def sigmoid(self, z): return 1 / (1 + np.exp(-np.clip(z, -500, 500))) def forward(self, x): self.z1 = x @ self.w1 + self.b1 self.a1 = self.relu(self.z1) self.z2 = self.a1 @ self.w2 + self.b2 self.a2 = self.sigmoid(self.z2) return self.a2 def loss(self, y_pred, y_true): eps = 1e-8 return -np.mean(y_true * np.log(y_pred + eps) + (1 - y_true) * np.log(1 - y_pred + eps)) def backward(self, x, y_true): m = x.shape[0] dz2 = self.a2 - y_true.reshape(-1, 1) self.w2 -= self.lr * (self.a1.T @ dz2) / m self.b2 -= self.lr * np.mean(dz2, axis=0) dz1 = (dz2 @ self.w2.T) * (self.z1 > 0) self.w1 -= self.lr * (x.T @ dz1) / m self.b1 -= self.lr * np.mean(dz1, axis=0) def train(self, x, y_true, epochs): for epoch in range(epochs): y_pred = self.forward(x) if epoch % 500 == 0: print("epoch", epoch, "loss", round(self.loss(y_pred, y_true), 4)) self.backward(x, y_true) def predict(self, x): return (self.forward(x) > 0.5).astype(int).flatten() if __name__ == "__main__": rng = np.random.default_rng(0) n = 800 x = rng.uniform(-1, 1, size=(n, 2)) y = (x[:, 0]**2 + x[:, 1]**2 < 0.64).astype(int) model = MLP(2, 16, 1, lr=0.3) model.train(x, y, 2000) pred = model.predict(x) acc = np.mean(pred == y) print("accuracy", round(acc, 4))
rng.standard_normal((n_input, n_hidden)) * 0.5用较小方差初始化权重,避免一开始就让 ReLU 全部饱和。self.z1 = x @ self.w1 + self.b1前向传播第一步:输入经过线性变换得到隐藏层得分。self.a1 = self.relu(self.z1)第二步:用 ReLU 引入非线性。dz2 = self.a2 - y_true.reshape(-1, 1)反向传播的核心:交叉熵 + Sigmoid 的组合让输出层梯度恰好等于“预测减真实”。(dz2 @ self.w2.T) * (self.z1 > 0)链式法则:输出层梯度回传到隐藏层,乘上 ReLU 的导数(正区间为 1)。self.w1 -= self.lr * (x.T @ dz1) / m隐藏层权重更新,除以样本数得到平均梯度。
常见误区
误区认为只要隐藏层足够多、神经元足够多,模型就一定更聪明,于是不加节制地堆层数。
正解层数增加会带来两个风险:一是参数量暴涨,数据不够时就过拟合,模型背下训练集却丢了泛化能力;二是优化更难,梯度要穿过更多层,ReLU 和残差连接等技术就是为了缓解这个问题。MLP 在表格数据上,一两个隐藏层往往就够用了。把层数当作“越大越好”,就像把面包胚层叠得越高就越好吃——没有充分的醒发和烘焙条件,只会烤出外糊内生的废品。
为何常见:深度学习的“深”字给很多人留下了“越深越强”的印象,忽略了深度带来的数据和调参成本。
误区觉得 MLP 就是“全连接层 + 激活函数”,处理不了图像、文本这类复杂数据。
正解图像可以展平成向量直接输入 MLP,文本也可以编码成向量。MLP 在数据量不大、特征维度不高的场景依然很能打。深度学习时代它更是无所不在:Transformer 里的 FFN 就是两层 MLP,大模型的输出层就是最简 MLP。它的局限并非“不能处理”,而是“参数效率较低”——在超大输入上堆全连接会膨胀到不可训练。
为何常见:因为教程里常用 MLP 讲表格分类,而 CNN、Transformer 主攻图像文本,容易让人把两者对立起来。
误区看到教程里讲 ReLU 取代 Sigmoid,就认为 Sigmoid 一无是处,所有层都用 ReLU 就对了。
正解Sigmoid 仍然在输出层大量使用——二分类需要 0 到 1 的概率输出,ReLU 给不了这个语义。Softmax 更是多分类输出的标配。激活函数的选择要看位置和任务:隐藏层主流用 ReLU 及其变体,输出层按任务类型用 Sigmoid 或 Softmax。选激活函数就像选刀具:砍骨刀再流行,也不能用来给蛋糕抹奶油。
为何常见:知识传播中容易把“主流”简化为“唯一”,忽略了不同位置的适配性。
误区觉得背住链式法则的连乘公式,就能搞定反向传播的代码实现。
正解真正的工程难点在于:每一层的局部导数怎么算、梯度怎么组织成矩阵乘法、数值上如何避免溢出和除零。代码里一行 dz2 = a2 - y 背后是交叉熵和 Sigmoid 导数的巧妙抵消;ReLU 的导数用 z1 > 0 一次比较就完成。光背公式,手写实现时会卡在维度对齐和“哪个梯度该传给哪一层”上。
为何常见:教科书把推导写得工整优雅,但省略了工程实现里的数据处理细节。
误区训练时盯着训练集上的损失,损失降得漂亮就宣布大功告成。
正解训练损失低可能只是“背答案”。真正要看的泛化能力,需要验证集和测试集说话:训练损失下降但验证损失反弹,就是过拟合的信号。严谨的做法是留出测试集只评估一次,用验证集调参。否则就像面包店只烤出过一次满分作品,却不敢保证每个顾客拿到手都满意。
为何常见:训练过程里最容易看到的就是训练损失曲线,新手很容易把它当成唯一的成功指标。
面试题
Q1. 输入层有4个神经元、隐藏层有4个神经元、输出层有1个神经元的MLP,从隐藏层到输出层有多少个权重?
- A.4个← 正确答案
- B.1个
- C.8个
- D.16个
答案:A。隐藏层到输出层是 4×1 的映射,每个输出神经元接收 4 个输入,因此有 4 个权重(外加 1 个偏置)。16 是从输入层到隐藏层的权重数,8 是“两层共 8 个输入神经元”的干扰项。
Q2. 反向传播计算各层权重的梯度时,最核心的数学工具是什么?
- A.梯度下降法
- B.链式法则← 正确答案
- C.牛顿迭代法
- D.贝叶斯推断
答案:B。误差从输出层逐层回传,每一层对权重的梯度都依赖下一层传来的梯度,这正是复合函数求导的链式法则。梯度下降法是用梯度更新参数的优化方法,牛顿迭代法需要二阶导,贝叶斯推断属于概率视角,与本问题无关。
Q3. 用MLP做多分类时,输出层通常用什么激活函数把得分变成概率分布?
- A.Sigmoid
- B.ReLU
- C.Softmax← 正确答案
- D.Tanh
答案:C。Softmax 把一组实数得分转换成正数且和为 1 的概率分布,天然适配多分类。Sigmoid 只适合二分类输出,ReLU 输出无上界,Tanh 输出范围在 -1 到 1,都不满足概率分布的性质。
Q4. ReLU 取代 Sigmoid 成为主流隐藏层激活函数,最主要原因是什么?
- A.输出永远保持正值
- B.彻底告别梯度消失
- C.正区间梯度恒为1← 正确答案
- D.计算成本降为零
答案:C。ReLU 在正区间导数恒为 1,反向传播时梯度连乘不衰减,比 Sigmoid 的“两端饱和”有效缓解了梯度消失。B 说得太绝对,负区间梯度为 0,死亡神经元问题依然存在。输出正值与计算快是附带优点,不是取代的主因。
Q5. 训练MLP时,反向传播实际计算的是什么东西?
- A.各层权重对损失的梯度← 正确答案
- B.输入数据对输出标签的梯度
- C.激活函数对权重的梯度
- D.损失值对激活函数的梯度
答案:A。反向传播的最终产物是“损失函数对每个权重和偏置的偏导数”,供优化器更新参数。它不更新输入数据,也不把“激活函数对权重”当目标,D 只是链式法则中的中间项而非最终结果。
Q6. 训练过程中验证集的正确用法是什么?
- A.参与权重更新并监测拟合
- B.不参与训练,只评估和调参← 正确答案
- C.重复使用多次直到指标达标
- D.与训练集合并共同训练
答案:B。验证集不参与梯度更新,专门用于调超参数和监测过拟合。若让验证集参与训练或反复试到指标满意,信息会泄漏进模型选择过程,它就不再是“陌生考官”了。
Q7. 下列哪个现象最能说明MLP发生了过拟合?
- A.训练损失下降但验证损失上升← 正确答案
- B.训练和验证损失同步下降
- C.验证损失先升后降
- D.训练损失一直震荡
答案:A。训练损失还在降、验证损失却开始升,是“背题不学思路”的典型信号。B 是正常学习的表现;C 验证损失升高后不会再自己降;D 训练损失震荡通常说明学习率问题而非过拟合。
Q8. 下列哪一项属于神经网络的超参数?
- A.学习率← 正确答案
- B.训练数据的标签值
- C.权重矩阵的具体数值
- D.偏置向量的具体数值
答案:A。学习率在训练前设定,控制更新步长,属于超参数。权重和偏置的具体数值是训练过程中自动学出来的参数,标签值是数据本身,都不是超参数。
Q9. 下列哪些措施能有效防止MLP过拟合?
- A.增加正则化惩罚大权重← 正确答案
- B.训练中提前停止← 正确答案
- C.把学习率调得更大
- D.扩充训练数据← 正确答案
答案:ABD。正则化限制权重幅度,早停在验证损失反弹时停止训练,扩充数据提供更多真实分布样本,三者都能抑制过拟合。调大学习率与过拟合无关,反而可能导致训练不稳定。
Q10. 关于MLP的能力和应用,下列说法正确的是?
- A.表格数据分类回归是经典主场← 正确答案
- B.图像展平后MLP能学出特征组合← 正确答案
- C.多层堆叠可以拟合任意连续函数← 正确答案
- D.隐藏层越多,泛化能力一定越好
答案:ABC。MLP 对结构化数据的非线性建模能力至今是行业基线;图像展平后 MLP 也能工作,只是参数效率低;通用逼近定理保证了足够宽的 MLP 可以逼近任意连续函数。但隐藏层越多不一定泛化越好,深度带来的收益需要数据、正则化和优化技巧共同支撑。