公司动态

沐神-动手学深度学习4.1多层感知机MLP课后习题

📅 2026/7/28 2:15:13
沐神-动手学深度学习4.1多层感知机MLP课后习题
这篇文章正式带你进入了**“深度学习”的大门。之前的线性回归和 Softmax 回归都只有一层而这一节介绍的多层感知机MLP**通过增加“隐藏层”让模型拥有了处理复杂非线性问题的能力。通俗解释什么是多层感知机核心概念打破“线性”的诅咒为什么要加层 线性模型如前几章内容只能处理简单的线性规律比如“房价随面积线性增长”。但现实世界更复杂比如图像识别像素之间的关系是非线性的。隐藏层Hidden Layer在输入和输出之间加入一层或多层神经元这些层被称为“隐藏层”。激活函数Activation Function这是 MLP 的灵魂。如果只是简单地堆叠多个线性层由于线性组合叠加后依然是线性的模型依然无法处理复杂问题。激活函数如 ReLU、Sigmoid会给模型注入“非线性”使其能够拟合几乎任何复杂的函数。常见的激活函数ReLU (整流线性单元)最常用的。如果输入大于 0 就原样输出小于 0 就输出 0。它计算快且有助于解决梯度消失问题。Sigmoid将输入压缩到 (0, 1) 之间。以前很流行但现在更多用于输出层如二分类问题。Tanh (双曲正切)将输入压缩到 (-1, 1) 之间均值为 0。习题答案解析Q1: 证明如果我们在隐藏层中仅使用线性激活函数那么具有一个隐藏层的多层感知机仍然是一个线性回归模型。证明思路假设输入为 \mathbf{X}隐藏层的权重和偏置为 \mathbf{W}_1, \mathbf{b}_1输出层的权重和偏置为 \mathbf{W}_2, \mathbf{b}_2。如果没有非线性激活函数输出 \mathbf{O} 为\mathbf{O} (\mathbf{X} \mathbf{W}_1 \mathbf{b}_1) \mathbf{W}_2 \mathbf{b}_2展开后得\mathbf{O} \mathbf{X} (\mathbf{W}_1 \mathbf{W}_2) (\mathbf{b}_1 \mathbf{W}_2 \mathbf{b}_2)令 \mathbf{W}_{new} \mathbf{W}_1 \mathbf{W}2\mathbf{b}{new} \mathbf{b}_1 \mathbf{W}2 \mathbf{b}2。则 \mathbf{O} \mathbf{X} \mathbf{W}{new} \mathbf{b}{new}。这在形式上与单层线性回归完全一致证明了没有非线性激活深层网络就会退化为单层线性模型。Q2: 假设我们有一个特征量为 d 的输入隐藏层有 h 个单元。输出层有 q 个单元。计算该 MLP 的参数个数包括偏置。解析输入层到隐藏层权重矩阵大小为 d \times h偏置向量大小为 h。参数量 d \times h h。隐藏层到输出层权重矩阵大小为 h \times q偏置向量大小为 q。参数量 h \times q q。总计(d 1)h (h 1)q dh h hq q。Q3: 为什么 ReLU 函数比 Sigmoid 函数更受欢迎解析计算简单ReLU 只需要判断是否大于 0而 Sigmoid 涉及复杂的指数运算在大规模网络中速度差异明显。缓解梯度消失Sigmoid 在输入很大或很小时梯度几乎为 0导致模型停止学习。ReLU 在正区间的梯度恒为 1能保持较强的梯度流。稀疏激活ReLU 会让一部分神经元输出为 0这增加了网络的稀疏性有助于提取更有代表性的特征。Q4: 如果隐藏层太小或太大会发生什么解析太小模型的“容量”不足无法捕捉复杂数据的特征会导致欠拟合。太大模型参数过多容易死记硬背训练数据中的噪声导致过拟合。此外计算开销也会急剧增加。Q5: 绘制 ReLU 函数的导数。当输入恰好为 0 时会发生什么解析导数当 x 0 时导数为 1当 x 0 时导数为 0。x 0 时在数学上 ReLU 在 0 处不可导。但在实际编程如 PyTorch中为了工程方便通常默认定义 0 处的导数为 0 或 0.5。这在随机梯度下降中不会产生实质性影响因为遇到精确为 0 的概率极低。下一步建议理解了 MLP 的理论后下一节 4.2 节将带你进入“代码实现”。你将亲手编写代码看到如何通过简单的 nn.Sequential 堆叠出这些复杂的隐藏层。你想了解如何手动初始化隐藏层的权重防止模型训练失败还是直接看 MLP 在 Fashion-MNIST 上的分类效果