MiniMind 学习笔记(二):Pretrain 导言------从零理解 LLM,先想清楚这几个问题
学习 LLM 最容易犯的错误,就是一头扎进训练代码的局部细节里。这一章的目标不是立刻进入大模型细节,而是先回答一个更基础的问题:当我们说"从零开始理解一个 LLM 的预训练流程"时,到底需要先想清楚哪些问题?
文章目录
- [MiniMind 学习笔记(二):Pretrain 导言------从零理解 LLM,先想清楚这几个问题](#MiniMind 学习笔记(二):Pretrain 导言——从零理解 LLM,先想清楚这几个问题)
-
- 前言:为什么不能直接看代码?
- [一、本章要回答的 7 个核心问题](#一、本章要回答的 7 个核心问题)
- [二、QA 式的组织方式](#二、QA 式的组织方式)
- 三、本章的四部分结构
- 四、本章不讲什么:训练细节的边界
- 总结
- 参考
前言:为什么不能直接看代码?
在深入模型代码之前,有一个学习策略上的问题值得先想清楚。
直接进入训练代码,很容易陷入局部细节,比如:
- 某个张量的 shape;
- 某个配置项的含义;
- 某一层具体的实现方式。
但如果没有先建立整体框架 ,这些局部细节很难真正串起来。所以正确的路径是:先从问题出发,建立整体认识,再逐步进入模型定义和代码实现。
#mermaid-svg-aeiajuSw66qLoY8T{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aeiajuSw66qLoY8T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aeiajuSw66qLoY8T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aeiajuSw66qLoY8T .error-icon{fill:#552222;}#mermaid-svg-aeiajuSw66qLoY8T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aeiajuSw66qLoY8T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aeiajuSw66qLoY8T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aeiajuSw66qLoY8T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aeiajuSw66qLoY8T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aeiajuSw66qLoY8T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aeiajuSw66qLoY8T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aeiajuSw66qLoY8T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aeiajuSw66qLoY8T .marker.cross{stroke:#333333;}#mermaid-svg-aeiajuSw66qLoY8T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aeiajuSw66qLoY8T p{margin:0;}#mermaid-svg-aeiajuSw66qLoY8T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aeiajuSw66qLoY8T .cluster-label text{fill:#333;}#mermaid-svg-aeiajuSw66qLoY8T .cluster-label span{color:#333;}#mermaid-svg-aeiajuSw66qLoY8T .cluster-label span p{background-color:transparent;}#mermaid-svg-aeiajuSw66qLoY8T .label text,#mermaid-svg-aeiajuSw66qLoY8T span{fill:#333;color:#333;}#mermaid-svg-aeiajuSw66qLoY8T .node rect,#mermaid-svg-aeiajuSw66qLoY8T .node circle,#mermaid-svg-aeiajuSw66qLoY8T .node ellipse,#mermaid-svg-aeiajuSw66qLoY8T .node polygon,#mermaid-svg-aeiajuSw66qLoY8T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aeiajuSw66qLoY8T .rough-node .label text,#mermaid-svg-aeiajuSw66qLoY8T .node .label text,#mermaid-svg-aeiajuSw66qLoY8T .image-shape .label,#mermaid-svg-aeiajuSw66qLoY8T .icon-shape .label{text-anchor:middle;}#mermaid-svg-aeiajuSw66qLoY8T .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aeiajuSw66qLoY8T .rough-node .label,#mermaid-svg-aeiajuSw66qLoY8T .node .label,#mermaid-svg-aeiajuSw66qLoY8T .image-shape .label,#mermaid-svg-aeiajuSw66qLoY8T .icon-shape .label{text-align:center;}#mermaid-svg-aeiajuSw66qLoY8T .node.clickable{cursor:pointer;}#mermaid-svg-aeiajuSw66qLoY8T .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aeiajuSw66qLoY8T .arrowheadPath{fill:#333333;}#mermaid-svg-aeiajuSw66qLoY8T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aeiajuSw66qLoY8T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aeiajuSw66qLoY8T .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aeiajuSw66qLoY8T .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aeiajuSw66qLoY8T .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aeiajuSw66qLoY8T .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aeiajuSw66qLoY8T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aeiajuSw66qLoY8T .cluster text{fill:#333;}#mermaid-svg-aeiajuSw66qLoY8T .cluster span{color:#333;}#mermaid-svg-aeiajuSw66qLoY8T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aeiajuSw66qLoY8T .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aeiajuSw66qLoY8T rect.text{fill:none;stroke-width:0;}#mermaid-svg-aeiajuSw66qLoY8T .icon-shape,#mermaid-svg-aeiajuSw66qLoY8T .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aeiajuSw66qLoY8T .icon-shape p,#mermaid-svg-aeiajuSw66qLoY8T .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aeiajuSw66qLoY8T .icon-shape .label rect,#mermaid-svg-aeiajuSw66qLoY8T .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aeiajuSw66qLoY8T .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aeiajuSw66qLoY8T .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aeiajuSw66qLoY8T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ❌ 错误路径
直接看训练代码
陷入局部细节
张量 shape / 配置项 / 单层实现
细节无法串联
学了就忘
✅ 正确路径
先建立整体框架
从核心问题出发
模型是什么 / 流程是什么
再进入细节
模型定义 → 代码实现
细节有处安放
真正理解
一、本章要回答的 7 个核心问题
这一章的第一部分,先介绍"模型是什么"这个概念,围绕下面 7 个问题展开:
- 什么是 Language Model?为什么说 LLM 本质上仍然是 Language Model?
- 为什么进入 LLM 之前,需要先理解 Attention 和 Transformer?
- Transformer 相比更早的 NLP 模型,到底解决了什么问题?
- 一个 LLM 通常由哪些模块组成?它的 Pretrain 训练流程又是什么样子的?
- Embedding、Attention、FFN、Norm、RoPE 这些模块分别在做什么?
- 为什么很多模型结构上的选择,看起来像"工程细节",但实际上会影响训练效果和推理效率?
- 如果把目光放回 MiniMind,这个项目是如何把这些概念落实成可运行代码的?
这 7 个问题本身就是一条由浅入深的学习路线,可以画成下面这张知识地图:
#mermaid-svg-EwrmFUd1DuGDNw5m{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EwrmFUd1DuGDNw5m .error-icon{fill:#552222;}#mermaid-svg-EwrmFUd1DuGDNw5m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EwrmFUd1DuGDNw5m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EwrmFUd1DuGDNw5m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EwrmFUd1DuGDNw5m .marker.cross{stroke:#333333;}#mermaid-svg-EwrmFUd1DuGDNw5m svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EwrmFUd1DuGDNw5m p{margin:0;}#mermaid-svg-EwrmFUd1DuGDNw5m .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster-label text{fill:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster-label span{color:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster-label span p{background-color:transparent;}#mermaid-svg-EwrmFUd1DuGDNw5m .label text,#mermaid-svg-EwrmFUd1DuGDNw5m span{fill:#333;color:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m .node rect,#mermaid-svg-EwrmFUd1DuGDNw5m .node circle,#mermaid-svg-EwrmFUd1DuGDNw5m .node ellipse,#mermaid-svg-EwrmFUd1DuGDNw5m .node polygon,#mermaid-svg-EwrmFUd1DuGDNw5m .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EwrmFUd1DuGDNw5m .rough-node .label text,#mermaid-svg-EwrmFUd1DuGDNw5m .node .label text,#mermaid-svg-EwrmFUd1DuGDNw5m .image-shape .label,#mermaid-svg-EwrmFUd1DuGDNw5m .icon-shape .label{text-anchor:middle;}#mermaid-svg-EwrmFUd1DuGDNw5m .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EwrmFUd1DuGDNw5m .rough-node .label,#mermaid-svg-EwrmFUd1DuGDNw5m .node .label,#mermaid-svg-EwrmFUd1DuGDNw5m .image-shape .label,#mermaid-svg-EwrmFUd1DuGDNw5m .icon-shape .label{text-align:center;}#mermaid-svg-EwrmFUd1DuGDNw5m .node.clickable{cursor:pointer;}#mermaid-svg-EwrmFUd1DuGDNw5m .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EwrmFUd1DuGDNw5m .arrowheadPath{fill:#333333;}#mermaid-svg-EwrmFUd1DuGDNw5m .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EwrmFUd1DuGDNw5m .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EwrmFUd1DuGDNw5m .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EwrmFUd1DuGDNw5m .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EwrmFUd1DuGDNw5m .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EwrmFUd1DuGDNw5m .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster text{fill:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m .cluster span{color:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EwrmFUd1DuGDNw5m .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EwrmFUd1DuGDNw5m rect.text{fill:none;stroke-width:0;}#mermaid-svg-EwrmFUd1DuGDNw5m .icon-shape,#mermaid-svg-EwrmFUd1DuGDNw5m .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EwrmFUd1DuGDNw5m .icon-shape p,#mermaid-svg-EwrmFUd1DuGDNw5m .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EwrmFUd1DuGDNw5m .icon-shape .label rect,#mermaid-svg-EwrmFUd1DuGDNw5m .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EwrmFUd1DuGDNw5m .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EwrmFUd1DuGDNw5m .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EwrmFUd1DuGDNw5m :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ① 什么是 Language Model?
LLM 本质仍是 Language Model
② 为什么先理解
Attention 和 Transformer?
③ Transformer 相比早期 NLP 模型
解决了什么问题?
④ LLM 由哪些模块组成?
Pretrain 流程什么样?
⑤ Embedding / Attention / FFN
/ Norm / RoPE 各做什么?
⑥ 结构选择为何影响
训练效果与推理效率?
⑦ MiniMind 如何把概念
落实成可运行代码?
- 问题 ①~③ 是背景层:建立历史脉络和整体认识;
- 问题 ④~⑥ 是结构层:拆解模型组成与各模块职责;
- 问题 ⑦ 是实践层:回到项目本身落地。
二、QA 式的组织方式
这一章的组织方式会尽量按照 QA(Question-Answer)的形式展开。
也就是说,每一节开头都会先列出一组核心问题,然后围绕这些问题组织内容,而不是一开始就按教科书式定义平铺直叙。
这种"问题驱动"的写法,本质上是把"被动接收定义"变成"主动寻找答案"------带着问题读,每个知识点都有了安放的位置。
三、本章的四部分结构
目前这一章的模型部分先分为四个部分:
#mermaid-svg-oR8mymRkhe4AiuEq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oR8mymRkhe4AiuEq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oR8mymRkhe4AiuEq .error-icon{fill:#552222;}#mermaid-svg-oR8mymRkhe4AiuEq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oR8mymRkhe4AiuEq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oR8mymRkhe4AiuEq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oR8mymRkhe4AiuEq .marker.cross{stroke:#333333;}#mermaid-svg-oR8mymRkhe4AiuEq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oR8mymRkhe4AiuEq p{margin:0;}#mermaid-svg-oR8mymRkhe4AiuEq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oR8mymRkhe4AiuEq .cluster-label text{fill:#333;}#mermaid-svg-oR8mymRkhe4AiuEq .cluster-label span{color:#333;}#mermaid-svg-oR8mymRkhe4AiuEq .cluster-label span p{background-color:transparent;}#mermaid-svg-oR8mymRkhe4AiuEq .label text,#mermaid-svg-oR8mymRkhe4AiuEq span{fill:#333;color:#333;}#mermaid-svg-oR8mymRkhe4AiuEq .node rect,#mermaid-svg-oR8mymRkhe4AiuEq .node circle,#mermaid-svg-oR8mymRkhe4AiuEq .node ellipse,#mermaid-svg-oR8mymRkhe4AiuEq .node polygon,#mermaid-svg-oR8mymRkhe4AiuEq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oR8mymRkhe4AiuEq .rough-node .label text,#mermaid-svg-oR8mymRkhe4AiuEq .node .label text,#mermaid-svg-oR8mymRkhe4AiuEq .image-shape .label,#mermaid-svg-oR8mymRkhe4AiuEq .icon-shape .label{text-anchor:middle;}#mermaid-svg-oR8mymRkhe4AiuEq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oR8mymRkhe4AiuEq .rough-node .label,#mermaid-svg-oR8mymRkhe4AiuEq .node .label,#mermaid-svg-oR8mymRkhe4AiuEq .image-shape .label,#mermaid-svg-oR8mymRkhe4AiuEq .icon-shape .label{text-align:center;}#mermaid-svg-oR8mymRkhe4AiuEq .node.clickable{cursor:pointer;}#mermaid-svg-oR8mymRkhe4AiuEq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oR8mymRkhe4AiuEq .arrowheadPath{fill:#333333;}#mermaid-svg-oR8mymRkhe4AiuEq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oR8mymRkhe4AiuEq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oR8mymRkhe4AiuEq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oR8mymRkhe4AiuEq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oR8mymRkhe4AiuEq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oR8mymRkhe4AiuEq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oR8mymRkhe4AiuEq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oR8mymRkhe4AiuEq .cluster text{fill:#333;}#mermaid-svg-oR8mymRkhe4AiuEq .cluster span{color:#333;}#mermaid-svg-oR8mymRkhe4AiuEq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oR8mymRkhe4AiuEq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oR8mymRkhe4AiuEq rect.text{fill:none;stroke-width:0;}#mermaid-svg-oR8mymRkhe4AiuEq .icon-shape,#mermaid-svg-oR8mymRkhe4AiuEq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oR8mymRkhe4AiuEq .icon-shape p,#mermaid-svg-oR8mymRkhe4AiuEq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oR8mymRkhe4AiuEq .icon-shape .label rect,#mermaid-svg-oR8mymRkhe4AiuEq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oR8mymRkhe4AiuEq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oR8mymRkhe4AiuEq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oR8mymRkhe4AiuEq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对应
对应
对应
对应
- 背景部分
- 模型总览
- Attention 专题
- MiniMind 实践入口
从 Language Model、Attention、
Transformer 的发展脉络出发
建立整体认识
先不急着推公式
先回答:一个预训练模型
由哪些部分组成
最核心、也最容易在
概念和实现之间脱节的部分
单独展开
回到项目本身
看概念在代码和
训练流程里怎么落地
| 部分 | 定位 | 核心内容 |
|---|---|---|
| 1. 背景部分 | 建立整体认识 | Language Model → Attention → Transformer 的发展脉络 |
| 2. 模型总览 | 宏观拆解 | 不急着推公式,先回答"一个预训练模型由哪些部分组成" |
| 3. Attention 专题 | 攻坚核心 | 最核心、也最容易在概念和实现之间脱节的部分 |
| 4. MiniMind 实践入口 | 落地验证 | 概念在代码和训练流程里如何落地 |
其中 Attention 专题值得特别关注:它是整个 Transformer 的核心,也是"看懂公式"和"看懂代码"之间最容易脱节的地方,所以单独拿出来展开。
四、本章不讲什么:训练细节的边界
至于下面这些内容,不在本章展开,而是放到后续单独的部分:
- 训练目标(training objective)
- loss
- 优化器(optimizer)
- learning rate
- 混合精度(mixed precision)
原因在于:这些内容一旦开始讲,重心就会从"模型是什么 "切换到"模型怎么训练",适合单独成节。
#mermaid-svg-I7OJxraNLHPmf5WM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-I7OJxraNLHPmf5WM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-I7OJxraNLHPmf5WM .error-icon{fill:#552222;}#mermaid-svg-I7OJxraNLHPmf5WM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-I7OJxraNLHPmf5WM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-I7OJxraNLHPmf5WM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-I7OJxraNLHPmf5WM .marker.cross{stroke:#333333;}#mermaid-svg-I7OJxraNLHPmf5WM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-I7OJxraNLHPmf5WM p{margin:0;}#mermaid-svg-I7OJxraNLHPmf5WM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-I7OJxraNLHPmf5WM .cluster-label text{fill:#333;}#mermaid-svg-I7OJxraNLHPmf5WM .cluster-label span{color:#333;}#mermaid-svg-I7OJxraNLHPmf5WM .cluster-label span p{background-color:transparent;}#mermaid-svg-I7OJxraNLHPmf5WM .label text,#mermaid-svg-I7OJxraNLHPmf5WM span{fill:#333;color:#333;}#mermaid-svg-I7OJxraNLHPmf5WM .node rect,#mermaid-svg-I7OJxraNLHPmf5WM .node circle,#mermaid-svg-I7OJxraNLHPmf5WM .node ellipse,#mermaid-svg-I7OJxraNLHPmf5WM .node polygon,#mermaid-svg-I7OJxraNLHPmf5WM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-I7OJxraNLHPmf5WM .rough-node .label text,#mermaid-svg-I7OJxraNLHPmf5WM .node .label text,#mermaid-svg-I7OJxraNLHPmf5WM .image-shape .label,#mermaid-svg-I7OJxraNLHPmf5WM .icon-shape .label{text-anchor:middle;}#mermaid-svg-I7OJxraNLHPmf5WM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-I7OJxraNLHPmf5WM .rough-node .label,#mermaid-svg-I7OJxraNLHPmf5WM .node .label,#mermaid-svg-I7OJxraNLHPmf5WM .image-shape .label,#mermaid-svg-I7OJxraNLHPmf5WM .icon-shape .label{text-align:center;}#mermaid-svg-I7OJxraNLHPmf5WM .node.clickable{cursor:pointer;}#mermaid-svg-I7OJxraNLHPmf5WM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-I7OJxraNLHPmf5WM .arrowheadPath{fill:#333333;}#mermaid-svg-I7OJxraNLHPmf5WM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-I7OJxraNLHPmf5WM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-I7OJxraNLHPmf5WM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-I7OJxraNLHPmf5WM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-I7OJxraNLHPmf5WM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-I7OJxraNLHPmf5WM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-I7OJxraNLHPmf5WM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-I7OJxraNLHPmf5WM .cluster text{fill:#333;}#mermaid-svg-I7OJxraNLHPmf5WM .cluster span{color:#333;}#mermaid-svg-I7OJxraNLHPmf5WM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-I7OJxraNLHPmf5WM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-I7OJxraNLHPmf5WM rect.text{fill:none;stroke-width:0;}#mermaid-svg-I7OJxraNLHPmf5WM .icon-shape,#mermaid-svg-I7OJxraNLHPmf5WM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-I7OJxraNLHPmf5WM .icon-shape p,#mermaid-svg-I7OJxraNLHPmf5WM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-I7OJxraNLHPmf5WM .icon-shape .label rect,#mermaid-svg-I7OJxraNLHPmf5WM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-I7OJxraNLHPmf5WM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-I7OJxraNLHPmf5WM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-I7OJxraNLHPmf5WM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 从零理解 LLM 预训练
本章:模型是什么?
(model 是什么)
后续章节:模型怎么训练?
(model 怎么 train)
Language Model 脉络
模型组成: Embedding / Attention /
FFN / Norm / RoPE
MiniMind 代码落地
训练目标 / Loss
优化器 / Learning Rate
混合精度
这条边界很重要:先搞清楚"模型是什么",再去研究"模型怎么训练",两件事混在一起讲,两边都讲不透。
总结
这一章作为整个模型部分的导言,核心可以浓缩为三句话:
- 学习策略:不要直接扎进训练代码,先建立整体框架,再进入细节------否则局部细节无法串联;
- 问题驱动:围绕 7 个核心问题展开,从 Language Model 的本质,到 Transformer 解决的问题,再到 LLM 的模块组成与 MiniMind 落地;
- 章节边界:本章聚焦"模型是什么"(背景脉络、模型总览、Attention 专题、MiniMind 实践),而"模型怎么训练"(loss、优化器、学习率、混合精度)留给后续章节。
带着这些问题,接下来就可以正式进入背景部分:从 Language Model 的定义开始,一路走到 Transformer 的诞生。