深度神经网络调优

发布时间 2023-08-07 12:26:41作者: wangssd

1.选择合适的模型架构

总结:当开始一个新的工程时,试着复用已经有效果的模型

1)首先,选择一个已经被广泛使用和建立起来的模型架构来先让其正常工作。可以在以后再建立一个定制化的模型。

2)模型架构一般都具有多种超参数,这些超参数决定了模型的尺寸和其他一些细节(如,层数,层 宽,激活函数的类型),因此选择一个架构,实际意味着选择一系列不同的模型         (一个模型架构对应的一系列超参 数的设置即为一族),我们将在选择初始配置和一个提升模型性能的科学方法中研究如何选择模型超参数的问题。

3)如果可能的话,试着寻找一篇与手头工作尽可能接近的论文,并复现该模型作为开始

 

2.选择优化器

总结:针对手头的问题,先从最流行的优化器开始

1)对于所有类型的机器学习问题和模型架构,没有哪个优化器是最优的。甚至,比较不同优化器也是 个困难的任务。

2)推荐稳健的流行的优化器,特别是当开始一个新的工程。 理想的是选择处理相同类型的问题时最流行的优化器。 应对所选择的优化器的所有超参数给予重视。

具有更多超参数的优化器可能需要更多的调节努力来寻找最佳设置。 这在项目的开始阶段尤其重要,因为我们正试图找到其他各种超参数(如架构超参数)的最佳值,同时将优化器超参数视为干扰参数。

 

3.选择batch size

总结:batch size控制着训练速度,不应被用于直接调节验证集的性能。通常,理想的batch size是现有硬件所支持的最大的batch size。

1)batch size是决定训练时间和计算资源消耗的关键参数

2)增加batch size通常可以降低训练时间。这是非常有用的,(因为: 在固定的时间间隔内,使得超参数可以被调节更彻底,潜在地导致更好的最终模型。 减小开发周期的等待时间,使得新的想法能够更频繁地被测试)

3)增加batch size可能会降低、增加或不改变资源消耗。

4)batch size不该被视作用于改变验证集性能的可调节超参数。 只要所有超参数已经被很好地调节(特别是学习速率和正则化超参数),以及训练步数是足够的,那么,对于任意batch size都能得到相同的最终性能(see Shallue et al. 2018)。

 

4.确定可行的batch size和估计训练吞吐量(throughput)

1)对于给定的模型和优化器,可用的硬件一般支持一定范围的batch size。这限制因素通常为加速器 (如图形处理器GPU和张量处理器TPU)的内存。不幸的是,如果没有运行完整的训练程序(或至少编译),很难计算哪些batch size适合内存。

最简单的解决方法,通常是用较少步数分别训练一系列不同batch size(例如,增加2的幂),直到其中一个job超过了现有内存。

2)对于每个batch size,我们应该训练足够长的时间来获得对训练吞吐量的可靠估计。

当加速器还没达到饱和,如果加倍batch size,则训练吞吐量也应加倍(或至少接近加倍)。相当 于,当batch size增加,每一步的时长应为恒值(至少近似恒值)

如果不是这种情况,那么训练管道会有其他瓶颈,如,IO或在计算节点间的同步。这值得在下一 步进行之前先诊断和修正。

如果训练吞吐量只增加到某个最大batch size大小,那么我们应该只考虑小于这个最大batch size 的batch size,即使硬件支持更大的batch size。

3)使用更大的batch size的好处是基于训练吞吐量会增加。如果没有满足这种假设,那么应修复 这些瓶颈或使用更小的batch size。 梯度累加模拟比硬件支持的最大batch size,因此,不会得到任何吞吐量的好处。这一般在实 际工作中应避免。 这些步骤可能在每次模型或优化器发生改变时都要重复进行(如,不同的模型架构可能运行更大的 batch size适合内存)

 

5.选择batch size来使得训练时间最小化

1)我们通常可以认为,对于所有可行的batch size,每个step的时间都是近似恒定的 (see the previous section关于如何鉴定训练瓶颈)。当并行计算没有开销并且所有训练瓶颈都已被诊断和纠正时,这是正确的。实际上,增加batch size通常至少会产生一些开销。

2)随着batch size的增加,达到固定性能目标所需的步数通常会减少(前提是当批量大小改变时,所 有相关的超参数都会重新调整;Shallue et al. 2018)

例如,加倍batch size可能会使得所需步数减半。这被称为是完美尺度化(perfect scaling)。 在达到临界batch size之前,完美尺度化对所有batch size都是成立的;超过该临界值后,得到的收益将递减。 最终,增加batch size不再减少训练所需步数(但从不会增加步数)。
因此,最小化训练时间的batch size,通常是仍能减小所需的训练步数的最大的batch size。

通常,可用硬件所支持的最大batch size会比临界batch size要小一些。因此,一个很好的经 验法则是(没有跑任何实验)尽可能使用最大的batch size。