\[ \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 实现或验证超参数搜索;在其他条件相同的情况下,只改变一个需要研究的因素进行比较,并根据实验结果分析该因素可能带来的影响。
本章沿用统一记号:普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵或高阶张量;层编号写作上标 \([l]\),样本或时间编号写作下标;转置写作 \(\trans\)。除非另有说明,批量样本按行存放。本章各节的程序均应同时检查数值结果和数组维度。
核心推导与实现核验
核心关系
\[\widehat\lambda=\argmin_{\lambda\in\Lambda}\widehat R_{\mathrm{valid}}(\widehat\btheta_\lambda).\]
推导路径。 内层用训练集在给定超参数 \(\lambda\) 下估计模型参数,外层用验证集比较候选;当模型结构、训练方法和所有参数设置都被确定下来后,我们用测试集评价模型的实际表现。这是两类优化变量和三种数据职责的分离。
关键条件
如果根据测试结果从多个模型中挑选表现最好的模型,就容易选中一个碰巧在当前测试集上表现较好的模型。此时报告的测试结果可能比模型面对其他新数据时的实际表现更好。比较的模型越多,这种现象通常越明显。
数据规模
模型中的每个参数都需要一个同样大小的梯度:一个标量参数对应一个梯度值,一个矩阵参数对应一个同样大小的梯度矩阵。学习率等超参数通常只是少量数值或训练规则,不会像模型参数那样为每个元素保存梯度。
常见误区
如果一次改变多个因素,就无法判断结果差异究竟由哪个因素造成;如果只保留最好的一次随机结果,或者依据测试集结果继续调整模型,也会使结论失去可信度。
动手检查
使用相同的数据划分和随机种子重复运行程序;检查选择超参数时没有读取测试集指标,并记录每次运行的完整设置,确认各方案只在正在比较的因素上不同。
数值稳定性与规模
学习率、正则化系数等可能跨越多个数量级的参数,应按照不同数量级选择候选值,例如可以考虑 \(10^{-5},10^{-4},\ldots,1,10\) 等。进行多次实验时,应保存每次实验的原始结果;如果某次实验失败,应记录失败情况和原因,不能在计算平均结果前直接将其删除。比较模型之前,还应检查损失、准确率等指标是否为正常的有限数值;出现无穷大或无效数值的实验不能参与排序。
本章小结
模型参数和超参数应在概念与程序状态上分离。
验证集用于选择,测试集用于确定方案后的最终评估。
诊断应先保证实现和优化正确,再讨论泛化。