Deep Learning Tuning Playbook(中译版)
立即下载
资源介绍:
由五名研究人员和工程师组成的团队发布了《Deep Learning Tuning Playbook》,来自他们自己训练神经网络的实验结果以及工程师的一些实践建议,目前在Github上已有1.5k星。此版本为中文翻译版,提供给大家免费下载,因为本人知识水平有限,翻译过程中可能有误,随时欢迎大家指出错误,我会随时更正。
# 深度学习调参手册
*这不是一个官方支持的谷歌产品。*
**Varun Godbole†, George E. Dahl†, Justin Gilmer†, Christopher J. Shallue‡, Zachary Nado†**
† Google Research, Brain Team
‡ Harvard University
## Table of Contents
- [这份文件为谁准备?](#这份文件为谁准备?)
- [为什么需要调参手册?](#为什么需要调参手册?)
- [新项目指南](#新项目指南)
- [选择模型架构](#选择模型架构)
- [选择优化器](#选择优化器)
- [选择batch size](#选择batch size)
- [选择初始配置](#选择初始配置)
- [提高模型性能的科学方法](#提高模型性能的科学方法)
- [渐进式调整策略](#渐进式调整策略)
- [探索与开发](#探索与开发)
- [为下一轮实验选择目标](#为下一轮实验选择目标)
- [设计下一轮实验](#设计下一轮实验)
- [是否采用训练管道变化或超参数配置](#是否采用训练管道变化或超参数配置)
- [探索结束后](#探索结束后)
- [确定训练steps](#确定训练steps)
- [当训练不限时时应该训练多长时间](#当训练不限时时应该训练多长时间)
- [当训练由计算机控制时应该训练多长时间](#当训练由计算机控制时应该训练多长时间)
- [对训练管道的补充指导](#对训练管道的补充指导)
- [优化输入管道](#优化输入管道)
- [评估模型性能](#评估模型性能)
- [保存检查点并回视最佳检查点](#保存检查点并回视最佳检查点)
- [设置实验跟踪](#设置实验跟踪)
- [Batch normalization操作细节](#Batch normalization操作细节)
- [多主机管道的注意事项](#多主机管道的注意事项)
- [常见问题](#常见问题)
## 这份文件为谁准备?
这份文件是为深度学习模型性能极为感兴趣的工程师和研究人员(包括个人和团队)准备的。我们假设其有一定机器学习和深度学习概念及基本知识。
我们的重点是超参数调整过程。同时也触及了深度学习训练的其他方面,如管道实现和优化,但对这些方面的讲述并不完整。
我们假设机器学习问题是一个监督学习问题或看起来很像一个问题的东西(如自监督)。也就是说,本文中的一些建议可能适用于其他类型的问题。
## 为什么需要调参手册?
目前,要想让深度神经网络在实践中运行良好,需要付出惊人的努力和猜想。更糟糕的是,人们很少记录获得良好结果的设置。论文掩盖了导致其最终结果的过程,以呈现一个更干净的故事,而从事商业问题的机器学习工程师很少有时间概括他们的调参过程。教科书倾向于回避实践指导,优先考虑基本原则,即使其作者有必要应用工作经验来提供有效的建议。在准备创建这份文件时,我们找不到任何全面的说明来实际解释如何用深度学习获得好的结果。相反,我们在博客文章和社交媒体上发现了一些建议的片段,从研究论文的附录中窥见了一些技巧,偶尔有关于某个特定项目或管道的案例研究,还有很多困惑。 深度学习专家和不太熟练的从业者使用表面上类似的方法,但取得的结果间存在着巨大的差距。同时,这些专家也欣然承认他们所做的一些事情可能没有充分的理由。随着深度学习的成熟并对世界产生更大影响,社区需要更多资源,涵盖有用的设置,包括所有的实际细节,这对获得良好的结果至关重要。
我们是由5名研究人员和工程师组成的团队,他们已经在深度学习领域工作了很多年,其中一些人早在2006年就开始工作了。我们已经将深度学习应用于语音识别、天文学等各种问题,并在这一过程中学到了很多。这份文件是从我们自己训练神经网络、教导新的机器学习工程师以及为我们的同事提供深度学习实践建议的经验中发展出来的。 尽管看到深度学习从少数学术实验室实践的机器学习方法变成了为数十亿人使用的产品提供动力已经令人欣慰,但作为一门工程学科,深度学习仍然处于起步阶段,我们希望这份文件能鼓励其他人帮助该领域实现实验协议系统化。
这份文件是我们试图清理我们自己的深度学习方法时产生的,因此它代表了作者在写作时的观点,而不是任何形式的客观真理。我们自己在超参数调整方面的挣扎使其成为我们指导的一个重点,但我们也涵盖了在工作中遇到的其他重要问题(或看到的错误)。我们的意图是让这项工作成为一份活的文件,随着我们信仰的改变而不断成长和发展。例如,关于调试和减轻训练失败的材料,我们两年前是不能写的,因为它是基于最近的结果和正在进行的调查。不可避免地,我们的一些建议将需要更新,以考虑到新的结果和改进的工作流程。我们不知道最佳的深度学习配方,但在社区开始写下和辩论不同的过程之前,我们无法找到它。 为此,我们鼓励发现我们的建议有问题的读者提出代替意见,并提供令人信服的证据,以便我们能够更新手册。我们也希望看大可能有不同建议的指南和手册,以便我们能够作为一个社区努力实现最佳过程。 最后,任何标有🤖 的部分都是我们想做更多研究的地方。只有在尝试写完这本手册后,才完全明白在深度学习从业者的工作流程中可以找到多少有趣的和被忽视的研究问题
## 新项目指南
我们在调参过程中做出的许多决定可以在项目开始时做一次,只有在情况发生变化时才会偶尔重新审核。
我们的指导意见做出以下假设:
- 问题制定、数据清理等基本工作已经完成,在模型架构和训练配置上花时间是有意义的。
- 已经有一个管道设置好了,可以做训练和评估,而且很容易为各种感兴趣的模型执行训练和预测工作
- 适当的衡量标准已经被选择和实施。这些指标应尽可能地代表在部署环境中所测量的内容。
### 选择模型架构
***概述:*** *当开始一个新项目时,尽量重用一个已经工作的模型。*
- 选择一个成熟的、常用的模型架构,先让它工作起来。以后可以建立一个自定义模型
- 模型架构通常有各种超参数,决定模型的大小和其他细节(如层数、层宽、激活函数的类型)
- 因此,选择模型架构实际上意味着选择一个不同的模型系列(每个模型超参数的设置都只有一个)
- 我们将在[选择初始配置](#选择初始配置)和[提高模型性能的科学方法](#提高模型性能的科学方法)中考虑选择模型超参数的问题。
- 在可能的情况下,尽量找到一篇解决手头问题的论文,并以该模型为起点进行复制。
### 选择优化器
***概述:*** *从当前问题中最流行的优化器开始*
- 在所有类型的机器学习问题和模型架构中,没有哪个优化器是“最好”的。即使只是[comparing the performance of optimizers is a difficult task](https://arxiv.org/abs/1910.05446).🤖
- 我们建议使用成熟的、受欢迎的优化器,特别是在开始一个新项目时。
- 理想情况下,选择用于同类型问题最流行的优化器
- 对所选优化器的**所有**超参数给予关注。
- 具有更多超参数的优化器可能需要更多的调整努力来找到最佳配置。
- 这在项目的开始阶段尤其重要,因为我们正试图找到其他各种超参数�