第 1 课
← 返回系列列表

Lecture 1-2:线性回归与梯度下降

Stanford CS229 — 斯坦福机器学习

监督学习问题定义、线性回归、最小二乘法、概率解释。

Lecture 1-2:线性回归与梯度下降

课程简介

监督学习问题定义、线性回归、最小二乘法、概率解释。

🎬 本课程视频:Stanford CS229 — 斯坦福机器学习


一、监督学习问题定义

1.1 监督学习的基本框架

监督学习(Supervised Learning)是机器学习中最基础、应用最广泛的一类方法。其核心问题是:给定一组输入-输出对(训练样本),学习一个从输入到输出的映射函数,使得该函数能够对新的、未见过的输入做出准确预测。

形式化定义如下:给定训练集 $S = {(x^{(i)}, y^{(i)})}_{i=1}^{m}$,其中 $x^{(i)} \in \mathbb{R}^n$ 是输入特征向量,$y^{(i)} \in \mathcal{Y}$ 是对应的输出标签。监督学习的目标是学习一个假设函数 $h: \mathbb{R}^n \to \mathcal{Y}$,使得在未见数据上的泛化误差最小。

根据输出类型的不同,监督学习可以分为:
- 回归问题:输出连续值,如房价预测 $y \in \mathbb{R}$
- 分类问题:输出离散值,如垃圾邮件检测 $y \in {0, 1}$

1.2 术语与符号约定

在 CS229 中,我们使用以下规范化符号:
- $m$:训练样本数量
- $n$:特征数量
- $x^{(i)}$:第 $i$ 个训练样本的输入特征向量
- $y^{(i)}$:第 $i$ 个训练样本的输出标签
- $X$:设计矩阵(Design Matrix),大小为 $m \times n$,第 $i$ 行为 $(x^{(i)})^T$
- $\theta$:模型参数向量

二、线性回归

2.1 模型表示

线性回归假设输出是输入的线性组合:

$$h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + ... + \theta_n x_n = \sum_{j=0}^{n} \theta_j x_j = \theta^T x$$

其中我们约定 $x_0 = 1$ 以简化截距项 $\theta_0$ 的处理。$\theta$ 是我们需要学习的参数。

2.2 代价函数——最小二乘法

为了衡量假设函数的好坏,我们定义代价函数(Cost Function)——平均平方误差(Mean Squared Error, MSE):

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2$$

前面的 $1/2$ 是为了后续求导的便利——平方项求导后的 $2$ 与 $1/2$ 抵消。

这个代价函数的含义很直观:它衡量了预测值与真实值之间的平均平方偏差。最小化 $J(\theta)$ 就是寻找让预测最接近真实值的那组参数 $\theta$。

为什么选择平方误差而不是绝对值误差?有三个重要的原因:
1. 数学便利性:平方误差是凸函数,有唯一的全局最小值
2. 概率解释:在高斯噪声假设下,最小二乘法等价于极大似然估计
3. 大误差惩罚:平方项对大误差的惩罚远大于小误差,使模型更稳健

2.3 梯度下降算法

梯度下降(Gradient Descent)是最优化中迭代求解参数的一类方法。基本思路是:沿着代价函数梯度的反方向更新参数,使代价函数值逐步下降。

$$\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta)$$

其中 $\alpha$ 是学习率(Learning Rate),控制每一步更新的步长。

对 $J(\theta)$ 求偏导:

$$\frac{\partial}{\partial \theta_j} J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}$$

因此,参数更新规则为:

$$\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}$$

2.4 批量梯度下降与随机梯度下降

批量梯度下降(Batch Gradient Descent, BGD):每次更新使用全部训练样本:

$$\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}$$

优点:每次更新方向准确,能稳定收敛到全局最优。
缺点:当 $m$ 很大时,每次计算梯度非常耗时。

随机梯度下降(Stochastic Gradient Descent, SGD):每次更新只使用一个随机选取的样本:

$$\theta_j := \theta_j - \alpha (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}$$

优点:计算速度快,适合大规模数据集。
缺点:更新方向有噪声,不会精确收敛到最小值,而是在最小值附近波动。

小批量梯度下降(Mini-batch Gradient Descent):每次更新使用 $b$ 个样本($1 < b < m$),是 BGD 和 SGD 的折中方案,也是实践中使用最广泛的方法。

def batch_gradient_descent(X, y, alpha=0.01, iterations=1000):
    m, n = X.shape
    theta = np.zeros(n)
    for _ in range(iterations):
        predictions = X @ theta
        errors = predictions - y
        gradient = (1/m) * X.T @ errors
        theta -= alpha * gradient
    return theta

def stochastic_gradient_descent(X, y, alpha=0.01, epochs=10):
    m, n = X.shape
    theta = np.zeros(n)
    for epoch in range(epochs):
        for i in np.random.permutation(m):
            pred = X[i] @ theta
            error = pred - y[i]
            theta -= alpha * error * X[i]
    return theta

2.5 学习率的选择

学习率 $\alpha$ 是梯度下降最重要的超参数:
- $\alpha$ 过大:参数更新步长太大,可能在最小值附近震荡甚至发散
- $\alpha$ 过小:收敛速度极慢,需要大量迭代

实践中,可以尝试 $\alpha = 0.001, 0.01, 0.1, 1$ 等值,并绘制 $J(\theta)$ 随迭代次数的变化曲线来监控收敛情况。如果 $J(\theta)$ 在上升,说明学习率过大。

三、线性回归的概率解释

3.1 高斯噪声假设

为什么最小二乘法是一个合理的选择?我们可以从概率角度给出严格的解释。

假设目标变量 $y^{(i)}$ 与输入 $x^{(i)}$ 之间存在线性关系,但观测值受到随机噪声的干扰:

$$y^{(i)} = \theta^T x^{(i)} + \varepsilon^{(i)}$$

其中 $\varepsilon^{(i)}$ 是独立同分布的随机误差项。我们假设误差服从均值为 0、方差为 $\sigma^2$ 的高斯分布:

$$\varepsilon^{(i)} \sim \mathcal{N}(0, \sigma^2)$$

高斯分布的概率密度函数为:

$$p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}\right)$$

3.2 似然函数

给定参数 $\theta$ 和输入 $x^{(i)}$,$y^{(i)}$ 的条件分布为:

$$y^{(i)} | x^{(i)}; \theta \sim \mathcal{N}(\theta^T x^{(i)}, \sigma^2)$$

即:

$$p(y^{(i)} | x^{(i)}; \theta) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^2}{2\sigma^2}\right)$$

定义似然函数(Likelihood Function)为所有样本的条件概率乘积:

$$L(\theta) = \prod_{i=1}^{m} p(y^{(i)} | x^{(i)}; \theta) = \prod_{i=1}^{m} \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^2}{2\sigma^2}\right)$$

3.3 极大似然估计

极大似然估计的核心思想:寻找参数 $\theta$ 使得观察到的数据出现的概率最大。

由于连乘不易处理,我们通常最大化对数似然(Log-likelihood):

$$\ell(\theta) = \log L(\theta) = m \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{2\sigma^2} \sum_{i=1}^{m} (y^{(i)} - \theta^T x^{(i)})^2$$

最大化 $\ell(\theta)$ 等价于最小化 $\sum_{i=1}^{m} (y^{(i)} - \theta^T x^{(i)})^2$——这正是我们的代价函数 $J(\theta)$ 的分子部分!

因此,在高斯噪声假设下,最小二乘法等价于极大似然估计。这也解释了我们为什么选择平方误差——它是高斯噪声模型下的自然结果。

四、局部加权回归

4.1 参数化与非参数化方法

线性回归是一种参数化(Parametric)学习算法——学习到的知识压缩在参数 $\theta$ 中,预测时只需要 $\theta$ 和输入 $x$,不需要保留训练数据。

局部加权回归(Locally Weighted Regression, LWR)是一种非参数化(Non-parametric)学习算法——它保留所有训练数据,预测时根据查询点附近的局部数据拟合模型。

4.2 LWR 算法

LWR 的核心思想:对待预测点 $x$,在其附近拟合一个局部线性模型,赋予靠近 $x$ 的训练样本更高的权重。

代价函数变为:

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} w^{(i)} (h_\theta(x^{(i)}) - y^{(i)})^2$$

其中权重 $w^{(i)}$ 衡量第 $i$ 个训练样本与查询点 $x$ 的接近程度:

$$w^{(i)} = \exp\left(-\frac{(x^{(i)} - x)^T (x^{(i)} - x)}{2\tau^2}\right)$$

$\tau$ 是带宽参数(Bandwidth Parameter),控制权重的衰减速度:
- $\tau$ 很小:只有非常近的点有显著权重,模型易过拟合
- $\tau$ 很大:较远的点也有权重,模型易欠拟合

4.3 LWR 的优缺点

优点:
- 对非线性数据拟合效果好
- 不需要预先假设全局函数形式

缺点:
- 每次预测都需要重新拟合模型,计算成本高
- 需要保留所有训练数据,存储成本高
- 在高维空间中,"局部"的概念变得模糊——维度诅咒

def locally_weighted_regression(X_train, y_train, x_query, tau=0.5):
    m = X_train.shape[0]
    weights = np.exp(-np.sum((X_train - x_query)**2, axis=1) / (2 * tau**2))
    W = np.diag(weights)
    theta = np.linalg.inv(X_train.T @ W @ X_train) @ (X_train.T @ W @ y_train)
    return x_query @ theta

五、总结

本章我们学习了监督学习的核心概念和线性回归算法。关键要点:

  1. 监督学习的目标是从带标签的数据中学习映射函数
  2. 线性回归假设输出是输入的线性组合,用最小二乘法衡量误差
  3. 梯度下降是迭代优化参数的核心算法,有 BGD、SGD、Mini-batch 三种变体
  4. 概率解释表明:在高斯噪声假设下,最小二乘法等价于极大似然估计
  5. 局部加权回归是一种非参数方法,在预测点附近进行局部拟合

六、特征选择与模型正则化

6.1 特征选择的基本方法

在线性回归中,并非所有特征都对预测有贡献。冗余或无关的特征不仅增加计算成本,还可能导致过拟合。特征选择的三种主要方法:

过滤法(Filter Methods):在训练前基于统计指标筛选特征。常用的指标包括皮尔逊相关系数、互信息和卡方检验。这种方法计算效率高,但独立评估每个特征,忽略了特征间的交互作用。

包裹法(Wrapper Methods):使用模型性能作为特征子集的评估标准。前向搜索从空集开始逐步添加特征,后向搜索从全集开始逐步移除特征。这种方法考虑了特征间的交互,但计算开销大。

嵌入法(Embedded Methods):在模型训练过程中自动进行特征选择。L1 正则化(Lasso)会将不重要特征的系数压缩到零,是一种高效的嵌入法特征选择。

6.2 正则化——防止过拟合的核心技术

正则化(Regularization)通过给代价函数添加惩罚项来限制模型复杂度:

岭回归(Ridge Regression)使用 L2 正则化:

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} \theta_j^2$$

Lasso 回归使用 L1 正则化:

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} |\theta_j|$$

正则化系数 $\lambda$ 控制惩罚的强度。$\lambda = 0$ 退化为普通线性回归;$\lambda$ 很大时参数被强烈压缩向零。$\lambda$ 的选择通常通过交叉验证确定。

6.3 实战建议——构建回归模型的工作流

在实践中构建回归模型时,建议遵循以下流程:

  1. 数据探索:可视化特征与目标变量之间的关系,检测异常值和缺失值
  2. 特征工程:创建有意义的特征,对数值特征做缩放,对类别特征做编码
  3. 基线模型:先用普通线性回归建立基线
  4. 正则化:如果过拟合,尝试岭回归或 Lasso
  5. 模型诊断:绘制学习曲线,判断是偏差问题还是方差问题
  6. 迭代优化:基于诊断结果,调整特征、正则化强度或模型复杂度

这个流程体现了 Andrew Ng 反复强调的原则——先建立基线,再基于诊断结果做有针对性的改进,而不是盲目尝试各种方法。

延伸阅读

Lecture 3:正规方程与矩阵推导 →