\[ \begin{align}\begin{aligned}\newcommand{\ba}{\boldsymbol{a}} \newcommand{\bb}{\boldsymbol{b}} \newcommand{\be}{\boldsymbol{e}} \newcommand{\bw}{\boldsymbol{w}} \newcommand{\bx}{\boldsymbol{x}} \newcommand{\by}{\boldsymbol{y}} \newcommand{\bz}{\boldsymbol{z}} \newcommand{\bd}{\boldsymbol{d}} \newcommand{\bv}{\boldsymbol{v}} \newcommand{\bs}{\boldsymbol{s}}\\\newcommand{\btheta}{\boldsymbol{\theta}} \newcommand{\bbeta}{\boldsymbol{\beta}} \newcommand{\bgamma}{\boldsymbol{\gamma}} \newcommand{\bsigma}{\boldsymbol{\sigma}} \newcommand{\md}{\mbox{d}} \newcommand{\bmu}{\boldsymbol{\mu}} \newcommand{\bone}{\boldsymbol{1}} \newcommand{\trans}{^{\rm\scriptsize T}} \newcommand{\var}{\mathrm{var}}\\\newcommand{\bA}{\boldsymbol{A}} \newcommand{\bB}{\boldsymbol{B}} \newcommand{\bC}{\boldsymbol{C}} \newcommand{\bD}{\boldsymbol{D}} \newcommand{\bG}{\boldsymbol{G}} \newcommand{\bI}{\boldsymbol{I}} \newcommand{\bM}{\boldsymbol{M}} \newcommand{\bP}{\boldsymbol{P}} \newcommand{\bS}{\boldsymbol{S}} \newcommand{\bU}{\boldsymbol{U}} \newcommand{\bW}{\boldsymbol{W}} \newcommand{\bX}{\boldsymbol{X}} \newcommand{\bY}{\boldsymbol{Y}} \newcommand{\bZ}{\boldsymbol{Z}} \newcommand{\cotp}{\textcolor[RGB]{48,209,88}{TP}} \newcommand{\cotn}{\textcolor[RGB]{100,210,255}{TN}} \newcommand{\cofp}{\textcolor[RGB]{94,92,230}{FP}} \newcommand{\cofn}{\textcolor[RGB]{191,90,242}{FN}}\\\newcommand{\numcotp}{\textcolor[RGB]{48,209,88}{50}} \newcommand{\numcotn}{\textcolor[RGB]{100,210,255}{30}} \newcommand{\numcofp}{\textcolor[RGB]{94,92,230}{10}} \newcommand{\numcofn}{\textcolor[RGB]{191,90,242}{10}} \DeclareMathOperator*{\argmin}{arg\,min}\end{aligned}\end{align} \]

全连接神经网络#

学习目标与记号#

  线性模型难以表示复杂的非线性关系,全连接神经网络通过堆叠仿射变换(线性运算)与激活函数学习更丰富的特征表示。本章从逻辑回归和单隐藏层网络出发,学习前向传播、后向传播、批量向量化、多层网络、参数初始化、优化与分类评估。参数的初始尺度会影响各层信号能否稳定传递,因此需要根据每层的输入数量选择合适的初始化范围,并使初始化方法与激活函数相匹配。本章的学习目标是能够推导关键梯度、核对参数和中间量的维度,并用 Python 实现和验证完整训练流程。

  1. 准确解释层与参数、前向传播与后向传播;

  2. 根据每层的输入数量和激活函数选择合理的参数初始化方法,并解释初始化尺度为什么需要与激活函数相匹配;

  3. 根据公式和张量维度分析优化,并识别常见实现错误;

  4. Python 实现或验证分类评估,通过受控实验解释结果。

  本章沿用统一记号:普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵或高阶张量;层编号写作上标 \([l]\)⁠,样本或时间编号写作下标;转置写作 \(\trans\)⁠。除非另有说明,批量样本按行存放。本章各节的程序均应同时检查数值结果和数组维度。

核心推导与实现核验#

核心关系

\[\ba^{[l]}=g^{[l]}(\bW^{[l]}\cdot\ba^{[l-1]}+\bb^{[l]}).\]

  推导路径。 每层先做仿射变换再做非线性变换;根据复合函数的链式法则,从输出层开始进行后向传播以计算各层的误差信号,并由输入激活与误差信号的外积得到权重梯度。

关键条件

  若所有隐藏层都用恒等激活,多层仿射映射的复合仍是一个仿射映射,因此增加线性层不会扩大可表示的函数类。

数据规模

  对于单个样本,若第 \(l-1\) 层有 \(d^{[l-1]}\) 个神经元,第 \(l\) 层有 \(d^{[l]}\) 个神经元,则权重 \(\bW^{[l]}\) 的大小为 \(d^{[l]}\times d^{[l-1]}\)⁠,偏置 \(\bb^{[l]}\) 包含 \(d^{[l]}\) 个元素。

常见误区

  只观察训练损失无法判断泛化;层编号、样本编号与迭代编号混写会直接导致推导和代码维度错误。

数值稳定性与规模

  二分类损失应直接根据输出层的线性运算结果计算,以减少数值溢出和对零取对数的风险。权重初始化可参考 网络模型参数的初始化⁠:根据每层的输入数量选择合适的初始数值范围,并使初始化尺度与激活函数相匹配。训练过程中应记录各层激活值和梯度的大小,以便发现梯度消失或梯度爆炸。如果梯度过大,应先检查后向传播公式、张量维度和学习率是否正确;确认这些方面没有问题后,再考虑使用梯度裁剪等技术限制梯度的整体大小。

本章小结#

  1. 层编号写作上标 \([l]\)⁠,样本编号写作下标。

  2. 非线性激活使多层网络超越单一仿射映射。

  3. 推导、实现与评估都应持续检查维度和数据边界。