MIT 6.S191 课前基础知识补全
MIT 6.S191 课前基础知识补全
目标:不用额外搜索资料,先把看 MIT 6.S191 必须知道的数学、Python 和机器学习概念补到最低可用水平。这里的“最低可用”不是会完整证明,而是能听懂课程中的关键句子,能看懂 lab 中的代码结构,能把不懂的地方准确说出来。
1. 深度学习的统一框架
直觉解释:深度学习就是让一个由很多可调数字组成的函数,从数据中学习一种输入到输出的映射。输入可以是图片、文字、时间序列、状态向量;输出可以是类别、数值、下一个词、生成图片、动作选择。训练时,模型先做预测,再用 loss 衡量预测和真实目标的差距,然后用梯度更新参数。
专业表达:深度学习模型通常表示为带参数的函数 f(x; theta)。其中 x 是输入,theta 是模型参数,f 输出预测。训练目标是最小化经验风险,常见形式是:
min_theta 1/N * sum_i L(f(x_i; theta), y_i)
这里 L 是 loss function,N 是训练样本数。你不需要一开始掌握所有优化理论,但必须知道:训练不是让模型“记住答案”,而是通过不断降低 loss 来调整参数。
2. Tensor、vector、matrix
直觉解释:深度学习里的数据不是单个数字,而是成批的多维数组。一个样本可能有很多特征,一批样本就是二维矩阵;一张彩色图片有高度、宽度、通道;一批图片就变成四维 tensor。
专业表达:
| 名称 | 中文理解 | 常见 shape |
|---|---|---|
| scalar | 一个数字 | () |
| vector | 一列或一行数字 | (features,) |
| matrix | 二维数字表 | (samples, features) |
| tensor | 多维数组 | (batch, height, width, channels) 或 (batch, seq_len, hidden_dim) |
最重要的是 shape。很多深度学习报错不是模型理论错,而是 shape 对不上。例如 X @ W 要求 X 的最后一维等于 W 的第一维。
import numpy as np
X = np.random.randn(4, 3) # 4 个样本,每个样本 3 个特征
W = np.random.randn(3, 2) # 把 3 维特征映射成 2 维输出
b = np.random.randn(2)
Y = X @ W + b
print("X:", X.shape)
print("W:", W.shape)
print("b:", b.shape)
print("Y:", Y.shape)
你应该能解释:Y.shape 是 (4, 2),因为每个样本从 3 维被映射到 2 维。
3. 矩阵乘法在模型中的意义
在神经网络里,X @ W + b 是最基本的线性层。它的意思不是简单做算术,而是把输入特征重新组合成新的表示。W 中的每个数都可以被训练修改,所以模型可以学习“哪些输入特征更重要,以及如何组合它们”。
专业表达:
Z = XW + b
A = activation(Z)
Z 是线性变换结果,A 是激活函数后的结果。激活函数让模型不只是线性模型。没有非线性激活,多层线性层叠起来仍然等价于一个线性层,表达能力有限。
常见激活函数:
| 激活函数 | 直觉 | 常见用途 |
|---|---|---|
| ReLU | 负数变 0,正数保留 | CNN、MLP 中非常常见 |
| sigmoid | 压到 0 到 1 | 二分类概率,早期网络 |
| tanh | 压到 -1 到 1 | RNN 中常见 |
| softmax | 把一组分数变成概率分布 | 多分类输出层 |
4. Loss function
直觉解释:loss 是模型错得有多严重的量化指标。模型不能只知道“错了”,还要知道“错了多少”,这样才能改参数。
常见 loss:
| 任务 | 常见 loss | 直觉 |
|---|---|---|
| 回归 | MSE | 预测数值和真实数值的平方差 |
| 二分类 | Binary cross entropy | 预测概率和 0/1 标签的差距 |
| 多分类 | Cross entropy | 正确类别概率越低,惩罚越大 |
| 语言模型 | Token-level cross entropy | 下一个 token 预测错得多严重 |
| 去噪生成 | MSE 或 noise prediction loss | 预测噪声和真实噪声差多少 |
例子:如果图片真实类别是“猫”,模型给猫的概率是 0.9,loss 较小;如果给猫的概率是 0.1,loss 较大。训练目标就是让正确答案的概率越来越高。
5. 梯度与链式法则
直觉解释:梯度告诉我们,如果某个参数稍微变大一点,loss 会变大还是变小。训练时,模型沿着让 loss 下降的方向更新参数。
专业表达:如果 loss 是 L(theta),梯度是 dL/dtheta。梯度下降更新公式是:
theta_new = theta_old - learning_rate * gradient
这里的 learning_rate 是学习率,控制每次走多大一步。太大可能震荡或发散,太小可能训练很慢。
最小例子:
w = 1.0
x = 2.0
y_true = 5.0
lr = 0.1
for step in range(10):
y_pred = w * x
loss = (y_pred - y_true) ** 2
grad_w = 2 * (y_pred - y_true) * x
w = w - lr * grad_w
print(step, round(w, 3), round(loss, 3))
你要观察的是 loss 是否下降,而不是只看代码能不能运行。
6. Backpropagation
backpropagation 不等于神经网络本身。它是一种高效计算梯度的方法。神经网络有很多层,loss 对最前面参数的影响要穿过后面的层才能算出来。链式法则负责把这种影响一层层传回去。
流程图:
flowchart LR
X["输入 x"] --> F["forward pass"]
F --> YHAT["预测 y_hat"]
Y["真实 y"] --> L["loss"]
YHAT --> L
L --> B["backpropagation 计算梯度"]
B --> O["optimizer 更新参数"]
O --> F
如果你能说出这张图,就已经掌握了深度学习训练的主干。
7. Overfitting 和 generalization
直觉解释:模型在训练集上表现好,不代表在新数据上表现好。如果模型只是记住训练样本,它在真实任务中可能失败。
专业表达:overfitting 是训练误差低但测试误差高的现象。generalization 指模型在未见数据上的表现。
常见检查:
- 训练 loss 下降,验证 loss 也下降:比较健康。
- 训练 loss 下降,验证 loss 上升:可能过拟合。
- 训练和验证 loss 都不下降:可能模型太弱、学习率不对、数据有问题。
- 指标很好但样本很少:需要警惕偶然性。
8. Python/Jupyter 最小能力
你不需要一开始会写复杂工程,但必须会做这些事:
print(type(x))
print(x.shape)
print(x[:5])
print(np.isnan(x).sum())
如果使用 PyTorch,还要会:
import torch
x = torch.randn(8, 10)
linear = torch.nn.Linear(10, 3)
logits = linear(x)
print(logits.shape)
这段代码的含义是:8 个样本,每个 10 维,经过线性层后变成 3 维输出,常用于三分类。
9. 课前自测答案框架
- 为什么要最小化 loss?因为 loss 衡量预测和目标差距,降低 loss 才能让模型参数朝任务目标调整。
X @ W + b是什么?它是线性层,X是输入,W是权重,b是偏置,输出是新的特征表示。- 为什么 shape 重要?因为矩阵乘法、卷积、attention 都依赖维度匹配。
- cross entropy 用在哪里?分类和语言模型中常见,用来惩罚正确类别概率过低。
- MSE 用在哪里?回归和去噪任务中常见,用来衡量连续数值差距。
10. 可以问 AI 的提示词
请用跨专业硕士新生能懂的方式解释【概念】。要求先给直觉解释,再给专业表达,再给一个最小 Python/PyTorch 例子。最后请列出我最容易误解的 3 点,并给 5 个自测问题。