损失函数与正则化#
逻辑回归(Logistic Regression)模型的训练流程与线性回归(Linear Regression)基本一致,但有两点关键区别需要特别注意:
-
逻辑回归使用对数损失(Log Loss)作为损失函数,而不是线性回归里常用的平方损失(Squared Loss)。
-
在训练过程中应用正则化(Regularization)对逻辑回归至关重要,否则模型很容易过拟合(Overfitting)。
接下来的两个小节会分别深入讨论这两点。
对数损失#
在线性回归模块里,我们使用的是平方损失(Squared Loss)(也叫 $L_2$ 损失)作为损失函数。平方损失在线性模型上效果很好——因为线性模型的输出变化率是恒定的。例如,对线性模型 $y' = b + 3x_1$ 来说,每当 $x_1$ 增加 1,$y'$ 就会相应增加 3。
但是逻辑回归模型的输出变化率并不是恒定的。正如在「用 S 型函数计算概率」一节所见,S 型(Sigmoid)曲线是 S 形的,而不是直线。当对数几率 $z$ 接近 0 时,$z$ 的小幅增加会让 $y$ 产生远大于 $z$ 远离 0 时同等变化所带来的变化。下表列出了当输入在 5 到 10 之间时 S 型函数的输出,以及为准确捕捉这些差异所需的精度位数:
| 输入 | S 型函数输出 | 所需精度位数 |
|---|---|---|
| 5 | 0.993 | 3 |
| 6 | 0.997 | 3 |
| 7 | 0.999 | 3 |
| 8 | 0.9997 | 4 |
| 9 | 0.9999 | 4 |
| 10 | 0.99998 | 5 |
如果用平方损失来计算 S 型函数的误差,那么随着输出越来越接近 0 或 1,我们就需要越来越多的内存来保留足够的精度,以跟踪这些极小或极大的数值变化。
因此,逻辑回归采用的损失函数是对数损失(Log Loss)。它的公式返回的是变化幅度的对数,而不是单纯的"数据点到预测值的距离"。对数损失的定义为:
$$\text{Log Loss} = -\frac{1}{N}\sum_{i=1}^{N} \left(y_i \log(y_i') + (1 - y_i)\log(1 - y_i')\right)$$其中:
-
$N$ 是数据集中带标签样本的总数量。
-
$i$ 是数据集中某个样本的索引(例如 $(x_3, y_3)$ 表示数据集中的第 3 个样本)。
-
$y_i$ 是第 $i$ 个样本的标签。由于是逻辑回归任务,$y_i$ 的取值只能是
0或1。 -
$y_i'$ 是模型在给定特征 $x_i$ 的条件下,对第 $i$ 个样本做出的预测值(取值介于 0 和 1 之间)。
关于对数损失的更多说明
上面这种形式计算的是数据集上所有样本的平均对数损失。在实践中我们通常使用平均对数损失(而不是总和),这样可以让批量大小与学习率的调参过程相互独立、互不干扰。
关于对数损失的更深入推导,可以参见文章「逻辑回归损失函数推导:交叉熵与最大似然解析」中的讲解。
逻辑回归中的正则化#
正则化(Regularization)是一种在训练过程中惩罚模型复杂度的机制,在逻辑回归建模中极其重要。
如果不加正则化,由于逻辑回归本身具有的渐近性(输出会无限趋近于 0 或 1),当模型特征数量很多时,损失会被一路推向 0——也就是说模型会严重过拟合训练集。
因此,绝大多数逻辑回归模型都会采用下面两种策略之一来降低模型复杂度:
-
L2 正则化:在损失函数上加上权重幅度的平方和作为惩罚项。
-
提前停止(Early Stopping):限制训练步数,让训练在损失仍在下降但尚未过拟合时提前终止。
说明: 关于正则化的更多内容,你将在课程的「数据集、泛化与过拟合」中进一步学习。
关键术语:
- 梯度下降(Gradient Descent)
- 线性回归(Linear Regression)
- 对数损失(Log Loss)
- 逻辑回归(Logistic Regression)
- 损失函数(Loss Function)
- 过拟合(Overfitting)
- 正则化(Regularization)
- 平方损失(Squared Loss)
小结
逻辑回归的训练流程和线性回归基本相同,但有两个关键差异:使用对数损失和必须施加正则化。
之所以放弃平方损失、改用对数损失,是因为 S 型函数的输出在两端渐近 0 和 1,平方损失会要求越来越多的数值精度;对数损失用对数来衡量误差,对概率预测天然友好。
逻辑回归的渐近性使得损失容易一路降到 0 从而导致过拟合,因此实际中通常借助 L2 正则化 或提前停止来约束模型复杂度。