深度网络调参

重要的超参数

深度学习网络有很多超参数,下面列出了一些比较重要,常常需要调节的超参数。

  • 最重要

学习率

  • 较重要

mini-batch size

hidden units

网络层数

动量参数

学习率衰减

算力不同的调参

算力不同、网络规模、数据量不同,也有不同的调参方法,当模型和计算量较小时,可以使用网格调参;在算力足够的情况下,使用多组参数并行训练模型;反之,如果算力不足,且模型和数据较大,可能需要手动调参,比如训练几天之后,手动下调学习率,动量等超参数,人为地逐渐推进训练过程。

网格调参和随机调参

机器学习中常使用网格调参,即将参数列成表格,按一定步长尝试所有组合的参数,这种方法适用于较小的网络。深度学习网络一般较大,训练时间较长,一般使用随机抽取方法,在重点区域进行更多的抽样(密度更大),这样在一开始不确定哪些超参数重要时,可以广撒网,越往后越有针对性,实现从粗到细调参,同时又兼顾各种可能性,以免陷入局部最优值,类似于蒙特卡洛方法。

非线性轴调参

非线性轴调参也是常见的调参问题,比如设置学习率常常是 0.1, 0.01, 0.001, 0.0001…这样就不能用直接将取值范围平均分成 n 份,每次增加同样步长的方法,如: 0.01, 0.02, 0.03…这样调节效果不好。在这种情况下常使用指数调参,如 Pytorch 提供的 ExponentialLR 方法。

另外,还有一些类似情况,比如参数的取值范围在 [0,1] 之间,可能在中段并不敏感,而在 0 或 1 附近非常敏感,也需要使用类似指数或者指数加权平均的累积调参方法。