06 · 第 6 讲:多层感知机与神经网络训练

← 返回课程目录

来源说明:本文由 AI 根据课程课件整理生成。学习和引用时请结合原课件核实。

本文目录

本文最后更新于 2026年11月9日 下午

北京大学《机器学习概论》(2026 秋)的课程笔记。

第六讲:线性模型学不出弯曲的边界,可以先手工设计复杂特征。但如果特征也交给模型学习,会发生什么?

多层感知机给出了答案,同时带来了新的问题:参数那么多,梯度怎样算,深层网络怎样训?

第 1 章:从固定特征到学习特征

线性模型 wTxw^Tx 的能力取决于输入特征。人为设计基函数 ϕ(x)\phi(x) 后可以用 wTϕ(x)w^T\phi(x) 表达非线性,但基函数是否合适仍靠人工。

多层感知机(MLP)让特征变换本身可学习:h(l)=σ(W(l)h(l−1)+b(l))h^{(l)}=\sigma(W^{(l)}h^{(l-1)}+b^{(l)})。没有非线性激活时,多层线性变换仍等价于单层线性变换。

万能逼近定理说某些足够宽的网络可逼近连续函数,并不保证有限数据下容易学到、也不保证泛化。

第 2 章:反向传播究竟算什么

给定损失 LL,链式法则逐层把输出端的梯度传回输入端。

令 a(l)=W(l)h(l−1)+b(l)a^{(l)}=W^{(l)}h^{(l-1)}+b^{(l)},误差信号 δ(l)=∂L/∂a(l)\delta^{(l)}=\partial L/\partial a^{(l)};

则 ∂L/∂W(l)=δ(l)(h(l−1))T\partial L/\partial W^{(l)}=\delta^{(l)}(h^{(l-1)})^T,前一层误差由 (W(l))Tδ(l)(W^{(l)})^T\delta^{(l)} 乘上激活函数导数得到。

反向传播不是另一种优化器,它是高效求梯度的算法;得到梯度后才由 SGD 等优化器更新参数。

Jacobian–vector product 与 vector–Jacobian product 也解释了:自动微分为什么不必显式构造巨大的 Jacobian。

第 3 章:为什么深层网络难训练

梯度跨很多层时反复乘矩阵和激活函数导数,可能指数式缩小或放大,分别造成梯度消失和爆炸。sigmoid 在饱和区导数小;ReLU 在正半轴导数稳定但负半轴可能“死亡”,Leaky ReLU/ELU 是相关改进。

合适的随机初始化希望信号在层间保持合理尺度,批归一化利用 mini-batch 统计量规范化中间表示,训练和推理时使用的统计量不同。

残差连接 h(l+1)=F(h(l))+h(l)h^{(l+1)}=F(h^{(l)})+h^{(l)} 提供更直接的梯度通路。

第 4 章:优化与防过拟合

mini-batch SGD 在计算效率与梯度噪声之间折中;动量、按参数调整步长的方法以及学习率日程改善训练。批大小、初始学习率和衰减策略要一起考虑。

早停依据验证集表现停止训练,L2L_2 惩罚限制过大的权重,Dropout 在训练时随机屏蔽部分单元以减轻共适应。现代实现通常采用“倒置 Dropout”:训练时把保留下来的激活除以保留概率,推理时关闭随机屏蔽且无需再缩放。它们控制容量的方式不同,不能代替合理的数据划分。

第 5 章:用两层网络走一遍反向传播

先写出前向计算:a1=W1x+b1a_1=W_1x+b_1、h=ϕ(a1)h=\phi(a_1)、a2=W2h+b2a_2=W_2h+b_2、p=softmax(a2)p=\mathrm{softmax}(a_2)。真实类别 yy 用 one-hot 向量表示,损失为 L=−∑cyclog⁡pcL=-\sum_cy_c\log p_c。

那么从哪里开始往回求导?当然从损失直接连接的输出层开始:

  1. softmax 与交叉熵合起来,得到 δ2=∂L/∂a2=p−y\delta_2=\partial L/\partial a_2=p-y。
  2. 因为 a2=W2h+b2a_2=W_2h+b_2,所以 ∇W2L=δ2hT\nabla_{W_2}L=\delta_2h^T、∇b2L=δ2\nabla_{b_2}L=\delta_2。
  3. 输出层传给隐藏层的梯度先乘 W2TW_2^T,再乘激活函数导数:δ1=(W2Tδ2)⊙ϕ′(a1)\delta_1=(W_2^T\delta_2)\odot\phi'(a_1)。
  4. 最后 ∇W1L=δ1xT\nabla_{W_1}L=\delta_1x^T、∇b1L=δ1\nabla_{b_1}L=\delta_1。

⊙\odot 表示逐元素相乘。检查每个梯度的维度是否与对应权重一致,是检查推导是否漏了转置的好方法。

对 mini-batch,把每个样本的梯度求和或平均,然后才更新一次权重。共享参数或分支计算图中,同一参数收到多条路径的梯度要相加;反向传播沿计算图反序遍历即可。

第 6 章:梯度消失、初始化和残差的数学直觉

跨 LL 层的梯度包含 ∏lWlTdiag⁡(ϕ′(al))\prod_{l}W_l^T\operatorname{diag}(\phi'(a_l))。若这些因子的典型尺度长期小于 1,梯度缩小;大于 1 则放大。

Xavier/He 类初始化按输入输出宽度调整权重方差,试图让前向激活和反向梯度在层间保持合理尺度。

残差块 hl+1=hl+F(hl)h_{l+1}=h_l+F(h_l) 的 Jacobian 是 I+JFI+J_F,即使 FF 的通路较难训练,仍有恒等通路帮助信息传播。它不能单独保证梯度绝不爆炸或消失。

第 7 章:归一化和正则化的操作细节

Batch Normalization 对一批激活求均值 μB\mu_B 与方差 sB2s_B^2,计算 a^=(a−μB)/sB2+ϵ\hat a=(a-\mu_B)/\sqrt{s_B^2+\epsilon},再学习缩放和平移 γa^+β\gamma\hat a+\beta。

推理时若继续依赖当前单样本的 batch 统计,结果会和训练时不一致,因此通常使用训练中累计的统计量。Dropout 训练时随机置零并按保留概率缩放,推理时关闭随机屏蔽。早停要监控验证集而非训练集,否则无法识别过拟合。

第 8 章:激活函数的选择

Sigmoid 将值压到 (0,1)(0,1),适合作为二分类输出概率,但在两端饱和区导数接近零;tanh 输出以零为中心,仍会饱和。

ReLU max⁡(0,z)\max(0,z) 在正半轴梯度为 1,计算简单,但负半轴梯度为零,部分神经元可能长期不激活。Leaky ReLU 在负半轴保留小斜率,ELU 使用平滑的负侧曲线。

Softmax 是将一组得分变为总和为 1 的多类概率,通常用于输出层;它不是逐元素独立激活。

第 9 章:早停与权重惩罚的联系与区别

从较小随机权重开始训练时,早期迭代往往先学到较明显的规律;继续优化可能逐渐追随训练噪声。早停选择验证损失最低附近的参数,它通过限制优化轨迹间接控制复杂度。

L2L_2 在目标函数中显式惩罚权重,Dropout 在训练中随机改变网络结构,三者都可能改善泛化,但不能相互视作完全等价。若类别不平衡,单看准确率还可能掩盖小类错误,验证指标要与任务目标一致。

反向传播计算各参数的导数,优化器利用这些导数更新参数。初始化、归一化和残差连接有助于训练,正则化、Dropout 和早停则用于改善泛化。

补充:非线性究竟增加了什么

多层线性层可以合并成一层线性变换,深度本身不会让它表示弯曲边界;激活函数才让网络能够表达 XOR 一类线性不可分关系。基函数扩展也能引入非线性,但特征由人预先指定;神经网络的特点是把表示和预测一起从数据中学习。


第 6 讲:多层感知机与神经网络训练
https://yjyxfcy.github.io/2026/11/03/itml6/
作者
Yjy
发布于
2026年11月3日
更新于
2026年11月9日
许可协议