# AI 学习课程大纲

## 1. 当前基础

- 已了解简单线性回归、逻辑回归的数学原理。
- 已了解简单神经网络。
- 已掌握向量、矩阵和矩阵乘法。
- 已掌握标量函数的基本求导；尚未系统学习向量求导、矩阵求导与雅可比矩阵。
- 课程开始时尚未学习张量；现已完成第一节，学习了张量、形状、轴、交换轴与广播。
- Python 熟练程度暂未确认；本大纲按具备基本 Python 编程能力设计，如有缺口可增加准备时间。

## 2. 学习目标与节奏

课程包含 20 节主线课，以及插在第一、二节之间的数学补充课。数学补充课不改变原课件编号。课程按内容与练习组织，不规定每节的完成时间；每节可以分多次学习，以完成练习和理解关键概念为推进依据。

先建立三类学习方式的区别：监督学习从带标签的样本学习预测；无监督学习从无标签数据中发现结构；强化学习通过与环境交互，根据奖励学习行动策略。深度学习是一类使用多层神经网络的方法，可以与这些学习方式结合。

完成课程后，能够：

1. 独立完成一个机器学习项目，包括数据处理、训练、评估和错误分析。
2. 使用 PyTorch 训练、保存和使用基础神经网络。
3. 理解注意力机制和 Transformer 的关键计算。
4. 理解强化学习的基本框架，实现 Q-learning 和一个基础深度强化学习算法。
5. 构建并评估一个基于大语言模型的知识问答应用。

学习时间建议分配：30% 理论学习、50% 编码练习、20% 实验与复盘。每个阶段都回答三个问题：模型为什么有效、如何实现、如何判断它学得好不好。

## 3. 第一阶段：补齐训练模型的基础（第一节至第三节）

### 第一节：张量与必要基础

状态：已完成（用户确认）。

讲义：[第一节互动讲义](lessons/lesson-01-tensors.html)；配套代码：[NumPy 练习](lessons/lesson-01-practice.py)。

学习内容：

- 快速复习向量、矩阵和矩阵乘法，不重复系统学习。
- 张量：在本课程的计算语境中，先把它理解为多维数值数组。
- 标量、向量、矩阵与更高维数组的关系。
- 张量的轴、维数、形状（shape），以及索引、切片、变形、转置和广播。
- 区分张量的维数与形状：形状为 `(32, 10)` 的数组是二维张量，而不是 32 维张量。
- 理解批次（batch）：例如 `(32, 10)` 可以表示 32 个样本，每个样本有 10 个特征。
- 图像张量示例：PyTorch 中常用 `(批次数, 通道数, 高度, 宽度)`，如 `(32, 3, 64, 64)`。
- 检查导数、偏导数、梯度、链式法则，以及概率、条件概率、期望和方差的理解情况。
- Python、NumPy、Matplotlib 的基本使用，按实际基础补齐。

练习与验收：

- 用 NumPy 创建向量、矩阵和三维数组，说明每个轴的含义。
- 根据一个小批次数据的形状，推断矩阵乘法前后的形状。
- 用 NumPy 实现线性回归，画出训练损失曲线。

### 数学补充课：向量、矩阵与求导（第一节后、第二节前）

状态：讲义已提供，完成状态未确认。讲义：[向量与矩阵求导互动讲义](lessons/lesson-math-matrix-calculus.html)；配套代码：[数值差分与自动求导核对](lessons/lesson-math-matrix-calculus.py)。运行：`uv run python lessons/lesson-math-matrix-calculus.py`。此课是第二节反向传播、第六节自动求导和第十一节注意力计算的数学桥梁。

已经具备的前提：

- 会标量函数的基本求导。
- 会向量、矩阵和矩阵乘法。

必须掌握：

- 向量的点积、范数和夹角；矩阵乘法可以看作线性变换。
- 先分清“谁对谁求导”：标量对向量、向量对向量、标量对矩阵是三种不同情况。
- 标量对向量求导得到梯度，梯度的形状与自变量相同。例如 `L(x)=xᵀx`，则 `∇ₓL=2x`。
- 向量对向量求导得到雅可比矩阵。若 `y=Wx+b`，则 `∂y/∂x=W`。
- 标量对矩阵求导得到与矩阵同形状的梯度。对单个样本 `y=Wx+b`、`L=1/2‖y-t‖²`，令 `e=y-t`，则 `∂L/∂W=e xᵀ`、`∂L/∂b=e`、`∂L/∂x=Wᵀe`。
- 链式法则在向量计算中的形状传递；理解反向传播实际计算的是“上游梯度乘局部导数”，通常不需要显式建立完整雅可比矩阵。
- PyTorch 批次约定：`X` 为 `(B,in)`、`weight` 为 `(out,in)`、`Z=X @ weight.T+b`。若 `G=∂L/∂Z`，则 `∂L/∂weight=G.T @ X`、`∂L/∂b=G` 沿批次求和、`∂L/∂X=G @ weight`。
- 用梯度形状检查推导，用数值差分检查计算结果。

需要理解但不要求背公式：

- sigmoid、tanh、ReLU 的逐元素导数如何进入链式法则。
- softmax 的雅可比矩阵，以及 softmax 与交叉熵组合后梯度为什么能化简为“预测概率减真实标签”。
- 外积为什么自然出现在全连接层权重的梯度里。

以后再深入：

- Hessian、二阶优化、矩阵微分与迹技巧。
- 特征值、特征向量、秩、正交投影与 SVD；在 PCA、注意力和低秩模型出现时结合用途学习。
- 不要求先背完整的矩阵求导公式表，也不要求从抽象定义证明所有公式。

练习与验收：

- 根据输入、输出和参数的形状，先写出每个梯度的形状，再计算数值。
- 手推 `L=1/2‖Wx+b-t‖²` 对 `W`、`b` 和 `x` 的梯度。
- 把单样本结果扩展到批次，解释为什么偏置梯度要沿批次维求和。
- 用 NumPy 数值差分验证手推结果，再与 PyTorch 自动求导比较。

### 第二节：模型怎样学习

状态：讲义已提供，完成状态未确认。讲义：[第二节互动讲义](lessons/lesson-02-learning.html)；配套代码：[NumPy 练习](lessons/lesson-02-practice.py)。

学习内容：

- 均方误差与交叉熵损失。
- 梯度下降、随机梯度下降与小批量训练。
- 学习率、特征缩放与参数初始化。
- 从链式法则理解反向传播。

练习与验收：

- 手推一个小型神经网络的梯度，并用数值差分验证。
- 比较不同学习率的训练曲线，解释收敛快慢或发散现象。

### 第三节：判断模型是否有效

状态：讲义已提供，完成状态未确认。讲义：[第三节互动讲义](lessons/lesson-03-evaluation.html)；配套代码：[NumPy 练习](lessons/lesson-03-practice.py)。

学习内容：

- 训练集、验证集与测试集。
- 欠拟合、过拟合、偏差与方差。
- 正则化、早停与数据泄漏。
- 准确率、精确率、召回率与 F1。

练习与验收：

- 制造一次过拟合，再通过实验改善它。
- 根据任务选择评估指标，并说明为什么只看训练损失不够。

## 4. 第二阶段：建立机器学习全流程意识（第四节至第五节）

### 第四节：常见机器学习方法

状态：讲义已提供，完成状态未确认。讲义：[第四节互动讲义](lessons/lesson-04-methods.html)；配套代码：[NumPy 练习](lessons/lesson-04-practice.py)。

学习内容：

- 决策树、随机森林与梯度提升的核心思想。
- K-means 聚类与 PCA 降维。
- 根据数据规模、特征类型与任务需求选择模型。

练习与验收：在同一份表格数据上比较简单基线模型与树模型。

### 第五节：表格数据项目

状态：讲义已提供，完成状态未确认。讲义：[第五节互动项目](lessons/lesson-05-project.html)；配套代码：[NumPy 项目](lessons/lesson-05-project.py)。

学习内容：

- 数据探索、缺失值与类别特征处理。
- 建立基线模型。
- 交叉验证与参数选择。
- 错误分析与实验记录。

阶段项目：完成一个分类或回归任务，提交代码和简短实验报告，解释模型表现及改进依据。数据预处理只能在训练数据上拟合，避免泄漏。

## 5. 第三阶段：掌握深度学习实践（第六节至第九节）

### 第六节：PyTorch 基础

状态：讲义已提供，完成状态未确认。讲义：[第六节互动讲义](lessons/lesson-06-pytorch.html)；配套代码：[PyTorch 实练](lessons/lesson-06-pytorch.py)。项目使用 uv 管理的 Python 3.12 与 CPU 版 PyTorch，运行：`uv run python lessons/lesson-06-pytorch.py`。

学习内容：

- Tensor 与 NumPy 数组的联系。
- 自动求导与计算图。
- Dataset、DataLoader 与训练循环。
- 模型保存、加载与推理。
- CPU、GPU 与设备管理。

练习与验收：把前面的 NumPy 神经网络改写为 PyTorch 实现，说明自动求导替代了哪些工作。

### 第七节：训练更可靠的神经网络

状态：讲义已提供，完成状态未确认。讲义：[第七节互动讲义](lessons/lesson-07-training.html)（直接打开本地 HTML 即可）；配套代码：[PyTorch 对照实验](lessons/lesson-07-training.py)。运行：`uv run python lessons/lesson-07-training.py`。页面包含激活与导数曲线、梯度回传、初始化对称性、Adam 更新、Dropout 遮挡、归一化分组和已运行的三种子对照结果。

学习内容：

- 激活函数与梯度消失。
- 参数初始化、Adam 与学习率调度。
- Dropout 与归一化。
- 训练模式与评估模式。
- 排查损失不下降、训练不稳定等问题。

练习与验收：每次只改变一个主要因素，记录实验结果并解释变化。

### 第八节：卷积神经网络

状态：讲义已提供，完成状态未确认。讲义：[第八节互动讲义](lessons/lesson-08-cnn.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 练习](lessons/lesson-08-cnn.py)。运行：`uv run python lessons/lesson-08-cnn.py`。页面提供卷积、形状、多通道、池化、感受野和标签保持增强的交互演算，并嵌入真实合成数据训练结果。

学习内容：

- 卷积、池化、感受野与参数共享。
- 卷积前后的张量形状。
- CNN 为什么适合图像。
- 数据增强与迁移学习。

练习与验收：实现一个小型 CNN，逐层标注输入、输出的形状。

### 第九节：图像分类项目

状态：讲义已提供，完成状态未确认。讲义：[第九节互动项目](lessons/lesson-09-project.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 项目](lessons/lesson-09-project.py)。运行：`uv run python lessons/lesson-09-project.py`。使用本地生成的源域和目标域线条图像，先训练并保存预训练权重，再比较从头训练、冻结特征层和全网络微调；页面嵌入实际训练结果、混淆矩阵和逐张误判。无需下载数据或权重；此合成实验不能直接代表真实照片任务。

阶段项目：

- 从头训练一个小型 CNN。
- 使用预训练模型进行迁移学习。
- 比较效果、数据需求与训练成本。
- 展示并分析模型容易误判的样本。

## 6. 第四阶段：理解 Transformer 与大语言模型（第十节至第十三节）

### 第十节：文本与序列建模

状态：讲义已提供，完成状态未确认。讲义：[第十节互动讲义](lessons/lesson-10-text.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 练习](lessons/lesson-10-text.py)。运行：`uv run python lessons/lesson-10-text.py`。页面提供词级/字级 Token 对比、ID 与 Embedding 查表、批次补齐与目标移位、RNN 状态时间步和真实训练曲线。玩具语料仅用于理解机制，不代表真实语言理解能力。

学习内容：

- 分词、Token、词向量与 Embedding。
- 语言模型的训练目标。
- 文本批次、序列长度与嵌入维度。
- 简要理解 RNN、LSTM 及其局限。

练习与验收：把文本转换成 Token ID，再转换成向量，说明每一步的张量形状。

### 第十一节：注意力机制

状态：讲义已提供，完成状态未确认。讲义：[第十一节互动讲义](lessons/lesson-11-attention.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 练习](lessons/lesson-11-attention.py)。运行：`uv run python lessons/lesson-11-attention.py`。页面提供 Q/K/V 逐格匹配、缩放与 softmax、因果掩码、Value 加权、多头形状及位置编码图解。配套代码核对官方注意力结果，并验证改动未来输入不会影响过去输出或梯度。本节多头权重随机初始化，结果用于验证机制，不表示模型已学会语义。

学习内容：

- Query、Key、Value 的含义。
- 缩放点积注意力与多头注意力。
- 位置编码与因果掩码。
- 跟踪注意力计算中每一步的张量形状。

练习与验收：用 PyTorch 实现一个小型自注意力模块，解释因果掩码为什么能防止看到后面的 Token。

### 第十二节：Transformer

状态：讲义已提供，完成状态未确认。讲义：[第十二节互动讲义](lessons/lesson-12-transformer.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 练习](lessons/lesson-12-transformer.py)。运行：`uv run python lessons/lesson-12-transformer.py`。页面展示 Pre-LN Transformer 块、残差与 LayerNorm 演算、Encoder/Decoder 信息流、下一字符目标、真实训练曲线和逐字生成。练习使用内置四句短语训练 decoder-only 字符模型；没有独立测试集，结果仅用于理解机制。

学习内容：

- 残差连接、LayerNorm 与前馈网络。
- Encoder、Decoder 及其用途。
- 自回归生成过程。

练习与验收：搭建一个小型字符级语言模型，观察它如何学习预测下一个字符。本练习用于理解机制，规模以本机资源可承担为准。

### 第十三节：大语言模型的训练与使用

状态：讲义已提供，完成状态未确认。讲义：[第十三节互动讲义](lessons/lesson-13-llm-use.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch 与本地检索练习](lessons/lesson-13-llm-use.py)。运行：`uv run python lessons/lesson-13-llm-use.py`。页面用第十二节已训练的玩具模型演示真实温度与 Top-k 概率，用本地短文演示预训练、SFT、偏好对齐、上下文预算、RAG 与四种故障诊断。RAG 中的回答是教学脚本，并非玩具模型生成；无需下载数据或启动服务。

学习内容：

- 预训练、指令微调与偏好对齐。
- 上下文窗口、采样与温度。
- 幻觉的成因与模型能力的边界。
- 微调与检索增强生成（RAG）分别解决什么问题。

练习与验收：围绕同一组问题观察不同上下文和采样设置的影响，区分知识缺失、检索失败与回答错误。

## 7. 第五阶段：强化学习基础与实践（第十四节至第十七节）

强化学习是独立的学习范式，并不只用于大语言模型对齐。这个阶段先在小型环境中理解序列决策，再连接神经网络和语言模型。它依赖前面学习的概率、梯度与 PyTorch；与 Transformer 阶段的先后顺序可以按兴趣交换。

### 第十四节：从预测走向决策

状态：讲义已提供，完成状态未确认。讲义：[第十四节互动讲义](lessons/lesson-14-rl-basics.html)（本地 HTML 可直接打开）；配套代码：[本地网格世界练习](lessons/lesson-14-rl-basics.py)。运行：`uv run python lessons/lesson-14-rl-basics.py`。页面包含可操作的网格、折扣回报、确定性 MDP 转移、V/Q 与 Bellman 关系、延迟奖励信用分配，以及可复现的 ε-greedy 起点路线实验。练习只使用 Python 标准库；下一节再实现逐状态 Q-learning。

学习内容：

- 智能体、环境、状态、动作、奖励与策略。
- 即时奖励与累计回报，折扣因子的含义。
- 马尔可夫性质与马尔可夫决策过程（MDP）。
- 状态价值 V、动作价值 Q 与贝尔曼方程的直观含义。
- 探索与利用，以及延迟奖励带来的信用分配问题。

练习与验收：

- 用一个小型网格世界定义状态、动作、转移与奖励。
- 手算一条行动轨迹的折扣回报。
- 说明为什么每一步都选择即时奖励最大的动作，可能无法获得最大的长期回报。

### 第十五节：表格型强化学习

状态：讲义已提供，完成状态未确认。讲义：[第十五节互动讲义](lessons/lesson-15-tabular-rl.html)（本地 HTML 可直接打开）；配套代码：[NumPy 表格强化学习练习](lessons/lesson-15-tabular-rl.py)。运行：`uv run python lessons/lesson-15-tabular-rl.py`。沿用第十四节网格，页面可逐轮观察价值迭代、比较固定策略的 MC/TD 预测、演算带终止判断的 Q-learning 更新、切换 γ/ε 阅读 6 组真实训练 Q 表，并比较随机基线与关闭探索后的贪心评估；另有 SARSA 与 Q-learning 的数值对照。单次固定种子实验仅用于理解机制。

学习内容：

- 已知环境转移时的价值迭代，理解动态规划的基本思想。
- 蒙特卡洛估计与时序差分（TD）学习。
- Q-learning 的更新公式与 epsilon-greedy 探索。
- 简要比较 SARSA 与 Q-learning，理解 on-policy 与 off-policy。

练习与验收：

- 用 NumPy 实现 Q-learning，让智能体在小型网格世界中到达目标。
- 比较随机策略与学习后的策略。
- 观察探索率和折扣因子如何影响结果。

### 第十六节：深度强化学习与 DQN

状态：讲义已提供，完成状态未确认。讲义：[第十六节互动讲义](lessons/lesson-16-dqn.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch DQN 练习](lessons/lesson-16-dqn.py)。运行：`uv run python lessons/lesson-16-dqn.py`。沿用小网格并加入 10% 动作随机重抽，页面嵌入三个训练种子的实际结果、随机策略基线、经验回放样本、目标网络同步次数与逐回合评估。无需下载环境或启动服务。

学习内容：

- 为什么状态很多时难以使用 Q 表。
- 用神经网络近似 Q 函数。
- DQN 的 TD 目标与损失函数。
- 经验回放、目标网络及其作用。
- 区分训练时的探索与评估时的策略。
- 强化学习训练波动较大，如何通过多个随机种子和评估回合判断效果。

练习与验收：用 PyTorch 在一个小型离散动作环境中实现基础 DQN，记录评估回报，并与随机策略比较。环境规模以本机资源可承担为准。

### 第十七节：策略梯度与大语言模型对齐

状态：讲义已提供，完成状态未确认。讲义：[第十七节互动讲义](lessons/lesson-17-policy-gradient.html)（本地 HTML 可直接打开）；配套代码：[CPU PyTorch REINFORCE 练习](lessons/lesson-17-policy-gradient.py)。运行：`uv run python lessons/lesson-17-policy-gradient.py`。页面嵌入同一随机网格的三种子无基线/有基线实际训练结果，并用交互演算解释策略梯度、优势、PPO 剪裁、Token 序列决策、典型 RLHF 与 DPO 流程。程序只训练小型策略网络，不训练语言模型，也不需要服务或下载数据。

学习内容：

- 直接学习策略：策略梯度与 REINFORCE 的核心推导。
- 基线与优势函数如何帮助降低梯度估计的方差。
- Actor-Critic：策略网络与价值网络的分工。
- 概念性了解 PPO 为什么限制策略更新幅度，不要求本节从零实现。
- RLHF 的典型流程：收集偏好、训练奖励模型、优化语言模型策略。
- 把语言模型生成理解为序列决策：Token 是动作，已有上下文构成状态信息。
- 区分 RLHF 与 DPO：DPO 可直接利用偏好数据训练，不需要显式的奖励模型和在线强化学习采样循环。
- 奖励设计的局限，以及高奖励不一定代表真正完成了任务。

练习与验收：

- 在小型环境中实现基础 REINFORCE；需要时增加基线作为进阶练习。
- 用自己的话比较 Q-learning、DQN 与策略梯度分别学习什么。
- 画出典型 RLHF 的流程，解释奖励模型和语言模型各自的作用。本阶段不要求实际训练大语言模型。

## 8. 第六阶段：完成一个可评估的 AI 项目（第十八节至第二十节）

### 第十八节：构建知识问答系统

状态：当前学习。讲义：[第十八节互动讲义](lessons/lesson-18-rag.html)（本地 HTML 可直接打开）；配套代码：[本地检索问答练习](lessons/lesson-18-rag.py)与[示例 Markdown 资料](lessons/lesson-18-data/tensors.md)。运行：`uv run python lessons/lesson-18-rag.py`；也可用 `--docs` 和 `--question` 查询自己的笔记。课件展示切分、词面 TF-IDF 稀疏向量、余弦检索、上下文预算、证据摘录与来源引用，并构造交给未来语言模型的提示词。默认演示没有调用语言模型或外部服务，摘录式候选回答不等同于模型生成。

学习内容：

- 文档切分、词面 TF-IDF 稀疏向量与余弦检索；认识语义 Embedding 是后续升级方向。
- 将检索结果与来源组装成可交给语言模型的提示词；本节暂不调用语言模型。
- 从证据中摘录候选答案，核查答案与来源依据。

练习与验收：使用自己的学习资料，完成一个能检索、摘录并标明来源的最小应用；生成式回答留待后续项目补上。

### 第十九节：评估与改进

学习内容：

- 建立固定测试问题，包含可回答和资料中没有答案的问题。
- 分别检查检索质量与回答质量。
- 分析错误、延迟与成本。
- 比较改动前后的效果，保留独立测试集。

练习与验收：根据错误分析完成至少一次有依据的改进。

### 第二十节：整理毕业项目

毕业项目：围绕自己的资料构建一个学习助手。

交付内容：

- 可运行的代码与使用说明。
- 数据处理、检索与回答流程说明。
- 测试问题、评估结果与实验记录。
- 典型成功案例、失败案例和已知局限。

## 9. 阶段完成记录

单节进度：

- [x] 第一节：张量与必要基础。
- [ ] 数学补充课：向量、矩阵与求导（讲义已提供，完成待确认）。
- [ ] 第二节：模型怎样学习（讲义已提供，完成待确认）。
- [ ] 第三节：判断模型是否有效（讲义已提供，完成待确认）。
- [ ] 第四节：常见机器学习方法（讲义已提供，完成待确认）。
- [ ] 第五节：表格数据项目（讲义已提供，完成待确认）。
- [ ] 第六节：PyTorch 基础（讲义已提供，完成待确认）。
- [ ] 第七节：训练更可靠的神经网络（讲义已提供，完成待确认）。
- [ ] 第八节：卷积神经网络（讲义已提供，完成待确认）。
- [ ] 第九节：图像分类项目（讲义已提供，完成待确认）。
- [ ] 第十节：文本与序列建模（讲义已提供，完成待确认）。
- [ ] 第十一节：注意力机制（讲义已提供，完成待确认）。
- [ ] 第十二节：Transformer（讲义已提供，完成待确认）。
- [ ] 第十三节：大语言模型的训练与使用（讲义已提供，完成待确认）。
- [ ] 第十四节：从预测走向决策（讲义已提供，完成待确认）。
- [ ] 第十五节：表格型强化学习（讲义已提供，完成待确认）。
- [ ] 第十六节：深度强化学习与 DQN（讲义已提供，完成待确认）。
- [ ] 第十七节：策略梯度与大语言模型对齐（讲义已提供，完成待确认）。
- [ ] 第十八节：构建知识问答系统（当前学习）。

阶段进度：

- [ ] 第一阶段：理解张量，能连接数学推导、代码和训练曲线。
- [ ] 第二阶段：完成一个有可靠评估的表格数据项目。
- [ ] 第三阶段：用 PyTorch 完成图像分类与错误分析。
- [ ] 第四阶段：实现自注意力和小型语言模型，理解关键张量运算。
- [ ] 第五阶段：实现 Q-learning 与基础 DQN，理解策略梯度和 RLHF 的联系。
- [ ] 第六阶段：完成知识问答应用，并用固定测试问题验证改进。

后续每节的详细课程可以在此大纲基础上展开，包括概念讲解、推导、示例代码、练习与复盘。
