超参数的选择一直是神经网络设计中的难点,本文介绍一些基本的方法,欢迎拍砖。
启发式策略
对于新拿到的一个训练集,我们首先的目的是:训练出来的结果至少要比随机要好。
初看这个目的很简单,但实际上很困难,尤其是遇到一种新类型的问题时。
简化数据集
例如,如果我们处理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
我们可以认为这种方法引入了类似于摩擦力的量,使得梯度下降变化规则从原始的
变为:
其中, 是用来控制阻碍或者摩擦力的量的超参数。
以上的公式可以理解为,力 改变了速度 ,速度再控制 的变化率。
被称为moment coefficient
,在物理中为动量。