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

#启发式策略

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

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

#简化数据集

例如,如果我们处理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 \to v' = \mu v +\eta \triangledown C$$

$$w′=w+v′$$

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

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

$\eta$被称为moment coefficient,在物理中为动量。

Load Comments?