向量与矩阵的基本运算
向量和矩阵是人工智能中一切计算的基石。神经网络每一层的前向传播本质是矩阵乘法 z = Wx + b,全连接层、卷积层(im2col 后)、注意力机制(QKTV)无一例外。词嵌入 Word2Vec/GloVe 将每个词映射为 300 维向量,向量余弦相似度直接衡量语义距离;推荐系统中用户和物品也分别用向量表示,内积预测点击概率。图像被展开为像素矩阵送入 CNN,Transformer 的自注意力权重矩阵决定每个 token 关注哪些上下文。Batch 训练时,整个 mini-batch 数据组成矩阵一次完成向量化计算,GPU 并行加速的核心正是大规模矩阵运算。本节系统讲解点积、矩阵乘法、转置、广播等运算的定义、公式、数值推导,以及它们在实际模型中的具体用途。
一、向量的定义与 AI 中的存在形式
数学定义:向量是一组有序实数的集合,写作 x = (x₁, x₂, ..., xₙ),其中 n 称为向量的维度。向量可以看作 n 维空间中的一个点或一个方向。
列向量 vs 行向量:列向量是 n×1 矩阵,行向量是 1×n 矩阵。深度学习中默认使用列向量,但在代码中常用一维数组表示。
机器学习最经典的数据集之一。每朵花用 4 个特征描述:
| 花萼长度(cm) | 花萼宽度(cm) | 花瓣长度(cm) | 花瓣宽度(cm) | 类别 |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | 山鸢尾(Setosa) |
| 7.0 | 3.2 | 4.7 | 1.4 | 变色鸢尾(Versicolor) |
| 6.3 | 3.3 | 6.0 | 2.5 | 维吉尼亚鸢尾(Virginica) |
第一朵花的特征向量:x₁ = (5.1, 3.5, 1.4, 0.2),这是一个 4 维向量。
整个数据集有 150 条这样的向量,组成一个 150×4 的矩阵。
在 NLP 中,每个词被映射为一个固定维度的向量(通常 100~300 维)。例如在一个训练好的 Word2Vec 模型中:
"国王" → (0.52, -0.13, 0.89, 0.04, ..., -0.31)(300 维)
"王后" → (0.48, -0.09, 0.91, 0.22, ..., -0.28)(300 维)
"苹果" → (-0.20, 0.75, 0.11, -0.56, ..., 0.43)(300 维)
有趣的是,向量运算可以捕捉语义关系:
"国王" - "男人" + "女人" ≈ "王后"
这说明词向量把语义关系编码进了向量空间的几何结构中。
二、向量加法与减法
数学定义:两个维度相同的向量,对应元素分别相加或相减:
a + b = (a₁+b₁, a₂+b₂, ..., aₙ+bₙ)
a - b = (a₁-b₁, a₂-b₂, ..., aₙ-bₙ)
逐步数值计算:
b = (0.5, -1.0, 2.5, -0.5)
加法 a + b:
第1个元素:1.0 + 0.5 = 1.5
第2个元素:2.0 + (-1.0) = 1.0
第3个元素:3.0 + 2.5 = 5.5
第4个元素:4.0 + (-0.5) = 3.5
a + b = (1.5, 1.0, 5.5, 3.5)
减法 a - b:
第1个元素:1.0 - 0.5 = 0.5
第2个元素:2.0 - (-1.0) = 3.0
第3个元素:3.0 - 2.5 = 0.5
第4个元素:4.0 - (-0.5) = 4.5
a - b = (0.5, 3.0, 0.5, 4.5)
全连接层的计算公式为 z = Wx + b。最后的 "+ b" 就是向量加法。
真实场景:假设一个全连接层有 3 个输出神经元。经过权重矩阵乘法后得到 Wx = (2.3, -0.8, 1.5),偏置向量 b = (0.1, 0.5, -0.2)。
z = Wx + b:
z₁ = 2.3 + 0.1 = 2.4
z₂ = -0.8 + 0.5 = -0.3
z₃ = 1.5 + (-0.2) = 1.3
z = (2.4, -0.3, 1.3)
偏置的作用:如果没有偏置,决策边界必须过原点。加了偏置后,决策边界可以自由平移到任意位置,让模型更加灵活。就像 y = kx 只能画过原点的直线,而 y = kx + b 可以画任意位置的直线。
ResNet 的核心公式:y = F(x) + x(输出 = 变换结果 + 原始输入)
假设输入 x = (0.5, -0.3, 0.8),经过两层卷积后 F(x) = (0.1, 0.2, -0.1)
残差连接:y = F(x) + x = (0.1+0.5, 0.2+(-0.3), -0.1+0.8) = (0.6, -0.1, 0.7)
为什么有效:如果 F(x) 学到全零,y 就退化为恒等映射 y = x,不会比没有这层更差。这让深层网络的训练变得更稳定,解决了网络越深反而精度下降的"退化问题"。ImageNet 竞赛中 ResNet 用了 152 层,比之前最深的 20 多层网络精度高了一大截。
三、数乘(标量乘法)
数学定义:标量 k 乘以向量 a 的每一个元素:
几何含义:k > 0 时拉伸;k < 0 时反向拉伸;k = 0 时变为零向量;|k| < 1 时缩小;|k| > 1 时放大。
逐步数值计算:
k · a = (0.01×0.8, 0.01×(-0.4), 0.01×1.2, 0.01×(-0.6))
= (0.008, -0.004, 0.012, -0.006)
原来梯度方向的变化量是 (0.8, -0.4, 1.2, -0.6),
乘以学习率 0.01 后变为 (0.008, -0.004, 0.012, -0.006)。
这就是"小步前进"——每次只往梯度方向走一小步。
参数更新公式:W_new = W_old - α × ∇L
真实场景:假设某层 4 个权重的当前值和梯度如下:
| 参数 | 当前值 W_old | 梯度 ∇L | α × ∇L (α=0.01) | 更新后 W_new |
|---|---|---|---|---|
| w₁ | 0.500 | 0.800 | 0.008 | 0.492 |
| w₂ | -0.300 | -0.400 | -0.004 | -0.296 |
| w₃ | 1.200 | 1.200 | 0.012 | 1.188 |
| w₄ | -0.100 | -0.600 | -0.006 | -0.094 |
梯度为负 → 损失在减小方向 → 参数增大(w₂: -0.300→-0.296)
每个参数都朝着减小损失的方向移动了一小步。
四、点积(内积)
数学定义:两个同维向量对应元素相乘后求和,结果是一个标量:
几何含义:a · b = |a| × |b| × cos(θ)
其中 θ 是两个向量的夹角。cos(θ) > 0 说明方向接近,cos(θ) < 0 说明方向相反,cos(θ) = 0 说明垂直。
逐步数值计算:
b = (1.0, 4.0, -2.0, 3.0)
点积计算过程:
第1对:2.0 × 1.0 = 2.0
第2对:(-1.0) × 4.0 = -4.0
第3对:3.0 × (-2.0) = -6.0
第4对:0.5 × 3.0 = 1.5
求和:2.0 + (-4.0) + (-6.0) + 1.5 = -6.5
a · b = -6.5(负值说明两个向量方向总体相反)
一个神经元做的核心运算就是点积。假设某神经元有 4 个输入:
输入特征 x = (0.8, 0.2, 0.5, 0.1)(例如归一化后的图像像素值)
权重 w = (0.3, -0.5, 0.8, 0.1)(模型通过训练学到的值)
偏置 b = 0.2
计算过程:
z = w · x + b
= 0.3×0.8 + (-0.5)×0.2 + 0.8×0.5 + 0.1×0.1 + 0.2
= 0.24 + (-0.10) + 0.40 + 0.01 + 0.2
= 0.75
然后通过激活函数:a = ReLU(0.75) = max(0, 0.75) = 0.75
含义:权重为正(w₁=0.3, w₃=0.8)的输入对结果有正向贡献,权重为负(w₂=-0.5)的输入有负向贡献。权重的绝对值大小决定该输入的重要程度。w₃=0.8 最大,说明第 3 个输入特征对这个神经元最重要。
余弦相似度公式:cos(θ) = (a · b) / (|a| × |b|),值域 [-1, 1]
电影推荐场景:用 5 维向量表示用户对 5 种类型电影的评分(动作/喜剧/恐怖/爱情/科幻):
| 用户 | 动作 | 喜剧 | 恐怖 | 爱情 | 科幻 |
|---|---|---|---|---|---|
| Alice | 5 | 1 | 4 | 1 | 5 |
| Bob | 4 | 2 | 5 | 1 | 4 |
| Carol | 1 | 5 | 1 | 5 | 2 |
a · b = 5×4 + 1×2 + 4×5 + 1×1 + 5×4 = 20 + 2 + 20 + 1 + 20 = 63
|a| = √(25+1+16+1+25) = √68 ≈ 8.25
|b| = √(16+4+25+1+16) = √62 ≈ 7.87
cos(θ) = 63 / (8.25 × 7.87) = 63 / 64.93 ≈ 0.970
计算 Alice 与 Carol 的相似度:
a · c = 5×1 + 1×5 + 4×1 + 1×5 + 5×2 = 5 + 5 + 4 + 5 + 10 = 29
|c| = √(1+25+1+25+4) = √56 ≈ 7.48
cos(θ) = 29 / (8.25 × 7.48) = 29 / 61.71 ≈ 0.470
结论:Alice 和 Bob 的相似度 0.970 远高于 Alice 和 Carol 的 0.470。
所以如果 Bob 喜欢某部电影而 Alice 没看过,可以推荐给 Alice(协同过滤)。
Alice 和 Carol 品味差异大(一个喜欢动作/科幻,另一个喜欢喜剧/爱情),不适合互相推荐。
五、向量范数
数学定义:范数衡量向量的"大小"或"长度"。常用的有:
含义:各元素绝对值之和。像在城市网格中走路,只能沿横竖方向。
L2 范数(欧几里得距离):||a||₂ = √(a₁² + a₂² + ... + aₙ²)
含义:向量的直线长度。就是高中学的两点距离公式的推广。
L∞ 范数:||a||∞ = max(|a₁|, |a₂|, ..., |aₙ|)
含义:最大绝对值。
逐步数值计算:
L1 范数:||a||₁ = |3| + |-4| + |0| + |2| + |-1| = 3 + 4 + 0 + 2 + 1 = 10
L2 范数:||a||₂ = √(3² + (-4)² + 0² + 2² + (-1)²)
= √(9 + 16 + 0 + 4 + 1)
= √30 ≈ 5.477
L∞ 范数:||a||∞ = max(3, 4, 0, 2, 1) = 4
假设一个模型有 5 个权重 w = (0.3, -2.5, 0.01, 5.0, -0.02):
L1 正则化惩罚项 = λ × ||w||₁
||w||₁ = 0.3 + 2.5 + 0.01 + 5.0 + 0.02 = 7.83
若 λ = 0.01,惩罚 = 0.01 × 7.83 = 0.0783
效果:L1 倾向于让小权重变成恰好为 0(w₃ 和 w₅ 本来就小,L1 会把它们压到 0),形成稀疏模型,自动做特征选择。
L2 正则化惩罚项 = λ × ||w||₂²
||w||₂² = 0.09 + 6.25 + 0.0001 + 25.0 + 0.0004 = 31.34
若 λ = 0.01,惩罚 = 0.01 × 31.34 = 0.3134
效果:L2 的惩罚与权重平方成正比,大权重(w₂=-2.5, w₄=5.0)受到更强的惩罚,被迫缩小。它不会产生精确的 0,而是让所有权重都变小。
六、矩阵的定义与 AI 中的存在形式
数学定义:矩阵是 m 行 n 列个实数排列成的矩形数组,记为 m×n 矩阵。元素 aᵢⱼ 在第 i 行、第 j 列。
用矩阵组织数据——每行是一个房屋样本,每列是一个特征:
| 房间数 | 房龄(年) | 到市中心距离(km) | 犯罪率 | 房价(万元) |
|---|---|---|---|---|
| 6.575 | 65.2 | 4.09 | 0.006 | 24.0 |
| 6.421 | 78.9 | 4.97 | 0.027 | 21.6 |
| 7.185 | 61.1 | 4.97 | 0.027 | 34.7 |
| 6.998 | 45.8 | 6.06 | 0.032 | 33.4 |
| 7.147 | 54.2 | 6.06 | 0.069 | 36.2 |
线性回归就是要找到权重向量 w 使得 Xw ≈ y。
每张图片是 28×28 灰度图,就是一个 28×28 矩阵。每个元素是 0~255 的像素值:
| 0 | 0 | 0 | 0 | 12 | 99 | 0 | ... |
| 0 | 0 | 3 | 72 | 200 | 255 | 180 | ... |
| 0 | 0 | 92 | 255 | 253 | 140 | 230 | ... |
一个 batch(如 64 张图片)就是一个 64×28×28 的 3 阶张量。
MNIST 数据集共 60000 张训练图片 + 10000 张测试图片。
七、矩阵乘法(AI 中最核心的运算)
数学定义:A(m×k) × B(k×n) = C(m×n)。前提条件:A 的列数必须等于 B 的行数。结果矩阵 C 的第 i 行第 j 列元素:
逐步数值计算(完整展示每一步):
[4, 5, 6]]
B = [[7, 10], (3×2 矩阵)
[8, 11],
[9, 12]]
结果 C 是 2×2 矩阵:
C₁₁ = A第1行 · B第1列 = 1×7 + 2×8 + 3×9 = 7 + 16 + 27 = 50
C₁₂ = A第1行 · B第2列 = 1×10 + 2×11 + 3×12 = 10 + 22 + 36 = 68
C₂₁ = A第2行 · B第1列 = 4×7 + 5×8 + 6×9 = 28 + 40 + 54 = 122
C₂₂ = A第2行 · B第2列 = 4×10 + 5×11 + 6×12 = 40 + 55 + 72 = 167
C = [[50, 68],
[122, 167]]
① A×B ≠ B×A(不满足交换律),甚至大多数情况下尺寸不匹配根本无法交换
② (A×B)×C = A×(B×C)(满足结合律)
③ A×(B+C) = A×B + A×C(满足分配律)
④ (A×B)ᵀ = Bᵀ×Aᵀ(转置后顺序反转!)
场景:一个全连接层,输入 3 个特征,输出 2 个值(例如二分类)。
输入向量 x = [0.8, 0.2, 0.5]ᵀ(比如一朵花的 3 个标准化特征值)
权重矩阵 W(2×3,2 个输出神经元×3 个输入特征):
W = [[0.15, 0.20, -0.30],
[-0.40, 0.50, 0.10]]
偏置向量 b = [0.05, -0.10]ᵀ
计算 z = Wx + b:
z₁ = 0.15×0.8 + 0.20×0.2 + (-0.30)×0.5 + 0.05
= 0.120 + 0.040 + (-0.150) + 0.050
= 0.060
z₂ = (-0.40)×0.8 + 0.50×0.2 + 0.10×0.5 + (-0.10)
= -0.320 + 0.100 + 0.050 + (-0.100)
= -0.270
z = [0.060, -0.270]ᵀ
经过 Softmax 得到概率:
e^0.060 = 1.0618,e^(-0.270) = 0.7634
总和 = 1.0618 + 0.7634 = 1.8252
P(类别0) = 1.0618/1.8252 = 0.5817 = 58.2%
P(类别1) = 0.7634/1.8252 = 0.4183 = 41.8%
结论:模型预测这朵花属于类别 0 的概率为 58.2%,属于类别 1 的概率为 41.8%。
实际训练时不是一次处理一个样本,而是一批(batch)样本同时做矩阵乘法:
假设 batch_size=4,3 个输入特征,2 个输出:
X = [[0.8, 0.2, 0.5], ← 样本1
[0.3, 0.7, 0.1], ← 样本2
[0.9, 0.4, 0.6], ← 样本3
[0.1, 0.8, 0.3]] ← 样本4
X 是 4×3 矩阵,W 是 3×2 矩阵(转置后)
Z = X × Wᵀ + b 是 4×2 矩阵,一次性得到 4 个样本各 2 个输出
这就是 GPU 快的原因:GPU 有成千上万个核心,擅长并行做矩阵乘法,一次就能同时处理整个 batch。
八、矩阵转置
数学定义:矩阵 A 的转置 Aᵀ 是将 A 的行和列互换。如果 A 是 m×n 矩阵,则 Aᵀ 是 n×m 矩阵,且 (Aᵀ)ᵢⱼ = Aⱼᵢ。
[4, 5, 6]]
Aᵀ = [[1, 4], (3×2 矩阵)
[2, 5],
[3, 6]]
原来的每一行变成了转置后的每一列。
A 的第 1 行 (1,2,3) → Aᵀ 的第 1 列 (1,2,3)ᵀ
自注意力的核心公式:Attention(Q,K,V) = softmax(QKᵀ/√dₖ)V
其中 Kᵀ 就是对 K 矩阵做转置。假设序列长度=3,dₖ=2:
Q = [[1, 0], [0, 1], [1, 1]](3×2)
K = [[1, 1], [0, 1], [1, 0]](3×2)
Kᵀ = [[1, 0, 1], [1, 1, 0]](2×3)
QKᵀ(3×2 × 2×3 = 3×3 注意力分数矩阵):
(1,1)=1×1+0×1=1, (1,2)=1×0+0×1=0, (1,3)=1×1+0×0=1
(2,1)=0×1+1×1=1, (2,2)=0×0+1×1=1, (2,3)=0×1+1×0=0
(3,1)=1×1+1×1=2, (3,2)=1×0+1×1=1, (3,3)=1×1+1×0=1
QKᵀ = [[1,0,1],[1,1,0],[2,1,1]]
QKᵀ/√2 ≈ [[0.71,0,0.71],[0.71,0.71,0],[1.41,0.71,0.71]]
Softmax 后得到注意力权重→每个词"关注"其他词的程度。
第 3 个词的注意力 [1.41,0.71,0.71] 经 softmax 后最关注第 1 个词。
九、逐元素乘法(Hadamard 乘积)
数学定义:两个同型矩阵对应位置元素一一相乘,结果矩阵与原矩阵同型。用符号 ⊙ 表示。
B = [[5, 0], [2, 3]]
A ⊙ B = [[2×5, 3×0], [4×2, 1×3]] = [[10, 0], [8, 3]]
LSTM 的遗忘门决定上一时刻记忆中哪些信息要保留、哪些要遗忘:
上一时刻记忆 Cₜ₋₁ = (0.8, -0.5, 1.2, 0.3)(4 个记忆单元)
遗忘门输出 fₜ = (0.9, 0.1, 0.8, 0.3)(每个值 0~1,由 sigmoid 产生)
新记忆 = fₜ ⊙ Cₜ₋₁:
第1个:0.9 × 0.8 = 0.72(保留 90% → 几乎完整保留)
第2个:0.1 × (-0.5) = -0.05(保留 10% → 几乎遗忘)
第3个:0.8 × 1.2 = 0.96(保留 80%)
第4个:0.3 × 0.3 = 0.09(保留 30%)
含义:模型学会了对第 1 和第 3 个记忆保持较高的遗忘门值(接近 1),说明这些信息在当前时刻仍然重要;对第 2 个记忆的门值只有 0.1,说明这个信息已经不再需要了。
十、综合实战:手动完成一个迷你神经网络的全过程
把所有运算串联起来,完整走一遍 2 层神经网络的前向传播。
任务:判断一朵花是"山鸢尾"还是"变色鸢尾"
输入特征(标准化后):x = [0.8, 0.2, 0.5]
第一层参数:
W1(2×3) = [[0.15, 0.20, -0.30],
[-0.40, 0.50, 0.10]]
b1(2×1) = [0.05, -0.10]
第二层参数:
W2(2×2) = [[0.60, -0.20],
[-0.30, 0.80]]
b2(2×1) = [0.10, -0.05]
══════ 第一层计算 ══════
z1 = W1 × x + b1
z1₁ = 0.15×0.8 + 0.20×0.2 + (-0.30)×0.5 + 0.05
= 0.12 + 0.04 - 0.15 + 0.05 = 0.06
z1₂ = (-0.40)×0.8 + 0.50×0.2 + 0.10×0.5 + (-0.10)
= -0.32 + 0.10 + 0.05 - 0.10 = -0.27
a1 = ReLU(z1)
a1₁ = max(0, 0.06) = 0.06
a1₂ = max(0, -0.27) = 0(负值被截断为0!)
══════ 第二层计算 ══════
z2 = W2 × a1 + b2
z2₁ = 0.60×0.06 + (-0.20)×0 + 0.10 = 0.036 + 0 + 0.10 = 0.136
z2₂ = (-0.30)×0.06 + 0.80×0 + (-0.05) = -0.018 + 0 - 0.05 = -0.068
══════ Softmax 输出概率 ══════
e^0.136 = 1.1457
e^(-0.068) = 0.9342
总和 = 1.1457 + 0.9342 = 2.0799
P(山鸢尾) = 1.1457 / 2.0799 = 0.551 = 55.1%
P(变色鸢尾) = 0.9342 / 2.0799 = 0.449 = 44.9%
预测结果:模型认为这朵花是山鸢尾(概率 55.1%),但信心不高。
经过多轮训练后,权重会调整到让正确分类的概率接近 100%。