线性网络是深度学习中的基础模型,它们通过线性变换将输入映射到输出。本页面介绍了用于连续值预测的线性回归和用于分类任务的 Softmax 回归。这些模型代表了最简单的神经网络形式,仅包含一个带有线性变换的层。
有关基于这些概念构建的更复杂的神经网络架构,请参阅 多层感知机。
线性网络通过线性组合后接一个可选的非线性函数来转换输入特征。它们是更复杂神经网络的构建块。
来源: [chapter_linear-networks/linear-regression.md:38-43], [chapter_linear-networks/softmax-regression.md:49-56]
线性网络包含以下基本要素
| 组件 | 线性回归 | Softmax 回归 |
|---|---|---|
| 输入 | 特征向量 x | 特征向量 x |
| 参数 | 权重向量 w,偏置 b | 权重矩阵 W,偏置向量 b |
| 线性变换 | w^T·x + b | W·x + b |
| 输出函数 | 恒等(无) | Softmax 函数 |
| 损失函数 | 平方损失 | 交叉熵损失 |
| 预测 | 连续值 | 类别概率 |
来源: [chapter_linear-networks/linear-regression.md:38-53], [chapter_linear-networks/softmax-regression.md:57-78]
线性回归模型化输入特征与连续目标变量之间的关系。它假设目标变量可以近似为输入特征的加权和加上一个偏置项。
对于具有特征 x 的数据样本,预测值 ŷ 为
$$\hat{y} = \mathbf{w}^\top \mathbf{x} + b$$
其中
对于具有 d 维特征的 n 个样本的批次,我们可以将其表示为矩阵形式
$$\hat{\mathbf{y}} = \mathbf{X} \mathbf{w} + b$$
其中 X 是包含批次样本的 n×d 矩阵。
来源: [chapter_linear-networks/linear-regression.md:38-53], [chapter_linear-networks/linear-regression.md:102-115]
平方损失函数衡量预测值与真实值之间的差异
$$l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2$$
总体损失通常是所有训练样本的平均值
$$L(\mathbf{w}, b) = \frac{1}{n}\sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2$$
来源: [chapter_linear-networks/linear-regression.md:104-115], [chapter_linear-networks/linear-regression.md:128-135]
我们使用随机梯度下降(SGD)来最小化损失函数
参数更新规则如下
$$\begin{aligned} \mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right) \ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right) \end{aligned}$$
其中 η 是学习率,B 是样本的小批量。
来源: [chapter_linear-networks/linear-regression.md:151-170], [chapter_linear-networks/linear-regression.md:173-196]
Softmax 回归将线性网络扩展到多类别分类问题。它会为所有可能的类别生成一个概率分布。
对于特征向量 x,我们首先计算一个“logits”向量 o
$$\mathbf{o} = \mathbf{W} \mathbf{x} + \mathbf{b}$$
然后我们应用 Softmax 函数得到类别概率
$$\hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)}$$
对于具有 n 个样本和 d 个特征的批次,预测 q 个类别
来源: [chapter_linear-networks/softmax-regression.md:49-78], [chapter_linear-networks/softmax-regression.md:93-130]
交叉熵损失衡量预测概率分布与真实标签分布之间的差异
$$l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j$$
其中 y 通常是一个独热编码向量,表示真实类别。
该损失函数相对于 logits 的梯度非常简洁
$$\partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) = \mathrm{softmax}(\mathbf{o})_j - y_j$$
这意味着梯度是预测概率与真实标签之间的差值。
来源: [chapter_linear-networks/softmax-regression.md:164-196], [chapter_linear-networks/softmax-regression.md:207-236]
线性回归和 Softmax 回归都可以通过从头开始实现,或者使用深度学习框架中的高级 API 来实现。
实现通常遵循以下步骤
来源: [chapter_linear-networks/linear-regression-scratch.md:220-226], [chapter_linear-networks/linear-regression-scratch.md:234-239], [chapter_linear-networks/softmax-regression-scratch.md:179-186]
在实现 Softmax 回归时,必须特别注意确保数值稳定性
防止溢出:在指数化之前减去最大 logits 值
softmax(o) = exp(o - max(o)) / sum(exp(o - max(o)))
防止下溢:在损失计算中,结合 Softmax 和 log 操作
log(softmax(o)_j) = o_j - max(o_k) - log(sum(exp(o_k - max(o_k))))
深度学习框架通常会在其损失函数中实现这些优化。
来源: [chapter_linear-networks/softmax-regression-concise.md:98-146]
为了利用现代硬件,实现应使用向量化操作,而不是显式循环
适当的向量化可以带来显著的性能提升,通常比基于循环的实现快几个数量级。
来源: [chapter_linear-networks/linear-regression.md:216-348]
线性网络构成了更复杂神经网络的基础。线性网络可以被视为没有激活函数(用于回归)或带有 Softmax 激活函数(用于分类)的单层神经网络。
要点
来源: [chapter_linear-networks/linear-regression.md:429-486]
线性网络为理解深度学习模型提供了基础。它们的特点是
虽然线性网络在建模复杂非线性关系方面能力有限,但它们仍然是机器学习工具箱中有价值的工具,并为理解更复杂模型的机制提供了重要的见解。