超参数搜索策略#
学习目标与记号#
准确解释搜索空间、网格搜索与随机搜索;
根据公式和张量维度分析资源分配,并识别常见实现错误;
用
Python实现或验证实验流程;在其他条件相同的情况下,只改变一个需要研究的因素进行比较,并根据实验结果分析该因素可能带来的影响。
本节沿用统一记号:普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵或高阶张量;层编号写作上标 \([l]\),样本或时间编号写作下标;转置写作 \(\trans\)。除非另有说明,批量样本按行存放。正文与练习中的程序都应同时检查数值结果和数组维度。本节练习的参考答案见 超参数搜索策略答案。
搜索前应先依据 偏差—方差诊断 确定问题类型,并固定 训练集、验证集与测试集;优化器候选的定义可回看 梯度下降及其衍生算法。
超参数搜索的目标不是让验证集上的一次偶然结果最高,而是在有限计算量下找到表现稳定、使用相同设置能够得到相近结果且满足部署要求的配置。所有待比较的配置应使用相同的数据划分、预处理方法、评价指标及其计算方法。
搜索空间#
先区分数值尺度和类别选择。学习率、权重衰减等跨越多个数量级的正数,通常在对数尺度上搜索,例如从 \(10^{-5}\) 到 \(10^{-2}\);层数、激活函数和优化器则属于离散选择。把学习率在线性区间均匀采样,往往会把大部分试验浪费在同一数量级。
常见策略包括:
网格搜索:便于复现,适合少量离散候选;维度增加后成本按组合数迅速增长。
随机搜索:在高维空间中通常能覆盖更多不同取值,尤其适合只有少数超参数真正重要的情况。
由粗到细:先用较宽范围和较短训练筛选,再缩小范围、增加训练预算。缩短训练得到的排序不一定等同于完整训练,晋级规则应保留一定多样性。
贝叶斯优化或多保真方法:利用历史试验或不同训练预算决定下一组配置,适合单次训练昂贵的场景。
逐步缩减
逐步缩减(successive halving)是一种通过多轮筛选分配训练资源的方法。开始时,让所有候选配置使用相同且较少的训练轮数;每轮训练结束后,根据验证集上的表现淘汰一部分结果较差的配置,再给剩余配置增加训练轮数。重复这一过程,直至只剩少数候选。与把每组配置都完整训练相比,这种方法可以减少花在明显不合适配置上的计算量。不过,有些配置在训练初期表现一般,经过更多轮训练后才会变好,因此过早淘汰也可能错过最终表现较好的配置。实际使用时应设置合理的热身期和每轮晋级比例。
剪枝规则
在超参数搜索中,剪枝规则是预先规定的判断方法,用于决定是否提前停止某组超参数配置的训练。这里的“剪枝”是停止继续训练某些候选配置,并不是删除神经网络中的权重或连接。不提前剪枝会让每组配置都使用完整训练轮数,比较较为直接,但计算量较大;固定轮数后淘汰一半,是让所有配置先训练相同轮数,再根据验证集表现停止其中一半;带热身期的逐步缩减,则先让所有配置训练一段时间,避开训练初期指标波动较大的阶段,再分轮淘汰并为保留下来的配置增加训练资源。无论采用哪一种规则,都应事先确定开始判断的时间、每轮淘汰比例、比较指标和并列结果的处理方法,而且只能根据验证集表现作出决定,不能查看测试集结果。
超参数比较时需要遵守的规则#
先调最敏感的学习率和训练稳定性,再比较容量与正则化;一次同时改变太多因素会难以解释结果。
为每次试验记录配置、代码版本、随机种子、训练曲线、最佳检查点和资源消耗。
选择主要评价指标,并预先约定并列时如何考虑延迟、内存或模型大小。
对少数入围配置使用多个随机种子复验;最后冻结完整流程,只在测试集上做最终评估。
备注
早期终止失败试验可以节省大量计算,但判定标准应覆盖正常的热身期。若模型使用学习率预热或验证指标前期波动较大,过早剪枝可能淘汰最终更好的配置。
Shiny 交互演示:超参数选择与数据集分工
交互页面的“超参数选择流程”标签页会在训练集上估计各候选模型的参数,在验证集上比较多项式次数、惩罚强度和分类阈值,并在方案全部确定后才显示一次测试集结果。页面的比较规则预先确定,便于观察为什么测试集不能参与反复选择;另一个标签页可同时复习二分类评价指标。
核心推导与实现核验#
核心关系
推导路径。 对跨多个数量级的正超参数在对数域均匀采样,使每个数量级获得相同概率;直接在线性域均匀采样会把大部分概率质量放在较大数值区间。
关键条件
若只有少数超参数真正敏感,随机搜索的每次试验都会产生新的敏感参数取值,而规则网格会在不敏感维度上重复,因而在固定预算下覆盖更有效。
数据规模
若要搜索 \(r\) 个超参数,第 \(j\) 个超参数准备了 \(m_j\) 个候选值,完整网格需要尝试 \(\prod_{j=1}^{r}m_j\) 种组合。例如,5 个超参数各取 4 个值时就有 \(4^5=1024\) 种组合,因此搜索规模会很快增大。
常见误区
如果不同配置使用不同的数据划分、训练次数或随机种子,就无法判断结果差异究竟来自超参数,还是来自这些实验设置。
动手检查
使用相同的数据划分和随机种子重复运行程序;检查选择超参数时没有读取测试集指标,并记录每次运行的完整设置,确认各配置只在正在比较的超参数上不同。
数值稳定性与规模
对数尺度超参数在对数域采样。汇总多次实验时,应保存每一次实验的结果。如果某次实验报错、没有完成训练或得到无法使用的数值,不要直接删掉它后只对其余结果求平均,而应说明失败的次数和原因。正常完成但表现较差的实验仍应计入平均值。所有指标先检查有限性再参与排序。
本节小结#
先定义有意义的搜索空间,再选择搜索算法。
正尺度参数通常应在对数域搜索。
为了使比较结果可靠,各配置应使用相同的数据、计算量和结果记录方法。
综合练习#
程序题应固定随机种子、写出维度断言并报告运行环境;比较题还应固定数据划分、随机种子集合和训练预算。全部参考答案见 超参数搜索策略答案。
对数均匀分布。 设 \(U\sim\operatorname{Uniform}(\log a,\log b)\) 且 \(\Lambda=e^U\),其中 \(0<a<b\)。用变量变换推导 \(\Lambda\) 的概率密度,并证明任意长度相同的对数区间具有相同概率。
随机搜索覆盖概率。 某个敏感超参数的有效区间占其搜索区间的比例为 \(p\),每次随机搜索独立采样。推导进行 \(n\) 次搜索至少命中一次有效区间的概率;取 \(p=0.1\)、\(n=20\) 计算数值。
搜索预算计算。 三个超参数分别有 5、4、3 个候选值,每个候选训练 30 轮。计算完整网格的候选数和总训练轮数。若随机搜索只评估 20 个候选,计算节省比例。比较不同的超参数搜索方法时,应让它们使用大致相同的总训练轮数、总训练时间或计算资源,而不能只要求它们尝试相同数量的参数组合。请说明这样做为什么能使比较更加公平。
采样与记录实现。 用
Python实现对数均匀采样、离散超参数采样、配置规范化与哈希去重。这里,哈希去重是指先把每组超参数配置整理成固定顺序的文本,再根据这段文本计算一个简短标识;如果新配置的标识与已有配置相同,就认为这组配置已经被尝试过,不再重复训练。最后,把配置、随机种子、训练预算、验证指标、运行时间和状态写入结构化记录。搜索器实现。 在同一个模型训练函数之上实现网格搜索、随机搜索和 逐步缩减。逐步缩减必须明确记录每轮分配的训练资源、进入下一轮的配置和已经使用的总训练资源;三种方法均不得读取测试集指标。
程序检查。 为第 4--5 题的程序编写检查代码,确认采样得到的超参数始终位于规定范围内;使用相同的随机种子时能够得到相同结果;内容相同但排列顺序不同的配置会被识别为同一组配置;重复配置不会被再次训练;程序记录的总训练资源计算正确。此外,应保证超参数搜索只使用训练集和验证集。如果搜索过程中错误地读取测试集结果,程序应立即报告错误。
搜索策略比较。 在同一任务上比较网格搜索、随机搜索和逐步缩减。固定训练/验证/测试划分、随机种子集合和总训练轮数或总计算预算;冻结各自所选配置后,报告测试性能、搜索与最终训练时间、固定批量预测时间、所选模型参数量及搜索峰值内存。
线性与对数采样比较。 对跨四个数量级的学习率,比较线性均匀与对数均匀随机搜索。固定数据划分、随机种子集合、候选数和每个候选训练预算;报告有效运行比例、最佳验证与测试性能、训练时间、固定批量预测时间、参数量及峰值内存。
剪枝规则比较。 根据正文对 剪枝规则 的介绍,比较“不提前剪枝”“固定轮数后淘汰一半”和“带热身期的逐步缩减”。固定数据划分、随机种子集合和允许的最大总预算;报告最终任务性能、被淘汰配置中后来可能成为优胜者的比例、训练时间、固定批量预测时间、所选模型参数量及峰值内存。