张量(tensor)是一个多维的数据存储形式,数据的的维度被称为张量的阶。它可以看成是向量和矩阵在多维空间中的推广,向量可以看成是一维张量,矩阵可以看成是两维的张量。下面是一个三阶张量的例子,它有三维即3个mode值得注意的是这里说的张量是一个具有某种排列形式的数据的集合,它和物理中的张量场是不同的。
传统的方法(例如ICA,PCA、SVD和NMF)对于维数比较高的数据,一般将数据展成二维的数据形式(矩阵)进行处理,这种处理方式使得数据的结构信息丢失(比如说图像的邻域信息丢失),使得求解往往病态。而采用张量对数据进行存储,能够保留数据的结构信 息,因此近些年在图像处理以及计算机视觉等领域得到了一些广泛的应用。张量分解中常见的两种分解是CP分解(Canonical Polyadic Decomposition (CPD)和Tucker分解(Tucker Decomposition)。下面将重点介绍这两种分解,并且将他们在图像处理中的一些应用进行阐 述。
一个NN阶I1×I2×…×INI1×I2×…×IN 维的张量可以表示为Y∈RI1×I2×…×INY∈RI1×I2×…×IN 张量中的每一个元素可以由yi1i2…inyi1i2…in表示,其中(in∈1,2,…,Inin∈1,2,…,In)。
纤维是指从张量中抽取向量的操作。在矩阵中固定其中一个维度,可以得到行或者列。类似于矩阵操作,固定其它维度,只保留一个维度变化,可以得到有纤维的概念。比如说我们对上图中的三阶张量分别按照I,J,K 三个mode进行Fiber操作可以得到如图 所示的x:jkx:jk,xi:kxi:k,xij:xij:三个维度的纤维。
切片操作是指在张量中抽取矩阵的操作。在张量中如果保留两个维度变化,其它的维度变化可以得到一个矩阵,这个矩阵即为张量的切片。对图中的张量分别按照I,J,K三个方向进行操作可以得到如下图所示的xi::xi::,x:j:x:j:,x::kx::k 三个维度的切片。
两个大小相同的张量X,Y∈RI1×I2×…×INX,Y∈RI1×I2×…×IN定义为张量中相对应的元素的乘积之和形式,即:
相应张量X∈RI1×I2×…×INX∈RI1×I2×…×IN的范数定义为:
张量的矩阵展开是将一个张量的元素重新排列(即对张量的mode-n的纤维进行重新排列),得到一个矩阵的过程,张量X∈RI1×I2×…×INX∈RI1×I2×…×IN在第nn维度上展开矩阵表示为X(n)∈RIn×(I1×I2×…In−1In+1…×IN)X(n)∈RIn×(I1×I2×…In−1In+1…×IN)。对一个三阶张量按照I,J,K三个方向进行矩阵展开得到的矩阵如下图
定义张量X∈RI1×I2×…×INX∈RI1×I2×…×IN和张量Y∈RJ1×J2×…×JMY∈RJ1×J2×…×JM的外积为:
Kronecker乘积定义在两个矩阵A∈RI×J,B∈RK×LA∈RI×J,B∈RK×L上的运算:
Hadamard 乘积定义在两个相同大小的矩阵A∈RI×J,B∈RI×JA∈RI×J,B∈RI×J上的运算:
Khatri-Rao乘积定义了两个相同列数的矩阵A∈RI×K,B∈RJ×KA∈RI×K,B∈RJ×K上的操作,它的过程如下图所示。
张量与矩阵的模积定义了一个张量X∈RI1×I2×⋯×INX∈RI1×I2×⋯×IN和一个矩阵U∈RJ×InU∈RJ×In 的n-mode乘积 (X×nU)∈RI1×⋯×In−1×J×In+1×⋯×IN(X×nU)∈RI1×⋯×In−1×J×In+1×⋯×IN,其元素定义为
这个定义可以写成沿mode-n展开的形式为:
如果J<InJ
张量与向量的模积定义了一个张量X∈RI1×I2×⋯×INX∈RI1×I2×⋯×IN与向量v∈RInv∈RIn的运算为: