行莫
行莫
发布于 2025-12-31 / 23 阅读
0
0

通过线性模型理解梯度下降

通过线性模型理解梯度下降

多元线性回归是机器学习中最基础的模型之一,用于预测连续值。我们使用梯度下降法来优化模型参数,找到使损失函数最小的参数值。

为什么需要梯度下降法?

  • 多元线性回归的参数优化问题通常无法直接求解(当特征维度很高时)
  • 梯度下降法是一种通用的迭代优化算法
  • 可以处理大规模数据集
  • 是理解更复杂优化算法(如神经网络训练)的基础

2. 多元线性回归模型

2.1 模型定义

多元线性回归模型的数学表达式为:

$$h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n$$

其中:

  • $h_{\theta}(x)$:预测值(hypothesis)
  • $\theta_0$:截距项(bias)
  • $\theta_1, \theta_2, \ldots, \theta_n$:各个特征的权重(weights)
  • $x_1, x_2, \ldots, x_n$:输入特征

2.2 向量化表示

为了简化计算,我们通常使用向量化表示

$$h_{\theta}(x) = \theta^T x = \begin{bmatrix} \theta_0 & \theta_1 & \cdots & \theta_n \end{bmatrix} \begin{bmatrix} 1 \ x_1 \ x_2 \ \vdots \ x_n \end{bmatrix}$$

其中:

  • $\theta = \begin{bmatrix} \theta_0 \ \theta_1 \ \vdots \ \theta_n \end{bmatrix}$ 是参数向量
  • $x = \begin{bmatrix} 1 \ x_1 \ x_2 \ \vdots \ x_n \end{bmatrix}$ 是特征向量(注意第一个元素是1,对应截距项)

2.3 批量预测

对于 $m$ 个样本,我们可以用矩阵形式表示:

$$\mathbf{h} = \mathbf{X} \theta$$

其中:

  • $\mathbf{X} = \begin{bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \ 1 & x_1^{(2)} & x_2^{(2)} & \cdots & x_n^{(2)} \ \vdots & \vdots & \vdots & \ddots & \vdots \ 1 & x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} \end{bmatrix}$ 是 $m \times (n+1)$ 的特征矩阵
  • $\theta = \begin{bmatrix} \theta_0 \ \theta_1 \ \vdots \ \theta_n \end{bmatrix}$ 是 $(n+1) \times 1$ 的参数向量
  • $\mathbf{h} = \begin{bmatrix} h_{\theta}(x^{(1)}) \ h_{\theta}(x^{(2)}) \ \vdots \ h_{\theta}(x^{(m)}) \end{bmatrix}$ 是 $m \times 1$ 的预测值向量

3. 损失函数(均方误差)

3.1 损失函数定义

我们使用均方误差(Mean Squared Error, MSE)作为损失函数:

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

其中:

  • $m$:样本数量
  • $h_{\theta}(x^{(i)})$:第 $i$ 个样本的预测值
  • $y^{(i)}$:第 $i$ 个样本的真实值
  • 系数 $\frac{1}{2}$ 是为了后续求导方便(求导后系数变为1)

3.2 向量化表示

使用矩阵形式,损失函数可以写成:

$$J(\theta) = \frac{1}{2m} (\mathbf{X}\theta - \mathbf{y})^T (\mathbf{X}\theta - \mathbf{y})$$

其中:

  • $\mathbf{y} = \begin{bmatrix} y^{(1)} \ y^{(2)} \ \vdots \ y^{(m)} \end{bmatrix}$ 是真实值向量

3.3 优化目标

我们的目标是找到参数 $\theta$,使得损失函数 $J(\theta)$ 最小:

$$\theta^* = \arg\min_{\theta} J(\theta)$$


4. 梯度计算

梯度指向函数值增长最快的方向,具体来说就是在当前观察点对函数中的每个变量分别求偏导后,由这些偏导数作为分量组成的向量。

4.1 单个参数的梯度

首先,我们计算损失函数对单个参数 $\theta_j$ 的偏导数。

步骤1:展开损失函数

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

其中 $h_{\theta}(x^{(i)}) = \theta_0 + \theta_1 x_1^{(i)} + \theta_2 x_2^{(i)} + \cdots + \theta_n x_n^{(i)}$

步骤2:对 $\theta_j$ 求偏导

$$\frac{\partial J(\theta)}{\partial \theta_j} = \frac{\partial}{\partial \theta_j} \left[ \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2 \right]$$

使用链式法则:

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

步骤3:计算 $h_{\theta}(x^{(i)})$ 对 $\theta_j$ 的偏导

$$\frac{\partial h_{\theta}(x^{(i)})}{\partial \theta_j} = \frac{\partial}{\partial \theta_j} (\theta_0 + \theta_1 x_1^{(i)} + \cdots + \theta_j x_j^{(i)} + \cdots + \theta_n x_n^{(i)}) = x_j^{(i)}$$

注意:对于 $\theta_0$,对应的特征 $x_0^{(i)} = 1$(截距项)

步骤4:得到梯度公式

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

4.2 梯度向量

所有参数的梯度组成梯度向量

$$\nabla_{\theta} J(\theta) = \begin{bmatrix} \frac{\partial J}{\partial \theta_0} \ \frac{\partial J}{\partial \theta_1} \ \vdots \ \frac{\partial J}{\partial \theta_n} \end{bmatrix} = \frac{1}{m} \begin{bmatrix} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)} \ \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \ \vdots \ \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_n^{(i)} \end{bmatrix}$$

4.3 向量化梯度公式

使用矩阵形式,梯度可以写成:

$$\nabla_{\theta} J(\theta) = \frac{1}{m} \mathbf{X}^T (\mathbf{X}\theta - \mathbf{y})$$

推导过程:

$$\mathbf{X}\theta - \mathbf{y} = \begin{bmatrix} h_{\theta}(x^{(1)}) - y^{(1)} \ h_{\theta}(x^{(2)}) - y^{(2)} \ \vdots \ h_{\theta}(x^{(m)}) - y^{(m)} \end{bmatrix}$$

$$\mathbf{X}^T (\mathbf{X}\theta - \mathbf{y}) = \begin{bmatrix} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)} \ \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \ \vdots \ \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_n^{(i)} \end{bmatrix}$$

因此:

$$\nabla_{\theta} J(\theta) = \frac{1}{m} \mathbf{X}^T (\mathbf{X}\theta - \mathbf{y})$$


5. 梯度下降法公式推导

5.1 核心思想

梯度下降法是一种迭代优化算法,通过不断沿着负梯度方向更新参数,逐步逼近损失函数的最小值。

关键步骤:

  1. 计算当前参数下的梯度
  2. 沿负梯度方向更新参数
  3. 重复步骤1和2,直到收敛

5.2 更新公式推导

方法一:泰勒展开推导

在点 $\theta_t$ 处,对损失函数 $J(\theta)$ 进行一阶泰勒展开

$$J(\theta_{t+1}) = J(\theta_t + \Delta\theta) \approx J(\theta_t) + \nabla_{\theta} J(\theta_t)^T \Delta\theta$$

其中:

  • $\theta_{t+1} = \theta_t + \Delta\theta$
  • $\Delta\theta = \theta_{t+1} - \theta_t$ 是参数的变化量
  • $\nabla_{\theta} J(\theta_t)$ 是损失函数在 $\theta_t$ 处的梯度向量

目标: 使损失函数减小,即 $J(\theta_{t+1}) < J(\theta_t)$

$$J(\theta_t) + \nabla_{\theta} J(\theta_t)^T \Delta\theta < J(\theta_t)$$

$$\nabla_{\theta} J(\theta_t)^T \Delta\theta < 0$$

要使点积 $\nabla_{\theta} J(\theta_t)^T \Delta\theta$ 最小(下降最快),需要:
根据方向导数公式,如果 $\Delta\theta$ 是单位向量 $\vec{u}$ 的倍数:
$$\nabla_{\theta} J(\theta_t)^T \Delta\theta = |\nabla_{\theta} J(\theta_t)| \cdot |\Delta\theta| \cdot \cos(\theta)$$
其中 $\theta$ 是梯度向量与 $\Delta\theta$ 的夹角。
要使点积最小(即最负),需要:
$\cos(\theta) = -1$(即 $\theta = 180°$)
这意味着 $\Delta\theta$ 必须与梯度方向相反

最优选择: 在固定步长约束下,要使函数值下降最快,应选择:

$$\Delta\theta = -\alpha \cdot \nabla_{\theta} J(\theta_t)$$

其中 $\alpha > 0$ 是学习率(步长),参数 $\theta_{t+1}$ 的变化量随梯度变化。

更新公式:

$$\theta_{t+1} = \theta_t - \alpha \cdot \nabla_{\theta} J(\theta_t)$$

5.3 完整的梯度下降算法

算法流程:

  1. 初始化参数: $\theta_0$(随机初始化或零初始化)
  2. 迭代更新:
    • 计算梯度:$\nabla_{\theta} J(\theta_t) = \frac{1}{m} \mathbf{X}^T (\mathbf{X}\theta_t - \mathbf{y})$
    • 更新参数:$\theta_{t+1} = \theta_t - \alpha \cdot \nabla_{\theta} J(\theta_t)$
    • 检查收敛:如果 $||\nabla_{\theta} J(\theta_t)|| < \epsilon$ 或达到最大迭代次数,停止
  3. 返回最优参数: $\theta^*$

5.4 学习率的选择

学习率 $\alpha$ 的影响:

  • $\alpha$ 过小: 收敛速度慢,需要大量迭代
  • $\alpha$ 适中: 收敛速度快且稳定(推荐)
  • $\alpha$ 过大: 可能发散,无法收敛

经验法则:

  • 通常从 $\alpha = 0.01$ 开始尝试
  • 根据损失函数的变化调整学习率
  • 可以使用学习率衰减策略

评论