第5章 误差反向传播法
第5章 误差反向传播法覆盖29个权威目录层级,以数学推导、数组实现、交互实验和失败对照重建核心。
为什么从可核查的中间量开始
、、、、、共同构成本页坐标。用计算图和链式法则把全局梯度拆成局部backward规则,实现Mul、Add、ReLU、Sigmoid、Affine与Softmax-with-Loss层。
“从零实现”的价值不是拒绝成熟框架,而是让每个数学对象都对应一个可检查的数组,让每次forward、loss、backward和update都能解释。实验先冻结样本身份、输入与标签shape、参数初值、随机种子、数据折分、浮点精度和停止规则;运行前先预测第一处会改变的中间量,运行后立即与手算或枚举基线比较。
本页沿“画出计算图 -> 缓存前向状态 -> 注入上游梯度 -> 应用局部导数 -> 累加参数梯度 -> 对照数值梯度”组织证据。最终准确率、损失曲线或漂亮图像都只是末端现象;若shape、概率归一、局部导数、梯度尺度或数据隔离在更早位置失败,末端结果不能采信。修复后清空前向缓存、梯度、优化器状态与派生特征,从原始输入完整重放。
数学骨架与shape合同
方程实现前先声明标量、向量、矩阵或四维张量的轴语义,再核对有限值、归一化、导数符号和更新尺度。相同终点可能由错误广播、标签错位、批量分母或缓存污染偶然产生;所以验收以最早分叉为准,并保留更新前后的独立重算结果。
核心机制
- 计算图把变量和运算节点显式连接,forward从输入得到输出,backward从损失反向传播导数。局部节点只需知道自己的输入和上游梯度,因此复杂网络可由少量可复用规则组合。
- 加法节点把上游梯度原样分发,乘法节点把上游梯度乘以另一个前向输入。苹果价格例子要求缓存价格、数量、税率,反向时才能计算各因素对总价的敏感度。
- 链式法则说明复合函数导数是路径上局部导数的乘积;变量经多条路径影响损失时,梯度必须在汇合点相加。遗漏累加会让共享参数或分支网络得到偏小梯度。
- ReLU backward用前向非正掩码置零,Sigmoid可利用缓存输出计算douty(1-y)。层对象应缓存反向所需的最小前向状态,并在新批次forward时覆盖,避免跨批次污染。
- Affine层把批次输入乘权重再加偏置;反向同时给出dX、dW和db。偏置在forward被广播到每个样本,backward必须沿批次求和;高维输入先保存原shape,返回dX时恢复。
- Softmax-with-Loss把稳定softmax和交叉熵合并,梯度简化为(y-t)/N。网络解析梯度与中心差分逐元素比较相对误差,只有梯度检查通过后才运行长训练。
从原书路线定位本页
全书权威路线为:第1章 Python入门 -> 第2章 感知机 -> 第3章 神经网络 -> 第4章 神经网络的学习 -> 第5章 误差反向传播法 -> 第6章 与学习相关的技巧 -> 第7章 卷积神经网络 -> 第8章 深度学习 -> 附录A Softmax-with-Loss层的计算图。当前页面不是把主题任意重组,而是在这条依赖链上恢复原书位置。前置章节提供数组、表示和可微目标,后续章节使用这里的中间证据继续推导;跨章引用时必须写明复用的是数学定义、代码接口还是实验状态。
对照实验只改变一个变量:shape、偏置、激活、batch、学习率、初始化、网络深度或任务输出。保持输入、参数、随机状态和评价预算不变,先写出按方程应最先变化的量,再比较基线与边界模式。这样才能区分机制收益、实现错误和随机波动。
权威目录逐项讲解
第5章 误差反向传播法
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“第5章 误差反向传播法”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.1 计算图
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.1 计算图”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.1.1 用计算图求解
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.1.1 用计算图求解”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.1.2 局部计算
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.1.2 局部计算”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.1.3 为何用计算图解题
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.1.3 为何用计算图解题”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.2 链式法则
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.2 链式法则”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.2.1 计算图的反向传播
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.2.1 计算图的反向传播”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.2.2 什么是链式法则
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.2.2 什么是链式法则”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.2.3 链式法则和计算图
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.2.3 链式法则和计算图”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.3 反向传播
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.3 反向传播”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.3.1 加法节点的反向传播
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.3.1 加法节点的反向传播”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.3.2 乘法节点的反向传播
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.3.2 乘法节点的反向传播”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.3.3 苹果的例子
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.3.3 苹果的例子”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.4 简单层的实现
“简单层的实现”放回本章主线分析其输入、数学变换、输出和边界。复现时保存关键中间量,并用最小样本验证“backward接收上游梯度并返回与各输入同shape的梯度;共享或广播变量必须按前向依赖正确累加,解析梯度须通过数值检查。”。
验收“5.4 简单层的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.4.1 乘法层的实现
层的forward保存反向所需输入,backward返回与原输入同shape的梯度;加法复制上游梯度,乘法交换另一个前向因子。
验收“5.4.1 乘法层的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.4.2 加法层的实现
层的forward保存反向所需输入,backward返回与原输入同shape的梯度;加法复制上游梯度,乘法交换另一个前向因子。
验收“5.4.2 加法层的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.5 激活函数层的实现
这一单元建立从交互验证到可复现脚本的编程基础:明确对象类型、控制流、函数输入输出与类状态,并把一次性试算保存为可重复执行的最小程序。
验收“5.5 激活函数层的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.5.1 ReLU层
比较函数值、导数与饱和区:非线性阻止多层矩阵坍缩,导数决定梯度能否穿过该层;实现同时检查极端输入的有限性。
验收“5.5.1 ReLU层”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.5.2 Sigmoid层
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.5.2 Sigmoid层”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.6 Affine/Softmax层的实现
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.6 Affine/Softmax层的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.6.1 Affine层
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.6.1 Affine层”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.6.2 批版本的Affine层
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.6.2 批版本的Affine层”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.6.3 Softmax-with-Loss层
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.6.3 Softmax-with-Loss层”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.7 误差反向传播法的实现
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.7 误差反向传播法的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.7.1 神经网络学习的全貌图
把每种运算封装为成对forward/backward,参数梯度单独保存;解析结果与中心差分逐元素比较,通过后再接入完整学习循环。
验收“5.7.1 神经网络学习的全貌图”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.7.2 对应误差反向传播法的神经网络的实现
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.7.2 对应误差反向传播法的神经网络的实现”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.7.3 误差反向传播法的梯度确认
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.7.3 误差反向传播法的梯度确认”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.7.4 使用误差反向传播法的学习
前向缓存局部输入,反向接收上游梯度并乘局部导数;分叉路径的贡献在变量处相加,使复杂复合函数可由简单节点重放。
验收“5.7.4 使用误差反向传播法的学习”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
5.8 小结
把本章的输入、核心变换、中间证据和失效边界重新连成闭环;验收重点是能从冻结输入重放到“backward接收上游梯度并返回与各输入同shape的梯度;共享或广播变量必须按前向依赖正确累加,解析梯度须通过数值检查。”,而不是只复述术语。
验收“5.8 小结”时先写出预期的输入、输出和第一处可观察变化,再运行一个固定小样本。若终点看似合理但该中间证据未出现,应停止并检查轴、广播、归一化、缓存、梯度或数据隔离。
常见失败与边界
本章回顾
用计算图和链式法则把全局梯度拆成局部backward规则,实现Mul、Add、ReLU、Sigmoid、Affine与Softmax-with-Loss层。 验收底线是:backward接收上游梯度并返回与各输入同shape的梯度;共享或广播变量必须按前向依赖正确累加,解析梯度须通过数值检查。。学习完成的标准不是记住名称,而是能从冻结输入预测中间状态,解释单变量为何改变答案,并在失败样本中指出第一处违背前提的位置。