# 第 3 章　线性模型

> 来源：https://deeplearning.bnuai.com/chapters/03-linear-models ｜ 作者：唐志清（北京师范大学） ｜ 更新：2026-11-01 ｜ 内容依据邱锡鹏《神经网络与深度学习》（https://nndl.ai/）及作者公开课件

## 学习目标

<div class="goals">

- 了解分类问题的典型应用，掌握文本的**词袋模型**表示；
- 理解线性判别函数、决策边界与多分类的几种方式；
- 掌握 **Logistic 回归**与 **Softmax 回归**的模型、交叉熵损失及其梯度推导；
- 理解信息论中的**熵、交叉熵、KL 散度**及其与最大似然的关系；
- 掌握**感知器**学习算法及其收敛性证明，了解**支持向量机**的最大间隔思想；
- 能比较不同损失函数，理解线性模型无法解决 XOR 问题的原因。

</div>

## 课件幻灯片

> 本章课件共 50 页，可在网页中逐页浏览：https://deeplearning.bnuai.com/chapters/03-linear-models；PDF 下载：https://deeplearning.bnuai.com/pdf/nndl-ch03.pdf

## 讲义

### 3.1 分类问题示例

**图像分类**是最典型的分类任务。CIFAR-10 数据集包含 60,000 张 32×32 的彩色图像，共 10 类，每类 6,000 张；ImageNet 则有超过 1,400 万张图像、21,841 个类别（synset）。[幻灯片 4](#slide-4) [幻灯片 5](#slide-5) 在此基础上还有目标检测（定位 + 分类）和实例分割（像素级）。[幻灯片 7](#slide-7)

文本领域有垃圾邮件过滤、文档归类、情感分类等任务。[幻灯片 8](#slide-8) 要用线性模型处理文本，需要先把文本转换为向量，最简单的方法是**词袋模型**（Bag-of-Words, BoW）：以词表大小为维度，统计每个词是否出现（或出现次数），忽略词序；还可以加入二元组（bigram）等 N 元特征以保留局部词序。[幻灯片 11](#slide-11)

### 3.2 线性判别函数与决策边界

线性模型的判别函数为

$$
f(\boldsymbol x;\boldsymbol w)=\boldsymbol w^\top\boldsymbol x+b .
$$

对于分类问题，输出是离散的类别标签，需要在 $f$ 之后接一个**决策函数** $g(\cdot)$：$y=g(f(\boldsymbol x;\boldsymbol w))$。二分类时，常取 $g(f)=\mathrm{sgn}(f)$ 或 $I(f>0)$。超平面 $\boldsymbol w^\top\boldsymbol x+b=0$ 就是**决策边界**，把特征空间一分为二；$\boldsymbol w$ 是它的法向量，样本到决策边界的有向距离为 $\gamma=f(\boldsymbol x;\boldsymbol w)/\|\boldsymbol w\|$。[幻灯片 14](#slide-14)

多分类（$C>2$）时可以采用“一对其余”（$C$ 个二分类器）、“一对一”（$C(C-1)/2$ 个二分类器）或“$\arg\max$”方式。最常用的是 $\arg\max$ 方式：为每个类别 $c$ 定义判别函数 $f_c(\boldsymbol x;\boldsymbol w_c)=\boldsymbol w_c^\top\boldsymbol x+b_c$，预测 $y=\arg\max_{c}f_c(\boldsymbol x;\boldsymbol w_c)$。

本章讨论四种线性分类模型，它们的区别主要在于**学习准则（损失函数）不同**：Logistic 回归、Softmax 回归、感知器和支持向量机。[幻灯片 15](#slide-15)

### 3.3 Logistic 回归

对二分类，我们希望模型输出条件概率 $p(y=1\mid\boldsymbol x)\in(0,1)$，而线性函数的值域是实数域。Logistic 回归用 **Logistic 函数**把线性输出“挤压”到 $(0,1)$：[幻灯片 19](#slide-19)

$$
p(y=1\mid\boldsymbol x)=\sigma(\boldsymbol w^\top\boldsymbol x)\triangleq\frac{1}{1+\exp(-\boldsymbol w^\top\boldsymbol x)},
$$

这里使用了增广向量（把偏置并入 $\boldsymbol w$）。变换可得 $\boldsymbol w^\top\boldsymbol x=\log\dfrac{p(y=1\mid\boldsymbol x)}{p(y=0\mid\boldsymbol x)}$，即线性部分拟合的是正负样本的**对数几率**（log odds），所以 Logistic 回归也称为**对数几率回归**。

**学习准则：如何衡量两个条件分布的差异？** [幻灯片 20](#slide-20) 这需要信息论的几个概念：

- **自信息** $I(x)=-\log p(x)$：事件越不可能发生，发生时带来的信息量越大；
- **熵** $H(p)=-\sum_x p(x)\log p(x)$：随机变量不确定性的度量，也是按分布 $p$ 进行最优编码时的平均编码长度（熵编码）；[幻灯片 21](#slide-21)
- **交叉熵** $H(p,q)=-\sum_x p(x)\log q(x)$：按分布 $q$ 的最优编码来编码真实分布为 $p$ 的信息所需的平均长度；$p$ 与 $q$ 越接近，交叉熵越小；[幻灯片 22](#slide-22)
- **KL 散度** $\mathrm{KL}(p\|q)=\sum_x p(x)\log\dfrac{p(x)}{q(x)}=H(p,q)-H(p)\ge0$：用 $q$ 近似 $p$ 时造成的信息损失，当且仅当 $p=q$ 时为 0。[幻灯片 23](#slide-23)

真实标签的条件分布 $p_r(y\mid\boldsymbol x)$ 是固定的，所以最小化 KL 散度等价于最小化交叉熵，也等价于最大化对数似然（**交叉熵损失 = 负对数似然**）。[幻灯片 24](#slide-24) 记 $\hat y^{(n)}=\sigma(\boldsymbol w^\top\boldsymbol x^{(n)})$，Logistic 回归的风险函数为

$$
\mathcal R(\boldsymbol w)=-\frac1N\sum_{n=1}^N\Big(y^{(n)}\log\hat y^{(n)}+\big(1-y^{(n)}\big)\log\big(1-\hat y^{(n)}\big)\Big).
$$

利用 $\sigma'(x)=\sigma(x)(1-\sigma(x))$，可以推出非常简洁的梯度：[幻灯片 25](#slide-25) [幻灯片 26](#slide-26)

$$
\frac{\partial\mathcal R(\boldsymbol w)}{\partial\boldsymbol w}
=-\frac1N\sum_{n=1}^N\Big(y^{(n)}\frac{\hat y^{(n)}(1-\hat y^{(n)})}{\hat y^{(n)}}\boldsymbol x^{(n)}-(1-y^{(n)})\frac{\hat y^{(n)}(1-\hat y^{(n)})}{1-\hat y^{(n)}}\boldsymbol x^{(n)}\Big)
=-\frac1N\sum_{n=1}^N\boldsymbol x^{(n)}\big(y^{(n)}-\hat y^{(n)}\big).
$$

梯度下降的更新公式为 $\boldsymbol w_{t+1}\leftarrow\boldsymbol w_t+\alpha\frac1N\sum_{n=1}^N\boldsymbol x^{(n)}\big(y^{(n)}-\hat y^{(n)}_{\boldsymbol w_t}\big)$：预测偏小（$y-\hat y>0$）时，就沿 $\boldsymbol x$ 方向增大 $\boldsymbol w$。由于风险函数是关于 $\boldsymbol w$ 的连续可导凸函数，也可以用牛顿法等高阶方法优化。

下面的演示可以点击添加样本、拖动样本，实时用梯度下降训练 Logistic 回归（或感知器），观察决策边界与权重向量 $\boldsymbol w$ 的变化：

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/chapters/03-linear-models）

<p class="demo-link">在单独页面中打开：<a href="/demos/logistic-regression">Logistic 回归与决策边界</a></p>

### 3.4 Softmax 回归

**Softmax 回归**是 Logistic 回归在多分类问题上的推广。[幻灯片 28](#slide-28) 对 $C$ 个类别，使用 **Softmax 函数**把 $C$ 个线性输出归一化为概率分布：[幻灯片 29](#slide-29) [幻灯片 30](#slide-30)

$$
p(y=c\mid\boldsymbol x)=\mathrm{softmax}(\boldsymbol w_c^\top\boldsymbol x)=\frac{\exp(\boldsymbol w_c^\top\boldsymbol x)}{\sum_{c'=1}^{C}\exp(\boldsymbol w_{c'}^\top\boldsymbol x)} .
$$

向量形式为 $\hat{\boldsymbol y}=\mathrm{softmax}(\boldsymbol W^\top\boldsymbol x)$，其中 $\boldsymbol W=[\boldsymbol w_1,\cdots,\boldsymbol w_C]$。决策函数为 $\hat y=\arg\max_c\boldsymbol w_c^\top\boldsymbol x$。

用 one-hot 向量 $\boldsymbol y\in\{0,1\}^C$ 表示真实类别，采用交叉熵损失，风险函数为 [幻灯片 31](#slide-31)

$$
\mathcal R(\boldsymbol W)=-\frac1N\sum_{n=1}^{N}\big(\boldsymbol y^{(n)}\big)^\top\log\hat{\boldsymbol y}^{(n)},
\qquad
\frac{\partial\mathcal R(\boldsymbol W)}{\partial\boldsymbol W}=-\frac1N\sum_{n=1}^N\boldsymbol x^{(n)}\big(\boldsymbol y^{(n)}-\hat{\boldsymbol y}^{(n)}\big)^\top .
$$

梯度的形式与 Logistic 回归完全一致。总结：**模型**为 Softmax 回归，**学习准则**为交叉熵，**优化**用梯度下降。[幻灯片 32](#slide-32)

举个例子：三分类问题中真实类别为 $[0,0,1]$，模型预测的类别概率为 $[0.3,0.3,0.4]$，则交叉熵损失为 $-(0\cdot\log0.3+0\cdot\log0.3+1\cdot\log0.4)=-\log0.4\approx0.916$。可以看到交叉熵损失只关心真实类别上的预测概率。[幻灯片 33](#slide-33)

调节各类别的 logit 与温度，观察 softmax 概率、交叉熵损失以及梯度 $\boldsymbol p-\boldsymbol y$：

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/chapters/03-linear-models）

<p class="demo-link">在单独页面中打开：<a href="/demos/softmax">Softmax 与交叉熵</a></p>

### 3.5 感知器

**感知器**（Perceptron）由 Rosenblatt 于 1958 年提出，是最早的神经网络模型之一。它模拟生物神经元：权重对应突触，偏置对应阈值，激活函数对应细胞体，输出为 $+1$ 或 $-1$：[幻灯片 37](#slide-37)

$$
\hat y=\mathrm{sgn}(\boldsymbol w^\top\boldsymbol x).
$$

感知器的学习算法是一种**错误驱动**的在线学习算法：先初始化 $\boldsymbol w=\boldsymbol 0$，然后逐个处理样本，每当分错一个样本（即 $y\,\boldsymbol w^\top\boldsymbol x\le0$）时，就用这个样本更新权重：[幻灯片 39](#slide-39)

$$
\boldsymbol w\leftarrow\boldsymbol w+y\,\boldsymbol x .
$$

这等价于对损失函数 $\mathcal L(\boldsymbol w;\boldsymbol x,y)=\max(0,-y\,\boldsymbol w^\top\boldsymbol x)$ 做随机梯度下降（学习率为 1）。与 Logistic 回归的更新 $\boldsymbol w\leftarrow\boldsymbol w+\alpha\,\boldsymbol x(y-\hat y)$ 相比，感知器只在分错时才更新，且更新量不依赖预测的置信度。[幻灯片 40](#slide-40)

**收敛性**。设训练集是**线性可分**的：存在一个单位向量 $\boldsymbol w^*$（$\|\boldsymbol w^*\|=1$）和 $\gamma>0$，使得对所有样本 $y^{(n)}\boldsymbol w^{*\top}\boldsymbol x^{(n)}\ge\gamma$；并设 $R$ 是所有样本中最大的范数 $\|\boldsymbol x^{(n)}\|\le R$。那么感知器的权重更新次数 $K$ 满足 [幻灯片 41](#slide-41)

$$
K\le\frac{R^2}{\gamma^2}.
$$

证明思路：设第 $K$ 次更新后的权重为 $\boldsymbol w_K=\sum_{k=1}^{K}y^{(k)}\boldsymbol x^{(k)}$（这里的 $(k)$ 指第 $k$ 个被分错的样本）。[幻灯片 42](#slide-42)

- **上界**：$\|\boldsymbol w_K\|^2=\|\boldsymbol w_{K-1}\|^2+\|\boldsymbol x^{(K)}\|^2+2y^{(K)}\boldsymbol w_{K-1}^\top\boldsymbol x^{(K)}\le\|\boldsymbol w_{K-1}\|^2+R^2$（因为分错时最后一项 $\le0$），所以 $\|\boldsymbol w_K\|^2\le KR^2$；
- **下界**：$\|\boldsymbol w_K\|=\|\boldsymbol w^*\|\|\boldsymbol w_K\|\ge\boldsymbol w^{*\top}\boldsymbol w_K=\sum_{k=1}^{K}y^{(k)}\boldsymbol w^{*\top}\boldsymbol x^{(k)}\ge K\gamma$。

两式联立得 $K^2\gamma^2\le\|\boldsymbol w_K\|^2\le KR^2$，即 $K\le R^2/\gamma^2$。这说明在线性可分时感知器一定会在有限步内收敛；但如果数据线性不可分，感知器不会收敛，而且即使可分，它找到的也只是众多可行超平面中的一个。

### 3.6 支持向量机

**支持向量机**（SVM）寻找的是**间隔最大**的分割超平面。[幻灯片 43](#slide-43) 样本集到超平面的间隔定义为最近样本的距离 $\gamma=\min_n\dfrac{y^{(n)}(\boldsymbol w^\top\boldsymbol x^{(n)}+b)}{\|\boldsymbol w\|}$。通过缩放令最近样本满足 $y(\boldsymbol w^\top\boldsymbol x+b)=1$，最大化间隔就等价于

$$
\min_{\boldsymbol w,b}\ \frac12\|\boldsymbol w\|^2
\quad\text{s.t.}\quad y^{(n)}\big(\boldsymbol w^\top\boldsymbol x^{(n)}+b\big)\ge1,\ \forall n .
$$

满足 $y(\boldsymbol w^\top\boldsymbol x+b)=1$ 的样本称为**支持向量**，决策边界只由它们决定。这是一个凸二次规划问题，可以用拉格朗日乘数法转为对偶问题求解，并借助**核函数**处理非线性可分的数据。允许部分样本违反约束的**软间隔 SVM** 等价于最小化

$$
\sum_{n=1}^{N}\max\Big(0,\ 1-y^{(n)}\big(\boldsymbol w^\top\boldsymbol x^{(n)}+b\big)\Big)+\frac{\lambda}{2}\|\boldsymbol w\|^2 ,
$$

其中第一项称为 **Hinge 损失**。

### 3.7 线性分类模型小结

| 模型 | 激活 / 决策函数 | 损失函数 | 优化方法 |
| --- | --- | --- | --- |
| 线性回归 | — | $(y-\boldsymbol w^\top\boldsymbol x)^2$ | 最小二乘、梯度下降 |
| Logistic 回归 | $\sigma(\boldsymbol w^\top\boldsymbol x)$ | $-y\log\sigma(\boldsymbol w^\top\boldsymbol x)-(1-y)\log(1-\sigma(\boldsymbol w^\top\boldsymbol x))$ | 梯度下降 |
| Softmax 回归 | $\mathrm{softmax}(\boldsymbol W^\top\boldsymbol x)$ | $-\boldsymbol y^\top\log\mathrm{softmax}(\boldsymbol W^\top\boldsymbol x)$ | 梯度下降 |
| 感知器 | $\mathrm{sgn}(\boldsymbol w^\top\boldsymbol x)$ | $\max(0,-y\boldsymbol w^\top\boldsymbol x)$ | 随机梯度下降 |
| 支持向量机 | $\mathrm{sgn}(\boldsymbol w^\top\boldsymbol x)$ | $\max(0,1-y\boldsymbol w^\top\boldsymbol x)$ | 二次规划、SMO 等 |

把标签记为 $y\in\{+1,-1\}$，令 $z=y f(\boldsymbol x;\boldsymbol w)$（越大表示分得越对、越有把握），各损失函数都可以看作 $z$ 的函数：[幻灯片 46](#slide-46)

- 0-1 损失：$I(z<0)$；
- 平方损失：$(1-z)^2$——当 $z>1$ 时反而增大，不适合分类；
- Logistic（交叉熵）损失：$\log(1+\exp(-z))$；
- Hinge 损失：$\max(0,1-z)$；
- 感知器损失：$\max(0,-z)$。

除平方损失外，它们都可以看作 0-1 损失的连续、凸的上界（代理损失）。

**XOR 问题**。所有线性模型的决策边界都是超平面，因此无法解决线性不可分问题，最经典的例子就是**异或**（XOR）：$(0,0)$、$(1,1)$ 为一类，$(0,1)$、$(1,0)$ 为另一类，平面上不存在一条直线把它们分开。[幻灯片 47](#slide-47) 解决方法是先对特征做非线性变换 $\phi(\boldsymbol x)$（例如加入 $x_1x_2$ 项），或者让模型自己学习特征变换——这就引出了下一章的**神经网络**。[幻灯片 48](#slide-48)

## 本章小结

- 线性分类模型 = 线性判别函数 + 决策函数；四种模型的主要区别是损失函数。
- Logistic / Softmax 回归输出概率，采用交叉熵损失，梯度形式统一为 $-\boldsymbol x(\boldsymbol y-\hat{\boldsymbol y})^\top$。
- 交叉熵 = 熵 + KL 散度；最小化交叉熵等价于最大似然估计。
- 感知器是错误驱动的在线算法，线性可分时更新次数不超过 $R^2/\gamma^2$；SVM 追求最大间隔，对应 Hinge 损失。
- 线性模型无法解决 XOR 等非线性可分问题，需要非线性特征变换或神经网络。

## 思考题与习题 {#exercises}

<div class="exercise-list">

1. **（推导）** 推导 Softmax 回归交叉熵损失关于 $\boldsymbol W$ 的梯度，并说明它与 Logistic 回归梯度的关系（$C=2$ 时）。
2. **（计算）** 某样本真实类别为第 2 类（共 4 类），模型输出 logits 为 $[2,1,0,-1]$。计算 Softmax 概率与交叉熵损失；如果把所有 logits 同时加 100，结果是否改变？实现 Softmax 时如何避免数值溢出？
3. **（概念）** 为什么不用平方损失训练 Logistic 回归？从损失函数的凸性和梯度大小两方面分析。
4. **（证明）** 证明 $\mathrm{KL}(p\|q)\ge0$（提示：Jensen 不等式），并举例说明 KL 散度不对称。
5. **（分析）** 感知器在线性不可分数据上会怎样？平均感知器（averaged perceptron）是如何改进的？
6. **（构造）** 为 XOR 问题设计一个特征变换 $\phi(\boldsymbol x)$，使变换后的数据线性可分，并给出一个可行的 $\boldsymbol w$。
7. **（编程）** 在 MNIST 或 CIFAR-10 上实现 Softmax 回归（NumPy 或 PyTorch），绘制训练 / 验证损失曲线，并可视化学到的每个类别的权重 $\boldsymbol w_c$。

</div>

**部分提示**

- 第 2 题：概率约为 $[0.644,0.237,0.087,0.032]$，损失 $=-\log0.237\approx1.44$；整体平移不改变 Softmax 结果，实现时先减去最大值。
- 第 3 题：Sigmoid + 平方损失关于 $\boldsymbol w$ 非凸，且当预测完全错误（饱和）时梯度接近 0，学习很慢。
- 第 6 题：如 $\phi(\boldsymbol x)=[x_1,x_2,x_1x_2]$，取 $\boldsymbol w=[1,1,-2]$，$b=-0.5$。

## 延伸阅读

- 教材：邱锡鹏《神经网络与深度学习》第 3 章「线性模型」，附录 E「信息论」。
- 实践：[nndl-practice](https://github.com/nndl/nndl-practice) 第 3 章「线性模型」。
- 交互：[Logistic 回归与决策边界](https://deeplearning.bnuai.com/demos/logistic-regression)；[Softmax 与交叉熵](https://deeplearning.bnuai.com/demos/softmax)。
- 第二版对应章节：第 3 章「线性模型」。
