人工智能之数学基础 线性代数:第五章 张量

人工智能之数学基础 线性代数

第五章 张量


文章目录

  • [人工智能之数学基础 线性代数](#人工智能之数学基础 线性代数)
  • 前言
  • 一、什么是张量?
    • [1. 阶数(Order / Rank)](#1. 阶数(Order / Rank))
  • [二、3 阶张量的直观理解](#二、3 阶张量的直观理解)
    • [🌰 示例:彩色图像](#🌰 示例:彩色图像)
  • 三、张量的基本运算
    • [1. 张量加法与标量乘法](#1. 张量加法与标量乘法)
    • [2. 广播(Broadcasting)](#2. 广播(Broadcasting))
    • [3. 张量缩并(Contraction)------ 推广的"乘法"](#3. 张量缩并(Contraction)—— 推广的“乘法”)
      • [(a) **内积(点积)沿指定轴**:`np.tensordot`](#(a) 内积(点积)沿指定轴np.tensordot)
        • [📌 3 阶张量示例:](#📌 3 阶张量示例:)
      • [(b) **爱因斯坦求和约定(Einstein Summation)**:`np.einsum`](#(b) 爱因斯坦求和约定(Einstein Summation)np.einsum)
    • [4. 张量重塑(Reshape)与转置(Transpose)](#4. 张量重塑(Reshape)与转置(Transpose))
    • [5. 沿轴聚合操作(Aggregation)](#5. 沿轴聚合操作(Aggregation))
  • [四、3 阶张量的"乘法"类型详解](#四、3 阶张量的“乘法”类型详解)
    • [🔧 模态积(Mode-n Product)示例](#🔧 模态积(Mode-n Product)示例)
      • [Python 实现:](#Python 实现:)
  • 五、高级张量分解(简介)
  • [六、PyTorch / TensorFlow 中的张量](#六、PyTorch / TensorFlow 中的张量)
    • [PyTorch 示例:](#PyTorch 示例:)
  • [七、完整代码示例:3D 张量操作汇总](#七、完整代码示例:3D 张量操作汇总)
  • 八、总结
  • 后续
  • 资料关注

前言

虽然"张量"一词在物理学、微分几何中有更广义的定义,但在现代数据科学、机器学习和数值计算 中,张量通常被理解为多维数组(multi-dimensional array) 。本文将从这一实用视角出发,系统介绍张量的基本概念、3 维及以上张量的运算规则 ,并提供完整的 Python(NumPy / PyTorch)代码实现


一、什么是张量?

1. 阶数(Order / Rank)

张量的"阶"指其维度数量(注意:不是矩阵的秩!):

阶数 名称 数学对象 NumPy shape 示例
0 标量(Scalar) 单个数 ()
1 向量(Vector) 一维数组 (5,)
2 矩阵(Matrix) 二维数组 (3, 4)
3 3 阶张量 三维数组 (2, 3, 4)
n n 阶张量 n 维数组 (d₁, d₂, ..., dₙ)

关键点

  • 矩阵是 2 阶张量的特例;
  • 张量 ≠ 必须满足坐标变换规则(那是物理定义),在深度学习中 = 多维数组。

二、3 阶张量的直观理解

一个形状为 (I, J, K) 的 3 阶张量可视为:

  • I 个 J×K 矩阵堆叠而成(如彩色图像:3 个通道 × 高 × 宽)
  • J 个 I×K 矩阵沿第 1 维切片
  • K 个 I×J 矩阵沿第 2 维切片

🌰 示例:彩色图像

python 复制代码
# 一张 64×64 的 RGB 图像
image = np.random.rand(64, 64, 3)  # shape: (height, width, channels)
  • 第 0 维:高度(64)
  • 第 1 维:宽度(64)
  • 第 2 维:颜色通道(R, G, B)

三、张量的基本运算

1. 张量加法与标量乘法

  • 要求:两个张量形状完全相同(或可广播)
  • 操作:逐元素进行
python 复制代码
import numpy as np

A = np.random.rand(2, 3, 4)
B = np.random.rand(2, 3, 4)

C = A + B          # 逐元素相加
D = 2.5 * A        # 标量乘法

2. 广播(Broadcasting)

NumPy 允许不同形状的张量在满足规则下进行运算。

python 复制代码
A = np.random.rand(2, 3, 4)   # shape (2,3,4)
b = np.random.rand(4,)        # shape (4,) → 可广播到 (2,3,4)

C = A + b  # b 被自动扩展到每个 (i,j,:) 位置

广播规则(从后往前对齐维度):

  • 每一维要么相等,要么其中一个是 1,要么缺失。

3. 张量缩并(Contraction)------ 推广的"乘法"

(a) 内积(点积)沿指定轴np.tensordot

np.tensordot(A, B, axes)AB 的指定轴求和。

经典例子 :矩阵乘法是 tensordot 的特例:

python 复制代码
C = np.tensordot(A, B, axes=([-1], [0]))  # A: (m,n), B: (n,p) → C: (m,p)
📌 3 阶张量示例:
python 复制代码
# A: (2, 3, 4), B: (4, 5, 6)
# 想对 A 的第 2 轴(size=4)和 B 的第 0 轴(size=4)做缩并
C = np.tensordot(A, B, axes=([2], [0]))  # 结果 shape: (2, 3, 5, 6)

(b) 爱因斯坦求和约定(Einstein Summation)np.einsum

极其强大且灵活的张量运算工具!

语法:np.einsum('subscripts', operand1, operand2, ...)

常见用法:
python 复制代码
A = np.random.rand(2, 3, 4)
B = np.random.rand(4, 5)

# 1. 矩阵乘法(最后维 × 第一维)
C = np.einsum('ijk,kl->ijl', A, B)  # shape (2,3,5)

# 2. 沿某轴求和(迹、均值等)
sum_over_k = np.einsum('ijk->ij', A)  # 对 k 求和,shape (2,3)

# 3. 转置
A_transposed = np.einsum('ijk->kji', A)  # shape (4,3,2)

# 4. 逐元素乘 + 求和(类似内积)
x = np.random.rand(2, 3, 4)
y = np.random.rand(2, 3, 4)
inner = np.einsum('ijk,ijk->', x, y)  # 标量

💡 einsum 是处理高维张量的瑞士军刀!


4. 张量重塑(Reshape)与转置(Transpose)

python 复制代码
T = np.random.rand(2, 3, 4)

# 重塑
T_flat = T.reshape(-1)          # 展平为 (24,)
T_reshaped = T.reshape(6, 4)    # (2,3,4) → (6,4)

# 转置(任意维度重排)
T_trans = np.transpose(T, (2, 0, 1))  # 原 (0,1,2) → 新 (2,0,1),shape (4,2,3)
# 等价于
T_trans2 = T.transpose(2, 0, 1)

5. 沿轴聚合操作(Aggregation)

python 复制代码
T = np.random.rand(2, 3, 4)

mean_axis0 = T.mean(axis=0)    # shape (3,4)
sum_axis12 = T.sum(axis=(1,2)) # shape (2,)
max_all = T.max()              # 标量

四、3 阶张量的"乘法"类型详解

运算类型 描述 NumPy 实现
逐元素乘 A * B A * B
模态积(Mode-n Product) 张量 × 矩阵(沿某一模式) 自定义或 einsum
张量-向量积 张量 × 向量(缩并一维) einsum
张量-矩阵积 如 Tucker 分解中的核心运算 einsum 或专用库

🔧 模态积(Mode-n Product)示例

设张量 \\mathcal{X} \\in \\mathbb{R}\^{I \\times J \\times K} ,矩阵 U \\in \\mathbb{R}\^{P \\times I} ,则 mode-1 product 定义为:

Y = X × 1 U ∈ R P × J × K \mathcal{Y} = \mathcal{X} \times_1 U \in \mathbb{R}^{P \times J \times K} Y=X×1U∈RP×J×K

其中:

Y ( p , j , k ) = ∑ i = 1 I X ( i , j , k ) ⋅ U ( p , i ) \mathcal{Y}(p, j, k) = \sum_{i=1}^I \mathcal{X}(i, j, k) \cdot U(p, i) Y(p,j,k)=i=1∑IX(i,j,k)⋅U(p,i)

Python 实现:

python 复制代码
X = np.random.rand(3, 4, 5)   # (I,J,K) = (3,4,5)
U = np.random.rand(2, 3)      # (P,I) = (2,3)

# Mode-1 product: X ×₁ U
Y = np.einsum('pi,ijk->pjk', U, X)  # 注意 U 是 (p,i),所以是 'pi'
print("Y shape:", Y.shape)  # (2,4,5)

同理:

  • Mode-2: np.einsum('qj,ijk->iqk', V, X)
  • Mode-3: np.einsum('rk,ijk->ijr', W, X)

这是高阶 SVD(HOSVD)Tucker 分解 的基础。


五、高级张量分解(简介)

虽然超出基础范围,但值得了解:

分解 描述 应用
CP 分解 将张量表示为秩-1 张量之和 推荐系统、信号分离
Tucker 分解 X = G × 1 U ( 1 ) × 2 U ( 2 ) × 3 U ( 3 ) \mathcal{X} = \mathcal{G} \times_1 U^{(1)} \times_2 U^{(2)} \times_3 U^{(3)} X=G×1U(1)×2U(2)×3U(3) 数据压缩、特征提取
Tensor Train (TT) 链式低秩表示 高维函数逼近

可使用 tensorly 库实现:

python 复制代码
import tensorly as tl
from tensorly.decomposition import tucker

X = tl.tensor(np.random.rand(10, 10, 10))
core, factors = tucker(X, rank=[5, 5, 5])

六、PyTorch / TensorFlow 中的张量

深度学习框架中的张量支持 GPU 加速和自动微分。

PyTorch 示例:

python 复制代码
import torch

# 创建 3 阶张量
T = torch.randn(2, 3, 4, requires_grad=True)

# 运算(自动记录计算图)
U = torch.randn(5, 2)
Y = torch.einsum('pi,ijk->pjk', U, T)  # mode-1 product

# 反向传播
loss = Y.sum()
loss.backward()

print("T.grad shape:", T.grad.shape)  # (2,3,4)

七、完整代码示例:3D 张量操作汇总

python 复制代码
import numpy as np

# 创建 3 阶张量
X = np.random.rand(2, 3, 4)
print("X shape:", X.shape)

# 1. 逐元素运算
Y = X * 2 + 1

# 2. 沿轴求和
s0 = X.sum(axis=0)      # (3,4)
s01 = X.sum(axis=(0,1)) # (4,)

# 3. tensordot 缩并
A = np.random.rand(4, 5)
Z = np.tensordot(X, A, axes=([2], [0]))  # (2,3,5)

# 4. einsum 多种操作
# 转置
X_t = np.einsum('ijk->kij', X)
# mode-1 product
U = np.random.rand(7, 2)
X_mode1 = np.einsum('pi,ijk->pjk', U, X)  # (7,3,4)
# 内积
inner = np.einsum('ijk,ijk->', X, X)

# 5. 重塑
X_flat = X.reshape(-1)
X_reshaped = X.reshape(6, 4)

print("Z shape:", Z.shape)
print("X_mode1 shape:", X_mode1.shape)
print("Inner product:", inner)

八、总结

概念 说明
张量 = 多维数组 阶数 = 维度数
基本运算 加法、标量乘、广播
核心乘法 tensordoteinsum(推荐)
模态积 张量 × 矩阵(沿特定模式),用于高阶分解
工具 NumPy(CPU)、PyTorch/TensorFlow(GPU + 自动微分)
应用 视频数据(帧×高×宽×通道)、医学影像(3D MRI)、多关系图(实体×关系×实体)

💡 建议

  • 对于复杂张量运算,优先使用 np.einsum,它清晰、高效、通用;
  • 在深度学习中,张量是数据的基本载体,理解其操作是构建模型的基础。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
深蓝电商API8 小时前
2025爬虫技术前沿:AI驱动、多模态与反反爬的军备竞赛
人工智能·爬虫
深度学习实战训练营8 小时前
nnU-Net:基于unet的医学图像分割自适应框架,自动配置超参数与结构-k学长深度学习专栏
人工智能·深度学习
lybugproducer8 小时前
深度学习专题:模型训练的张量并行(一)
人工智能·深度学习·transformer
牛老师讲GIS8 小时前
2025年前端开发的未来:服务器优先、人工智能驱动、更贴近底层
运维·服务器·人工智能
jinglong.zha8 小时前
【Yolov8】图形化检测视频-源码免费分享
人工智能·yolo·目标跟踪·视觉检测·yolov8·yolov11
一个帅气昵称啊8 小时前
.Net——AI智能体开发基于 Microsoft Agent Framework 实现第三方聊天历史存储
人工智能·microsoft·.net
Darenm1118 小时前
关于AI 面试官项目:智选ai 基于 Vue3 + Django + Dify 的全栈开发实战
人工智能·python·django
掘金安东尼8 小时前
代理式人工智能:让大模型从“被动回答”走向“主动执行”
人工智能
啊阿狸不会拉杆8 小时前
《数字图像处理》第 6 章 - 彩色图像处理
图像处理·人工智能·opencv·算法·计算机视觉·数字图像处理