深度学习如何选择超参数

大部分深度学习算法都有许多超参数来控制不同方面的算法表现。有些超参数会影响算法的运行的时间和存储成本,有些超参数会影响学习到的模型质量以及在新输入上推断正确结果的能力。
有两种选择超参数的基本方法:手动选择和自动选择。手动选择超参数需要了解超参数做了些什么,以及机器学习模型如何才能取得良好的泛化。自动选择超参数算法大大减少了了解这些想法的需求,但它们往往需要更高的计算成本。
手动设置超参数,我们必须了解超参数、训练误差、泛化误差和计算资源(内存和运行时间)之间的关系。这需要切实了解一个学习算法有效容量的基础概念。
手动搜索超参数的目标通常是最小化受限于运行时间和内存预算的泛化误差。我们不去探讨如何确定各种超参数对运行时间和内存的影响,因为这高度依赖于平台。
手动搜索超参数的的主要目标是调整参数模型的有效容量以匹配任务的复杂性。有效容量受限于3个因素:模型的表示容量、学习算法成功最小化训练模型代价函数的能力,以及代价函数和训练过程正则化模型的程度。具有更多网络层、每层有更多隐藏单元的模型具有较高的表示能力——能够表示更复杂的函数。然而,如果训练算法不能找到某个合适的函数来最小化训练代价,或是正则化项(如权重衰减)拍出来这些合适的函数,那么即使模型的表达能力较高,也不能学习出合适的函数。
当泛化误差以某个超参数为变量,作为函数绘制出来时,通常会表现为U形曲线。在某个极端情况下,超参数对应着低容量,并且泛化误差由于训练误差较大而很高。这便是欠拟合的情况。另一种极端情况,超参数对应着高容量,并且泛化误差由于训练误差和测试误差之间的差距很大而很高。最优的模型容量位于曲线中间的某个位置,能够达到最低可能的泛化误差,由某个中等的泛化误差和某个中等的训练误差相加构成。
对于某些超参数,当超参数数值太大时,会发生过拟合。例如中间层隐藏单元的数量,增加数量能提高模型的容量,容易发生过拟合。对于某些超参数,当超参数数值太小时,也会发生过拟合。例如,最小权重衰减系数允许为零,此时学习算法具有较大的有效容量,反而容易过拟合。
并非每个超参数都对应着完整的U形曲线。很多超参数是离散的,如中间层单元数目或是maxout单元中线性元件的数目,这种情况只能沿曲线探索一点点。有些超参数是二值的。通常这些超参数用来指定是否使用学习算法中的一些可选部分,如预处理步骤减去均值并除以标准差来标准化输入特征。这些超参数只能探索曲线上的两点。其他一些超参数可能会有最小值或最大值,限制其探索曲线的某些部分。例如,权重衰减系数最小是零。这意味着,如果权重衰减系数为零时模型欠拟合,那么我们将无法通过修改权重衰减系数探索过拟合区域。换言之,有些超参数只能减少模型容量。
学习率可能是最重要的超参数。如果只有时间调整一个超参数,那就调整学习率。相比其他超参数,它以一种更复杂的方式控制模型的有效容量——当学习率适合优化问题时,模型的有效容量最高,此时学习率是正确的,既不是特别大也不是特别小。学习率关于训练误差具有U形曲线。当学习率过大时,梯度下降可能会不经意地增加而非减少误差。在理想化的二次情况下,如果学习率是最佳值的两倍大时,则会发生这种情况。当学习率太小,训练不仅慢,还有可能永久停留在一个很高的训练误差上。
调整学习率外的其他参数时,需要同时监测训练误差和测试误差,以判断模型是否过拟合或欠拟合,然后适当调整其容量。
如果训练集错误率大于目标错误率,那么只能增加模型容量以改进模型。如果没有使用正则化,并且确信优化算法正确运行,那么有必要添加更多的网络层或隐藏单元。这种方法的不足就是增加了模型的计算代价。
如果测试集误差大于目标错误率,那么可以采取两个方法。测试误差时训练误差和测试误差之间差距和训练误差的总和。寻找最佳的测试误差需要权衡这些数值。当训练误差较小(因此容量较大),测试误差主要取决于训练误差和测试误差之间的差距时,通常神经网络效果最高。此时目标时缩小这一差距,使训练误差的增长速率不快于差距减小的速率。要减少这个差距,我们可以改变正则化超参数,以减少有效的模型容量,如添加Dropout或权重衰减策略。通常,最佳性能来自正则化得很好的大规模模型,比如使用Dropout的神经网络。
注:文章摘选自《Deep Learning》Iran Goodfellow著

你可能感兴趣的:(pytorch深度学习,深度学习,算法,人工智能)