本章目录

前一章可以根据图形直接设定阈值网络。面对大量样本与复杂边界,我们通常不知道隐藏神经元应该画哪条线,必须让误差告诉每条连接如何调整。本章把反向传播(back-propagation,BP)拆成可以手算的链式法则,再用 Assignment 2 区分“训练集拟合得好”与“能够可靠地预测”。[NN3 pp.1–4、9–18、30]

1. MLP 与阈值网络有什么区别

本课的多层感知机(multilayer perceptron,MLP)有一个或多个隐藏层,层间高度连接,并采用 sigmoid、tanh 等平滑激活函数。平滑性使误差对权重的导数可以用于训练。硬阈值函数几乎处处导数为零、零点不可微,不能直接套用本章普通 BP 公式来有效学习。[NN3 pp.1–4、19–21;阈值导数说明为数学解释]

常用函数及其导数为:

若已知神经元输出 ,就可以直接用 或 算导数,无须再计算指数。sigmoid 输出在 内,tanh 输出在 内;输出函数、目标编码及损失定义应配套写清楚。[NN3 pp.19–21]

当 很大时,sigmoid 或 tanh 接近饱和,导数会很小。误差很大并不代表梯度必然很大,因为局部梯度还乘了激活函数导数。这是理解训练速度和深层网络困难的重要起点。[由 NN3 pp.16、19–21 的公式推出]

2. 梯度下降:为什么要沿负梯度走

梯度指向函数局部上升最快的方向。最小化损失 的基本更新为:

其中 是学习率。减号是方向;学习率决定每一步走多远。学习率过小会慢,过大则可能越过低点并振荡甚至发散。[NN3 pp.5–8、23]

算例1:用三步下降理解学习率(教学例)

令 ,则 。从 、 开始:

步数 当前位置 梯度 更新后位置 更新后损失
1 0 1
2 1 0.25
3 1.5 0.0625

我们逐步接近最小值点 。若把学习率改为 ,则 从 跳到 ,再跳回 ,损失始终为 。方向正确而步长过大,同样无法收敛。这个例子沿用 NN3 的一维二次目标形式,并非课件给定的一组数值。[NN3 pp.5–8;表为教学例]

3. 输出层梯度:四个导数连起来

对一个训练样本,令输出层第 个神经元的目标为 ,实际输出为 。课程定义:

隐藏输出为 ,输出神经元激活为 ,输出为 。这里用 表示输出层权重,用 表示隐藏层权重,以减少下标混淆。[NN3 pp.9–16;字母调整不改变公式]

链式法则给出:

因此定义输出层局部梯度 后:

最后一个公式来自偏置对应输入为 。由于误差定义为“目标减输出”,更新式是加号;若采用“输出减目标”的另一套误差定义,局部梯度与更新符号都必须一致调整。前面的 会抵消平方求导的系数 ,不要重复多乘一个 。[NN3 pp.10–16]

4. 隐藏层梯度:把影响传回来

隐藏神经元没有单独给定的目标标签,但其输出会影响下游输出。设隐藏神经元 的激活为 ,输出为 ,则:

先把每个下游输出的局部梯度乘以相应连接权重,再相加,最后乘隐藏层激活导数。隐藏神经元连接到多个输出时,漏掉求和就等于忽略了它对其他输出误差的影响。所有梯度应基于这次前向传播所使用的同一组旧权重计算,再执行参数更新。[NN3 pp.17–18、27–29]

算例2:手算一次完整 BP(教学例)

考虑两个输入、一个隐藏神经元、一个输出神经元;两层都使用 sigmoid。输入 ,目标 ,学习率 。隐藏层权重按“两个特征权重、偏置”排列为 ,输出层权重和偏置为 。[基于 NN3 pp.10–22 的教学例]

第一步:前向传播。

故误差 ,损失 。

第二步:输出层局部梯度。

所以 ,。

第三步:隐藏层局部梯度。

这里必须用旧输出权重 :

于是隐藏层三个参数的更新量为:

第四步:统一更新并复核。 新隐藏参数为 ,新输出参数为 。重新前向计算得到:

本次更新使损失由 降到约 。这验证了此次计算的方向,但不能由一个样本的一步下降推断整个网络训练必然单调收敛。[本例数值已用计算脚本及有限差分复核]

5. 从一次更新到完整训练

顺序训练(sequential / online)每个样本更新一次;批量训练(batch)看完整个训练集后更新一次;小批量训练(mini-batch)每看一小批更新一次。若一批 个样本使用平均损失,则梯度是各样本梯度的平均值。把求和梯度直接当平均梯度使用,会使同一学习率下的更新幅度相差 倍。[NN3 pp.24–29;NN4 p.30]

动量(momentum)在当前更新中加入上次更新的一部分:

例如 ,上次增量为 ,当前梯度为 ,,则本次增量为 。动量项乘的是上次的更新量,不是上次的权重本身。[NN3 p.23;数值为教学例]

NN3 给出的训练流程是随机初始化、逐样本前向与反向、重复若干轮,并可根据验证误差停止;训练样本顺序可以逐轮随机化。同一架构的不同运行可能得到不同边界,隐藏神经元数量增加也只提高表达能力,并不自动提高测试准确率。选择隐藏层宽度时,应同时查看训练表现和验证表现。[NN3 pp.28–29、39–54]

6. Assignment 2:81 个参数不等于知道整个平面

作业要求在上半矩形 ABCD 的阴影和非阴影区域各生成 250 个训练样本,用 20 个隐藏神经元训练 MLP;随后在完整方形 ABEF 中均匀生成 10,000 个点,观察预测区域并讨论泛化。原图经核对,整体方形对应 ,训练矩形为 ,上半部阴影是顶点 的三角形。[A2,题目及示意图;R2 p.1]

算例3:写出标签规则并计算参数数量

在训练矩形内,正类可写为:

其余部分为负类。例如 满足 ,标签为 ; 不满足 ,标签为 。这说明随机生成坐标后,标签来自已知几何规则,而非来自待训练网络的猜测。[A2 图;数值为教学例]

若网络采用两个输入、20 个隐藏单元、一个标量输出,并且每个计算单元都有偏置,那么参数总数为:

第一项是输入到隐藏层,第二项是隐藏到输出层。若改成两个输出单元,则变成 ,所以答“有多少参数”时必须先声明输出编码。[A2 的隐藏层规模;全连接参数计数为推导]

真正的问题在下半平面。对 的点,训练数据没有给出任何监督约束。可以构造两套在上半部完全一致的标签规则:规则 A 把 都当正类;规则 B 再要求 才为正类。在训练矩形上它们给出相同答案,在下半方形却一个全部判正,一个全部判负。只观察上半部样本,无法判断下半部应采用哪一套规则。[根据 A2 训练域作出的可识别性示例,并非新增作业真值]

因此,“10,000 个点都得到了预测”只说明模型定义了一个输出函数,不说明这 10,000 个标签已被证明正确。均匀随机取 10,000 点时,下半方形预计约占 5,000 点,实际数量会随机波动;增加待预测点的数量,不会补足训练域覆盖不足的问题。若题目没有规定下半部真值,就不能擅自把下半部全部当负类再算一个“整体准确率”。[A2;面积比例与评估限制为推导]

已有的 EE6285_Assignment2_Report.pdf 描述了一次使用 20 个 tanh 隐藏神经元的实验,报告称下半区域大多被映射为 。这是该报告记录的运行现象,本章没有重跑该实验,也不把它当作官方答案。报告附录使用 MLPClassifier 与 Adam;本章上面的手算采用课程的半平方误差和普通梯度下降,两者的具体训练配置不能混写成同一次实验。[R2 pp.1–3;本章例2]

更合理的分析分成两部分:对训练覆盖范围内的独立样本检查插值表现;对训练范围外观察模型延拓,并明确缺少监督证据。若未来确实要在整个方形使用模型,就应从整个目标使用范围采集有真实标签的数据,同时覆盖边界附近及各类别,再用相应范围的独立测试集评估。不能单靠增加隐藏神经元,弥补根本没有采集到的区域。[NN3 p.30;A2;R2 pp.2–3]

7. 复习时应能独立完成的内容

NN3 的核心推导是输出层与隐藏层局部梯度;可以按“损失 → 输出 → 激活 → 权重”的依赖顺序复原,而不是只背最终一行。Assignment 2 则把第5章的数据划分、第6章的区域边界与本章的训练联系起来:既要说明网络怎样拟合,也要说明训练样本在哪些地方提供了信息。[NN3 pp.10–22、30;A2]

本章与 Tutorial 3 的联系是训练流程,而非把两种更新公式混为一谈:Tutorial 3 Q1–Q2 训练的是双极性阈值感知机,使用 ;本章 MLP 使用激活导数和 BP。写答卷时先识别题目中的激活函数与损失定义,再选公式。[TN3 Q1–Q2;NN3 pp.10–22]

8. 自测与答案

题1。 sigmoid 输出 ,目标 ,用 ,输出层局部梯度是多少?

答案: 。

题2。 上题输入该输出神经元的隐藏值为 、学习率 ,权重和偏置各改多少?

答案: ,。

题3。 tanh 隐藏输出为 ,下游加权局部梯度之和为 ,隐藏局部梯度是多少?

答案: 。

题4。 上半矩形验证准确率很高,是否证明下半矩形标签可靠?

答案: 不能。前者检验了与训练域相近的样本,后者属于训练域外推,需要额外数据或合理的领域约束。

本章资料

  • NN3:EE4285-NN3.pdf;NN4:EE4285-NN4.pdf。
  • TN3:Tutorial-NN3.pdf。
  • A2:Assigment2_EE6285.docx,作业题目与原始示意图。
  • R2:EE6285_Assignment2_Report.pdf,已有作业报告,非官方参考答案。

下一章转向图像:当输入不再是两个坐标,而是成千上万个像素,卷积网络如何减少参数并提取可迁移的特征?