通过线性模型理解梯度下降
多元线性回归是机器学习中最基础的模型之一,用于预测连续值。我们使用梯度下降法来优化模型参数,找到使损失函数最小的参数值。
为什么需要梯度下降法?
- 多元线性回归的参数优化问题通常无法直接求解(当特征维度很高时)
- 梯度下降法是一种通用的迭代优化算法
- 可以处理大规模数据集
- 是理解更复杂优化算法(如神经网络训练)的基础
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,直到收敛
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 完整的梯度下降算法
算法流程:
- 初始化参数: $\theta_0$(随机初始化或零初始化)
- 迭代更新:
- 计算梯度:$\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$ 或达到最大迭代次数,停止
- 返回最优参数: $\theta^*$

5.4 学习率的选择
学习率 $\alpha$ 的影响:
- $\alpha$ 过小: 收敛速度慢,需要大量迭代
- $\alpha$ 适中: 收敛速度快且稳定(推荐)
- $\alpha$ 过大: 可能发散,无法收敛
经验法则:
- 通常从 $\alpha = 0.01$ 开始尝试
- 根据损失函数的变化调整学习率
- 可以使用学习率衰减策略