当前位置: 首页 > article >正文

MeCo——给预训练数据增加源信息,就能减少33%的训练量并且提升效果

MeCo——给预训练数据增加源信息,就能减少33%的训练量并且提升效果
FesianXu 20250111 at Wechat Search Team

前言

最近看到一篇预训练的文章,只在每条预训练数据的前面加上一个源信息(即是该信息的URL信息),就能加速训练(+33%)并且提升下游任务的效果,本文进行阅读笔记。 如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢

  • 关键字:大模型预训练、源信息、加速训练、提升效果

∇ \nabla 联系方式:

  • e-mail: FesianXu@gmail.com
  • github: https://github.com/FesianXu
  • 知乎:https://www.zhihu.com/people/FesianXu
  • 微信公众号:机器学习杂货铺3号店

最佳阅读体验见: https://fesianxu.github.io/2025/01/11/MeCo-20250111/


Danqi Chen 在最新提交在Arxiv上的文章 [1] MeCO指出,如Fig 1所示,只需要在预训练数据的起始位置加上一个来源信息(URL),然后在最后10%的预训练中除去这个URL信息进行常规的预训练,这么一个简单的操作,对比常规的预训练过程就能获得下游任务的性能提升,并且训练加速33%。

在这里插入图片描述

Fig 1. 对于标准的预训练流程,只需要在预训练数据中加入该条数据对应的URL信息,然后在最后10%的训练中『冷却』,就能取得下游业务的性能收益,并且训练加速33%。

作者通过实验发现,这个提升能够稳定地在多个尺寸的LLM(600M、1.6B、3B、8B)中保持,有理由相信是一个普适的方法。整个方法也很简单,分为两个阶段:

  1. 在预训练前面的90%的训练过程中,在所有预训练数据中,在其起始处拼接上URL:xxxx \n\n的模板,其中的xxxx被称之为源信息(source infomation),是具体表示该数据来自于哪个URL的信息,可以是原始的URL,比如en.wikipedia.org,也可以是URL hash,甚至可以是第三方模型对该数据的分类信息, 后面的消融实验中验证不同源信息方式的效果。注意,在loss计算过程中,只计算原始的文档token的损失,而对新增的源信息进行掩膜。
  2. 为了让预训练模型能在不带有源信息的情况下使用,在最后训练量的10%中,作者将源信息去掉,然后进行常规的预训练操作,这个过程被称之为『冷却』(cooldown)。

作者做了一些试验验证该方法的有效性,为了充分验证,作者选取了10个下游任务数据集,如Fig 2所示,MeCo表示本文提出的方法,采用了160B的token训练量(比起Standard的240B的训练量,减少了33%),其中Standard表示采用DCLM预训练数据集的常规预训练过程,+Data sel表示采用了数据筛选方法(采用fastText文本分类器进行文本质量过滤,只选取前70%的样本,保留约160B的token),而+80B tokens表示对齐Standard的训练量,也就是在做了数据筛选的前提下进行继续训练,补齐训练量(笔者注:我个人的理解,文章里面并没有描述的很清楚)。

从结果来看,如果从预训练本身的维度,观察困惑度(PPL)指标,那么+80B tokens的效果是最好的,但是有趣的是,困惑度指标和下游任务指标并不是强相关的,这个从采用Standard+Data sel的对比上也能看出来。在下游任务中,表现最好的是本文提出的MeCo方法,平均获得了1个点的提升,而且对比基线采用的240B的训练量,只需要160B的训练量,节省了33%的训练成本。

在这里插入图片描述

Fig 2. 作者对在DCLM的160B个token上预训练一个1.6B参数量的语言模型的主要实验结果。MeCo显著优于标准预训练,并且在使用数据量少33%的情况下,达到了与240B token基线相当的平均性能。有趣的是,验证困惑度(PPL)与下游性能并不相关。

数据Scaling试验

我们再看到Fig 3, 具体看到对比标准预训练方式和MeCo方式,训练量和各个数据集下游表现(作者只挑了表现正向的数据集),能看出是随着训练量的提升,下游效果也是持续提升的,且MeCo的性能持续优于标准方法,这个证实了这个方法的稳定性,即是不依赖与特定的训练量后才能发挥效果,而是持续生效。

在这里插入图片描述

Fig 3. MeCo在DCLM上的1.6B参数模型训练过程中下游任务性能表现如下。MeCo的每个checkpoint在末尾都包含了一个使用16B token训练的冷却阶段。为了公平比较,基线和相应的MeCo checkpoint所使用的总token数是相同的。

模型Scaling试验

作者还对比了不同尺度模型的表现,如Fig 4.所示,从结果中能发现在不同尺度的模型(600M、1.6B、3B、8B)上,MeCo这种训练方式均提供了一致的正收益趋势。

在这里插入图片描述

Fig 4. MeCo在不同模型规模下的结果(除8B模型外,其他模型均在DCLM的160B token上训练,8B模型由于资源限制在80B token上训练)。

由于以上的试验均采用的是DCLM这个预训练语料,为了探究MeCo是否在其他语料上也能同样生效,如图Fig 5所示,作者在C4、RefinedWeb上补充了这个试验,同样都能发现MeCo带来的下游任务的收益。

在这里插入图片描述

Fig 5. 在不同预训练语料库上应用MeCo的结果(1.6B参数模型,160B token),MeCo在不同预训练来源上均提供了一致趋势的收益。

有趣的是,采用了MeCo与训练后,模型还具有所谓“条件推理”(conditional inference)的能力,如Fig 6所示,只需要在特定的任务下,添加一个适当的URL前缀(这个URL并不需要是一个真实的URL,只需要在语义上能提供一些问题的分类或者需求信息),就能提升下游任务的效果。如Fig 7所示,一个合适的URL能带来大幅度的下游任务提升,但是一个不合适的url,则会带来大幅度的性能折损,笔者理解,从某种意义上说,这是一种meta prompt,对整个prompt的调性和类别、需求等进行了约束。

在这里插入图片描述

Fig 6. 条件推理的示例:我们可以通过在提示前添加一个URL来对模型进行条件设置。这个URL不需要是一个真实的网址。

在这里插入图片描述

Fig 7. MeCo(1.6B参数,160B DCLM token)的零样本评估,使用不同URL展示了无条件推理与使用URL之间的差异。

作者还做了消融试验去探讨URL前缀的选择方式,如Fig 8所示,最后发现采用URL是最合适的,采用Full URL会带来输入长度的增长,效果没有明显变化,而采用了hash的URL则是性能持平(不过如果采用hash的话,条件推理的能力应该就没有了)。

在这里插入图片描述

Fig 8. 对MeCo使用不同元数据的消融实验。平均结果涵盖了所有10个任务。

笔者看下来,整篇文章的方法是很简单的,主要是做了很多试验去证实这个方法的有效性。从方法本身去看,也从某种意义上说明了对预训练数据进行某种标签体系分类的重要性,当然之前很多工作可能会尝试显式地进行数据打标签,并且通过数据配比的方式去影响预训练,而本文是一种隐式的方式去增加数据的类别信息,也即是增加一个来源信息,尝试让模型自己发现某些来源(比如维基百科)的信息可能更为靠谱。这里作者还举了一个例子,这说明了对于同一个主体Tim Cook,不同来源的数据差别很大,有些可能是非严肃的梗图,有些可能是新闻信息,如果混淆在一起进行预训练,会对下游业务带来困扰(比如下游模型可能会迷惑Tim Cook到底是不是会做饭)。从这个角度去思考,这个方法就是非常合理的,因为来自不同站点的信息调性会有很大差别,作为一种元信息,有必要作为预训练输入的一部分参与训练。

例如,关于苹果公司首席执行官蒂姆·库克的网络文档,从表情包“蒂姆不再做饭了(Tim doesn’t cook anymore )” 到传记“蒂姆·库克是苹果公司的首席执行官”(Tim Cook is the CEO of Apple )都有。

Reference

[1]. Gao, Tianyu, Alexander Wettig, Luxi He, Yihe Dong, Sadhika Malladi, and Danqi Chen. “Metadata Conditioning Accelerates Language Model Pre-training.” arXiv preprint arXiv:2501.01956 (2025). Aka MeCO


http://www.kler.cn/a/500722.html

相关文章:

  • MySQL 中联合索引相比单索引性能提升在哪?
  • uni-app (接入智谱清言语言模型)
  • 【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据
  • 选择器css
  • django基于Python的电影推荐系统
  • 9.4 visualStudio 2022 配置 cuda 和 torch (c++)
  • MYSQL-创建数据库 CREATE DATABASE (十一)
  • 蠕虫病毒会给服务器造成哪些危害?
  • vue3后台系统动态路由实现
  • centos 搭建nginx+配置域名+windows访问
  • Vue 开发者的 React 实战指南:性能优化篇
  • 【Ubuntu与Linux操作系统:九、Shell编程】
  • Perl语言的编程范式
  • 简历整理YH
  • Django 社团管理系统的设计与实现
  • SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
  • 如何在Go语言开发中实现高性能的分布式日志收集
  • 【微服务】面试 2、服务雪崩
  • 【网络】:网络编程套接字
  • 《机器学习》集成学习之随机森林
  • 双因素身份验证技术在NPI区域邮件安全管控上的解决思路
  • Java Web开发基础:HTML的深度解析与应用
  • 基于SSM实现的垃圾分类平台系统功能实现二
  • CSS3 弹性盒子
  • 第三十六章 Spring之假如让你来写MVC——拦截器篇
  • vue3树形组件+封装+应用