我们知道,大模型训练或微调的过程中
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 大小,具体如下图。