4、线性代数基础:标量、向量、矩阵与张量,矩阵运算与性质,特征值与特征向量,SVD分解简介

说实话,很多搞深度学习的朋友一看到线性代数就头疼。我当年也一样,觉得这东西离实际工程太远了。直到我第一次调模型调不动,才发现——嗯,不懂线性代数,你连梯度怎么传的都搞不清楚。

这一章,咱们就把这些基础概念捋一遍。你放心,我不会堆公式,我会告诉你每个东西在深度学习里到底干嘛用的。

4.1 标量、向量、矩阵与张量

先说说这几个东西的区别。说白了,就是数据的“维度”不一样。

  • 标量:就是一个数。比如学习率 0.001,这就是个标量。
  • 向量:一列数。比如一个样本的特征,[身高, 体重, 年龄],这就是个三维向量。
  • 矩阵:二维表格。比如 100 个样本,每个样本 3 个特征,那就是 100×3 的矩阵。
  • 张量:三维及以上。比如一批彩色图片,32 张、每张 64×64 像素、RGB 三个通道,那就是 32×64×64×3 的张量。

重点来了:在 PyTorch 或 TensorFlow 里,所有数据都是张量。标量是 0 维张量,向量是 1 维,矩阵是 2 维。你记住这个就行。

我个人习惯把张量想象成一个“多维盒子”。你往里面塞数据,维度越高,盒子越复杂。但本质上,操作都是一样的。

4.2 矩阵运算与性质

矩阵运算里,最常用的就几个:加法、乘法、转置。我重点说说矩阵乘法,因为这是神经网络的核心。

矩阵乘法有个硬性要求:左矩阵的列数必须等于右矩阵的行数。比如 A 是 3×4,B 是 4×5,那结果就是 3×5。这个规则,你写代码的时候经常会被它坑到。

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
C = np.dot(A, B)
print(C)
# 输出:
# [[19 22]
#  [43 50]]

我的小技巧:调试的时候,先用小矩阵手动算一遍,再跟代码结果对比。我遇到过太多次维度不匹配的错误了,都是这么排查出来的。

矩阵还有几个重要性质:

  • 结合律:(AB)C = A(BC)。这个在计算图里很有用。
  • 分配律:A(B+C) = AB + AC。
  • 不满足交换律:AB 一般不等于 BA。这个要特别注意,我见过有人写代码时把顺序搞反了,结果模型怎么训都不收敛。

4.3 特征值与特征向量

特征值和特征向量,听起来很抽象。但你想想看,一个矩阵乘以一个向量,本质上是对这个向量做“拉伸”或“旋转”。

特征向量就是那些“只被拉伸、不被旋转”的特殊向量。特征值就是拉伸的倍数。

为什么深度学习里用得到? 比如主成分分析(PCA)做降维,就是找数据协方差矩阵的特征向量。我做过一个图像压缩的项目,就是用 PCA 把 256 维的特征降到 64 维,效果还不错。

import numpy as np

A = np.array([[4, 2], [1, 3]])
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

输出结果里,特征值告诉你每个方向上的“重要性”。特征值越大,那个方向上的信息越关键。

避坑指南:我曾经在计算协方差矩阵的特征值时,忘了先对数据做标准化。结果特征值相差好几个数量级,导致降维效果很差。记住,先标准化,再算特征值。

4.4 SVD分解简介

SVD(奇异值分解)是线性代数里的大杀器。它能把任意一个矩阵分解成三个矩阵的乘积:

A = U Σ VT

其中 U 和 V 是正交矩阵,Σ 是对角矩阵,对角线上的值就是奇异值。

你想想看,这个分解有什么用?

  • 数据压缩:只保留最大的几个奇异值,就能近似还原原矩阵。
  • 降维:跟 PCA 本质上是等价的。
  • 推荐系统:Netflix 的推荐算法早期就用 SVD 做矩阵分解。
import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
U, S, Vt = np.linalg.svd(A)

print("U 矩阵:\n", U)
print("奇异值:", S)
print("V 转置:\n", Vt)

# 用前两个奇异值近似还原
k = 2
A_approx = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]
print("近似矩阵:\n", A_approx)

我的经验:SVD 在图像压缩里特别好用。我曾经把一张 1024×1024 的灰度图做 SVD,只保留前 50 个奇异值,图片质量几乎没变,但存储空间从 1MB 降到了 200KB。你试试看,效果很惊艳。

好了,这一章的内容就这些。线性代数看起来公式多,但你在深度学习里真正高频用到的,就是矩阵乘法、特征分解和 SVD。把这些搞明白,后面看论文、调模型都会轻松很多。

下一章,咱们聊聊概率论基础。那个东西在模型评估和损失函数设计里特别重要,到时候见。