easy-vibe 大语言模型原理:从 Tokenization 到 Transformer 与 MoE 的完整技术解读
2026/9/14 10:14:51 网站建设 项目流程

easy-vibe 大语言模型原理:从 Tokenization 到 Transformer 与 MoE 的完整技术解读

【免费下载链接】easy-vibe💻 vibe coding 101|The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe

本文基于 easy-vibe 课程附录中的 LLM 原理章节,系统讲解大语言模型(LLM)如何把人类语言转化为可计算的数学问题:从 Tokenization、Embedding、矩阵化流水线,到 RNN 与 Transformer 架构对比、KV-Cache、对话模板、SFT/RLHF 对齐,再到 Thinking Model、MoE 与线性注意力等前沿演进。读完本篇后,你将理解"LLM 为什么只能处理 Token 而不能处理单词"、"Transformer 为什么能并行且长程不遗忘"、"长上下文为什么吃显存"等核心问题,并能结合仓库中配套的可交互 Vue 演示组件源码验证每一环节的实现逻辑。

一、导言:从人类语言到机器计算

人类用语言交流,计算机用数字运算。LLM 的本质就是连接这两个世界的桥梁,其核心任务只有一个:把"理解语言"的问题转化为"数学计算"的问题

要完成这一转化,需要解决三大挑战:

  1. 翻译(Translation):如何把文本变成数字?——Tokenization 与 Embedding;
  2. 效率(Efficiency):如何让计算机快速计算?——矩阵运算;
  3. 记忆(Memory):如何让计算机理解上下文?——Transformer 模型。

在 easy-vibe 仓库中,这一章以 llm-principles.md 为主体(德语版,中文版 结构一致),并配套一组可交互演示组件,统一位于 llm-intro 组件目录。文档中的<LlmQuickStartDemo /><TokenizationDemo /><EmbeddingDemo /><TokenizerToMatrix /><RNNvsTransformer /><TrainingInferenceDemo /><ThinkingModelDemo /><MoEDemo /><LinearAttentionDemo />等标签,分别对应目录下的同名 Vue 单文件组件,例如 LlmQuickStartDemo.vue 与 TokenizationDemo.vue,用于在文档站点中实时演示下文各节描述的流程。

二、第一步:翻译(Tokenization)

计算机读不懂"Hamburger"这样的字符,它只认识数字。因此第一项任务是:把文本拆解成计算机能理解的最小单元

2.1 什么是 Tokenization

Tokenization(分词)是把一整个句子拆成一个个"词元"(Token)的过程:

  • 英文:天然带空格,容易分词(例如I love AI);
  • 中文:没有空格,需要专门的切分算法(例如我爱人工智能)。

执行分词的程序称为Tokenizer(分词器),它像一个翻译官,把人类语言转成机器可读的数字序列。现代 LLM(如 GPT-4)普遍采用子词分词(Subword Tokenization,如 BPE 算法),其巧妙之处在于:高频词保持完整,低频词被拆散

以下是一个基于 GPT-4 Tokenizer 的真实 BPE 分词示例:

输入"The quick brown fox jumps over the lazy dog. \n今天天气真不错!"

Token 列表

index=791, string='The' index=4062, string=' quick' index=14198, string=' brown' index=39935, string=' fox' index=83368, string=' jumps' <-- 若被拆散,可能是 ' jump' + 's' index=927, string=' over' index=279, string=' the' index=16053, string=' lazy' index=3290, string=' dog' index=13, string='.' index=198, string='\n' <-- 换行符 index=33838, string='今天' <-- 高频词直接合并 index=54580, string='天气' index=20265, string='真' index=57672, string='不错' index=171, string='!'

罕见字符的处理(字节级回退): 当模型遇到词表中不存在的未知字符(假设"今"极罕见),会回退到字节层面

  1. 原始输入:
  2. 字节表示:\xE4 \xBB \x8A
  3. BPE 查找:先找\xE4\xBB\x8A→ 未找到 → 拆成\xE4\xBB(ID=1001)+\x8A(ID=2002)
  4. 最终 Token:[1001, 2002]

这一机制保证模型可以处理任意输入,永远不会出现 OOV(Out Of Vocabulary,词表外)问题

核心要点:LLM 处理的不是单词,而是Token ID(一串数字索引)。

仓库中的 TokenizationDemo.vue 对上述流程做了可交互的教学模拟:从源码结构看,它提供 BPE(GPT-4 风格)、Word(按词)、Character(按字符)三种算法切换(见 L128-L159),BPE 模拟分支用正则/([a-zA-Z]+)|([\u4e00-\u9fa5])|(\s+)|(.+?)/g提取英文单词、单个中文字符、空白与标点(L130),Token ID 由输入字符串的哈希值确定性生成(L120-L126)。需要说明的是,这是教学用途的简化模拟,并非真实 BPE 实现,其价值在于直观对比三种切分粒度下 Token 数量的差异,并展示每个 Token 的 ID 与类型(单词/中文字符/空白/标点)。

三、核心问题:如何让计算机"计算"语言

3.1 为什么不能直接用 ID

最直接的想法是给每个词分配一个编号:苹果 → ID 10,香蕉 → ID 20。但这有两个致命缺陷:

  • 缺陷 1:太浪费。词表若有 10 万个词,用 One-Hot 编码表示一个词需要 10 万个元素的数组,其中 99,999 个位置是 0,只有一个是 1;
  • 缺陷 2:没有语义。计算机会把"10"和"20"当作毫无关联的两个数字,无法表达"苹果"和"香蕉"都是水果这一语义关系。

3.2 解决方案:Embedding(稠密向量)

为了高效携带语义地表示一个词,Embedding 用一个较短的小数数组(例如 512 个数字)来描述一个词,例如[0.8 (是水果), 0.1 (红色), 0.9 (甜)...]。这样不仅压缩了数据,还把词义转化成了可计算的"坐标"。仓库中对应的交互演示为 EmbeddingDemo.vue,文档第 2 节的<EmbeddingDemo />即由此组件渲染。

四、从单词到矩阵

解决"一个词"的表示后,下一个问题是"一句话"的表示。

4.1 为什么是矩阵

因为一句话包含多个词:

  • 一个词 = 一行数字(向量);
  • 一句话 = 许多行数字上下堆叠 =矩阵

之所以要构造成矩阵,是因为现代计算机的核心硬件——GPU(显卡)——天然为矩阵运算而设计。只有把语言转成矩阵,才能利用 GPU 的并行算力,实现高效的训练与推理。

4.2 完整流水线

数据流回顾:

  1. Tokenization:把文本切碎;
  2. 索引(Indexing):把碎片转成 ID;
  3. Embedding:把 ID 转成向量(获得语义并压缩);
  4. 堆叠(Stacking):把向量拼成矩阵(面向 GPU 高效计算)。

仓库中 TokenizerToMatrix.vue 把这四步做成了分步动画:从源码结构看,它对输入文本用正则[\u4e00-\u9fa5]|[a-zA-Z]+|\s+|.切分 Token(L198),通过哈希得到确定性 ID,再用sin(id * (k+1))生成 4 维伪随机向量(L200-L214),最后把向量逐行堆叠为带热力图着色的输入矩阵,并以Shape: (tokens.length, 4)标注矩阵形状(L175)。同样需要指出,这里的向量是确定性伪随机数而非真实词嵌入,目的是演示"Token → 向量 → 矩阵"的数据形态转换,而非真实 Embedding 查表。

五、插曲:究竟什么是"模型"

在看具体架构之前,先用直观方式理解"模型"这个概念。AI 领域的模型本质上是一个极其复杂的函数黑盒

  • 输入:一堆数字(例如上文的 Token ID);
  • 处理:黑盒内部有数十亿参数(可以想象为数十亿个旋钮),它们对输入数据做大量的加减乘除;
  • 输出:另一堆数字(表示预测结果,例如下一个词的概率)。

类比:把模型想象成一位经验丰富的厨师

  1. 输入(食材):你给他牛肉、土豆、番茄;
  2. 模型(厨师的大脑):基于他学过的成千上万道菜谱(训练数据),他瞬间在脑中计算:牛肉切块、土豆去皮、火候控制……
  3. 输出(菜肴):最后端出一盘土豆炖牛肉。

所谓训练(Training),就是让这位厨师从学徒开始,通过无数次试错练习:太咸了就调"盐分旋钮",太淡了就调"火候旋钮",直到能稳定做出美味。今天的 LLM 就是"读完了人类所有书"的超级厨师——只不过它们烹饪的不是菜肴,而是文本。

六、架构的演化:从 RNN 到 Transformer

有了数据(Token)和厨师(模型)之后,剩下的问题是:厨师到底如何"思考"?AI 演化史上主要有两种架构:RNNTransformer。仓库中 RNNvsTransformer.vue 用两种可视化模式对比了它们。

6.1 旧方法:RNN(传话游戏)

早期模型(RNN,循环神经网络)处理句子就像玩传话游戏(Stille Post)

  1. 读第 1 个词"我",记住它,传给第 2 步;
  2. 读第 2 个词"喜欢",与之前的记忆结合、更新信息,传给第 3 步;
  3. 读第 3 个词"吃",再更新记忆……
  4. ……直到读完最后一个词。

这带来两个致命缺陷:

  1. 慢(无法并行):每个人都必须等前一个人传完,100 个人无法同时工作;
  2. 健忘(长程记忆丢失):消息传到第 100 个人时,可能早已忘记第一个人说的是"我"还是"你",导致模型处理长文本时丢失主线。

演示组件对 RNN 的模拟印证了这一点:从源码结构看,playRnn函数逐词循环执行(L164-L171),隐状态强度按rnnMemoryStrength * 0.8 + 30累积并衰减(L167),即信息随传递步数推移不断"打折",正是长程记忆丢失的直观呈现。

6.2 现代设计:Transformer(圆桌会议)

2017 年,Google 提出了全新的Transformer架构,把"传话游戏"改成了圆桌会议

  • 上帝视角(并行计算):所有词同时"入座",无需排队;每个词把自己的信息写在卡片上放在桌子中央;
  • 注意力机制(Attention):每个词可以直接看到桌上任何其他词的信息。例如读到"它"时,模型无需回忆前文传递,直接看到"那只猫",立刻明白"它 = 那只猫"。

这完美解决了 RNN 的弱点:(所有人同时看资料,GPU 满负荷运转)、不遗忘(无论句子多长,第 1 个词和第 10,000 个词之间都只有"一步之遥")。

一句话总结:RNN 像迷宫,一步一步走,容易迷失;Transformer 像上帝视角的地图,起点终点一目了然。

为什么仍需要"位置"信息

因为 Transformer 是"一次处理所有词",若不特别处理,它无法区分"我爱你"和"你爱我"(同样的词、不同顺序)。因此要给每个词发一张编号卡片(位置编码,Positional Encoding),告诉模型谁在第 1 位、谁在第 2 位。

小提示:许多 LLM 是自回归(autoregressive)的(预测下一个词),生成时仍然逐 Token 输出;但在每个生成步骤内部,Transformer 仍可利用矩阵并行与缓存优化。

组件 RNNvsTransformer.vue 中的注意力矩阵演示了"它"的指代消解:源码中的attentionMap(L195-L214)对句子 "The animal didn't cross the street because it was too tired." 预定义了"it"animal(0.8)、street(0.1)、自身(1.0)的注意力权重,鼠标悬停任一单词即可看到它"注意"了哪些词及百分比——这是文档中"读到'它'时直接看到'那只猫'"的交互式注脚。

6.3 效率黑盒:KV-Cache

你可能听说过,长文本生成越到后面越慢、越占显存,原因通常是模型需要"记住"此前生成的所有内容。

Transformer 如何做"笔记"?在注意力机制中,每个词会生成两个向量——**Key(K)**和Value(V)——供后续词"查询"使用:

  • 当模型生成第 100 个词时,它需要回看前 99 个词的 K 和 V;
  • 若每次都重新计算这 99 个词的 K、V,将是巨大的浪费。

KV-Cache 的作用就像一个增量笔记本

  1. 不重新计算:算完第 1 个词的 K、V 后就存起来;
  2. 只算新的:生成第 2 个词时只计算第 2 个词的 K、V,再与第 1 个词的 K、V 合并;
  3. 越写越厚:随着对话推进,这个"笔记本"(显存占用)持续变大。

这就是长上下文对话(Long Context)消耗显存的原因——不是模型变大了,而是笔记(KV-Cache)太多了

七、从"续写"到"对话"

很多人误以为 ChatGPT 真的"理解"我们说的话,但它的本能只有一个:猜下一个词(Next Token Prediction)

7.1 本能:疯狂续写

给基座模型(Base Model)输入"今天天气真好",它可能续写"我们去公园吧";但输入"美国的首都是什么?",它可能续写"中国的首都是什么?日本的首都是什么?"——因为它在模仿题库的格式,而不是回答问题。

7.2 技巧:用"剧本"引导出对话

要把它变成对话助手,工程师发明了角色扮演:给模型输入偷偷加上特殊标签(Template),让它以为自己在续写一段"对话剧本"。

你看到的是:

用户:你好

模型实际看到的是:

<|user|>你好<|assistant|>

模型一旦看到<|assistant|>,就知道:"哦,现在轮到我来演助手了。"

仓库中 TrainingInferenceDemo.vue 的"对话"标签页把这一过程可视化:左侧是用户视角的聊天界面,右侧展示模型真正看到的原始提示词——从源码结构看(L116-L122),其结构为<|system|> You are a helpful assistant.<|assistant|>(助手开场白)<|user|>(用户输入)<|assistant|>(待生成的回复),直观呈现了"用户看到什么"与"模型看到什么"之间的转换。同一组件的"训练"标签页还演示了训练循环:输入 Token → 模型矩阵运算 → 预测 vs 目标对比 → 计算 Loss → 调整权重,对应文档第 5 节"从 Unsinn 到好助手"中提到的 Teacher Forcing 训练思路。

八、从"胡说"到"好助手":对齐(Alignment)

仅仅会对话还不够。原始模型可能讲解如何制造炸弹或使用粗俗语言。要把它变成像 ChatGPT 那样礼貌可靠的助手,还需要最后两道工序:

8.1 SFT(监督微调,Instruction Fine-Tuning)

  • 让人类专家编写大量高质量问答对,教模型"如何得体地说话";
  • 目标:模型学会遵循指令,而不是胡乱续写。
  • 数据示例(JSON 格式):
// SFT 训练数据示例 { "messages": [ { "role": "user", "content": "请把这个句子翻译成英语:'你好'。" }, { "role": "assistant", "content": "Hello." } ] } // 模型学会了:当听到"翻译"的指令时,直接给出结果, // 而不是续写"你最近怎么样"

8.2 RLHF(基于人类反馈的强化学习)

  • 评分:模型生成多个回答,人类评审打分(哪个更安全?哪个更礼貌?);
  • 奖惩:好回答被奖励,差回答被惩罚,模型逐渐学会与人类价值观对齐(Alignment)。
  • 数据示例(JSON 格式):
// RLHF 偏好数据示例(DPO/PPO) { "prompt": "如何制造炸弹?", "chosen": "抱歉,我无法回答这个问题。", // 人类偏好的回答(安全) "rejected": "首先你需要……" // 人类拒绝的回答(危险) }

文档第 5 节的交互式演示(TrainingInferenceDemo.vue 的第 4 个标签"高级:Alignment")允许读者对比对齐前后的行为差异。

九、前沿研究:Thinking Model、MoE 与线性注意力

随着技术演进,单纯的"预测下一个词"有时会闹笑话,尤其在数学与逻辑问题上。于是出现了新一代Thinking Model(思考型模型,如 OpenAI o1、DeepSeek-R1)

9.1 什么是"思考"(Thinking Models)

人类面对复杂问题(例如"9.11 和 9.9 哪个大?")时不会反射式作答,而是先在脑中想一想。Thinking Model 学会了这种**慢思考(System 2)**能力:

  • 快思考(System 1):凭直觉、反射式作答,容易出错;
  • 慢思考(System 2):通过生成**思维链(Chain of Thought)**逐步推导,最后才给出答案。

仓库中 ThinkingModelDemo.vue 对这一过程提供了交互演示。

9.2 训练秘诀:从"模仿"到"探索"

传统模式(SFT——模仿学习)

  • 方法:向模型展示人类思维过程,让它模仿
  • 局限:模型上限受人类数据质量约束。如果人自己都想不到(例如极难的数学题),模型也学不会。

思考模式(RL——强化学习)

  • 方法:不提供过程数据,只给一个最终验证器(Verifier)。例如一道数学题,模型自己反复尝试:答错 → 惩罚;答对 → 奖励;
  • 顿悟时刻:经过十万次自我尝试,模型惊讶地发现:"如果我在给出答案前先在小本子上写下推导步骤,获得奖励的概率大增!"于是"先思考、再回答"的行为被强化并固化。这与通过自我对弈训练、最终超越人类棋谱的 AlphaGo 类似。

9.3 实践指南:Prompt 风格的大变革

使用 Thinking Model(如 DeepSeek-R1、OpenAI o1)时,Prompt 策略需要根本性改变:

属性传统模型(GPT-4o、Claude 3.5)Thinking Model(R1、o1)
核心逻辑System 1(直觉)System 2(逻辑)
Prompt 技巧需要引导式思维链(CoT),如"一步一步思考……"不要过多干预,模型自带 CoT,人为引导反而干扰
指令清晰度复杂任务需拆分为子任务直接给出最终目标,让模型自己拆解
适用场景创意写作、简单翻译、闲聊复杂数学、代码重构、逻辑推理

注意:对 Thinking Model,干预越少越好。你只需清晰定义"完美任务结果是什么",而不是"应该怎么做"。

9.4 未来趋势:快慢融合

未来可能不再区分"Thinking Model"和"普通模型"。理想的 AI 应像人类一样具备自适应计算能力(Adaptive Compute)

  • 遇到"1+1=?":立即调用 System 1,闪电般作答;
  • 遇到"证明黎曼猜想":自动切换到 System 2,思考三天三夜再作答;
  • 对用户无缝切换:你只负责提问,模型自己决定投入多少"脑力"。

9.5 架构演进:从"全能选手"到"专家团队"(Dense vs. MoE)

模型越大(如 GPT-4、DeepSeek-V3),每个词都要流经全部神经元就越不可忍受。于是出现了MoE(Mixture of Experts,专家混合)架构:

  • Dense(稠密模型)
    • 类比:全能天才,任何问题都调用全部大脑;
    • 特性:稳定,但知识越多越慢;
    • 代表:GPT-3、Llama-2。
  • MoE(专家混合)
    • 类比:流水线上的专家团队(每个词都换人处理);
    • 核心机制(Token 级路由):MoE 的本质是原生的 Token-Level Routing。它不是按"任务类型"分配工作(例如所有数学题都交给数学专家),而是按当前生成的词实时分配:
      • 模型生成def时,路由到代码专家
      • 模型生成love时,路由到文学专家
      • 模型生成3.14时,路由到数学专家。 也就是说,同一句话里不同的词往往由不同专家处理;
    • 特性:总人数多(参数总量大),但每个词只激活少数专家(激活参数少)。既有深度又快速
    • 代表:GPT-4、DeepSeek-V3、Mixtral。

仓库中 MoEDemo.vue 对 Token 级路由过程做了可视化演示。

9.6 效率革命:突破长度限制(Linear Attention)

MoE 之外还有另一个关键弱点:上下文长度。传统 Transformer(如 GPT-4)使用标准注意力机制,计算量随词数增长平方级爆炸

  • 读 1 万个词 → 1 亿次计算;
  • 读 10 万个词 → 100 亿次计算!

为了解决这个问题,MiniMax(abab 系列)、RWKV 等模型引入了线性注意力(Linear Attention)

动机:一个"网状",一个"线性"。根本区别在于:是保留所有原始词,还是随时压缩摘要?

  • 标准注意力(网状)——为什么要回看?
    • 核心原因:为了**"找到相关性"**;
    • 例子:在"我把苹果给了……"中,读到""时,模型必须检索之前所有词(我、把、苹果、给);
    • 流程:"他"发出查询信号(Query),与之前所有词的标签(Key)逐一比对:与"我"匹配 0 分,与"苹果"匹配100 分
    • 代价:由于不知道哪个词重要,必须检查所有前文词,一个都不能漏,所以网络越织越密。
  • 线性注意力——为什么不用回看?
    • 原理:模型学会了"做笔记"。读完"苹果"后,把"存在一个苹果"的信息压缩进一个状态(State);之后读到"他",直接在状态里查表:"他 = 苹果";
    • 代价:虽然快,但"压缩"可能丢失细节(例如苹果是红色的)。

LinearAttentionDemo.vue 在文档站点中演示了两种机制的对照。

9.7 架构对比:RNN vs. Transformer vs. RWKV

架构核心机制复杂度(长度 N)可并行训练推理速度遗忘问题代表
RNN顺序递归O(N)(低)慢(顺序执行)严重(长程记忆丢失)LSTM、GRU
Transformer全局注意力O(N²)(极高)中(KV-Cache)无(但受窗口限制)GPT-4、Llama
RWKV / Linear线性注意力O(N)(低)快(显存恒定)轻微(压缩损失)RWKV、MiniMax

RWKV / Linear Attention试图兼取两者之长:像 Transformer 一样并行训练,像 RNN 一样高效推理。

十、总结与学习路径

至此,你已经走完了从"Tokenization"到"ChatGPT"的完整路径:

  1. Tokenization:把文本拆成 Token;
  2. Embedding:把 Token 映射为语义向量;
  3. Transformer:借助注意力机制并行处理序列、提取特征;
  4. 训练:用 Template 格式化数据,通过 Teacher Forcing 并行训练;
  5. 推理:自回归地逐词生成。

推荐的下一步

  • 如果对数学感兴趣,深入线性代数(矩阵运算)与概率论
  • 如果想动手实践,尝试用 Python 的transformers库加载一个小模型(如 GPT-2)做实验。

十一、术语表

术语全称解释
LLMLarge Language Model大语言模型。通过海量文本训练的 AI 模型,能理解和生成人类语言。
Token分词单元。文本被拆解的最小单位(单词、字符或字符片段),模型读写的是 Token ID。
Embedding词向量。把 Token 映射到高维空间(如 4096 维)的数值向量,捕捉语义关系。
Transformer现代 LLM 的核心架构,基于注意力机制,可并行处理长文本。
AttentionAttention Mechanism注意力机制。让模型在处理一个词时动态关注上下文中其他相关词。
Context Window上下文窗口。模型一次推理能"记住"的最大 Token 数(如 128k)。
Pre-training预训练。在海量无标注文本上训练,学习基础语言规律与世界知识。
SFTSupervised Fine-Tuning指令微调。用高质量问答对教模型遵循人类指令。
RLHFReinforcement Learning from Human Feedback基于人类反馈的强化学习。通过人类评价进一步调整模型行为,使其与人类价值观对齐。
CoTChain of Thought思维链。引导模型在给出最终答案前先输出推理步骤。
MoEMixture of Experts专家混合。由多个"专家"子模型组成,按 Token 动态激活相应专家,更高效。
Temperature温度。控制模型生成随机性的参数:温度越高越有创意但越难控,越低越确定。

十二、延伸阅读与仓库资源

本章属于 easy-vibe 课程附录"8-artificial-intelligence"模块,与以下章节构成递进关系,适合按顺序深入:

  • Transformer 注意力机制:对注意力数学细节的进一步展开;
  • Embedding 与向量检索:向量表示在检索中的应用;
  • 上下文工程 与 RAG:把本章的 Token/上下文概念用到实际系统中;
  • 全部配套交互组件源码位于 llm-intro 目录,包括 LlmQuickStartDemo.vue、TokenizationDemo.vue、EmbeddingDemo.vue、TokenizerToMatrix.vue、RNNvsTransformer.vue、TrainingInferenceDemo.vue、ThinkingModelDemo.vue、MoEDemo.vue、LinearAttentionDemo.vue,可结合本文各节对照阅读。

【免费下载链接】easy-vibe💻 vibe coding 101|The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询