想象你走进一家乐高旗舰店,玻璃柜里摆着一座半人高的千年隼号。店员递来的说明书上没有任何零件照片,只有一张图:每个方框代表一种积木,每条连线代表“谁和谁卡槽咬合”。你照着这张图,就能把几千块小积木拼成星际飞船。张量网络干的正是同一件事——只不过它拆的不是乐高,而是高维数据。 数据分析里,“高维张量”就像一座超大乐高:录音频谱、彩色视频帧、社交关系立方体,里面塞着海量数字。直接处理它们既笨重又昂贵。张量网络就把这座大积木拆成小积木(低阶张量),再用一张“说明书”(网络图)画清所有连接关系。本文会带你从认识张量开始,掌握 CP 分解、Tucker 分解两大拆法,学会“卡槽咬合”(张量收缩)与“火车链条”(矩阵乘积态),最后看看量子物理和机器学习里,研究者如何用这张图驯服指数级庞大的数据。
对 AI 从业者而言,张量网络是处理高维参数的“压缩工具箱”:看懂它,你就掌握了模型压缩、张量补全、量子模拟等前沿方向的一把通用钥匙,能直观分析任何“连乘求和”结构的数据流。
可视化演示
展示CP分解将高阶张量分解为秩1分量之和、Tucker分解提取核心张量与因子矩阵、张量网络收缩运算合并共享指标的过程,可视化张量分解的图表示。
本节配有交互动效(进入视口后自动加载,约 3KB)。
CP分解张量网络图示 3阶张量分解为R个秩1分量之和,每个分量是向量外积 T≈Σa_r∘b_r∘c_r 秩R越大近似越精确但参数增加
张量入门
走进乐高仓库,你最先要分清货架上的“零件规格”:单个凸点是 1×1 的小砖,一条长条是 1×6 的扁砖,一块平板是 6×12 的大底盘。它们在数学世界里就像不同“阶”的物体。矩阵是二维的矩形货架,而张量是三维、四维乃至更高维的仓库——你往里走,每一层货架、每一排、每一格都放着一个数字。
张量(Tensor)的本质就是“多维数组”。标量是零阶张量,一个孤独的数字,像一颗散落的单凸点乐高;向量是一阶张量,像一排 1×4 的砖列;矩阵是二阶张量,铺成一整面墙;而三阶及以上的张量,才是真正立体的“三维仓库”。视频数据就是典型:宽度 × 高度 × 颜色通道 × 帧数,四阶张量装下整段影片。与矩阵不同,张量的每个“模”(mode)可以有不同的尺寸,就像乐高长条积木可以长短粗细各异。
处理高维张量时,最常用的“扳手”叫模展开(matricization):把 N 阶张量按某个模拉平成矩阵。比如一段四阶视频,按“帧”模展开,就变成“帧数 ×(宽×高×通道)”的大矩阵,接下来就能借用矩阵的工具。一个 N 阶张量的所有元素个数等于各维长度连乘,这个指数式的增长正是“维度灾难”的源头。
把张量想象成乐高仓库,问题就清晰了:矩阵是“一面墙”,张量是“整栋仓库”,而模展开就是“把仓库拆成一排排货架照片”。看懂这一层,高维数据不再是玄学,而是一个能画、能数、能拆的多维积木结构。
- 张量符号花体 $\mathcal{X}$ 代表整个高维数组,就像乐高说明书上给整座飞船画的缩略图。
- 属于符号$\in$ 表示“归属于”,张量 $\mathcal{X}$ 的每个元素都从某个数集中取。
- 实数集$\mathbb{R}$ 是全体实数集合,说明货架格子里的数字是实数(而不是文字、图像),这是数值计算的默认地盘。
- 维度连乘$I_1 \times I_2 \times \cdots \times I_N$ 标明张量每个模的长度,元素总数就是这些长度全部相乘——积木块的总数。
网络图表示
每套乐高套装都有一张“搭建说明图”:没有文字,只有方框和箭头。方框之间用线连接,表示“这两块积木要咬合”。张量网络就是数学界的搭建说明图——它把一张张量分解式翻译成一张图,让复杂的连乘求和一眼看清。
在张量网络中,节点(node)代表一个张量,就像说明书里的一个零件方框;边(edge)代表一个维度(一个共享指标),就像积木之间的卡槽咬合。一个三阶张量画成一个带三条“腿”的节点,每条腿是一个自由指标。如果两条边连接在一起,就表示这两个张量共享一个维度,将来可以沿这条边做收缩(相当于两块积木对接)。这比满页的求和公式直观得多:你不需要读公式,只要数腿和连线,就知道数据怎么流动。
“腿”分两种:开边是向外伸出的自由腿,对应最终保留下来的维度,像积木上露在外面的凸点;闭边是连接两个节点的共享边,对应会被求和消去的指标。整个网络图的每条边都标着维度大小,就像说明书标注每个卡槽规格。一个张量的阶数等于它的“腿数”:0 阶张量是无腿的孤立节点,1 阶张量是一条腿的端点,2 阶矩阵是两条腿的小横杆,3 阶张量是三腿的“三通”积木。
有了图,高维分解不再是一团乱麻:你手里的乐高说明书把“零件”和“咬合”分开,张量网络图则把“张量”和“维度共享”分开。下一节开始,我们就用这张图,看 CP 分解如何把一个大积木拆成若干标准件。
- 图的符号$G$ 是整张网络图,相当于整套说明书的封面——一页纸概括全部信息。
- 节点集合$V$ 是顶点集合,每个顶点对应一个张量,像零件清单里列出的每种积木方框。
- 边集合$E$ 是边的集合,每条边连接两个顶点,表示它们共享某一条维度的长度,就像两个卡槽刚好对齐。
CP分解
假设货架上摆着一座巨大的乐高恐龙,店员告诉你:它其实是 50 组“三件套”标准件拼起来的,每组三件分别是头、身、尾,三件咬合在一起构成恐龙的一层截面。CP 分解(CANDECOMP/PARAFAC)就是这么干:把一个大 N 阶张量,拆成 R 个“秩一张量”之和,每个秩一张量是 N 个向量的外积——像一组配套的积木条,每条积木条都简单、标准、好造。
先认识秩一张量。向量 $a, b, c$ 的外积 $a \otimes b \otimes c$ 得到一个三阶张量,其中任意切片都彼此成比例,像三根不同颜色的积木条垂直粘成一个“L 形三脚架”。CP 分解说:任意一个三阶张量 $\mathcal{X}$,都可以用 R 个这样的三脚架叠出来,每个三脚架乘以权重 $\lambda_r$ 再求和。R 是张量的秩——好比说明书写明的“需要多少组标准件”。矩阵的秩用奇异值分解(SVD)求,张量的 CP 秩则难得多,但理论上它是最小的 R。把 CP 分解画成网络图就是:一个大节点(原张量)被“拨开”,露出中心的小权重节点 $\lambda$ 和四周的因子向量节点,连线是共享的秩指标。
CP 分解像乐高的“标准件套装”:每个分量都是同样的结构(秩一),只是因子向量不同。它的优点是直观、参数少、可解释性强;缺点是要求所有模共用同一个 R,遇到“各维复杂度不均匀”的数据时会显得僵硬——下一节的 Tucker 分解就提供了更灵活的解法。
- 求和与秩$\displaystyle \sum_{r=1}^{R}$ 表示把 R 组标准件逐个叠加,$r$ 是第几组的编号。
- 权重系数$\lambda_r$ 是第 r 组标准件的“加粗系数”——有的组件粗壮,有的细瘦,决定这组外积在整体中的比重。
- 因子向量$a_r^{(n)}$ 是第 r 个分量在第 n 个模上的因子向量,像乐高三脚架的一条臂;上标 $n$ 指明它属于哪个维度方向。
- 外积运算$\otimes$ 是张量积(外积),把 N 个向量拼成一个 N 阶张量,每个位置取各向量对应元素相乘,就是积木三条臂在端点汇合。
Tucker分解
CP 分解把所有积木都规定成“三件套”,可现实中很多模型主体是一块大底盘,四周再挂不同规格的附件。Tucker 分解正是这种思路:它先把原张量压缩成一个小的核张量(core tensor),再在每个模上乘一个因子矩阵“撑开”到原尺寸。你猜怎么着?这正是前面学习的模展开的用武之地:对每个模分别做矩阵分解,截断主成分,就得到核张量和因子矩阵。
Tucker 分解式长这样:核张量 $\mathcal{G}$ 决定“积木核心”的骨架结构,因子矩阵 $A^{(1)}, \ldots, A^{(N)}$ 负责在每个方向上做线性变换。每个模可以有自己独立的“压缩后尺寸” $J_n$,所以不同方向可以压缩到不同程度。画成网络图,就是一个中心的核张量节点伸出 N 条边,每条边连到一个因子矩阵节点,因子矩阵的外端是原张量的开边——像一台小发动机(核)带动 N 根传动轴(因子)。当 N=2 时 Tucker 退化成普通的矩阵 SVD,这正是“张量版本的主成分分析”(HOSVD)。
对比一下两套拼法:CP 是“标准件求和”,Tucker 是“小核带多轴”。CP 参数更少但灵活性差,Tucker 参数略多但每个模可独立控制压缩比例。实际工程中,Tucker 压缩神经网络权重时往往更稳,因为不同层、不同通道的冗余程度显然不一样——这就像给恐龙头部配小零件、躯干配大底盘,而不是所有部位都用同一号积木。
- 核张量$\mathcal{G}$ 是核心张量,比原张量小得多,像乐高模型中央的动力核心,保留了各模之间的主要耦合结构。
- n 模乘积$\times_n$ 表示第 n 模乘积——因子矩阵 $A^{(n)}$ 只作用在张量的第 n 个模(方向)上,就像只拧紧某一根传动轴。
- 因子矩阵$A^{(n)}$ 是第 n 模的因子矩阵,通常取正交列,起到线性变换与降维的作用,像每根传动轴上的变速箱。
张量收缩
两块乐高积木要合体,唯一标准是“凸点数和孔位数刚好对上”,插紧后两块就变成一整块。“共享的尺寸”就是卡槽协议的实质。数学里,这种“咬合”操作叫张量收缩(contraction):两个张量共享一个维度时,沿着这个维度把对应元素相乘再求和,这个维度就被消掉,两个张量“粘”成一个新张量。
最熟悉的收缩是矩阵乘法:$C_{ij} = \sum_k A_{ik} B_{kj}$——两个矩阵共享“中间维度 k”,k 被求和消去,留下来的是 i、j 两个自由腿。这正是两个节点沿一条共享边连在一起时发生的图操作:连边 = 收缩。在张量网络中,任何闭边都代表一次收缩;网络图计算过程,就是把所有闭边逐个“吸掉”的过程。推广到高阶张量,只要共享一批指标,就沿这批指标全部求和,消去它们。给定一张网络图,可以按不同“咬合顺序”计算:先合并左边两块,还是先合并右边两块?算出来的最终数字都一样,但中间临时张量的大小天差地别——选择最优收缩顺序本身是一个 NP 难问题,也是张量网络计算的灵魂。
收缩就是张量网络的“卡槽咬合”。它不仅是计算工具,更是理解网络结构的语言:一条边被收缩,就是两个节点物理合并;多条边依次收缩,整张图就逐层折叠回一个大节点。在量子物理里,整个系统的“纠缠”正是靠这些共享边传递的。
- 共享指标$k_1 \cdots k_K$ 是 A、B 共享的 K 个维度,就像两块积木需要对齐的 K 个卡槽。
- 累加消去$\displaystyle \sum_{k_1 \cdots k_K}$ 表示把所有共享取值逐一代入、相乘、累加,累加完后这些维度在结果中消失。
- 结果张量$C_{i_1 \cdots i_N, j_1 \cdots j_M}$ 的结果只保留 A 的自由腿 $i$ 和 B 的自由腿 $j$,形状像两块积木粘合后留下的外露凸点。
矩阵乘积态
乐高有各种形状,其中一种特别适合“长条形”结构:火车链条。每一节车厢(小积木)只和前一节、后一节挂钩,连成一串后整体却可以非常长。矩阵乘积态(Matrix Product State,MPS)就是张量网络里的“火车链条”:把一个 N 阶张量表示成 N 个三阶张量首尾相连的链式网络。它最初诞生于量子物理,用来高效表示一维量子自旋链的波函数。
为什么叫“矩阵乘积态”?因为除了两端的张量是“向量型”,中间每个三阶张量固定两个辅助指标后,正好剩一个矩阵;把整条链从左到右做矩阵乘法,就得到原张量。链中的键维(bond dimension)$\chi$ 是相邻两个三阶张量共享维度的大小,它像火车的“挂钩强度”:$\chi$ 越大,车厢之间能传递的信息越多,MPS 的表达能力越强,但参数也越多。用 MPS 表示任意张量,$\chi$ 需要呈指数大;但很多实际数据(尤其是一维量子态)纠缠结构是局域的,小 $\chi$ 就能逼近得很好——这就是 MPS 压缩的物理直觉。张量网络图上,MPS 就是一条没有分叉的单链,每个节点带一条“物理腿”(物理指标 $i_n$)和两条“辅助腿”(键维指标 $\alpha$)。
MPS 告诉我们:指数规模的“大仓库”数据,可以用一条“火车链”存下来,存多少取决于挂钩强度 $\chi$ 而非车厢总数。把这条思路反过来用——从随机初始化的小 $\chi$ MPS 出发做优化,就得到了量子多体计算中大名鼎鼎的 DMRG 算法。链式结构如此好用,以至于它成了张量网络家族里最出圈的“车型”。
- 物理指标$i_1 i_2 \cdots i_N$ 是原始张量的 N 个维度,像每节车厢上的乘客区,是“看得见”的自由腿。
- 辅助指标$\alpha_1, \ldots, \alpha_{N-1}$ 是相邻车厢之间的挂钩,每个 $\alpha$ 被求和消去,所以叫辅助(隐藏)维度。
- 局域张量$A^{(n)}_{i_n, \alpha_{n-1}, \alpha_n}$ 是链上第 n 节车厢,它是一个三阶小张量,同时连接物理腿和左右挂钩。
典型应用
乐高搭建大赛上,同样的零件有不同的玩法:有人在量子物理实验室造“自旋链”,有人在 AI 公司压缩神经网络,还有人用它做推荐系统补全。张量网络正是这样一款多场景的“万能积木包”。
量子物理是多体系统的重灾区:一维自旋链有 $2^N$ 个量子态,N=100 时超过 $10^{30}$,直接存波函数完全不现实。DMRG 算法用 MPS 近似基态,沿着链逐个优化局域张量,在小 $\chi$ 下就能精确描述一维强关联系统,被誉为“一维量子多体问题的金标准”。机器学习中,神经网络权重是天然的高维张量:全连接层的 $W_{ij}$ 是二阶,卷积核是四阶,注意力矩阵是更高阶。用 Tucker 分解把权重张量压缩成“核张量+若干因子矩阵”,可以大幅减少参数量并加速推理。推荐系统里,用户×商品×时间的交互记录形成三阶张量,用 CP 分解做张量补全,能同时建模时序偏好与冷启动,比只做矩阵分解多利用一个维度。
从量子物理的精确模拟到 AI 的模型压缩,张量网络反复证明一件事:高维结构里的冗余可以被图化地拆解。下一次你看到一个大得吓人的高维数组,不妨问问自己:它能不能画成一张图?能不能拆成标准件?如果能,那张量网络就是你手里的乐高说明书。
- 原始存储量$\displaystyle \prod_{n=1}^{N} I_n$ 是原张量元素总数,所有维度连乘,指数爆炸的来源。
- 分解后存储量$\displaystyle \sum_{n=1}^{N} R I_n$ 是 CP 分解后的参数总数:每个模只需存 $I_n \times R$ 的因子矩阵,N 个模相加。
- 箭头方向$\longrightarrow$ 表示把“全部格点”改成“部分格点”,这是压缩的精髓:用可控的近似换指数的下降。
AI 应用场景
量子多体模拟:DMRG 与 MPS
阶段:数据表示与算法设计
解决的问题:一维量子自旋链的波函数随格点数指数增长,N=50 时 $2^{50}$ 个复数远超内存;传统精确对角化只能处理十几格点。MPS 将波函数压缩成链式张量网络,DMRG 通过逐个优化局域张量,在很小键维下逼近基态,把指数问题变成线性问题。
具体案例:凝聚态物理团队研究一维海森堡模型,用 Python 的 TenPy 或 itebd 包构建 MPS,设置 $\chi = 100$,迭代 50 次得到关联函数曲线,与解析解(Bethe ansatz)吻合。整个过程从“算不动”变成“秒级出图”。
神经网络权重压缩:Tucker 全连接层
阶段:模型压缩与推理优化
解决的问题:大模型全连接层 $W \in \mathbb{R}^{512 \times 512 \times 3 \times 3}$ 的卷积核参数量巨大;直接推理慢、存储贵。用 Tucker 分解把权重拆成核张量加四个因子矩阵,先算小的中间张量再逐模还原,实现 4~10 倍压缩且精度损失可控。
具体案例:某视觉团队的 ResNet 模型中,对第 3 个卷积层做 HOSVD:展开成矩阵、取前 30 个主奇异向量、重建核张量。压缩后 FLOPs 降低 38%,Top-1 精度仅下降 0.6%,部署在边缘设备上推理延迟减半。
推荐系统高阶补全:CP 张量补全
阶段:特征建模与召回排序
解决的问题:传统协同过滤只建模用户×物品矩阵,忽略“时间”维度;而把 (用户,物品,时间) 建成三阶张量后用 CP 分解补全缺失项,可以在保留时序模式的同时做冷启动推荐。稀疏张量用带正则的 ALS 更新因子矩阵,比矩阵分解多利用一个维度。
具体案例:电商平台把 30 天点击记录构造成 $U \times I \times T$ 三阶张量,用 CP-ALS 迭代补全,Top-100 召回率比 pureSVD 提升 12%,新增用户也能借助时间因子获得推荐。
Python 演示
import numpy as np def khatri_rao(A, B): """Khatri-Rao product: column-wise Kronecker product.""" R = A.shape[1] rows = [] for r in range(R): rows.append(np.kron(A[:, r], B[:, r])) return np.stack(rows, axis=1) def cp_als(X, R, iters=100): """CP decomposition via alternating least squares.""" N = X.ndim factors = [np.random.rand(X.shape[n], R) for n in range(N)] for _ in range(iters): for n in range(N): V = np.ones((R, R)) for m in range(N): if m != n: V *= factors[m].T @ factors[m] Xn = np.moveaxis(X, n, 0).reshape(X.shape[n], -1) Z = None for m in range(N - 1, -1, -1): if m == n: continue Z = factors[m] if Z is None else khatri_rao(Z, factors[m]) factors[n] = Xn @ Z @ np.linalg.pinv(V) lam = np.ones(R) for n in range(N): norms = np.linalg.norm(factors[n], axis=0) lam *= norms factors[n] = factors[n] / norms return factors, lam if __name__ == "__main__": np.random.seed(42) I, J, K, R = 8, 9, 10, 2 A = np.random.rand(I, R) B = np.random.rand(J, R) C = np.random.rand(K, R) X = np.einsum('ir,jr,kr->ijk', A, B, C) factors, lam = cp_als(X, R, iters=200) Xhat = np.einsum('r,ir,jr,kr->ijk', lam, factors[0], factors[1], factors[2]) err = np.linalg.norm(X - Xhat) / np.linalg.norm(X) print("重建相对误差:", err)
factors = [np.random.rand(X.shape[n], R) for n in range(N)]为每个模随机初始化一个 $I_n \times R$ 的因子矩阵,相当于先随便摆几组乐高标准件。V *= factors[m].T @ factors[m]累乘各因子矩阵的 Gram 矩阵,构造法方程中的系数矩阵 V,这是最小二乘的核心“拧螺丝”步骤。Xn = np.moveaxis(X, n, 0).reshape(X.shape[n], -1)执行模 n 展开,把高维张量压平成一个大矩阵,方便用线性代数处理。Z = factors[m] if Z is None else khatri_rao(Z, factors[m])按倒序遍历其他模的因子矩阵,堆叠出 Khatri-Rao 积 Z,相当于把所有“卡槽方向”对齐。factors[n] = Xn @ Z @ np.linalg.pinv(V)一次最小二乘更新:用展开矩阵乘 Z,再乘 V 的伪逆,得到第 n 个因子的新值。np.einsum('ir,jr,kr->ijk', A, B, C)用爱因斯坦求和约定构造一个精确秩 2 的三阶张量,相当于按说明书先搭一个已知结构。np.einsum('r,ir,jr,kr->ijk', lam, factors[0], ...)按 CP 公式 $\sum_r \lambda_r a_r \otimes b_r \otimes c_r$ 重建张量,验证分解是否成功。
常见误区
误区“矩阵 SVD 能做的,把张量拉成矩阵也能做,无非是多拉几次。”
正解张量处理远比矩阵复杂:矩阵有唯一的低秩近似(Eckart-Young 定理),张量的 CP 秩计算是 NP 难问题,Tucker 的 HOSVD 只是近似而不是最优;每个模需要独立处理、独立降维,不能一锅端。矩阵是把一块积木拍扁成照片,张量分解则是把积木拆成三维零件,难度完全不同。
为何常见:线性代数的学习路径从向量到矩阵,“多维数组”看起来只是“多几个下标”,让人误以为性质完全平移。
误区“节点之间连线越粗,说明两个张量之间的数据影响越大。”
正解在张量网络图中,边的语义是“共享维度”,即该维度将被收缩求和;它描述的是结构关系而非数值大小。数值权重藏在节点张量内部,不在边的样式里。就像乐高说明书里的连线只表示“哪里要咬合”,不表示“这块积木比那块重”。
为何常见:神经网络结构图里边常带权重,看到“网络图”三个字容易把两种图的约定混在一起。
误区“对任意张量做 CP 分解,取前 R 个分量,结果和矩阵截断 SVD 一样可靠。”
正解矩阵 SVD 的奇异值截断有无可争议的唯一最优性;张量 CP 分解的最优低秩近似甚至可能不存在(张量秩集合不闭),唯一性需要额外条件(如 Kruskal 秩、非负约束)。实际计算常用 ALS 迭代,结果依赖初始化,可能陷入不好的局部最优。
为何常见:学习者先用矩阵建立直觉,又把“秩”和“截断”两个词照搬到张量领域,忽略了张量秩的高阶非线性。
误区“先合并哪两个节点不影响计算量,选最顺手的就行。”
正解最终数字一样,但中间张量大小可以相差指数倍。比如一条四节点链,先收缩中间两个节点可能产生 $\chi^4$ 的临时张量,换成先缩两端则只需 $\chi^3$。寻找最优收缩顺序等价于最优括号化问题,是 NP 难的,实用中靠启发式算法。
为何常见:乘法有结合律让初学者觉得“怎么加括号都一样”,但结合律只保证结果相等,不保证计算量相等。
误区“Tucker 就是把 10×10×10 的张量剪成 5×5×5 的角落。”
正解裁剪是直接在原始坐标系里切数据,会丢失全局结构;Tucker 的做法是先对每个模做展开+SVD/特征分解,把数据投影到主成分子空间,得到核张量,再用因子矩阵还原。核张量是“压缩后的全局骨架”,不是原张量的某个子立方体。
为何常见:“压缩”的日常含义是裁剪或丢弃,而 Tucker 的压缩本质是坐标变换后的低维投影,两者被自然语言误导。
面试题
Q1. 张量的“阶”对应数组的什么属性?
- A.元素的个数
- B.维度的数量← 正确答案
- C.数值的大小
- D.内存的字节数
答案:B。张量的阶就是它拥有多少个维度(模)。标量 0 阶、向量 1 阶、矩阵 2 阶、三维数组 3 阶,像乐高的“腿数”决定积木类型;元素个数、数值、内存都和阶无关。
Q2. 张量网络图中,一个“节点”通常代表什么?
- A.一个标量数字
- B.一个张量因子← 正确答案
- C.一条数据边
- D.一次乘法运算
答案:B。节点对应张量(可能是因子矩阵、核张量或局域张量),边对应共享维度。节点是积木本身,边是积木之间咬合的卡槽;乘法是收缩过程的操作而不是节点。
Q3. 向量外积 u⊗v 得到的对象是什么阶?
- A.0 阶标量
- B.1 阶向量
- C.2 阶矩阵← 正确答案
- D.3 阶立方体
答案:C。两个一阶张量的外积得到二阶张量,即矩阵。外积的阶数是因子阶数之和:1+1=2,就像两条积木条垂直拼出一个平面底盘。
Q4. CP 分解中,由单个外积项 λ·a⊗b⊗c 组成的张量被称为什么?
- A.全零张量
- B.秩一张量← 正确答案
- C.对角张量
- D.对称张量
答案:B。只含一个外积项的分解对应秩 1,它是最简单的“三件套标准件”;全零、对角、对称描述的是张量结构属性,与“能否分解为单外积”无关。
Q5. Tucker 分解的核心特征是引入什么结构?
- A.一个对角权重
- B.一个核张量← 正确答案
- C.一条闭环边
- D.一组对角矩阵
答案:B。Tucker 分解的核心是核张量 G,它保存各模之间的高阶耦合,由因子矩阵在每模撑开。对角权重是 CP 的特点,闭环边和二对角矩阵不是 Tucker 的固定结构。
Q6. 下列哪些说法正确描述 CP 与 Tucker 的区别?
- A.CP 用公共秩统一处理所有模← 正确答案
- B.Tucker 允许各模使用不同降维尺寸← 正确答案
- C.CP 的每个分量都是一张秩一结构← 正确答案
- D.Tucker 的核张量必须是正方体
答案:ABC。CP 所有模共享同一个 R,每项是秩一外积;Tucker 每个模可独立配置核尺寸 $J_n$。核张量的各模尺寸可不同,不一定正方,所以 D 错。
Q7. 张量收缩时,被消去的维度必须满足什么条件?
- A.两个张量的该维大小完全相等← 正确答案
- B.两个张量的元素总个数完全相等
- C.该维在所有张量里都是最大的
- D.该维数值必须全部是正整数
答案:A。收缩沿共享维度逐项相乘求和,要求两个张量在该维长度一致,像卡槽尺寸必须匹配;元素总数、最大维、数值正负都与收缩能否进行无关。
Q8. 关于矩阵乘积态(MPS)的说法,哪些是正确的?
- A.它把 N 阶张量写成一条链式网络← 正确答案
- B.键维 χ 决定 MPS 的表达容量上限← 正确答案
- C.MPS 适合表示长程强纠缠的量子态
- D.增大 χ 能提高近似表示的精度← 正确答案
答案:ABD。MPS 是链式结构,χ 越大挂钩能传的信息越多,近似越精确;但链式结构只擅长短程纠缠,长程强纠缠需要指数大的 χ,故 C 错。
Q9. 张量网络收缩时,选择不同收缩顺序主要影响什么?
- A.最终数值结果的大小
- B.中间张量的最大规模← 正确答案
- C.网络图的边颜色变化
- D.初始张量的形状判断
答案:B。乘法结合律保证最终数字一致,但不同括号化方案产生中间张量的尺寸差异巨大,直接影响时间与内存开销;寻找最优顺序是 NP 难问题。
Q10. 张量分解在 AI 工程中的主要收益有哪些?
- A.把高维参数压成低秩结构省存储← 正确答案
- B.用压缩后权重加速矩阵乘推理← 正确答案
- C.对缺失张量补全实现推荐预测← 正确答案
- D.让模型损失函数自动归零收敛
答案:ABC。低秩分解减少参数、加速前向计算,张量补全利用多模信息做推荐;但分解是近似工具,不会让损失自动归零,D 是错误幻想。