🧪 交互式仿真 · 无需 GPU

仿真训练

调整参数,实时观察模型内部发生了什么。完成每个实验的目标,像通关一样掌握 LLM。

1
分词与嵌入
2
Transformer
3
数据准备
4
预训练
5
微调
6
对齐
7
推理部署
8
应用构建
Tokenization & Embedding
⚙️ 超参数
3e-4
太小 → 收敛慢;太大 → 震荡甚至发散
32
越大越稳但越吃显存;越小噪声越多
5
训练多久
80%
垃圾进垃圾出:数据质量决定 loss 下限
🎯 本关目标训练仿真

默认开启🧮真实计算:浏览器内用 TensorFlow.js 真训练一个 2→8→6→1 的小神经网络。调整超参数,使训练结束时 Loss < 0.5 且 Accuracy > 90%。试着理解每个参数如何影响真实收敛。

📈 训练曲线 待运行
train loss accuracy step 0 / 0
—
当前 Loss
—
Accuracy
0
Epoch
3e-4
Learning Rate
🕸️ 自注意力权重 Head 1

每个格子表示“行 token 对列 token 的关注程度”。颜色越深,注意力权重越高。切换不同的注意力头,观察模型关注的模式差异。

🎛️ 切换注意力头

💡 观察要点

不同的头学会关注不同的关系——有的看位置,有的看语法,有的看语义。这就是“多头”注意力的意义。

🎛️ 采样参数
1.0
越低越确定(保守),越高越随机(有创意)
5
只从概率最高的 K 个候选里采样

提示词:“今天天气真”,看看模型会预测下一个什么词。

📊 下一个 token 的概率分布
✍️ 生成结果
今天天气真▋
✂️ Tokenizer 分词可视化

输入文本,观察不同分词策略如何将文本拆分为 token。理解 BPE、WordPiece 等算法的核心思想。

🧩 分词结果 0 tokens
📊 分词统计
🎯 本关目标分词器

分别用4 种策略对同一段文本分词,观察 token 数量的差异。理解为什么 BPE 是主流方案。

💡 知识要点

  • 逐字符:token 数最多,序列太长
  • 按单词:词表爆炸,无法处理新词
  • BPE:平衡了词表大小与序列长度
  • 中文逐字:每个汉字一个 token
🔍 词语相似度
选择两个词语查看相似度
🏷️ 语义聚类
🎯 本关目标嵌入空间

找到一对余弦相似度 > 0.8 的词语组合,并找到一对相似度 < 0.2 的组合。

📐 Word Embedding 二维空间

每个词被映射为一个高维向量。这里用 2D 投影展示词语之间的语义关系——距离越近,语义越相似。

⚙️ 优化器参数
0.1
步长大小:太大会跳过最优解,太小收敛慢
0.0
累积历史梯度方向,帮助跳出局部最小值
简单二次
🎯 本关目标梯度下降

让优化器找到全局最小值(Loss < 0.01)。试试不同的损失函数和学习率组合,理解动量如何帮助跳出局部最优。

⛰️ 损失地形 待运行
—
当前 Loss
0
迭代步数
—
x 坐标
—
y 坐标
📏 上下文窗口可视化

LLM 一次能「看到」的文本长度有限(上下文窗口)。超出窗口的内容会被截断或遗忘。调整窗口大小,观察模型如何处理长文本。

💬 模型输出
调整参数后点击「生成回答」查看模型输出
🎛️ 窗口参数
128
从 32 tokens 到 4096 tokens
256
模拟输入文本的 token 数量
中等
距离越远的 token 注意力越弱(模拟「中间遗忘」)
🎯 本关目标上下文窗口

调整参数使模型能正确回忆文本开头和结尾的关键信息(信息保留率 > 80%),同时观察到「中间遗忘」现象。

💡 观察要点

  • 窗口太小时,文本被截断,信息丢失
  • 即使窗口够大,中间部分也容易被「遗忘」
  • 这就是 Lost in the Middle 现象
⚖️ 偏好对齐 · RLHF vs DPO

作为人类标注员,对模型生成的两个回答进行排序。你的反馈将训练奖励模型,进而用 PPO 强化优化 LLM 的输出质量。

📊 训练进度
0/5
标注轮次
—
奖励模型分数
回答质量趋势
🎯 本关目标RLHF

完成 5 轮标注,观察奖励模型分数如何随着人类反馈的积累而提升。理解 RLHF 如何让模型学会「说人话」。

💡 RLHF 流程

  • 1. 模型生成多个候选回答
  • 2. 人类标注员排序(你在这里!)
  • 3. 用排序数据训练奖励模型
  • 4. 用奖励模型作为信号强化学习
🎛️ 语料工流参数
中
越激进 → 删掉更多近似重复,数据变“干净”但变少
0.50
分线越高 → 留下的语料越优质,但丢弃量越大
15%
70%
15%
三者自动归一化为 100% 配比
🎯 本关目标数据准备

在保留足够 token 的前提下,把平均质量拉到 0.75 以上,并保留至少 10% 代码与 15% 书籍——训练出能力均衡的模型。

—
原始 Token
—
去重后
—
有效 Token
—
平均质量
📉 数据漏斗与下游影响
数据量与质量直接决定下游 loss 下限:
原始语料
100%
去重后
—
质量过滤
—
—
预估 Loss 下限
🧠 能力预测 (来自配比)
代码能力
—
通用对话
—
知识密度
—
⚙️ 微调配置
8
r 越大表达能力越强、可训参数越多
16
实际缩放 = alpha / r
2e-4
🎯 本关目标LoRA 微调

用少于 0.5% 的可训参数把微调 loss 降到 < 0.6。打开 Loss Mask 观察只对回答计算 loss 的效果。

—
可训参数
—
占总参数
—
显存 (GB)
—
最终 Loss
🎭 指令数据的 Loss Mask
灰色 = prompt(masked, 不计 loss)· 橙色 = 回答(计算 loss)
📈 微调曲线 待运行
💬 微调前后的输出对比
Prompt:用一句话介绍 LoRA。
(基座模型) LoRA 是……一个缩写吗?我不太确定。
(微调后) 先运行微调查看变化 →
🎛️ 部署配置 (7B 模型 · 24GB 显卡)
位宽越低 → 显存越小、精度损失越大
2048
4
🎯 本关目标量化与 KV Cache

把显存占用压到 24GB 以内且精度损失 < 3%,同时用 KV Cache 大幅降低每 token 计算量。观察 KV Cache 显存随上下文的增长。

—
总显存 (GB)
—
精度损失
—
KV Cache
—
每步计算量
📦 显存堆叠 (目标 ≤ 24GB) —
权重 KV Cache 激活/开销
📈 KV Cache 显存随上下文增长

💡 KV Cache 的作用

开启后每个新 token 复用历史 K/V,计算量从 O(n²) 降为 O(n);代价是把历史 K/V 存在显存里。关掉它显存省了,但每步重算全部历史。

🎛️ 检索参数
128
块太大→噪声多;太小→上下文碎片化
3
0.30
低于阈值的块直接丢弃
🎯 本关目标RAG

调节参数,让查询「LoRA 是什么」的召回率 > 80% 且 噪声率 < 20%,拼出正确答案。

🔍 召回片段 —
✅ 最终回答 (基于召回)
调节左侧参数查看拼接出的回答
—
召回率
—
噪声率