前两章我们学会了用概率来描述不确定性(Ch2),以及用MLE/MAP来估计参数(Ch3)。

现在是时候把这些武器用在一个真实的战场上了——预测房价

这就是线性回归,它是几乎所有复杂模型的祖先。理解了它,后面的神经网络、深度学习都会变得更容易理解。


线性回归

线性回归的目标就是画一条直线来尝试穿过数据点。但是为了计算机能够算出来这条直线,我们需要采用极其严谨的符号定义。

回到房价问题。假设输入数据$x$是一个向量,例如房子的面积。我们认为输出$y$,也就是房价,是这些特征的线性组合 (Linear Combination)

$$f(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_d x_d$$

这里你会发现公式的首项$\theta_0$是截距,而且非常碍事,因为这个值没有对应的变量$x$。为了能够使用统一的向量点积$x^T\theta$来表示,我们人为地将每个数据样本添加一个特征$x_0 = 1$。

这样一来,$\theta$就变成了$d+1$维向量,$x$也变成了$d + 1$维。因此:

$$f(x) = \sum_{j=0}^d \theta_j x_j = \theta^T x$$


在线性回归中,我们使用平方损失 (Squared Loss) 损失函数来衡量模型是好是坏:

$$\ell(\theta) = \sum_{i=1}^n (y_i - f(x_i))^2 = \sum_{i=1}^n (y_i - \theta^T x_i)^2$$

与其他的损失函数相同,我们的目标是找到能让这个总和最小的 $\theta$。


由于机器学习往往需要处理大规模数据,因此使用矩阵一次性处理所有数据比写n个循环要容易的多。

房价问题内,我们的模型有三个参数:$\theta = [\theta_0, \theta_1, \theta_2]^T$,分别是截距,面积权重和房间数权重。

假设我们看了一个房子($x^{(1)}$)。它的面积是100平,有俩房间。

为了配合截距,我们将特征提取成向量: $x^{(1)} = [1, 100, 2]^T$
如何预测房价?使用$\hat{y}_1 = 1 \cdot \theta_0 + 100 \cdot \theta_1 + 2 \cdot \theta_2$,得出你的y值。

那么在这一步实际上我们就完成了一步两个向量的点乘积,$x^{(1)T}\theta$

这只是一个房子。那大批房子怎么办?假设我们还需要知道2号房($[1, 120, 3]$)和3号房($[1, 80, 2]$)的价格, 想要求出$y_2$和$y_3$。

与其写三个式子计算:

$$\hat{y}_1 = [1, 100, 2] \cdot \theta$$
$$\hat{y}_2 = [1, 120, 3] \cdot \theta$$
$$\hat{y}_3 = [1, 80, 2] \cdot \theta$$

你可以将这几个向量堆叠起来,形成一个矩阵X:

$$
X = \begin{bmatrix}
1 & 100 & 2 \\
1 & 120 & 3 \\
1 & 80 & 2
\end{bmatrix}
$$

这个矩阵就叫Design Matrix。它的每一行代表一个数据样本,每一列代表一种特征。也就是

$$
X = \begin{bmatrix}
\text{---} \ (x^{(1)})^T \ \text{---} \\
\text{---} \ (x^{(2)})^T \ \text{---} \\
\vdots \\
\text{---} \ (x^{(n)})^T \ \text{---}
\end{bmatrix}
$$

现在,如果我们用这个矩阵 $X$ 去乘以参数向量 $\theta$:

$$
X \theta =
\begin{bmatrix}
1 & 100 & 2 \\
1 & 120 & 3 \\
1 & 80 & 2
\end{bmatrix}
\begin{bmatrix}
\theta_0 \\
\theta_1 \\
\theta_2
\end{bmatrix}
$$

根据矩阵乘法规则(行乘以列),结果是一个向量:

$$\begin{bmatrix} 1\cdot\theta_0 + 100\cdot\theta_1 + 2\cdot\theta_2 \\ 1\cdot\theta_0 + 120\cdot\theta_1 + 3\cdot\theta_2 \\ 1\cdot\theta_0 + 80\cdot\theta_1 + 2\cdot\theta_2 \end{bmatrix} = \begin{bmatrix} \hat{y}_1 \\ \hat{y}_2 \\ \hat{y}_3 \end{bmatrix} = \hat{y}$$

这样我们通过一次 $X\theta$ 运算,同时算出了所有房子的预测值向量 $\hat{y}$。

由于我们的线性回归的目标是最小化所有误差的平方和:$(y_1 - \hat{y}_1)^2 + (y_2 - \hat{y}_2)^2 + (y_3 - \hat{y}_3)^2$。

通过向量运算可得:

$$\text{Error Vector } e = y - \hat{y} = y - X\theta = \begin{bmatrix} y_1 - \hat{y}_1 \\ y_2 - \hat{y}_2 \\ y_3 - \hat{y}_3 \end{bmatrix}$$

这时你发现向量的模长平方就正好是元素的平方和:

$$|e|^2 = e^T e = (y - X\theta)^T (y - X\theta)$$

于是,我们的总损失函数(Empirical Risk)可以写成极其优雅的向量模长平方形式:
$$J(\theta) = | X\theta - y |^2 = (X\theta - y)^T (X\theta - y)$$


最小化损失

由于我们的目标是找到能让损失函数$J(\theta)$最小化的值$\theta$,这意味着我们需要对其求导,让他的结果为0。

首先你会用到这些公式:

线性项求导: $\frac{\partial}{\partial \theta} (a^T \theta) = a$。
二次项求导: $\frac{\partial}{\partial \theta} (\theta^T A \theta) = 2A\theta$。只有$A$是对称矩阵才有效。

回顾我们的目标函数:
$$J(\theta) = \underbrace{\theta^T (X^T X) \theta}_{\text{二次项}} - \underbrace{2 (X^T y)^T \theta}_{\text{线性项}} + \underbrace{y^T y}_{\text{常数项}}$$

  1. 对第一项求导:
    $A = X^T X$。这是一个对称矩阵。
    导数 $= 2 (X^T X) \theta$。

  2. 对第二项求导:
    这是 $-2 a^T \theta$ 的形式,其中 $a = X^T y$。
    导数 $= -2 X^T y$。

  3. 对第三项求导:
    $y^T y$ 里面没有 $\theta$,是常数。
    导数 $= 0$。

合并并令为 0:
$$\nabla_\theta J(\theta) = 2 X^T X \theta - 2 X^T y = 0$$

最后求解:
消去 2:
$$X^T X \theta - X^T y = 0$$
移项:
$$X^T X \theta = X^T y$$

现在你眼前的这个公式就是著名的 Normal Equations,或者叫正规方程组。

最后,假设 $X^T X$ 是可逆的,我们在两边左乘 $(X^T X)^{-1}$:
$$\hat{\theta} = (X^T X)^{-1} X^T y$$

这就是线性回归的闭式解 (Closed-form Solution)。有了闭式解,你就不需要通过训练来试错了。只需要把你的数据$X$和$y$塞进来算一下,算出来的$\hat{\theta}$就直接是最佳参数的位置。

虽然这个公式很完美,但在实际编程中(特别是当特征维度$d$特别大,比如$d = 100000$时),计算机可能算不出来或者算得极慢。

原因是因为求逆那一步太慢了。要计算$(X^TX)^{-1}$,如果$X$有100000个特征,那么$X^TX$就是一个$100000 \times 100000$的巨型矩阵。这样的运算复杂度来到了惊人的$O(d^3)$。

上一章我们用MLE找到了让数据概率发生最大的$\theta$值,这一章通过对平方损失进行求导,找到了能够让误差最小化的$\theta$值。

如果我们假设误差服从高斯分布,那么这两种方法算出来的$\theta$实际上是一样的。这不是巧合——我们马上会在"上强度的部分"证明这一点!


泛化与评估

既然我们已经算出了最优的$\hat{\theta}$,但实际上故事还远没有结束。

由于我们在求导计算时,一直使用的是训练数据集,得到的$\hat{\theta}$也确实让训练数据集的误差最小化了,但即便loss = 0这可能会导致模型在真实数据上的表现非常差。

隆重介绍,过拟合 (Overfitting)。过拟合代表模型在训练数据集上的表现不错,但是对后来新数据的泛化能力太差。

还是房价预测,你用了一个很复杂的模型,你的线性组合里可能用了100次方的多项式,训练出来的线像蛇一样扭曲,完美穿过了每一个训练数据样本。那么你的训练误差在这种情况下就是0。

然后我们将这个模型正式纳入使用了。这时来了一个新的数据,但是你训练的多项式可能会给出一个及其离谱的天价或者白菜价。因为你过拟合了,多项式在学到数据规律的同时,也迎合并学习了训练数据中的噪音。你的模型学歪了。

这就是为什么我们还需要使用测试集 (Test Set)。当模型在使用训练数据集训练的时候,模型不会接触到这些测试集的内容。

那么我们应当如何正确使用测试集呢?如何使用测试集来告诉我们算出的参数到底有多好?

残差

对于每一个数据点$i$,我们都有它们的:

真实值$y_i$,
预测值$f(x_i) = \hat{\theta}^{T}x_i$

那么即可通过计算残差 (Residual) 来衡量每个点的“预测错误量”:

$$r_i = |y_i - f(x_i)|$$

理论来讲,如果数据存在一个完美线性关系,那么所有的残差都为0。但是在现实中,由于噪音的存在,残差是不可避免的。

均方误差 (MSE)

假设测试集一共有$m$个样本,则均方误差MSE可通过这个公式求得:

$$MSE_{test} = \frac{1}{m} \sum_{i=n+1}^{n+p} (\hat{\theta}^T x_i - y_i)^2$$

如果算出的$MSE=0$,那么说明bro的模型非常不赖,能做到完美预测。
如果$MSE$很大,那么这就说明模型在这些没见过的测试数据上表现很差。

之所以要平方是因为我们沿用了惩罚大误差的思路。与之前一样,错了 10 的惩罚是 100,错了 1 的惩罚是 1。

计算平均$\frac{1}{m}$的目的是为了让这个指标与数据集的大小无关。无论测试集是 100 个还是 10000 个,MSE 都是同一个量级的,方便比较。

我们在训练时最小化的是Training MSE,但我们真正考核的是Test MSE。如果 Training MSE 很低(0.01),但 Test MSE 很高(100.0),这就是典型的过拟合现象。

Training MSE 低 + Test MSE 高 = 过拟合。下一章的正则化就是专门对付它的武器。


逻辑回归

如果你用线性回归来做 二分类 (Binary Classification),会发生什么?
线性回归输出的是一个实数 $y \in \mathbb{R}$,$z = \theta^Tx$,比如 0.8,1.5,甚至 -100。但我们要的是概率 $P \in [0, 1]$,这样更好解释。

这就引出了逻辑回归 (Logistic Regression) 的概念。我们需要的是一个函数,把线性回归那条直直的线“压弯”,压进 [0, 1] 的区间里。

这个函数就是 Sigmoid Function (或者叫 Logistic Function),记作 $\sigma(z)$。
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$

公式该怎么用呢?

  1. 首先算线性得分:$z = \theta^T x$ (范围从 $-\infty$ 到 $+\infty$)。
  2. 再通过 Sigmoid:$h_\theta(x) = \sigma(\theta^T x) = \frac{1}{1 + e^{-\theta^T x}}$。接下来判断:
    • 如果 $\theta^T x$ 很大(比如 100),$e^{-100} \approx 0$,则结果趋近 1。
    • 如果 $\theta^T x$ 很小(比如 -100),$e^{100}$ 很大,分母巨大,结果趋近 0。

上强度的部分

不要觉得上强度就代表不考了。祝你对这部分的内容能有一个不错的理解。

这一节我们要做两件事:

  1. 证明"最小化平方误差"和"高斯噪声下的MLE"是同一件事
  2. 看看当MLE崩溃时,MAP(岭回归) 如何拯救我们

概率视角下的线性回归

概念有关的内容应该解释的比较透彻了。这里我们来从数学的视角更近一步,来近距离看看这背后的数学原理是怎样的。

之前我们定义了Loss = $(y - \hat{y})^2$,也就是平方损失公式里面的$(y_i - f(x_i))^2$。$y_i$是真实的标签,$f(x_i)$是模型算出来的预测值,而我们一般简写为$\hat{y}_i$。

那么我们为什么用平方?为什么不是绝对值?

统计模型假设

首先我们不再仅仅把 $y$ 看作一个数值,而是看作一个随机变量
$$y = \theta^T x + \epsilon$$
其中我们定义:

  • $\theta^T x$ 是确定性的预测部分。
  • $\epsilon$ 是噪音 (Noise)。
  • 这里做出一个关键假设:噪音服从高斯分布 $\epsilon \sim \mathcal{N}(0, \sigma^2)$。

那么这就这意味着,给定 $x$,真实的 $y$ 会服从一个以 $\theta^T x$ 为中心的高斯分布:
$$p(y | x) \sim \mathcal{N}(\theta^T x, \sigma^2)$$

带入高斯分布的概率密度函数 (PDF) 就是:
$$p(y | x; \theta) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( - \frac{(y - \theta^T x)^2}{2\sigma^2} \right)$$

运用MLE推导

我们在 MLE 那一章学过,为了估计参数 $\theta$,我们要最大化似然函数 $L(\theta)$
$$L(\theta) = \prod_{i=1}^n p(y_i | x_i; \theta)$$

取对数 Log-Likelihood:
$$\ell(\theta) = \sum_{i=1}^n \log p(y_i | x_i; \theta)$$

代入高斯 PDF 公式:
$$\ell(\theta) = \sum_{i=1}^n \left[ \log(\text{const}) - \frac{(y_i - \theta^T x_i)^2}{2\sigma^2} \right]$$

我们的目标是最大化$\ell(\theta)$,即是最大化 $-\frac{1}{2\sigma^2} \sum (y_i - \theta^T x_i)^2$,实际上你发现同样等价于最小化$\sum (y_i - \theta^T x_i)^2$。

到这里,我们发现最小二乘法 (Least Square) 得出的结论和高斯噪声假设下的MLE结论一致。
最小二乘法实际上就是我们一直用的那个策略:“找一组参数,让所有误差的平方和最小” 的名字。只要你的目标函数是$\sum(Error)^2$,那么你运用的策略就是最小二乘法。而我们之前推导出的正规方程组,就是最小二乘法的解。

这赋予了平方损失函数极强的理论正当性。如果你相信世界上的噪音大多是高斯分布(根据中心极限定理,这通常是对的),那么用平方损失就是最正确的选择。

实际上两个方法算出的结论吻合算是哲学角度的背书。

如果有人问你:"凭什么用平方误差?为什么不用绝对值误差$|y - \hat{y}|$,或者误差的四次方?"如果只用最小二乘法得出的结论,你只能回答 "因为平方比较好算导数"。

哦哦有点弱。

但是你通过MLE也得出了这样的结论,你就可以回答 "因为我相信数据中的噪音是遵循高斯分布的,而在高斯分布的假设下,MLE的数学推导推出来的结果就正好是平方误差"。
现在你就证明了最小二乘法不仅是好算,而且在统计学方面也是最优解。

还记得Ch3我们说的"MLE = 让数据出现概率最大"吗?这里我们证明了:在高斯噪声假设下,MLE = 最小化平方误差。两条看似不同的路,最终汇合到了同一点。


岭回归 (Ridge Regression)

但是线性回归有一个致命弱点。

如果特征之间的高度相关,或者特征数量$d$大于样板量$n$,那么这就导致矩阵$X^TX$不可逆。

假设你有100个未知数,但是只给了你10个方程。这时候方程组就会有无穷组解。

在矩阵代数中,这意味着矩阵$X$秩(rank)最多只有$n$。而因为$X^TX$是大小为$d \times d$的矩阵,由于$n < d$,因此它不满秩,行列式为0,固然不可逆。

因此模型会变得过拟合,参数$\theta$会变得巨大无比。

你猜为什么过拟合能够做到穿过近乎每一个参数点?正因为函数穿过了好几个带有噪音的点,那么模型会把线扭曲的极度剧烈。

在数学上,为了抵消某些特征的影响来达到这种扭曲,权重往往需要正负抵消且数值巨大。比如$\theta_1 = 10000$, $\theta_2 = -9999$。

正因如此,如果我们看到$\theta$的值很大,那么这通常意味着模型过拟合了,或者至少你能知道模型可能出问题了。这就是为什么我们需要使用岭回归来惩罚大$\theta$。

我们在岭回归中通过引入正则化 (Regularization) 来解决这个问题。

运用MAP

回想之前学过的内容,MLE只看数据,所以我们还有MAP用。MAP = MLE + Prior。
这一次,我们不仅假设数据存在符合高斯分布的噪音,我们还要添加一个先验Prior。我们认为$\theta$的每一个分量都应该接近于0:

$$p(\theta) \sim \mathcal{N}(0, \tau^2 I)$$

也就是说, $\theta$ 服从均值为 0 的高斯分布。

目标函数推导

由于我们的目标还是要最大化后验概率:
$$\text{argmax}_\theta [ \log p(Data | \theta) + \log p(\theta) ]$$

第一项MLE变成了 $-\frac{1}{2\sigma^2} \sum (y - \hat{y})^2$。
第二项Prior变成了 $-\frac{1}{2\tau^2} \sum \theta_j^2$。因为 Prior 是高斯 $e^{-\theta^2}$,取对数剩下 $-\theta^2$。

现在变成了一个$-A-B$的形式。现在我们的目标变成了Maximize $-A-B$。这实际上等价于Minimize $A + B$:

$$\text{Minimize } \sum (y_i - \hat{y}_i)^2 + \frac{\sigma^2}{\tau^2} |\theta|^2$$

将$\lambda = \frac{\sigma^2}{\tau^2}$,我们就得到了最终的公式:

$$J_{Ridge}(\theta) = \sum_{i=1}^n (y_i - \hat{y}_i)^2 + \lambda |\theta|^2$$

也就是

$$J_{Ridge}(\theta) = \sum_{i=1}^n (y_i - \theta^T x_i)^2 + \lambda |\theta|^2$$

公式里的 $\lambda |\theta|^2$ 叫做L2正则项。它的作用是惩罚大的参数。更多有关正则化的内容在后面有单独的一章来讲。

还记得Ch3的MAP公式吗?$\text{MAP} = \text{MLE} + \text{Prior}$。这里的岭回归就是MAP的具体实现:Prior是"参数应该接近0的高斯分布",体现为$\lambda|\theta|^2$这个惩罚项。


逻辑回归的数学解剖

逻辑回归的核心在于,我们如何使用一个线性的$z = \theta^Tx$去预测一个二元的$y$。

复盘一下我们要在逻辑回归做的事情:算了一个分数$z = \theta^Tx$。为了表述0-1之间的概率我们使用Sigmoid把分数压到了[0, 1]范围内。

在这里我们定$y \in {-1, 1}$。因为只要这样设置标签,我们就可以把$P(y=1)$和$P(y=-1)$的公式合并成一个来搞定所有样本:

首先我们要定义模型。这一步为了把分数转变为概率:

$$P(y=1|x) = \sigma(\theta^T x) = \frac{1}{1 + \exp(-\theta^T x)}$$

$$P(y=-1|x) = 1 - P(y=1|x) = \frac{\exp(-\theta^T x)}{1 + \exp(-\theta^T x)} = \frac{1}{1 + \exp(\theta^T x)}$$

接下来请观察分母里的指数项,你会发现:

  • 当 $y=1$ 时,指数是 $-\theta^T x = -(1)\theta^T x$。
  • 当 $y=-1$ 时,指数是 $+\theta^T x = -(-1)\theta^T x$。

因此,我们可以把两个概率合并成一个极其优雅的公式:

$$P(y|x) = \frac{1}{1 + \exp(-y \theta^T x)}$$

这个公式用于求导时非常方便。

MLE的问题

有了模型,我们还是需要找到一个让猜对数据概率最大的$\theta$值。

老样子,我们的目标是想要最大化 Log-Likelihood:
$$\max_\theta \sum_{i=1}^n \log P(y_i | x_i) = \max_\theta \sum_{i=1}^n -\log(1 + \exp(-y_i \theta^T x_i))$$

但是在这里暴露出了一个MLE在逻辑回归中的致命缺陷。如果数据是线性可分的 (Linearly Separable),MLE 会崩溃。

为什么呢?假设你能画一条线把正负样本完美分开。为了让 $P(y_i|x_i)$ 尽可能接近 1,模型会拼命让 $y_i \theta^T x_i$ 变得无穷大。而结果是,参数 $|\theta|$ 会趋向于无穷大

在这之后,你的概率输出不再是平滑的 S 型曲线,而变成了一个硬邦邦的阶跃函数(Step Function)。这就让模型变得极度过拟合。

MAP的解决方案

为了防止 $\theta$ 爆炸,我们像刚才那样,引入先验 $P(\theta) \sim \mathcal{N}(0, \frac{1}{\lambda}I)$。这等价于在 Loss Function 后面加一个 L2 正则项。这里我们要求$\theta$不能太大。

最终的优化目标:

$$\min_\theta \sum_{i=1}^n \log(1 + \exp(-y_i \theta^T x_i)) + \frac{\lambda}{2} |\theta|^2$$

这就是我们在工业界实际使用的逻辑回归标准公式。落实到操作上,我们做的实际上就是在原来的Loss后面加了一个罚项$\lambda||\theta||^2$

做完MAP,我们就可以找到最好的参数,同时防止参数爆炸了。


随机梯度下降

这部分太硬核了不知道教授为何要对一个可爱的大二学生这样做。

如果你去发挥互联网的力量,你可以知道标准的梯度下降 (Gradient Descent, GD) 更新规则是:

$$\theta_{t+1} = \theta_t - \eta \sum_{i=1}^n \nabla_\theta \ell(x_i, y_i, \theta)$$

我们有了目标函数,你需要计算梯度下降的方向,来告诉计算机该往哪个方向做优化。

但是那个求和符号 $\sum_{i=1}^n$导致你的模型每走一步就都要把 $n$ 个数据全算一遍。如果 $n=1000000$,那么算一次梯度要几秒钟,训练完需要几天。

那么聪明的你就在想了:既然总梯度是所有样本梯度的和,那么我随机抽一个样本算出来的梯度,其实就是总梯度在期望意义上的无偏估计 (Unbiased Estimate) 啊!每次只随机一个数据点,算个梯度就走一步,何尝不是一种不错的策略?

$$\theta_{t+1} = \theta_t - \eta \nabla_\theta \ell(\tilde{x}, \tilde{y}, \theta) - \eta \lambda \theta$$

这里 $(\tilde{x}, \tilde{y})$ 是就是随机抽的一个样本。注意公式里还有一个 $-\eta \lambda \theta$,这是正则项 $\frac{\lambda}{2}|\theta|^2$ 的导数。

那么我们可以尝试手推一下逻辑回归的梯度:

针对单个样本的目标函数是:
$$\ell(\theta) = \log(1 + \exp(-y \theta^T x))$$

根据链式法则:

  1. 外层求导 ($\log u$):
    $$\frac{\partial \ell}{\partial u} = \frac{1}{u} = \frac{1}{1 + \exp(-y \theta^T x)}$$
  2. 中间层求导 ($1 + e^v$):
    $$\frac{\partial u}{\partial v} = e^v = \exp(-y \theta^T x)$$
  3. 内层求导 ($-y \theta^T x$) 对 $\theta$:
    这是一次项求导,结果是系数。
    $$\frac{\partial v}{\partial \theta} = -yx$$

相乘:
$$\nabla_\theta \ell = \frac{1}{1 + \exp(-y \theta^T x)} \cdot \exp(-y \theta^T x) \cdot (-yx)$$

这一步具体推导了针对逻辑回归的这个特定的Loss,$\nabla l$到底该长什么样。这个梯度的物理意义是:

  • 前面两项乘积其实是 $P(\text{Incorrect Prediction} | x)$。如果预测得很准($P \approx 1$),梯度就接近 0,不需要更新。
  • 如果预测得很差,梯度就很大,方向由 $-yx$ 决定。

稳定SGD

由于SGD是随机抽样,它的路径会像醉汉一样摇摇晃晃,存在一个相对高的方差。好在我们有将他变稳定的手段:

  1. Polyak-Ruppert Averaging (参数平均):
    与其取最后一步的 $\theta_T$,而是取路径上所有 $\theta$ 的平均值 $\bar{\theta} = \frac{1}{T} \sum \theta_t$。

    这个方法的思想大概是,虽然我们一直在震荡,但震荡的中心往往就是最优解。

  2. Step-size Decay (步长衰减):
    让学习率 $\eta_t = \eta_0 / \sqrt{t}$。
    让你的步长随着训练的过程逐渐衰减。

经过SGD之后,你的算法在海量数据上就也能跑动了!


本章小结

这一章我们从理论走向了实战,完成了两个核心模型:

线性回归

  • 目标:找$\theta$使得$\sum(y - \theta^Tx)^2$最小
  • 闭式解:$\hat{\theta} = (X^TX)^{-1}X^Ty$(但大数据时太慢)
  • 深层含义:等价于假设高斯噪声下的MLE

逻辑回归

  • 目标:二分类,输出概率$P(y=1|x) = \sigma(\theta^Tx)$
  • 损失函数:交叉熵 / Log Loss
  • 优化:SGD(因为没有闭式解)

你会发现之前学到的概念在这里又杀回来了:

概念 Ch3的名字 Ch4的名字
让数据概率最大 MLE 最小化平方误差
加入先验约束 MAP 岭回归(L2正则化)

Loss + Regularization = MAP with Prior。这个公式会在下一章被深入展开。

不难发现本章我们反复提到一个词:过拟合。当模型太复杂、参数太大时,它会在训练集上完美、在测试集上稀烂。

岭回归通过惩罚大参数来缓解这个问题,但这只是冰山一角。下一章,我们将系统性地学习正则化——L1、L2、以及它们背后的贝叶斯解释。你会发现,正则化不仅是一个技巧,更是一种深刻的哲学:简单的模型更可能是对的