超详细!CP、Tucker分解

本文旨在对张量的CP、Tucker分解进行超详细讲解,希望能够帮助读者对这俩张量分解算法有深刻的理解。

本文主要分成三个部分:section1主要介绍Notation and Preliminaries、section2介绍CP分解、section3介绍Tucker分解

Introduction

首先,给出本文最关键的一个点:

这两种张量分解算法可以被看做是张量奇异值分解的高阶扩展:CP分解将张量分解为秩一张量之和,Tucker分解是主成成分分析(PCA)的高阶形式。

Notation and Perliminaries

1.何为张量?

向量是一维,矩阵是二维,张量就代表三维及以上,或者说,我们可以将张量理解为高阶矩阵
在这里插入图片描述
这里我举一个具体的应用场景:在网络测量领域,如果我们想要测量 n n n 个网络设备之间的延迟,那么,很自然地,在具体的某一时刻,我们会将这 n n n 个网络设备两两之间通信的延迟表示为一个 n × n n \times n n×n矩阵。接下来,如果我们收集了许多不同时刻的数据,比方说 n 3 n_{3} n3 个时刻,我们将这些数据排列起来,这样就构成了一个 n × n × n 3 n \times n \times n_{3} n×n×n3 张量,如下图所示

在这里插入图片描述
2.Fiber?

Fiber: 直译的话就是纤维(感觉这么翻译多少有点奇怪,因此还是直接用Fiber吧)

在这里插入图片描述
Fiber是矩阵行和列的高阶类似物,因此,我们不妨先来看看矩阵的Fiber。上图是一张纤维(真的是纤维!)的图片,我们可以看到,在矩阵中,Fiber其实也就是代表着行和列。

那么在张量中呢?话不多说,直接上图。

在这里插入图片描述
这张图还是很直观的,相信大家也对Fiber有了一个直观的理解。
严谨起见,还是给出三阶张量中不同方向的Fiber的符号表示: X : , j , k X_{:,j,k} X:,j,k X i , : , k X_{i,:,k} Xi,:,k X i , j , : X_{i,j,:} Xi,j,: 可以与上图一一对应。

3.Slice?

Slice: 翻译成切片
和Fiber类似,张量的不同维度也是对应着不同的切片方式:水平切片、侧面切片、正面切片

在这里插入图片描述
正面切片也就对应着我们文章开头提到的网络延迟测量的例子。

三阶张量的切片的符号表示: X i , : , : X_{i,:,:} Xi,:,: X : , j , : X_{:,j,:} X:,j,: X : , : , k X_{:,:,k} X:,:,k

我们可以对比一下Fiber以及切片的符号表示,可以看出来,Fiber是固定三阶张量的两个维度,切片是固定三阶张量的一个维度。如果扩展到更 n n n 阶的张量,那么Fiber是固定张量的 n − 1 n-1 n1 个维度,切片是固定张量的 n − 2 n-2 n2 个维度。

4.norm

假设现在有张量 χ ∈ R I 1 × I 2 × ⋅ ⋅ ⋅ × I N \chi \in R^{I_{1}\times I_{2}\times \cdot \cdot\cdot\times I_{N}} χRI1×I2××IN ,张量的范数定义为张量的各个元素 χ i j k \chi_{ijk} χijk 的平方和开根号,用公式表示如下:
在这里插入图片描述
可以看到,这里张量范数的定义和矩阵的 Frobenius 范数定义是类似的,更多关于矩阵范数的整理在我的这篇文章:矩阵基础 | 向量范数与矩阵范数

5.张量内积

张量的内积?在此之前我们不妨先回忆一下向量的内积与外积,向量的内积就是两个向量对应元素乘积之和,结果是个标量,两个向量外积结果是一个矩阵,三个向量外积是一个三阶张量。
此处张量内积的定义和向量内积是类似的,即张量对应元素乘积之和:
在这里插入图片描述
6.秩一张量?

顺着我们刚才提到过的三个向量外积是一个三阶张量的概念,我们引出秩一张量的概念。
为了大家更好的理解,我们可以先来回忆一下矩阵SVD的概念:
在这里插入图片描述
上图是矩阵SVD分解的示意图,一个矩阵可以分解为左右奇异向量矩阵以及一个奇异值矩阵的乘积形式。我们现在不妨以另外一种角度来看待矩阵的SVD分解:

我们如果拿出第一个左奇异向量以及第一个右奇异向量,这两个向量做外积,我们就可以得到一个矩阵,同时这两个奇异向量对应同一个奇异值,我们尝试将奇异值理解为这两个向量外积得到的这个矩阵的在原始矩阵中所占的权重,以此类推我们就可以得到所有奇异值对应的左右奇异向量外积的结果矩阵,然后将这些矩阵加起来就得到了原始矩阵。

现在回到我们的问题,秩一张量。在此,我先给出秩一张量的定义,相信大家对照上面我们对矩阵SVD分解的理解,理解秩一张量也就不是难事儿了。
在这里插入图片描述
再次回到矩阵SVD分解的场景,上式的定义放在矩阵情况下,似乎应该就是这个样子:矩阵做SVD分解以后,奇异值矩阵中第一个奇异值为1,剩下的奇异值都为0。因此,奇异值为1对应的左右奇异向量的外积所得到的矩阵就是原始矩阵。

如果你对这一段内容有所理解的话,那么在section2要介绍的CP分解对你来说一定不是难点

7.对角张量

类似于对角矩阵,对角张量很好理解,因此直接上图。
在这里插入图片描述
8. 张量矩阵化与向量化

在张量的分析与计算中,经常希望用一个矩阵代表一个三阶张量。此时,就需要有一种运算,能够将一个三阶张量(三路阵列)经过重新组织或者排列,变成一个矩阵(二路阵列)。将一个三路或N路阵列重新组织成一个矩阵形式的变换称为张量的矩阵化。张量的矩阵化有时也称张量的展开或张量的扁平化。
除了高阶张量的唯一矩阵表示外,一个高阶张量的唯一向量表示也是很多场合感兴趣的。高阶向量的向量化是一种将张量排列成唯一一个向量的变换。

在张量的矩阵化过程中,首先可以分为水平展开与纵向展开,然后可以进一步细分为Kiers展开、LMV展开、Kolda展开。在此,我们仅介绍Kolda水平展开

Kolda于2006年提出该方法,将 N 阶张量元素 a i 1 , i 2 , ⋅ ⋅ ⋅ , i N a_{i_{1},i_{2},\cdot\cdot\cdot,i_{N}} ai1,i2,,iN 映射为模式-n矩阵 A ( n ) A_{(n)} A(n) 的元素 a i n , j I n × I 1 ⋅ ⋅ ⋅ I n − 1 I n + 1 ⋅ ⋅ ⋅ I N a_{i_{n},j}^{I_{n} \times I_{1} \cdot\cdot\cdot I_{n-1}I_{n+1}\cdot\cdot\cdot I_{N}} ain,jIn×I1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的红猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值