模型训练流程图解(从 0 到 1 训练自己的 AI)
本篇是「小模型训练系列」第 1 篇:用工程视角梳理大模型训练从数据到参数更新的完整链路。
正在沿着「小模型训练系列」系统学习,希望把概念、工程和真实判断串起来的读者。
🧩 为何从「训练」开始?
在如今的大模型时代,绝大多数人能:
- 调用 API
- 写 Prompt
- 做 RAG
- 使用大模型做任务
但能同时做到下面三件事的人并不多:
- 训练一个模型(至少跑通闭环)
- 微调一个模型(并解释为什么有效/为什么翻车)
- 把模型能力边界与系统架构边界分开讨论
后续常见场景包括:
- 本地小模型训练
- QLoRA 微调
- 自建行业模型
- 企业级 Agent 系统
- 私域大模型
- 多模型调度平台
所有这些,都离不开一个共同的底层心智模型:
理解大模型训练的完整流程,并能把它映射到真实工程代码。
这一篇,就是整个系列的入口:训练链路的主心骨。
🧭 一张能映射到代码的训练流程图(工程视角)
这不是泛泛科普,而是一条可以映射到代码的训练链路:
flowchart TB
A["数据准备<br/>清洗 / 切分 / 去重"] --> B["Tokenizer<br/>文本变成 token id"]
B --> C["Embedding<br/>token id 进入语义坐标系"]
C --> D["Transformer<br/>Attention 建模上下文关系"]
D --> E["Logits<br/>下一 token 的概率分布"]
E --> F["Loss<br/>预测和答案的误差"]
F --> G["Backprop<br/>把责任分回各层参数"]
G --> H["Optimizer<br/>SGD / AdamW 小步更新"]
H --> I["参数更新<br/>模型能力被慢慢塑形"]
I --> J["下一批数据<br/>继续训练"]
J -.-> A
这条链路贯穿模型训练的本质:
训练 = 用 Loss 持续逼迫参数更新,使预测分布更接近真实语言规律。
🧠 0. 先把「训练」映射到代码结构
在 PyTorch / HuggingFace 的训练代码中,本质模块就是:
- Tokenizer:文本 → token id
- Dataset / Dataloader:组织 batch、padding、mask
- Forward:输入 → logits
- Loss:logits 与 label 的误差
- Backward:反向传播得到梯度
- Optimizer.step():更新参数
- Scheduler.step():调整学习率(决定收敛稳定性)
- Checkpoint / Eval:保存模型、做评估、避免跑偏
后续所有“训练问题排查”,最终都会落在这些模块中的某一个。
🔍 1. 数学视角:本质就是预测「下一个 token」
输入一句话:
我今天想去吃
模型需要预测下一词(示意):
- 火锅(0.82)
- 烤肉(0.11)
- 星巴克(0.05)
- 其他(0.02)
很多「智能行为」的底层形式,都是:
P(tokenᵢ | token₁…tokenᵢ₋₁)
(条件概率预测)
目标只有一个:
让模型的预测更符合真实语言规律,从而获得泛化能力。
泛化能力决定模型是不是“像理解”,还是“像背诵”。
🔧 2. 工程视角:训练的五大核心步骤
① Tokenizer:文本进入数字世界的入口
模型不懂汉字、不懂英文,只懂数字 ID。
例子(示意):
我 爱 北京 天安门 → [1245, 98, 20301, 50231]
Tokenizer 的质量 = 模型训练上限之一。
因为 token 切分方式如果错了,后续再强都只能在错误切分上学习。
② Embedding:语言到数学空间的第一次映射
特点:
- 把每个 token 映射成 d 维(如 768 / 2048 / 4096)向量
- 语义相似 → 向量靠近
- 提供可计算的“几何世界”,供后续 Transformer 建模
Embedding = 模型理解世界的「坐标系统」。
③ Transformer:注意力机制让模型变聪明
Attention 让模型知道:
- 应该关注谁
- 谁不重要
- 如何从上下文抽取关键信息
例句:
“我昨天和我妈吵架了,我心情很不好。”
预测下一词时重要的词:
- 我妈
- 昨天
- 心情
Attention = 模型的「聚焦能力 + 关系建模能力」。
④ Logits & Loss:模型的「考试成绩」
- Logits:预测的概率分布
- Loss:预测 vs 真实答案的误差
Loss 越低 → 在训练分布上预测越准确。
但注意:Loss 下降不等于“能力提升”,需要配合评估看泛化。
⑤ 反向传播 & 梯度下降:模型真正被“炼”的过程
- 反向传播告诉模型哪里错了
- 梯度下降更新权重
- 千万、亿级、百亿参数不断被修正
最终得到一个:
能生成语言、能复现模式、能在一定范围内泛化的模型。
⚙️ 3. 为什么训练如此昂贵?
不是 GPU 贵,而是“算得多 + 存得多 + 序列越长越爆炸”:
-
Attention 复杂度近似 O(n²)
序列越长,计算与显存压力快速上升。 -
反向传播显存需求显著高于推理
训练需要保留更多中间激活用于求梯度,显存通常远高于推理阶段。 -
数据量巨大 + 训练步数巨大
大模型训练依赖海量 token 与长期迭代,成本主要消耗在持续算力与通信上。 -
模型太深 + 并行更复杂
层数更多、参数更多,会带来更长训练时间、更复杂的并行与更高稳定性要求。
这就是为什么训练 GPT / Claude 往往是上千万美金级别:
核心来自“序列长度 × 参数规模 × 训练步数”的乘法效应。
🚀 4. 为什么小模型训练可行?
因为出现了:
LoRA / QLoRA — 只训练极少量增量参数,让成本骤降
优势:
- 只训练少量参数(增量权重)
- 显存需求显著下降
- 成本更低,单机可跑
- 更适合做“领域适配”和“业务对齐”
一句话:
不需要大公司级别的算力,也能训练/微调出可用的领域模型能力。
🛠️ 5. 常见落地训练场景
多数实际项目不会训练 GPT-4,而是训练/微调:
- 个人知识库 + PDF 模型
- 企业流程(审批、采购、合同)模型
- 工程代码模型
- 对话人格 / 情感模型
- 行业模型(医疗 / 法务 / 招投标 / 供应链)
- Agent 基座模型
- 知识图谱 + 向量空间融合
- 自定义 Embedding
- 模型蒸馏(大模型 → 小模型)
全部建立在今天这篇文章的知识之上。
✅ 本章核心结论
- 训练是一条工程流水线:Tokenizer → Embedding → Transformer → Loss → Backward → Update
- 模型“聪明”来自 Loss 驱动的参数更新,而不是“记忆更多文本”
- Embedding 定义语义坐标系,Attention 负责上下文关系建模
- 训练贵来自乘法效应:序列长度 × 参数规模 × 训练步数
- LoRA/QLoRA 让领域适配变成单机可做的工程实践
- 后续 RAG/Agent/行业模型,最终都绕不开训练与微调的底层心智模型
🧭 实践建议:最小闭环清单
- 选一个能跑通的基座模型(小到可控)
- 准备一份干净数据(哪怕 1 万条)
- 跑通一次:训练/微调/保存/加载/评估
- 记录三件事:loss 曲线、显存占用、样例输出差异
跑通一次完整闭环,才算从“会用模型”进入“会训练模型”的视角。
📌 下一篇预告
《Embedding:词是如何变成数学的?(向量空间的秘密)》会继续拆这条链路里的第一道“智能门槛”:
- 为什么模型不能直接理解文字
- token id 如何进入向量空间
- 语义相似、方向变化、领域知识为什么都能被几何化
- RAG、Agent 和行业模型为什么会被 Embedding 上限卡住
核心观点是:模型不是先“读懂文字”,而是先把世界投影成一个可计算的坐标系。
持续学习,持续记录,持续筛选
如果这篇对你有用,可以继续沿着主题读下去。
福星家和会长期记录 AI 技术、生活成长、真实好物与正向文化观察。产品体验、人物故事、教育内容、生活方式、文化作品和内容共创都欢迎邮件沟通,合作内容会清楚标注。