深度学习系统学习计划

该blog和专栏主要制定一个详细深度学习学习计划,然后再次基础上制定并总结每日学习计划,进行查漏补缺,从而提高专业知识能力。

适用目标:在 8-12 周内夯实深度学习基础,并系统提升 CV、NLP、LLM 的理论理解、代码能力和项目分析能力。

核心原则:

  • 不以“看完课程”为目标,以“能复现、能修改、能解释、能诊断”为目标。
  • 每个阶段都要有代码产出、实验记录和错误分析。
  • 先建立通用训练思维,再分别迁移到 CV、NLP 和 LLM。
  • 不只追求指标,还要理解数据、模型结构、训练过程、评估方法和部署约束。

总体产出

12 周结束时,建议完成以下内容:

  1. 一个通用 PyTorch 训练模板。
  2. 一个 CV 项目:分类或目标检测,包含实验记录和错误分析。
  3. 一个 NLP 项目:文本分类、NER、摘要或问答。
  4. 一个 LLM 项目:tiny GPT 从零实现,或 LoRA 微调 + RAG 应用。
  5. 一份个人方法论笔记:如何分析模型、数据、loss、指标和失败样本。

每日学习节奏

如果每天 3 小时:

  • 40 分钟:理论学习。
  • 90 分钟:代码实现。
  • 30 分钟:实验记录。
  • 20 分钟:复盘错误样本或课程重点。

如果每天 5-6 小时:

  • 1-1.5 小时:理论学习。
  • 3 小时:代码实现。
  • 1 小时:实验和调参。
  • 30 分钟:写笔记和复盘。

第 1-2 周:深度学习基础与 PyTorch

目标:把“能跑模型”升级成“知道模型为什么能训练、为什么训练坏了、怎么排查”。

重点知识:

  • 张量、矩阵乘法、广播机制。
  • 线性回归、逻辑回归、MLP。
  • loss、梯度、反向传播、计算图。
  • SGD、Momentum、Adam。
  • train/val/test 划分。
  • 过拟合、欠拟合、正则化、dropout、weight decay。
  • batch size、learning rate、epoch、scheduler。
  • PyTorch 中的 Dataset、DataLoader、nn.Module、optimizer。

代码任务:

  1. 用 NumPy 手写线性回归。
  2. 用 NumPy 手写逻辑回归或两层 MLP。
  3. 用 PyTorch 训练 MNIST 或 CIFAR-10。
  4. 写出通用训练循环:train_one_epochevaluatesave_checkpoint
  5. 让模型在 20 条样本上过拟合,用来检查训练代码是否正确。

推荐资源:

  • PyTorch Tutorials: https://docs.pytorch.org/tutorials/
  • Dive into Deep Learning: https://d2l.ai/

第 3-4 周:CV 系统补强

目标:从 YOLOv8 使用者升级成能分析检测模型、数据问题和实验设计的人。

重点知识:

  • CNN、卷积、池化、感受野。
  • ResNet、FPN、ViT 基本思想。
  • anchor、NMS、IoU、mAP、precision、recall。
  • 数据增强、类别不均衡、标注噪声。
  • 误检、漏检、置信度阈值、NMS 阈值。

代码任务:

  1. 训练一个 CIFAR-10 或自定义分类模型。
  2. 复盘已有 YOLOv8 项目,整理数据、指标和错误样本。
  3. 做 3 组 ablation:模型大小、输入分辨率、数据增强。
  4. 写一份实验报告:每次改动为什么做、指标怎么变、错误样本有什么规律。

推荐资源:

  • Ultralytics YOLO Docs: https://docs.ultralytics.com/
  • Stanford CS231n: https://cs231n.stanford.edu/

第 5-6 周:NLP 基础

目标:理解文本任务和 Transformer encoder 的常见训练流程。

重点知识:

  • tokenization、vocabulary、embedding。
  • padding、attention mask、batch collator。
  • RNN/LSTM 了解即可,重点放在 attention 和 Transformer。
  • BERT、GPT 的结构差异。
  • 文本分类、序列标注、问答任务。
  • accuracy、precision、recall、F1、混淆矩阵。

代码任务:

  1. 用 Hugging Face datasets 加载文本数据集。
  2. transformers 微调一个中文文本分类模型。
  3. 做一个 NER 或情感分类项目。
  4. 输出混淆矩阵和错误样本分析。

推荐资源:

  • Hugging Face Course: https://huggingface.co/course
  • Stanford CS224N: https://web.stanford.edu/class/cs224n/

第 7-8 周:LLM 核心原理

目标:理解 GPT 类模型的结构、训练目标和生成方式。

重点知识:

  • Transformer decoder。
  • causal language modeling。
  • self-attention、multi-head attention、causal mask。
  • positional encoding。
  • pretraining、SFT、RLHF 基本概念。
  • KV cache、temperature、top-k、top-p。
  • perplexity 和 next-token prediction。

代码任务:

  1. 从零实现一个 tiny GPT。
  2. 用小语料训练,让模型能生成文本。
  3. 实现 temperature、top-k、top-p 采样。
  4. 写清楚 GPT 为什么是预测下一个 token。

推荐资源:

  • Stanford CS336: https://cs336.stanford.edu/
  • nanoGPT: https://github.com/karpathy/nanoGPT

第 9-10 周:LLM 应用能力

目标:掌握当前主流 LLM 应用开发路径:微调和 RAG。

重点知识:

  • LoRA、QLoRA、PEFT。
  • SFT 数据格式。
  • embedding、向量检索、chunking、rerank。
  • RAG 的幻觉、引用、检索命中率、答案评估。
  • prompt engineering 的边界和局限。

代码任务:

  1. 选择一个小参数开源模型做 LoRA 微调。
  2. 构建一个基于个人笔记或论文的 RAG 系统。
  3. 对比 RAG 和微调分别适合什么场景。
  4. 做一次失败案例分析:答错的问题为什么答错。

推荐资源:

  • Hugging Face Transformers: https://huggingface.co/docs/transformers/
  • Hugging Face PEFT: https://huggingface.co/docs/peft/
  • LangChain RAG: https://docs.langchain.com/
  • LlamaIndex: https://docs.llamaindex.ai/

第 11-12 周:综合项目

目标:把 CV、NLP、LLM 串成一个能展示能力的完整项目。

可选方向:

  1. 工业检测 + LLM 报告助手:YOLO 检测缺陷或目标,LLM 根据检测结果生成报告。
  2. 深度学习知识库 RAG:把课程笔记、论文、代码说明做成问答系统。
  3. 中文领域问答模型:整理小型领域数据集,做 LoRA 微调,并和 RAG 对比。

最终交付:

  • GitHub 仓库。
  • README。
  • 训练脚本和推理脚本。
  • 实验记录。
  • 效果截图。
  • 失败案例分析。
  • 下一步改进计划。

分析模型的统一框架

以后看到任何模型,都按下面的问题拆:

  1. 数据是什么?分布、噪声、标注质量如何?
  2. 任务目标是什么?loss 是否真的对应业务目标?
  3. 模型结构有什么归纳偏置?
  4. 训练为什么稳定或不稳定?
  5. 指标是否可信?有没有只在 benchmark 上好看?
  6. 错误样本有什么规律?
  7. 部署限制是什么?显存、延迟、吞吐、成本、可解释性如何?

第 1 天:今天就从这里开始

今天目标:建立 PyTorch 基础使用感,并理解一个神经网络训练循环到底在做什么。

1. 理论学习:60-90 分钟

学习主题:

  • 张量是什么。
  • 矩阵乘法为什么是神经网络的基础。
  • 什么是参数、loss、梯度、反向传播。
  • 训练循环的基本流程:forward -> loss -> backward -> optimizer.step。

建议学习顺序:

  1. 看 PyTorch 官方入门中关于 tensor、autograd、nn.Module 的部分。
  2. 看 D2L 中线性回归和 softmax 回归的章节。
  3. 不要求一次完全吃透反向传播,但要知道梯度表示“参数往哪个方向改会让 loss 下降”。

2. 代码任务:90-150 分钟

今天至少完成下面两个任务。

任务 A:张量和 autograd 练习

  • 创建 2 个矩阵,做加法、乘法、矩阵乘法。
  • 创建一个带 requires_grad=True 的变量。
  • 定义一个简单函数,例如 y = x ** 2 + 2 * x + 1
  • 调用 backward(),打印 x.grad

任务 B:用 PyTorch 写线性回归

  • 构造模拟数据:y = 3x + 2 + noise
  • 定义一个 nn.Linear(1, 1)
  • 使用 MSE loss。
  • 使用 SGD 或 Adam。
  • 训练 200-500 步。
  • 打印学到的权重和偏置,看是否接近 3 和 2。

3. 笔记任务:20-30 分钟

写下 5 个问题的答案:

  1. loss.backward() 做了什么?
  2. optimizer.step() 做了什么?
  3. 为什么训练前要 optimizer.zero_grad()
  4. 为什么 loss 下降不代表模型一定有泛化能力?
  5. 如果 loss 不下降,你会先检查哪些地方?

4. 今日验收标准

今天结束时,你应该能做到:

  • 说清楚一次训练循环的每一步。
  • 运行一个 PyTorch 线性回归代码。
  • 看懂 model.parameters()loss.backward()optimizer.step()
  • 用自己的话解释为什么模型可以通过梯度学习参数。

5. 推荐目录结构

建议从今天开始建立下面的目录:

DL-study/
  notes/
    day01-pytorch-basics.md
  src/
    day01_tensor_autograd.py
    day01_linear_regression.py
  experiments/
    day01/

6. 明天预告

第 2 天建议进入:逻辑回归、softmax、交叉熵,并用 PyTorch 训练一个 MNIST 手写数字分类模型。

更多推荐