进阶篇-7-数学篇-6--向量、矩阵、张量在 AI 中的运算与应用:解锁智能的“计算语法”

向量、矩阵、张量在 AI 中的运算与应用:解锁智能的"计算语法"

作者:Weisian
日期:2026年1月31日

在之前的文章中,我们揭开了张量的神秘面纱------它是 AI 理解多维世界的"高维容器"。从标量到向量、矩阵再到张量,我们完成了"信息打包"的升维之旅。但这些装满数据的"容器",终究需要一套"计算语法"才能真正产生智能。

就像人类用语言交流需要语法规则,AI 处理数据也需要运算逻辑:

  • 为什么一张模糊的照片经过矩阵运算就能变清晰?
  • 为什么一段语音的张量经过卷积就能被识别成文字?
  • 为什么简单的向量点积,就能判断"你喜欢的奶茶"和"推荐的奶茶"是否匹配?

今天,我们就沿着"从一维到高维"的思路,拆解 AI 世界里最核心的 向量、矩阵、张量运算------不用复杂的数学推导,只用生活场景、代码示例和直观的公式,让你看懂:这些运算不是冰冷的数字游戏,而是 AI 理解世界、做出决策的"思考方式"。


前言:运算的本质:不是"算数",而是"建模关系"

很多人一听到"向量点积""矩阵乘法",就想到高中数学题。

但在 AI 里,这些运算从来不是为了"算出一个数",而是为了:

建模数据之间的关系,提取隐藏的模式,做出有意义的决策。

举个例子:

  • 你刷短视频时,系统推荐了一条猫视频------
    背后是用户向量和视频向量的点积,衡量"匹配度";
  • 手机美颜自动磨皮------
    背后是图像张量和卷积核矩阵的滑动乘加,识别"平滑区域";
  • 语音助手听懂"放周杰伦"------
    背后是音频张量经过多层矩阵变换,最终映射到"歌手标签"。

所以,AI 中的运算 = 关系建模 + 模式提取 + 决策支持。

🌰 场景:AI如何知道"你喜欢什么奶茶?"

假设你是奶茶店老板,想用 AI 预测顾客喜好。

你有两个顾客的数据:

python 复制代码
# 顾客A的特征向量:[年龄, 甜度偏好, 消费频率]
顾客A = [25, 0.8, 3]   # 25岁,喜欢甜(0.8),每周买3次
顾客B = [30, 0.3, 1]   # 30岁,不爱甜,每周买1次

# 珍珠奶茶的特征向量:[适合年龄, 甜度级别, 受欢迎度]
珍珠奶茶 = [0.9, 0.7, 0.8]

问题:怎么判断顾客A更可能喜欢珍珠奶茶?

你的直觉可能是:"看看他们像不像"------

年龄匹配吗?甜度合适吗?消费习惯吻合吗?

在数学上,这就是"相似度计算"

而 AI,正是通过 向量运算 来实现的。

下面,我们就从最基础的向量运算开始,一步步升级到张量的高维操作。


一、向量运算:AI 做"基础判断"的核心逻辑

向量是 AI 处理"单个对象特征"的最小单元------一个用户的偏好、一个像素的颜色、一个词的语义,都能被封装成向量。而向量运算,就是 AI 对这些"特征清单"做的最基础的"比较、组合、筛选"。

1.1 向量加法:特征的"叠加"与"融合"

🌰 生活场景:奶茶配方的微调

你点了一杯"珍珠奶茶"(向量 [300, 200, 50, 30]:牛奶、茶底、糖、珍珠),要求"多加20ml牛奶,少加10g糖",本质就是向量加法:

复制代码
原配方 + 调整量 = 新配方  
[300, 200, 50, 30] + [20, 0, -10, 0] = [320, 200, 40, 30]
📝 数学公式

对于两个 n 维向量 a⃗=[a1,a2,...,an]\vec{a} = [a_1, a_2, ..., a_n]a =[a1,a2,...,an] 和 b⃗=[b1,b2,...,bn]\vec{b} = [b_1, b_2, ..., b_n]b =[b1,b2,...,bn],加法规则为:

a⃗+b⃗=[a1+b1,a2+b2,...,an+bn] \vec{a} + \vec{b} = [a_1+b_1, a_2+b_2, ..., a_n+b_n] a +b =[a1+b1,a2+b2,...,an+bn]

💻 代码示例
python 复制代码
import numpy as np

# 珍珠奶茶基础配方:[牛奶, 茶底, 糖, 珍珠]
milk_tea = np.array([300, 200, 50, 30])
# 调整量:+20ml牛奶,-10g糖
adjust = np.array([20, 0, -10, 0])
# 向量加法
new_tea = milk_tea + adjust
print("调整后的配方:", new_tea)  # [320 200  40  30]
✨ 运算的意义

向量加法是 AI 中"特征融合"的基础:

  • 图像增强:给所有像素的 RGB 值加一个偏移量(提亮/变暗);
  • 词向量:"国王 - 男人 + 女人 = 女王"的核心就是向量加减;
  • 推荐系统:用户偏好 + 场景权重(如"周末")= 个性化推荐。

1.2 向量点积(内积):判断"相似度"的核心工具

🌰 生活场景:匹配你喜欢的奶茶

假设:

  • 你的偏好向量:[0.8, 0.1, 0.3, 0.9](喜欢牛奶、珍珠,不喜欢茶底);
  • 两款奶茶的特征向量:
    • 珍珠奶茶:[0.9, 0.2, 0.4, 0.8]
    • 水果茶:[0.2, 0.8, 0.7, 0.1]

点积越大,说明"匹配度越高":

复制代码
你 × 珍珠奶茶 = 0.8×0.9 + 0.1×0.2 + 0.3×0.4 + 0.9×0.8 = 1.62  
你 × 水果茶 = 0.8×0.2 + 0.1×0.8 + 0.3×0.7 + 0.9×0.1 = 0.54

AI 会优先推荐珍珠奶茶------这就是点积的核心作用:量化两个向量的"方向一致性"

📝 数学公式

对于向量 a⃗\vec{a}a 和 b⃗\vec{b}b ,点积(内积)为:

a⃗⋅b⃗=∑i=1naibi=∣a⃗∣∣b⃗∣cos⁡θ \vec{a} \cdot \vec{b} = \sum_{i=1}^n a_i b_i = |\vec{a}| |\vec{b}| \cos\theta a ⋅b =i=1∑naibi=∣a ∣∣b ∣cosθ

其中 θ\thetaθ 是两个向量的夹角:夹角越小(cos⁡θ\cos\thetacosθ 越大),点积越大,相似度越高。

💻 代码示例
python 复制代码
# 你的偏好:[牛奶偏好, 茶底偏好, 糖偏好, 珍珠偏好]
user_prefer = np.array([0.8, 0.1, 0.3, 0.9])
# 两款奶茶的特征
pearl_tea = np.array([0.9, 0.2, 0.4, 0.8])
fruit_tea = np.array([0.2, 0.8, 0.7, 0.1])

# 向量点积(两种写法)
score_pearl = np.dot(user_prefer, pearl_tea)
score_fruit = user_prefer @ fruit_tea  # 简写,等价于dot

print("珍珠奶茶匹配度:", score_pearl)  # 1.62
print("水果茶匹配度:", score_fruit)    # 0.54
✨ 运算的意义

点积是 AI 中"相似度计算"的基石:

  • 推荐系统:用户偏好 × 商品特征 = 匹配得分;
  • 人脸识别:两张人脸的特征向量点积,判断是否为同一人;
  • NLP:两个词向量的点积,判断语义相似度(如"猫"和"猫咪")。

1.3 向量范数:衡量"特征强度"

🌰 生活场景:判断奶茶的"甜度强度"

如果把"糖、蜂蜜、果糖"作为向量 [50, 20, 10],范数就是"总甜度"的量化:

  • 一阶范数(L1):∣50∣+∣20∣+∣10∣=80|50| + |20| + |10| = 80∣50∣+∣20∣+∣10∣=80(简单求和);
  • 二阶范数(L2):502+202+102≈54.77\sqrt{50^2 + 20^2 + 10^2} ≈ 54.77502+202+102 ≈54.77(欧氏距离)。
📝 数学公式
  • L1 范数(曼哈顿距离):∣∣a⃗∣∣1=∑i=1n∣ai∣||\vec{a}||1 = \sum{i=1}^n |a_i|∣∣a ∣∣1=∑i=1n∣ai∣;
  • L2 范数(欧氏距离):∣∣a⃗∣∣2=∑i=1nai2||\vec{a}||2 = \sqrt{\sum{i=1}^n a_i^2}∣∣a ∣∣2=∑i=1nai2 。
💻 代码示例
python 复制代码
# 奶茶糖分:[糖, 蜂蜜, 果糖]
sugar = np.array([50, 20, 10])
# L1范数
l1 = np.linalg.norm(sugar, ord=1)
# L2范数
l2 = np.linalg.norm(sugar, ord=2)
print("L1范数(总糖分):", l1)  # 80.0
print("L2范数(甜度强度):", l2)  # 54.772255750516614
✨ 运算的意义
  • L1 范数:用于"稀疏化"(如特征选择,让不重要的特征值为0);
  • L2 范数:防止模型过拟合(权重衰减)、计算样本间的距离;
  • 归一化:将向量除以 L2 范数,得到"方向不变、长度为1"的单位向量(便于点积比较)。

1.4 向量叉积:发现"隐藏关系"

🌰 生活场景

奶茶店发现:

  • 顾客A:年轻人 + 高甜度 → 爱买珍珠奶茶
  • 顾客B:年轻人 + 低甜度 → 爱买水果茶

这个"→"关系,可以用叉积的方向来表示。

📝 数学意义

得到垂直于两个向量的新向量,代表一种"组合关系"。

📐 公式(3维)

a⃗×b⃗=[a2b3−a3b2a3b1−a1b3a1b2−a2b1] \vec{a} \times \vec{b} = \begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2 - a_2b_1 \end{bmatrix} a ×b = a2b3−a3b2a3b1−a1b3a1b2−a2b1

🧠 AI中的应用
  • 3D计算机视觉:计算表面法向量
  • 物理模拟:计算力矩、角动量
  • 推荐系统中的组合特征:发现"年龄+时段"对购买的影响

🔮 叉积让AI能从现有特征中发现"隐含特征"


🎯 向量运算总结:AI的"初级智能"

运算 生活类比 AI意义 典型应用
加法 调色混合 特征融合 图像增强、语音合成
点积 条件匹配 相似度计算 推荐系统、分类器、注意力
叉积 关系发现 生成新特征 3D视觉、组合推荐

向量运算给了AI最基础的能力:比较、组合、评估。

但现实世界更复杂------

我们不止比较两个人,还要比较一群人的不同属性

不止判断一杯奶茶,还要分析整个菜单的销售规律

这就需要 矩阵运算


二、矩阵运算:AI 处理"批量数据"的核心逻辑

矩阵是"多个向量的集合"------一张灰度图、一批用户偏好、一组商品特征,都能表示为矩阵。矩阵运算的核心是"批量处理"和"规则映射",让 AI 能高效处理结构化数据。

2.1 矩阵加法:批量特征的同步调整

🌰 生活场景:调整3位顾客的奶茶配方

有3位顾客的珍珠奶茶订单(矩阵),需要统一"少加10g糖":

复制代码
订单矩阵(行:顾客,列:牛奶、茶底、糖、珍珠):
[
 [300, 200, 50, 30],  # 顾客A
 [250, 180, 40, 25],  # 顾客B
 [320, 220, 60, 35]   # 顾客C
]

调整向量:[0, 0, -10, 0]
→ 广播后变成矩阵:
[
 [0, 0, -10, 0],
 [0, 0, -10, 0],
 [0, 0, -10, 0]
]

相加结果:
[
 [300, 200, 40, 30],
 [250, 180, 30, 25],
 [320, 220, 50, 35]
]
📝 数学公式

对于同形状矩阵 Am×nA_{m×n}Am×n 和 Bm×nB_{m×n}Bm×n,加法规则为:

Cij=Aij+Bij C_{ij} = A_{ij} + B_{ij} Cij=Aij+Bij

(注:若其中一个是向量,会通过广播扩展为同形状矩阵)

💻 代码示例
python 复制代码
# 3位顾客的订单矩阵
orders = np.array([
    [300, 200, 50, 30],
    [250, 180, 40, 25],
    [320, 220, 60, 35]
])
# 调整量:少加10g糖(向量)
adjust = np.array([0, 0, -10, 0])
# 矩阵+向量(自动广播)
new_orders = orders + adjust
print("调整后的订单:")
print(new_orders)
✨ 运算的意义

矩阵加法是"批量特征调整"的核心:

  • 图像预处理:给整幅灰度图的所有像素减均值;
  • 批量归一化:对一批样本的特征同步调整,加速模型训练;
  • 数据清洗:给一批用户的行为数据统一修正偏差。

2.2 矩阵乘法:AI 中的"规则映射"

🌰 生活场景:奶茶配方的"标准化转换"

假设奶茶店有两套配方体系:

  • 原始配方(矩阵 AAA):3款奶茶 × 4种原料;
  • 转换规则(矩阵 BBB):4种原料 × 2种成本维度(原料成本、人工成本)。

矩阵乘法就是"用转换规则,把配方映射为成本":

复制代码
A(3×4):
[
 [300, 200, 50, 30],  # 珍珠奶茶
 [250, 150, 40, 20],  # 芋泥奶茶
 [200, 250, 60, 10]   # 水果茶
]

B(4×2):
[
 [0.05, 0.01],  # 牛奶:5元/100ml,人工1元/100ml
 [0.08, 0.01],  # 茶底:8元/100ml,人工1元/100ml
 [0.10, 0.02],  # 糖:10元/100g,人工2元/100g
 [0.20, 0.03]   # 配料:20元/100g,人工3元/100g
]

A×B(3×2):
[
 [300×0.05+200×0.08+50×0.10+30×0.20, 300×0.01+...+30×0.03],  # 珍珠奶茶成本
 [250×0.05+150×0.08+40×0.10+20×0.20, ...],  # 芋泥奶茶成本
 [200×0.05+250×0.08+60×0.10+10×0.20, ...]   # 水果茶成本
]
📝 数学公式

对于矩阵 Am×kA_{m×k}Am×k 和 Bk×nB_{k×n}Bk×n,乘积 Cm×nC_{m×n}Cm×n 的元素为:

Cij=∑t=1kAit×Btj C_{ij} = \sum_{t=1}^k A_{it} × B_{tj} Cij=t=1∑kAit×Btj

核心规则:前矩阵的列数 = 后矩阵的行数,结果矩阵的形状为"前行数 × 后列数"。

💻 代码示例
python 复制代码
# 3款奶茶 × 4种原料
A = np.array([
    [300, 200, 50, 30],
    [250, 150, 40, 20],
    [200, 250, 60, 10]
])
# 4种原料 × 2种成本
B = np.array([
    [0.05, 0.01],
    [0.08, 0.01],
    [0.10, 0.02],
    [0.20, 0.03]
])
# 矩阵乘法
cost = A @ B  # 等价于np.matmul(A, B)
print("每款奶茶的成本(原料成本, 人工成本):")
print(cost)
# [[48.  9.4]
#  [38.5 7.7]
#  [40.  8.1]]
✨ 运算的意义

矩阵乘法是 AI 中"特征变换"的核心:

  • 线性回归:特征矩阵 × 权重矩阵 = 预测值;
  • 图像变换:图片矩阵 × 旋转矩阵 = 旋转后的图片;
  • 神经网络全连接层:输入特征 × 权重矩阵 = 输出特征(本质就是矩阵乘法)。
🧠 AI中的核心应用
1. 神经网络的全连接层
python 复制代码
# 一个简单的神经网络层
输入特征 = 784    # 28×28图片展平
隐藏层大小 = 128
输出类别 = 10     # 数字0-9

# 权重矩阵:W1(784×128), W2(128×10)
# 前向传播:
输入数据 = X      # (batch_size, 784)
隐藏层 = X @ W1   # (batch_size, 128) ← 矩阵乘法!
输出层 = 隐藏层 @ W2  # (batch_size, 10)
2. 推荐系统的协同过滤
python 复制代码
# 用户-物品评分矩阵分解
评分矩阵 = R      # (用户数×物品数),很多缺失值
用户特征 = U      # (用户数×k)
物品特征 = V      # (物品数×k)

# 目标:R ≈ U @ V^T
# 通过矩阵乘法,用低维特征重建评分矩阵
预测评分 = 用户特征 @ 物品特征.T
3. 自注意力机制(核心中的核心)
python 复制代码
# Transformer的自注意力(简化)
查询Q = X @ W_Q   # (batch, seq_len, d_k)
键K = X @ W_K     # (batch, seq_len, d_k)
值V = X @ W_V     # (batch, seq_len, d_v)

注意力分数 = Q @ K.transpose(-1, -2)  # 矩阵乘法!(batch, seq_len, seq_len)

矩阵乘法的威力
一次运算,同时完成:

  • 所有样本的变换
  • 所有特征的综合
  • 所有关系的建模

这就是为什么GPU擅长AI计算 ------

GPU有成千上万个核心,能并行计算 矩阵乘法的每个元素,

而CPU只能串行计算。


2.3 矩阵转置与逆:调整"数据视角"

🌰 生活场景:奶茶订单的"行列互换"

原始订单矩阵(行:顾客,列:奶茶):

复制代码
[
 [2, 1, 0],  # 顾客A:2杯珍珠,1杯芋泥
 [0, 3, 2],  # 顾客B:3杯芋泥,2杯水果茶
 [1, 0, 4]   # 顾客C:1杯珍珠,4杯水果茶
]

转置后(行:奶茶,列:顾客):

复制代码
[
 [2, 0, 1],  # 珍珠奶茶:顾客A买2杯,C买1杯
 [1, 3, 0],  # 芋泥奶茶:顾客A买1杯,B买3杯
 [0, 2, 4]   # 水果茶:顾客B买2杯,C买4杯
]

转置的核心是"换视角"------从"顾客买了什么"变成"奶茶被谁买了"。

📝 数学公式
  • 矩阵转置:AijT=AjiA^T_{ij} = A_{ji}AijT=Aji;
  • 矩阵逆:若 A×A−1=IA×A^{-1}=IA×A−1=I(单位矩阵),则 A−1A^{-1}A−1 是 AAA 的逆(用于"还原"变换)。
💻 代码示例
python 复制代码
# 订单矩阵:行=顾客,列=奶茶
orders = np.array([
    [2, 1, 0],
    [0, 3, 2],
    [1, 0, 4]
])
# 转置
orders_T = orders.T
print("转置后的订单(行=奶茶,列=顾客):")
print(orders_T)

# 矩阵逆(仅方阵可用)
A = np.array([[1, 2], [3, 4]])
A_inv = np.linalg.inv(A)
print("\n矩阵A的逆:")
print(A_inv)
print("验证:A×A_inv = \n", A @ A_inv)  # 近似单位矩阵
✨ 运算的意义
  • 转置:适配不同模型的输入格式(如 PyTorch 的通道在前/在后);
  • 逆矩阵:求解线性方程组(如线性回归的闭式解)、还原变换(如解卷积)。

2.4 哈达玛积(逐元素乘):特征的"精细化调整"

🌰 生活场景:对不同顾客使用不同的促销策略

数学意义:两个同形状矩阵对应元素相乘。

python 复制代码
# 顾客购买记录(5×3)
购买记录 = [
    [3, 2, 1],  # 顾客1:奶茶、珍珠、糖的购买次数
    [1, 5, 2],
    [4, 1, 3],
    [2, 3, 4],
    [5, 2, 1]
]

# 促销权重:针对不同商品的不同折扣力度
促销权重 = [
    [0.9, 1.2, 0.8],  # 奶茶打9折,珍珠加量20%,糖打8折
    [0.9, 1.2, 0.8],
    [0.9, 1.2, 0.8],
    [0.9, 1.2, 0.8],
    [0.9, 1.2, 0.8]
]

调整后 = 购买记录 * 促销权重  # 逐元素相乘
📐 公式

A⊙B=[a11b11a12b12a21b21a22b22] A \odot B = \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} \\ a_{21}b_{21} & a_{22}b_{22} \end{bmatrix} A⊙B=[a11b11a21b21a12b12a22b22]

🧠 AI中的应用
  • 注意力权重的应用attention_weights * values
  • 门控机制:LSTM/GRU中的门控信号
  • 特征调制:StyleGAN中的风格迁移

🎛️ 哈达玛积是AI的"精细调节旋钮"


🎯 矩阵运算总结:AI的"系统思维"

运算 生活类比 AI意义 典型应用
矩阵加法 批量补货 批量调整 批量归一化、残差连接
矩阵乘法 多因素分析 线性变换 神经网络、推荐系统、注意力
转置 视角转换 数据重构 注意力计算、矩阵分解
哈达玛积 个性化促销 特征调制 注意力应用、门控机制

矩阵运算让AI具备了"系统思考"能力 ------

不再是一个一个处理,而是批量处理、建模关系、系统分析

但现实世界不仅有表格,还有时间、空间、颜色、层次 ......

这就需要 张量运算


三、张量运算:AI 处理"多维数据"的终极逻辑

张量是≥3维的数组,能描述更复杂的数据结构:

  • 彩色图片:(高度, 宽度, 通道)
  • 视频:(时间, 高度, 宽度, 通道)
  • 批量文本:(批次, 序列长度, 词向量维度)

张量运算的本质:在保持数据结构的同时进行计算。

张量是向量、矩阵的高维扩展,其运算的核心是"保留维度语义的同时,完成批量、结构化的计算"。我们聚焦 AI 中最核心的 4 种张量运算,用"图片/视频"作为例子,让你看懂运算的本质。


3.1 张量卷积:AI "提取局部特征"的核心

🌰 生活场景:用"磨皮模板"处理自拍

你手机的美颜功能,本质是用一个 3×3 的"柔化卷积核"(张量),在照片张量上滑动:

  • 输入:224×224×3 的彩色照片(3D 张量);
  • 卷积核:3×3×3 的柔化模板(3D 张量,对应 RGB 三通道);
  • 运算:卷积核在照片上逐像素滑动,计算局部加权平均,输出"磨皮后的照片"。
📝 数学公式

对于输入张量 XH×W×CX_{H×W×C}XH×W×C 和卷积核 KkH×kW×CK_{kH×kW×C}KkH×kW×C,卷积运算为:

Yij=∑m=1kH∑n=1kW∑c=1CXi+m−1,j+n−1,c×Km,n,c Y_{ij} = \sum_{m=1}^{kH} \sum_{n=1}^{kW} \sum_{c=1}^C X_{i+m-1,j+n-1,c} × K_{m,n,c} Yij=m=1∑kHn=1∑kWc=1∑CXi+m−1,j+n−1,c×Km,n,c

核心:局部感受野------每个输出像素只由输入的局部区域决定。

💻 代码示例(PyTorch)
python 复制代码
import torch
import torch.nn as nn

# 模拟一张彩色照片:1张 × 3通道 × 224高 × 224宽
img = torch.randn(1, 3, 224, 224)  # (N, C, H, W)

# 定义卷积层(磨皮效果:3×3平均卷积核)
conv = nn.Conv2d(
    in_channels=3,      # 输入3个颜色通道
    out_channels=3,     # 输出3个颜色通道
    kernel_size=3,      # 3×3卷积核
    padding=1,          # 保持尺寸不变
    bias=False
)
# 手动设置平均卷积核(柔化/磨皮)
conv.weight.data = torch.ones(3, 3, 3, 3) / 9.0

# 卷积运算(磨皮)
smooth_img = conv(img)
print("输入形状:", img.shape)        # torch.Size([1, 3, 224, 224])
print("输出形状:", smooth_img.shape)  # torch.Size([1, 3, 224, 224])
✨ 运算的意义

卷积是计算机视觉的基石:

  • 图像识别:浅层卷积提取边缘、纹理,深层卷积提取人脸、物体;
  • 语音识别:1D 卷积提取音频的频率特征;
  • 视频分析:3D 卷积同时提取空间(画面)和时间(帧)特征。

3.2 张量重塑(Reshape):换"打包方式"不换内容

🌰 生活场景:把"一摞照片"装进不同的信封

你有 32 张 224×224×3 的照片(4D 张量:32×224×224×3):

  • 想输入 CNN:保持 4D 形状(32,3,224,224);
  • 想输入全连接层:重塑为 2D 矩阵(32, 224×224×3=150528)。

重塑的核心是"维度重组"------数据不变,只是"打包方式"变了。

📝 核心规则
  • 重塑前后的总元素数必须相等:32×3×224×224=32×15052832×3×224×224 = 32×15052832×3×224×224=32×150528;
  • 维度顺序可调整(如 transpose),但需保留语义(如"通道"维度)。
💻 代码示例
python 复制代码
# 32张彩色照片:(32, 3, 224, 224)
batch = torch.randn(32, 3, 224, 224)
print("原始形状:", batch.shape)

# 重塑为:32个样本 × 150528个特征
flattened = batch.view(32, -1)  # -1 自动计算维度
print("展平后形状:", flattened.shape)  # torch.Size([32, 150528])

# 还原回原始形状
restored = flattened.view(32, 3, 224, 224)
print("还原后形状:", restored.shape)  # torch.Size([32, 3, 224, 224])
✨ 运算的意义

重塑是 AI 模型中"模块衔接"的关键:

  • CNN → 全连接层:将高维特征张量展平为矩阵;
  • Transformer:将图片张量(H×W×C)重塑为序列张量(N×C);
  • 批量处理:将 (8,4,224,224,3) 重塑为 (32,224,224,3),统一批次大小。

3.3 张量转置:高维视角切换

🌰 生活场景

整理衣柜,把"季节×类型×颜色"的排列,改为"颜色×季节×类型"。

📝 数学意义

交换任意两个维度。

python 复制代码
# 视频数据:(批次, 时间, 高, 宽, 通道)
video = torch.randn(8, 30, 224, 224, 3)  # 8个视频,每个30帧

# 转换为通道优先格式(PyTorch卷积要求)
video_conv = video.permute(0, 4, 1, 2, 3)  # (8, 3, 30, 224, 224)
# 维度变化:0→0, 4→1, 1→2, 2→3, 3→4

# 注意力机制中的转置
# Q: (batch, seq_len, dim)
# K: (batch, seq_len, dim)
attention_scores = torch.matmul(Q, K.transpose(1, 2))  # (batch, seq_len, seq_len)
# 这里transpose(1,2)交换第1和第2维度
🧠 AI中的应用
  • 框架兼容:PyTorch(N,C,H,W) ↔ TensorFlow(H,W,C)
  • 注意力计算Q @ K^T需要转置K的序列维和特征维
  • 张量分解:改变维度顺序以优化计算

🔀 张量转置让AI能按最有效的方式组织数据


3.4 张量广播:用"小规则"处理"大数据"

🌰 生活场景:用"统一的甜度标准"调整所有奶茶

你有 1000 款奶茶的配方张量(1000×4),需要给所有奶茶"减 10g 糖":

  • 调整量:向量 [0, 0, -10, 0](1×4);
  • 广播:自动将调整量扩展为 1000×4 的张量,再与配方张量相加。
📝 广播规则(简化版)
  1. 从右往左对齐维度;
  2. 维度大小为 1 的,自动复制到匹配对方的大小;
  3. 非 1 且不相等的维度,报错。
💻 代码示例
python 复制代码
# 1000款奶茶 × 4种原料
teas = torch.randn(1000, 4)
# 调整量:减10g糖(第3列)
adjust = torch.tensor([0, 0, -10, 0])  # (4,)

# 广播运算:adjust 自动扩展为 (1000,4)
new_teas = teas + adjust
print("原始形状:", teas.shape)    # torch.Size([1000, 4])
print("调整后形状:", new_teas.shape)  # torch.Size([1000, 4])
✨ 运算的意义

广播是 AI 中"批量归一化"的核心:

  • 图像预处理:给一批图片(32×224×224×3)减去 RGB 均值(3,);
  • 模型训练:给批量输出(32,1000)加偏置(1000,);
  • 节省内存:无需复制重复的规则张量,直接复用。

3.5 张量乘法:高维关系的建模

张量乘法有多种形式,最重要的三种:

1. 张量缩并(Einstein求和)

生活场景:分析"用户×时间×商品"的三维购买记录,找出"用户×商品"的稳定偏好。

数学意义:沿着指定维度求和,降低张量阶数。

python 复制代码
# 三维购买记录:(用户, 时间, 商品)
# 5个用户,7天,3种商品
purchase = torch.randn(5, 7, 3)

# 计算每个用户对每种商品的总购买量(缩并时间维度)
user_item = torch.einsum('utg->ug', purchase)  # 形状:(5, 3)

# 等价于:
user_item = purchase.sum(dim=1)  # 沿时间维度求和
2. 张量点积(高阶)

生活场景:在"用户×特征×时间"的三维数据中,用三维权重张量进行复杂预测。

数学意义:在多个维度上同时进行点积。

python 复制代码
# 输入:用户行为序列 (batch, seq_len, features)
x = torch.randn(32, 50, 128)

# 三维卷积核:(输出通道, 输入通道, 时间宽度, 特征宽度)
kernel = torch.randn(64, 128, 3, 5)

# 3D卷积 = 高维张量点积
output = torch.nn.functional.conv2d(
    x.unsqueeze(1),  # 增加通道维:(32, 1, 50, 128)
    kernel,          # (64, 128, 3, 5)
    padding=(1, 2)   # 时间补1,特征补2
)  # 输出:(32, 64, 50, 128)
3. 批量矩阵乘法

生活场景:同时处理32个句子中每个词的注意力计算。

数学意义:对批次的每个样本独立进行矩阵乘法。

python 复制代码
# 多头注意力中的批量矩阵乘法
# Q: (batch, heads, seq_len, head_dim)
# K: (batch, heads, seq_len, head_dim)
attn_scores = torch.matmul(Q, K.transpose(-2, -1))  # (batch, heads, seq_len, seq_len)

# 这等价于对每个head、每个batch独立做矩阵乘法
# for b in range(batch):
#   for h in range(heads):
#     attn_scores[b,h] = Q[b,h] @ K[b,h].T

3.6 爱因斯坦求和约定(einsum):张量运算的通用语言

python 复制代码
# einsum能表达任何张量运算
# 基本语法:'输入维度->输出维度'

# 1. 向量点积
dot = torch.einsum('i,i->', a, b)

# 2. 矩阵乘法
matmul = torch.einsum('ij,jk->ik', A, B)

# 3. 批量矩阵乘法
batch_matmul = torch.einsum('bij,bjk->bik', A, B)

# 4. 注意力计算(完整版)
# Q: (b, h, t, d), K: (b, h, t, d), V: (b, h, t, d)
attn_output = torch.einsum('bhtd,bhsd,bhsv->bhtv', Q, K, V)
# 读作:对d和s求和,得到(b, h, t, v)

🌌 einsum的伟大之处
用一行代码清晰表达复杂的高维运算,避免嵌套循环和手动转置。

🌰 生活场景:计算视频中"每帧的平均亮度"

视频张量:300帧 × 1080高 × 1920宽 × 3通道(4D 张量);

需求:计算每帧的平均亮度(输出 300,)。

用 einsum 可以"一句话"描述运算:

复制代码
einsum("f h w c -> f", video)

解释:

  • f=帧,h=高,w=宽,c=通道;
  • -> f:输出只保留帧维度;
  • 隐含逻辑:对 h、w、c 维度求和,再取平均。
📝 语法规则

einsum("输入维度 -> 输出维度", 张量)

  • 维度用单个字母表示(如 b=batch, h=height);
  • 重复出现的维度:表示"对该维度求和";
  • 输出维度:表示"保留的维度"。
💻 代码示例
python 复制代码
# 模拟视频张量:300帧 × 1080高 × 1920宽 × 3通道
video = torch.randn(300, 1080, 1920, 3)

# 计算每帧的平均亮度
frame_brightness = torch.einsum("f h w c -> f", video) / (1080*1920*3)
print("每帧平均亮度形状:", frame_brightness.shape)  # torch.Size([300])

# 进阶:计算自注意力得分(替代多次转置+乘法)
# Q: (32, 50, 512), K: (32, 50, 512)
Q = torch.randn(32, 50, 512)
K = torch.randn(32, 50, 512)
# 计算注意力得分:(32,50,50)
attn_scores = torch.einsum("b i d, b j d -> b i j", Q, K)
print("注意力得分形状:", attn_scores.shape)  # torch.Size([32, 50, 50])
✨ 运算的意义

einsum 是高维张量运算的"瑞士军刀":

  • 替代复杂的转置、求和、乘法组合;
  • 可读性强:直接用维度描述运算逻辑;
  • 通用性强:支持任意高维张量的自定义运算(如注意力、张量分解)。

🎯 张量运算总结:AI的"高维思维"

运算 生活类比 AI意义 典型应用
卷积 放大镜扫描 局部特征提取 CNN、边缘检测、纹理分析
重塑 乐高重组 形状转换 网络层接口、多头注意力
转置 衣柜整理 维度重排 框架兼容、注意力计算
广播 模板复制 智能形状匹配 批量归一化、位置编码
张量乘法 多维分析 高维关系建模 3D卷积、einsum运算

张量运算让AI具备了真正的"高维智能" ------

能在保持数据结构(时间、空间、通道)的同时进行计算,

理解图像的局部与全局,

理解语言的顺序与依赖,

理解视频的时空连续性。


四、从运算到应用:向量、矩阵、张量如何撑起 AI 系统

我们用一张表,总结不同维度运算在 AI 核心场景中的应用:

运算类型 核心应用场景 典型例子 运算的核心价值
向量运算 单样本特征处理 词向量相似度、用户偏好匹配、图像像素调整 量化特征的"相似度"和"偏移量"
矩阵运算 批量结构化数据处理 线性回归、全连接层、订单/配方转换 批量特征的"规则映射"和"维度转换"
张量卷积 局部特征提取 图像识别、语音特征提取、视频动作识别 保留空间/时间结构,提取层次化特征
张量重塑 模块衔接 CNN→全连接层、图片→序列(Transformer) 适配不同模型的输入格式,不丢失信息
张量广播 批量归一化 图像均值消减、模型偏置添加 高效复用规则,节省内存
张量einsum 高维自定义运算 自注意力计算、视频特征聚合 简化高维运算逻辑,提升可读性

🌰 完整案例:AI 识别一张猫图的运算流程

  1. 输入 :一张猫图 → 3D 张量 (224,224,3)
  2. 预处理
    • 广播:减去 RGB 均值 (3,) → 归一化;
    • 重塑:转为 (1,3,224,224)(适配 PyTorch 输入);
  3. CNN 特征提取
    • 卷积:用 64 个 3×3 卷积核 → 输出 (1,64,224,224)
    • 池化:下采样 → 输出 (1,64,112,112)
  4. 特征展平
    • 重塑:(1,64×112×112) = (1,802816)
  5. 分类预测
    • 矩阵乘法:展平特征 × 全连接层权重 → 输出 (1,1000)
    • 向量运算:Softmax → 概率分布,取最大值 → 识别为"猫"。

整个过程,就是向量、矩阵、张量运算的组合------没有这些运算,AI 就无法从像素中"读懂"图片内容


五、实战:一个完整的AI运算流程

让我们看一个完整例子:AI如何识别手写数字?

5.1 数据准备:从图片到张量

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

# 1. 原始数据:一张28×28的手写数字图片
# 在计算机中存储为0-255的整数矩阵
original_image = [
    [0, 0, 0, ..., 255, 0],  # 28行
    ...
]  # 形状:(28, 28)

# 2. 转换为张量并归一化
image_tensor = torch.tensor(original_image, dtype=torch.float32) / 255.0
# 现在值在0-1之间,形状:(28, 28)

# 3. 添加批次维度和通道维度
# 卷积层要求:(批次, 通道, 高, 宽)
input_tensor = image_tensor.unsqueeze(0).unsqueeze(0)  # (1, 1, 28, 28)

5.2 卷积层运算:提取特征

python 复制代码
# 定义第一个卷积层
conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
# 权重形状:(32, 1, 3, 3)
# 偏置形状:(32,)

# 前向传播(实际发生的过程):
# 1. 输入张量:(1, 1, 28, 28)
# 2. 卷积核滑动:32个3×3的窗口扫描整张图
# 3. 每个位置计算:输入3×3区域与卷积核的点积 + 偏置
# 4. 结果:32张特征图,每张28×28
x = conv1(input_tensor)  # 形状:(1, 32, 28, 28)

# 应用激活函数(ReLU):逐元素运算
x = F.relu(x)  # 负值变0,正值不变

# 池化层:下采样,保留主要特征
x = F.max_pool2d(x, 2)  # 形状:(1, 32, 14, 14)
# 每个2×2区域取最大值,尺寸减半

5.3 全连接层运算:分类决策

python 复制代码
# 展平:从特征图变为向量
x = x.view(1, -1)  # 形状:(1, 32*14*14) = (1, 6272)

# 全连接层:矩阵乘法
fc1 = nn.Linear(6272, 128)  # 权重形状:(128, 6272)
x = fc1(x)  # (1, 128)
x = F.relu(x)

# 输出层:10个数字的概率
fc2 = nn.Linear(128, 10)  # (10, 128)
logits = fc2(x)  # (1, 10)

# Softmax:将分数转换为概率
probs = F.softmax(logits, dim=1)  # (1, 10)
# 例如:[0.01, 0.01, 0.85, 0.02, ...] ← 可能是数字"2"

5.4 损失计算与反向传播

python 复制代码
# 假设真实标签是数字"2"(索引2)
target = torch.tensor([2])

# 计算交叉熵损失
loss = F.cross_entropy(logits, target)

# 反向传播:自动计算所有参数的梯度
loss.backward()

# 梯度下降更新参数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
optimizer.step()  # 参数 = 参数 - 学习率 × 梯度

这个过程中涉及的所有运算

  1. 张量创建与重塑:准备数据
  2. 卷积(张量乘法):提取空间特征
  3. 逐元素运算:ReLU激活、池化
  4. 矩阵乘法:全连接层
  5. Softmax:概率转换
  6. 损失计算:标量运算
  7. 自动微分:计算所有梯度
  8. 梯度下降:参数更新

🎯 这就是一个完整AI模型的"数学三部曲"

向量 → 矩阵 → 张量 → 预测 → 损失 → 梯度 → 更新


六、运算的硬件加速:为什么GPU这么快?

你可能听说过:AI训练需要GPU。但为什么?

核心原因:AI运算的本质是并行化的张量运算。

6.1 CPU vs GPU:不同的设计哲学

python 复制代码
# CPU方式(串行):
result = []
for i in range(1000):
    for j in range(1000):
        result[i][j] = a[i][j] + b[i][j]
# 需要100万次循环,一次一次计算

# GPU方式(并行):
result = a + b  # 一次性对所有元素进行加法
# GPU有成千上万个核心,每个核心计算一个元素

6.2 矩阵乘法的GPU加速

python 复制代码
# 两个大矩阵相乘
A = torch.randn(4096, 4096).cuda()  # 放在GPU上
B = torch.randn(4096, 4096).cuda()

# CPU可能需要几秒钟
# GPU(如A100)只需几毫秒!
C = torch.matmul(A, B)

为什么这么快?

  1. 并行计算:4096×4096=16,777,216个元素同时计算
  2. 内存带宽:GPU有高带宽内存,快速读取数据
  3. 专用硬件:Tensor Core专为矩阵乘法优化
  4. 批处理优化:一次性处理整个批次

6.3 现代AI芯片的运算优化

芯片类型 专长 典型运算 加速原理
GPU 并行浮点运算 矩阵乘法、卷积 数千个核心并行
TPU 矩阵乘法 神经网络推理 脉动阵列、量化计算
NPU AI推理 卷积、注意力 专用指令集、内存优化

硬件与算法的共同进化

AI算法需要并行运算 → 硬件提供并行能力 → 新算法利用更多并行性 → ...


总结:运算的本质,是 AI "理解世界的逻辑"

我们从最简单的向量加法开始,

一路走到复杂的张量卷积和注意力机制,

看到了AI如何通过数学运算,

从原始数据中提取模式、做出预测、不断学习。

回顾我们的"数学三部曲"

  1. 向量运算:AI的"基础直觉"

    • 比较、组合、评估单个对象
    • 核心:点积 = 相似度计算
  2. 矩阵运算:AI的"系统思维"

    • 批量处理、关系建模、线性变换
    • 核心:矩阵乘法 = 网络中的信息流动
  3. 张量运算:AI的"高维智能"

    • 保持结构、局部感知、时空理解
    • 核心:卷积 = 空间特征提取,注意力 = 关系建模

这些运算不只是数学符号,它们是:

  • 推荐系统"猜你喜欢"的匹配算法
  • 人脸识别"认出你"的特征提取器
  • 语音助手"听懂话"的序列处理器
  • 自动驾驶"看懂路"的视觉理解器

运算的意义,远超过计算本身

  • 向量点积,让AI知道"你喜欢的我也喜欢"
  • 矩阵乘法,让AI学会"从特征到决策的映射"
  • 张量卷积,让AI看到"边缘、纹理、物体"
  • 注意力机制,让AI理解"这个词和那个词的关系"

每一次你刷到精准的短视频推荐,

每一次你用人脸解锁手机,

每一次语音助手正确响应你的命令,

背后都是这些运算在默默工作。

🌟 运算,是AI从数据中提取智慧的过程
数据是矿石,模型是熔炉,而运算就是那炼金的火焰。

下次当你惊叹AI的智能时,

不妨想一想:

那些在芯片中飞速流转的向量、矩阵、张量,
正通过精妙的数学运算,
把冰冷的数字,变成温暖的理解。

运算不说话,但它让AI有了思考的能力------
在每一次计算中,为你创造智能。


延伸思考

随着AI发展,新的运算不断涌现:

  • 图神经网络:图结构上的消息传递
  • 神经渲染:3D场景的微分渲染
  • 量子机器学习:量子态上的线性代数

但无论形式如何变化,
核心依然是:用数学运算,从数据中提取模式

这就是AI的永恒主题------
用计算,理解世界

运算不说话,但它一直在帮 AI,读懂这个世界。

相关推荐
阿杰学AI2 小时前
AI核心知识76——大语言模型之RAG 2.0(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·rag·检索增强生成·rag2.0
shangjian0072 小时前
AI-大语言模型LLM-Transformer架构7-模型参数量计算
人工智能·语言模型·transformer
说私域3 小时前
开源链动2+1模式商城小程序在深度分销数字化转型中的应用研究
人工智能·小程序·开源·流量运营·私域运营
weixin_509138343 小时前
专业书评 | 《智能体认知动力学导论》:当思维有了形状
人工智能·智能体·认知动力学
nvd113 小时前
LangChain 核心对比:ChatPromptTemplate vs PromptTemplate
人工智能·langchain
万岳软件开发小城3 小时前
在线问诊系统源码实战:视频/图文问诊平台搭建步骤全解析
人工智能·开源·源码·在线问诊系统源码·问诊app开发·问诊软件开发·视频问诊小程序
DN20203 小时前
AI销售机器人的隐私痛点与破解之道
人工智能·python·机器学习·机器人·节日
VALENIAN瓦伦尼安教学设备3 小时前
镭射对心仪在联轴器找正作用
大数据·数据库·人工智能·嵌入式硬件
清铎3 小时前
项目_Agent实战
开发语言·人工智能·深度学习·算法·机器学习