深度学习--如何系统地调试并选择超参数

我们都知道,在深度学习乃至机器学习过程中,有很多超参数需要调试。本文主要介绍深度学习超参数调试方法。

各参数重要性排序(由重要到不重要),排序根据吴恩达所述:

学习率、隐藏层单元数、mini batch大小、隐层数、学习率衰减系数。

根据博主调试代码的经验,重要性排序如下:

隐层数、隐藏层单元数、mini batch大小、学习率、学习率衰减系数。

Andrew Ng说的情况适用于数据很多特征很多,我说的情况适用于数据不大(千级别数据)且特征较少(十级别特征)。

那么如何调试呢?

假设只有两个超参数需要调试,常见的做法为取一个网格:

深度学习--如何系统地调试并选择超参数

均匀取样,例如各取5个数值,总共25种情况,每一种都试一遍,取最优情况。

但在深度学习中,最好随机取值:

深度学习--如何系统地调试并选择超参数

原因很简单,因为深度学习的超参数很多,这样的话两种参数都可以同时尝试25种数值,更容易对比出哪一种参数对结果的影响更大。

如果有三个超参数需要调试,则取三维网格,以此类推。

而当你找到一个最优值的时候,放大这块区域,更加精确化地在此区域周围进行搜索:

深度学习--如何系统地调试并选择超参数

至于超参数如何如何随机取值呢?这个比较讲究了。

比如学习率,你认为取值范围为0.001到1之间,但是如果直接线性random的话,90%的值都会集中在0.1到1之间。而0.001到0.1之间只占很小的比值。

那怎么办呢?取对数。以10为底数,0.001取对数为4,1取对数为0,然后你再在0到4之间线性取值,再以10指数还原,便得到理想的随机值了。