Posts 超参
Post
Cancel

超参

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式:

  • 遍历全部数据集计算一次损失函数,然后算函数对各个参数的梯度,更新梯度。

    这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。

  • 每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。

    这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

基本上现在的梯度下降都是基于mini-batch的。

batch size

epoch数目

epoch数目直接影响模型是欠拟合还是过拟合。

  • epoch过小,模型未训练到最优解就停止了训练,容易欠拟合;
  • epoch过大,模型训练时间过长,容易在训练集上过拟合,在测试集上达不到最优效果。

应根据训练过程中验证集上模型效果的变化情况,合理选择epoch数目。

warm-up

什么是warm-up

Warmup是一种学习率预热的方法。是指在训练的一开始选择一个较小的学习率,训练一定的epoch或者step后,再将学习率改为预设值来进行训练。

为什么使用warm-up

由于刚开始训练时,模型的权重是随机初始化的,此时若选择较大的学习率,可能带来模型的不稳定(震荡)。选择warmup预热学习率的方式,可以使得开始训练的几个epoch或者step内学习率较小,在小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后,再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。

This post is licensed under CC BY 4.0 by the author.