如何为您的机器学习项目选择最佳学习率
我们在深入学习项目时面临的一个常见问题是选择学习速率和优化器(超参数)。
为了更好地理解优化器和学习速率选择的影响,我训练了相同的模型500次。结果表明,正确的超参数对培训成功至关重要,但难以发现。
在本文中,我将讨论使用自动方法来选择最佳超参数的解决方案。
实验设置
我从TensorFlow的教程系列中学习识别MNIST数字的基本卷积神经网络。这是一个相当小的网络,具有两个卷积层和两个密集层,总共需要训练约3,400个重量。每次训练使用相同的随机种子。
应该指出,下面的结果是针对一个特定的模型和数据集。其他模型和数据集的理想超参数会有所不同。
哪种学习速率最适合?
我们要研究的第一件事是学习率如何影响模型训练。在每次运行中,相同的模型都是从零开始训练的,只改变优化器和学习速率。
该模型是用6种不同的算法:梯度下降,Adam,Adagrad,adadelta,RMS的支柱,和动力。对于每个优化器,它用48种不同的学习率来训练,在对数间隔上从0.000001到100。
在每次运行中,网络都要进行培训,直至达到至少97%的训练准确度。最长允许的时间是120秒。实验在由FloydHub主持的Nvidia Tesla K80上运行。
我们可以看到:
对于每一个优化器,大多数学习率都无法训练模型。
每个优化器都有一个山谷形状:学习速率太低,学习速度永远不会进步,太高的学习速度会导致不稳定并且永远不会收敛。在这之间,有一段“正确”的学习率成功训练。
没有学习速度适用于所有优化器。
学习率可以影响训练时间一个数量级。
综上所述,选择正确的学习率至关重要。否则,您的网络将无法训练,或需要更长时间才能收敛。
为了说明每个优化器在最优学习率方面的差异,在所有优化器中,这里是针对每个学习速率训练的最快和最慢的模型。请注意,整个图中最大时间为120秒(例如,网络失败未能训练) - 没有单一学习速率适用于每个优化器:
查看从上面的图表中可以获得成功的广泛的学习率(从0.001到30),至少有一个优化器。
哪个优化器性能最好?
现在我们已经确定了每个优化器的最佳学习率,下面我们将每个优化器训练的性能与上一节中找到的最佳学习率进行比较。
以下是每个优化器随时间推移的验证准确度。这让我们可以观察到每个操作的执行速度,准确性和稳定性:
几点意见:
所有的优化器,除了RMSProp (见最后一点),都能在合理的时间内收敛。
Adam 学得最快。
Adam 比其他优化器更稳定,并且不会在准确性方面出现严重下降。
RMSProp使用TensorFlow的默认参数(衰减率0.9,epseon 1e-10,动量0.0)运行,并且可能出现这种情况,这些对于此任务不起作用。对于自动化超参数搜索来说,这是一个很好的用例(关于这一点,请参见最后一节)。
Adam在之前的实验中也有相对广泛的成功学习率。总体而言,亚当是我们六个优化器的最佳选择,用于此模型和数据集。
模型大小如何影响训练时间?
现在让我们看看模型的大小如何影响它如何训练。
我们将通过线性因子改变模型的大小。该因子将线性缩放卷积滤波器的数量和第一个密集层的宽度,从而近似线性缩放模型中的权重总数。
我们将研究两个方面:
随着模型的增长,训练时间如何变化,对于固定优化器和训练速率?
对于固定优化器,哪种学习速率在每种模型的大小上训练速度最快?
随着模型的增长,培训时间如何变化?
以下显示了在模型上达到96%训练准确度所需的时间,将其大小从1x增加到10x。我们使用了以前最成功的超参数之一:
训练时间随着模型大小线性增长。
相同的学习率成功地训练了所有模型尺寸的网络。
(注意:以下结果只能用于此处测试的数据集和模型,但可能值得您的实验测试。)
这是一个不错的结果。我们对超参数的选择并未通过对模型进行线性缩放而失效。这可能暗示可以在缩小版网络上执行超参数搜索,以节省计算时间。
这也表明,随着网络规模越来越大,在模型收敛中不会产生任何O(n2)工作(时间的线性增长可以通过每个体重训练产生的额外操作来解释)。
这个结果更令人放心,因为它表明我们深度的学习框架(这里是TensorFlow)可以高效地扩展。
哪种学习率对不同大小的模型表现最佳?
让我们针对多个学习率运行相同的实验,并查看训练时间如何响应模型大小:
学习率0.0005,0.001,0.00146表现最好 - 这些在第一个实验中表现最好。我们在这里看到与第一个实验相同的“甜蜜点”乐队。
每种学习率的训练时间随着模型大小而线性增长。
学习率表现并不取决于模型大小。对于1x尺寸表现最佳的相同率对于10x尺寸表现最佳。
在0.001以上,提高学习率增加了训练时间,并增加了训练时间方差(与模型尺寸的线性函数相比)。
对于具有n个权重,固定成本c和学习常数k = f(学习速率)的模型,训练时间大致可以模拟为c + kn。
总之,大小为1x的最佳学习率也是10x大小的最佳学习率。
自动选择学习率
正如前面的结果所显示的那样,模型训练对于优化器和学习率有很好的选择是至关重要的。
手动选择这些超参数非常耗时且易于出错。随着模型的改变,先前选择的超参数可能不再理想。用手持续进行新的搜索是不切实际的。
有很多方法可以自动选择超参数。我将在这里概述几种不同的方法。
Grid search
网格搜索是我们在第一个实验中执行的 - 为每个超参数创建一个可能值列表。然后,对于可能的超参数值的每个组合,训练网络并测量其执行方式。最好的超参数是那些提供最佳观察性能的参数。
网格搜索很容易实现和理解。验证您是否搜索了足够宽的参数搜索部分也很容易。由于这些原因,它在研究中非常受欢迎。
Population-based training
基于人口的培训(DeepMind)是使用遗传算法进行超参数选择的优雅实施。
在PBT中,创建了一组模型。他们都在不断训练并行。当任何人口有足够长的时间来训练以显示改善时,其验证的准确性与其他人相比。如果它的表现处于最低的20%,那么它复制并改变前20%表现者之一的超参数和变量。
通过这种方式,最成功的超参数会产生许多自身的略微变异的变体,并且可能会发现最好的超参数。