\[ \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 验证典型 CNN。

  1. 准确解释局部连接、权重共享与平移等变;

  2. 根据公式和张量维度分析感受野,并识别常见实现错误;

  3. Python 实现或验证典型 CNN;在其他条件相同的情况下,只改变一个需要研究的因素进行比较,并根据实验结果分析该因素可能带来的影响。

  本章沿用统一记号:普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵或高阶张量;层编号写作上标 \([l]\)⁠,样本编号写作下标。对第 \(l\) 层,\(d_C^{[l]}\)⁠、\(d_H^{[l]}\)\(d_W^{[l]}\) 分别表示特征的通道数、高和宽;\(f_1^{[l]}\times f_2^{[l]}\)⁠、\(p_1^{[l]}\times p_2^{[l]}\)⁠、\(s_1^{[l]}\times s_2^{[l]}\)\(r_1^{[l]}\times r_2^{[l]}\) 分别表示卷积核大小、填充大小、步幅和空洞率。当两个空间方向采用相同设置时,分别简写为 \(f^{[l]}\)⁠、\(p^{[l]}\)⁠、\(s^{[l]}\)\(r^{[l]}\)⁠。

  对包含 \(n\) 张图像的批量,正文把第 \(l\) 层激活写成 \(\bA^{[l]}\in\mathbb{R}^{n\times d_C^{[l]}\times d_H^{[l]}\times d_W^{[l]}}\)⁠。程序采用 NCHW 排列,即四个轴依次表示图像数、通道数、高和宽。第 \(l\) 层卷积核与偏置分别记为 \(\bW^{[l]}\)\(\bb^{[l]}\)⁠。本章各节的程序均应同时检查数值结果和数组维度。

核心推导与实现核验#

核心关系

\[\bZ_q^{[l]} =b_q^{[l]}+\sum_{c=1}^{d_C^{[l-1]}} \bA_c^{[l-1]}\ast\bW_{q,c}^{[l]},\]

其中 \(q=1,\ldots,d_C^{[l]}\)⁠,符号 \(\ast\) 表示本章采用的互相关运算。每个输出通道对所有输入通道分别做互相关并求和,再加该输出通道的偏置;同一核参数在所有空间位置复用。

关键条件

  忽略边界并取步幅 1 时,输入平移一个像素会使输出特征图同向平移一个像素,因此卷积近似平移等变;分类不变性还需汇聚或其他机制。

数据规模

  第 \(l\) 层卷积核的维度为 \(d_C^{[l]}\times d_C^{[l-1]}\times f_1^{[l]}\times f_2^{[l]}\)⁠。每个输出通道再配一个偏置后,该层参数总数为 \(d_C^{[l]}\bigl(d_C^{[l-1]}f_1^{[l]}f_2^{[l]}+1\bigr)\)⁠,与输入图像的高和宽无关。

常见误区

  把平移等变误写成平移不变、忽略填充边界效应,或混淆数学卷积与框架互相关都会造成错误解释。

动手检查

  用一批人为构造的输入记录各层 NCHW 维度、参数量以及一次后向传播得到的梯度;残差块还要检查两条分支的维度完全相同,并检查残差分支输出为 0 时的恒等映射。

数值稳定性与规模

  训练损失直接接收输出层的线性运算结果;BatchNorm 统计量保持足够精度。混合精度下使用损失缩放,并对每层输出、梯度和学习率做有限性检查。

本章小结#

  1. 卷积的核心是局部连接与空间位置间权重共享。

  2. 等变性不等同于分类不变性。

  3. 每一层都应核对张量维度、参数量和感受野。