Cpt2: Perceptron & Adaline — Cheatsheet
- Perceptron:$\text{step}(z) = \begin{cases} +1 & z \geq 0 \ -1 & z < 0 \end{cases}$,输出离散,无梯度
- Adaline:$z = \mathbf{w}^\top \mathbf{x}$,输出连续值,可用MSE求导
误差项本质区别:
- Perceptron更新用$(y - \hat{y})$,$\hat{y} \in {\pm1}$ → 误差只取${0, \pm2}$
- Adaline更新用$(y - z)$,$z \in \mathbb{R}$ → 误差连续,梯度平滑
学习率$\eta$影响:
- $\eta$太小:收敛慢,训练时间长
- $\eta$太大:超调/发散,Loss震荡
- ⚡ 本章算法无自适应$\eta$,需手动调或设衰减
Batch vs SGD vs Mini-batch:
- Batch:用全部$n$样本算梯度 → 准、稳,但慢、吃内存
- SGD:每次用1样本 → 快、可跳出局部最优,但震荡大、需$\eta$衰减
- Mini-batch:用$b$样本(32/64)→ 平衡速度+稳定性,深度学习默认
- ⚡ 增大batch size ≠ 总是更好:batch太大→梯度估计准但更新少→收敛慢;batch太小→噪声大→可能发散
Perceptron 训练流程
- 初始化权重$\mathbf{w} \leftarrow \mathbf{0}$(或小随机值)
- 对每一轮epoch:
- 遍历每个样本$(\mathbf{x}^{(i)}, y^{(i)})$:
- 计算得分$z = \mathbf{w}^\top \mathbf{x}^{(i)}$
- 预测$\hat{y} = \text{step}(z)$
- 若$\hat{y} \neq y^{(i)}$(分类错误):
- 更新$\mathbf{w} \leftarrow \mathbf{w} + \eta \cdot (y^{(i)} - \hat{y}) \cdot \mathbf{x}^{(i)}$
- 若本轮无错误,提前终止
- 遍历每个样本$(\mathbf{x}^{(i)}, y^{(i)})$:
- 输出最终$\mathbf{w}$
💡 应用题技巧:手动模拟时,注意$(y-\hat{y})$只取${0, \pm2}$;更新方向始终"推"错误样本跨过决策边界
Adaline + Batch GD 流程
- 初始化$\mathbf{w} \leftarrow \mathbf{0}$
- 对每一轮epoch:
- 计算所有样本的预测$z^{(i)} = \mathbf{w}^\top \mathbf{x}^{(i)}$
- 计算梯度$\nabla J(\mathbf{w}) = -\sum_{i=1}^n (y^{(i)} - z^{(i)}) \mathbf{x}^{(i)}$
- 统一更新$\mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \nabla J(\mathbf{w})$
- (可选)计算$J(\mathbf{w}) = \frac{1}{2}\sum_i (y^{(i)} - z^{(i)})^2$监控收敛
- 输出$\mathbf{w}$
💡 应用题技巧:梯度推导见下方模板;注意向量形式$\nabla J = -X^\top(\mathbf{y} - X\mathbf{w})$可快速写答案
模板1:Adaline 梯度推导(⭐⭐⭐ 必背)
已知损失$J(\mathbf{w}) = \frac{1}{2} \sum_{i=1}^n (y^{(i)} - z^{(i)})^2$,其中$z^{(i)} = \mathbf{w}^\top \mathbf{x}^{(i)}$
对单个权重$w_j$求偏导:
$$
\frac{\partial J}{\partial w_j} = \frac{\partial}{\partial w_j} \left[ \frac{1}{2} \sum_i (y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)})^2 \right]
= \sum_i (y^{(i)} - z^{(i)}) \cdot \frac{\partial}{\partial w_j} (y^{(i)} - z^{(i)})
$$
$$
= \sum_i (y^{(i)} - z^{(i)}) \cdot (-\frac{\partial z^{(i)}}{\partial w_j})
= \sum_i (y^{(i)} - z^{(i)}) \cdot (-x_j^{(i)})
= -\sum_i (y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)}) x_j^{(i)}
$$
向量形式(更简洁,推荐考场写):
$$
\nabla J(\mathbf{w}) = -X^\top (\mathbf{y} - X\mathbf{w})
\quad \Rightarrow \quad
\mathbf{w} \leftarrow \mathbf{w} + \eta X^\top (\mathbf{y} - X\mathbf{w})
$$
💡 链式法则通用:$\frac{\partial J}{\partial \mathbf{w}} = \frac{\partial J}{\partial z} \cdot \frac{\partial z}{\partial \mathbf{w}}$,后续逻辑回归/神经网络同理
Cpt3: Logistic Regression / SVM / KNN — Cheatsheet
Logistic Regression 本质:
- 判别式模型,直接建模 $P(y=1|\mathbf{x};\mathbf{w}) = \sigma(\mathbf{w}^\top \mathbf{x})$,$\sigma(z) = \frac{1}{1+e^{-z}}$
- 输出是概率,非硬分类;预测时通常阈值0.5二值化
- ✅ 等价于单层神经网络 + sigmoid激活 + cross-entropy损失 → pp2-P1 Q7
Cross-Entropy vs MSE for 分类:
- CE损失:$J = -[y \log \sigma + (1-y)\log(1-\sigma)]$
- 梯度:$\frac{\partial J}{\partial \mathbf{w}} = (\sigma - y)\mathbf{x}$(简洁!)
- MSE梯度:$(\sigma - y) \cdot \sigma(1-\sigma) \cdot \mathbf{x}$ → 多一项$\sigma(1-\sigma)$,当$\sigma$接近0/1时梯度消失
- ✅ CE对分类任务更友好,梯度信号强
SVM 最大间隔直觉:
- 目标:找超平面$\mathbf{w}^\top \mathbf{x} + b = 0$,使最近样本到平面距离最大
- 几何间隔 = $\frac{y(\mathbf{w}^\top \mathbf{x} + b)}{|\mathbf{w}|}$,最大化最小几何间隔 ⇔ 最小化$\frac{1}{2}|\mathbf{w}|^2$
- 约束:$y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b) \geq 1$(函数间隔≥1)
Hinge Loss 与 0-1 Loss:
- 0-1 loss:$\mathbb{I}(y \neq \hat{y})$,非凸、不可导,难优化
- Hinge loss:$\max(0, 1 - y(\mathbf{w}^\top \mathbf{x} + b))$,凸代理,可导(次梯度)
- 当$y z \geq 1$时loss=0(正确分类且间隔足够),否则线性惩罚
支持向量:
- 满足$0 < \alpha_i < C$的样本(对偶变量),位于间隔边界上
- 决定决策边界:$\mathbf{w} = \sum_i \alpha_i y^{(i)} \mathbf{x}^{(i)}$,仅支持向量贡献
- ⚡ 测试时只需计算与支持向量的内积,高效
软间隔与Slack变量:
- 允许部分样本违反间隔:$y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b) \geq 1 - \xi_i, \xi_i \geq 0$
- 目标:$\min \frac{1}{2}|\mathbf{w}|^2 + C \sum_i \xi_i$,$C$大→硬间隔(不容错),$C$小→软间隔(容错强)
- ⚠️ $C$是正则化强度的倒数:$C \uparrow$ → 正则化$\downarrow$ → 易过拟合
KNN 核心特性:
- 惰性学习(lazy):无显式训练,预测时才计算
- 距离度量:Euclidean $|\mathbf{x}-\mathbf{x}'|_2$(默认), Manhattan $|\cdot|_1$, Minkowski $|\cdot|_p$
- k值影响(⭐⭐⭐ 高频):
- $k=1$:决策边界锯齿状,variance高,bias低 → 易过拟合
- $k=n$:全局多数投票,boundary平滑,bias高,variance低 → 易欠拟合
- ✅ 选k:交叉验证,通常奇数防平票
Logistic Regression 训练流程
- 初始化权重$\mathbf{w} \leftarrow \mathbf{0}$(或小随机值),设学习率$\eta$
- 对每轮epoch:
- 对每个样本$(\mathbf{x}^{(i)}, y^{(i)})$:
- 计算线性得分$z^{(i)} = \mathbf{w}^\top \mathbf{x}^{(i)}$
- 计算概率$\sigma^{(i)} = \frac{1}{1+e^{-z^{(i)}}}$
- 计算梯度$\nabla J^{(i)} = (\sigma^{(i)} - y^{(i)}) \mathbf{x}^{(i)}$
- (Batch GD)汇总梯度:$\nabla J = \frac{1}{n} \sum_i \nabla J^{(i)}$
- 更新权重:$\mathbf{w} \leftarrow \mathbf{w} - \eta \nabla J$
- 对每个样本$(\mathbf{x}^{(i)}, y^{(i)})$:
- 预测新样本:计算$\sigma(\mathbf{w}^\top \mathbf{x})$,若$\geq 0.5$则预测+1
💡 应用题技巧:梯度形式$(\sigma-y)\mathbf{x}$与Adaline$(z-y)\mathbf{x}$结构一致,仅激活函数不同
SVM 训练流程(对偶问题直觉)
- 构造QP问题:
- 目标:$\min_{\boldsymbol{\alpha}} \frac{1}{2} \sum_{i,j} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) - \sum_i \alpha_i$
- 约束:$0 \leq \alpha_i \leq C$, $\sum_i \alpha_i y_i = 0$
- 用SMO等算法解出$\alpha_i$
- 计算$\mathbf{w} = \sum_i \alpha_i y_i \mathbf{x}_i$(仅支持向量$\alpha_i>0$贡献)
- 计算$b$:任选支持向量$(\mathbf{x}_s, y_s)$,$b = y_s - \mathbf{w}^\top \mathbf{x}_s$
- 预测:$f(\mathbf{x}) = \text{sign}(\sum_i \alpha_i y_i K(\mathbf{x}_i, \mathbf{x}) + b)$
💡 应用题技巧:线性核时$K(\mathbf{x}_i,\mathbf{x}) = \mathbf{x}_i^\top \mathbf{x}$;RBF核需记$\exp(-\gamma |\mathbf{x}_i-\mathbf{x}|^2)$
模板1:Logistic Regression 梯度推导(⭐⭐⭐ 必背)
损失函数(单样本):
$
J(\mathbf{w}) = - \left[ y \log \sigma(z) + (1-y) \log(1-\sigma(z)) \right], \quad z = \mathbf{w}^\top \mathbf{x}
$
链式法则:
$
\frac{\partial J}{\partial \mathbf{w}} = \frac{\partial J}{\partial \sigma} \cdot \frac{\partial \sigma}{\partial z} \cdot \frac{\partial z}{\partial \mathbf{w}}
$
逐层计算:
$
\frac{\partial J}{\partial \sigma} = -\left[ \frac{y}{\sigma} - \frac{1-y}{1-\sigma} \right] = \frac{\sigma - y}{\sigma(1-\sigma)}
$
$
\frac{\partial \sigma}{\partial z} = \sigma(1-\sigma) \quad \text{(sigmoid导数)}
$
$
\frac{\partial z}{\partial \mathbf{w}} = \mathbf{x}
$
相乘消去$\sigma(1-\sigma)$:
$
\frac{\partial J}{\partial \mathbf{w}} = \frac{\sigma - y}{\sigma(1-\sigma)} \cdot \sigma(1-\sigma) \cdot \mathbf{x} = (\sigma - y) \mathbf{x} \quad \checkmark
$
💡 关键:$\sigma(1-\sigma)$项恰好消去,梯度简洁!多样本时取平均
模板2:SVM 最大间隔 ⇔ 最小化‖w‖²
目标:最大化最小几何间隔$\gamma = \min_i \frac{y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b)}{|\mathbf{w}|}$
等价变换:
- 固定函数间隔为1(缩放$\mathbf{w},b$不影响超平面):$y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b) \geq 1$
- 几何间隔 = $1/|\mathbf{w}|$,最大化$1/|\mathbf{w}|$ ⇔ 最小化$|\mathbf{w}|$
- 为方便求导,最小化$\frac{1}{2}|\mathbf{w}|^2$(凸函数,最优解相同)
最终QP形式:
$$
\min_{\mathbf{w},b} \frac{1}{2} |\mathbf{w}|^2 \quad \text{s.t.} \quad y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b) \geq 1, \forall i
$$
💡 证明题开头先写"目标:max margin ⇔ min ‖w‖",逻辑清晰
模板3:Hinge Loss 次梯度推导
Hinge loss:$\ell(z) = \max(0, 1 - y z)$, $z = \mathbf{w}^\top \mathbf{x} + b$
次梯度(因max函数在$1-yz=0$处不可导):
$$
\frac{\partial \ell}{\partial \mathbf{w}} =
\begin{cases}
-y \mathbf{x} & \text{if } y z < 1 \quad \text{(违反间隔)} \
0 & \text{if } y z > 1 \quad \text{(满足间隔)} \
\text{任意} \in [-y\mathbf{x}, 0] & \text{if } y z = 1
\end{cases}
$$
💡 应用:SGD更新时,仅对$yz<1$的样本更新$\mathbf{w} \leftarrow \mathbf{w} + \eta y \mathbf{x}$
模板5:SVM 软间隔 约束与目标
Primal problem with slack variables:
$$
\min_{\mathbf{w},b,\boldsymbol{\xi}} \frac{1}{2} |\mathbf{w}|^2 + C \sum_{i=1}^n \xi_i
$$
$$
\text{s.t.} \quad y^{(i)}(\mathbf{w}^\top \mathbf{x}^{(i)} + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i
$$
- $\xi_i = 0$:样本在间隔外或边界上(正确分类)
- $0 < \xi_i \leq 1$:样本在间隔内但分类正确
- $\xi_i > 1$:样本被误分类
- $C$控制tradeoff:$C \to \infty$ → 硬间隔;$C \to 0$ → 忽略间隔,只最小化误分类
💡 证明题:若问"为什么用$\frac{1}{2}|\mathbf{w}|^2$" → 答:凸、可导、最优解相同
Cpt4: Data Preprocessing — Cheatsheet
缺失值处理策略对比:
| 方法 | 适用场景 | 优点 | 缺点 |
| 删除样本 | 缺失比例<5%,随机缺失 | 简单直接 | 数据量减少,可能引入偏差 |
| 删除特征 | 某特征缺失>50% | 避免插值噪声 | 丢失潜在信息 |
| 均值/中位数填充 | 数值型,近似正态分布 | 保留样本量 | 低估方差,扭曲分布 |
| 众数/常数填充 | 类别型 | 保持类别完整性 | 可能引入虚假模式 |
| 模型预测填充 | 高价值特征,缺失机制可建模 | 利用特征相关性 | 计算复杂,可能过拟合 |
⚠️ 易错:填充时必须用训练集统计量(均值/标准差),测试集用相同参数变换,否则数据泄露!
定序 (Ordinal) vs 定类 (Nominal) 编码:
- 定序:有自然顺序(小学<初中<高中),映射为整数{1,2,3},模型可学习大小关系
- 定类:无顺序(红/绿/蓝),必须用独热编码 (One-Hot),避免引入虚假顺序
- ⚡ 独热编码后特征数 = 类别数;若用线性模型,建议
drop='first'避免多重共线性(n类→n-1维)
Dummy Variable Trap:
- 若n个类别用n个二元特征 + 截距项 → 特征线性相关($x_1+x_2+...+x_n=1$)→ 矩阵奇异,优化不稳定
- ✅ 解决:drop首列,或去掉截距项(但通常drop列更稳妥)
Train/Test Split 关键原则:
- 随机划分:假设数据i.i.d.,用
random_state保证可复现 - 分层抽样 (
stratify=y):保持各类别比例一致,小样本/不平衡数据必用 - 时间序列数据:不能随机打乱,按时间先后划分,否则未来信息泄露
- 典型比例:小数据(1000-)用30%测试;中大数据用10-20%;极大数据可用1-5%
特征缩放:归一化 vs 标准化(⭐⭐⭐ 高频):
| 方法 | 公式 | 输出范围 | 对异常值敏感 | 适用算法 |
| 归一化 (Min-Max) | $x' = \frac{x-x_{\min}}{x_{\max}-x_{\min}}$ | [0,1] | ⚠️ 极敏感(极值拉偏) | 神经网络(输入[0,1])、图像处理 |
| 标准化 (Z-score) | $x' = \frac{x-\mu}{\sigma}$ | ℝ,均值为0方差为1 | ✅ 鲁棒(用均值/标准差) | SVM、KNN、LR、PCA、K-means |
💡 核心结论:基于距离/梯度的算法必须缩放;树模型(决策树、RF、XGBoost)不需要(基于分裂,尺度不变)
L1 vs L2 正则化几何解释(⭐⭐⭐ 证明题高频):
- L2:惩罚项$\lambda|\mathbf{w}|_2^2$,等高线为圆 → 权重向原点收缩,但很少精确为0
- L1:惩罚项$\lambda|\mathbf{w}|_1$,等高线为菱形(有尖角)→ 优化路径易碰尖角 → 产生稀疏解(部分$w_j=0$)
- ✅ L1用于特征选择;L2用于防止过拟合、处理多重共线性
序列后向选择 (SBS) 直觉:
- 贪心算法:从d维开始,每轮剔除使性能下降最小的特征,直到剩k维
- 优点:考虑特征交互;缺点:计算量大$O(d^2)$,可能陷入局部最优
- ⚡ 替代:L1正则(更高效)、基于树的重要性排序
独热编码实操步骤
- 识别定类特征(无顺序的类别变量)
- 对每个定类特征:
- 若用线性模型/逻辑回归 →
OneHotEncoder(drop='first')避免共线性 - 若用树模型 → 可保留全部类别(树能处理冗余)
- 若用线性模型/逻辑回归 →
- 合并编码后的特征与原始数值特征
- ✅ 关键:
encoder.fit( train_categories ),encoder.transform( test_categories ),测试集遇到新类别需处理(设handle_unknown='ignore')
特征缩放标准流程
- 划分训练集/测试集(先划分,再缩放! 防止数据泄露)
- 对训练集:
- 计算每特征均值$\mu_j$、标准差$\sigma_j$(标准化)或最小/最大值(归一化)
- 应用变换:$x'_j = \frac{x_j - \mu_j}{\sigma_j}$
- 对测试集:
- 必须用训练集的$\mu_j, \sigma_j$ 做相同变换
- 用缩放后的数据训练模型
💡 应用题技巧:题目给两特征量纲差异大(如年龄[0,100],收入[0,10^6])→ 必答"需标准化,否则距离/梯度被大尺度特征主导"
模板2:L1正则产生稀疏解的几何证明
考虑二维情况,优化问题:
$$
\min_{\mathbf{w}} J(\mathbf{w}) \quad \text{s.t.} \quad |\mathbf{w}|_1 \leq C \quad \text{(L1)} \quad \text{or} \quad |\mathbf{w}|_2^2 \leq C \quad \text{(L2)}
$$
- L2约束域:$w_1^2 + w_2^2 \leq C$ → 圆,边界光滑
- L1约束域:$|w_1| + |w_2| \leq C$ → 菱形,顶点在坐标轴$(\pm C, 0), (0, \pm C)$
损失函数等高线与约束域首次相切:
- 圆:切点通常在象限内 → $w_1, w_2 \neq 0$
- 菱形:切点易在顶点 → 某$w_j = 0$ ✓
💡 证明题开头先画约束域形状,再说明"切点位置决定稀疏性"
模板3:独热编码避免虚假顺序的代数解释
设三类别A/B/C,若简单映射为{1,2,3}:
- 线性模型预测:$\hat{y} = w \cdot x + b$
- 则$\hat{y}_B - \hat{y}_A = w(2-1) = w$,$\hat{y}_C - \hat{y}_B = w(3-2) = w$
- → 隐含假设"B-A"与"C-B"效应相同,但类别无顺序,此假设错误 ❌
独热编码后:
$
\mathbf{x}_A = [1,0,0]^\top, \mathbf{x}_B = [0,1,0]^\top, \mathbf{x}_C = [0,0,1]^\top
$
$
\hat{y} = w_1 x_1 + w_2 x_2 + w_3 x_3 + b
$
- 三类预测独立:$\hat{y}_A = w_1 + b$, $\hat{y}_B = w_2 + b$, $\hat{y}_C = w_3 + b$
- 无顺序约束,模型自由学习各类别效应 ✓
💡 证明题技巧:用具体数值举例对比,直观清晰
Cpt5: Dimensionality Reduction — Cheatsheet
维度灾难 (Curse of Dimensionality):
- 随特征数$d$增加,数据在高维空间变得稀疏 → 距离度量失效(所有点对距离趋近相等)
- 需要指数级更多样本才能维持相同密度:$n \propto r^d$
- ✅ 影响:KNN/K-means等基于距离的算法性能骤降;模型易过拟合(参数过多)
降维两大策略对比:
| 方法 | 代表算法 | 优点 | 缺点 | 适用场景 |
| 特征选择 (Feature Selection) | Filter(方差/相关性), Wrapper(SBS/SFS), Embedded(L1) | 保留原始特征可解释性;计算高效 | 可能丢失特征交互信息 | 高维稀疏数据;需要特征解释 |
| 特征提取 (Feature Extraction) | PCA, LDA, Autoencoder | 捕捉特征交互;可降至极低维 | 新特征无物理意义;计算复杂 | 图像/文本等高维稠密数据 |
冗余特征检测:
- 高相关特征:计算皮尔逊相关系数$|r| > 0.9$ → 保留其一
- 低方差特征:$\text{Var}(x_j) \approx 0$ → 几乎常数,无区分力 → 删除
- ⚡ 注意:低方差≠无用!若与label强相关仍需保留(罕见但可能)
主成分分析 (PCA) 核心直觉(⭐⭐⭐ 高频):
- 目标:找正交基${\mathbf{u}_1, \mathbf{u}_2, ...}$,使数据投影后方差最大(保留最多信息)
- 第一主成分$\mathbf{u}1$:$\arg\max{|\mathbf{u}|=1} \text{Var}(\mathbf{u}^\top \mathbf{X})$
- 等价视角:最小化重构误差$\sum_i |\mathbf{x}^{(i)} - \tilde{\mathbf{x}}^{(i)}|^2$
- ✅ 两个视角数学等价(证明见模板)
PCA 前提假设:
- 线性关系:主成分是原始特征的线性组合
- 方差=信息:假设高方差方向包含更多信号(噪声通常方差小)
- 正交性:主成分间线性无关(协方差=0)
- ⚠️ 若数据有非线性流形结构 → 用Kernel PCA / t-SNE / UMAP
特征缩放对PCA的影响(⭐⭐⭐ 易错):
- PCA对特征尺度敏感:大尺度特征主导方差 → 主成分偏向该方向
- ✅ 必须先标准化:$x'_j = \frac{x_j - \mu_j}{\sigma_j}$,使各特征"话语权平等"
- ⚠️ 若特征本就有物理尺度意义(如像素值[0,255])→ 可考虑归一化而非标准化
PCA 标准流程(考场必会)
- 数据预处理:
- 处理缺失值(删除/填充)
- ✅ 标准化:对每特征计算$\mu_j, \sigma_j$,变换$x'_j = \frac{x_j - \mu_j}{\sigma_j}$
- 计算协方差矩阵:
- $\Sigma = \frac{1}{n} X^\top X$($X$已中心化,即每列均值=0)
- 特征值分解:
- 解$\Sigma \mathbf{u} = \lambda \mathbf{u}$,得特征值$\lambda_1 \geq \lambda_2 \geq ... \geq \lambda_d$和对应特征向量$\mathbf{u}_1, \mathbf{u}_2, ...$
- 选择主成分数$k$:
- 方法1:设定方差保留比例,如$\frac{\sum_{j=1}^k \lambda_j}{\sum_{j=1}^d \lambda_j} \geq 0.95$
- 方法2:肘部法则(scree plot),选$\lambda$下降变缓处
- 投影降维:
- 构造投影矩阵$U_k = [\mathbf{u}_1, \mathbf{u}_2, ..., \mathbf{u}_k] \in \mathbb{R}^{d \times k}$
- 降维后数据$Z = X U_k \in \mathbb{R}^{n \times k}$
💡 应用题技巧:手动计算2D→1D PCA时,先中心化→算协方差→求特征向量→投影;注意特征向量需单位化
降维后模型训练流程
- 在训练集上fit降维器(如PCA),记录变换参数($\mu, \sigma, U_k$)
- 用降维后的训练数据$Z_{\text{train}}$训练模型
- 对测试集:
- 用训练集的$\mu, \sigma$标准化
- 用训练集的$U_k$投影得$Z_{\text{test}}$
- 用训练好的模型预测
- ✅ 防止数据泄露:降维参数必须从训练集学习!
模板1:PCA 最大方差 ⇔ 最小重构误差(⭐⭐⭐ 必背)
视角1:最大化投影方差
设数据已中心化($\sum_i \mathbf{x}^{(i)} = \mathbf{0}$),投影方向$\mathbf{u}$($|\mathbf{u}|=1$)
投影后方差:
$$
\text{Var} = \frac{1}{n} \sum_{i=1}^n (\mathbf{u}^\top \mathbf{x}^{(i)})^2 = \mathbf{u}^\top \left( \frac{1}{n} \sum_i \mathbf{x}^{(i)} \mathbf{x}^{(i)\top} \right) \mathbf{u} = \mathbf{u}^\top \Sigma \mathbf{u}
$$
优化问题:$\max_{|\mathbf{u}|=1} \mathbf{u}^\top \Sigma \mathbf{u}$
拉格朗日:$\mathcal{L} = \mathbf{u}^\top \Sigma \mathbf{u} - \lambda(\mathbf{u}^\top \mathbf{u} - 1)$
求导令0:$\frac{\partial \mathcal{L}}{\partial \mathbf{u}} = 2\Sigma \mathbf{u} - 2\lambda \mathbf{u} = 0 \Rightarrow \Sigma \mathbf{u} = \lambda \mathbf{u}$
→ 最优$\mathbf{u}$是$\Sigma$的最大特征值对应特征向量 ✓
视角2:最小化重构误差
重构数据$\tilde{\mathbf{x}}^{(i)} = (\mathbf{u}^\top \mathbf{x}^{(i)}) \mathbf{u}$(投影再还原)
重构误差:
$$
J = \frac{1}{n} \sum_i |\mathbf{x}^{(i)} - \tilde{\mathbf{x}}^{(i)}|^2 = \frac{1}{n} \sum_i |\mathbf{x}^{(i)}|^2 - \mathbf{u}^\top \Sigma \mathbf{u}
$$
$\because \frac{1}{n}\sum_i |\mathbf{x}^{(i)}|^2$是常数 → $\min J \Leftrightarrow \max \mathbf{u}^\top \Sigma \mathbf{u}$ ✓
💡 证明题关键:写出两视角目标函数,说明常数项等价
模板2:PCA 协方差矩阵特征分解推导
已知中心化数据$X \in \mathbb{R}^{n \times d}$,协方差$\Sigma = \frac{1}{n} X^\top X$
对$\Sigma$做特征分解:$\Sigma = U \Lambda U^\top$,其中$U = [\mathbf{u}_1, ..., \mathbf{u}_d]$正交,$\Lambda = \text{diag}(\lambda_1, ..., \lambda_d)$
投影到前$k$主成分:$Z = X U_k$,$U_k = [\mathbf{u}_1, ..., \mathbf{u}_k]$
重构数据:$\tilde{X} = Z U_k^\top = X U_k U_k^\top$
重构误差(Frobenius范数):
$$
|X - \tilde{X}|F^2 = |X(I - U_k U_k^\top)|F^2 = \text{tr}((X - \tilde{X})^\top (X - \tilde{X}))
$$
$$
= \text{tr}(X^\top X) - \text{tr}(U_k^\top X^\top X U_k) = n \sum{j=1}^d \lambda_j - n \sum{j=1}^k \lambda_j = n \sum_{j=k+1}^d \lambda_j
$$
→ 最小化误差 ⇔ 选最大$k$个$\lambda$ ✓
💡 考场简化:写"重构误差 = 总方差 - 保留方差 = $\sum_{j>k} \lambda_j$"即可
Cpt6: Model Evaluation & Tuning — Cheatsheet
混淆矩阵核心指标(⭐⭐⭐ 必背):
- $TP$:预测正/实际正;$TN$:预测负/实际负;$FP$:预测正/实际负(误报);$FN$:预测负/实际正(漏报)
- $Accuracy = \frac{TP+TN}{TP+TN+FP+FN}$ → 类别平衡时有效,不平衡时误导性强
- $Precision = \frac{TP}{TP+FP}$ → "预测为正的样本中有多少真正为正",关注查准率
- $Recall = \frac{TP}{TP+FN}$ → "实际为正的样本中有多少被找出",关注查全率
- $F1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall}$ → 调和平均,平衡查准查全
- ⚠️ 调和平均特性:$F1$对低值敏感,$P$或$R$任一接近0 → $F1$接近0
ROC曲线与AUC(⭐⭐⭐ 高频):
- $TPR = Recall = \frac{TP}{TP+FN}$(纵轴);$FPR = \frac{FP}{FP+TN}$(横轴)
- 阈值$\theta \downarrow$ → 更多样本判为正 → $TPR \uparrow, FPR \uparrow$ → 曲线向右上移动
- $AUC = \int_0^1 TPR(FPR) d(FPR)$:随机选一个正样本和一个负样本,模型给正样本打分更高的概率
- ✅ $AUC=0.5$:随机猜测;$AUC=1$:完美分类;$AUC<0.5$:模型反向,取反即可
- ⚡ ROC对类别不平衡鲁棒(因TPR/FPR分别归一化),Precision-Recall曲线更敏感
Bias-Variance分解(⭐⭐⭐ 证明题高频):
- 期望泛化误差:$\mathbb{E}[(y - f(\mathbf{x}))^2] = \underbrace{(\mathbb{E}[f(\mathbf{x})] - y)^2}{\text{Bias}^2} + \underbrace{\mathbb{E}[(f(\mathbf{x}) - \mathbb{E}[f(\mathbf{x})])^2]}{\text{Variance}} + \underbrace{\sigma^2}_{\text{Irreducible noise}}$
- High bias(欠拟合):模型太简单,训练/验证误差都高,曲线接近
- High variance(过拟合):模型太复杂,训练误差低,验证误差高,曲线间隙大
- ✅ 模型复杂度$\uparrow$ → bias$\downarrow$, variance$\uparrow$ → 找平衡点
交叉验证(Cross-Validation)策略对比:
| 方法 | 流程 | 优点 | 缺点 | 适用场景 |
| Hold-out | 随机分train/test(如7:3) | 简单快速 | 评估方差大,依赖划分 | 大数据集 |
| k-fold CV | 分k份,轮流做验证集,平均结果 | 评估稳定,数据利用率高 | 训练k次,计算量大 | 中小数据集(k=5/10) |
| LOOCV | $k=n$,每次留1个做验证 | 几乎无偏,数据利用率100% | 计算量$O(n)$,方差可能大 | 极小数据集 |
| Stratified CV | 每fold保持类别比例 | 评估稳定,适合不平衡数据 | 实现略复杂 | 类别不平衡必用 |
⚠️ 易错:CV用于模型选择/调参,最终性能仍需在独立测试集评估,防止过拟合验证集
过拟合诊断与应对:
- 现象:训练误差↓,验证误差↑;或训练/验证间隙大
- 原因:模型太复杂 / 数据太少 / 噪声太多 / 特征冗余
- ✅ 应对:① 增加数据 ② 正则化(L1/L2)③ 降维/特征选择 ④ 早停(early stopping)⑤ 集成(bagging降variance)
超参数调优策略:
- 网格搜索(Grid Search):穷举预定义参数组合 → 全面但计算量大
- 随机搜索(Random Search):随机采样参数空间 → 高效,高维空间更优
- 贝叶斯优化:用代理模型指导搜索 → 样本效率高,但实现复杂
- ✅ 实践:先随机搜索粗调,再网格搜索细调;用CV评估每组参数
类别不平衡处理(⭐⭐⭐ 应用题高频):
- 问题:多数类主导,少数类recall极低;accuracy虚高
- 评估指标:用F1/ROC-AUC/Precision-Recall曲线,而非accuracy
- 数据层面:① 过采样少数类(SMOTE)② 欠采样多数类 ③ 组合采样
- 算法层面:① 类别权重(class_weight)② 阈值移动(降低正类判定阈值)③ 集成方法(EasyEnsemble)
- ⚡ 阈值移动:原阈值0.5 → 调整为$\frac{cost_{FN}}{cost_{FP}+cost_{FN}}$,根据误分类代价优化
学习曲线绘制与解读流程
- 选择一系列训练集大小:$n_1 < n_2 < ... < n_m$(如10%, 30%, ..., 100%)
- 对每个$n_j$:
- 随机采样$n_j$个训练样本
- 训练模型,计算训练误差$J_{train}(n_j)$
- 在独立验证集上计算验证误差$J_{val}(n_j)$
- 绘制曲线:横轴=$n$,纵轴=$J$,两条曲线分别标训练/验证
- 解读:
- 两曲线都高且接近 → high bias → 换更复杂模型/加特征
- 训练低、验证高、间隙大 → high variance → 加数据/正则化/降维
- 验证曲线随$n$下降 → 增加数据有效
阈值移动优化F1流程
- 用模型输出概率$\sigma(\mathbf{x}) \in [0,1]$,而非硬分类
- 遍历阈值$\theta \in [0,1]$(如步长0.01):
- 对每个$\theta$:$\hat{y} = \mathbb{I}(\sigma(\mathbf{x}) \geq \theta)$
- 计算对应$Precision(\theta), Recall(\theta), F1(\theta)$
- 选使$F1$最大的$\theta^*$作为最终阈值
- ✅ 应用题技巧:题目问"如何优化recall" → 答"降低阈值,让更多样本判为正"
模板2:Bias-Variance分解推导(⭐⭐⭐ 高频)
设真实函数$y = f^*(\mathbf{x}) + \epsilon$,$\mathbb{E}[\epsilon]=0, \text{Var}(\epsilon)=\sigma^2$
模型$f$在训练集$\mathcal{D}$上学习,期望泛化误差:
$
\mathbb{E}_{\mathcal{D},\epsilon}[(y - f(\mathbf{x}))^2] = \mathbb{E}[(f^* + \epsilon - f)^2]
$
展开:
$
= \mathbb{E}[(f^* - f)^2] + \mathbb{E}[\epsilon^2] + 2\mathbb{E}[(f^* - f)\epsilon]
$
第三项:$\mathbb{E}[(f^* - f)\epsilon] = \mathbb{E}[f^* - f] \cdot \mathbb{E}[\epsilon] = 0$($\epsilon$与$f$独立)
第二项:$\mathbb{E}[\epsilon^2] = \text{Var}(\epsilon) = \sigma^2$(不可约误差)
第一项分解:
$
\mathbb{E}[(f^* - f)^2] = \mathbb{E}[(f - \mathbb{E}[f] + \mathbb{E}[f] - f^)^2]
$
$
= \underbrace{\mathbb{E}[(f - \mathbb{E}[f])^2]}_{\text{Variance}} + \underbrace{(\mathbb{E}[f] - f^)^2}{\text{Bias}^2} + 2\underbrace{\mathbb{E}[(f - \mathbb{E}[f])(\mathbb{E}[f] - f^*)]}{=0}
$
→ 总误差 = Bias² + Variance + $\sigma^2$ ✓
💡 证明题开头先写"目标:分解期望误差",再逐步展开,关键步骤标注"交叉项=0"
模板5:阈值移动优化Recall的数学原理
设模型输出概率$\sigma$,原阈值$\theta_0=0.5$
Recall定义:$R(\theta) = P(\sigma \geq \theta | y=1)$
- $\theta \downarrow$ → 判定条件放宽 → 更多正样本被检出 → $R \uparrow$
- 但同时$FP \uparrow$ → $Precision \downarrow$
最优阈值选择:
- 若目标最大化$F1$:遍历$\theta$选$\arg\max_\theta F1(\theta)$
- 若代价敏感:设$cost_{FP}, cost_{FN}$,最小化期望代价
$
\mathbb{E}[cost] = cost_{FP} \cdot FP(\theta) + cost_{FN} \cdot FN(\theta)
$
→ 求导或遍历找最优$\theta^*$ ✓
💡 证明题关键:写出Recall/Precision关于$\theta$的单调性,再结合目标函数优化
Cpt7: Ensemble Learning — Cheatsheet
Bagging (Bootstrap Aggregating) 直觉(⭐⭐⭐ 高频):
- 流程:有放回采样→训练多个基模型→投票/平均聚合
- Bootstrap采样:$n$样本中有放回抽$n$次 → 约63.2%样本被选中,36.8%为OOB(Out-Of-Bag)
- ✅ OOB样本可作为验证集,无需额外划分测试集
- 主要降低variance:平均多个模型→抵消个体波动,特别适合高variance基模型(如深决策树)
- ⚡ 并行训练:各基模型独立,可分布式加速
Boosting 核心直觉(⭐⭐⭐ 高频):
- 串行训练:每轮关注前一轮错分的样本
- 目标:降低bias,将弱学习器提升为强学习器
- 两类主流:
- AdaBoost:调整样本权重,错分样本权重↑
- Gradient Boosting:拟合残差(负梯度),逐步修正
AdaBoost 关键机制:
- 样本权重更新:$D_{t+1}(i) = \frac{D_t(i) \exp(-\alpha_t y_i h_t(\mathbf{x}_i))}{Z_t}$
- $y_i h_t(\mathbf{x}_i) > 0$(分类正确)→ 权重↓
- $y_i h_t(\mathbf{x}_i) < 0$(分类错误)→ 权重↑
- 基模型权重:$\alpha_t = \frac{1}{2} \ln \frac{1-\epsilon_t}{\epsilon_t}$
- 误差$\epsilon_t$越小 → $\alpha_t$越大 → 该模型投票权重越高
- ✅ 训练误差上界:$\prod_t 2\sqrt{\epsilon_t(1-\epsilon_t)}$,随轮数指数下降
Gradient Boosting 直觉:
- 每轮拟合残差:$r_i = y_i - F_{t-1}(\mathbf{x}_i)$(回归)或负梯度(通用)
- 更新:$F_t(\mathbf{x}) = F_{t-1}(\mathbf{x}) + \nu \cdot h_t(\mathbf{x})$,$\nu$为学习率(shrinkage)
- ✅ 学习率$\nu$小→需更多轮但泛化更好;$\nu$大→易过拟合
- ⚡ XGBoost/LightGBM:工程优化(正则化、直方图、叶子生长等),原理同GBDT
Voting 策略对比:
| 策略 | 公式 | 适用场景 | 优点 |
| Hard Voting | $\hat{y} = \text{mode}{h_1(\mathbf{x}), ..., h_T(\mathbf{x})}$ | 分类,基模型输出类别 | 简单直观 |
| Soft Voting | $\hat{y} = \arg\max_c \frac{1}{T}\sum_t P_t(y=c|\mathbf{x})$ | 分类,基模型输出概率 | 利用置信度,通常更优 |
| Average | $\hat{y} = \frac{1}{T}\sum_t h_t(\mathbf{x})$ | 回归 | 平滑预测,降variance |
| Weighted | $\hat{y} = \sum_t w_t h_t(\mathbf{x}), \sum w_t=1$ | 已知模型性能差异 | 给强模型更高权重 |
集成方法偏差-方差特性(⭐⭐⭐ 证明题高频):
- Bagging:主要降低variance,bias基本不变
- 适用:高variance基模型(如未剪枝树、KNN)
- Boosting:主要降低bias,可能增加variance
- 适用:高bias基模型(如浅树、线性模型)
- ✅ 经验:树模型→用Random Forest(bagging);线性模型→用GBDT(boosting)
Stacking 两层架构:
- 第一层:多个基模型(可异构)输出预测
- 第二层:Meta-learner(如LR)以第一层输出为输入,学习如何组合
- ✅ 关键:第一层预测需用交叉验证生成,防止数据泄露
- ⚡ 计算量大,但常获竞赛SOTA
Bagging 训练流程
- 设基学习器数量$T$,采样比例通常为100%(有放回)
- 对$t=1$到$T$:
- 从训练集有放回采样$n$样本,得$D_t$(Bootstrap样本)
- 用$D_t$训练基模型$h_t$(通常不剪枝/不设早停)
- 预测时:
- 分类:硬投票$\text{mode}{h_t(\mathbf{x})}$或软投票$\text{avg}{P_t(y|\mathbf{x})}$
- 回归:$\text{avg}{h_t(\mathbf{x})}$
- ✅ OOB评估:对每个样本,仅用未采样到它的基模型预测,计算整体性能
Random Forest 训练流程(Bagging + 特征随机)
- 设树数量$T$,每节点候选特征数$m$(分类$\approx\sqrt{d}$,回归$\approx d/3$)
- 对$t=1$到$T$:
- Bootstrap采样得$D_t$
- 用$D_t$训练决策树,但每节点分裂时:
- 随机选$m$个特征
- 仅在这$m$个中选最优分裂点(信息增益/基尼指数最大)
- 预测:所有树投票/平均
- ✅ 特征重要性计算:对每棵树,累加各特征分裂带来的不纯度下降,再跨树平均
AdaBoost 训练流程(⭐⭐⭐ 必会手动模拟)
- 初始化样本权重$D_1(i) = 1/n, \forall i$
- 对$t=1$到$T$:
- 用权重$D_t$训练弱学习器$h_t$(如决策树桩)
- 计算加权误差$\epsilon_t = \sum_{i: h_t(\mathbf{x}_i)\neq y_i} D_t(i)$
- 计算模型权重$\alpha_t = \frac{1}{2} \ln \frac{1-\epsilon_t}{\epsilon_t}$
- 更新样本权重
$
D_{t+1}(i) = \frac{D_t(i) \exp(-\alpha_t y_i h_t(\mathbf{x}i))}{Z_t}
$
其中$Z_t$为归一化因子,使$\sum_i D{t+1}(i)=1$
- 最终模型:$H(\mathbf{x}) = \text{sign}\left( \sum_{t=1}^T \alpha_t h_t(\mathbf{x}) \right)$
- ✅ 应用题技巧:手动计算时,注意$y_i, h_t(\mathbf{x}_i) \in {\pm1}$,$\exp(-\alpha_t y_i h_t)$正确分类时$<1$(权重↓),错误时$>1$(权重↑)
模板2:AdaBoost 样本权重更新推导
目标:解释$D_{t+1}(i) \propto D_t(i) \exp(-\alpha_t y_i h_t(\mathbf{x}_i))$的合理性
- 若分类正确:$y_i h_t(\mathbf{x}_i) = +1$ → $\exp(-\alpha_t) < 1$ → 权重↓
- 若分类错误:$y_i h_t(\mathbf{x}_i) = -1$ → $\exp(+\alpha_t) > 1$ → 权重↑
- 归一化$Z_t$确保$\sum_i D_{t+1}(i) = 1$
模型权重$\alpha_t = \frac{1}{2} \ln \frac{1-\epsilon_t}{\epsilon_t}$来源:
- 最小化指数损失上界:$\sum_i D_t(i) \exp(-\alpha_t y_i h_t(\mathbf{x}_i))$
- 对$\alpha_t$求导令0 → 解得上述$\alpha_t$ ✓
Cpt8: Regression Analysis — Cheatsheet
线性回归核心假设(⭐⭐⭐ 高频):
- 线性关系:$y = \mathbf{w}^\top \mathbf{x} + b + \epsilon$,$\epsilon$为噪声
- 误差独立同分布:$\epsilon \sim \mathcal{N}(0, \sigma^2)$,均值为0、方差恒定(同方差性)
- 特征无多重共线性:$X^\top X$可逆,否则正规方程无唯一解
- ⚠️ 若假设违反:异方差→加权最小二乘;自相关→时间序列模型;共线性→正则化/删除特征
💡 关键:MSE梯度=$( \hat{y}-y )\mathbf{x}$,MAE梯度=$\text{sign}(\hat{y}-y)\mathbf{x}$(次梯度)
正则化对比:Ridge (L2) vs Lasso (L1) vs Elastic Net:
| 方法 | 惩罚项 | 解的特性 | 适用场景 |
| Ridge (L2) | $\lambda|\mathbf{w}|_2^2$ | 权重收缩但不为零;处理共线性 | 特征多且相关;防止过拟合 |
| Lasso (L1) | $\lambda|\mathbf{w}|_1$ | 产生稀疏解(部分$w_j=0$);特征选择 | 高维稀疏数据;需可解释性 |
| Elastic Net | $\lambda_1|\mathbf{w}|_1 + \lambda_2|\mathbf{w}|_2^2$ | 结合L1稀疏+L2稳定;处理相关特征组 | 特征高度相关且需选择 |
⚠️ 易错:正则化不惩罚偏置项$b$(截距),因平移数据不应影响正则强度
正则化强度$\lambda$影响:
- $\lambda=0$:无正则,等价普通最小二乘,易过拟合
- $\lambda \uparrow$:权重收缩↑,模型复杂度↓,bias↑, variance↓
- $\lambda \to \infty$:$\mathbf{w} \to \mathbf{0}$,模型退化为常数预测$\hat{y}=\bar{y}$
- ✅ 选$\lambda$:交叉验证,画学习曲线找验证误差最小点
多项式回归直觉:
- 本质:线性回归 + 非线性特征映射$\phi(\mathbf{x}) = [1, x, x^2, ..., x^d]^\top$
- 仍为线性模型:对参数$\mathbf{w}$线性,可用正规方程求解
- 高阶风险:$d \uparrow$ → 模型复杂度↑ → 易过拟合(Runge现象:边界震荡)
- ✅ 应对:正则化 + 特征缩放(高阶项量纲差异极大!)
回归评估指标对比:
| 指标 | 公式 | 单位 | 优点 | 缺点 |
| MSE | $\frac{1}{n}\sum(y-\hat{y})^2$ | $y^2$ | 可导,优化友好 | 量纲平方,异常值敏感 |
| $R^2$ | $1 - \frac{\sum(y-\hat{y})^2}{\sum(y-\bar{y})^2}$ | 无单位[0,1] | 相对基准提升,跨任务可比 | 可能为负(模型比均值还差) |
💡 $R^2$解释:模型解释的方差比例;$R^2=0.8$ → 模型捕捉了80%目标变量波动
概率视角:MLE vs MAP(⭐⭐⭐ 证明题高频):
- MLE(最大似然):$\arg\max_{\mathbf{w}} P(\mathbf{y}|X,\mathbf{w})$,等价最小化MSE(当$\epsilon \sim \mathcal{N}$)
- MAP(最大后验):$\arg\max_{\mathbf{w}} P(\mathbf{w}|\mathbf{y},X) \propto P(\mathbf{y}|X,\mathbf{w})P(\mathbf{w})$
- 若$P(\mathbf{w}) \sim \mathcal{N}(0, \tau^2 I)$ → MAP等价Ridge回归(L2正则)
- 若$P(\mathbf{w}) \sim \text{Laplace}(0, b)$ → MAP等价Lasso回归(L1正则)
- ✅ 正则化 = 对权重施加先验信念,防止过拟合的贝叶斯解释
线性回归 + MSE 训练流程(正规方程法)
- 构造设计矩阵$X \in \mathbb{R}^{n \times (d+1)}$,首列全1(对应偏置项)
- 检查$X^\top X$是否可逆:
- 若可逆:直接计算$\mathbf{w} = (X^\top X)^{-1} X^\top \mathbf{y}$
- 若奇异(共线性):用伪逆$\mathbf{w} = X^\dagger \mathbf{y}$或加正则
- 预测新样本:$\hat{y} = \mathbf{w}^\top \mathbf{x}_{\text{new}}$($\mathbf{x}$需加首项1)
- ✅ 应用题技巧:手动计算小矩阵时,先算$X^\top X$和$X^\top \mathbf{y}$,再解线性方程组
线性回归 + SGD 训练流程
- 初始化$\mathbf{w} \leftarrow \mathbf{0}$(或小随机值),设学习率$\eta$、迭代轮数$T$
- 对每轮$t=1$到$T$:
- 随机打乱数据(或随机采样mini-batch)
- 对每个样本$(\mathbf{x}^{(i)}, y^{(i)})$:
- 计算预测$\hat{y}^{(i)} = \mathbf{w}^\top \mathbf{x}^{(i)}$
- 计算梯度$\nabla J^{(i)} = (\hat{y}^{(i)} - y^{(i)}) \mathbf{x}^{(i)}$(MSE损失)
- 更新$\mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \nabla J^{(i)}$
- (可选)$\eta$衰减:$\eta_t = \eta_0 / (1 + \gamma t)$
- 输出最终$\mathbf{w}$
- ✅ 应用题技巧:手动模拟时,注意梯度符号$(\hat{y}-y)$,更新方向"推"预测靠近真实值
Ridge/Lasso 训练流程对比
Ridge (L2):
- 正规方程:$\mathbf{w} = (X^\top X + \lambda I)^{-1} X^\top \mathbf{y}$($I$首元素0,不惩罚偏置)
- 梯度下降:$\nabla J = (\hat{\mathbf{y}} - \mathbf{y})^\top X + \lambda \mathbf{w}$,更新$\mathbf{w} \leftarrow \mathbf{w} - \eta \nabla J$
Lasso (L1):
- 无闭式解,需用次梯度法/坐标下降/近端梯度
- 次梯度:$\partial |w_j| = \begin{cases} +1 & w_j>0 \ -1 & w_j<0 \ [-1,1] & w_j=0 \end{cases}$
- 更新:$w_j \leftarrow \text{SoftThreshold}(w_j - \eta \cdot \frac{\partial J}{\partial w_j}, \eta\lambda)$
- $\text{SoftThreshold}(z, \gamma) = \text{sign}(z) \cdot \max(|z|-\gamma, 0)$
💡 应用题技巧:题目问"为何Lasso能特征选择" → 答"软阈值操作将小权重精确置零"
多项式回归实操流程
- 特征映射:对原始特征$x$,构造$\phi(x) = [1, x, x^2, ..., x^d]^\top$
- ✅ 必须特征缩放:高阶项量纲差异极大(如$x \in [0,1]$,$x^{10} \in [0,10^{-10}]$)
- 用$\phi(\mathbf{x})$作为新输入,训练线性回归(可加正则防过拟合)
- 预测时:新样本先映射$\phi(\mathbf{x}_{\text{new}})$,再用训练好的$\mathbf{w}$预测
- ✅ 选阶数$d$:交叉验证,画训练/验证误差曲线,选验证误差最小且未上升的$d$
模板1:MSE损失梯度推导(⭐⭐⭐ 必背)
损失函数(单样本):$J(\mathbf{w}) = \frac{1}{2}(y - \mathbf{w}^\top \mathbf{x})^2$
对权重向量$\mathbf{w}$求梯度:
$
\nabla_{\mathbf{w}} J = \frac{\partial}{\partial \mathbf{w}} \left[ \frac{1}{2}(y - \mathbf{w}^\top \mathbf{x})^2 \right]
= (y - \mathbf{w}^\top \mathbf{x}) \cdot \frac{\partial}{\partial \mathbf{w}}(y - \mathbf{w}^\top \mathbf{x})
$
$
= (y - \hat{y}) \cdot (-\mathbf{x}) = (\hat{y} - y) \mathbf{x} \quad \checkmark
$
多样本MSE:$J = \frac{1}{2n} \sum_i (y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)})^2$
$
\nabla J = \frac{1}{n} \sum_i (\hat{y}^{(i)} - y^{(i)}) \mathbf{x}^{(i)} = \frac{1}{n} X^\top (\hat{\mathbf{y}} - \mathbf{y})
$
💡 关键:梯度形式$(\hat{y}-y)\mathbf{x}$,与逻辑回归$(\sigma-y)\mathbf{x}$结构一致,仅预测函数不同
模板2:正规方程推导(最小二乘闭式解)
目标:$\min_{\mathbf{w}} J(\mathbf{w}) = \frac{1}{2} |\mathbf{y} - X\mathbf{w}|^2$
展开:
$
J(\mathbf{w}) = \frac{1}{2} (\mathbf{y} - X\mathbf{w})^\top (\mathbf{y} - X\mathbf{w}) = \frac{1}{2} (\mathbf{y}^\top \mathbf{y} - 2\mathbf{y}^\top X\mathbf{w} + \mathbf{w}^\top X^\top X \mathbf{w})
$
对$\mathbf{w}$求导(矩阵微积分):
$
\frac{\partial J}{\partial \mathbf{w}} = -X^\top \mathbf{y} + X^\top X \mathbf{w}
$
令梯度=0:
$
X^\top X \mathbf{w} = X^\top \mathbf{y} \quad \Rightarrow \quad \mathbf{w} = (X^\top X)^{-1} X^\top \mathbf{y} \quad \checkmark
$
💡 证明题关键:写出展开式 + 矩阵求导规则$\frac{\partial}{\partial \mathbf{w}}(\mathbf{w}^\top A \mathbf{w}) = 2A\mathbf{w}$($A$对称)
模板3:Ridge回归正规方程推导
目标:$\min_{\mathbf{w}} J(\mathbf{w}) = \frac{1}{2} |\mathbf{y} - X\mathbf{w}|^2 + \frac{\lambda}{2} |\mathbf{w}|^2$(不惩罚偏置时,$\mathbf{w}$不含$b$)
求导:
$
\frac{\partial J}{\partial \mathbf{w}} = -X^\top \mathbf{y} + X^\top X \mathbf{w} + \lambda \mathbf{w} = 0
$
$
\Rightarrow (X^\top X + \lambda I) \mathbf{w} = X^\top \mathbf{y} \quad \Rightarrow \quad \mathbf{w} = (X^\top X + \lambda I)^{-1} X^\top \mathbf{y} \quad \checkmark
$
💡 关键:$\lambda I$使矩阵正定,即使$X^\top X$奇异也可逆,解决共线性问题
Cpt9: Clustering — Cheatsheet
聚类本质:
- 无监督学习:无标签$y$,目标发现数据内在结构/相似性分组
- 探索性工具:同一数据可因特征/算法/参数不同产生不同划分,无唯一"正确答案"
- 评估困难:无ground truth → 用内部指标(SSE/轮廓系数)或外部指标(若已知标签)
四种簇类型对比(⭐⭐⭐ 高频):
| 类型 | 定义 | 代表算法 | 优点 | 缺点 |
| Well-Separated | 任意点到本簇点距离 < 到它簇点距离 | 基于距离阈值 | 几何直观,边界清晰 | 仅适用明显分离的簇 |
| Center-Based | 点到簇中心(质心/medoid)距离最近 | K-Means, K-Medoids | 计算高效,适合球形簇 | 假设簇为凸/球形,难处理非凸 |
| Contiguity-Based | 点通过"近邻链"连通即同簇 | Single-Linkage, DBSCAN(部分) | 可捕捉任意形状(如U形) | 易被噪声"搭桥"导致错误合并 |
| Density-Based | 高密度区域为簇,低密度为噪声/边界 | DBSCAN, OPTICS | 抗噪声强,可发现任意形状+噪声 | 参数敏感(ε, MinPts),难处理密度差异大 |
K-Means核心特性(⭐⭐⭐ 必背):
- 中心簇定义 + Partitional算法 + 优化SSE目标
- 收敛性:每轮迭代$J = \sum_n |\mathbf{x}n - \boldsymbol{\mu}{z_n}|^2$单调不增,且有下界0 → 必收敛(但可能局部最优)
- 对初始化敏感:不同种子→不同局部最优;需多轮重启/智能初始化
- 假设簇为球形+等方差+等密度 → 难处理:大小差异大/非凸/密度不均的簇
初始化优化策略:
- Multiple Runs:随机种子重复$N$次,选SSE最小结果 → 简单但计算量大
- Farthest-First Traversal:先选1个随机点,后续每次选"距已选中心最远"的点 → 强制中心分散
- Hierarchical Pre-clustering:小样本上跑层次聚类得$k$个初始中心 → 平衡质量+效率
- ✅ K-Means++:概率采样,距离已选中心越远的点被选概率越高 → 理论保证近似最优
空簇处理:
- 原因:初始中心落在稀疏区,所有点被其他簇"吸走"
- 修复:① 找SSE最大簇,将其最远点提拔为新中心 ② 随机重选中心 ③ 直接删除该簇($k$减1)
链接准则(Linkage Criteria)对比(⭐⭐⭐ 高频):
| 准则 | 簇间距离定义 | 形状偏好 | 抗噪声 | 计算复杂度 |
| MIN (Single) | $\min_{i\in C_p, j\in C_q} d(i,j)$ | 任意形状(链式) | ⚠️ 极弱(噪声易搭桥) | $O(n^2)$ |
| MAX (Complete) | $\max_{i\in C_p, j\in C_q} d(i,j)$ | 紧凑球形 | ✅ 强(边缘点拉高距离) | $O(n^2)$ |
| Group Average | $\frac{1}{|C_p||C_q|}\sum_{i,j} d(i,j)$ | 较紧凑球形 | ✅ 中等(平均稀释噪声) | $O(n^2)$ |
| Ward's Method | $\Delta SSE = SSE_{merge} - (SSE_p + SSE_q)$ | 球形+等方差 | ✅ 强(类似K-Means) | $O(n^2)$ |
💡 MIN易产生"链式效应"(chaining),MAX易过度分割,Ward与K-Means目标一致
层次聚类树状图(Dendrogram)解读:
- 叶子=原始样本,内部节点=簇合并事件,纵轴=合并时距离/相似度
- 切割高度$\leftrightarrow$簇数$k$:高切割→$k$小(粗粒度),低切割→$k$大(细粒度)
- ✅ 优势:解耦"聚类过程"与"$k$选择",支持多尺度探索
二分K-Means(Bisecting K-Means):
- 分治策略:初始全数据为1簇 → 选SSE最大簇用$k=2$K-Means二分 → 重复至$k$簇
- 优点:① 减少初始化敏感(每次仅二分)② 自然生成层次树 ③ 可中途停止得任意$k$
- ✅ 本质:层次聚类框架 + K-Means作为二分器
预处理/后处理关键点:
- 预处理:① 特征缩放(距离算法必做!)② 去除离群点(3σ/可视化)
- 后处理:① 剔除小簇(噪声)② 分裂高SSE簇(内部不紧凑)③ 合并近中心簇(过度分割)
K-Means 标准流程(⭐⭐⭐ 必会手动模拟)
- 输入:数据$X$,簇数$k$,最大迭代$T$
- 初始化:选$k$个初始中心$\boldsymbol{\mu}_1^{(0)}, ..., \boldsymbol{\mu}_k^{(0)}$(随机/智能)
- 迭代$t=1$到$T$:
- 分配步:对每个点$\mathbf{x}_n$,找最近中心$z_n = \arg\min_j |\mathbf{x}_n - \boldsymbol{\mu}_j^{(t-1)}|^2$
- 更新步:对每个簇$j$,重算中心$\boldsymbol{\mu}j^{(t)} = \frac{1}{|C_j|} \sum{n: z_n=j} \mathbf{x}_n$
- 收敛判断:若$\sum_j |\boldsymbol{\mu}_j^{(t)} - \boldsymbol{\mu}_j^{(t-1)}|^2 < \epsilon$,提前终止
- 输出:簇分配${z_n}$,中心${\boldsymbol{\mu}_j}$,SSE=$\sum_n |\mathbf{x}n - \boldsymbol{\mu}{z_n}|^2$
💡 应用题技巧:手动计算时,先画点+初始中心→算距离分配→重算中心→迭代1-2轮;注意欧氏距离公式
Agglomerative Hierarchical Clustering 流程
- 初始化:每个点为独立簇,计算$N \times N$距离矩阵$D$
- While 簇数$> 1$:
- 按链接准则(MIN/MAX/Avg/Ward)找距离最近的两个簇$C_p, C_q$
- 合并$C_p \cup C_q \to C_{new}$
- 更新距离矩阵:计算$C_{new}$与其他簇的距离(依准则不同公式不同)
- 输出:树状图(记录每次合并的簇对+距离)
- 切割:在高度$h$处水平切树,得$k$个簇
💡 应用题技巧:手动模拟时用表格记录每步簇合并;MIN只需记最近点对,Ward需算SSE增量
Bisecting K-Means 流程
- 初始化:所有数据为1个簇,加入待分裂队列
- While 簇数$< k$:
- 从队列选SSE最大的簇$C$
- 在$C$上运行$k=2$的K-Means(可多轮重启选最优)
- 将$C$分裂为$C_1, C_2$,加入队列
- 输出:$k$个簇
💡 应用题技巧:题目问"如何减少K-Means初始化敏感" → 答"用Bisecting K-Means分治策略"
模板1:K-Means 目标函数与梯度推导(⭐⭐⭐ 高频)
目标函数(distortion):
$$
J = \frac{1}{N} \sum_{n=1}^N |\mathbf{x}n - \boldsymbol{\mu}{z_n}|^2 = \frac{1}{N} \sum_{j=1}^k \sum_{n: z_n=j} |\mathbf{x}_n - \boldsymbol{\mu}_j|^2
$$
固定分配$z_n$,对$\boldsymbol{\mu}_j$求导:
$$
\frac{\partial J}{\partial \boldsymbol{\mu}j} = \frac{2}{N} \sum{n: z_n=j} (\boldsymbol{\mu}_j - \mathbf{x}n)
$$
令梯度=0:
$$
\sum{n: z_n=j} (\boldsymbol{\mu}_j - \mathbf{x}_n) = 0 \Rightarrow \boldsymbol{\mu}j = \frac{1}{|C_j|} \sum{n: z_n=j} \mathbf{x}_n \quad \checkmark
$$
→ 最优中心=簇内点均值
固定中心$\boldsymbol{\mu}_j$,优化分配$z_n$:
$$
z_n = \arg\min_j |\mathbf{x}_n - \boldsymbol{\mu}_j|^2 \quad \text{(最近中心分配)} \quad \checkmark
$$
💡 证明题关键:分两步优化(坐标下降),交替固定一方求另一方最优
模板2:K-Means 收敛性证明思路
- 定义势函数$J^{(t)} = \sum_n |\mathbf{x}n - \boldsymbol{\mu}{z_n}^{(t)}|^2$
- 分配步:固定$\boldsymbol{\mu}^{(t-1)}$,选$z_n$最小化每项 → $J$不增
- 更新步:固定$z_n$,选$\boldsymbol{\mu}^{(t)}$为均值(模板1) → $J$不增
- $J \geq 0$有下界 → 单调有界序列必收敛 ✓
💡 证明题技巧:写"交替优化+势函数单调有界",无需展开细节
模板3:Ward's Method 的SSE增量推导
合并簇$C_p, C_q \to C_{new}$,SSE增量:
$$
\Delta SSE = SSE_{new} - (SSE_p + SSE_q)
$$
其中$SSE_p = \sum_{i \in C_p} |\mathbf{x}_i - \boldsymbol{\mu}_p|^2$
展开可得(简化版):
$$
\Delta SSE = \frac{|C_p||C_q|}{|C_p|+|C_q|} |\boldsymbol{\mu}_p - \boldsymbol{\mu}_q|^2
$$
→ Ward准则等价于:优先合并"质心近+簇大小适中"的簇对 ✓
💡 证明题关键:写出$\Delta SSE$定义,代入均值公式化简,得距离加权形式
模板5:特征缩放对K-Means的影响证明
设两特征$x_1 \in [0,1]$, $x_2 \in [0,1000]$,未缩放时欧氏距离:
$$
d(\mathbf{x},\mathbf{x}') = \sqrt{(x_1-x_1')^2 + (x_2-x_2')^2} \approx |x_2-x_2'| \quad (\text{因}~1000^2 \gg 1^2)
$$
→ 距离由$x_2$主导,$x_1$信息丢失 ❌
标准化后$x'_j = \frac{x_j - \mu_j}{\sigma_j}$,$\text{Var}(x'_1)=\text{Var}(x'_2)=1$:
$$
d'(\mathbf{x},\mathbf{x}') = \sqrt{(x'_1-x'_1')^2 + (x'_2-x'_2')^2}
$$
→ 两特征平等贡献距离 ✓
💡 证明题关键:写未缩放时距离近似式,说明主导特征问题;标准化后方差相等→公平
💡 证明题赖皮大法(考场保命)
看到"证明K-Means中心更新公式" → 立即写:
- 目标:$\min_{\boldsymbol{\mu}j} \sum{n \in C_j} |\mathbf{x}_n - \boldsymbol{\mu}_j|^2$
- 求导:$\frac{\partial}{\partial \boldsymbol{\mu}_j} = 2\sum (\boldsymbol{\mu}_j - \mathbf{x}_n) = 0$
- 解得:$\boldsymbol{\mu}_j = \frac{1}{|C_j|}\sum \mathbf{x}_n$ ✓
看到"解释K-Means为何收敛" → 立即写:
- 定义势函数$J = \sum |\mathbf{x}n - \boldsymbol{\mu}{z_n}|^2$
- 分配步+更新步均使$J$不增(坐标下降)
- $J \geq 0$有下界 → 单调有界必收敛 ✓
看到"比较MIN vs MAX linkage" → 立即写:
- MIN:$d = \min_{i,j} d(i,j)$ → 链式效应,抗噪差,可捕非凸
- MAX:$d = \max_{i,j} d(i,j)$ → 偏好球形,抗噪好,易过度分割
- 画图辅助:三点共线说明MIN搭桥,紧凑簇说明MAX保守
看到"为何聚类前要特征缩放" → 立即写:
- 未缩放时大尺度特征主导距离:$d \approx |x_{\text{large}} - x'_{\text{large}}|$
- 标准化后各特征方差=1 → 距离公平反映各维度差异 ✓
卡住时:先写目标函数(如$J=\sum |\mathbf{x}-\boldsymbol{\mu}|^2$)+ 优化变量(如对$\boldsymbol{\mu}$求导)+ 关键结论(如"均值最优"),步骤分稳拿
Cpt10: Multi-layer Networks — Cheatsheet
神经网络核心优势:
- 万能近似定理:单隐藏层+足够神经元+非线性激活 → 可近似任意连续函数
- 层次特征学习:浅层学边缘/纹理,深层学语义/对象组合 → 端到端特征提取
- ✅ 关键:非线性激活函数是表达力的来源;全线性网络=单层线性变换(矩阵可合并)
激活函数对比(⭐⭐⭐ 必背):
| 函数 | 公式 | 导数 | 优点 | 缺点 | 适用场景 |
| Sigmoid | $\sigma(z)=\frac{1}{1+e^{-z}}$ | $\sigma(1-\sigma)$ | 输出(0,1),概率解释 | 梯度消失($|z|$大时),非0中心化 | 输出层(二分类) |
| Tanh | $\tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}$ | $1-\tanh^2$ | 0中心化,收敛略快 | 梯度消失仍存在 | 隐藏层(历史用法) |
| ReLU | $\max(0,z)$ | $\mathbb{I}(z>0)$ | 计算快,缓解梯度消失,稀疏激活 | $z<0$时梯度=0("神经元死亡") | ✅ 隐藏层默认首选 |
| Leaky ReLU | $\max(\alpha z, z), \alpha\approx0.01$ | $\mathbb{I}(z>0)+\alpha\mathbb{I}(z<0)$ | 解决死亡神经元 | 多一超参$\alpha$ | ReLU效果不佳时备选 |
💡 关键:输出层激活依任务定——二分类Sigmoid,多分类Softmax,回归Linear/无激活
前向传播直觉:
- 层内:$\mathbf{z}^{[l]} = W^{[l]}\mathbf{a}^{[l-1]} + \mathbf{b}^{[l]}$(线性变换)
- 激活:$\mathbf{a}^{[l]} = g^{[l]}(\mathbf{z}^{[l]})$(非线性)
- 链式传递:输入→隐藏层→...→输出,每层提取更抽象特征
- ✅ 计算图视角:前向=从叶到根求值;反向=从根到叶求梯度
反向传播核心思想(⭐⭐⭐ 证明题高频):
- 链式法则递归应用:$\frac{\partial J}{\partial W^{[l]}} = \frac{\partial J}{\partial \mathbf{z}^{[l]}} \cdot \frac{\partial \mathbf{z}^{[l]}}{\partial W^{[l]}}$
- 误差信号$\delta^{[l]} = \frac{\partial J}{\partial \mathbf{z}^{[l]}}$从输出层反向传播
- 关键递推:$\delta^{[l]} = ((W^{[l+1]})^\top \delta^{[l+1]}) \odot g'^{[l]}(\mathbf{z}^{[l]})$
- ✅ 记忆口诀:"后层误差×权重转置×当前激活导数"
梯度消失/爆炸问题:
- 消失:深层网络中,$\prod \sigma'(z)$或$\prod |W|$过小 → 浅层梯度≈0 → 参数不更新
- 原因:Sigmoid/Tanh导数≤0.25;权重初始化过小
- 解决:ReLU + Xavier/He初始化 + BatchNorm + 残差连接
- 爆炸:$\prod |W|$过大 → 梯度数值溢出
- 解决:梯度裁剪($|\mathbf{g}| > \theta$时缩放)+ 权重正则
权重初始化策略(⭐⭐⭐ 易错):
- 全零初始化:对称性→所有神经元学相同特征 → ❌ 禁用
- 随机小值:$\mathcal{N}(0, 0.01)$,简单但深层仍可能消失/爆炸
- Xavier (Glorot):$W \sim \mathcal{N}(0, \sqrt{2/(n_{in}+n_{out})})$,适合Tanh/Sigmoid
- He初始化:$W \sim \mathcal{N}(0, \sqrt{2/n_{in}})$,✅ ReLU专属,补偿$z<0$时梯度=0
- ✅ 原则:保持每层激活/梯度方差≈1,信号稳定传播
正则化在NN中的应用:
- L2正则:损失加$\frac{\lambda}{2}|W|^2$ → 梯度更新$W \leftarrow (1-\eta\lambda)W - \eta\nabla J$(权重衰减)
- Dropout:训练时以概率$p$随机屏蔽神经元 → 测试时权重×$p$(或训练时激活÷$p$)
- 直觉:防止神经元共适应,等价集成学习
- ⚠️ 仅训练时用,测试时关闭
- Early Stopping:监控验证误差,不再下降时提前终止 → 防止过拟合
- Batch Normalization:每层输入标准化$\hat{x}=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}$,再仿射变换$\gamma\hat{x}+\beta$
- 优点:加速收敛,允许更大$\eta$,轻微正则效果
- ⚠️ 训练/测试时$\mu,\sigma$计算方式不同(测试用移动平均)
损失函数选择:
- 二分类:Cross-Entropy $J = -[y\log\hat{y} + (1-y)\log(1-\hat{y})]$,输出层Sigmoid
- 多分类:Categorical CE $J = -\sum_c y_c \log \hat{y}_c$,输出层Softmax
- 回归:MSE $J = \frac{1}{2}|\mathbf{y}-\hat{\mathbf{y}}|^2$,输出层Linear/无激活
- ✅ 关键:输出层激活+损失函数需匹配,确保梯度简洁(如Softmax+CE梯度=$( \hat{y}-y )$)
前向传播标准流程($L$层网络)
- 输入:$\mathbf{a}^{[0]} = \mathbf{x}$(单样本或batch $X$)
- 对层$l=1$到$L$:
- 线性:$\mathbf{z}^{[l]} = W^{[l]}\mathbf{a}^{[l-1]} + \mathbf{b}^{[l]}$
- 激活:$\mathbf{a}^{[l]} = g^{[l]}(\mathbf{z}^{[l]})$
- ✅ 缓存:存$\mathbf{z}^{[l]}, \mathbf{a}^{[l-1]}$供反向用
- 输出:$\hat{\mathbf{y}} = \mathbf{a}^{[L]}$
- 计算损失$J(\hat{\mathbf{y}}, \mathbf{y})$
💡 应用题技巧:手动计算时,按层逐步写$\mathbf{z}, \mathbf{a}$;注意矩阵维度:$W^{[l]} \in \mathbb{R}^{n_l \times n_{l-1}}$
反向传播标准流程(⭐⭐⭐ 必会手动推导)
- 计算输出层误差:
- 若输出层Sigmoid+CE:$\delta^{[L]} = \mathbf{a}^{[L]} - \mathbf{y}$(简洁!)
- 若MSE:$\delta^{[L]} = (\mathbf{a}^{[L]} - \mathbf{y}) \odot g'^{[L]}(\mathbf{z}^{[L]})$
- 对层$l=L-1$ downto $1$:
- 误差传播:$\delta^{[l]} = ((W^{[l+1]})^\top \delta^{[l+1]}) \odot g'^{[l]}(\mathbf{z}^{[l]})$
- 梯度计算:
- $\frac{\partial J}{\partial W^{[l]}} = \delta^{[l]} (\mathbf{a}^{[l-1]})^\top$
- $\frac{\partial J}{\partial \mathbf{b}^{[l]}} = \delta^{[l]}$(若batch则求和/平均)
- 参数更新(梯度下降):
- $W^{[l]} \leftarrow W^{[l]} - \eta \cdot \frac{\partial J}{\partial W^{[l]}}$
- $\mathbf{b}^{[l]} \leftarrow \mathbf{b}^{[l]} - \eta \cdot \frac{\partial J}{\partial \mathbf{b}^{[l]}}$
💡 应用题技巧:手动推导时,先写标量链式法则,再推广到向量;注意$\odot$是逐元素乘,$\cdot$是矩阵乘
Dropout 训练/测试流程
训练时:
- 对每层$l$(应用Dropout的层):
- 生成掩码$\mathbf{m}^{[l]} \sim \text{Bernoulli}(p)$($p$=保留概率)
- 屏蔽:$\tilde{\mathbf{a}}^{[l]} = \mathbf{a}^{[l]} \odot \mathbf{m}^{[l]}$
- 缩放:$\tilde{\mathbf{a}}^{[l]} \leftarrow \tilde{\mathbf{a}}^{[l]} / p$(Inverse Dropout,保持期望不变)
- 用$\tilde{\mathbf{a}}^{[l]}$作为下一层输入
测试时:
- 不使用Dropout,直接用原始$\mathbf{a}^{[l]}$
- ✅ 若训练时未做Inverse Dropout,则测试时激活×$p$
💡 应用题技巧:题目问"Dropout测试时为何不用" → 答"训练时随机屏蔽模拟集成,测试时用全网络得稳定预测"
模板1:反向传播链式法则推导(⭐⭐⭐ 必背,pp2-P5原题)
设3层网络:输入$\mathbf{x}$,隐藏层$\mathbf{h}=\sigma(V\mathbf{x})$,输出$\mathbf{z}=W\mathbf{h}$,损失$J=\frac{1}{2}|\mathbf{y}-\mathbf{z}|^2$
Step 1: 输出层梯度
$
\frac{\partial J}{\partial \mathbf{z}} = \mathbf{z} - \mathbf{y} \quad \text{(MSE导数)}
$
$
\frac{\partial J}{\partial W} = \frac{\partial J}{\partial \mathbf{z}} \cdot \frac{\partial \mathbf{z}}{\partial W} = (\mathbf{z}-\mathbf{y}) \mathbf{h}^\top \quad \checkmark
$
Step 2: 隐藏层误差传播
$
\frac{\partial J}{\partial \mathbf{h}} = \frac{\partial J}{\partial \mathbf{z}} \cdot \frac{\partial \mathbf{z}}{\partial \mathbf{h}} = W^\top (\mathbf{z}-\mathbf{y})
$
$
\frac{\partial J}{\partial V} = \frac{\partial J}{\partial \mathbf{h}} \odot \sigma'(\mathbf{g}) \cdot \frac{\partial \mathbf{g}}{\partial V}, \quad \mathbf{g}=V\mathbf{x}
$
$
= [W^\top (\mathbf{z}-\mathbf{y}) \odot \sigma'(\mathbf{g})] \mathbf{x}^\top \quad \checkmark
$
💡 关键:$\frac{\partial \mathbf{z}}{\partial W} = \mathbf{h}^\top$(外积),$\odot$用于激活导数逐元素乘
模板5:Batch Normalization 前向/反向公式
前向(训练时):
$
\mu = \frac{1}{m}\sum_i x_i, \quad \sigma^2 = \frac{1}{m}\sum_i (x_i - \mu)^2
$
$
\hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}, \quad y_i = \gamma \hat{x}_i + \beta
$
反向(关键梯度):
$
\frac{\partial J}{\partial \gamma} = \sum_i \frac{\partial J}{\partial y_i} \hat{x}_i, \quad \frac{\partial J}{\partial \beta} = \sum_i \frac{\partial J}{\partial y_i}
$
$
\frac{\partial J}{\partial \hat{x}_i} = \frac{\partial J}{\partial y_i} \gamma
$
$
\frac{\partial J}{\partial \sigma^2} = \sum_i \frac{\partial J}{\partial \hat{x}_i} \cdot (x_i - \mu) \cdot \left(-\frac{1}{2}(\sigma^2+\epsilon)^{-3/2}\right)
$
$
\frac{\partial J}{\partial \mu} = \sum_i \frac{\partial J}{\partial \hat{x}_i} \cdot \left(-\frac{1}{\sqrt{\sigma^2+\epsilon}}\right) + \frac{\partial J}{\partial \sigma^2} \cdot \frac{-2}{m}\sum_i (x_i - \mu)
$
$
\frac{\partial J}{\partial x_i} = \frac{\partial J}{\partial \hat{x}_i} \cdot \frac{1}{\sqrt{\sigma^2+\epsilon}} + \frac{\partial J}{\partial \sigma^2} \cdot \frac{2(x_i-\mu)}{m} + \frac{\partial J}{\partial \mu} \cdot \frac{1}{m}
$
💡 考场简化:记$\frac{\partial J}{\partial \gamma}, \frac{\partial J}{\partial \beta}$简洁形式,其余写"链式法则递归计算"
💡 证明题赖皮大法(考场保命)
看到"推导反向传播梯度" → 立即写:
- 输出层:$\delta^{[L]} = \frac{\partial J}{\partial \mathbf{z}^{[L]}}$(依损失+激活写简洁形式)
- 递推:$\delta^{[l]} = ((W^{[l+1]})^\top \delta^{[l+1]}) \odot g'^{[l]}(\mathbf{z}^{[l]})$
- 梯度:$\frac{\partial J}{\partial W^{[l]}} = \delta^{[l]} (\mathbf{a}^{[l-1]})^\top$, $\frac{\partial J}{\partial \mathbf{b}^{[l]}} = \delta^{[l]}$
看到"证明Softmax+CE梯度简洁" → 立即写:
- $\frac{\partial J}{\partial z_i} = \sum_k \frac{\partial J}{\partial \hat{y}_k} \frac{\partial \hat{y}_k}{\partial z_i}$
- 代入$\frac{\partial J}{\partial \hat{y}_k} = -y_k/\hat{y}_k$, $\frac{\partial \hat{y}_k}{\partial z_i} = \hat{y}k(\delta{ki}-\hat{y}_i)$
- 化简得$\hat{y}_i - y_i$ ✓
看到"解释梯度消失原因" → 立即写:
- 深层中$\frac{\partial J}{\partial W^{[1]}} \propto \prod_{l} \frac{\partial \mathbf{a}^{[l]}}{\partial \mathbf{z}^{[l]}} \frac{\partial \mathbf{z}^{[l]}}{\partial \mathbf{a}^{[l-1]}}$
- Sigmoid导数≤0.25,$|W|<1$ → 乘积指数衰减 → 浅层梯度≈0
- 解决:ReLU(导数0/1) + He初始化 + BatchNorm
看到"为何用He初始化" → 立即写:
- ReLU: $a=\max(0,z)$,$\mathbb{E}[a^2] = \frac{1}{2}\mathbb{E}[z^2]$(因$z<0$时$a=0$)
- 令$\text{Var}(z) = 2/n_{in}$ → $\text{Var}(a) \approx \text{Var}(x)$,信号稳定 ✓
卡住时:先写目标(如"求$\partial J/\partial W$") + 链式法则框架 + 关键中间量定义(如$\delta = \partial J/\partial \mathbf{z}$),最后补结论,步骤分稳拿