文章详解了构建大语言模型的四个阶段:预训练(学习语言基础)、指令微调(遵循指令)、偏好微调(对齐人类价值观)和推理微调(强化推理能力)。从随机初始化模型开始,通过这四个阶段逐步优化,使大语言模型能够适应现实世界应用场景,完成从无到有的完整构建过程。
导读
本文将介绍从零开始构建大语言模型并使其适用于现实世界应用场景的四个阶段。涵盖:1. 预训练, 2. 指令微调, 3. 偏好微调, 4. 推理微调。
阶段0 :随机初始化的LLM
此阶段,模型的参数是随机或基于某种分布随机初始化的,也就是说此时模型是一无所知的。你问它“什么是LLM?”,会得到一串胡言乱语的回复,也就是next token是随机,随机的“词语接龙”。因为此时它尚未见过任何训练数据,只拥有随机的权重。
此阶段你需要知道的是(训练)一个decoder-only架构的大语言模型由哪些部分组成:
- Tokenizer:分词器;
- Embedding Block: 文本/多模态嵌入;
- Positional embedding:位置嵌入/RoPE;
- Attention Block:注意力模块,MHA/MQA/GQA/MLA;
- Masked Attention:掩码注意力机制(训练阶段),Causal Masking;
- MLP/MOE;
- Engram:Conditional Memory;
- RMSNorm与残差连接;
- AdamW …
阶段1 :预训练
此阶段通过在海量语料库上训练模型预测下一个token(令牌/词元),来教授 LLM 语言基础知识。通过这种方式,它吸收了语法、世界知识等。
由于训练方法的原因导致它不善于对话,它只是在你输入的prompt之后接续生成文本,也就是词语接龙。
在阶段0你了解了一个大语言模型构成,到达此阶段你需要了解的是训练框架的选择以及准备预训练语料库。当然预训练一个大语言模型涉及到AI infra,计算集群、通信与存储、分布式训练等等,这是一个大工程。
阶段2 :指令微调
为了让模型能够对话,我们可以使用指令-响应对进行指令微调。这有助于大模型学习如何遵循提示并格式化回复。
现在它可以:
- 回答问题
- 总结内容
- 编写代码,等等。
此阶段你可能需要了解的是参数微调的一些高效方式(PEFT),比如LoRA及其变体,基于Prompt的微调,比如Prefix-Tuning、P-Tuning等,还有一类是Adapter Tuning,通过插入适配器的方式。
这时候一些微调框架是你所需要的,比如Peft、Lamma-factory、unsloth等。
你可能还需要注意的是不同的开源模型使用的微调数据集的组织形式有所不同,比如ChatML、ShareGPT等,Qwen系列模型送入模型训练的格式就是使用的类似ChatML的格式。
微调仅仅是微调,因此你只需要几个epochs就可以了,小心造成大模型的灾难性遗忘问题。
至此,我们可能已经利用了整个原始互联网存档知识,投入了预算用于人工标注指令-响应数据。那么,我们能做些什么来进一步改进模型呢?我们进入了强化学习的领域。
阶段3 :偏好微调
你一定在 ChatGPT 上见过这个界面,它问:你更喜欢哪个回答?
回复 1
感谢您提供详细的错误信息和最新代码。这个错误似乎与“collate_fn”函数内部如何处理数据有关。让我们通过修正“collate_fn”以正确处理来自xxx的数据格式来解决此问题。
- 更新“collate_fn”函数:该函数应直接处理从“GPT2Dataset”接收到的张量列表,而无需像处理字典格式数据那样尝试提取“input_ids”和“attention_mask”。
- 移除诊断打印语句:“collate_fn”中的诊断打印语句不再必要,可以移除以清理函数。
以下是更新后的“collate_fn”:
代码略…
请务必将脚本中现有的“collate_fn”函数替换为此更新版本。用“pad_sequence”函数确保一个批次中的所有序列具有相同长度,并且创建的“attention_mask” 与 “input_ids”形状相同,所有元素设为1(因为所有词元都是…
回复 2
感谢您提供详细信息和当前代码状态。问题似乎出在“collate_fn”函数中。具体来说,是“input_ids”和“attention_mask”被提取和处理的方式。
在您的xxx类中,“samples”列表中的每一项都是一个表示分词后输入ID的张量。“collate_fn”函数应正确处理这些张量。以下是修改后的“collate_fn”及其集成方式:
更新“collate_fn”函数:
由于“data”中的每一项都是张量(而非字典),我们直接处理这些张量。
我们使用“pad_sequence”将所有张量填充到相同长度。
对于注意力掩码,我们创建一个与“input_ids”形状相同,并在“input_ids”非填充位置设为1的掩码。
确保在您的“DataLoader”中使用此“collate_fn”:
代码略…
这不仅仅是为了反馈,更是宝贵的人类偏好数据。OpenAI 利用这些数据通过偏好微调来微调他们的模型。
在偏好微调中:
用户在两个回答之间进行选择,以产生人类偏好数据。
然后训练一个奖励模型来预测人类偏好,并使用强化学习来更新 LLM。
上述过程称为RLHF,而用于更新模型权重的算法称为PPO。
它教会 LLM 即使在没有“正确”答案时也能与人类价值观对齐。
此阶段你需要有一些强化学习的知识,需要厘清一些强化学习的概念。比如PPO所需要的四个模型,奖励模型、价值模型、参考模型和策略模型,以及4个模型之间的协作方式,On-policy以及Off-policy。除了PPO之外,还有一些PPO算法的演进算法,比如TRPO,deepseek用的GRPO,Qwen用的GSPO等。当然最简单的DPO算法也许也会有一些作用。
偏好微调的框架比如Hugging Face的开源库trl、OpenRLHF等。
阶段4 :推理微调
在推理任务(数学、逻辑等)中,通常只有一个正确的回答和一系列确定的步骤来获得答案。所以我们不需要人类的偏好,我们可以用正确性作为信号。这叫做推理微调。
当然,大模型本身具有推理能力,只是这种能力没有直接形成文本生成出来,我们要解决的是激发它的这种推理能力,使其显式的生成正确推理内容。
推理微调步骤:
- 模型对输入的Prompt生成答案。
- 将答案与已知正确答案进行比较。
- 根据正确性分配奖励。
这被称为带可验证奖励的强化学习。DeepSeek 的 GRPO 是这方面的一种流行技术。
使模型显式输出推理除了推理微调之外,通过提示器工程来激发是一种trainning free的方法,不过要保证推理的准确性就需要微调了。
以上就是训练 LLM 的四个阶段。
从一个随机初始化的模型开始。在大规模语料库上进行预训练。使用指令微调使其遵循指令。使用偏好和推理微调来优化回答。
如何学习AI大模型?
如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
100套AI大模型商业化落地方案
大模型全套视频教程
200本大模型PDF书籍
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
LLM面试题合集
大模型产品经理资源合集
大模型项目实战合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓