
机器学习数学推导(六):逻辑回归与分类
从 Sigmoid 到 Softmax,完整推导逻辑回归——交叉熵损失、梯度计算、正则化与多分类扩展,附 Python 验证。
开篇。线性回归可以将输入映射到任意实数——但如果输出必须是 0 到 1 之间的概率呢?逻辑回归通过一个优雅的技巧解决了这个问题:使用 Sigmoid 压缩函数。尽管名字里有“回归”,逻辑回归实际上是一种分类算法,其数学原理更是支撑着现代神经网络中每一个神经元的计算。

你将学到什么#
- 为什么 Sigmoid 是将实数值分数转化为概率的自然选择,以及它的导数为何如此简洁;
- 如何仅用两行推导,从最大似然估计直接得出交叉熵损失;
- 为什么在分类任务中交叉熵优于均方误差(MSE)——通过梯度消失现象的直观解释;
- 二分类与多分类(Softmax)情形下的完整梯度与 Hessian 矩阵推导,并理解损失函数为何是凸的;
- L1、L2 与弹性网络(Elastic Net)正则化,以及它们背后隐藏的贝叶斯先验;
- 决策边界的几何意义,以及在类别不平衡场景下真正需要的无阈值评估指标(ROC / PR / AUC)。
前置知识#
- 微积分:掌握链式法则与偏导数;
- 线性代数:熟悉矩阵乘法与转置;
- 概率论:了解伯努利分布、类别分布与似然函数;
- 已阅读 第 5 篇:线性回归 。
从线性模型到概率分类#
原始线性输出的问题#
线性回归给出 $\hat y = \mathbf{w}^\top \mathbf{x}$ ,其取值无界。用于分类时,会出现两个问题:
- 范围不受限:$\mathbf{w}^\top \mathbf{x} \in (-\infty, +\infty)$ ,但类别标签只能取有限集合中的值;
- 缺乏概率语义:例如,“这封邮件是垃圾邮件的概率是多少?”在线性回归的实数输出中无法回答。
解决方法是引入一个链接函数,将线性得分压缩到 $[0, 1]$ 区间。标准选择就是 Sigmoid 函数。
Sigmoid 函数#

可将其视为一个“软开关”:当 $z$ 极负时,输出接近 0;当 $z$ 极正时,输出接近 1;在原点处恰好为 0.5。上图还展示了 $z = 0$ 处的切线,其斜率为 $1/4$ ——这是 Sigmoid 能达到的最大斜率,这一事实将在后文反复用到。
Sigmoid 具备三个使其在数学上极为优美的性质。
性质 1 —— 输出范围:对任意 $z \in \mathbb{R}$ ,均有 $0 < \sigma(z) < 1$ ,因此输出可直接解释为有效概率。
性质 2 —— 对称性:$\sigma(-z) = 1 - \sigma(z)$ 。这一性质使我们能以统一形式表达 $P(y=0\mid \mathbf{x})$ 与 $P(y=1\mid \mathbf{x})$ 。
$$\sigma(-z) = \frac{1}{1 + e^{z}} = \frac{e^{-z}}{1 + e^{-z}} = 1 - \sigma(z). \quad\square$$性质 3 —— 自表达导数:$\sigma'(z) = \sigma(z)\bigl(1 - \sigma(z)\bigr)$ 。正是这一性质,使得交叉熵梯度最终简化为一行。
$$ \sigma'(z) = \frac{e^{-z}}{(1 + e^{-z})^2} = \frac{1}{1 + e^{-z}} \cdot \frac{e^{-z}}{1 + e^{-z}} = \sigma(z)\bigl(1 - \sigma(z)\bigr). \quad\square $$ | |
逻辑回归模型#

当 $y = 1$ 时返回 $\hat y$ ,当 $y = 0$ 时返回 $1 - \hat y$ 。上图展示了该模型的几何结构:决策边界 $\mathbf{w}^\top\mathbf{x} = 0$ 是一个超平面,橙色箭头 $\mathbf{w}$ 即为其法向量——沿 $\mathbf{w}$ 方向移动,预测概率会从 0.5 向 1 推进。
最大似然估计与交叉熵损失#
构造似然函数#
$$ L(\mathbf{w}) = \prod_{i=1}^N P(y_i \mid \mathbf{x}_i; \mathbf{w}) = \prod_{i=1}^N \hat y_i^{\,y_i}(1 - \hat y_i)^{1 - y_i}. $$我们的目标是找到使观测标签最可能的参数 $\mathbf{w}$ 。
从对数似然到交叉熵#
$$\ell(\mathbf{w}) = \sum_{i=1}^N \bigl[\, y_i \ln \hat y_i + (1 - y_i)\ln(1 - \hat y_i) \,\bigr].$$ $$\boxed{\;\mathcal{L}(\mathbf{w}) = -\frac{1}{N} \sum_{i=1}^N \bigl[\, y_i \ln \hat y_i + (1 - y_i)\ln(1 - \hat y_i) \,\bigr].\;}$$信息论视角:交叉熵 $H(p, q) = -\sum_x p(x) \ln q(x)$ 衡量的是用针对分布 $q$ 优化的编码去表示来自 $p$ 的样本时所需的额外比特数。此处 $p$ 是硬 one-hot 标签,$q$ 是 Sigmoid 输出,因此最小化 $\mathcal{L}$ 就是将预测分布拉向真实数据分布。
为什么不用 MSE?#

其中额外因子 $\hat y(1-\hat y)$ 最大值为 $1/4$ ,且当 $\hat y$ 接近 0 或 1 时趋近于零。因此,若模型自信地犯错(如 $\hat y \approx 0$ 但 $y = 1$ ),MSE 几乎不产生梯度,学习过程会停滞。
$$\frac{\partial \mathcal{L}_{\text{CE}}}{\partial z} = \hat y - y.$$上图右侧面板清晰展示了这一点:当 $y = 1$ 且模型预测 $\hat y \approx 0$ 时,交叉熵梯度接近最大值(强力修正!),而 MSE 梯度几乎为零(放弃学习)。
自信犯错的具体数字:设真实标签 $y=1$ ,模型预测 $\hat y = 0.01$ (即 $z \approx -4.6$ ,自信地说"是负类")。
- MSE 对 $z$ 的梯度:$(\hat y - y)\,\hat y(1-\hat y) = (-0.99)(0.01)(0.99) \approx -0.0098$ ;
- CE 对 $z$ 的梯度:$\hat y - y = -0.99$ 。
差距正好是 $\hat y(1-\hat y) \approx 0.01$ 倍——MSE 把修正信号衰减了100 倍,于是自信错的样本几乎不被纠正。换成 $\hat y = 0.001$ 会差到 1000 倍。这就是为什么 sigmoid + MSE 训练分类器经常"卡住不动",而 sigmoid + CE 一上来就猛拉错样本——CE 的设计本身把 sigmoid 的饱和因子约掉了。
| |
梯度推导与优化#
关键的约简#
$$ \frac{\partial \mathcal{L}}{\partial \mathbf{w}} = \frac{\partial \mathcal{L}}{\partial \hat y} \cdot \frac{\partial \hat y}{\partial z} \cdot \frac{\partial z}{\partial \mathbf{w}}. $$- 损失对预测值的导数:$\dfrac{\partial \mathcal{L}}{\partial \hat y} = -\dfrac{y}{\hat y} + \dfrac{1 - y}{1 - \hat y}$ ;
- Sigmoid 导数(性质 3):$\dfrac{\partial \hat y}{\partial z} = \hat y(1 - \hat y)$ ;
- 线性部分:$\dfrac{\partial z}{\partial \mathbf{w}} = \mathbf{x}$ 。
全批量梯度#
$$\nabla_{\mathbf{w}} \mathcal{L} = \frac{1}{N}\sum_{i=1}^N (\hat y_i - y_i)\,\mathbf{x}_i = \frac{1}{N}\,\mathbf{X}^\top(\hat{\mathbf{y}} - \mathbf{y}),$$其中 $\mathbf{X} \in \mathbb{R}^{N \times d}$ 为数据矩阵。
Hessian 与凸性#
$$\nabla^2 \mathcal{L} = \frac{1}{N}\sum_{i=1}^N \hat y_i(1 - \hat y_i)\,\mathbf{x}_i \mathbf{x}_i^\top = \frac{1}{N}\,\mathbf{X}^\top \mathbf{S}\, \mathbf{X},$$ $$ \mathbf{v}^\top \nabla^2 \mathcal{L}\, \mathbf{v} = \frac{1}{N} \sum_i \hat y_i(1 - \hat y_i)(\mathbf{v}^\top \mathbf{x}_i)^2 \geq 0, $$故 Hessian 半正定,损失函数为凸函数。这意味着存在唯一全局最优解,任何合理优化器都能找到它。
| |
优化变体#
- 批量梯度下降(BGD):$\mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \tfrac{1}{N}\mathbf{X}^\top(\hat{\mathbf{y}} - \mathbf{y})$ 。稳定但每轮较慢;
- 随机梯度下降(SGD):$\mathbf{w} \leftarrow \mathbf{w} - \eta(\hat y_i - y_i)\mathbf{x}_i$ (随机选一个 $i$ )。噪声大,但可扩展至海量数据;
- 小批量梯度下降:在大小为 $b$ 的批次上平均梯度。实践中默认选择;
- 牛顿法 / IRLS:利用 $\nabla^2 \mathcal{L}$ 实现二次收敛——因 Hessian 易算且半正定,此方法可行。
多分类扩展:Softmax 回归#

从二分类到 $K$ 类#
$$P(y = k \mid \mathbf{x}) = \frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}}.$$Softmax 是一种软 argmax:对各得分取指数(确保为正),再归一化(确保和为 1)。得分最高的类别获得最多概率质量,但所有类别仍分得非零份额。

几何上,每个 Softmax 输出都是概率单纯形中的一个点——上图展示了 $K=3$ 时的三角形。顶点代表确定性预测;中心 $(1/3, 1/3, 1/3)$ 表示最大不确定性;图中 logits 示例说明:得分越集中,决策越明确。
$$P = (0.665,\ 0.245,\ 0.090).$$最大类拿走 66.5%,但另外两类仍有 24.5% 和 9% 的"软"质量——softmax 永远不会输出严格的 0 或 1。
把每个 logit 都加 100:$z' = (102, 101, 100)$ ,平移之后还是 $(0, -1, -2)$ ,所以 $P' = P$ ——softmax 对常数平移不变,这正是数值稳定实现要先减去 $\max$ 的原因。
把每个 logit 都乘以 10:$z'' = (20, 10, 0)$ ,结果 $P'' \approx (0.99995,\ 0.0000454,\ 2\times 10^{-9})$ ——温度变冷,分布坍塌到单点。深度学习里调"softmax 温度" $z/T$ 用的就是这一性质:$T<1$ 让模型更尖锐,$T>1$ 让模型更平滑。
如果真实标签是类别 0(one-hot $t = (1,0,0)$ ),损失 $\mathcal{L} = -\ln 0.665 \approx 0.408$ ,输出层梯度 $P - t = (-0.335,\ 0.245,\ 0.090)$ ——正确类被往上推 0.335,两个错类被往下压。如果真实标签是类别 2(“自信犯错”),损失 $\mathcal{L} = -\ln 0.090 \approx 2.41$ ,梯度 $(0.665,\ 0.245,\ -0.910)$ ,第三类的修正项达到 0.91——和二分类里 sigmoid 的 $\hat y - y$ 一脉相承。
One-Hot 标签下的交叉熵#
$$ \mathcal{L} = -\sum_{k=1}^K t_k \ln P(y = k \mid \mathbf{x}) = -\ln P(y = c \mid \mathbf{x}) = -z_c + \ln \sum_{j=1}^K e^{z_j}. $$这就是多分类的负对数似然。
Softmax 梯度——形式依旧简洁#
对 $z_k$ 求导:
- 若 $k = c$ :$\dfrac{\partial \mathcal{L}}{\partial z_c} = -1 + P_c$ ;
- 若 $k \neq c$ :$\dfrac{\partial \mathcal{L}}{\partial z_k} = P_k$ 。
其中 $\mathbf{W} \in \mathbb{R}^{d \times K}$ 为按列堆叠的各类权重向量。
| |
正则化#
L2(岭回归)#
$$\mathcal{L}_{\text{reg}} = \mathcal{L} + \frac{\lambda}{2}\|\mathbf{w}\|_2^2.$$ $$\mathbf{w} \leftarrow (1 - \eta\lambda)\mathbf{w} - \frac{\eta}{N}\mathbf{X}^\top(\hat{\mathbf{y}} - \mathbf{y}).$$贝叶斯视角:L2 对应高斯先验 $\mathbf{w} \sim \mathcal{N}(\mathbf{0}, \tfrac{1}{\lambda}\mathbf{I})$ 下的 MAP 估计。
L1(Lasso)#
$$ \mathcal{L}_{\text{reg}} = \mathcal{L} + \lambda \|\mathbf{w}\|_1. $$L1 在零点不可导;使用次梯度 $\partial_{w_j}\|\mathbf{w}\|_1 = \operatorname{sign}(w_j)$ 得到 proximal / 软阈值更新。该惩罚在原点的尖角会将许多系数精确推至零,实现自动特征选择。
贝叶斯视角:L1 对应拉普拉斯先验 $p(w_j) \propto e^{-\lambda |w_j|}$ ,其在零点的尖峰正是稀疏性的来源。
弹性网络#
$$\mathcal{L}_{\text{reg}} = \mathcal{L} + \lambda_1 \|\mathbf{w}\|_1 + \frac{\lambda_2}{2}\|\mathbf{w}\|_2^2.$$结合 L1 的稀疏性与 L2 在特征相关时的稳定性。
决策边界与几何#
二分类边界#
$$\mathbf{w}^\top \mathbf{x} + b = 0.$$ $$d = \frac{\mathbf{w}^\top \mathbf{x}_0 + b}{\|\mathbf{w}\|},$$而 $|d|$ 正是模型对 $\mathbf{x}_0$ 分类置信度的度量。

上图明确展示了三点:
- 边界是超平面(二维中为直线);
- 权重向量 $\mathbf{w}$ 是该超平面的法向量;
- 范数 $\|\mathbf{w}\|$ 控制概率过渡的陡峭程度:$\|\mathbf{w}\|$ 越大,$\hat y$ 从约 0.27 到 0.73 的过渡带越窄。
多分类区域#
$$(\mathbf{w}_j - \mathbf{w}_k)^\top \mathbf{x} + (b_j - b_k) = 0,$$因此所有成对边界仍为线性。
模型评估#
混淆矩阵与核心指标#
二分类混淆矩阵如下:
| 预测为正 | 预测为负 | |
|---|---|---|
| 实际为正 | TP | FN |
| 实际为负 | FP | TN |
精确率可理解为“我标记为正的样本中,有多少是真的?”,召回率则是“所有真实正样本中,我找出了多少?”。只优化其中一个几乎总是错误的。
类别不平衡:准确率的陷阱#

当正类稀少时(如 95% 负样本,5% 正样本),一个始终预测负类的“平凡”分类器也能达到 95% 准确率,却完全无用——它从未发现任何正例。右侧面板中的训练模型虽牺牲少许准确率,却真正解决了问题:其 $F_1$ 显著更高,尽管准确率略低。教训是:类别不平衡时,必须结合精确率、召回率与 $F_1$ 评估模型。
ROC、PR 与 AUC#
调整阈值 $\tau$ (“当 $\hat y \geq \tau$ 时预测为正”)可绘制两条曲线:
- ROC:TPR(= Recall)vs FPR(= $FP / (FP + TN)$ );
- PR:精确率 vs 召回率。

AUC 为 ROC 曲线下面积。AUC = 1 表示完美排序,AUC = 0.5 表示随机猜测。其还有清晰的概率解释:AUC 等于“随机抽取一个正样本与一个负样本,正样本得分更高的概率”。
当正样本极少时,PR 曲线与平均精度(AP)通常比 ROC 更具信息量,因为 ROC 中 FPR 的分母 $FP + TN$ 被庞大的负类主导,掩盖了模型差异。
实现细节#
数值稳定的 Sigmoid#
当 $z$ 极负时,$e^{-z}$ 会溢出。应使用分段形式:
| |
数值稳定的 Softmax#
直接计算 $e^{z_k}$ 在 logits 较大时会溢出。利用 Softmax 的平移不变性 $\operatorname{softmax}(z) = \operatorname{softmax}(z - \max_j z_j)$ :
| |
完整的二分类实现#
| |
完整的多分类实现#
| |
练习题#
练习 1 — Sigmoid 性质#
题目:证明 $\sigma'(z) = \sigma(z)(1 - \sigma(z))$ 与 $\sigma(-z) = 1 - \sigma(z)$ 。
$$ \sigma'(z) = \frac{e^{-z}}{(1+e^{-z})^2} = \sigma(z)\bigl(1-\sigma(z)\bigr), \qquad \sigma(-z) = \frac{1}{1+e^{z}} = 1 - \sigma(z). \quad\square $$练习 2 — 从 MLE 推导交叉熵#
题目:从最大似然估计推导二元交叉熵。
$$\mathcal{L} = -\frac{1}{N}\sum_i \bigl[y_i \ln \hat y_i + (1 - y_i)\ln(1 - \hat y_i)\bigr]. \quad\square$$练习 3 — Softmax 梯度#
题目:推导 Softmax 交叉熵的 $\partial \mathcal{L} / \partial z_k$ 。
$$\frac{\partial \mathcal{L}}{\partial z_k} = P_k - \mathbb{1}[k = c] = P_k - t_k,$$形式与二分类梯度一致。
练习 4 — 正则化的贝叶斯先验#
题目:L2 与 L1 分别对应什么先验?
解答:L2 ↔ 高斯先验 $\mathbf{w} \sim \mathcal{N}(\mathbf{0}, \lambda^{-1}\mathbf{I})$ ,因 $-\ln p(\mathbf{w}) \propto \tfrac{\lambda}{2}\|\mathbf{w}\|^2$ ;L1 ↔ 拉普拉斯先验 $p(w_j) \propto e^{-\lambda|w_j|}$ ,其在零点的尖峰导致稀疏 MAP 解。
练习 5 — 决策边界#
题目:说明 $\mathbf{w}^\top\mathbf{x} + b = 0$ 是超平面,并解释 $\mathbf{w}$ 与 $\|\mathbf{w}\|$ 的作用。
解答:该集合是法向量为 $\mathbf{w}$ 、偏移由 $b$ 控制的仿射超平面。$\mathbf{w}$ 的方向决定边界朝向;$\|\mathbf{w}\|$ 控制 Sigmoid 过渡的陡峭程度($\|\mathbf{w}\|$ 越大,$\hat y$ 在边界附近从 ≈0 跃升至 ≈1 的跳变更剧烈)。点 $\mathbf{x}_0$ 到边界的有符号距离为 $d = (\mathbf{w}^\top\mathbf{x}_0 + b)/\|\mathbf{w}\|$ 。
常见问题#
为何叫“逻辑回归”却用于分类?#
历史原因。Logistic 函数最初用于对概率进行回归,分类是后来的应用,但名称沿用至今。
与线性回归的本质区别是什么?#
输出空间与似然假设不同。线性回归假设连续目标服从高斯噪声(MSE = 高斯负对数似然);逻辑回归假设标签服从伯努利分布(CE = 伯努利负对数似然)。二者均为广义线性模型特例,仅链接函数与噪声分布不同。
逻辑回归能处理非线性边界吗?#
本身不能——其边界是输入空间中的超平面。但可通过 (a) 多项式特征、(b) 核方法、或 (c) 嵌入神经网络来获得任意非线性边界,同时保留交叉熵损失。
Softmax 与独立 Sigmoid 有何区别?#
Softmax 强制 $\sum_k P_k = 1$ ,适用于互斥的单标签分类;独立 Sigmoid 允许多标签共存,适用于多标签问题(如一张图同时标注“户外”与“晴天”)。
如何选择正则化强度 $\lambda$ ?#
交叉验证。在 $\lambda \in \{10^{-4}, 10^{-3}, \dots, 10^{2}\}$ 中搜索,选择验证损失最低者(类别不平衡时可用验证 AUC)。
为何逻辑回归是凸优化问题?#
Hessian $\nabla^2 \mathcal{L} = \tfrac{1}{N}\mathbf{X}^\top \mathbf{S}\,\mathbf{X}$ 半正定,因对角元 $\hat y_i(1 - \hat y_i) \in (0, 1/4]$ 非负。凸性 ⇒ 任意局部最优即全局最优。
逻辑回归 vs SVM?#
| 维度 | 逻辑回归 | SVM |
|---|---|---|
| 损失 | 交叉熵 | Hinge loss |
| 输出 | 校准概率 | 决策值 |
| 稀疏性 | 所有样本贡献梯度 | 仅支持向量贡献 |
| 核技巧 | 需适配 | 原生支持 |
| 适用场景 | 概率估计、下游校准 | 硬分类、复杂非线性边界 |
下一步#
逻辑回归把分类问题变成了一个凸优化问题,但它的归纳偏置很硬:决策边界是线性的,特征之间的非线性交互必须靠手工造特征或核技巧绕进来。当问题本身有强非线性、特征之间有交互、数据是表格而非向量时,硬塞进逻辑回归是吃力不讨好。
下一章换一种完全不同的归纳偏置——决策树。决策树不假设线性,不假设可微,甚至不假设特征同质:它对每个特征独立地做轴对齐切分,按信息增益(或基尼)贪心生长。这种"递归地把空间切成长方块"的策略,恰好是表格数据的最优先验。理解树的熵、基尼、剪枝以及它为什么对单调变换不敏感,是后面随机森林、GBDT、XGBoost、LightGBM 一切表格学习器的入场券——它们都只是在树之上叠加方差缩减或梯度提升的外壳。
参考文献#
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. Chapter 4.
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer. Chapter 4.
- Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press. Chapter 8.
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. Chapter 5.
- Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley.
机器学习数学推导 20 篇
- 01 机器学习数学推导(一):绪论与数学基础
- 02 机器学习数学推导(二):线性代数与矩阵论
- 03 机器学习数学推导(三):概率论与统计推断
- 04 机器学习数学推导(四):凸优化理论
- 05 机器学习数学推导(五):线性回归
- 06 机器学习数学推导(六):逻辑回归与分类 当前
- 07 机器学习数学推导(七):决策树
- 08 机器学习数学推导(八):支持向量机
- 09 机器学习数学推导(九):朴素贝叶斯
- 10 机器学习数学推导(十):半朴素贝叶斯与贝叶斯网络
- 11 机器学习数学推导(十一):集成学习
- 12 机器学习数学推导(十二):XGBoost 与 LightGBM
- 13 机器学习数学推导(十三):EM 算法与 GMM
- 14 机器学习数学推导(十四):变分推断与变分 EM
- 15 机器学习数学推导(十五):隐马尔可夫模型
- 16 机器学习数学推导(十六):条件随机场
- 17 机器学习数学推导(十七):降维与主成分分析
- 18 机器学习数学推导(十八):聚类算法
- 19 机器学习数学推导(十九):神经网络与反向传播
- 20 机器学习数学推导(二十):正则化与模型选择