训练机器学习模型往往需要大量的超参数,如学习率和正则化强度。超参数的初始值以及可选的在训练期间如何动态调整超参数将对优化模型的性能产生巨大影响。
考虑到超参数调度的组合通常是无限的,即使使用大量的计算机资源,通常也不可能进行穷举搜索来找到用于优化的最佳超参数调度。取而代之的是,人们经常做的是在一定程度上进行超参数网格搜索,并根据稍微多一点的试验经验,选择性地进一步微调超参数。虽然这种方法在实践中效果很好,但它需要大量的人工干预,可能会错过更好的模型。因此,在优化过程中寻找好的超参数和超参数调节方法成为建模的关键。
在这篇博客中,我想讨论基于群体的训练,以及由DeepMind提出的、受遗传算法启发的超参数调整时间表。
从数学上讲,模型由模型参数$\θ$组成,我们的目标是最大化或最小化一个评估目标$Q(\θ)$。通常,此$q(\theta)$已经包含整个模型、验证数据和性能指标。例如,机器翻译的评估目标可以是将验证数据应用于模型,从模型获得输出,并使用模型输出和地面事实标签计算BLEU分数(性能度量)。评估目标$q(\theta)$对于模型参数$\theta$不一定是可微的,有时甚至可以是一个黑盒!
为了最大化或最小化评价目标$Q(\θ)$,我们需要使用一些优化技术来寻找优化的模型参数$\θ$。在实践中,我们不希望使用评估目标进行优化,或者评估目标$q(\θ)$不能直接用于优化。例如,评价目标使用的是验证数据,如果使用评价目标进行优化,优化后的模型在实际应用中的泛化能力通常较差。另一个常见的障碍是,一些优化技术要求评估目标$q(\θ)$相对于模型参数$\θ$是可微的,但有时情况并非如此。
由于评价目标$q(\theta)$不能直接用于优化,我们提出了一个代理目标$\hat{q}(\theta)$,希望通过对模型参数$\theta$优化$\hat{q}(\theta)$,也能达到良好的评价目标$q(\theta)$。在机器学习中,这个代理目标有时被称为训练目标,它包含训练数据,并且性能度量不必与评估目标中使用的度量相同。例如,我们在机器翻译模型训练中使用的性能度量是交叉熵的总和,而不是BLEU分数。
使用代理目标$\hat{q}(\theta)$,找到最大化或最小化$\hat{q}(\theta)$的最佳参数$\theta^{\ast}$不会奇迹般地发生。我们经常需要使用一些优化技术来寻找最优参数$\theta^{\ast}_{\hat{q}(\theta)}$。这些优化技术通常会引入辅助参数$h$(通常称为超参数)来帮助查找$theta^{\ast}$。因此,给定某些优化技术,代理目标变为$\hat{q}(\theta|h)$。超参数可以是一些著名的参数,如梯度下降的学习率和防止过拟合的正则化强度。然而,这也带来了一些问题。$\HAT{q}(\theta|h)$的最佳参数$\theta^{\ast}_{\hat{q}(\theta|h)}$可能与我们真正关心的$q(\theta)$的最佳参数$\theta^{\ast}_{q(\theta)}$不同。不同的$h$将导致不同的$\theta^{\ast}_{\hat{q}(\theta|h)}$,从而导致不同的$q(\theta^{\ast}_{\hat{q}(\theta|h)})$的值可能接近也可能不接近$q(\theta^{\ast}_{q(\theta)})$。
假设优化技术将为$\hat{q}(\theta|h)$提供良好的$\theta$,有时甚至可能是最优参数$\theta^{\ast}_{\hat{q}(\theta|h)}$,我们如何调整超参数$h$以使$q(\theta)$尽可能接近$q(\theta^{\ast}_{q(\theta)})$?基于群体的训练,利用超参数的进化,正试图解决这一问题。
在我们讨论基于群体的训练之前,我们想简要回顾一下人们通常是如何进行超参数调整的。
顺序超参数调整方法对人类来说是最繁琐的,但使用的计算资源最少。我们使用一组超参数来训练和评估模型。在评估的基础上,我们调整超参数并开始下一轮训练。我们在整个调优过程中只运行一个训练实例,但可能需要很长时间才能找到我们感到满意的好模型。
并行超参数调优方法受计算资源的限制。我们针对不同的超参数异步运行多个训练实例,找到给出最佳评价的最佳超参数。在我看来,这种方法很难被称为“调优”,因为实际上根本没有调优。我们可以运行的训练实例的数量和我们要探索的超参数的数量完全取决于我们拥有多少计算资源和一个训练实例需要多少计算资源。
基于群体的超参数整定方法是序贯方法和并行方法的结合,用遗传算法的自动化代替了序贯方法中的人工干预。我们使用不同的超参数$h_0$异步运行多个训练实例,并且每个训练实例都在迭代地更新模型参数$\θ$。在训练过程中的某个时刻,我们比较所有训练实例的性能,找出性能最好的一个。其余的训练实例将开始使用与最佳训练实例使用的模型参数$\theta$和超级参数$h$完全相同的模型参数,这称为“利用”。那么,除了最佳训练实例之外的所有训练实例的超参数$h$都会发生某种突变,这称为“探索”。具体地说,“利用”是指使用最佳训练实例对所有训练实例使用的最佳配置,“探索”是指对除最佳训练实例之外的所有训练实例的超参数进行变异。基于群体的训练的想法很简单,对于有遗传算法工作经验的人来说应该是非常熟悉的。
DeepMind作者准备了一个简单的例子来说明,在计算资源相同的情况下,基于群体的超参数调优方法与其他超参数调优方法(如网格搜索)有何不同。
其中$\theta_0$和$\theta_1$是模型参数。评估目标被视为一个黑盒,我们将其抛入$\theta_0$和$\theta_1$,并生成分数。当$\theta_0=0$和$\theta_0=1$时,它可以达到的最大评估分数为$1.2$。
其中$h_0$和$h_1$是超参数。在给定超参数$h_0$和$h_1$以及初始参数$\theta_0$和$\theta_1$的情况下,我们将以固定的学习率$\eta$迭代使用梯度上升来优化此代理目标。
幸运的是,代理目标与黑箱评估目标非常接近。如果我们能够比较幸运地使用超参数$h0=1$和$h1=1$,那么优化代理目标就等同于优化评价目标,我们最有可能获得最高的评价得分。
我们获得了允许同时运行两个训练实例的计算资源。这一次,我们又不是特别幸运了。我们分别使用$h0=1,h1=0$和${h0=0,h1=1$作为两个训练实例的初始超参数。我们要检查在计算资源相同的情况下,哪种超参数调优方法会产生最佳的评估分数。
为了使其“公平”,应该使用参数$\theta_0=0.9$和$\theta_1=0.9$来初始化模型,并且每个训练实例仅允许使用梯度上升来更新超参数$40$次。作者没有提到要使用的学习率$\eta$,但是对于所有超参数调优方法中的所有训练实例都是相同的。
DeepMind的作者创建了等高线图,以使其易于理解。地块中的区域越亮,评估分数就越高。一个训练实例使用黑色节点表示,其中每个节点表示每个更新迭代的模型参数。另一个训练实例用红色节点表示。在一个等高线图中总共有$2\x 40=80$节点。
对于网格搜索,由于在训练过程中没有实际的超参数调整,因此两个训练实例的$h0$和$h1$保持相同,并且评估得分远低于可能的最大值$1.2$。事实上,无论它进行多少次梯度上升迭代,它都永远不会达到或接近1.2美元。这是在性能较差的模型中,网格搜索结果计算资源不足的典型例子。
基于人口的培训计划每5美元梯度上升迭代进行一次勘探和开采。无论是否令人惊讶,它都接近$40$梯度上升迭代中可能的最大值$1.2$。从以人口为基础的培训中剔除勘探或开发也进行了调查。用这两种方法训练的模型都不比由完整的基于总体的训练训练的模型在$40美元的梯度上升迭代中训练得好。
应该注意的是,作者使用的探索并不纯粹是随机的。否则,探索可能会导致超参数$h0$和$h1$的值为负值,并导致优化偏离最大评估分数。
一些模型可以用动态改变的超参数而不是在整个训练过程中固定的超参数来更好地训练。用于神经网络优化的学习率衰减就是一个典型的例子。
我们能用最好的最终超参数从基于群体的训练中复制出最好的模型吗?
不是的。为了再现最佳模型参数的训练,我们需要知道其超参数调整轨迹是如何贯穿于基于群体的训练中的。
不是的。模型本身没有超参数$h$。它只有参数$\theta$。因此,当基于总体的训练完成时,我们只能保存模型参数$\theta$的副本,而忽略超参数$h$。
从理论上讲,我们可以使用任何迭代优化方法,例如梯度下降,用于基于种群的训练。DeepMind已经表明,基于群体的训练对于使用梯度下降的神经网络优化非常有效。没有证据表明,基于群体的训练可以用于其他迭代优化方法。但是,这并不妨碍您在基于群体的培训中使用您感兴趣的迭代优化方法。
我记得当我在大学的时候,神经网络和梯度下降被证明对解决实际问题没有帮助,我们使用遗传算法来优化模型,模型不必是可微的。虽然DeepMind没有发明遗传算法,基于群体的训练思想与传统的遗传算法几乎完全相同,但它是第一种将遗传算法与另一种可以是梯度下降的优化算法相结合的优化方法,用于解决实际中的神经网络优化问题。
分布式应用程序库Ray有一个子库Tune,用于基于分布式人口的培训。从程序员的角度来看,这可能会使优化变得更容易。