机器学习基础(三):监督学习

监督学习(Supervised Learning)是机器学习的核心范式之一,其目标是从已标注的数据中学习一个映射函数,用于预测未知数据的输出。其核心流程包括:

  1. 选择归纳偏置(Inductive Bias):模型类、损失函数、正则项;
  2. 训练:通过ERM或正则化ERM求解参数;
  3. 验证:使用验证集选择超参数;
  4. 测试:在独立测试集上评估泛化性能。

本文将系统介绍监督学习的基本概念、方法框架和实际应用,涵盖回归(Regression)与分类(Classification)问题、经验风险最小化(Empirical Risk Minimization, ERM)、模型选择(Model Selection)、偏差-方差权衡(Bias-Variance Tradeoff)、正则化技术(Regularization)以及概率模型中的最大似然估计(Maximum Likelihood Estimation, MLE)等内容。

监督学习

什么是监督学习?

监督学习旨在从训练数据 $D = {(x_n, t_n)}_{n=1}^N$ 中学习一个函数,使得对于新的输入 $x$,能够预测其输出 $t$。根据输出变量的类型,可分为:

  • 回归问题(Regression):$t$ 是连续值(如温度预测);
  • 分类问题(Classification):$t$ 是离散标签(如天气预测)。
Tip

示例一:回归 vs 分类

  • 回归:根据位置 $x$ 预测温度 $t$,$t \in \mathbb{R}$。
  • 分类:根据今天天气 $x$(晴/雨)预测明天天气 $t$(晴/雨),$t \in {0, 1}$。

经验风险最小化(ERM)

由于真实分布 $p(x, t)$ 未知,我们使用训练集上的经验损失作为替代: $$ L_D(\theta) = \frac{1}{N} \sum_{n=1}^N \ell(t_n, f(x_n|\theta)) $$ ERM 的目标是: $$ \theta^{ERM} = \arg\min_{\theta} L_D(\theta) $$

Tip

考题:在线性回归中,若使用平方损失 $\ell(t, \hat{t}) = (t - \hat{t})^2$,且模型为 $f(x|\theta) = \theta^T u(x)$,求 ERM 解。

解题思路

  1. 定义数据矩阵 $X$ 和目标向量 $t$;
  2. 最小化 $|X\theta - t|^2$;
  3. 解为 $\theta^{ERM} = (X^T X)^{-1} X^T t$(若 $X^T X$ 可逆)。

答案:闭式解为最小二乘解(Least Squares Solution)。

模型选择与验证

模型复杂度(如多项式次数 $M$)影响泛化能力:

  • 欠拟合(Underfitting):模型太简单,训练误差和测试误差都大;
  • 过拟合(Overfitting):模型太复杂,训练误差小,测试误差大。

使用 验证集(Validation Set)K折交叉验证(K-fold Cross Validation) 来估计泛化误差,选择最优模型复杂度。

Tip

示例二:多项式回归中的模型选择

  • $M=1$:欠拟合,无法捕捉周期性;
  • $M=9$:过拟合,对噪声敏感;
  • $M=3$:较好地平衡偏差与方差。

偏差与估计误差

泛化误差可分解为: $$ L_p(\theta_D) = \underbrace{L_p(f^)}_{\text{最小误差}} + \underbrace{[L_p(f^\mathcal{H}) - L_p(f^*)]}{\text{偏差(Bias)}} + \underbrace{[L_p(\theta_D) - L_p(f^*\mathcal{H})]}{\text{估计误差(Estimation Error)}} $$

  • 偏差:模型类 $\mathcal{H}$ 的表达能力不足;
  • 估计误差:训练数据有限导致的参数估计不准确。

正则化

为防止过拟合,在损失函数中加入正则项(Regularization Term): $$ \min_\theta L_D(\theta) + \frac{\lambda}{N} R(\theta) $$ 常见正则项:

  • $L_2$ 正则($L_2$ Regularization):$R(\theta) = |\theta|_2^2$(岭回归/Ridge Regression);
  • $L_1$ 正则($L_1$ Regularization):$R(\theta) = |\theta|_1$(LASSO)。
Tip

考题:岭回归的解是什么?

解题思路

  1. 目标函数:$|X\theta - t|^2 + \lambda |\theta|_2^2$;
  2. 求导并令其为零;
  3. 解得 $\theta = (X^T X + \lambda I)^{-1} X^T t$。

答案:岭回归解为上述闭式解。

概率模型与最大似然估计

若输出具有随机性,可建模为条件分布 $p(t|x, \theta)$。使用 负对数似然(Negative Log-Likelihood) 作为损失函数: $$ L_D(\theta) = -\frac{1}{N} \sum_{n=1}^N \log p(t_n | x_n, \theta) $$ 最大化似然等价于最小化该损失。

Tip

示例三:高斯噪声下的回归

假设 $p(t|x, \theta) = \mathcal{N}(t | f(x|\theta), \beta^{-1})$,则: $$ -\log p(t|x, \theta) \propto \beta (t - f(x|\theta))^2 $$ 此时最大似然估计等价于最小二乘(Least Squares)。

举例与应用

Tip

考题一:分类问题的ERM

给定训练集:

x t 数量
0 0 507
0 1 39
1 0 76
1 1 378

使用0-1损失(0-1 Loss),求ERM分类器 $f(x|\theta) = \theta_x$(即直接参数化每个输入对应的输出)。

解题思路

  1. 计算每个 $x$ 对应的经验风险;
  2. 对于 $x=0$:选 $t=0$ 的损失为 $39/1000$,选 $t=1$ 的损失为 $507/1000$ → 应选 $t=0$;
  3. 对于 $x=1$:选 $t=0$ 的损失为 $378/1000$,选 $t=1$ 的损失为 $76/1000$ → 应选 $t=1$;
  4. 因此 $\theta^{ERM} = [0, 1]^T$。

答案:$f(0)=0$, $f(1)=1$。

Tip

考题二:偏差-方差分解(Bias-Variance Decomposition)

假设真实函数为 $f^*(x) = \sin(2\pi x)$,使用一次多项式 $f(x|\theta) = \theta_0 + \theta_1 x$ 进行拟合,试分析偏差和估计误差。

解题思路

  1. 即使有无穷数据,最优线性近似 $f^*_{\mathcal{H}}(x)$ 也无法完美拟合正弦波 → 偏差大
  2. 有限数据下,$\theta^{ERM}$ 与 $\theta^*$ 有差距 → 估计误差
  3. 若增加数据,估计误差减小,但偏差不变。

结论:模型表达能力不足导致欠拟合。

优化

优化(Optimization)是机器学习(Machine Learning)的核心环节,直接决定了模型能否从数据中有效地学习。无论是简单的线性回归还是复杂的深度神经网络,训练过程本质上都是一个优化问题——最小化损失函数(Loss Function)。本节将深入探讨机器学习中的优化方法,涵盖最优性条件、梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)以及梯度计算技术(如自动微分/Automatic Differentiation).

优化是机器学习模型训练的基础。梯度下降及其变体(如SGD)是实际应用中最常用的方法。理解最优性条件、学习率选择、梯度计算方式(尤其是自动微分)对于设计和调试机器学习模型至关重要。SGD 不仅降低了计算成本,还可能通过其随机性带来更好的泛化性能。未来,自适应优化算法(如Adam、RMSProp)和更先进的学习率调度策略将继续推动机器学习优化的发展。

优化在机器学习中的角色

在监督学习中,训练过程可形式化为以下优化问题:

$$ \min_{\theta} \frac{1}{N} \sum_{n=1}^{N} f(x_n, t_n; \theta) + R(\theta) $$

其中:

  • $f(x_n, t_n; \theta)$ 是损失函数,
  • $R(\theta)$ 是正则化项(Regularization),
  • $\theta$ 是模型参数。

由于精确求解(Exact Optimization)通常不可行,我们依赖局部优化方法(Local Optimization Methods)进行近似求解。

最优性条件(Optimality Conditions)

单变量函数(Single-Variable Functions)

  • 梯度(Gradient):负梯度 $-\frac{dg(\theta)}{d\theta}$ 指向函数局部下降最快的方向。

  • 驻点(Stationary Point):若 $\theta^*$ 是局部极小值点,则必须满足一阶条件:

    $$ \frac{dg(\theta^*)}{d\theta} = 0 $$

  • 二阶条件(Second-Order Condition):通过二阶导数判断曲率(Curvature):

    • $\frac{d^2g(\theta)}{d\theta^2} > 0$:正曲率,局部呈“U形”,可能是极小值点;
    • $\frac{d^2g(\theta)}{d\theta^2} < 0$:负曲率,局部呈“倒U形”,可能是极大值点;
    • $\frac{d^2g(\theta)}{d\theta^2} = 0$:零曲率,无法判断。
Tip

示例:判断驻点性质

考虑函数 $g(\theta) = \theta^4 - 4\theta^2 + 2\theta - 4$。

  • 求一阶导数:$g’(\theta) = 4\theta^3 - 8\theta + 2$
  • 求二阶导数:$g’’(\theta) = 12\theta^2 - 8$
  • 在 $\theta = -1.52$ 处:$g’(-1.52) = 0$,$g’’(-1.52) > 0$ ⇒ 局部极小值点
  • 在 $\theta = 1.27$ 处:$g’(1.27) = 0$,$g’’(1.27) < 0$ ⇒ 局部极大值点

多变量函数(Multi-Variable Functions)

  • 梯度向量(Gradient Vector)

    $$ \nabla g(\theta) = \left[ \frac{\partial g}{\partial \theta_1}, \frac{\partial g}{\partial \theta_2}, \dots, \frac{\partial g}{\partial \theta_D} \right]^T $$

  • Hessian 矩阵(Hessian Matrix)

    $$ \nabla^2 g(\theta) = \begin{bmatrix} \frac{\partial^2 g}{\partial \theta_1^2} & \cdots & \frac{\partial^2 g}{\partial \theta_1 \partial \theta_D} \ \vdots & \ddots & \vdots \ \frac{\partial^2 g}{\partial \theta_D \partial \theta_1} & \cdots & \frac{\partial^2 g}{\partial \theta_D^2} \end{bmatrix} $$

  • 凸函数(Convex Function):若 Hessian 矩阵半正定(Positive Semidefinite),则所有驻点都是全局最小值点。

Tip

示例:凸函数判断

考虑岭回归(Ridge Regression)问题:

$$ g(\theta) = \frac{1}{2} | \mathbf{X} \theta - \mathbf{t} |^2 + \frac{\lambda}{2} | \theta |^2 $$

  • Hessian 矩阵为 $\nabla^2 g(\theta) = \mathbf{X}^T \mathbf{X} + \lambda \mathbf{I}$,是半正定的 ⇒ $g(\theta)$ 是凸函数。
  • 全局最优解为 $\theta^* = (\lambda \mathbf{I} + \mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{t}$。

梯度下降法(Gradient Descent, GD)

梯度下降是一种一阶优化方法,迭代更新公式为:

$$ \theta^{(i+1)} = \theta^{(i)} - \gamma \nabla g(\theta^{(i)}) $$

其中 $\gamma$ 是学习率(Learning Rate)。

性质与收敛性

  • L-平滑函数(L-Smooth Function):若满足 $\left| \frac{d^2g(\theta)}{d\theta^2} \right| \leq L$,则函数曲率有界。
  • 收敛条件:若 $\gamma < \frac{1}{L}$,则 GD 能保证:
    1. 损失函数非递增:$g(\theta^{(i+1)}) \leq g(\theta^{(i)}) - \frac{\gamma}{2} | \nabla g(\theta^{(i)}) |^2$
    2. 最终收敛到驻点:$\lim_{i \to \infty} \nabla g(\theta^{(i)}) = 0$
Tip

示例:梯度下降轨迹

考虑函数 $g(\theta) = \theta_1^2 + \theta_2^2$(对称碗状)和 $g(\theta) = \theta_1^2 + 3\theta_2^2$(非对称碗状)。

  • 在对称情况下,梯度方向指向最小值;
  • 在非对称情况下,梯度方向偏向曲率大的方向,不一定指向最小值。

随机梯度下降(Stochastic Gradient Descent, SGD)

当训练集很大($N$ 很大)时,计算完整梯度 $\nabla g(\theta) = \frac{1}{N} \sum_{n=1}^N \nabla g_n(\theta)$ 成本高昂。SGD 每次迭代只使用一个 mini-batch $S^{(i)}$ 的样本估计梯度:

$$ \theta^{(i+1)} = \theta^{(i)} - \gamma^{(i)} \cdot \frac{1}{|S^{(i)}|} \sum_{n \in S^{(i)}} \nabla g_n(\theta^{(i)}) $$

性质与调参

  • 梯度噪声(Gradient Noise):由于 mini-batch 的随机性,SGD 的梯度估计有方差。
  • 学习率调度(Learning Rate Scheduling):常使用递减学习率,如 $\gamma^{(i)} = \frac{\gamma^{(0)}}{(1 + \beta i)^\alpha}$(其中 $0.5 < \alpha \leq 1$),以满足 Robbins-Monro 条件,保证收敛。
  • 隐式正则化(Implicit Regularization):SGD 的噪声有助于避免尖锐的局部极小值,可能提升泛化能力。
Tip

示例:SGD 与 GD 对比

使用逻辑回归(Logistic Regression)任务,$N=80$,mini-batch size $S=4$。

  • GD 每迭代一次需计算 80 个样本的梯度;
  • SGD 每迭代一次只需计算 4 个样本的梯度,收敛更慢(按迭代次数)但更快(按计算量)。

如何计算梯度(How to Compute Gradients)

三种方法对比

方法 精确性 是否利用结构 输出类型
符号微分(Symbolic) 精确 函数表达式
数值微分(Numerical) 近似 单点数值
自动微分(Automatic) 精确 单点数值

自动微分(Automatic Differentiation / Backpropagation)

自动微分通过计算图(Computational Graph)和链式法则(Chain Rule)高效计算梯度。分为前向传播(Forward Pass)和反向传播(Backward Pass)。

Tip

示例:自动微分计算

设 $g(\theta) = \theta_1^2 + 2\theta_2^2 - \theta_3^2$,在 $\theta = [1, -1, 1]^T$ 处计算梯度。

前向传播:

  • $f_1 = \theta_1^2 = 1$
  • $f_2 = \theta_2^2 = 1$
  • $f_3 = \theta_3^2 = 1$
  • $g = f_1 + 2f_2 - f_3 = 1 + 2 - 1 = 2$

反向传播(局部导数):

  • $\frac{\partial g}{\partial f_1} = 1$
  • $\frac{\partial g}{\partial f_2} = 2$
  • $\frac{\partial g}{\partial f_3} = -1$
  • $\frac{\partial f_1}{\partial \theta_1} = 2\theta_1 = 2$
  • $\frac{\partial f_2}{\partial \theta_2} = 2\theta_2 = -2$
  • $\frac{\partial f_3}{\partial \theta_3} = 2\theta_3 = 2$

最终梯度:

$$ \nabla g(\theta) = \left[2 \cdot 1,\ -2 \cdot 2,\ 2 \cdot (-1)\right] = [2,\ -4,\ -2] $$

答案: $\nabla g([1, -1, 1]^T) = [2, -4, -2]^T$

二元分类问题

本章节围绕监督学习中的 二元分类(Binary Classification) 问题,系统介绍了从 线性模型(Linear Models)神经网络(Neural Networks),再到前沿的 Transformer架构 的核心方法。内容涵盖模型定义、训练算法、梯度计算与反向传播(Backpropagation),并辅以实例说明。

二元分类问题定义

在二元分类中,我们有一个带标签的数据集 $\mathcal{D} = {(\mathbf{x}n, t_n)}{n=1}^N$,其中 $\mathbf{x}_n \in \mathbb{R}^D$ 是输入特征向量,$t_n \in {0, 1}$ 是对应的类别标签。目标是学习一个模型,对新的输入 $\mathbf{x}$ 预测其类别 $\hat{t}$。

有时也使用符号标签(Signed Label) $t^\pm$: $$ t^\pm = \begin{cases} +1 & \text{if } t = 1 \ -1 & \text{if } t = 0 \end{cases} $$

线性模型(Linear Models)

硬预测(Hard Prediction)

使用阶跃函数(Step Function): $$ f(\mathbf{x} | \boldsymbol{\theta}) = \text{step}(\boldsymbol{\theta}^T \mathbf{u}(\mathbf{x})) = \begin{cases} 1 & \text{if } \boldsymbol{\theta}^T \mathbf{u}(\mathbf{x}) > 0 \ 0 & \text{otherwise} \end{cases} $$ 其中 $\mathbf{u}(\mathbf{x})$ 是特征映射(Feature Mapping),$\boldsymbol{\theta}$ 是参数向量。

软预测(Soft Prediction)与逻辑回归(Logistic Regression)

使用Sigmoid函数 $\sigma(a) = (1 + e^{-a})^{-1}$ 输出概率: $$ p(t=1 | \mathbf{x}, \boldsymbol{\theta}) = \sigma(\boldsymbol{\theta}^T \mathbf{u}(\mathbf{x})) $$

Note

即使使用软预测,最终的硬决策规则仍为: $$ \hat{t} = \begin{cases} 1 & \text{if } \sigma(\boldsymbol{\theta}^T \mathbf{u}(\mathbf{x})) > 0.5 \ 0 & \text{otherwise} \end{cases} $$ 这与硬预测模型一致,但软预测提供了置信度信息。

特征工程(Feature Engineering)

若原始特征 $\mathbf{x}$ 无法线性分割,可通过构造特征向量 $\mathbf{u}(\mathbf{x})$ 实现线性可分。例如:

  • 多项式特征:$\mathbf{u}(\mathbf{x}) = [x_1, x_2, x_1x_2]^T$
  • 词袋模型(Bag-of-Words):$\mathbf{u}(\mathbf{x}) = [\text{count}(w_1), \dots, \text{count}(w_D)]^T$

神经网络(Neural Networks)

模型结构

神经网络通过多层非线性变换自动学习特征表示。一个 $L$ 层网络结构如下:

  1. 特征提取层($L-1$ 层)

    • 每层 $l$ 有 $D^l$ 个神经元,使用激活函数 $h(\cdot)$(如 ReLU, Sigmoid, Tanh)
    • 输出:$\mathbf{h}^l = h(\mathbf{a}^l) = h(\mathbf{W}^l \mathbf{h}^{l-1})$
    • 最后一层特征:$\mathbf{u}(\mathbf{x} | \boldsymbol{\theta}) = \mathbf{h}^{L-1}$
  2. 分类层(第 $L$ 层)

    • 使用 Sigmoid 激活:$p(t=1 | \mathbf{x}, \boldsymbol{\theta}) = \sigma(\mathbf{w}^L \cdot \mathbf{h}^{L-1})$

激活函数对比

函数 表达式 梯度特性
Sigmoid $\sigma(a) = \frac{1}{1+e^{-a}}$ 饱和区梯度消失
ReLU $\max(0, a)$ 正区间梯度为1,负区间为0
Leaky ReLU $\max(\alpha a, a)$ 负区间梯度为 $\alpha$,缓解梯度消失问题

训练与优化

损失函数(Loss Functions)

  • 0-1损失(0-1 Loss):$\ell(t, \hat{t}) = \mathbb{I}(t \neq \hat{t})$,不连续,难以优化
  • 替代损失(Surrogate Losses)
    • Hinge Loss:$\max(0, -y)$,$y = t^\pm \cdot \boldsymbol{\theta}^T \mathbf{u}(\mathbf{x})$
    • Logistic Loss:$\log(1 + e^{-y})$(等价于负对数似然)
    • Exponential Loss:$e^{-y}$

随机梯度下降(SGD)与反向传播

使用 SGD 最小化正则化经验风险: $$ \min_{\boldsymbol{\theta}} \frac{1}{N} \sum_{n=1}^N \ell(t_n, f(\mathbf{x}_n | \boldsymbol{\theta})) + \lambda R(\boldsymbol{\theta}) $$

反向传播通过链式法则计算梯度: $$ \frac{\partial \ell}{\partial w_{j,d}^l} = \delta_j^l \cdot h_d^{l-1} $$ 其中 $\delta_j^l$ 是第 $l$ 层第 $j$ 个神经元的误差信号。


举例与应用

Tip

示例一:感知器算法(Perceptron Algorithm)

给定数据集: $$ \mathcal{D} = {(2.1, 1), (-1.5, 0), (-0.3, 0), (5.2, 1)} $$ 使用特征 $\mathbf{u}(x) = x$,初始化 $\theta^{(1)} = -1$,学习率 $\eta = 0.1$。

迭代过程:

  1. 样本 $(2.1, 1)$:$\theta^{(1)} \cdot 2.1 = -2.1 < 0$,预测错误
  • 更新:$\theta^{(2)} = -1 + 0.1 \cdot 1 \cdot 2.1 = -0.79$
  1. 样本 $(-1.5, 0)$:$\theta^{(2)} \cdot (-1.5) = 1.185 > 0$,预测错误
  • 更新:$\theta^{(3)} = -0.79 - 0.1 \cdot (-1) \cdot (-1.5) = -0.64$

结论: 感知器通过更新错误样本的权重逐步改进分类边界。

Tip

示例二:逻辑回归的梯度计算

对同一数据集,使用逻辑回归(Sigmoid输出)和 SGD。

梯度公式: $$ \nabla_\theta \ell(\theta) = (\sigma(\theta^T \mathbf{u}(x)) - t) \cdot \mathbf{u}(x) $$

以样本 $(2.1, 1)$ 和 $\theta^{(1)} = -1$ 为例:

  • $\sigma(-1 \cdot 2.1) \approx 0.11$
  • 误差 $\delta = 0.11 - 1 = -0.89$
  • 梯度:$\nabla_\theta \ell = -0.89 \cdot 2.1$
  • 更新:$\theta^{(2)} = -1 - 0.1 \cdot (-0.89 \cdot 2.1) \approx -0.81$

结论: 逻辑回归的梯度包含概率误差,更新更平滑。

Tip

示例三:神经网络前向传播与反向传播

考虑一个2层网络($L=2$),输入 $\mathbf{x} = [1, -1]^T$,权重: $$ \mathbf{W}^1 = \begin{bmatrix} 1 & -1 \ -2 & 1 \end{bmatrix}, \quad \mathbf{w}^2 = [1, -1]^T $$ 使用 ReLU 激活函数,标签 $t=0$。

前向传播:

  1. $\mathbf{a}^1 = \mathbf{W}^1 \mathbf{x} = [2, -3]^T$
  2. $\mathbf{h}^1 = \text{ReLU}(\mathbf{a}^1) = [2, 0]^T$
  3. $a^2 = \mathbf{w}^2 \cdot \mathbf{h}^1 = 2$
  4. $p(t=1|\mathbf{x}) = \sigma(2) \approx 0.88$

反向传播(计算梯度):

  • 输出层误差:$\delta^2 = \sigma(2) - 0 \approx 0.88$
  • 隐藏层误差:$\delta^1 = \text{ReLU}’(\mathbf{a}^1) \circ (\mathbf{w}^2 \cdot \delta^2) = [1, 0]^T \circ [0.88, -0.88]^T = [0.88, 0]^T$
  • 梯度:
    • $\frac{\partial \ell}{\partial \mathbf{w}^2} = \delta^2 \cdot \mathbf{h}^1 = 0.88 \cdot [2, 0]^T = [1.76, 0]^T$
    • $\frac{\partial \ell}{\partial \mathbf{W}^1} = \delta^1 \cdot \mathbf{x}^T = [0.88, 0]^T \cdot [1, -1] = \begin{bmatrix} 0.88 & -0.88 \ 0 & 0 \end{bmatrix}$

结论: 通过反向传播可高效计算神经网络中所有参数的梯度。


Last modified on 2025-08-22