机器学习数学推导(六):逻辑回归与分类
从Sigmoid到Softmax,完整推导逻辑回归——交叉熵损失、梯度计算、正则化与多分类扩展,附Python验证。
开篇. 线性回归把输入映射成任意实数,但如果输出必须是 0 到 1 之间的概率呢?逻辑回归用一个优雅的小技巧解决了这件事:Sigmoid 压缩函数。它名字里带"回归",骨子里却是分类算法——而且它的数学是现代神经网络中每一个神经元的原型。
你将学到
- 为什么 Sigmoid 是把实数压成概率的"自然"选择,以及它的导数为什么如此干净。
- 如何在两行内从最大似然推出交叉熵损失。
- 在分类任务上交叉熵为什么完胜 MSE——用一张梯度消失图把直觉讲透。
- 二分类与 Softmax 多分类的完整梯度与 Hessian 推导,以及损失为什么严格凸。
- L1 / L2 / Elastic Net 正则化,以及它们背后藏着的贝叶斯先验。
- 决策边界的几何意义,以及类别不平衡下你真正需要的阈值无关指标(ROC / PR / AUC)。
预备知识
- 微积分:链式法则、偏导。
- 线性代数:矩阵乘法、转置。
- 概率论:伯努利分布、类别分布、似然函数。
- 熟悉 第 5 篇:线性回归 。
1. 从线性模型走向概率分类
1.1 原始线性输出的两个问题
线性回归给出 $\hat y = \mathbf{w}^\top \mathbf{x}$,输出范围没有任何限制。换到分类任务,立刻有两件事讲不通:
- 输出无界。 $\mathbf{w}^\top \mathbf{x} \in (-\infty, +\infty)$,但类别标签只能在一个有限集合里。
- 没有概率含义。 “你有多确定这封邮件是垃圾邮件?“在 $\mathbb{R}$ 里没法回答。
解决办法是引入一个链接函数(link function),把线性得分压到 $[0, 1]$ 区间。最经典的选择就是 Sigmoid。
1.2 Sigmoid 函数

Sigmoid(即 logistic 函数)定义为
$$ \sigma(z) = \frac{1}{1 + e^{-z}}. $$把它想成一个"软开关”:$z$ 很负时基本是 $0$,$z$ 很正时基本是 $1$,在原点处刚好取 $0.5$。上图右侧画出的还有 $z=0$ 处的切线,斜率正好是 $1/4$——这是 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 $$ | |
1.3 逻辑回归模型

二分类($y \in \{0, 1\}$)下,模型为
$$ P(y = 1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x}), \qquad P(y = 0 \mid \mathbf{x}) = 1 - \sigma(\mathbf{w}^\top \mathbf{x}). $$利用伯努利分布的概率质量函数,两种情况可以合写成
$$ P(y \mid \mathbf{x}) = \hat y^{\,y} (1 - \hat y)^{1 - y}, \qquad \hat y = \sigma(\mathbf{w}^\top \mathbf{x}). $$$y = 1$ 时它返回 $\hat y$,$y = 0$ 时返回 $1 - \hat y$。上图直观地展示了模型的几何含义:决策边界 $\mathbf{w}^\top\mathbf{x} = 0$ 是一个超平面,橙色箭头 $\mathbf{w}$ 是这条超平面的法向量——沿着 $\mathbf{w}$ 方向走,预测概率从 $0.5$ 一路推向 $1$。
2. 最大似然估计与交叉熵损失
2.1 构造似然函数
给定独立同分布样本 $\{(\mathbf{x}_i, y_i)\}_{i=1}^N$,联合似然为
$$ 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}$。
2.2 从对数似然到交叉熵
取对数(单调变换,最优解不变):
$$ \ell(\mathbf{w}) = \sum_{i=1}^N \bigl[\, y_i \ln \hat y_i + (1 - y_i)\ln(1 - \hat y_i) \,\bigr]. $$最大化 $\ell$ 等价于最小化它的负均值,也就是大名鼎鼎的二元交叉熵损失:
$$ \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}$ 字面意义就是把预测分布往真实分布上拉。
2.3 为什么不能用 MSE?

如果天真地选 MSE 作为损失 $\mathcal{L}_{\text{MSE}} = \tfrac12(\hat y - y)^2$,那么对 logit $z = \mathbf{w}^\top\mathbf{x}$ 的梯度是
$$ \frac{\partial \mathcal{L}_{\text{MSE}}}{\partial z} = (\hat y - y)\,\sigma'(z) = (\hat y - y)\,\hat y(1 - \hat y). $$多出来的 $\hat y(1-\hat y)$ 因子上界是 $1/4$,且当 $\hat y \to 0$ 或 $\hat y \to 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 的梯度却接近零(直接躺平)。
| |
3. 梯度推导与优化
3.1 关键的"约掉"步骤
对单样本,$\mathcal{L} = -\bigl[y \ln \hat y + (1 - y)\ln(1 - \hat y)\bigr]$,其中 $\hat y = \sigma(z)$,$z = \mathbf{w}^\top\mathbf{x}$。链式法则:
$$ \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}$。
把三项乘起来:
$$ \frac{\partial \mathcal{L}}{\partial \mathbf{w}} = \left(-\frac{y}{\hat y} + \frac{1 - y}{1 - \hat y}\right) \cdot \hat y(1 - \hat y) \cdot \mathbf{x} = \bigl[-y(1 - \hat y) + (1 - y)\hat y\bigr]\mathbf{x} = (\hat y - y)\,\mathbf{x}. $$Sigmoid 导数中的 $\hat y$ 和 $1 - \hat y$ 恰好把 $\partial \mathcal{L}/\partial \hat y$ 里的 $1/\hat y$ 和 $1/(1-\hat y)$ 分母约掉,留下漂亮的结果
$$ \boxed{\;\frac{\partial \mathcal{L}}{\partial \mathbf{w}} = (\hat y - y)\,\mathbf{x}.\;} $$3.2 全批量梯度
在 $N$ 个样本上求平均并堆成矩阵:
$$ \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}$ 是数据矩阵。
3.3 Hessian 与凸性
对 $(\hat y_i - y_i)\mathbf{x}_i$ 再求一次导:
$$ \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{S} = \operatorname{diag}\bigl(\hat y_i(1-\hat y_i)\bigr)$。对任意非零向量 $\mathbf{v}$:
$$ \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 半正定,损失函数严格凸——存在唯一全局最优解,任何合理的优化器都会收敛到它。
| |
3.4 优化算法
- 批量梯度下降(BGD): $\mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \tfrac{1}{N}\mathbf{X}^\top(\hat{\mathbf{y}} - \mathbf{y})$。稳定,但每个 epoch 慢。
- 随机梯度下降(SGD): 每次随机抽一个样本 $i$,$\mathbf{w} \leftarrow \mathbf{w} - \eta(\hat y_i - y_i)\mathbf{x}_i$。噪声大,但能扛超大数据。
- 小批量梯度下降: 在大小为 $b$ 的 mini-batch 上求平均梯度。工业界默认。
- 牛顿法 / IRLS: 利用 $\nabla^2 \mathcal{L}$ 实现二次收敛——因为 Hessian 容易算且半正定,可行。
4. 多分类推广:Softmax 回归
4.1 从二分类到 K 类
$K \geq 3$ 时,每个类别 $k$ 学一个权重向量 $\mathbf{w}_k$,类别 $k$ 的得分是 $z_k = \mathbf{w}_k^\top \mathbf{x}$。Softmax 把这些得分变成一组概率:
$$ 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 展示了"得分越集中,决策越清晰"这一直觉。
4.2 One-Hot 标签下的交叉熵
真实类别为 $c$ 时,把它编成 one-hot 向量 $\mathbf{t}$,$t_k = \mathbb{1}[k = c]$。损失为
$$ \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}. $$这就是多分类的负对数似然(NLL)。
4.3 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$。
两种情况合写成一行:
$$ \boxed{\;\frac{\partial \mathcal{L}}{\partial z_k} = P_k - t_k.\;} $$形式上和二分类一模一样——预测概率减去真实标签。再通过 $z_k = \mathbf{w}_k^\top \mathbf{x}$ 把梯度传到权重上:
$$ \nabla_{\mathbf{W}} \mathcal{L} = \frac{1}{N}\,\mathbf{X}^\top(\hat{\mathbf{Y}} - \mathbf{T}), $$其中 $\mathbf{W} \in \mathbb{R}^{d \times K}$ 把每个类别的权重向量按列堆起来。
| |
5. 正则化
5.1 L2 正则化(岭回归)
$$ \mathcal{L}_{\text{reg}} = \mathcal{L} + \frac{\lambda}{2}\|\mathbf{w}\|_2^2. $$梯度多出 $\lambda \mathbf{w}$ 一项,SGD 更新就变成了权重衰减:
$$ \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 估计。
5.2 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 在原点的"尖角"会把许多系数精确推到零,从而实现自动特征选择。
贝叶斯解释。 L1 对应拉普拉斯先验 $p(w_j) \propto e^{-\lambda|w_j|}$;零点处的尖峰正是稀疏性的来源。
5.3 Elastic Net
$$ \mathcal{L}_{\text{reg}} = \mathcal{L} + \lambda_1 \|\mathbf{w}\|_1 + \frac{\lambda_2}{2}\|\mathbf{w}\|_2^2. $$把 L1 的稀疏性和 L2 的稳定性合在一起,特别适合特征高度相关的场景。
6. 决策边界与几何
6.1 二分类边界
逻辑回归在 $\hat y \geq 0.5$ 时预测正类,也就是 $\mathbf{w}^\top \mathbf{x} \geq 0$。所以决策边界是超平面
$$ \mathbf{w}^\top \mathbf{x} + b = 0. $$样本点 $\mathbf{x}_0$ 到边界的有符号距离为
$$ d = \frac{\mathbf{w}^\top \mathbf{x}_0 + b}{\|\mathbf{w}\|}, $$而 $|d|$ 衡量的就是模型分类的"置信度"。

上图把三件事一次讲清楚:
- 决策边界就是一条超平面(二维下是一条直线)。
- 权重向量 $\mathbf{w}$ 就是这条超平面的法向量。
- 范数 $\|\mathbf{w}\|$ 决定了概率过渡的陡峭程度:$\|\mathbf{w}\|$ 越大,从 $\hat y \approx 0.27$ 到 $\hat y \approx 0.73$ 的"过渡带"就越窄。
6.2 多分类决策区域
对 Softmax 回归来说,“对 $z_k$ 取 argmax"这一规则把特征空间划分成 $K$ 个凸区域。类别 $j$ 与类别 $k$ 之间的分界面是超平面
$$ (\mathbf{w}_j - \mathbf{w}_k)^\top \mathbf{x} + (b_j - b_k) = 0, $$所以两两边界全都是线性的。
7. 模型评估
7.1 混淆矩阵和核心指标
二分类下:
| 预测为正 | 预测为负 | |
|---|---|---|
| 实际为正 | TP | FN |
| 实际为负 | FP | TN |
把精确率读作"我标记出来的,有多少是真的?",召回率读作"真的那些,我抓到了多少?"。只优化其中一个几乎一定是错的。
7.2 类别不平衡:准确率会撒谎

当正类很稀少(比如 95% 负样本,5% 正样本),一个只会预测负类的傻瓜分类器都能拿到 95% 的准确率,但它实际上一个正样本都没找到,根本没用。右边训练后的模型牺牲了一点点准确率,却真正解决了问题——它的 $F_1$ 远远更高,即使准确率更低。结论:类别不平衡时,accuracy 必须和 precision / recall / $F_1$ 一起看。
7.3 ROC、PR 与 AUC
扫动阈值 $\tau$("$\hat y \geq \tau$ 才判正”),可以画出两条曲线:
- ROC:以 FPR ($= FP/(FP+TN)$) 为横轴、TPR ($= \text{Recall}$) 为纵轴。
- PR:以 recall 为横轴、precision 为纵轴。

AUC 是 ROC 曲线下的面积。AUC = 1 表示完美排序,AUC = 0.5 表示随机猜测。它有一个干净的概率含义:AUC 等于"随机抽一个正样本和一个负样本,正样本得分高于负样本的概率"。
正类极度稀少时,PR 曲线和平均精度(AP)通常比 ROC 更有信息量——因为 ROC 中 FPR 的分母 $FP + TN$ 被巨量负样本主导,模型间的差异都被淹没了。
8. 实现细节
8.1 数值稳定的 Sigmoid
$z$ 很负时 $e^{-z}$ 会上溢,需要分支处理:
| |
8.2 数值稳定的 Softmax
直接计算 $e^{z_k}$ 在 logits 很大时会上溢。利用 Softmax 的平移不变性 $\operatorname{softmax}(z) = \operatorname{softmax}(z - \max_j z_j)$:
| |
8.3 完整的二分类实现
| |
8.4 完整的多分类实现
| |
9. 习题
习题 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 推导交叉熵
题目: 从最大似然估计出发,推导二分类逻辑回归的交叉熵损失。
解答: 似然 $L = \prod_i \hat y_i^{y_i}(1-\hat y_i)^{1-y_i}$。取对数、取负、取均值:
$$ \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$。
解答: 设 $P_k = e^{z_k}/\sum_j e^{z_j}$,$\mathcal{L} = -\ln P_c$,则
$$ \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}\|$。
Q&A
为什么叫"逻辑回归",明明是分类?
历史包袱。最早 logistic 函数被用来对概率做回归,分类是后来才扩展出去的应用,但名字保留下来了。
和线性回归的本质区别在哪?
在输出空间和似然假设。线性回归假设连续目标 + 高斯噪声(MSE = 高斯负对数似然);逻辑回归假设伯努利标签(CE = 伯努利负对数似然)。两者都是广义线性模型 (GLM) 的特例,区别只在链接函数和噪声分布。
逻辑回归能拟合非线性边界吗?
单纯的逻辑回归不行——它的边界永远是输入空间里的超平面。但你可以通过 (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 |
| 输出 | 校准过的概率 | 决策值(无概率含义) |
| 稀疏性 | 所有样本都贡献梯度 | 只有支持向量贡献 |
| 核技巧 | 需要改造 | 天然支持 |
| 适用场景 | 需要概率估计、下游做校准 | 硬分类、复杂非线性边界 |
参考文献
- 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.
系列导航
| 篇 | 主题 | 链接 |
|---|---|---|
| 5 | 线性回归 | <- 上一篇 |
| 6 | 逻辑回归与分类 | 当前位置 |
| 7 | 决策树 | 下一篇 -> |
| 8 | 支持向量机 | 前往 -> |
| 9 | 朴素贝叶斯 | 前往 -> |