模型训练策略设计

1. 主流模型训练方法

目前,主要的模型训练方法有:批量梯度下降、小批量梯度下降和随机梯度下降三种。

其中,批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,在每次更新模型参数时,都使用所有样本来计算梯度。它易于并行实现,且在损失函数是凸函数时一定能找到全局最优解(凸优化);但实际情况下,损失函数往往不是标准凸函数(即非凸优化问题),此时使用全部样本的批量梯度下降容易陷入鞍点(局部最优解),而难以达到较好的训练效果。

随机梯度下降(Stochastic Gradient Descent,SGD)是每次更新模型参数时,仅随机抽取一条样本来计算梯度。其有点是计算速度快,且不易陷入局部最优解;但同时也因一条样本很难代表数据集整体的特点,所以梯度下降方向的随机性极大,很难在实际训练中很难取得很好的训练效果。

小批量梯度下降(Mini-Batch Gradient Descent, MBGD)综合两者所长,在每次更新模型参数时,都使用一个特定数量大小的样本子集来计算梯度,这个子集的大小称为批量大小(batch_size)。它在实际训练中不容易陷入局部最优解(鞍点),且梯度下降方向的随机性大小可控,能在实际训练中取得很好的效果,是目前最主流的模型训练方法。

2. 小批量梯度下降中的超参数

2.1 优化算法

神经网络中,常见的优化算法如下表所示:

优化器收敛速度收敛质量
SGD
SGD一般
SGD一般
Adagrad不好
RMSprop好/一般
Adam好/一般
Nadam好/一般
AdaMax好/一般

其中,训练神经网络模型默认使用Adam优化器,它在大多数情况下,已可以很好地满足模型训练需求;此外,也有一些数据集可能对自适应梯度过敏,此时可改用其他优化算法(但这种情况并不多见)。

2.2 学习率(learn rate)

找到一个好的学习率非常重要,如果学习率设置的过高,训练可能会发散1(loss高位运行,降不下来);如果设置的过低,虽然最终能收敛到最优解,但训练速度过慢、浪费了极多的时间成本。出于实验耗时的从短到长考虑,一般从大到小来探究最为合适的学习率(一方面时大学习率模型训练速度快,此外学习率过大引起的训练发散也更容易在训练早期观测到)。

确定初始学习率后,在训练过程中还有两种学习率调整方法:1)随训练进程衰减,2)分层设置个性化学习率。

1)随训练进程衰减
随训练进程衰减,是时间维度上的学习率调整方案,其原理是:随训练进程深入,模型参数已越来越接近理论上的最优参数,此时应更为细致缓慢地调整模型参数,以避免错过最优解。

2)分层设置个性化学习率
分层设置个性化学习率,是空间维度上的学习率调整方案,它主要用于迁移学习中对预训练模型的微调时。其理论基础是:深层网络模型中,随网络深度增加,每层网络学习到的特征由抽象到具体、由普适基础到任务特异性。

因此,在迁移学习过程中,越浅层网络的重用通用性越强,越深层网络的任务特异性越重,所以对浅层网络应做较少的修改,使用更小的学习率,多深层网络应做较多的修改,使用更大的学习率,才能取得更好的训练效果。这就需要对网络的不同层,设置不同大小的学习率,这可通过在模型编译(compile)阶段,初始化多个不同学习率的优化器实现

2.3 可迭代周期(epochs)

可迭代周期(epochs),是允许对模型进行一次完整训练的最大次数,它保证模型可以得到充分训练(足够多的参数更新次数)。在小批量梯度下降法中,一次完整的模型训练由多个训练步(step)组成,每个训练步中,模型计算一个批次的小批量样本数据,并根据设定的梯度累积批次超参数,判断本训练步中是否(根据累积梯度)对模型参数进行更新;若有验证集数据,完成一次完整训练的所有训练步(step)后,还会评估一次模型在验证集数据上的表现,以测试模型是否已出现了过拟合。可理解为:验证模型是否已出现过拟合的最大次数。

周期(epoch)内包含多少个训练步,即可以由训练集数据量决定(训练集样本量 / 批量大小),以可以作为一个超参数训练时人工给定。

每周期中,模型参数的更新次数等于每周期训练步数除以批量大小和梯度累积批次的乘积( = steps_per_epoch / (batch_size * accum_batches) )。

2.4 每周期训练步数(steps_per_epoch)

每周期训练步数(steps_per_epoch),指定每次完整训练(epoch)中包含的训练步(step)数量,它等于每周期参数更新次数(updates_per_epoch)乘以累积训练步数(accum_steps)。

2.5 批量大小(batch_size)

批量大小(batch_size)是一个训练步中,模型并行处理的样本数量,它由硬件设备的内存(或显存)大小和参数更新批量大小(updats_batch_size)需求共同决定。

2.6 累积训练步数(accum_steps)

累积训练步数(accum_steps)是累积多少个训练步产生的梯度后,更新一次模型参数的判断阈值。它保证在硬件设备(的显存或内存大小)能支持的批量大小(batch_size)小于训练所需的参数更新批量大小(updats_batch_size)时,可以使用较小的批量大小(batch_size),并通过累积多个训练步的样本所产生的梯度,来达到同样的参数更新效果。

2. 参数更新批量大小(updats_batch_size)

参数更新批量大小(updats_batch_size)是更新一次模型参数,所需要的小批量(梯度下降)样本数量。它决定小批量梯度下降方向的随机程度,出现欠拟合时应减小参数更新批量大小(updats_batch_size),出现过拟合是应增大参数更新批量大小(updats_batch_size),且参数更新批量大小(updats_batch_size) = 批量大小(batch_size)* 累积训练步数(accum_steps)。

2.7 每周期参数更新次数(updates_per_epoch)

每周期参数更新次数(updates_per_epoch)是进行一次完整训练中,更新模型参数的次数。它保证模型不因某次训练过程中就出现了显著过拟合而得不到及时(在验证集上)评估,而错过最佳的模型参数(且错过最佳的提前停止时机)。


  1. 可详见《深度学习实战》一书的第317页的图11-8 ↩︎

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值