一文搞懂如何构建大语言模型?预训练与微调​

70 阅读8分钟

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

如何构建大语言模型?我将通过一系列文章带领大家从0到1快速构建大语言模型的底层逻辑和技术体系。有了完整的知识体系,每个人可以结合自身情况和具体业务场景选择适合自己的方式开发和应用大语言模型。

今天开始第三部分内容:预训练与微调。

预训练是学习“语言是什么” ,微调是学习“如何用语言完成任务” 。预训练是基础,成本极高,通常由拥有巨大算力的机构完成;微调则是在预训练模型的基础上,用相对低的成本使其变得“有用”和“可控”。

一、从数据集的角度

**数据的“质”与“量”如何塑造模型能力?

预训练和微调最根本的区别,在于它们所使用的训练数据在规模、质量组织形式上的不同,这直接决定了模型所能获得的能力。

(1)预训练:海量“自学” —— 模型的“知识广度”与“语言本能”

预训练让模型建立一个关于世界的知识库语言模型本身。整个预训练过程就像给模型一个巨型图书馆,让它无目的地广泛阅读。它通过阅读海量书籍,潜移默化地掌握了语法、事实、文风甚至逻辑推理能力。

大模型通过预训练(Pre-training)学到了“语言是什么”,但还没学“如何用语言与人交互”。这时候模型成为了一个“博闻强识的学者”,它能完成一句话,但它还不知道如何与你对话。

这时候大模型预训练的数据集特征如下:

  • 规模巨大:训练数据通常达到TB级别,来自互联网、书籍、百科等海量文本。核心是“量变引起质变”。
  • 未标注/自监督:数据是原始的、未加工的纯文本。模型的学习任务很简单:给定上文,预测下一个词。这种“完形填空”的方式,让模型从数据自身中学习统计规律,无需人工标注。
  • 格式简单:数据格式通常极其统一,例如:{"text": "...很长的一段文本..."}。每一段文本都是一个完整的内容单元(如一篇文章、一个网页)。

(2)微调:精品“教学” —— 模型的“行为模式”与“任务技能”

大模型微调(Fine-tuning)就是将预训练获得的知识和语言能力,引导到特定的、有用的行为模式上。整个微调过程就是为那位“博学的学者”聘请一位专业的导师。导师通过高质量的示范(指令-回答对)和反馈(偏好数据),教会他如何有礼貌、有条理、安全地与人交流,并掌握特定技能(如翻译、总结等)。让大模型学到了“如何用语言完成任务”,让模型成为一个“乐于助人且专业的助手”。

这时候大模型微调的数据集特征如下:

  • 规模较小:通常只需预训练数据量的千分之一甚至更少,但质量要求极高

  • 精心标注:数据是人工精心构造的“教学材料”,形式是“指令-输入-输出”对。这为模型提供了明确的行为范例。

  • 格式结构化:数据有复杂的、针对任务设计的结构。例如指令微调的数据格式:

    {"instruction":"总结以下内容。","input":"很长的一篇文章...","output":"这篇文章主要讲述了...","history":[]// 可能包含多轮对话历史}
    

**

****** 二、****从任务的角度 **********

大模型训练任务有哪些?

大模型的训练是一个流水线,包含多种微调任务,下图清晰地展示了这一完整流程。

(1)预训练任务 - 奠定基石

  • 任务:下一个词预测。给定前文,让模型预测最可能出现的下一个词是什么。
  • 好比:完形填空的超级升级版。通过数十亿、数万亿次的练习,模型内化了语法、文风、事实和逻辑。
  • 产出:一个基础模型,如 GPT、LLaMA。它很有知识,但可能不听话、不安全、不会遵循指令。

(2)指令监督微调 - 学会对话与遵循指令

  • 任务:学习“指令-输入-输出”的映射关系。模型需要理解人类的指令,并生成高质量、有帮助的回答。
  • 数据:高质量的对话或指令数据集,例如 Alpaca 或 ShareGPT 格式的数据。
  • 好比:让博学的实习生学习公司的工作流程和沟通规范,知道在什么情况下该说什么话、做什么事。
  • 产出:一个对话模型,如 ChatGPT、LLaMA-2-Chat。它已经变得有用,但可能还不够“好”,比如有时会啰嗦、产生幻觉或生成有害内容。

(3)偏好对齐任务 - 让模型更符合人类价值观

这是微调的高级阶段,目标是让模型回答不仅正确,而且安全、简洁、符合人类偏好。主要分为两种路径:偏好训练和KTO训练。

路径1:偏好训练

  • 任务:学习区分“好回答”和“坏回答”。训练数据中包含同一个问题的两种回答(一个优质,一个劣质),让模型学习人类的偏好。
  • 方法:RLHF或者DPO、ORPO等。RLHF需要训练奖励模型,而现代方法不需要训练一个单独的奖励模型,更加高效。
  • 好比:给实习生看两个工作汇报,一个优秀一个不合格,并讲解优劣,让他能主动产出优秀的汇报。

路径2:KTO训练

  • 任务:学习“好评”和“差评”。每个回答只有一个简单的“好评”或“差评”标签,而非直接对比。
  • 数据获取:成本更低,更灵活(例如可以直接从用户反馈中获取 👍/👎)。
  • 好比:老板对实习生的产出直接给出“干得好”或“不行,重写”的反馈,实习生从中学习。

(4)多模态训练任务 - 解锁图文音视频理解

  • 任务:让语言模型能够理解和处理图像、视频、音频等信息。
  • 数据:在指令微调数据的基础上,增加媒体文件(如图片)及其路径。关键点是:文本中必须有特殊标记(如 <images>),且标记数量必须与媒体文件数量严格对应
  • 好比:让专家不仅能处理文字报告,还能看懂图表、分析视频资料,成为更全面的专家。

****三、****从工具实战的角度 ****** **

对于大多数开发者和研究者,我们通常从微调开始,而非从头预训练。

(1)预训练实战- 大厂专属,普通人无缘****

  • 工具:通常使用 Megatron-LMDeepSpeed 等分布式训练框架。它们专为千亿参数模型、在数千张 GPU 卡上并行训练而设计。
  • 成本:极高,通常是巨头公司的游戏。例如,训练一个千亿级参数的模型可能需要数百万美元的计算成本和数月时间。

(2)微调实战(以热门工具库 LLamafactory 为例)

LLamafactory 等项目极大地降低了微调的门槛,让我们可以在单张消费级显卡上高效微调大模型。实战流程可以概括为以下关键步骤。

第一步:准备数据集

根据你的任务(SFT、偏好、多模态),将数据整理成对应的 JSON 格式(如上文所述)。

例如,做一个翻译机器人,就准备 {"instruction": "翻译成英文", "input": "你好", "output": "Hello"}这样的数据对。

第二步:配置 dataset_info.json(最关键的一步!)

这个文件是数据和训练代码之间的桥梁。它告诉训练工具:“我的数据文件在哪?里面的‘指令’列叫什么名字?‘回答’列又叫什么名字?”

示例:如果你的 SFT 数据文件是 my_data.json,里面有三列:questioncontextanswer。那么在 dataset_info.json中需要这样配置:

"my_sft_dataset": {
"file_name": "my_data.json",
"columns": {
"prompt": "question",
"query": "context",
"response": "answer"
}
}

这个配置告诉 LLamafactory:请将 question列的内容作为指令,context列的内容作为输入(与指令拼接),answer列的内容作为要学习的回答。

第三步:选择微调方法并启动训练

  • 全参数微调:更新模型所有参数,效果最好,但资源消耗最大。
  • 高效参数微调:如 LoRA,只更新少量额外参数,效果接近全参数微调,资源需求大大降低。这是当前最流行的方式

预训练是“读书万卷”,打下语言和知识的基石,但成本高昂;而微调是“岗前培训”,让模型变得有用、安全、专业,是当前AI应用创新的核心。

有了工具(如 LLama factory)的出现,使得我们无需关心底层复杂的分布式训练代码,只需准备好格式正确的数据,并写好配置文件,就能高效地定制自己的大模型。

日拱一卒,让大脑不断构建深度学习和大模型的神经网络连接。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI