七、超参数调节

  1. 大多数学习算法都有些超参数需要设定。超参数配置不同,学得的模型性能往往有显著差别,这就是参数调节(parameter tuning):对每种超参数配置都训练出模型,然后把对应最好模型的超参数作为结果。

  2. 由于很多超参数是在实数范围内取值,因此现实中常用做法是对每个超参数选定一个范围和变化步长。如在[0,1)范围内以 0.2为步长。

    这样选出的超参数可能不是最佳的,但是这是在计算开销和性能之间取折中的结果。

  3. 当模型选择完成后,学习算法和超参数配置已经选定,此时应该用数据集 七、超参数调节 - 图1 重新训练模型。

    这个模型在训练过程中使用了 七、超参数调节 - 图2 个样本,这才是最终提交的模型。

7.1 搜索策略

  1. 超参数搜索有三种常见的策略:

    • 手动搜索:手动选择超参数。
    • 网格搜索:当超参数的数据相对较少时,这个方法很实用。
    • 随机搜索:通常推荐这种方式。

7.1.1 手动搜索

  1. 手动选择超参数需要了解超参数做了些什么,以及机器学习模型如何才能取得良好的泛化。

  2. 手动搜索超参数的任务是:在给定运行时间和内存预算范围的条件下,最小化泛化误差。

  3. 手动调整超参数时不要忘记最终目标:提升测试集性能。

    • 加入正则化只是实现这个目标的一种方法。

    • 如果训练误差很低,也可以通过收集更多的训练数据来减少泛化误差。

      如果训练误差太大,则收集更多的训练数据就没有意义。

    • 实践中的一种暴力方法是:不断提高模型容量和训练集的大小。

      这种方法增加了计算代价,只有在拥有充足的计算资源时才可行

7.1.2 网格搜索

  1. 网格搜索的做法是:

    • 对于每个超参数,选择一个较小的有限值集合去搜索。
    • 然后这些超参数笛卡尔乘积得到多组超参数。
    • 网格搜索使用每一组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。
  2. 如何确定搜索集合的范围?

    • 如果超参数是数值,则搜索集合的最小、最大元素可以基于先前相似实验的经验保守地挑选出来。
    • 如果超参数是离散的,则直接使用离散值。
  3. 通常重复进行网格搜索时,效果会更好。假设在集合 {-1,0,1}上网格搜索超参数 七、超参数调节 - 图3

    • 如果找到的最佳值是 1,那么说明低估了 七、超参数调节 - 图4 的取值范围。此时重新在 {1,2,3} 上搜索。
    • 如果找到的最佳值是 0,那么可以细化搜索范围以改进估计。此时重新在 {-0.1,0,0.1} 上搜索。
  4. 网格搜索的一个明显问题时:计算代价随着超参数数量呈指数级增长。

    如果有 七、超参数调节 - 图5 个超参数,每个最多取 七、超参数调节 - 图6 个值,那么所需的试验数将是 七、超参数调节 - 图7 。虽然可以并行试验,但是指数级增长的计算代价仍然不可行。

7.1.3 随机搜索

  1. 随机搜索是一种可以替代网格搜索的方法,它编程简单、使用方便、能更快收敛到超参数的良好取值。

    • 首先为每个超参数定义一个边缘分布,如伯努利分布(对应着二元超参数)或者对数尺度上的均匀分布(对应着正实值超参数)。
    • 然后假设超参数之间相互独立,从各分布中抽样出一组超参数。
    • 使用这组超参数训练模型。
    • 经过多次抽样 -> 训练过程,挑选验证集误差最小的超参数作为最好的超参数。
  2. 随机搜索的优点:

    • 不需要离散化超参数的值,也不需要限定超参数的取值范围。这允许我们在一个更大的集合上进行搜索。
    • 当某些超参数对于性能没有显著影响时,随机搜索相比于网格搜索指数级地高效,它能更快的减小验证集误差。
  3. 与网格搜索一样,通常会基于前一次运行结果来重复运行下一个版本的随机搜索。

  4. 随机搜索比网格搜索更快的找到良好超参数的原因是:没有浪费的实验。

    • 在网格搜索中,两次实验之间只会改变一个超参数 (假设为 七、超参数调节 - 图8 )的值,而其他超参数的值保持不变。

      如果这个超参数 七、超参数调节 - 图9 的值对于验证集误差没有明显区别,那么网格搜索相当于进行了两个重复的实验。

    • 在随机搜索中,两次实验之间,所有的超参数值都不会相等,因为每个超参数的值都是从它们的分布函数中随机采样而来。因此不大可能会出现两个重复的实验。

    • 如果 七、超参数调节 - 图10 超参数与泛化误差无关,那么不同的 七、超参数调节 - 图11 值:

      • 在网格搜索中,不同 七、超参数调节 - 图12 值、相同的其他超参数值,会导致大量的重复实验。
      • 在随机搜索中,其他超参数值每次也都不同,因此不大可能出现两个重复的实验(除非所有的超参数都与泛化误差无关)。

7.2 调整原则

  1. 通常先对超参数进行粗调,然后在粗调中表现良好的超参数区域进行精调。

  2. 超参数随机搜索,并不意味着是在有效范围内随机均匀取值。需要选择合适的缩放来进行随机选取。

    • 对于学习率,假设其取值范围为0.000001~1

      如果进行均匀取值,取10个,那么有 90% 的随机值都位于区间 [0.1,1]。则[0.000001,0.1] 之间没有足够的探索。这种做法明显不合理。

      此时需要使用对数缩放,在对数轴上均匀随机取点。

    • 对于指数加权移动平均的超参数 七、超参数调节 - 图13 。假设其取值范围为 0.9~0.9999

      由于 七、超参数调节 - 图14 刻画了结果使用过去多少个周期的数据来加权平均。因此如果进行均匀取值,则:

      • 七、超参数调节 - 图150.9~0.9005 之间取值时, 七、超参数调节 - 图16 变化不大。
      • 七、超参数调节 - 图170.9990~0.9995 之间取值时, 七、超参数调节 - 图18 变化非常大。

      七、超参数调节 - 图19 越接近 1,七、超参数调节 - 图20 对于它的变化越敏感。此时,需要对 七、超参数调节 - 图21 使用对数缩放,在对数轴上均匀随机取点。

    • 如果选择了错误的缩放,如果取值的总量足够大,也可以得到不错的结果。

      尤其当配合了粗调 -> 精调 策略时,最终还是会聚焦到合适的超参数范围上。

  3. 通常情况下,建议至少每隔几个月重新评估或者修改超参数。因为随着时间的变化,真实场景的数据会逐渐发生改变:

    • 可能是由于用户的行为、偏好发生了改变。
    • 可能是采样的方式发生了改变。
    • 也可能仅仅是由于数据中心更新了服务器。

    由于这些变化,原来设定的超参数可能不再适用。

  4. 有两种超参数调整策略:

    • 如果数据足够大且没有足够的计算资源,此时只能一次完成一个试验。

      则可以每天观察模型的表现,实时的、动态的调整超参数。

    • 如果数据不大,有足够的计算资源可以同一时间完成大量的试验,则可以设置多组超参数设定,然后选择其中表现最好的那个。