项目地址:https://github.com/google-research/tuning_playbook
「大量的实践经验已被提炼成这份强大的深度学习模型调参指南。」——Geoffrey Hinton
1 概述
这份指南的主要内容是调整超参数,也涉及深度学习训练的其他方面,例如 pipeline 实现和优化。指南假设机器学习问题是一个监督学习问题或自监督学习问题,但其中的一些规定也适用于其他类型的问题。
2 开始一个新项目的指引
2-1 选择模型结构
Summary: 开始一个新的项目时,重新使用一个经过验证的模型
- 选择一个常见的,经过验证的模型结构
- 模型可以通过不同的超参数来控制模型大小或者结构(层数、层宽、激活函数类型等)
- 找到一篇尽可能接近可以解决现有问题的论文,重现模型
2-2 选择优化器
Summary: 使用手头解决该类问题常见的优化器文章来源:https://uudwc.com/A/GyA6Z
- 没有一个优化器可以在不同类型的机器学习问题和模型结构上表现都良好
- 开始新项目时,选择经过验证或者流行的优化器
- 选择优化器时注意所选优化器的超参数
- 经过验证的优化器(SGD with momentum, Adam and NAdam)
2-3 选择 batch size
Summary: batch size 影响训练速度,并且 batch size 不能直接用于校验集性能调优。理想的 batch size 通常为硬件所能支持的最大 batch size。文章来源地址https://uudwc.com/A/GyA6Z
- batch size影响训练速度和计算资源
- 增大batch size减少训练时间。
- 增大batch size可能增大、减少或者不改变计算资源
- batch size不能作为直接调节校验集性能的超参数。这是因为1)在其他超参数调优好和迭代次数充足的情况下,batch size大小不影响最终性能。
2-4 选择 initial configuration
- 决定初始配置需要手动设定或者反复调试
- 指导原则是找到一个简单相对快速和低资源消耗的参数配置获得一个“合理”的结果
- 训练步骤数的选择需要平衡性能和效率
3 提高模型性能的科学方法
- 增量调整策略:以一个简单配置开始,逐渐增加可以提升性能的配置。
- 探索与利用:大多数时间我们需要深入了解问题
- 选择下一轮实验的目标:每次试验应该有一个明确的验证目标。
- 设计下一轮实验:实验目标是确定哪些超参数是有效的、妨碍的和固定的。
4 确定每次训练的步骤数
4-1 计算资源不受限时的训练时长确定
- 目标是在获得最好性能的同时避免迭代太多次
- 训练时间越长,性能不应该出现下降
- 试验过程,不要轻易改变max_train_steps
- 当模型结构或者数据改变时,理想的训练迭代次数也会随之改变
- 如果使用数据增强或者正则化技术时,需要增大max_train_steps,如果找到一个好的optimizer或者学习率时,调低max_train_steps
4-2 计算资源受限时的训练时长确定
- 通过大量小的实验来获得好的模型
- 多轮调整增加,限制每次试验的训练步长是一种明智的方法
- 采用较短的运行时间以找到良好的模型和优化器超参数
- 在好的超参数点上运行较少时长以获得最终模型
- 很大的困难是如果调节 learning rate 退化策略
5 其他指导准则
- 优化输入管道:输入管道受限的原因和干预措施高度依赖于任务,使用探查器并查找常见问题。
- 评估模型性能:以固定的步骤间隔(而不是固定的时间间隔)评估模型性能
- 保存checkpoints便于回顾选择最好的checkpoints
- 设置实验记录:做不同的实验时,做好实验记录(如:实验中最佳表现的checkpoints,以及实验的简短描述)
- Batch normalization实现细节:当前Batch normalization通常可以用LayerNorm替换,但在无法替换时,需要注意Batch normalization 的 batch size 或服务器数量。
- 多服务器考虑因素:多服务器会带来很多问题(如logging, evals, RNGs, checkpointing, and data sharding)