跳到主要内容

用梯度下降求解最小二乘

线性回归的核心任务,是通过拟合线性方程来描述因变量与自变量之间的关系。最基础的一元线性模型形式为 y=mx+by = mx + b,其中 mm 代表斜率,bb 代表 y 轴截距。本页用梯度下降寻找 mmbb,并用精确解核对结果。

梯度下降在线性回归中的应用

梯度下降(Gradient Descent)是一种迭代优化算法。它的核心逻辑是:沿着目标函数梯度的反方向(即下降最快的方向)不断调整参数,直到找到函数的最小值。

在线性回归中,我们的目标是最小化“成本函数”(Cost Function)。这个函数衡量的是模型预测值与真实观测值之间的误差。

成本函数

线性回归常用的成本函数是均方误差(Mean Squared Error, MSE),即预测值与观测值之差的平方和的平均值:

E(m,b)=1ni=1n(yi(mxi+b))2E(m, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - (mx_i + b))^2

变量定义如下:

  • nn:样本数量
  • yiy_i:第 ii 个样本的真实观测值
  • xix_i:第 ii 个样本的自变量值
  • mm:斜率
  • bb:截距

梯度下降更新规则

为了最小化 E(m,b)E(m, b),我们需要根据梯度方向迭代更新参数 mmbb。更新公式如下:

mk+1=mkαEmm_{k+1} = m_k - \alpha \frac{\partial E}{\partial m} bk+1=bkαEbb_{k+1} = b_k - \alpha \frac{\partial E}{\partial b}

这里 α\alpha 是学习率(Learning Rate),它是一个超参数,决定了每次迭代中参数更新的步长。步长太大可能导致震荡不收敛,太小则收敛速度过慢。

成本函数的偏导数

我们需要计算成本函数对 mmbb 的偏导数,以获取梯度方向:

Em=2ni=1nxi(yi(mxi+b))\frac{\partial E}{\partial m} = -\frac{2}{n} \sum_{i=1}^{n} x_i(y_i - (mx_i + b)) Eb=2ni=1n(yi(mxi+b))\frac{\partial E}{\partial b} = -\frac{2}{n} \sum_{i=1}^{n} (y_i - (mx_i + b))

这两个偏导数分别指示了 mmbb 当前应该调整的方向和幅度。

实现步骤

  1. 初始化:随机或手动设定 mmbb 的初始值。
  2. 计算梯度:根据当前参数,计算成本函数对 mmbb 的偏导数。
  3. 更新参数:利用上述更新公式,调整 mmbb 的值。
  4. 迭代收敛:重复步骤 2 和 3,直到达到梯度容差或用尽迭代预算,并报告实际停止原因。

精确解与可复算的更新

本页只讨论优化计算;模型假设和系数解释见线性回归。令 ri=mxi+byir_i=mx_i+b-y_i,链式法则给出 ri2/m=2rixi\partial r_i^2/\partial m=2r_ix_iri2/b=2ri\partial r_i^2/\partial b=2r_i,这就解释了上面导数的符号与系数 22。因为有 1/n1/nEE均方误差,不是残差平方和。缩放损失不改变最小点,却会缩放梯度,因此适用的学习率也会变。

取三个观测点 (1,2),(2,5),(3,3)(1,2),(2,5),(3,3),其残差平方和正是前文梯度笔记中的二次式:

S=3E=14m2+12mb+3b242m20b+38.S=3E=14m^2+12mb+3b^2-42m-20b+38.

这里 xi=6\sum x_i=6yi=10\sum y_i=10xi2=14\sum x_i^2=14xiyi=21\sum x_iy_i=21。解方程组 28m+12b42=028m+12b-42=012m+6b20=012m+6b-20=0,得到 m=1/2m=1/2b=7/3b=7/3。残差 yi(mxi+b)y_i-(mx_i+b) 分别是 5/6,5/3,5/6-5/6,5/3,-5/6,所以 S=25/6S=25/6E=25/18E=25/18

(m,b)=(0,0)(m,b)=(0,0) 处,E=(14,20/3)\nabla E=(-14,-20/3)。用 α=0.05\alpha=0.05 同时更新,得到 (7/10,1/3)(7/10,1/3)EE38/338/3 降为 1789/4503.9755561789/450\approx3.975556。每轮都要先算完两个梯度和式,再给参数赋新值。

把参数写成列向量 θ=(m,b)T\theta=(m,b)^T,把观测值写成 y=(y1,,yn)Ty=(y_1,\ldots,y_n)^T。设计矩阵 XX 的第 ii 行取 (xi,1)(x_i,1),这样 XθX\theta 的第 ii 项就是预测值 mxi+bmx_i+b。于是 E=Xθy22/nE=\|X\theta-y\|_2^2/n,其中欧氏范数的平方就是各项残差的平方和,Hessian 为 H=2XTX/nH=2X^TX/n。任意 vv 都满足 vTHv=2Xv22/n0v^THv=2\|Xv\|_2^2/n\ge0,所以损失凸。只有 XX 的各列线性无关,也就是列满秩时,解才唯一;对斜率加截距模型,这要求至少两个不同的 xix_i。若所有 xi=cx_i=c,数据只能识别 mc+bmc+b,多组参数会给出同样的拟合。

步长上界来自误差如何迭代。这里 HH 对称正定,θ\theta_* 是唯一最小点。令 ek=θkθe_k=\theta_k-\theta_*,二次函数的梯度为 HekHe_k,于是

ek+1=(IαH)ek.e_{k+1}=(I-\alpha H)e_k.

沿 HH 的某个特征向量,设对应特征值为 λ>0\lambda>0,误差分量每一步都会乘以 1αλ1-\alpha\lambda。要从任意起点收敛,就需对所有特征值满足 1αλ<1|1-\alpha\lambda|<1,因此 0<α<2/λmax(H)0<\alpha<2/\lambda_{\max}(H)。恰好取上界时,最大特征值方向的误差会来回振荡,而不是缩小。凸性帮助判断全局最优,却不保证任意步长都收敛。

此数据集的 λmax(H)=(17+265)/311.092940\lambda_{\max}(H)=(17+\sqrt{265})/3\approx11.092940,因此固定步长在 0<α<2/λmax0.1802950<\alpha<2/\lambda_{\max}\approx0.180295 时收敛。特征缩放会改变这个界。以梯度范数容差和迭代上限作为停止条件,并与精确解比较;损失不变也可能只是数值停滞。小型稠密问题通常适合用 QR 或 SVD 最小二乘求解器,而非手工迭代或显式计算 XTXX^TX 的逆。

探索关联打开关联网络