专栏名称: 计算机视觉深度学习和自动驾驶
讨论计算机视觉、深度学习和自动驾驶的技术发展和挑战
目录
相关文章推荐
算法爱好者  ·  惊!小偷“零元购”后竟向 DeepSeek ... ·  20 小时前  
九章算法  ·  Meta学神刷题奥义!《LeetCode通关 ... ·  3 天前  
深圳发布  ·  9738家外企涌入,深圳成外资“头号宠儿” ·  昨天  
深圳特区报  ·  深圳影视产业蓄力起航! ·  昨天  
深圳特区报  ·  降了!降了!今年第一次! ·  3 天前  
51好读  ›  专栏  ›  计算机视觉深度学习和自动驾驶

大模型面经——大模型训练中超参数的设置与训练数据偏好

计算机视觉深度学习和自动驾驶  · 公众号  ·  · 2024-05-30 00:09

正文

技术总结专栏

作者:vivida



本篇主要从训练设置(batch size及优化器设置)、训练数据选择两大角度分享大模型训练与微调经验。


本篇开始填 大模型面经——超细节大模型训练与微调实操经验总结(上) 的坑,继续细节的讲讲大模型中训练和微调的经验。


本篇主要从训练设置(batch size及优化器设置)、训练数据选择两大角度来具体谈谈经验,下面是一个问题的快捷目录。


1. 训练大模型时,batch size如何设置比较合理,可以讲讲自己的思考

2. 如果batch size设置过小或过大分别会怎样?

3. 微调时优化器怎么设置好?

4. 预训练和微调时选择的训练数据分别有什么偏好,有没有一些建议?


batch size如何设置比较合理


我们知道,大模型训练或微调的过程中 batch size的设置本质上是取训练效率和模型的最终效果的平衡。


目前一些研究结果表明数据并行程度的临界点是存在的,我们这里先上一个结论:

batch size在一定临界值以内越大越好,超过临界值会开始收益持平或者递减;并且batch size需要跟其他超参数比如学习率、优化器搭配等相适配。


下面先给大家一些不同大模型中batch size的参考值:

  • OpenAI的GPT-3模型使用了约3500万个token的batch size;

  • 谷歌的PaLM模型使用了2048个样本的batch size;

  • llama3至少也使用了上千个样本的batch size。


下面我们基于openAI的一些研究工作,学习一下openAI是如何基于一些研究理论在后续scaling law工作中预测模型的最优batch size的:


1. 最优步长

各种研究结果表明实际是存在一个关于数据并行程度的临界点的,找到这个临界点,就可以有效的平衡训练的效率和模型的最终效果。


OpenAI 发现最优步长公式可以作如下表示:



注:B 为 batch size,Bnoise为 噪声尺度


2. 损失更新

我们基于第1步中最优步长(step size),现在开始改进最优化从含有噪声的梯度中获得的损失:



上述公式中我们主要观察真实梯度、步长和B的关系,可以得出:

1)无论如何准确地估计真实梯度,总存在一个最大步长

2) 批处理大小越大,优化模型的步长就越大 (有一个上限)


下面再来看两张比较经典的图,



上面的图说明了更大的批次模型可以取得更多提升。 但是当 batch size 太大时,我们会遇到收益递减的问题 (因为分母中的 1 开始占主导地位)。


3. 梯度尺度估计

OpenAI 的研究发现,噪声尺度可以通过以下方式估计:



其中,H 是参数的真实 Hessian 矩阵,C 是相对于梯度的每个示例的协方差矩阵,g 是真实梯度。


为了进一步简化这个方程,OpenAI作出了一个假设,即优化是完全 well-conditioned 的。

在这种情况下,Hessian 矩阵只是单位矩阵的倍数,噪声尺度简化就可以简化为以下形式:



该方程表明 噪声尺度等于个别梯度分量的方差之和,除以梯度的 norm。


4. 学习率视作temperature

之前说上述结论合理的前提,是在模型的 LR 是调的比较恰当的情况下。


这是因为 OpenAI 发现噪声尺度基本符合以下规律:



在使用 SGD 和小 batch 进行更新时,可以大概近似为



这表明



下面的图中可以看出规律



根据以 上的公式和图,我 们可以得知:

1. 高温度导致较小的噪声尺度。其中的直觉是在高温度下,相对于方差,梯度幅度较大。

2. 当学习率以一个常数因子衰减时,噪声尺度大致以相同的因子增长。因此, 如果学习率太小,噪声尺度将被放大。


OpenAI 使用上述结论,在模型训练推理中在后续的 scaling law 工作中预测了模型的最优 batch size 大小,具体如下图。



batch size设置过小或过大分别会怎样


1. 过小

更新方向(即对真实梯度的近似)会具有很高的方差,导致的梯度更新主要是噪声。 经过一些更新后,方差会相互抵消。

总体上推动模型朝着正确的方向前进,但个别更新可能不太有用,可以使用更大 batch size 进行更新。


2. 过大

当 batch size 非常大时,从训练数据中抽样的任何两组数据都会非常相似(因为它们几乎完全匹配真实梯度)


在这种情况下,增加 batch size 几乎不会改善性能,因为无法改进真实的梯度预测。


换句话说,需要在每一步中处理更多的数据,但并不能减少整个训练过程中的步数,这表明总体训练时间几乎没有改善, 还增加了总体的 FLOPS



上图,可以观察到更大的 batch size 通常对应较少的训练 step,但相应地需要增加处理的数据。

当 batch size 从 2048 翻倍时,达到同样性能所需要的 step 几乎没有任何改善,但需要花费两倍的计算资源。


再给一张谷歌的实验图:



Google 的经验研究也有类似的观察,即在固定的 epoch budget 下,当 batch size 达到临界值时,模型的性能会 batch size 的增加而降低。


微调时优化器怎么设置好?







请到「今天看啥」查看全文