【pytorch】深度学习模型调参策略(三):超参数搜索实验设计与曲线分析

68 篇文章 2 订阅
44 篇文章 4 订阅

1.超参数实验设计

在确定了科学和麻烦超参数之后,我们设计一个“研究”或一系列研究来实现实验目标。
一项研究指定了要运行的一组超参数配置,以进行后续分析。每个配置称为一个“试验”。
创建研究通常涉及选择在试验中会变化的超参数,选择这些超参数可以取哪些值(“搜索空间”),选择试验的数量,以及选择一种自动搜索算法从搜索空间中采样这么多个试验。或者,我们可以手动指定一组超参数配置来创建研究。
研究的目的是在不同的科学超参数值下运行管道,同时“优化”或“优化过”麻烦超参数,以便在不同的科学超参数值之间进行尽可能公平的比较。
在最简单的情况下,我们会为每个科学参数的每个配置创建一个单独的研究,其中每个研究都会调整麻烦超参数。
例如,如果我们的目标是在Nesterov动量和Adam之间选择最佳优化器,我们可以创建一个研究,其中optimizer=“Nesterov_momentum”,麻烦超参数为{learning_rate, momentum};另一个研究的optimizer=“Adam”,麻烦超参数为{learning_rate, beta1, beta2, epsilon}。我们将通过选择每个研究的最佳表现试验来比较这两个优化器。
我们可以使用任何梯度无关的优化算法,包括贝叶斯优化或进化算法等方法,来优化麻烦超参数。尽管在探索调整阶段我们更喜欢使用准随机搜索,因为它在这种设置中具有各种优点。调整探索结束后,如果有最先进的贝叶斯优化软件可用,那么我们会优先选择它。

在更复杂的情况下,如果我们想比较大量科学超参数的值,而独立创建这么多的研究是不切实际的,我们可以将科学参数包含在与麻烦超参数相同的搜索空间中,并使用搜索算法在单个研究中采样科学和麻烦超参数的值。
采用这种方法时,条件超参数可能会引起问题,因为除非所有科学超参数的麻烦超参数集合相同,否则很难指定搜索空间。
在这种情况下,我们更喜欢使用准随机搜索而不是更复杂的黑盒优化工具,因为它确保我们获得相对均匀的科学超参数值的采样。无论使用何种搜索算法,我们都需要确保其以某种方式均匀地搜索科学参数。

2.超参数搜索任务的目标

在进行研究时,我们需要在有限的预算内充分考虑三个愿望:
(1)比较足够多的科学超参数的不同值
(2)在足够大的搜索空间中调整麻烦超参数
(3)以及足够密集地采样麻烦超参数的搜索空间
如果我们能够实现这三个愿望,就能从实验中获得更多的见解。其中,尽可能多地比较科学超参数的值可以扩大我们从实验中获得的见解的范围;尽可能多地包含麻烦超参数并允许每个麻烦超参数在尽可能广泛的范围内变化,可以增加我们的信心,即在每个科学超参数配置的搜索空间中存在“好”的麻烦超参数值。否则,我们可能会因为没有搜索到麻烦参数空间中可能存在更好值的区域,而对科学超参数的值进行不公平的比较。尽可能密集地采样麻烦超参数的搜索空间可以增加我们对搜索过程能够发现我们搜索空间中任何好的麻烦超参数设置的信心。否则,我们可能会因为某些值在麻烦超参数的采样中运气更好,而对科学参数的值进行不公平的比较。

3.在实验前考虑更多问题

每组实验都有一个特定的目标,我们希望评估实验提供的证据是否有助于实现该目标。
然而,如果我们提出正确的问题,我们经常会发现需要在一组实验能够取得实质性进展之前进行纠正的问题。
如果我们不提出这些问题,可能会得出不正确的结论。

在分析给定的一组实验以实现其原始目标之前,我们应该问自己以下其他问题:

搜索空间是否足够大?

如果研究的最优点在一个或多个维度的搜索空间边界附近,则搜索可能不够广泛。在这种情况下,我们应该运行另一个具有扩展搜索空间的研究。
如果从搜索空间中采样的最佳点接近其边界,则该搜索空间是可疑的。如果我们在该方向上扩展了搜索范围,可能会找到更好的点。
为了检查搜索空间边界,我们喜欢在我们称为基本超参数轴图上绘制已完成试验,其中我们将验证目标值与一个超参数(例如学习率)绘制在一起。图上的每个点对应于单个试验。
在这里插入图片描述
在这里插入图片描述

图1中的图表显示了错误率(越低越好)与初始学习率的关系。如果最佳点向搜索空间的边缘(在某些维度上)聚集,则可能需要扩展搜索空间边界,直到观察到的最佳点不再靠近边界。
通常,研究将包括“不可行”的试验,这些试验会发散或获得非常糟糕的结果(在上述图表中用红色的X标记)。
如果所有试验在某个阈值以上的学习率下都是不可行的,并且表现最佳的试验的学习率处于该区域的边缘,则模型可能存在稳定性问题,阻止它访问更高的学习率。

我们是否从搜索空间中采样了足够多的点?

运行更多的试验当然更好,但显然会带来成本。由于很难知道我们采样了足够的点,因此我们通常采样我们能够承受的数量,并尝试通过反复查看各种超参数轴图并试图了解搜索空间中“好”区域有多少点来校准我们的直觉信心。

每项研究中有多少试验是不可行的(即试验发散、获得非常差的损失值或根本无法运行,因为它们违反了某些隐含约束)?

当研究中的点中有很大一部分是不可行的时,我们应该尝试调整搜索空间,以避免采样这样的点,这有时需要重新参数化搜索空间。在某些情况下,大量不可行的点可能表明训练代码存在错误。

我们可以从最佳试验的训练曲线中学到什么?

检查训练曲线是识别常见失败模式的简单方法,并且有助于我们确定下一步采取的行动。我们应该检查是否存在有问题的过拟合情况,如果存在,可以使用常见的正则化技术来减少过拟合,然后再比较科学超参数的值。最佳试验通常被选择为不出现问题的配置,但也可能会选择某些科学或无关超参数的“坏”值。因此,我们必须意识到最佳试验可能会被选择为不利于某些超参数的值。

对过拟合的处理

当验证误差在训练过程中某个时刻开始增加时,就会出现问题的过拟合。在我们通过选择科学超参数的“最佳”试验来优化烦恼超参数的实验设置中,我们应该在每个试验中检查是否存在问题的过拟合
如果存在过拟合,我们通常希望在比较科学超参数的值之前,使用正则化技术并/或更好地调整现有的正则化参数来重新运行实验。
使用常见的正则化技术(例如丢弃、标签平滑、权重衰减)可以简单地减少过拟合,可以在下一轮实验中添加一个或多个这样的技术。例如,如果科学超参数是“隐藏层数”,并且使用最多隐藏层数的最佳试验出现问题的过拟合,则通常会选择使用额外的正则化技术而不是立即选择较少的隐藏层数重新尝试。即使没有任何“最佳”试验出现问题的过拟合,如果任何试验出现问题的过拟合,仍然可能存在问题。
任何使训练变得更糟的东西都可以充当正则化工具,即使并不是有意为之。例如,选择较小的学习率可以通过妨碍优化过程来规范化训练,但我们通常不希望以这种方式选择学习率。

对高方差的观察

在训练后期,训练或验证误差是否存在高方差?如果是,这可能会影响我们比较不同科学超参数值的能力(因为每个试验随机以“幸运”或“不幸运”的结果结束),以及在生产中复制最佳试验结果的能力(因为生产模型可能不会在研究中以相同的“幸运”步骤结束)。方差的最可能原因是批次方差(从训练集中随机抽取每个批次的示例)、小验证集以及在训练后期使用的学习率太高。可能的解决方法包括增加批量大小、获取更多验证数据、使用学习率衰减或使用Polyak平均。

对训练受限的改进

试验是否在训练结束时仍在改进?如果是,这表明我们处于“计算受限”状态,我们可以从增加训练步骤或更改学习率计划中受益。如果训练集和验证集的性能在最终训练步骤之前已经饱和,这表明我们处于“非计算受限”状态,我们可以减少训练步骤。虽然我们无法列举所有,但是从检查训练曲线中可以发现许多其他行为(例如,在训练过程中训练损失增加通常表示训练管道存在错误)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值