大模型入门-预训练、SFT 有监督学习

2.1 大模型的预训练

在大语言模型的整个训练生命周期中,预训练(Pre-Training) 是极为关键的"地基"工程。它为模型后续高效执行各种任务打牢了基础,深刻地影响着模型的最终性能与应用潜力。

2.1.1 预训练的核心目标

大模型开展预训练的核心愿景是:在真正接触特定任务(如写代码、做翻译、回答问题)数据之前,让模型通过海量数据精准捕捉语言乃至世界的通用特征

这不仅能极大提升模型在各类任务里的基础性能与泛化能力,还能在后续微调时显著减少对昂贵人工标注数据的依赖。通过预训练快速构建一个强大的 Base 模型,可以大大加速新任务的适配与训练,让模型的学习过程更加高效、灵活。

2.1.2 预训练的重要意义

  1. 打破标注数据的瓶颈: 现实应用中,收集并人工标注大量数据(如医学图像识别、特定专业领域文本分类等)既耗时又极其昂贵,甚至在很多领域根本无法获取足够的标注数据。预训练的伟大之处在于它无需标注数据。它让模型从未标注的大规模自然语料中挖掘通用特征,即便后续的专用数据集很小,也能借助预训练的底子训练出性能优良的模型。
  2. 补齐先验知识短板,赋予生成能力: 在深度学习中,模型通常是从一堆随机初始化的无意义参数起步的,但解决实际问题往往需要常识或先验知识作为支撑。预训练过程就像是让模型在上岗前先去图书馆"博览群书"。在大量文本中,模型潜移默化地吸收了语言语法规则、逻辑关系以及大量事实常识。这些先验知识成为了新任务学习的有力靠山,不仅让模型起步就站在知识高地,更赋予了模型强大的 Generate(生成)能力

2.1.3 预训练是如何进行的?

大模型的预训练主要聚焦于大量无标签语料,采用的是自监督学习(Self-Supervised Learning)机制。

其核心技巧在于:Label 与 Data 错位构造训练数据集。具体来说,就是巧妙地借用序列中的"下一个 token"当做当前状态的"标签"来开展训练。

核心公式:

L = − ∑ n = 1 N log ⁡ p ( x n ∣ x 1 , x 2 , . . . , x n − 1 ; θ ) L=-\sum_{n=1}^{N}\log p(x_{n}|x_{1},x_{2},...,x_{n-1};\theta) L=−n=1∑Nlogp(xn∣x1,x2,...,xn−1;θ)

训练逻辑解析:

  • 模型会依据已经看过的上下文( x 1 x_1 x1 到 x n − 1 x_{n-1} xn−1),来预测下一个最有可能出现的单词( x n x_n xn)。
  • 通过计算预测概率的对数似然损失,不断反向传播调整参数,逼迫模型越来越精准地预测下一个单词。
  • 这种连续文本的自回归预测,确保了模型对语言结构的全面学习。

最绝妙的是,这个训练过程完全无需人工干预标注,只要把随便一篇文章丢给模型,它自己就能用文本自身构造出无数的监督标签进行自我训练,从而彻底突破了人工标注的数据与知识瓶颈。

2.1.4 预训练需要什么样的数据?

如果你对预训练的数据集感兴趣,强烈推荐阅读这篇综述论文:
Datasets for Large Language Models
论文链接: https://arxiv.org/pdf/2402.18041

该论文对 LLMs 的训练数据集进行了迄今为止非常全面的整理:

  • 规模庞大: 涵盖了 8 种语言、32 个细分领域,共计 444 个数据集。
  • 五大维度分类: 论文从五个关键维度总结了现有的代表性大模型文本数据集,包括:
  1. Pre-training Corpora (预训练语料库)
  2. Fine-tuning Instruction Datasets (微调指令数据集)
  3. Preference Datasets (人类偏好数据集)
  4. Evaluation Datasets (评估数据集)
  5. Traditional NLP Datasets (传统自然语言处理数据集)

有训练或研究需求的同学,建议仔细研读该论文,按图索骥自行查取所需的高质量数据。


2.2 SFT 有监督学习

在了解了大模型的预训练之后,我们进入大模型微调的关键阶段------SFT(Supervised Fine-Tuning,有监督微调)。

自监督学习 (利用自身数据构造错位标签进行学习,无需人工标注)不同,有监督学习需要人工整理高质量的标签数据进行学习。两者的核心训练过程完全相同,唯一的区别在于喂给模型的数据结构和内容。

2.2.1 SFT 的数据格式

在 SFT 阶段,模型输入的数据必须遵循特定的对话格式,通常会包含 System(系统设定)、User(用户输入)和 Assistant(模型回答)三个角色。

以下是使用大模型(例如 Qwen)时常见的底层数据格式示例:

text 复制代码
<|im_start|>system
You are a helpful assistant<|im_end|>
<|im_start|>user
你好吗?<|im_end|>
<|im_start|>assistant
我很好。<|im_end|>

在送入模型前,这些文本首先会被 Tokenizer 进行分词并转换为数字 ID。例如,在 Tiktokenizer (一个可视化分词界面,链接: https://tiktokenizer.vercel.app/) 中,上述文本会被转化为类似 200264, 17360, 198, 3575... 这样的 Token 序列,以便模型进行矩阵运算。

2.2.2 SFT 监督微调的过程

SFT 阶段的训练方法、损失计算方式以及构造数据集的底层逻辑与预训练时的方法基本一致。模型依然是在 Decoder 架构下,通过输入前面的 Token 来预测下一个 Token。

最大的区别在于:SFT 使用的是人工精心挑选的标注数据(即问答对)。

在计算 Loss(损失)时,模型通常只会针对 Assistant(模型回答)部分的 Token 计算 Loss并进行反向传播更新参数,而对于 SystemUser 提示词部分的预测则不计算 Loss。这样做的目的是让模型专门学习如何"回答"问题,而不是学习如何"提出"问题。

2.2.3 预训练与 SFT 的核心区别

总结下来,预训练与 SFT 主要有以下三点显著的区别:

  1. 数据拼接与长度利用:
  • 预训练: 为了充分利用计算资源,每条数据通常会被填充或拼接至模型设定的最大输入长度上限(例如将多篇文章首尾相连拼满 4096 个 Token)。
  • SFT: 通常不需要强行拼接不相关的对话数据,而是保持单个对话上下文的独立性。
  1. 特殊字符(Special Token)的使用:
  • 预训练: 原始的预训练连续文本数据中通常没有用于标记对话结构的 Special Token。
  • SFT: 必须使用特定的 Special Token 来划分对话边界和角色,例如上面例子中出现的 <|im_start|><|im_end|>
  1. 目标侧重点(广度 vs 精度):
  • 预训练: 主要目标是注入基础知识,完全由数据驱动,不关注具体任务的逻辑,核心在于拓展模型知识的广度
  • SFT: 使用的是人工标注的问答数据,核心目标是让模型学会遵循人类的指令并完成具体任务,侧重于任务执行的精度
python 复制代码
print('hello')
相关推荐
m0_634666731 小时前
ViMax 为什么会冲上 GitHub Trending:AI 视频生成开始从“出片”转向“制片”
人工智能·github·ai编程
魔法阵维护师1 小时前
从零开发游戏需要学习的c#模块,第十八章(2D 碰撞检测与金币收集)
学习·游戏·c#
AI砖家1 小时前
每日一个skill:web-artifacts-builder,构建复杂 Claude.ai HTML Artifact 的生产力工具包
java·前端·人工智能·python
Cat_Rocky1 小时前
k8s zabbix7学习-设置告警
学习·容器·kubernetes
jianwuhuang821 小时前
Kimi怎么导出pdf
人工智能·chatgpt·pdf·deepseek·ai导出鸭
可涵不会debug1 小时前
AI Agent 的下一站:从文字对话到具身交互
人工智能·microsoft·交互
ishangy2 小时前
烟花爆竹生产企业AI视觉智能安全解决方案,破解高危生产监管难题
人工智能·安全·烟火识别·ai视觉监测·防爆ai监控
2401_853087882 小时前
打破文档孤岛:将知识库深度融入DevOps流水线
运维·人工智能·devops
pen-ai2 小时前
Kennard-Stone (KS) 算法详解 —— 从实验设计到样本划分的经典方法
人工智能·算法·机器学习