线性变换与神经网络
本节目标
本节把矩阵从“数字表”提升为输入空间到输出空间的映射。你将理解基向量决定矩阵列、严格线性变换与仿射变换的区别、行样本和列向量两种公式如何对应,以及神经网络为什么必须加入非线性。
线性变换的直觉
线性变换 保持加法与缩放:
有限维情况下可写成 。矩阵的每一列是对应基向量被变换后的结果;因此矩阵不是孤立数字表,而是一个空间变换。
若 是 ,它把 映到 。列空间是所有可能输出,零空间是会被映成零的输入方向。映射升到更高维不自动创造新的独立信息,因为 。
缩放、旋转与投影
二维缩放:
把第一轴放大两倍、第二轴缩小一半。投影可能丢失维度,因此通常不可逆。神经网络中的线性层同样会混合、扩展或压缩特征方向。
仿射变换
严格说 在 时是仿射变换,因为不保持原点。ML 中仍常称“linear layer”:
若 、、,则 。
每个输出分量是输入特征的加权和加偏置。Embedding 投影、分类头和 Attention 的 Q/K/V 映射都使用这种结构。
PyTorch 官方 torch.nn.Linear 使用行样本/末维特征约定,写作 ;其权重 shape 是 out_features × in_features,输入除最后一维外的轴保持不变。不同库或论文可能用列向量 ,实现前要对照 shape,而不是只对照字母。
为什么需要非线性
两个无偏线性层叠加仍是一个线性层:
即使含偏置,多个仿射层也可合并成一个仿射层。激活函数让模型表示弯曲、分段的复杂关系。线性代数负责高效混合特征,非线性负责突破单一线性边界。
带偏置的两层合并为:
因此只堆叠 Linear 而不加激活、门控或其他非线性,深度不会增加这部分映射的表达类别。训练过程和参数化可能不同,但最终仍是一个仿射映射。
基与坐标
同一向量在不同基下坐标不同。Embedding 的单个维度通常没有稳定的人类命名;语义往往分布在多个方向上。对模型做旋转后,只要相对几何与后续权重相应变化,功能可能不变。因此不要随意把“第 137 维”解释为某个单独概念。
批量计算
若样本按行堆成 ,可写:
实现库会用广播把 加到每一行。广播方便但可能隐藏 shape 错误,始终先写预期维度。
例如输入 X: 32×768,层权重 W: 128×768,则 X @ W.T 为 32×128,偏置 b: 128 沿 batch 轴复制。若误用 W @ X.T,结果虽也可能可算,却采用了不同轴顺序,后续接口必须明确转置回来。
常见误区、练习与自测
- 把 bias 当成“统计偏差”;这里是可训练截距,语义不同。
- 认为升维必然增加信息;线性映射的有效秩仍有限。
- 认为可逆变换一定有利;模型可能有意压缩噪声。
- 把线性层参数多等同于表达任意非线性。
- 把 Attention 整体称为线性变换;Q/K/V 投影是仿射的,但点积、缩放、softmax 和按权重聚合组成了更完整的计算。
练习:
- 为
128×768、输入 batch32×768,写出行样本约定下的矩阵式和输出 shape。解释为何需用 。 - 给定两层
(W1,b1)与(W2,b2),写出合并后的权重和偏置。 - 构造一个二维投影矩阵,指出其列空间、零空间和秩。
- 解释为什么把 2 维线性映射到 100 维不代表得到 100 个独立信息方向。
- 我能区分线性和仿射变换。
- 我能解释多层线性变换为何可合并。
- 我能把 shape 映射到 。
- 我能从列空间和零空间解释线性层保留或丢失的方向。
- 我能在论文公式与框架行样本约定之间转换。
参考资料
核验日期:2026-07-14。框架 shape 与接口可能随版本变化,实际实现前应再次查看当前官方页面。
上一节:线性组合、方程组与秩|下一步:正交、投影与最小二乘。