大语言模型(LLM)如何更好地继续预训练(Continue PreTraining)

预训练(Pretraining)是一个非常消耗资源的工作,尤其在 LLM 时代。随着LLama2的开源,越来越多人都开始尝试在这个强大的英文基座模型上进行中文增强。但,我们如何才能保证模型在既学到「中文知识」的情况下,又不丢掉原有的「英文知识」

写在前面

预训练(Pretraining)是一个非常消耗资源的工作,尤其在 LLM 时代。随着LLama2的开源,越来越多人都开始尝试在这个强大的英文基座模型上进行中文增强。但,我们如何才能保证模型在既学到「中文知识」的情况下,又不丢掉原有的「英文知识」呢?

今天给大家带来一篇 Continue Pretraining 的论文(来自何枝大佬,知乎@何枝),Continual Pre-Training of Large Language Models: How to (re)warm your model?

知乎:https://zhuanlan.zhihu.com/p/654463331paper:https://arxiv.org/pdf/2308.04014.pdf

1.实验设定

作者使用一个 410M 大小的模型 Pythia,已经在 Pile数据上进行过预训练,然后在下游数据集 SlimPajama 上进行微调。

论文中直接使用 Loss 作为评估指标,即 Loss 越小,说明在上游(或下游)任务中的效果越强。

Pythia: https://huggingface.co/EleutherAI/pythia-410m-v0
Pile: https://huggingface.co/datasets/EleutherAI/pile
SlimPajama: https://www.cerebras.net/blog/slimpajama-a-627b-token-cleaned-and-deduplicated-version-of-redpajama

2. 关键结论

2.1 warmup 的步数不会影响最终性能

warmup 是一种 finetune 中常用的策略,指学习率从一个很小的值慢慢上升到最大值。那么,这个「慢慢上升」的阶段持续多久是最好的呢?

作者分别使用训练步数的:0%, 0.5%, 1%, 2% 这 4 种不同预热步数来进行实验:图片

从上图中可以看到:当模型经过「充分」训练后,不管多长的预热步数最后的性能都差不多。

但,这种前提是「充分训练」,如果只看训练前期的话,使用更长的预热步数(黄色的线)。无论是「上游任务」还是「下游任务」,模型的 Loss 都要比其他预热步数要低(下游学的快,上游忘的慢)。

2.2 学习率越大,下游任务越好,上游任务越差

为了探究学习率对学习效果的影响,作者使用了 4 种不同的最大学习率进行对比实验,

此外,还比对了和从头训练(from scratch)模型的效果:图片

图片

从图中可以看到:经过充分训练后,学习率越大(紫色),下游性能最好,上游性能最差(忘得最多)。同样,我们看前期训练,尽管紫色线条在最后的 loss 是最低的,但在前期 loss 会增加的非常大,随后下降。

PS:解释一下这里为什么这么关注训练前期,是因为在真实训练中,我们可能不一定会增强图中所示的 250B 这么多的 tokens,尤其是在模型参数很大的情况中。所以,当资源不允许充分训练的情况下,较小的学习率和较长的 warmup 步数可能是一个不错的选择。

此外,图中还能看出:未经过预训练的模型(蓝色)无论是上游任务还是下游任务,都不如预训练过的模型效果。

这鼓励我们今天在进行训练任务时,最好选择一个已经过预训练的模型上继续训练(以利用其中的先验知识)。

2.3 在初始预训练中使用 Rewarmup 会损伤性能

尽管 warmup 策略在 Finetune 和 Continue Pretraining 中都起到了更好的效果(相较于常量学习率),但是,这建立在「切换了训练数据集(数据分布)」的前提下。

作者做了一个实验,不切换数据集,而是继续在之前的「预训练数据集(The Pile)」上继续训练:图片

从图中结果可以发现:无论使用多大学习率的 warmup 策略,效果都不如使用常量学习率。

这进一步证明,在原数据集上使用 warmup 接着训练会造成性能损伤,学习率越大则损伤越大,且这种损伤是无法在后续的训练中被找回的。

PS:这里提示我们,当预训练中遇到了训练中断需要继续训练时,我们应该在重新开始训练时将学习率恢复到中断之前的状态(无论是数值还是衰减率)。

3. 实验限制

作者在论文的最后贴出了得出上述结论的一些局限性。

3.1 上下游数据分布类似

因为实验中选用的上游数据集 [Pile] 和下游数据集 [SlimPajama] 中存在一部分的数据重叠,

所以导致上下游数据的分布是比较相似的,但在我们真实的训练任务中,上下游数据的差异可能会比这大的多。

3.2 模型规模较小

论文中所使用的模型规模为 410M,这和今天人们 7B 起步的 LLM 规模相差甚远。

不过该团队打算在接下来的工作中继续在 3B 和 7B 的规模下进行尝试,期待他们最后的实验结论。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【spring】 Jackson :@JsonIgnore 注解

@JsonIgnore 是 Jackson 库中的一个注解,用于在序列化和反序列化过程中忽略某个字段。也就是说,当对象被转换为 JSON 或从 JSON 转换为对象时,带有 @JsonIgnore 注解的字段将不会被包含在内在这个示例中,ignoredField 字段将不会出现在生成的 JSON 字符串中。 import com.…

灰光模块,彩光模块-介绍

1. 引用 知识分享系列一:5G基础知识-CSDN博客 5G前传的最新进展-CSDN博客 灰光和彩光_通信行业5G招标系列点评之二:一文读懂5G前传-光纤、灰光、彩光、CWDM、LWDM、MWDM...-CSDN博客 ADOP带你了解:CWDM、DWDM、MWDM、LWDM:快速…

网络编程day03(网络体系结构、调试命令、TCP/IP对比)

目录 1》网络的体系结构 1> OSI模型 2> TCP/IP模型 3> 常见网络协议 4> DNS域名解析协议 2》 网络调试命令 1> ping:测试网络连通性(ICMP) 2> netstat 3》Dos (拒绝式服务)攻击?…

【大模型-RAG】RAG最佳实践论文及项目解读

文章目录 论文概述RAG工作流程核心代码解读软件架构查询引擎构建数据加载与索引创建微调嵌入模型 项目应用结论 在人工智能领域,大型语言模型(LLMs)因其强大的文本生成能力而备受关注。然而,这些模型在生成信息时可能会产生过时的…

HTML和HTML5有什么区别

HTML(超文本标记语言)是构建网页的基础,而HTML5是HTML的最新版本。虽然HTML和HTML5在许多方面相似,但HTML5引入了许多新的特性和改进,使得网页开发更加高效和功能丰富。 一、HTML概述 HTML,即超文本标记语…

分布式锁的实现:ZooKeeper 的解决方案

在分布式系统中,不同的服务或进程需要访问共享资源时,常常需要一种机制来确保在同一时刻只有一个服务或进程能够访问资源。这种机制被称为分布式锁。ZooKeeper,一个为分布式应用提供一致性服务的开源协调服务,提供了一种实现分布式…

Django 测试指南

#Django 测试指南 对绝大部分人来说,测试Django应用感觉很神秘,他们只是听说代码必须要测试,但是经常找不到线索如何入手。当他们看了Django的测试文档,他们找到深入的哪些功能是可用的,但是如果实现没有任何指导。 …

代码随想录:96. 不同的二叉搜索树

96. 不同的二叉搜索树 class Solution { public:int numTrees(int n) {int dp[30]{0};//由i个结点组成的二叉搜索树有多少种dp[0]1; for(int i1;i<n;i)for(int j0;j<i;j)//j表示根节点左子树有j个结点dp[i]dp[j]*dp[i-j-1];//对根节点左右子树结点数量遍历//数量有左子树…

什么是数据结构三要素?

目录 1.逻辑结构 2.数据的存储结构 3.数据的运算 1.逻辑结构 逻辑结构是指数据元素之间的逻辑关系&#xff0c;即从逻辑关系上描述数据。 它与数据的存储无关&#xff0c;是独立于计算机的。数据的逻辑结构非为线性结构和非线性结构&#xff0c;线性表是典型的线性结构&am…

ELK学习笔记——如何给Kibana新增用户和角色

Kibana新增用户和角色 首先用超管账号登录上Kibana&#xff0c;按照下面步骤操作 1、创建角色 按图操作 2、创建用户 按图操作 3、给用户分配角色 至此&#xff0c;角色和用户绑定成功&#xff1b; 最后&#xff0c;可以退出管理员账号&#xff0c;登录这个新…

【MATLAB】FIR滤波器的MATLAB实现

FIR滤波器的MATLAB实现 FIR滤波器的设计fir1函数fir2函数 与IIR滤波器相比&#xff0c;FIR滤波器既有其优势也有其局限性。FIR滤波器的主要优点包括&#xff1a; 精确的线性相位响应&#xff1b;永远保持稳定性&#xff1b;设计方法通常是线性的&#xff1b;在硬件实现中具有更…

Django学习实战篇二(适合略有基础的新手小白学习)(从0开发项目)

前言&#xff1a; 从这一章开始&#xff0c;我们来创建项目typeidea&#xff0c;我把它放到了GitHub上。强烈建议你也到GitHub上注册一个账号&#xff08;如果没有的话&#xff09;&#xff0c;然后创建这样的项目。当然&#xff0c;你也可以起一个属于自己的名称。这个项目就是…

Live800:以客户为中心,重塑服务标准

在快速迭代的商业环境中&#xff0c;企业若想持续繁荣&#xff0c;就必须不断审视并优化自身的服务模式。传统上&#xff0c;服务往往被视为产品交易的附加品&#xff0c;但今日之市场&#xff0c;服务已悄然成为企业核心竞争力的关键要素。因此&#xff0c;“以客户为中心&…

Excel数据导入MySQL数据库的完整指南

在日常的数据处理工作中&#xff0c;经常需要将Excel中的数据导入到MySQL数据库中&#xff0c;以便进行进一步的数据分析和管理。本文将详细介绍如何将Excel数据导入MySQL数据库的完整步骤&#xff0c;包括数据准备、数据库连接、数据导入以及验证等关键步骤。 一、准备工作 …

PostgreSQL 17即将发布,新功能Top 3

按照计划&#xff0c;PostgreSQL 17 即将在 2024 年 9 月 26 日发布&#xff0c;目前已经发布了第一个 RC 版本&#xff0c;新版本的功能增强可以参考 Release Notes。 本文给大家分享其中 3 个重大的新增功能。 MERGE 语句增强 MERGE 语句是 PostgreSQL 15 增加的一个新功能…

5、Django Admin后台移除“删除所选”操作

默认情况下&#xff0c;Django Admin后台的listview模型列表页&#xff0c;会有一个Delete Selected删除所选操作。假设你需要再从Hero管理模型中移除该删除操作。 ModelAdmin.get_actions方法可以返回所有的操作方法。通过覆盖此方法&#xff0c;移除其中delete_selected方法…

pytorch torch.einsum函数介绍

torch.einsum 是 PyTorch 中一个强大且灵活的张量运算函数,基于爱因斯坦求和约定进行操作。它允许用户通过简单的字符串表达式来定义复杂的张量运算,代替显式的循环或多个矩阵乘法操作。 函数签名 torch.einsum(equation, *operands) → Tensor参数 equation: 一个字符串,…

美团面试:mysql 索引失效?怎么解决? (重点知识,建议收藏,读10遍+)

美团面试&#xff1a;mysql 索引失效&#xff1f;怎么解决&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、shopee、百度、网易的面试资格&#xff0c;遇到很多很…

【商城源码开发周期是多久?】

文章目录 前言一、项目规模二、开发方式三、开发团队四、测试质量五、开发周期案例总结 前言 商城源码的开发周期通常从几天到几个月不等&#xff0c;具体时间取决于项目的规模、复杂度、开发方式和团队实力等因素。 在确定开发周期时&#xff0c;需要考虑多个因素&#xff0…

Docker进入容器命令

文章目录 Docker进入容器命令一、引言二、使用docker exec进入容器1、docker exec命令介绍1.1、基本用法 2、docker exec的优势 三、使用docker attach进入容器1、docker attach命令介绍1.1、基本用法 2、注意事项 四、总结 Docker进入容器命令 一、引言 Docker容器技术在现代…