AI Model Engineering 90:模型原理、训练与推理实验室
长期总路线见 docs/AI_DEEP_MASTERY_360_PLAN.md,逐日安排见 docs/ai-model-engineering/AI_MODEL_ENGINEERING_90_CURRICULUM.md,M01~M90 配套教材见 docs/ai-model-engineering/notes/,专业课程对照见 docs/ai-model-engineering/PROFESSIO
AI Model Engineering 90:模型原理、训练与推理实验室
阶段:P1 当前执行中;一次只执行本阶段 长期定位:
AI Deep Mastery 360的 P1;这是 360 天长期路线(4×90 天阶段),后续依次进入 AI Systems、AGI Foundations 与 Embodied Intelligence 课程周期:2026-08-24 ~ 2026-11-21,共 90 个阶段日 阶段编号:M01 ~ M90 结构:12 个完整学习周(M01~M84)+ 6 天知识整合与下一阶段准备(M85~M90) 启动决定:用户已于 2026-08-23 决定正式启动;课程从 2026-08-24 的 M01 开始,不再依赖 AISA 课程目标:理解模型如何学习、表示、适配和推理,亲手完成若干最小实现,并能解释主要模型选择与工程取舍 课程定位:学习路线,不是生产认证、求职训练、模型规模竞赛或工程能力考试
长期总路线见 docs/AI_DEEP_MASTERY_360_PLAN.md,逐日安排见 docs/ai-model-engineering/AI_MODEL_ENGINEERING_90_CURRICULUM.md,M01~M90 配套教材见 docs/ai-model-engineering/notes/,专业课程对照见 docs/ai-model-engineering/PROFESSIONAL_COURSE_REFERENCE_MAP.md,当前唯一进度账本见 docs/daily/AI_MODEL_ENGINEERING_PROGRESS.md。教材可以预先准备,但不是完成记录;不预造个人心得、实验结果或项目证据。
1. 为什么是 AI Model Engineering
AISA 已经覆盖 AI 系统边界、金融领域、RAG、Eval、可靠性、安全、MCP、治理和跨域迁移。本阶段把视角收进模型内部,补齐从“知道模型概念”到“能解释模型为什么这样工作”的距离:
张量与梯度
↓
概率、特征与表示
↓
Tokenizer、Embedding、Attention 与 Transformer
↓
预训练、适配与偏好学习
↓
推理、量化、可解释性与多模态
↓
规则、传统 ML、小模型与 LLM 的选择
贯穿 90 天的核心问题是:
模型能力如何被数据、表示、目标函数、优化、后训练和推理方式共同塑造?面对金融或 Web3 问题,怎样判断规则、传统 ML、小模型或 LLM 哪一种更合适?
1.1 六条因果主线
- 数据 → 表示:token、embedding、特征和数据分布决定模型能看见什么。
- 目标 → 梯度:loss、autograd、optimizer 和 regularization 怎样改变参数。
- 结构 → 能力:attention、residual、normalization 和 context 怎样形成能力与限制。
- 反馈 → 行为:SFT、preference、DPO、GRPO/RLVR 怎样改变默认行为。
- 数值 → 运行:precision、quantization、KV cache 和 batching 怎样改变速度与内存。
- 任务 → 模型选择:任务结构、数据、错误成本和解释需求怎样影响技术路线。
2. 与已有计划的去重边界
- 不重复 AISA 的 RAG、Agent、MCP、安全和系统治理主线。
- 不把
docs/llm/从 Day 1 到 Day 150 再线性执行一遍,只按每周问题选读。 - 不要求训练大模型,也不以参数量、GPU 数量或 benchmark 排名衡量学习。
- 不要求每周都构建新项目;最小实现、引导练习、源码阅读和案例分析都属于有效学习。
- 不要求 LoRA、DPO、VLM 或非 LLM 模型一定超过 baseline;重点是理解机制和适用边界。
- 不同时启动 AI Systems、AGI 或具身智能阶段;M85~M90 只做问题整理和衔接。
3. Apple Silicon 本地环境与降级
规划时的仓库环境审计:
- 主机为 Apple Silicon
arm64。 - 系统
python3为 3.9.6,当前尚无 PyTorch、Transformers、Datasets 或 NumPy。 - 仓库已有 TypeScript Transformer、GRPO、Eval 和 AML 教学实现,可先用于理解机制。
M01 只做一次轻量环境确认。Python 训练环境应与 Next.js 依赖隔离,并按实际需要逐步添加包。
| 项 | 学习建议 |
|---|---|
| Python | 使用独立的 Python 3.11+ 环境和简单锁定文件 |
| 主框架 | PyTorch;MPS 可用时使用 MPS,遇到不支持算子时回退 CPU |
| 模型生态 | 按周加入 Transformers、Tokenizers、Datasets、PEFT;TRL 只在 W7 有兴趣时加入 |
| Apple 原生工具 | MLX / MLX-LM 作为 W6~W8 可选体验,不维护两套主实现 |
| 数据 | 只使用公开、合成或许可明确的数据 |
| 模型 | 默认选择本机可运行的小模型;不预先锁定具体型号 |
| 成本 | 默认本地零云成本;云 GPU 或付费 API 只是选修 |
| 产物 | 不提交大权重、缓存、secret、敏感数据或未授权数据副本 |
工具链参考:
- PyTorch MPS:https://docs.pytorch.org/docs/stable/notes/mps.html
- Apple MLX:https://ml-explore.github.io/mlx/build/html/install.html
- MLX-LM LoRA:https://github.com/ml-explore/mlx-lm/blob/main/mlx_lm/LORA.md
- Hugging Face PEFT LoRA:https://huggingface.co/docs/peft/main/package_reference/lora
- Hugging Face TRL:https://huggingface.co/docs/trl/en/quickstart
3.1 三档学习方式
| 档位 | 条件 | 可完成内容 |
|---|---|---|
| A · CPU / 无模型下载 | Python 环境尚未就绪或资源有限 | 手写 autograd、经典 ML、BPE、小 Transformer、GRPO 机制模拟、记录好的 fixture |
| B · Apple Silicon MPS | 默认本地主线 | tiny model、encoder 分类、小模型 LoRA、量化和本地推理测量 |
| C · 可选云 GPU / API | 只有确实想体验本地无法运行的内容 | 短时对照;提前写清预算、停止条件和本地替代方案 |
本地小模型和机制模拟足以完成课程目标。课程不把“装好所有工具”当作学习成果。
4. 轻量学习节奏
4.1 每周固定节奏
| 星期 | 学习方式 |
|---|---|
| 周一 | 概念与阅读:建立问题、术语、直觉和因果关系 |
| 周二 | 最小实现:只实现最能说明原理的一小部分 |
| 周三 | 引导练习:复用现有代码、框架样例或给定数据 |
| 周四 | 案例与连接:分析误差、边界和金融/Web3 映射 |
| 周五 | 一页小结:整理概念图、对比表和仍不清楚的问题 |
| 周六 | 可选探索或补课:按兴趣深入;忙碌时可以不做 |
| 周日 | 休息:不安排必修任务 |
建议每天 2~3 小时。周二的最小实现可以是几十行代码、一个手算例子、一张曲线或一个配置练习,不要求形成独立应用。
4.2 三次低压力复盘
W4、W8、W12 的周五进行阶段复盘,不评分,也不设置门槛。复盘只回答:
- 我现在能用自己的话解释什么?
- 哪些概念已经形成因果联系?
- 哪个实现或案例最帮助理解?
- 哪些内容只需知道存在,不需要现在深入?
- 哪些问题进入后续复习清单?
未掌握内容直接加入 docs/ai-model-engineering/reflections/ 对应阶段总结,不创建补考或第二份进度台账。
5. 90 天课程总览
| 周 / Day | 日期 | 核心主题 | 主要连接 |
|---|---|---|---|
| W1 · M01~M07 | 08-24~08-30 | 张量、梯度、autograd | parameter→loss→gradient→update |
| W2 · M08~M14 | 08-31~09-06 | 概率、经典 ML、校准与决策损失 | score→calibration→threshold→decision |
| W3 · M15~M21 | 09-07~09-13 | Tokenization、Embedding 与表示学习 | text→token→vector→task |
| W4 · M22~M28 | 09-14~09-20 | Transformer 第一性原理 | attention→residual→representation;第一次阶段复盘 |
| W5 · M29~M35 | 09-21~09-27 | 小语言模型预训练、数据与 scaling | data/objective→curve→behavior |
| W6 · M36~M42 | 09-28~10-04 | SFT、LoRA/PEFT 与领域适配 | frozen model→adapter→domain behavior |
| W7 · M43~M49 | 10-05~10-11 | Preference、DPO、GRPO/RLVR 与奖励科学 | feedback→reward→behavior→shortcut |
| W8 · M50~M56 | 10-12~10-18 | 推理、KV Cache、量化、batching | model→memory→latency→throughput;第二次阶段复盘 |
| W9 · M57~M63 | 10-19~10-25 | 机制可解释性、推理与 verifier | behavior→activation→intervention→evidence |
| W10 · M64~M70 | 10-26~11-01 | 多模态与文档智能 | pixels/layout→fields/relations→decision |
| W11 · M71~M77 | 11-02~11-08 | 非 LLM 决策 AI:异常、图与时序 | task structure→model family→decision |
| W12 · M78~M84 | 11-09~11-15 | 可选 Financial Model Lab | 选择 2~4 个主题做连接;第三次阶段复盘 |
| M85~M90 | 11-16~11-21 | 知识整合与 Phase 2 准备 | 全景图→案例迁移→问题树 |
课程保持轻量;遇到工作繁忙或需要恢复时,可自然降低为每天 1~2 小时,只保留核心阅读与小结。
6. 十二周详细主线
W1:张量、梯度、autograd
核心问题
- 参数为什么会沿梯度方向改变?
- 计算图、链式法则、backprop 和 optimizer 分别做什么?
- loss 不降、梯度爆炸或消失时,可以从哪些层面理解原因?
建议输入
docs/llm/day30-loss-curves-training-dynamics.mddocs/llm/day33-adamw-internals.mddocs/llm/day36-lr-schedule-cosine-wsd.md
本周学习方式
- 从零实现 scalar autograd 或一个两层网络的反向传播。
- 用有限差分理解梯度检查,不要求建立完整测试框架。
- 跟随 PyTorch autograd 重建同一计算,并观察 CPU/MPS 差异。
- 用一个异常 loss 曲线案例连接数据、梯度、学习率和数值稳定性。
W2:概率、经典 ML、校准与决策损失
核心问题
- 为什么 accuracy 高的模型仍可能是差决策系统?
- 基准率、阈值、calibration、abstention 和错误成本怎样连接?
- 什么时候 logistic regression 比神经网络或 LLM 更合适?
建议输入
docs/ai-foundations/papers/48-anomaly-detection-isolation-forest-autoencoder-risk-monitoring.mddocs/ai-foundations/papers/54-calibration-conformal-prediction-uncertainty-governance.mdsrc/aml/confusionMatrix.tssrc/aml/groundTruthEval.ts
本周学习方式
- 从零实现 sigmoid、BCE 或一个小 logistic regression。
- 在同一组合成 AML 样本上观察规则、logistic regression 和小 MLP。
- 改变基准率、阈值或误报/漏报成本,观察决策怎样变化。
- 整理 score、probability、calibration、threshold 与 business decision 的区别。
W3:Tokenization、Embedding 与表示学习
核心问题
- 模型如何把文本转成离散 token 和连续向量?
- vocab、序列长度、领域术语、语言混合和 embedding metric 有什么取舍?
- 语义相似为什么不等于事实、权限或风险相同?
建议输入
docs/llm/day27-tokenizer-bpe-sentencepiece-tiktoken.mddocs/ai-foundations/papers/31-embeddings-ann-vector-search-faiss-hnsw.mdsrc/agent/eval/tokenizer.tssrc/agent/rag/embeddingClient.tssrc/agent/rag/vectorSearch.ts
本周学习方式
- 用现有 byte-level BPE 或自写小例观察 merge 和 vocab。
- 比较 AML 缩写、中英混合、数字、地址和哈希的 token fragmentation。
- 跟随 lexical、frozen embedding 或小 encoder 示例理解表示差异。
- 用近义误命中、OOD 或权限不同的例子理解 representation boundary。
W4:Transformer 第一性原理
核心问题
- Q/K/V、scaled dot-product、mask、multi-head、residual、normalization 和 FFN 分别做什么?
- causal mask 与位置编码怎样改变信息流?
- head 数量、context 长度和复杂度之间有什么关系?
建议输入
docs/ai-foundations/papers/01-attention-is-all-you-need.mddocs/llm/day1-transformer-vaswani-revisit.mddocs/llm/day2-scaled-dot-product-multihead-deep-dive.mdsrc/agent/transformer/transformer.tssrc/agent/__tests__/transformer.test.ts
本周学习方式
- 从零实现一个最小 scaled causal attention。
- 跟随现有 TypeScript 实现,映射到 PyTorch tensor 操作。
- 观察移除 mask、scale、residual 或 normalization 后输出怎样变化。
- 周五连接 W1 梯度、W2 概率、W3 表示和 W4 结构,完成第一次低压力复盘。
W5:小语言模型预训练、数据与 scaling
核心问题
- next-token objective 实际优化什么,又没有优化什么?
- data mix、token budget、batch、learning rate 和模型大小如何影响曲线?
- train loss、validation loss、perplexity 与下游行为为什么可能不一致?
建议输入
docs/ai-foundations/papers/10-scaling-laws-pretraining-bert-gpt-t5.mddocs/llm/day26-pretraining-overview.mddocs/llm/day28-data-mix-dclm-fineweb.mddocs/llm/day30-loss-curves-training-dynamics.mddocs/llm/PHASE2_LONGREAD_training-paradigms-2025.md
本周学习方式
- 组合 W3 tokenizer 与 W4 decoder,尝试训练本地 tiny causal LM。
- 先观察单 batch 过拟合,再看一个正式小数据训练曲线。
- 只选择一个变量,如数据量、学习率或模型宽度,观察它怎样改变曲线。
- 通过一组异常曲线连接欠拟合、过拟合、数据问题和优化问题。
W6:SFT、LoRA/PEFT 与领域适配
核心问题
- prompting、retrieval、linear probe、full fine-tuning 和 LoRA 各改变什么?
- low-rank update、rank 和 target module 怎样理解?
- 为什么训练 loss 下降不一定代表领域任务改善?
建议输入
docs/ai-foundations/papers/06-lora-peft-adaptation.mddocs/ai/day7-finetuning-lora-qlora.mddocs/ai/day54-hands-on-lora-finetuning.md
本周学习方式
- 为一个小线性层实现冻结权重加低秩 A/B 更新。
- 使用 PEFT 或 MLX-LM 跟随一个本机可行的 LoRA 小练习;资源不足时只做低秩机制模拟。
- 比较 prompt-only、frozen baseline 和一个 adapter 结果。
- 观察 rank、target module、数据质量或格式偏差怎样影响输出。
W7:Preference、DPO、GRPO/RLVR 与奖励科学
核心问题
- SFT、reward model、DPO、PPO/GRPO 和 RLVR 的训练信号有何不同?
- chosen/rejected、verifier 和 group-relative advantage 引入哪些偏差?
- reward hacking、length bias 和 format gaming 为什么会出现?
建议输入
docs/ai-foundations/papers/11-dpo-constitutional-ai-preference-optimization.mddocs/llm/day48-deepseek-r1-grpo.mddocs/llm/day55-dpo-derivation.mddocs/llm/day60-reward-model-hacking.mdsrc/agent/train/grpo.tssrc/agent/__tests__/train/grpo.test.ts
本周学习方式
- 用现有 TypeScript 实现或手算理解 group-relative advantage。
- 构造很小的 chosen/rejected 数据,跟随 DPO 或 pairwise preference 示例。
- 改变 reward 中的正确性、格式或长度权重,观察行为变化。
- 真实 TRL GRPO/RLVR 训练只是选修;机制模拟和源码阅读已经足够完成本周目标。
W8:推理、KV Cache、量化与 serving
核心问题
- prefill、decode、KV cache、batching 与 memory bandwidth 怎样影响延迟和吞吐?
- 8-bit/4-bit 量化在质量、内存和速度上有什么取舍?
- 为什么同一模型在不同 context、output 和后端下表现不同?
建议输入
docs/ai-foundations/papers/07-inference-optimization-kv-cache-flashattention-speculative.mddocs/ai-foundations/papers/41-knowledge-distillation-small-models-quantization.mddocs/llm/PHASE4_LONGREAD_llm-inference-2026.mddocs/ai/day2-quantization-local-deployment.mddocs/ai/day8-inference-optimization.md
本周学习方式
- 在同一小模型上观察不同 context/output 的运行时间和内存。
- 体验两种可行 precision/quantization 配置;资源不足时使用记录好的 fixture。
- 在 tiny model 上理解 cache/no-cache 的输出等价与内存变化。
- 周五连接 W5 训练、W6 适配、W7 行为和 W8 推理,完成第二次低压力复盘。
W9:机制可解释性、推理与 verifier
核心问题
- attention map、activation、feature、circuit 和 causal intervention 的证据强度有何不同?
- 内部机制解释为什么不等于客户解释或业务理由?
- self-consistency、search 和 verifier 何时值得额外 test-time compute?
建议输入
docs/ai-foundations/papers/22-mechanistic-interpretability-transformer-circuits-sae.mddocs/ai-foundations/papers/26-process-supervision-step-by-step-verification.mddocs/ai-foundations/papers/167-ai-reasoning-budget-test-time-compute-verifier-cascade-architecture.mddocs/llm/PHASE5_LONGREAD_mech-interp-2026.mddocs/llm/day140-test-time-compute-scaling.md
本周学习方式
- 在 W5 tiny model 上抓取 attention 或 activation。
- 跟随一个最小 activation replacement/ablation 示例,理解观察与干预的区别。
- 比较 single pass、self-consistency 或 verifier cascade 中两种路线。
- 把案例结论标成行为证据、内部相关、因果干预或业务解释。
W10:多模态与文档智能
核心问题
- OCR、layout parser、vision encoder、projector 和 language model 分别提供什么?
- 文本正确为什么不等于字段、关系、表格或证据位置正确?
- 什么情况下 OCR/layout pipeline 比端到端 VLM 更合适?
建议输入
docs/ai-foundations/papers/32-clip-multimodal-embeddings-product-architecture.mddocs/ai-foundations/papers/137-ai-document-intelligence-unstructured-data-evidence-quality-architecture.mddocs/ai/day10-multimodal-vision-language.mddocs/ai/day57-hands-on-multimodal-app.md
本周学习方式
- 生成一份不含真实客户数据的合成表单、账单或证据文档。
- 实现 OCR 后的简单字段规则,或跟随一个 layout-aware 示例。
- 有可行本地模型/API 时体验小型 VLM;否则通过现有 fixture 理解差异。
- 比较旋转、模糊、遮挡、语言混合或冲突字段中的两种情况。
W11:非 LLM 决策 AI
核心问题
- 图、异常、时间序列和排序问题为什么不应默认变成文本生成?
- 监督、无监督、图模型和序列模型分别依赖什么数据假设?
- LLM 可以作为特征、解释器、流程助手,还是不进入决策链?
建议输入
docs/ai-foundations/papers/34-graph-neural-networks-gnn-fraud-risk-architecture.mddocs/ai-foundations/papers/47-time-series-forecasting-tft-deepar-foundation-models.mddocs/ai-foundations/papers/48-anomaly-detection-isolation-forest-autoencoder-risk-monitoring.mddocs/finance-design/06-hft-risk-science/08-ml-model-lifecycle.md
本周学习方式
- 只选择交易图异常、时间序列预测或排序中的一个主题。
- 先做规则/统计 baseline,再跟随一个小神经、图或序列模型。
- 比较时间/实体/图切分与随机切分的差别。
- 用一个案例解释 LLM 适合主导、辅助或不进入的条件。
W12:可选 Financial Model Lab
W12 用于把模型知识连接起来,不是大型综合考试。可以选择 AML evidence、支付争议证据、文档分类或链上钱包风险中的一个场景。
本周学习方式
从三档范围任选其一:
| 范围 | 学习内容 | 适合情况 |
|---|---|---|
| A · 分析设计 | 明确任务、数据、baseline、指标和候选模型,完成一页实验设计 | 时间有限,重点是建立选择逻辑 |
| B · 最小比较 | 实现规则/经典 ML/小神经模型中的任意两类,做一个小对照 | 想把知识连接到代码 |
| C · 兴趣扩展 | 在 B 基础上增加 LoRA、VLM、校准或资源测量中的一项 | 时间充足且确实感兴趣 |
不要求同时实现所有模型,也不要求额外准备隐藏样本集、三项消融或完整错误图谱。重要的是能说明:问题是什么、数据有什么限制、为什么选这些方法、观察到了什么、哪些结论仍不确定;观察结果可以写成支持、反驳或证据不足。
周五连接 W9 证据、W10 多模态、W11 非 LLM 和 W12 案例,完成第三次低压力复盘。周六可以完善项目,也可以休息。
7. M85~M90:知识整合与 Phase 2 准备
这六天不是考试周,可以查阅全部笔记、代码和资料。
| Day | 日期 | 学习内容 | 轻量产出 |
|---|---|---|---|
| M85 | 2026-11-16 | 合并 W4、W8、W12 三张阶段图,整理 data→representation→objective→optimization→behavior→inference→decision | 一张模型工程全景图 |
| M86 | 2026-11-17 | 选择 W1~W4 中最想巩固的主题,重读一篇笔记或重跑一个最小实现 | 一份短阅读/运行记录 |
| M87 | 2026-11-18 | 选择 W5~W8 中最想巩固的主题,补充训练、适配或推理之间的联系 | 一张三者关系图 |
| M88 | 2026-11-19 | 把所学迁移到一个新的金融/Web3/文档场景,比较规则、传统 ML、小模型与 LLM | 一页模型选择分析 |
| M89 | 2026-11-20 | 区分仍属于“模型问题”的疑问与下一阶段“系统工程问题” | Phase 2 问题树和复习清单 |
| M90 | 2026-11-21 | 浏览 90 天笔记,写下最重要的 10 个联系、3 个最想深入的方向和下一阶段节奏建议 | 一页阶段总结;不做量化考核 |
8. 轻量复习系统
- 周五小结时只记录三个项目:已经理解、仍然模糊、以后想深入。
- W4、W8、W12 的复盘放入
docs/ai-model-engineering/reflections/。 - 如果喜欢间隔复习,可以自愿使用 1/7/30 天提醒;不要求维护复杂队列。
- AISA 留下的高价值问题可并入同一复习清单,不建立第二条打卡线。
- 概念暂时不清楚不阻止进入下一周,后续主题常常会反向帮助理解。
9. 学习目录
执行入口见 docs/ai-model-engineering/README.md:
docs/ai-model-engineering/
├── README.md
├── AI_MODEL_ENGINEERING_90_CURRICULUM.md
├── notes/ # 每周综合理解
├── experiments/ # 有学习价值的小实现与运行记录
├── reflections/ # W4、W8、W12 与 M85~M90 的低压力复盘
└── gates/ # 历史兼容目录;新内容指向 reflections/
真正的训练代码目录和 Python 锁文件在 M01 确认环境后再决定。目录存在不代表课程已经开始。
10. 与旧计划的关系
| 旧资产 | 本阶段用法 |
|---|---|
docs/AI_SYSTEMATIC_LEARNING_ROADMAP_2026.md | 只作阅读地图,不再执行第二个 12 周 |
docs/LLM_150_PLAN.md / docs/llm/ | 按本周问题选读模型、训练、推理与可解释性材料 |
docs/FRONTIER_AI_LEARNING_NOTES_180.md / docs/notes/aicap/ | 只选模型内核、性能和 reward science 小节 |
docs/AIPA_120_PLAN.md | 不重复 AML/RAG/Agent/Eval/MCP 主线 |
docs/AIPROD_90_PLAN.md | 只复用 data contract 和 data readiness 资产 |
docs/AGENTIC_ENTERPRISE_ARCHITECTURE_90_PLAN.md | 不并行启动 |
docs/AI_GOVERNANCE_EVALOPS_RISK_90_PLAN.md | 治理作为学习边界,不另开打卡线 |
11. 阶段学习结果
完成 Phase 1 不代表已经能训练或运营大型模型。达到以下学习结果即可进入 Phase 2:
- 能用自己的话解释张量、梯度、目标函数、表示、attention、适配与推理之间的关系。
- 至少完成几个真正帮助理解的最小实现;数量不作统一要求。
- 能阅读 tiny model 的训练曲线,并提出合理的检查方向。
- 能解释 LoRA、preference learning、KV cache、量化和 verifier 的基本机制与边界。
- 能区分行为证据、内部相关、因果干预和业务解释。
- 能为一个文档或非 LLM 任务说明模型选择逻辑。
- 知道 Apple Silicon 本地实验说明了什么、没有说明什么。
- 保留一份诚实的复习清单和 AI Systems Engineering 问题树。
某些主题仍然模糊时,直接保留在复习清单中,不需要重复整个 90 天。