\[ \begin{align}\begin{aligned}\newcommand{\ba}{\boldsymbol{a}} \newcommand{\bb}{\boldsymbol{b}} \newcommand{\be}{\boldsymbol{e}} \newcommand{\bq}{\boldsymbol{q}} \newcommand{\bk}{\boldsymbol{k}} \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{\bzero}{\boldsymbol{0}} \newcommand{\bepsilon}{\boldsymbol{\epsilon}} \newcommand{\bphi}{\boldsymbol{\phi}} \newcommand{\bh}{\boldsymbol{h}} \newcommand{\bc}{\boldsymbol{c}} \newcommand{\br}{\boldsymbol{r}} \newcommand{\bQ}{\boldsymbol{Q}} \newcommand{\bK}{\boldsymbol{K}} \newcommand{\bV}{\boldsymbol{V}} \newcommand{\bSigma}{\boldsymbol{\Sigma}} \newcommand{\bg}{\boldsymbol{g}} \newcommand{\bxi}{\boldsymbol{\xi}} \newcommand{\bvarepsilon}{\boldsymbol{\varepsilon}} \newcommand{\bdelta}{\boldsymbol{\delta}} \newcommand{\bq}{\boldsymbol{q}} \newcommand{\bk}{\boldsymbol{k}} \newcommand{\bJ}{\boldsymbol{J}} \newcommand{\bp}{\boldsymbol{p}} \newcommand{\bi}{\boldsymbol{i}} \newcommand{\bo}{\boldsymbol{o}} \newcommand{\bE}{\boldsymbol{E}} \newcommand{\bH}{\boldsymbol{H}} \newcommand{\bL}{\boldsymbol{L}} \newcommand{\bu}{\boldsymbol{u}} \newcommand{\bLambda}{\boldsymbol{\Lambda}} \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} \]

偏差—方差分析与数据划分#

学习目标与记号#

  1. 区分模型参数与超参数,并说明训练集、验证集和测试集各自承担的任务;

  2. 准确定义偏差、方差与不可约噪声,并推导平方误差下的偏差—方差分解;

  3. 通过均值估计、线性回归和岭回归理解样本量、模型复杂度与正则化强度带来的影响;

  4. 解释经典 U 形曲线、插值阈值和双下降现象之间的联系与区别。

  本节使用 \(S=\{(\bx_i,y_i):i=1,\ldots,n\}\) 表示随机生成的训练集,使用 \(\widehat y_S(\bx)\) 表示由训练集 \(S\) 得到的模型在输入 \(\bx\) 处的预测。普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵,转置写作 \(\trans\)⁠。本节练习的参考答案见 偏差—方差分析与数据划分答案⁠。

  训练误差只能说明模型对已见样本的拟合程度,我们真正关心的是模型在同一任务的新样本上的表现。偏差—方差分析帮助我们理解预测误差来自哪里,合理的数据划分则帮助我们在实际训练中选择模型并可靠地评价最终方案。

模型参数、超参数与泛化目标#

  模型参数(model parameters)是训练过程根据数据直接学习的量,例如线性回归的系数,或者神经网络各层的权重和偏置。超参数(hyperparameters)用于确定模型结构或训练过程,例如学习率、隐藏层数、每层神经元个数、批量大小、正则化强度、优化方法和训练轮数。普通梯度下降通常更新模型参数,却不会自动替我们确定全部超参数。

  因此,训练过程不能只追求更小的训练误差。对于每一组超参数,先用训练集学习模型参数,再用验证集比较模型在未参与训练的数据上的表现。模型结构、超参数、数据处理方法和评价规则全部确定后,才使用测试集评价完整方案。

为什么要把“学习参数”和“选择方案”分开

  如果同时依据训练集误差选择模型参数和超参数,复杂模型往往因更容易贴合训练样本而占优势,即使它在新样本上的表现并不好。验证集提供了一组没有参与参数学习的数据,用来比较不同方案能否把训练中学到的规律应用到新样本。

回归问题中的偏差—方差分解#

  固定一个输入 \(\bx\)⁠。我们假设观测标签由下面的真实模型产生:

(55)#\[Y=y_{\mathrm{t}}(\bx)+\varepsilon, \qquad y_{\mathrm{t}}(\bx)=\mathbb E(Y\mid\bx), \qquad \mathbb E(\varepsilon\mid\bx)=0, \qquad \operatorname{Var}(\varepsilon\mid\bx)=\sigma^2(\bx),\]

其中,\(y_{\mathrm{t}}(\bx)\) 是给定输入 \(\bx\) 时观测标签的真实条件均值,\(\varepsilon\) 是围绕该条件均值的随机误差。例如,在线性回归中,\(y_{\mathrm{t}}(\bx)\) 是关于输入 \(\bx\) 的线性函数。这里分析的是同一个固定输入,因此随机性主要来自训练集的生成过程、训练过程中的随机步骤以及新观测中的随机误差。

  设重复执行“随机生成训练集—训练模型—预测”这一过程。不同训练集会得到不同的 \(\widehat y_S(\bx)\)⁠。先只比较预测与真实条件均值 \(y_{\mathrm{t}}(\bx)\)⁠,定义

(56)#\[\begin{split}\begin{aligned} \operatorname{Bias}\!\left\{\widehat y(\bx)\right\} &=\mathbb E_S\!\left\{\widehat y_S(\bx)\right\} -y_{\mathrm{t}}(\bx),\\ \operatorname{Var}_S\!\left\{\widehat y(\bx)\right\} &=\mathbb E_S\!\left[ \left\{\widehat y_S(\bx) -\mathbb E_S\widehat y_S(\bx)\right\}^2 \right], \end{aligned}\end{split}\]

其中,\(\mathbb E_S\) 表示对训练集的生成过程以及训练过程中的随机性取平均。偏差衡量“平均预测”与真实条件均值之间的系统性差异;方差衡量更换训练集后预测结果会发生多大变化。方差小并不表示预测一定准确,因为模型可能稳定地预测了一个错误的结果。

  在式 (56) 中加上并减去 \(\mathbb E_S\{\widehat y_S(\bx)\}\)⁠,展开平方并取期望,可以得到针对真实条件均值的点态分解:

(57)#\[\mathbb E_S\!\left[ \left\{\widehat y_S(\bx)-y_{\mathrm{t}}(\bx)\right\}^2 \right] =\operatorname{Bias}^2\!\left\{\widehat y(\bx)\right\} +\operatorname{Var}_S\!\left\{\widehat y(\bx)\right\}.\]

  如果评价对象是新的随机观测 \(Y\)⁠,还要把式 (55) 中不可预测的随机误差计算在内。在测试噪声与训练过程相互独立的条件下,完整的测试均方误差为

(58)#\[\mathbb E_{S,Y\mid\bx}\!\left[ \left\{Y-\widehat y_S(\bx)\right\}^2 \right] =\sigma^2(\bx) +\operatorname{Bias}^2\!\left\{\widehat y(\bx)\right\} +\operatorname{Var}_S\!\left\{\widehat y(\bx)\right\}.\]

(58) 的三项依次是不可约噪声、偏差平方和方差。增加数据、调整模型复杂度或采用正则化,可以改变后两项,却不能消除数据本身的随机噪声。这个严格分解针对平方误差下的回归问题;分类任务中的“高偏差”和“高方差”通常是借用同一思路进行诊断,但不是把分类错误率直接代入该等式。

备注

  “高偏差”常表现为训练集和验证集上的误差都较高;“高方差”常表现为训练误差较低,而验证误差明显更高。这些只是诊断线索。优化没有收敛、观测标签噪声较大或训练数据与验证数据来源不同,也可能产生相似现象。

例 4.1 均值估计中的偏差与方差

  我们首先考虑用最简单的常数回归模型生成观测标签:

(59)#\[y_i=\mu+\varepsilon_i, \qquad \mathbb E(\varepsilon_i)=0, \qquad \operatorname{Var}(\varepsilon_i)=\sigma^2, \qquad \operatorname{Cov}(\varepsilon_i,\varepsilon_j)=0\quad(i\ne j), \qquad i,j=1,\ldots,n,\]

其中,真实条件均值对所有输入都等于 \(\mu\)⁠。基于训练集 \(\{y_i:i=1,\ldots,n\}\)⁠, 我们使用样本均值预测新样本,

(60)#\[\widehat y_S(\bx)=\widehat\mu =\frac{1}{n}\sum_{i=1}^{n}y_i.\]

那么,这个模型对应的偏差和方差分别为:

(61)#\[\begin{split}\begin{aligned} \mathbb E_S(\widehat\mu)&=\mu,\\ \operatorname{Bias}(\widehat\mu)&=0,\\ \operatorname{Var}_S(\widehat\mu)&=\frac{\sigma^2}{n}. \end{aligned}\end{split}\]

  因此,样本均值没有系统性偏差,但不同训练集给出的样本均值仍会变化。当 \(\sigma^2=1\) 时,样本量从 \(50\) 增加到 \(500\)⁠,方差从 \(0.02\) 降到 \(0.002\)⁠,标准差从约 \(0.141\) 降到约 \(0.045\)⁠。这也解释了为什么反复随机生成训练集后得到的多条估计直线会更加集中。增加样本量降低了方差,却没有改变本来就等于 0 的偏差。

例 4.2 线性回归中的偏差与方差

  进一步考虑用下面的线性真实模型生成样本:

(62)#\[y_i=b_0+\bx_i\trans\cdot\bw_0+\varepsilon_i, \qquad \mathbb E(\varepsilon_i\mid\bx_i)=0, \qquad \operatorname{Var}(\varepsilon_i\mid\bx_i)=\sigma^2,\]

其中,\(b_0\)\(\bw_0\) 是真实模型的参数。对训练样本组成的误差向量 \(\bvarepsilon=(\varepsilon_1,\ldots,\varepsilon_n)\trans\)⁠,进一步假设

(63)#\[\mathbb E\!\left(\bvarepsilon\mid\widetilde\bX\right) =\bzero, \qquad \operatorname{Cov}\!\left(\bvarepsilon\mid\widetilde\bX\right) =\sigma^2\bI_n,\]

其中,令 \(\widetilde\bx_i=(1,\bx_i\trans)\trans\)⁠,则加入全 1 列后的设计矩阵为 \(\widetilde\bX=[\widetilde\bx_1\trans;\ldots;\widetilde\bx_n\trans]\)⁠,\(\bI_n\)\(n\) 阶单位矩阵。分析模型也采用线性形式,并通过最小二乘得到 \(\widehat b\)\(\widehat\bw\)⁠。若线性形式正确、设计矩阵满列秩且误差满足上述条件,则在给定设计矩阵时,

(64)#\[\mathbb E(\widehat b\mid\widetilde\bX)=b_0, \qquad \mathbb E(\widehat\bw\mid\widetilde\bX)=\bw_0,\]

因而固定输入处的平均预测等于真实条件均值,预测偏差为 0。令 \(\widetilde\bx=(1,\bx\trans)\trans\)⁠,并用 \(\widetilde\bX\) 表示加入全 1 列后的设计矩阵,则预测方差为

(65)#\[\operatorname{Var}_S\!\left\{\widehat y_S(\bx)\mid\widetilde\bX\right\} =\sigma^2\widetilde\bx\trans\cdot \left(\widetilde\bX\trans\cdot\widetilde\bX\right)^{-1} \cdot\widetilde\bx.\]

  在具体数值例子中,设 \(y_i=1+0.5x_i+\varepsilon_i\)⁠,并比较样本量 \(50\)\(500\)⁠。较小样本下,不同训练集拟合出的直线较为分散;样本量增大后,多条直线更加接近真实直线。这说明即使估计量没有偏差,有限样本仍会带来方差。靠近数据较少覆盖的输入区域时,式 (65) 往往也更大。

例 4.3 岭回归用少量偏差换取较小方差

  对 \(\bx_i\in\mathbb R^d\)⁠,岭回归(ridge regression)最小化

(66)#\[\sum_{i=1}^{n} \left(y_i-b-\bx_i\trans\cdot\bw\right)^2 +\lambda\sum_{j=1}^{d}w_j^2, \qquad \lambda\geq0,\]

其中,\(\lambda\) 是控制收缩强度的超参数,截距 \(b\) 通常不受惩罚。当 \(\lambda=0\) 时,岭回归退化为最小二乘;当 \(\lambda>0\) 时,系数被压向 0,参数估计通常不再无偏。

  适度增大 \(\lambda\) 往往会增大偏差并降低方差。如果方差下降带来的收益大于偏差平方的增加,验证误差就会下降;如果 \(\lambda\) 过大,模型会过度收缩并出现较大的偏差。因此,不能仅凭训练误差选择 \(\lambda\)⁠,而应在验证集上比较不同取值。

经典的模型复杂度与偏差—方差权衡#

  在经典分析中,模型过于简单时,模型能够表示的规律有限,平均预测容易偏离真实规律,因此偏差较大;不同训练集得到的简单模型通常变化不大,因此方差较小。随着模型复杂度增加,偏差往往下降,方差往往上升。两者与不可约噪声相加后,测试误差可能形成先下降后上升的 U 形曲线。

随模型复杂度增加,平方偏差下降、方差上升,而测试均方误差呈 U 形变化

图 12 经典偏差—方差权衡示意图。平方偏差随模型复杂度增加而下降,方差随模型复杂度增加而上升;二者与不可约噪声相加后形成 U 形的测试均方误差。#

  图中的紫色曲线对应式 (58)⁠。在左侧,模型过于简单,较大的平方偏差是主要问题;在右侧,模型对训练集的生成过程较为敏感,较大的方差是主要问题。紫色曲线的最低点表示在图示条件下偏差与方差取得了较合适的权衡。该图用于说明经典分析思路,最低点的位置和各条曲线的具体形状会随数据、模型和训练方法改变。

表 3 经典分析中的常见表现#

情形

训练误差

验证误差

常见解释

模型过于简单

较高

较高且与训练误差接近

模型难以表示主要规律,偏差较大

模型复杂度适中

继续下降

达到较低水平

偏差与方差取得较合适的平衡

模型过于贴合训练数据

很低

明显高于训练误差

预测对训练样本中的偶然变化较敏感,方差较大

  这张表描述的是常见规律,不是仅凭两项误差就能证明的结论。模型是否充分训练、评价指标是否一致、数据是否来自相同来源,都必须先检查。后文介绍的 双下降现象 还会说明,测试误差并不总是只呈现一条 U 形曲线。

训练集、验证集与测试集#

  清晰的数据划分可以避免信息泄漏,并区分“学习参数”“选择方案”和“报告最终表现”三个任务。

  1. 训练集(training set)⁠:在给定超参数下学习权重和偏置,并计算训练所需的均值、标准差等数据处理数值。

  2. 验证集(validation set)⁠:比较网络结构、正则化强度、学习率、训练轮数和决策阈值等不同方案。

  3. 测试集(test set)⁠:模型及其完整训练方案确定后,用于最终评价。反复根据测试结果改变模型,会使测试集实际承担验证集的作用,从而使最终报告过于乐观。

  验证集和测试集应尽量代表模型实际使用时会遇到的数据。时间序列应按时间先后划分;同一受试者的多条记录或同一原始样本的不同增强版本应放入同一部分,避免相近信息同时出现在训练集和测试集中。标准化所用的均值和标准差只能由训练集计算,再用同一组数值处理验证集和测试集。

备注

  \(k\) 折交叉验证并非不能用于神经网络,而是需要重复训练 \(k\) 次,计算成本可能很高。数据量较小时可以采用交叉验证;数据量很大时,固定验证集通常已能提供较稳定的比较。无论采用哪种方式,测试集都不能参与超参数选择。

双下降现象#

  经典 U 形曲线隐含了一个常见但并非总成立的看法:模型越复杂,偏差越小而方差越大,所以复杂到一定程度后测试误差会持续上升。现代深度学习中的一些实验发现,当模型复杂度继续增加并越过“刚好能够把训练数据拟合到几乎没有误差”的区域后,测试误差可能再次下降。测试误差经历“第一次下降—上升—第二次下降”的变化,因此称为双下降(double descent)。

ResNet18 宽度变化时训练误差与测试误差的双下降,以及不同训练轮数下的测试误差曲线

图 13 课程讲义引用的 Nakkiran 等(2019) 实验:在含有 15% 标签噪声的 CIFAR-10 上改变 ResNet18 的宽度;该图反映特定模型、数据和训练设置下的实验现象。#

  图 13 的左半部分以 ResNet18 的宽度参数表示模型规模。虚线训练误差随着模型变宽而逐渐接近 0;蓝色测试误差先下降,在模型刚好能够近乎完全拟合训练数据的区域附近上升,随后在更宽的模型中再次下降。图的右半部分用多条曲线展示不同训练轮数下的测试误差,说明训练时间也会改变曲线形态。

三个区间与插值阈值

  • 传统区间⁠:模型规模远小于训练样本量,增加模型复杂度通常会改善拟合并降低偏差。

  • 临界区间⁠:模型刚好具有把训练数据拟合到几乎没有误差的能力。达到这一能力的位置称为插值阈值(interpolation threshold)。在存在噪声时,模型可能对训练数据的细小变化非常敏感,测试误差容易在附近升高。

  • 现代区间⁠:模型规模远大于训练样本量,能够完全拟合训练数据的解很多。优化方法、初始化、正则化和网络结构可能使训练过程偏向其中较平滑或较稳定的解,于是测试误差有可能再次下降。

  对深度神经网络而言,“模型复杂度”不能只由参数个数决定。网络结构、参数之间的约束、优化方法以及训练时间都会影响模型实际能够表示和学到的函数。因此,三个区间中的参数量与样本量关系只能帮助建立直观认识,不能作为适用于所有网络的严格分界。

双下降没有否定偏差—方差分解

  式 (58) 仍然成立。双下降挑战的是“随着模型复杂度增加,偏差必然持续下降而方差必然持续上升”这一过于简单的变化假设。在过参数化区域中,训练方法可能从众多零训练误差解中找到对数据变化不那么敏感的解,使测试误差再次下降。

  除了改变模型规模得到的模型规模双下降(model-wise double descent),固定一个较大的模型并延长训练时间时,也可能观察到训练时间双下降(epoch-wise double descent)。这些现象都不是必然规律。

增加样本量为何可能暂时降低泛化性能?

  在模型结构和训练方法保持不变时,增加训练样本会降低模型复杂度相对于样本量的比例。若原模型位于现代区间,增加样本量可能把它拉回插值阈值附近的临界区间。在这个区间内,模型刚好能够把训练数据拟合到几乎没有误差,却可能对观测标签噪声和训练集的生成过程较为敏感,因此测试误差可能暂时升高,模型在新样本上的表现反而可能变差。这种看似“数据更多、泛化性能却更低”的结果称为样本量双下降(sample-wise double descent)中的反常现象。

  这并不表示增加数据本身有害,而是说明样本量与模型复杂度需要共同考虑。增加样本量时,也可以同时比较适当提高模型复杂度的方案,使模型有可能越过临界区间并重新进入现代区间。不过,更复杂的模型不一定更好,还会增加计算与存储成本,因此模型复杂度仍应根据验证集表现选择,完整方案确定后再使用测试集评价。

警告

  双下降不表示“模型越大一定越好”,也不表示可以取消验证集、正则化或提前停止。曲线是否出现以及第二次下降的幅度,取决于数据量、观测标签噪声、模型结构、优化方法和训练预算。更大的模型还会增加训练、存储和预测成本,因此仍应在验证集上选择方案,并在方案确定后用独立测试集评价。

一个实用的诊断顺序#

  下面的顺序可以把问题拆成相对独立的环节:

  1. 先确认数据、观测标签、模型输出和损失计算正确,并确认训练损失能够下降;否则先处理实现或优化问题。

  2. 若训练误差仍明显高于任务可以达到的水平,尝试增加模型表达能力、改善输入特征或调整优化方法。

  3. 若训练误差较低而验证误差明显更高,考虑增加有效训练数据、使用数据增强、加强正则化或采用提前停止。

  4. 在验证集上确定数据处理、模型结构、超参数和评价规则后保持方案不变,再在测试集上报告最终结果。

  该顺序既适用于经典 U 形曲线,也适用于可能出现双下降的过参数化模型。双下降会改变误差随复杂度变化的形状,却不会改变训练集、验证集和测试集的职责。

Shiny 交互演示:模型复杂度与训练设置

  下面的交互页面用于观察隐藏层数、每层神经元数量、训练轮数和学习率变化时,训练结果可能怎样改变。页面使用验证集比较不同设置;测试集只在训练方案确定后用于最终评价。该页面不计算正文所推导的严格偏差—方差分解,因此不应根据一次训练得到的训练误差与验证误差直接给“偏差”和“方差”命名。

点击打开“模型复杂度与训练设置”交互演示

核心推导与实现核验#

核心关系

  式 (57) 把预测相对于真实条件均值的误差分成偏差平方与方差;式 (58) 在此基础上加入不可约噪声。均值估计中的式 (61) 则直接说明,增加独立样本能够把方差按 \(1/n\) 的速度降低。

  推导路径。\(\widehat y_S(\bx)-y_{\mathrm{t}}(\bx)\) 中加上并减去 \(\mathbb E_S\{\widehat y_S(\bx)\}\)⁠,展开平方。训练集波动项的期望为 0,所以交叉项消失,得到式 (57)⁠。再使用式 (55) 并利用测试噪声条件均值为 0,便得到式 (58)⁠。

关键条件

  式 (58) 要求测试观测中的随机误差与训练集及训练随机性相互独立,并且以真实条件均值 \(y_{\mathrm{t}}(\bx)\) 为比较基准。若训练数据与测试数据来自不同规律,或者重复使用同一组测试数据选择方案,就不能按该式直接解释实际误差。

数据规模

  若要估计式 (56) 中“更换训练集”带来的波动,需要多次独立随机生成训练集,并分别重新训练模型。\(\mathbb E_S(\cdot)\) 表示对这些训练结果求平均,不是对某一份固定训练集内部的 \(n\) 个样本求平均。

常见误区

  不能把式 (57) 与式 (58) 混为一谈:前者比较预测与真实条件均值,不含新观测的随机噪声;后者比较预测与新的随机观测,因此多出 \(\sigma^2(\bx)\)⁠。也不能把一次训练得到的样本内波动直接称为式 (56) 中的训练集方差。

动手检查

  在已知真实函数和噪声方差的合成回归数据上重复生成训练集,分别估计偏差平方、方差和测试均方误差。检查式 (58) 右侧三项之和与直接计算的测试均方误差是否接近,并逐渐增加重复次数,观察两者差异是否总体减小。

数值稳定性与规模

  重复实验应使用相互独立且可复现的随机数生成器,并报告多次结果的平均值和波动。平方误差累计时要检查结果是否为有限数。训练集、验证集和测试集必须使用相互隔离的数据,标准化所需的数值只能由训练集计算。

本节小结#

  1. 模型参数由训练数据学习,超参数和完整训练方案应由验证集选择,测试集只用于最终评价。

  2. 平方误差可以分成不可约噪声、偏差平方和方差;偏差描述平均预测的系统性差异,方差描述更换训练集后预测的波动。

  3. 均值估计和线性回归说明增加样本量能够降低方差;岭回归说明适当引入偏差可能换来更小的方差。

  4. 经典 U 形曲线不是唯一可能的误差形态;部分过参数化模型会在插值阈值附近上升,并在更大的模型中再次下降。

  5. 双下降是一种可能出现的实验现象,不是“模型越大一定越好”的保证,也不能替代验证集选择和独立测试。

综合练习#

  题目包括基本推导、具体计算、编程核验和模型比较。程序题应固定随机种子并检查数组维度;比较不同方案时,应在其他条件相同的情况下只改变需要研究的因素。全部参考答案见 偏差—方差分析与数据划分答案⁠。

  1. 条件均值的偏差—方差分解。 固定输入 \(\bx\)⁠,记 \(\overline y(\bx)=\mathbb E_S\{\widehat y_S(\bx)\}\)⁠。从 \(\widehat y_S(\bx)-y_{\mathrm{t}}(\bx)\) 出发,通过加上并减去 \(\overline y(\bx)\)⁠,逐步证明式 (57)⁠。

  2. 测试均方误差分解。 在第 1 题基础上,使用式 (55)⁠,并假设测试噪声与训练过程相互独立,证明式 (58)⁠。

  3. 均值估计。 在式 (59) 中,证明式 (60) 的偏差为 0、方差为 \(\sigma^2/n\)⁠。当 \(\mu=6\)⁠、\(\sigma^2=1\) 时,分别计算 \(n=50\)\(n=500\) 的偏差、方差以及相对于真实条件均值的均方误差。

  4. 线性回归。 说明式 (64) 成立需要哪些主要条件,并根据式 (65) 解释为什么增加样本量通常会使不同训练集拟合出的直线更加集中,以及为什么远离数据集中区域的预测可能更不稳定。

  5. 具体计算。 在某个固定输入处,真实条件均值为 \(2\)⁠,由三个独立训练集得到的预测依次为 \(1.8,2.0,2.2\)⁠,不可约噪声方差为 \(0.25\)⁠。按总体方差的定义计算经验偏差平方、经验方差以及完整的期望测试均方误差。

  6. 数据划分。 某同学先将全部数据标准化,再划分训练集、验证集和测试集;随后用验证集选择学习率,又根据测试集结果修改了网络宽度。指出其中两处不合理之处,并给出正确的操作顺序。

  7. 均值估计的重复模拟。 编写程序独立生成多份服从 \(\mathcal N(6,1)\) 的训练集,分别计算样本均值。对 \(n=50\)\(n=500\)⁠,估计样本均值的偏差和方差,并与第 3 题的理论结果比较。

  8. 多项式回归的偏差与方差。 生成 \(Y=\sin(X)+\varepsilon\) 的多份训练集,在一组固定输入上分别拟合次数为 \(1,3,5,9\) 的多项式。各个次数使用完全相同的训练集和测试噪声。编写函数估计每个次数下的偏差平方、方差和测试均方误差,并检查式 (58)⁠。

  9. 岭回归中的权衡。 对同一个高次多项式模型比较多组 \(l_2\) 正则化强度。所有设置使用相同的训练集、验证集、随机种子集合和训练方法;根据验证误差选择正则化强度,在方案确定后只用测试集评价最终模型。结合训练—验证差距说明偏差和方差可能怎样变化。

  10. 读图与插值阈值。 某实验得到下表。根据训练误差判断插值阈值大致位于哪个宽度附近,描述测试误差随模型宽度的变化,并说明该表为什么与单一 U 形曲线不同。

    表 4 不同模型宽度下的错误率#

    模型宽度(模型复杂度)

    训练错误率

    测试错误率

    2

    0.25

    0.35

    4

    0.08

    0.27

    8

    0.01

    0.41

    16

    0.00

    0.34

    32

    0.00

    0.25

  11. 双下降实验。 在同一数据划分上训练一组宽度逐渐增加的神经网络,同时记录每个模型的训练误差和验证误差。在其他条件相同的情况下,只改变网络宽度;再选择一个较宽的模型,记录不同训练轮数下的验证误差。画出两组曲线,判断是否出现模型规模双下降或训练时间双下降,并讨论数据量、观测标签噪声和正则化可能带来的影响。模型与训练方案确定后,再用测试集评价一次。