摘要
本文系统讲解线性代数在人工智能中的核心作用,涵盖向量、矩阵、张量的基本运算,深入解析矩阵乘法、逆矩阵、特征值与特征向量等关键概念,并通过NumPy代码实现所有操作。帮助AI学习者理解模型背后的数学原理,避免“只会调包”的困境。适合机器学习、深度学习初学者阅读。


一、为什么AI需要线性代数?

在机器学习和深度学习中,数据 = 数字的集合,而线性代数正是处理“数字集合”的数学工具。

1.1 线性代数在AI中的典型应用场景

应用 线性代数对象 说明
图像识别 张量(3D/4D数组) 一张RGB图像 = 高×宽×通道(如224×224×3)
推荐系统 矩阵 用户-物品评分矩阵(User-Item Matrix)
神经网络 向量与矩阵 权重矩阵W、偏置向量b、激活值a
降维(PCA) 特征值分解 找到数据的主要变化方向
自然语言处理 词向量(Word Embedding) 一个词 = 一个高维向量(如[0.2, -1.3, 0.8])

💡 一句话总结
AI模型的本质,就是对向量和矩阵进行一系列线性与非线性变换。


二、向量(Vector):数据的基本单元

2.1 什么是向量?

向量是一组有序的数字,可以表示:

  • 一个数据样本(如身高、体重、年龄)
  • 一个词的语义(词向量)
  • 神经网络中的激活值
import numpy as np

# 创建向量
v = np.array([1, 2, 3])
print(f"向量 v = {v}")
print(f"维度: {v.shape}")  # (3,) → 3维向量

2.2 向量的基本运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 1. 向量加法
c = a + b  # [5, 7, 9]

# 2. 数乘
d = 2 * a  # [2, 4, 6]

# 3. 点积(内积)
dot_product = np.dot(a, b)  # 1*4 + 2*5 + 3*6 = 32
# 或 a @ b

# 4. 向量长度(L2范数)
norm_a = np.linalg.norm(a)  # √(1²+2²+3²) = √14 ≈ 3.74

2.3 向量的几何意义

  • 点积a · b = |a||b|cosθ,衡量两个向量的“相似度”。
    • 若点积为0 → 正交(垂直)
    • 若点积大 → 方向接近
  • 在AI中的应用
    • 余弦相似度(推荐系统、NLP)
    • 注意力机制中的Query-Key匹配

三、矩阵(Matrix):数据的组织形式

3.1 什么是矩阵?

矩阵是二维数组,常用于表示:

  • 数据集(行=样本,列=特征)
  • 神经网络的权重
  • 图像(灰度图)
# 创建矩阵
A = np.array([[1, 2],
              [3, 4],
              [5, 6]])
print(f"矩阵 A = \n{A}")
print(f"形状: {A.shape}")  # (3, 2) → 3行2列

3.2 矩阵的基本运算

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

# 1. 矩阵加法
C = A + B  # 对应元素相加

# 2. 数乘
D = 2 * A  # 所有元素乘2

# 3. 矩阵乘法(核心!)
E = np.dot(A, B)  # 或 A @ B
# [[1*5+2*7, 1*6+2*8], [3*5+4*7, 3*6+4*8]] = [[19, 22], [43, 50]]

# 4. 转置
F = A.T  # [[1, 3], [2, 4]]

3.3 矩阵乘法在神经网络中的应用

在全连接层中:

输出 = 激活函数(输入向量 × 权重矩阵 + 偏置)
# 模拟一个神经元的前向传播
X = np.array([1.0, 2.0])        # 输入向量 (1x2)
W = np.array([[0.5, 0.8],       # 权重矩阵 (2x3)
              [0.3, 0.9]])
b = np.array([0.1, 0.2, 0.3])   # 偏置向量 (3,)

Z = X @ W + b  # 线性变换 (1x3)
A = np.tanh(Z) # 激活函数

print(f"输出: {A}")  # [0.82, 0.96, 0.99]

✅ 矩阵乘法实现了批量计算,是深度学习高效训练的基础。


四、矩阵的逆与线性方程组

4.1 逆矩阵(Inverse Matrix)

若矩阵 A 可逆,则存在 A⁻¹ 使得:

A × A⁻¹ = I (单位矩阵)
A = np.array([[4, 7],
              [2, 6]])

# 计算逆矩阵
A_inv = np.linalg.inv(A)
print(f"A的逆: \n{A_inv}")

# 验证
I = A @ A_inv
print(f"验证单位矩阵: \n{I}")  # 应接近 [[1,0],[0,1]]

4.2 在机器学习中的应用:线性回归解析解

线性回归的最优权重可通过正规方程求解:

w = (XᵀX)⁻¹Xᵀy
# 模拟数据
X = np.array([[1, 1],
              [1, 2],
              [1, 3]])  # 添加偏置项(全1列)
y = np.array([2, 3, 5])

# 解析解
XT = X.T
w = np.linalg.inv(XT @ X) @ XT @ y
print(f"权重 w: {w}")  # [截距, 斜率]

⚠️ 注意:当特征数很多时,(XᵀX)⁻¹ 计算代价高,通常用梯度下降替代。


五、特征值与特征向量(Eigenvalues & Eigenvectors)

5.1 数学定义

对于方阵 A,若存在向量 v 和标量 λ 使得:

A v = λ v

vA特征向量λ 是对应的特征值

  • 物理意义:Av 的作用,仅是缩放(不改变方向)。

5.2 NumPy实现

A = np.array([[4, 2],
              [1, 3]])

# 计算特征值和特征向量
eigenvals, eigenvecs = np.linalg.eig(A)

print(f"特征值: {eigenvals}")     # [5. 2.]
print(f"特征向量: \n{eigenvecs}") # 每列对应一个特征向量

验证:

v1 = eigenvecs[:, 0]  # 第一个特征向量
Av1 = A @ v1
lambda_v1 = eigenvals[0] * v1

print(f"Av1 = {Av1}")
print(f"λv1 = {lambda_v1}")
# 两者应相等

5.3 在AI中的应用

1. 主成分分析(PCA)
  • 协方差矩阵的特征向量 = 主成分方向
  • 特征值大小 = 该方向的方差(信息量)
2. 图神经网络(GNN)
  • 图的邻接矩阵特征分解用于节点嵌入
3. 稳定性分析
  • 神经网络训练中,Hessian矩阵的特征值反映收敛性

六、张量(Tensor):高维数据的统称

6.1 什么是张量?

  • 0阶张量 = 标量(scalar)
  • 1阶张量 = 向量(vector)
  • 2阶张量 = 矩阵(matrix)
  • 3阶及以上 = 张量(tensor)
# 3D张量:批量图像数据
# 形状:(batch_size, height, width, channels)
images = np.random.rand(32, 224, 224, 3)  # 32张RGB图
print(f"图像张量形状: {images.shape}")

# 4D卷积核
kernel = np.random.rand(3, 3, 3, 64)  # 3x3卷积核,输入3通道,输出64通道

6.2 张量运算

# 创建3D张量
T = np.array([[[1, 2], [3, 4]],
              [[5, 6], [7, 8]]])  # 形状 (2,2,2)

# 索引
print(T[0, 1, 0])  # 3

# 张量乘法(高级)
# 使用 np.tensordot 或 einsum
result = np.tensordot(T, T, axes=([1,2],[0,1]))  # 复杂操作

🔍 注意:PyTorch和TensorFlow中的Tensor是核心数据结构,支持自动微分。


七、实战:用线性代数实现图像灰度化

将RGB图像转为灰度图,公式:

Gray = 0.299×R + 0.587×G + 0.114×B
# 模拟一张小图像 (4x4 RGB)
image_rgb = np.random.randint(0, 256, (4, 4, 3), dtype=np.uint8)
print(f"RGB图像形状: {image_rgb.shape}")

# 权重向量
weights = np.array([0.299, 0.587, 0.114])  # (3,)

# 使用矩阵乘法(广播)
# image_rgb: (4,4,3), weights: (3,) → 结果: (4,4)
image_gray = np.dot(image_rgb, weights)
image_gray = image_gray.astype(np.uint8)

print(f"灰度图像形状: {image_gray.shape}")
print(f"示例像素: RGB{image_rgb[0,0]} → Gray{image_gray[0,0]}")

✅ 这就是线性代数在计算机视觉中的直接应用!


八、总结与学习建议

本文我们:

  • 理解了向量作为数据基本单元的作用;
  • 掌握了矩阵乘法在神经网络前向传播中的核心地位;
  • 学会了用NumPy计算逆矩阵特征值
  • 认识了张量在深度学习中的普遍性;
  • 实战了图像灰度化的线性变换。

📌 学习建议

  1. 不要死记公式,用代码验证;
  2. 理解几何意义(如点积=相似度);
  3. 联系AI场景(如权重矩阵=知识)。

九、下一篇文章预告

第5篇:概率论与统计基础:贝叶斯、分布与假设检验
我们将讲解:

  • 条件概率与贝叶斯定理(朴素贝叶斯分类器基础)
  • 常见概率分布(正态、伯努利、泊松)
  • 期望、方差、协方差
  • 在机器学习中的应用(如高斯朴素贝叶斯)

概率是理解不确定性的钥匙,也是AI决策的基石!


参考文献

  1. Gilbert Strang. 《Introduction to Linear Algebra》. Wellesley-Cambridge Press.
  2. Goodfellow, I., et al. 《Deep Learning》. Chapter 2: Linear Algebra.
  3. NumPy线性代数模块文档: Linear algebra — NumPy v2.3 Manual
  4. 3Blue1Brown线性代数系列(B站可看)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐