第 1 周 LLM 原理与高效微调知识精讲手册
适用目标:AI 算法工程师、多模态 / 大模型算法工程师
学习周期:7 天,约 28-32 小时
实验模型:
Qwen/Qwen2.5-1.5B-Instruct本手册解决:每个概念是什么、为什么存在、代码中体现在哪里、面试如何表达。
配套材料:VS Code 实战项目提示词包
1. 先建立完整认知地图
不要把 Tokenizer、Transformer、SFT、LoRA、量化和评测当成互不相关的知识点。一个领域微调项目的真实链路是:
text
业务问题
-> 定义输入、输出与评价标准
-> 构造并切分数据
-> Chat Template 拼接对话
-> Tokenizer 转换为 input_ids
-> Data Collator 补齐 batch,并构造 attention_mask / labels
-> Decoder-only Transformer 前向计算 logits
-> Cross Entropy 计算目标 token loss
-> 反向传播只更新 LoRA 参数
-> 验证集选择配置
-> 独立测试集对比 Base / Prompt-only / LoRA
-> 错误分析与工程部署
第一周必须形成三个层面的理解:
- 模型层:语言模型如何预测下一个 token。
- 训练层:数据如何变为 loss,参数如何更新。
- 实验层:如何证明提升来自微调,而不是数据泄漏或提示词变化。
2. 语言模型的本质
2.1 从一句话理解 LLM
大语言模型最核心的训练目标不是"理解问题"或"生成答案",而是:
给定已有 token,预测下一个 token 的条件概率。
一句话 遥感影像发生变化 被 Tokenizer 转为 token 序列:
text
x1, x2, x3, ..., xT
自回归语言模型将整段文本的概率分解为:
text
P(x1, x2, ..., xT)
= P(x1) × P(x2|x1) × P(x3|x1,x2) × ... × P(xT|x1,...,xT-1)
模型训练时不断提高真实下一个 token 的概率。经过海量数据训练后,它在预测 token 的过程中间接学到了语言规律、事实关联、推理模式和指令格式。
2.2 为什么 next-token prediction 能完成问答
Instruct 模型看到大量如下形式的数据:
text
<system> 你是一个助手
<user> 问题
<assistant> 高质量回答
当推理输入停在 <assistant> 后,模型预测"这种上下文之后最可能出现什么"。由于训练分布中这里通常跟着回答,它便生成答案。
这说明两个重要事实:
- Prompt 的本质是把输入组织成模型熟悉的条件分布。
- SFT 的本质是改变某些上下文下的目标输出分布。
2.3 训练与推理为何不同
训练时已知完整正确序列,可一次性预测所有位置:
text
输入: [BOS, 遥, 感, 变, 化]
标签: [遥, 感, 变, 化, EOS]
这叫 teacher forcing。各位置虽然通过 Causal Mask 看不到未来,但可以在 GPU 上并行计算。
推理时不知道未来 token:
text
第 1 步:输入问题 -> 生成 token A
第 2 步:输入问题 + A -> 生成 token B
第 3 步:输入问题 + A + B -> 生成 token C
因此 Decode 天然逐步进行。KV Cache 可以减少重复计算,但不能完全消除自回归依赖。
2.4 Logits、概率与采样
模型最后一层为每个位置输出长度为词表大小 V 的向量:
text
logits shape = [batch_size, sequence_length, vocab_size]
logits 是未经归一化的分数。Softmax 将其转成概率:
text
p_i = exp(z_i) / sum(exp(z_j))
生成策略:
greedy:选概率最高的 token,稳定但可能僵硬或重复。temperature:缩放 logits;低温更确定,高温更多样。top-k:只在概率最高的 k 个 token 中采样。top-p:在累计概率达到 p 的最小候选集合中采样。beam search:维护多个高概率序列,更适合翻译等明确目标,开放对话未必更好。
结构化抽取项目应优先确定性解码,避免采样导致评测波动。
3. Tokenizer:文字进入模型的入口
3.1 为什么不能直接按词切分
按完整单词构建词表会遇到:
- 词表巨大。
- 新词、专业词、人名无法覆盖。
- 中文没有天然空格分词。
- 拼写变化、数字、代码组合无限。
现代 LLM 通常采用子词或字节级方法,在词表大小与序列长度之间折中。
3.2 BPE 的直观理解
BPE 从较小基本单元开始,反复把语料中最常一起出现的相邻单元合并。例如:
text
l o w
l o w e r
n e w e s t
高频组合可能逐渐合并成 lo、low、est。常用词可成为较少 token,罕见词仍能拆开表示。
不需要第一周手写工业级 Tokenizer,但必须知道:
- Token 不等于汉字、英文单词或字节,具体取决于词表。
- 同一句话在不同模型上的 token 数可能不同。
- 序列长度按 token 计算,不按字符计算。
- 专业术语被切得很碎会增加长度,也可能影响学习难度。
3.3 特殊 Token
常见特殊 token:
BOS:序列开始。EOS:序列结束;生成停止的重要依据。PAD:将 batch 内样本补齐到相同长度。UNK:无法表示的单元,字节级模型中可能很少出现。- 角色/对话边界 token:标记 system、user、assistant 或消息结束。
特殊 token 必须与模型训练时一致。重复添加 BOS/EOS、遗漏 assistant 起始标记、把 PAD 与 EOS 混用,都可能造成输出异常。
3.4 Chat Template 为什么重要
下面两段在人看来语义相同,对模型却不是同一种输入:
text
用户:判断变化类型。助手:
text
<|im_start|>user
判断变化类型。<|im_end|>
<|im_start|>assistant
Instruct 模型按特定模板训练。如果推理和训练模板不一致,模型可能:
- 把用户文本当成系统指令。
- 复述问题而不是回答。
- 不知道何时结束。
- 输出角色标记或格式异常。
实际项目中应使用 tokenizer.apply_chat_template(),不要手工猜模板。
3.5 Padding 与 Attention Mask
一个 batch 的序列长度不同,需要补齐:
text
样本 A: [a, b, c, EOS]
样本 B: [d, e, EOS, PAD]
attention_mask 通常用 1 表示有效 token,0 表示 padding。模型应忽略 PAD,否则无效位置会污染注意力和 loss。
注意区分:
- Padding Mask:不看补齐位置。
- Causal Mask:不看未来位置。
两者解决不同问题,通常会共同生效。
4. Embedding 与位置表示
4.1 Token Embedding
输入 token id 为整数索引:
text
input_ids: [B, T]
Embedding 表相当于大小为 [V, D] 的可训练查找表。查表后:
text
hidden_states: [B, T, D]
其中:
B:batch size。T:sequence length。V:vocabulary size。D:hidden size。
Embedding 只告诉模型 token 的语义表示,不自然包含它位于第几个位置。
4.2 为什么需要位置编码
如果没有位置,Self-Attention 对输入排列缺少感知:
text
人追狗
狗追人
两句 token 集合相似,但语义相反。模型必须知道相对顺序。
4.3 RoPE 的核心思想
RoPE 不是简单把位置向量加到 token embedding,而是根据位置对 Q/K 的二维子空间做旋转。不同位置使用不同角度,旋转后的 Q/K 点积会自然包含相对位置信息。
面试层面的正确表达:
RoPE 对 Query 和 Key 注入与位置相关的旋转,相同内容在不同位置得到不同相位;两个位置旋转后的内积可表示相对位置差,因此适合自回归模型。
需要知道的边界:
- RoPE 不会让模型无限理解任意长上下文。
- 超过训练长度可能退化。
- RoPE scaling 是工程扩展方法,但扩大长度不等于长上下文质量不损失。
5. Self-Attention:token 如何互相读取信息
5.1 Q、K、V 的直觉
对每个 token 的表示 X 做三组线性映射:
text
Q = XWq
K = XWk
V = XWv
可以把它们类比为:
- Q:我想寻找什么信息。
- K:我能被什么查询匹配。
- V:如果被关注,我实际提供什么信息。
类比仅帮助理解,最终仍是矩阵运算。
5.2 核心公式
text
Attention(Q,K,V) = softmax(QK^T / sqrt(dk))V
计算过程:
QK^T得到查询位置和各键位置的相关分数。- 除以
sqrt(dk),避免维度增大使点积方差过大、Softmax 饱和。 - 加入 Causal / Padding Mask。
- Softmax 得到注意力权重。
- 用权重加权 V,得到聚合信息。
5.3 张量形状必须熟练
设:
text
B = batch size
T = sequence length
D = hidden size
H = attention heads
Dh = D / H
典型形状:
text
X [B, T, D]
Q/K/V [B, H, T, Dh]
QK^T [B, H, T, T]
weights [B, H, T, T]
context [B, H, T, Dh]
concat [B, T, D]
标准注意力中,T × T 是长序列计算和显存开销增长的关键来源。
5.4 Multi-Head Attention 的意义
多个头不是简单重复。每个头有不同投影参数,可在不同表示子空间关注不同关系,例如局部搭配、远距离指代、格式边界等。各头输出拼接后再投影回 hidden size。
不能把某个头稳定解释为明确的人类语义规则,但多头确实提升了表示容量。
5.5 MHA、GQA、MQA
- MHA:每个 Query head 有自己的 K/V head。
- GQA:多组 Query head 共享较少的 K/V head。
- MQA:所有 Query head 共享一组 K/V。
减少 K/V heads 可以显著降低 KV Cache,大模型推理常使用 GQA,在质量和效率之间折中。
6. Decoder Block 的其他组件
6.1 MLP / FFN
Attention 负责 token 间信息交流,MLP 对每个 token 的表示独立做非线性变换。现代 LLM 常使用带门控的激活,如 SwiGLU。
直觉上:
- Attention 负责"从上下文拿什么"。
- MLP 负责"拿到后如何加工"。
6.2 Residual Connection
残差结构:
text
y = x + F(x)
它让信息和梯度有直接通路,使深层网络更易优化。子层只需学习相对于输入的增量变化。
6.3 LayerNorm 与 RMSNorm
归一化用于控制激活尺度、稳定训练。许多现代 LLM 使用 RMSNorm,它不减均值,只按均方根缩放,计算更简单。
6.4 Pre-Norm 与 Post-Norm
- Post-Norm:子层后归一化,原始 Transformer 常见。
- Pre-Norm:先归一化再进入子层,现代深层 LLM 更常见,梯度传播通常更稳定。
不要死记所有模型结构,查看具体模型配置和源码。
7. Causal Language Modeling 的 Loss
7.1 Shift Labels
模型在位置 t 的输出用于预测位置 t+1 的 token:
text
logits[:, :-1] 对齐 labels[:, 1:]
很多 Hugging Face 模型内部会完成 shift,但你必须确认所用模型与训练器行为,避免重复 shift。
7.2 Cross Entropy
对于真实 token y:
text
loss = -log P(y | context)
模型越确信正确 token,loss 越小。一个 batch 的 loss 是有效目标 token loss 的平均或加权结果。
7.3 Perplexity
text
PPL = exp(cross_entropy)
PPL 可衡量语言建模不确定性,但不等于业务正确率。结构化抽取应以 Accuracy、F1、Schema 合法率等任务指标为主。
7.4 为什么只训练 Assistant Token
在指令微调中,system/user 是条件,assistant 是期望模型生成的目标。通常把非 assistant 的 label 设为 -100,CrossEntropyLoss 会忽略这些位置。
text
input: system + user + assistant
label: -100 + -100 + assistant token ids
优点:优化目标更集中于回答行为。风险:如果 mask 边界错误,可能没有有效 token,或误训练角色标记。因此必须可视化检查一条 batch。
8. SFT:监督微调究竟改变什么
8.1 SFT 的作用
SFT 擅长:
- 学习任务指令与输出格式。
- 学习领域表达和有限模式。
- 改善特定分类、抽取或风格任务。
- 让模型学会何时拒答或触发人工复核。
SFT 不擅长:
- 用很少数据可靠注入大量事实知识。
- 保证所有事实实时更新。
- 自动解决模糊任务定义和错误标签。
- 消除幻觉。
需要实时或海量知识时,RAG 往往更合适;需要任务行为变化时,SFT 更合适。
8.2 SFT、持续预训练、RAG、DPO 的区别
| 方法 | 主要数据 | 主要目标 | 典型用途 |
|---|---|---|---|
| 持续预训练 | 大量领域原始文本 | 继续学习领域语言分布 | 法律、医疗等领域适配 |
| SFT | 指令与标准回答 | 学任务和回答行为 | 抽取、问答、格式输出 |
| RAG | 文档库 + 查询 | 推理时读取外部证据 | 更新快、需引用的知识 |
| DPO 等偏好优化 | chosen / rejected 对 | 学习偏好与风格 | 对齐、拒答、回答质量 |
8.3 高质量数据比数量更重要
小规模 SFT 中,以下问题会直接破坏训练:
- 同一输入对应互相冲突的标签。
- 输出 JSON 字段有时缺失、有时改名。
- 标签说明模糊。
- 训练集与测试集存在改写版本泄漏。
- 合成数据句式单一,模型只学模板。
- 训练样本中混有真实客户或敏感数据。
一个合格 Dataset Card 应说明:来源、许可、规模、类别、字段、清洗、切分、隐私、偏差和已知局限。
9. LoRA:低成本更新模型行为
9.1 全量微调为什么昂贵
训练时的显存不只包含模型权重,还包含:
- 参数。
- 梯度。
- 优化器状态,例如 Adam 的一阶、二阶矩。
- 激活值。
- 临时计算缓冲区。
全量微调所有参数会带来很大显存、存储和训练成本。
9.2 LoRA 的低秩更新
冻结原权重 W,只学习增量:
text
W' = W + ΔW
ΔW = scale × B × A
scale 常为 alpha / r
若 W 形状为 [d_out, d_in]:
text
A: [r, d_in]
B: [d_out, r]
新增参数:
text
r × d_in + d_out × r
= r × (d_in + d_out)
当 r 远小于输入输出维度时,新增参数远少于原矩阵。
9.3 LoRA 超参数如何理解
r:低秩容量。过小可能欠拟合,过大增加参数且可能过拟合。lora_alpha:更新缩放。需结合r理解,不能单独比较。lora_dropout:LoRA 分支上的正则化,小数据可适当使用。target_modules:注入哪些线性层。bias:是否训练偏置,常保持冻结。
常见 target modules:
- Attention:
q_proj、k_proj、v_proj、o_proj。 - MLP:
gate_proj、up_proj、down_proj。
只训练 Q/V 更省参数;覆盖 Attention 与 MLP 容量更强。没有永远最优配置,应通过验证集对照。
9.4 Adapter 与合并模型
- Adapter 只保存增量参数,体积小,加载时需要 Base model。
- 合并模型将
ΔW加到W,单模型部署方便,但体积恢复为完整模型大小。 - 一个 Base 可以挂多个业务 Adapter,便于多任务管理。
10. QLoRA 与量化
10.1 量化的基本思想
FP32、BF16、FP16、INT8、4-bit 使用不同位宽表示数值。位宽越低,存储和带宽更省,但数值误差与算子支持更复杂。
需要区分:
- 权重量化。
- 激活量化。
- KV Cache 量化。
- 训练时量化。
- 推理部署量化。
它们不是同一件事。
10.2 QLoRA 的工作方式
QLoRA 将冻结的 Base 权重以 4-bit 保存,需要计算时反量化到 BF16/FP16;LoRA 参数通常以较高精度训练。
核心概念:
- NF4:适合近似正态分布权重的 4-bit 数据类型。
- Double Quantization:进一步量化量化常数,减少平均存储。
- 高精度计算 dtype:低位存储不等于所有矩阵计算都以 4-bit 进行。
QLoRA 省下 Base 权重显存,但激活、LoRA 参数、梯度、优化器状态仍占显存。长序列依然可能 OOM。
10.3 BF16 与 FP16
- FP16 尾数较多但指数范围较小,可能溢出,需要 loss scaling。
- BF16 指数范围接近 FP32,训练通常更稳定,但需要硬件支持。
硬件支持时优先尝试 BF16;否则使用 FP16 并关注 NaN/Inf。
11. 训练超参数与显存
11.1 Learning Rate
LoRA 常使用比全量微调更高的学习率,但具体值取决于数据量、模型、batch 和模块范围。
- 太高:loss 震荡、输出崩坏、遗忘通用能力。
- 太低:短周期内学不到任务。
第一周可从 1e-4 与 2e-4 做单变量对照。
11.2 Batch 与梯度累积
有效 batch size:
text
per_device_batch × gradient_accumulation_steps × GPU_count
梯度累积先进行多次前向/反向,再更新一次参数。它节省单步显存,但训练耗时增加,并不与真正大 batch 在所有细节上完全相同。
11.3 Sequence Length
不要默认设 4096。先统计数据 token 长度的 P50/P90/P95,再选择可覆盖大多数样本的长度。
过短:截断输入或答案。
过长:padding 浪费、激活显存和计算开销增加。
11.4 Epoch、Warmup 与 Scheduler
- Epoch 太少可能欠拟合,太多会记忆小数据。
- Warmup 在训练初期逐步提高学习率,减轻初始不稳定。
- Cosine/linear scheduler 控制后续学习率下降。
小数据通常应频繁验证并保存最佳 checkpoint,而不是只看最后一个 epoch。
11.5 Gradient Checkpointing
正常反向传播需要保存中间激活。Gradient Checkpointing 只保留部分节点,反向时重新计算其他激活,以计算换显存。
特点:
- 降低激活显存。
- 训练更慢。
- 不降低模型权重本身占用。
12. KV Cache 与推理性能
12.1 缓存了什么
在自回归生成中,历史 token 在每一层的 K/V 不再变化。保存它们后,新一步只需计算新 token 的 Q/K/V,并让新 Q 查询历史 K/V。
近似显存:
text
KV bytes ≈ 2 × layers × batch × seq_len × kv_heads × head_dim × bytes_per_element
2 表示 K 和 V。
12.2 Prefill 与 Decode
- Prefill:处理完整 Prompt,计算密集,可较好并行;决定首 token 延迟的重要部分。
- Decode:逐 token 生成,常受内存带宽和 KV Cache 读取影响。
常见指标:
- TTFT:Time To First Token。
- TPOT:Time Per Output Token。
- ITL:Inter-Token Latency。
- Throughput:每秒请求数或 token 数。
第一周只需理解;第四周再用 vLLM 系统压测。
13. 评测:如何证明模型真的变好
13.1 为什么训练 Loss 不够
Loss 下降只能说明模型更拟合训练目标,不能证明:
- 未见数据上更好。
- 输出符合业务格式。
- 没有幻觉。
- 没有记住测试答案。
- 提升超过 Prompt 优化。
13.2 Train / Validation / Test 的职责
- Train:更新参数。
- Validation:选超参数、epoch 和 checkpoint。
- Test:只用于最终一次客观报告。
如果根据测试结果反复改训练,测试集就被间接用于调参,不再独立。
13.3 三组公平基线
本周必须比较:
- Base:基础指令。
- Prompt-only:优化指令、Schema、少样本示例,但不训练。
- LoRA:与 Prompt-only 使用相同推理模板。
只有这样才能区分提示工程收益和微调收益。
13.4 推荐指标
遥感变化结构化抽取建议:
- Accuracy:整体分类正确率。
- Macro-F1:每类 F1 等权平均,关注少数类。
- JSON Valid Rate:能否被 JSON parser 解析。
- Schema Valid Rate:字段、类型、枚举是否全部正确。
- Evidence Support Rate:证据是否由输入支持。
- Hallucination Rate:是否添加输入中不存在的关键事实。
- Review Recall:真正不确定样本是否触发人工复核。
13.5 数据泄漏
常见泄漏:
- 相同样本或改写样本跨 split。
- 同一原始案例切出的片段跨 split。
- 先看测试错误,再把类似样本加入训练。
- 用答案生成输入,留下明显模板线索。
先按原始案例或生成模板分组,再切分;不能只做逐行随机切分。
13.6 错误分析
至少把失败分为:
- 类别混淆。
- JSON 语法错误。
- Schema 字段错误。
- 证据不支持。
- 幻觉。
- 不确定样本过度自信。
- 长度截断。
- Prompt 歧义。
- 标签错误。
错误分析的目的不是解释过去,而是决定下一步应该改数据、Prompt、训练还是业务流程。
14. 常见训练故障与诊断逻辑
14.1 Loss 不下降
按顺序检查:
labels是否几乎全是-100。- 可训练参数是否大于 0。
- LoRA 参数是否有非零梯度。
- Chat Template 与答案边界是否正确。
- 学习率是否过低。
- 是否能在 10-20 条数据上过拟合。
极小数据过拟合测试是验证训练管线的关键。如果 20 条数据都记不住,先修代码,不要扩大数据。
14.2 OOM
通常按以下顺序处理:
- 降低
per_device_train_batch_size。 - 降低
max_seq_length。 - 使用梯度累积维持有效 batch。
- 开启 gradient checkpointing。
- 使用 QLoRA。
- 缩小模型。
不要先盲目清缓存或反复重启;先理解主要显存来自哪里。
14.3 Loss 很低但测试很差
可能原因:
- 过拟合。
- 训练/推理模板不一致。
- 数据泄漏导致验证分虚高。
- 训练数据过于模板化。
- 测试分布与训练分布不同。
- 评测解析代码有错误。
14.4 JSON 输出不稳定
处理顺序:
- 统一所有训练答案 Schema。
- Prompt 明确只输出 JSON。
- 确定性解码。
- Schema 校验与有限重试。
- 仍不稳定时再增加格式样本或使用约束解码。
模型生成之后必须由程序校验,不能假设"看起来像 JSON"就是合法 JSON。
15. 本周项目的完整设计
15.1 项目名称
GeoChange Text SFT:遥感变化描述结构化抽取
15.2 输入输出
输入:自然语言描述双时相变化。
输出:固定 JSON。
json
{
"change_type": "building_added",
"evidence": "后时相新增规则矩形屋顶",
"confidence": "high",
"needs_review": false
}
15.3 类别建议
building_addedbuilding_removedroad_changedwater_changedfarmland_changedno_changeuncertain
15.4 系统边界
本周只做文本描述抽取,不处理图像。第二周把文本输入替换为双时相图像,并保留同一输出 Schema、评测器和错误分类体系。
15.5 为什么这个项目适合你
- 利用遥感业务经验,标签和困难样本更专业。
- 能客观评测,不会退化成聊天演示。
- 与下一周 VLM 任务直接衔接。
- 面试中可同时展示算法、数据、微调、评测和工程能力。
16. 七天知识学习顺序
| 天 | 核心知识 | 必须完成的证明 |
|---|---|---|
| Day 1 | 语言建模、Attention、Decoder | 画数据流,手推张量形状 |
| Day 2 | Tokenizer、Template、RoPE、KV Cache | Token 检查与 KV 估算 |
| Day 3 | SFT、数据、Loss Mask | Dataset Card 与可视化 labels |
| Day 4 | LoRA、QLoRA、量化 | 首次训练与 Adapter 重载 |
| Day 5 | 超参数、显存、故障诊断 | 两组单变量实验 |
| Day 6 | 基线、指标、错误分析 | 三组评测与 20 个失败样例 |
| Day 7 | 复现、报告、面试表达 | README、实验报告、10 分钟口述 |
详细日程与验收清单见:第 1 周详细学习手册。
17. 权威资料阅读顺序
只看与当天任务相关章节,不要求一周读完所有材料。
- D2L:注意力机制与 Transformer
- The Annotated Transformer
- Hugging Face LLM Course
- Transformers:Chat Templates
- Transformers:KV Cache
- TRL:SFTTrainer
- PEFT:LoRA
- Transformers:bitsandbytes 量化
- Qwen 官方文档
- LoRA 论文
- QLoRA 论文
18. 面试时的表达标准
不要只回答"LoRA 比较省显存"。一个合格回答应包含机制、收益、代价和验证:
LoRA 冻结基座权重,用两个低秩矩阵表示权重增量,新增参数约为
r(d_in+d_out),因此梯度和优化器状态只作用于少量参数。它显著降低可训练参数和 checkpoint 大小,但激活值仍占显存,rank 与 target modules 也会影响容量。我会在固定验证集上对比不同 rank,并以任务指标而不是训练 loss 选择配置。
回答 QLoRA:
QLoRA 在 LoRA 基础上把冻结的 Base 权重以 4-bit 保存,计算时反量化到较高精度,LoRA 参数仍用较高精度训练。NF4 和双重量化进一步降低存储,但它不能消除激活和序列长度带来的显存开销。训练量化与最终部署量化也需要区分。
回答评测:
我会固定独立测试集,比较 Base、优化 Prompt 和 LoRA,保证推理模板与解码配置一致;验证集用于选 rank、学习率和 checkpoint,测试集只做最终报告。除 Macro-F1 外,还评测 JSON/Schema 合法率、幻觉率,并对至少 20 个失败样例分类。
19. 本周完成标准
达到以下标准才算学完,而不是看完:
- 能从文本到 token、hidden states、logits、loss 完整讲一遍。
- 能解释 Attention 的公式、Mask 和关键张量形状。
- 能解释 RoPE、KV Cache、Prefill 和 Decode。
- 能检查 Chat Template 和 assistant-only loss mask。
- 能计算 LoRA 参数量,说明 QLoRA 的节省与边界。
- 能独立跑通训练、加载 Adapter、执行批量推理。
- 能设计无泄漏的 Train/Validation/Test。
- 有 Base、Prompt-only、LoRA 公平对照。
- 有任务指标、格式指标、幻觉指标和错误分析。
- 项目可按 README 从干净环境复现。
完成后进入第二周多模态学习时,你增加的只是视觉输入和视觉编码器;训练纪律、数据治理和评测方法不需要重新学习。