吴恩达神经网络和深度学习-学习笔记-16-超参数的系统的调整方法
深度学习中需要调整的超参数值
关于训练深度最难的事情之一是要处理的参数的数量。
- 学习率α
- Adam优化函数中β1、β2、ε
- 网络层数
- 隐藏单元数
- 学习率衰减参数
- mini-batch size
最广泛的学习应用是学习率α,这是需要调试的最重要的超参数。其他参数的重要程度为红>黄>紫>蓝(Adam函数的参数一般不调)
超参数的系统的调整方法
参数为两个的时候对应二维的空间,参数为三个时对应三维空间,参数越多则对应空间越多。
下面以两个空间为例。
在早一代的机器学习算法中,常见做法是在网格中取点(如左图)。然后尝试所有这些点,选择哪个参数效果最好。
在深度学习领域,更好的方法是随机选择点。然后用随机点试验超参数的效果。
这么做的好处是,在不知道哪个超参数更重要的基础下,我们能检测25个独立的参数1的值(而不是左图的5个),从而更容易发现效果最好的那个(探究了更多的重要超参数的潜在值)。
另一个惯例是由粗糙到精细的策略:
如图所示
超参数的取值范围
随机取值并不是在有效值范围内的随机均匀取值。
而是选择合适的标尺(对数标尺)。
比如要在0.0001和1之间搜索合适的学习率α的值。按照默认的标尺,在0.0001和0.001之间会分配非常非常少的搜索资源(很少的随机点)(如第一条数轴)。
反而,用对数标尺搜索超参数更合理(如第二条数轴),这样在0.0001和0.001就会有足够的搜索点可用。
在Python中的实现见下图:
在更为常见的情况下,范围为[10a, 10b]。
我们可以对最小值和最大值分别取10的对数来得到a, b的值。再按照上图的方法用Python实现。
另一个示例如下:
至于为什么我们不用线性标尺来生成随机数,是因为效果和取值并不是线性变化。比如β在0.9000到0.9005中效果变化并不大,而在0.9990到0.9995中效果变化非常大,所以我们要在0.9990 ~ 0.9995内取更多的值,而在0.9000 ~ 0.9005少取一点值。
组织超参数搜索过程的建议和技巧
关于如何搜索超参数的问题,有两种重要但不同的思想流派。
一是你babysit一个模型,通常有庞大的数据集,但没有许多计算资源或足够的CPU和GPU的前提下,基本而言你只可以一次负担起试验一个模型或一小批数据。
这种情况下,即使当它在试验时,你也可以逐渐改良。
二是同时试验多种模型。设置一些超参数让他自己运行一天甚至多天。
这两个方式的选择,是由你拥有的计算资源决定的。
如果你拥有足够的计算机去平行试验许多模型,那绝对采用鱼子酱(第二种)方式,尝试不同的超参数看效果怎样。
但在一些应用领域(比如在线广告设置和计算机视觉领域),那里数据太多了,需要试验大量的模型。而同时试验大量的模型是很困难的。它的确是依赖于应用的过程,但我(吴恩达老师)看到那些应用熊猫(第一种)方式多一些的组织。