如何选择神经网络中的超参数

超参数的选择一直是神经网络设计中的难点,本文介绍一些基本的方法,欢迎拍砖。

启发式策略

对于新拿到的一个训练集,我们首先的目的是:训练出来的结果至少要比随机要好

初看这个目的很简单,但实际上很困难,尤其是遇到一种新类型的问题时。

简化数据集

例如,如果我们处理MNIST分类集,我们可以只处理0,1两个数字的集合,这样,不仅简化了分类目的,也能让神经网络的训练速度得到5倍的提升。

当使用更简单的分类集时,我们能更好的洞察神经网络的结构调整。

简化网络

我们应该从简单的网络开始进行训练,例如,只含一层的隐藏层,这样的训练速率更快,而且,若简单的网络都不能得到较好的结果,那么训练复杂的网络将会更加困难。

提高监控频率

我们可以在神经网络框架中每隔几百次epoch就打印当前的准确率,这样会让我们更好的洞察网络的拟合情况,提早发现过拟合或学习速率过慢等问题。

在每一步,我们使用验证集来衡量网络的性能,这些度量将会帮助我们找到更好的超参数。一旦准确率上升或者loss开始下降,就可以通过微调超参数获得快速的性能提升。

基本超参数

学习速率(learning rate)

对于学习速率,我们可以使用不同量级的参数(0.1,1,10等)先初步进行训练,根据loss的大小确定参数量级。

一般来说,我们使用验证集准确率来调整超参数,但在learning rate中倾向于使用loss,这是因为学习速率的主要目的是控制梯度下降的步长,监控训练loss是最好的检验步长过大的方法。

学习速率调整

一直以来,我们都将学习速率设置成常数。但通常来讲,可变的学习速率更加有效。

  • 在学习的前期,学习速率比较大,可以让训练变快
  • 在准确率开始变差或者不变时,按照某个量依次减少学习速率(除以10)。

规范化参数

在开始时不包含规范化参数,直到确定了学习速率后,在根据验证数据来选择好的 规范化参数。一般规范化参数从1开始调整。

迭代期(epoch)

Early stopping表示在每个回合的最后,我们都要计算验证集上的分类准确率。当准确率不再提升,就终止训练。

但一般来说,在训练过程中总会存在波动,每次准确率下降一点点就直接终止不是一个好的策略。一般来说,当分类准确率在一段时间内不再提升的时候终止比较好。

这样,使用Early stopping就可以简单的选择迭代期。

Mini Batch

如果值太小,不会用到并行计算的资源,速度也不会有所提升,倒会使得学习缓慢;

如果值太大,则不能够频繁的更新权重。

经验表明,Mini Batch其实时一个相对独立的参数,可以将其他参数选取合适的值之后,再来根据训练集准确率调整。

随机梯度下降的改进

Hessian技术

实际上就是二阶导的矩阵,理论上来说Hessian方法比标准的SGD收敛速度更快。

Momentum

我们可以认为这种方法引入了类似于摩擦力的量,使得梯度下降变化规则从原始的

w w = w η C 变为:

v v = μ v + η C

w = w + v

其中, η 是用来控制阻碍或者摩擦力的量的超参数。

以上的公式可以理解为,力 C 改变了速度 v ,速度再控制 w 的变化率。

η 被称为moment coefficient,在物理中为动量。

猜你喜欢

转载自blog.csdn.net/crazy_scott/article/details/80574241
今日推荐