神经网络调参技巧

    对于神经网络的调试,如何找到一组合适的超参数呢,下面分享一些神经网络调参的方法与技巧。

在使用神经网络时有许多参数需要调整,比如学习速率、Momentum(动量梯度下降法)的参数beta,Adam优化算法的参数,beta1,beta2,神经网络层数,不同层中隐藏单元数量,学习率衰减等。这些参数的调整也是有优先级顺序的,其中的一些应该优先调整,而另一些可能完全不用调整。

   首先应该调整的是学习率alpha。在尝试多个不同的超参数时,主要有grid Search和random Search两种方法可以选择(sklearn中有GridSearchCV和RandomSearchCV可以使用)。gird Search是网格搜索,对于要调整的超参数,我们可以给定一组候选值,网格搜索会对这些候选值依次进行组合,最后选出最优的那种参数组合。random Search是随机搜索超参数,对于要调整的超参数,给定参数范围,在其中随机的选取若干个超参数进行尝试,最终选出最优的超参数组合。grid Search的有点是可以让你清楚的看到模型预测的效果是如何随着参数的变化而变化的,但是在相同的迭代次数内,random Search通常可以更快的找到合适的超参数。在深度学习中,更推荐适应random Search去搜索超参数。使用random Search的关键是要为超参数选择一个合适的范围,对于学习速率来说,通常其范围可能在0.0001到1之间。如果直接在这个范围内搜索的话,那么有90%以上的值都会落在0.1-1这个区间内。这显然是不合理的,使用random Search应该使参数均匀的落在各个区间内,对于上例来说,应该使参数落在0.0001-0.001、0.001-0.1、0.1-1之间的概率相同。所以这里应该对参数做一个取对数的变换,设要搜索的数值为r,参数为a,使r=lg(a),因为a的范围是0.0001-1,即10^-3-10^0,所以r的取值范围为[-3,0],这样变换后就可以保证在要搜索的各个参数区间内取到值的概率都是相同的。

    其次需要调整的参数为mini-batch的大小,隐藏单元的数量,以及Momentum优化算法的参数beta。对于beta的搜索,其取值分为可以设定为0.9-0.999,这时对其做变换,先用1-beta值,这时取值范围变为0.001-0.1,在做对数变换,即可。对于超参数的搜索,另一个惯例是采用从粗糙到精细的策略。比如对于超参数beta,现在0.9-0.999上进行10次搜索,可能发现参数在0.995附近效果比较好,那么下一步可以再在0.99-0.999上进行10次参数搜索,或许可以找到效果更好的超参数。

    再次需要调整的参数为神经网络层数,学习率衰减等,而其他的一些优化算法如Adam中的beta1,beta2等参数一般不用调整,使用默认值就可以。

你可能感兴趣的:(Deep,Learning,Deep,Learning)