破解ChatGPT惊人耗电 DeepMind新算法训练提效13倍,能耗暴降10倍
破解ChatGPT惊人耗电 DeepMind新算法训练提效13倍,能耗暴降10倍
随着AI计算需求的膨胀,还需要用水来冷却计算系统。研究称,微软用水量从2021年到22年飙升了34%,ChatGPT每处理5-50个提示就会消耗接近半升水。针对这种现状,我们有更好的解决策略吗?最近,GoogleDeepMind研究团队提出了一种加快AI训练的新方法多模态对比学习与联合示例选择(JEST),大大减少了所需的计算资源和时间。JEST以13倍更少的迭代次数,以及10倍更少的计算量,超越了最先进的模型!预训练的参考模型,已经学习了什么样的数据是有“优质的”或“有用的”。然后通过模型,来引导数据选择那些精心筛选过的小型数据集。这一发现揭示了,数据筛选水平可以作为评判Scaling Law的一个新维度。网友激动表示,“我没想到这么快就会发生。模型能够自主选择训练数据的能力是巨大的,因为它使训练变得显著更容易,你不再需要猜测什么是高质量的训练数据,你有一个能够『理解』什么样的数据对自身学习最有价值的模型”。前Google、苹果软件工程师称赞道,这项研究非常令人印象深刻。从“超级batch”中筛选数据无论是语言、视觉还是多模态模型,数据质量是预训练性能的重要驱动因素。比如Phi-3、Gemma 2等模型的成功让我们看到了,更少、更高质量的数据有可能实现更强大的性能。要筛选出高质量的数据,数据管道的建立就成为重要的工作。现有的方法大体可以分为两种:1)手动管理 2)基于模型的数据管理,用正在训练模型的特征选择高质量数据。前者成本高昂且难以扩展,后者则有望为多模态LLM实现Scaling Law。然而,现有方法忽略了一个事实。如果仅在单个数据点的层面进行筛选,就没有考虑到数据集以及batch的总体组成。毕竟,训练数据是以batch为单位,数据点之间的依赖性不可忽视。许多计算机视觉的研究都曾表明,hard negatives(表达空间中相近但标签不同的样本)相比可被平凡解的数据簇,能提供更有效的学习信号。那么如何让模型以batch为单位筛选数据呢?论文提出的JEST算法正是要解决这个问题,原理很好理解:就是直接从“超级batch”中筛选出“子batch”。技术介绍用数学语言来描述这个问题,就是从大小为B的“超级batch”中提取出与学习最相关的子batch ℬ={,∈[1,…,]}⊂,过滤比率可以写作=1−/。之前的优先采样(prioritized sampling)会使用基于模型的评分函数对每个数据点打分,再按比例采样。JEST则直接对整个子batch评分,再按照batch级别的分数采样。一种最直观的启发式方法就是在现有模型参数 : hard(ℬ|)=ℓ(ℬ|) 中,直接选择损失值最高的batch,这种方法可被称之为“硬学习”(hard learner)。这种方法具有丢弃琐碎数据的理想属性,已被证明适用于小型、干净的数据集;然而对于较大、较少管理的数据集往往弊大于利,因为它依旧会采样到噪声数据。另一种方法常用于多模态,使用具有参数 ∗:^easy(ℬ|∗)=−ℓ(ℬ|∗) 的参考模型为预训练模型采样数据。但作者依旧否定了这个方案,因为它无法直接反映模型当前的状态,可能过度依赖参考模型的选择,而且不易于扩展。最后,论文选择借鉴ICML 2022年的一篇论文中提到的方法,将上述两方面的评分结合起来:^learn(ℬ|,∗)=hard(ℬ|)+^easy(ℬ|∗)=ℓ(ℬ|)−ℓ(ℬ|∗),并将这种启发式方法称为“可学习性评分”(learnability score)。其中,batch上的损失值ℓ(ℬ|)是各数据点之和,使用sigmoid对比损失函数计算(sigmoid-contrastive loss),因为相比softmax对比损失而言,它的扩展性更强。由于batch上的对比损失可以分解为每个样本的条件损失之和,因此可学习性评分可被分解为单个样本可学习性评分(|,∗,ℬ)之和,写作:使用的顺序采样方法则受到了block Gibbs采样的启发。在第n次迭代、对第B_n个batch进行采样时,依据如下概率公式对块{X_k}进行无替换采样:将X_k块添加到B_n中来更新当前采样的batch,直至迭代数n=N时终止。算法的总体流程如下图所示:实验中发现,使用迭代数N=16且每次迭代时独立采样b/N=2048个样本时,就足以恢复出学习性非常高的batch。可学习性评分中涉及到使用参考模型为数据点打分,之前的方法惯常使用额外的小型模型,但这会增加每次迭代的计算成本,降低总体FLOP效率增益。因此论文使用了在线模型近似的方法以及效率较高的FlexiViT架构,只使用降低分辨率的32×32的patch来评估“超级batch”,与全分辨率、patch大小为16×16的方法相比减少了72%的FLOP,以及67%的挂钟时间(wall-clock time)。此外,论文还提出了进行多分辨率训练的技巧。将每个batch随机分成两半,使用不同分辨率编码后再拼接起来,提升了评分过程和训练的效率。下图详细描述了全分辨率JEST和多分辨率Flexi-JEST方法的伪代码实现。所有JEST实验都在WebLI数据集上运行,包含经过宽松过滤的十亿规模的英语图像-文本对,参考模型的训练则使用其中经过高质量过滤100M大小的子集(被称为WebLI-curated)。在WebLI的基础上,作者还额外从网络上抓取了6亿个文本-图像对并经过同样强度的过滤,组成WebLI-curated++数据集训练参考模型,拓展出JEST++/FlexiJEST++方法,来探索对数据管理的扩展。论文所报告的平均性能包括4个多模态规范基准:ImageNet 0-Shot和10-Shot 分类以及COCO图像到文本和文本到图像的top-1检索。实验结果图1中可以看到,使用JEST或FlexiJEST方法的最明显优势就是效率提升。左图中,相比原有的SigLIP基线模型,JEST++可以在训练数据量减少13.1×的情况下达到相同准确率。即使考虑到额外引入的打分成本,也有近10×的FLOP效率提升(中图)。右图展现了JEST++/FlexiJEST++(绿色)与先前方法(灰色)的比较,相比CLIP、EVA-CLIP经典模型实现了计算成本和性能的双重提升。左图和中图的平均准确率由8个下游任务得出,右图性能由ImageNet和COCO基准测试得出产生可学习batch研究人员首先评估了JEST在选择可学习batch方面的效果。为了直观地理解这一方法,作者们先将可学习性矩阵进行可视化,即学习模型和参考模型之间,对batch中所有示例对的损失差异。JEST就是按照示例子矩阵的可学习性总和比例进行采样。由于矩阵明显非对角关系(图2,左),独立选择显然是次优的。经过少量迭代(对应于用N=16个块填充batch),作者发现子batch的可学习性快速增加,达到了需要数千次迭代的暴力吉布斯采样(Gibbs sampling )所提取batch的可学习性(图2,中)。对于0.5、0.8和0.9的过滤比例,他们从大小分别为65,536、163,840和327,680的超级batch中选择32,768个示例的子batch。在图2右侧,研究者还发现子batch的可学习性随着更大的过滤比例而增加。总之,JEST算法是在训练过程中选择高度可学习batch的有效,且高效的方法。加速多模态学习接下来,研究人员使用JEST算法选择的可学习batch,检验训练模型的效果。所有实验都使用在WebLI-curated上训练的参考模型,这是一个ViT-B/16和Bert-B图像-文本双编码器,30亿训练样本,采用sigmoid对比损失函数。图3(左)显示了在训练过程中多个下游任务(ImageNet 0-Shot/10-Shot准确率和COCO图像到文本/文本到图像检索)的平均性能。结果还发现,JEST显著加速了学习过程。在使用50%、80%和90%的过滤比例时,分别只需20亿、10亿和6.7亿训练样本就达到了30亿均匀基准的最终性能。在更大的过滤比例下,坐着观察到类似于更大batch size时的训练不稳定性,需要修改Adam优化器(β2 = 0.95)以稳定训练,这表明JEST的数据筛选可以被视为增加了有效batch ...
PC版:
手机版: