当前位置: 首页 > news >正文

张量分解 | CP / Tucker / BTD

注:本文为 “张量分解” 相关合辑。
图片清晰度受引文原图所限。
略作重排,如有内容异常,请看原文。


张量分解

张量介绍

张量(tensor)是一种多维数据存储形式,数据的维度被称为张量的阶。它可以视为向量和矩阵在多维空间中的推广,向量可看作一维张量,矩阵可看作二维张量。以下是一个三阶张量的例子,它有三个维度,即 3 个 mode:

三阶张量

需要注意的是,此处所说的张量是具有某种排列形式的数据集合,与物理中的张量场不同。

传统的处理高维数据的方法(如 ICA、PCA、SVD 和 NMF)通常将数据展成二维的矩阵形式进行处理,这种方式会使数据的结构信息丢失(例如图像的邻域信息丢失),导致求解过程往往变得病态。而采用张量对数据进行存储,能够保留数据的结构信息,因此在图像处理以及计算机视觉等领域得到了广泛应用。张量分解中常见的两种分解是 CP 分解(Canonical Polyadic Decomposition,CPD)和 Tucker 分解(Tucker Decomposition)。下面将重点介绍这两种分解,并阐述它们在图像处理中的一些应用。

张量定义及运算

张量(Tensor)

一个 NNNI1×I2×⋯×INI_{1} \times I_{2} \times \dots \times I_{N}I1×I2××IN 维的张量可以表示为 Y∈RI1×I2×⋯×INY \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}YRI1×I2××IN。张量中的每一个元素可以由 yi1i2…iny_{i_{1} i_{2} \dots i_{n}}yi1i2in 表示,其中 in∈{1,2,…,In}i_{n} \in \{1,2,\dots,I_{n}\}in{1,2,,In}

纤维(Fiber)

纤维是指从张量中抽取向量的操作。类似于矩阵操作,固定其他维度,只保留一个维度变化,可以得到纤维的概念。例如,对上图中的三阶张量分别按照 I、J、K 三个 mode 进行 Fiber 操作,可以得到如图所示的 x:jkx_{:jk}x:jkxi:kx_{i:k}xi:kxij:x_{ij:}xij: 三个维度的纤维:

三阶张量的 Fiber

切片(Slice)

切片操作是指在张量中抽取矩阵的操作。在张量中,若保留两个维度变化,其他维度固定,可以得到一个矩阵,该矩阵即为张量的切片。对图中的张量分别按照 I、J、K 三个方向进行操作,可以得到如图所示的 xi::x_{i::}xi::x:j:x_{:j:}x:j:x::kx_{::k}x::k 三个维度的切片:

三阶张量的 Slice

内积(Inner product)

两个大小相同的张量 X,Y∈RI1×I2×⋯×INX,Y \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}X,YRI1×I2××IN 的内积定义为张量中相对应的元素的乘积之和,即:
⟨X,Y⟩=∑i1=1I1∑i2=1I2⋯∑iN=1INxi1i2…iNyi1i2…iN\langle X,Y \rangle = \sum_{i_{1}=1}^{I_{1}} \sum_{i_{2}=1}^{I_{2}} \dots \sum_{i_{N}=1}^{I_{N}} x_{i_{1} i_{2} \dots i_{N}} y_{i_{1} i_{2} \dots i_{N}} X,Y=i1=1I1i2=1I2iN=1INxi1i2iNyi1i2iN
相应地,张量 X∈RI1×I2×⋯×INX \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 的范数定义为:
∥X∥=∑i1=1I1∑i2=1I2⋯∑iN=1INxi1i2…iN2\|X\| = \sqrt{\sum_{i_{1}=1}^{I_{1}} \sum_{i_{2}=1}^{I_{2}} \dots \sum_{i_{N}=1}^{I_{N}} x_{i_{1} i_{2} \dots i_{N}}^{2}} X=i1=1I1i2=1I2iN=1INxi1i2iN2
即所有元素的平方和的平方根。

矩阵展开(Unfolding-Matricization)

张量的矩阵展开是将一个张量的元素重新排列(即对张量的 mode-n 的纤维进行重新排列),得到一个矩阵的过程。张量 X∈RI1×I2×⋯×INX \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 在第 nnn 维度上展开矩阵表示为 X(n)∈RIn×(I1×I2×…In−1In+1⋯×IN)X_{(n)} \in \mathbb{R}^{I_{n} \times (I_{1} \times I_{2} \times \dots I_{n-1} I_{n+1} \dots \times I_{N})}X(n)RIn×(I1×I2×In1In+1×IN)。对一个三阶张量按照 I、J、K 三个方向进行矩阵展开得到的矩阵如下图:

三阶张量的矩阵展开

外积(Outer Product)

定义张量 X∈RI1×I2×⋯×INX \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 和张量 Y∈RJ1×J2×⋯×JMY \in \mathbb{R}^{J_{1} \times J_{2} \times \dots \times J_{M}}YRJ1×J2××JM 的外积为:
Z=X∘Y∈RI1×I2×⋯×IN×J1×J2×⋯×JMZ = X \circ Y \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N} \times J_{1} \times J_{2} \times \dots \times J_{M}} Z=XYRI1×I2××IN×J1×J2××JM
其中:
zi1,i2,…,iN,j1,j2,…,jM=xi1,i2,…,iN×yj1,j2,…,jMz_{i_{1},i_{2},\dots,i_{N},j_{1},j_{2},\dots,j_{M}} = x_{i_{1},i_{2},\dots,i_{N}} \times y_{j_{1},j_{2},\dots,j_{M}} zi1,i2,,iN,j1,j2,,jM=xi1,i2,,iN×yj1,j2,,jM
即张量 ZZZ 是张量 XXX 和张量 YYY 中的每一个元素的乘积构成的。特别地,如果 XXXYYY 分别是一个向量,那么它们的外积是一个秩为 1 的矩阵;如果 XXXYYYZZZ 分别是一个向量,那么它们的外积是一个秩为 1 的三阶张量。

Kronecker 乘积(Kronecker Product)

Kronecker 乘积定义在两个矩阵 A∈RI×J\mathbf{A} \in \mathbb{R}^{I \times J}ARI×JB∈RK×L\mathbf{B} \in \mathbb{R}^{K \times L}BRK×L 上的运算:

A⊗B=[a11Ba12B⋯a1JBa21Ba22B⋯a2JB⋮⋮⋱⋮aI1BaI2B⋯aIJB]∈RIK×JL\mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11}\mathbf{B} & a_{12}\mathbf{B} & \cdots & a_{1J}\mathbf{B} \\ a_{21}\mathbf{B} & a_{22}\mathbf{B} & \cdots & a_{2J}\mathbf{B} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I1}\mathbf{B} & a_{I2}\mathbf{B} & \cdots & a_{IJ}\mathbf{B} \end{bmatrix} \in \mathbb{R}^{IK \times JL} AB=a11Ba21BaI1Ba12Ba22BaI2Ba1JBa2JBaIJBRIK×JL

Hadamard 乘积(Hadamard Product)

Hadamard 乘积定义在两个相同大小的矩阵 A∈RI×J\mathbf{A} \in \mathbb{R}^{I \times J}ARI×JB∈RI×J\mathbf{B} \in \mathbb{R}^{I \times J}BRI×J 上的运算:

A∗B=[a11b11a12b12⋯a1Jb1Ja21b21a22b22⋯a2Jb2J⋮⋮⋱⋮aI1bI1aI2bI2⋯aIJbIJ]∈RI×J\mathbf{A} * \mathbf{B} = \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} & \cdots & a_{1J}b_{1J} \\ a_{21}b_{21} & a_{22}b_{22} & \cdots & a_{2J}b_{2J} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I1}b_{I1} & a_{I2}b_{I2} & \cdots & a_{IJ}b_{IJ} \end{bmatrix} \in \mathbb{R}^{I \times J} AB=a11b11a21b21aI1bI1a12b12a22b22aI2bI2a1Jb1Ja2Jb2JaIJbIJRI×J

Khatri-Rao 乘积(Khatri-Rao Product)

Khatri-Rao 乘积定义了两个相同列数的矩阵 A∈RI×K\mathbf{A} \in \mathbb{R}^{I \times K}ARI×KB∈RJ×K\mathbf{B} \in \mathbb{R}^{J \times K}BRJ×K 上的操作,其过程如下图所示:
A⊙B=[a1⊗b1a2⊗b2…aK⊗bK]∈RIJ×K\mathbf{A} \odot \mathbf{B} = \left[ \begin{array}{cccc} \mathbf{a}_{1} \otimes \mathbf{b}_{1} & \mathbf{a}_{2} \otimes \mathbf{b}_{2} & \dots & \mathbf{a}_{K} \otimes \mathbf{b}_{K} \end{array} \right] \in \mathbb{R}^{IJ \times K} AB=[a1b1a2b2aKbK]RIJ×K
三阶张量的 Khatri-Rao 乘积

张量与矩阵的模积(Mode-n Product)

张量与矩阵的模积定义了一个张量 X∈RI1×I2×⋯×INX \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 和一个矩阵 U∈RJ×In\mathbf{U} \in \mathbb{R}^{J \times I_{n}}URJ×In 的 n-mode 乘积 (X×nU)∈RI1×⋯×In−1×J×In+1×⋯×IN(X \times_{n} \mathbf{U}) \in \mathbb{R}^{I_{1} \times \dots \times I_{n-1} \times J \times I_{n+1} \times \dots \times I_{N}}(X×nU)RI1××In1×J×In+1××IN,其元素定义为:
(X×nU)i1…in−1jin+1…iN=∑in=1Inxi1i2…iNujin(X \times_{n} \mathbf{U})_{i_{1} \dots i_{n-1} j i_{n+1} \dots i_{N}} = \sum_{i_{n}=1}^{I_{n}} x_{i_{1} i_{2} \dots i_{N}} u_{j i_{n}} (X×nU)i1in1jin+1iN=in=1Inxi1i2iNujin
该定义可以写成沿 mode-n 展开的形式为:
Y=X×nU⇔Y(n)=UX(n)Y = X \times_{n} \mathbf{U} \Leftrightarrow \mathbf{Y}_{(n)} = \mathbf{U} \mathbf{X}_{(n)} Y=X×nUY(n)=UX(n)
如果 J<InJ < I_{n}J<In,那么张量和矩阵的乘积可以看作是一个降维的过程,它把一个高维度的张量映射到一个低维度的张量空间。图 \ref{fig:tensorMatrixProduct} 演示了一个张量 G∈R7×5×8G \in \mathbb{R}^{7 \times 5 \times 8}GR7×5×8 和一个矩阵 A∈R4×7A \in \mathbb{R}^{4 \times 7}AR4×7 的乘积最终得到张量 Y∈R4×5×8Y \in \mathbb{R}^{4 \times 5 \times 8}YR4×5×8,张量的第一个维度由 7 变成了 4。

张量与矩阵的模积

张量与向量的模积(Mode-n Product)

张量与向量的模积定义了一个张量 X∈RI1×I2×⋯×INX \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 与向量 v∈RIn\mathbf{v} \in \mathbb{R}^{I_{n}}vRIn 的运算为:
(X×nv)i1…in−1in+1…iN=∑in=1Inxi1i2…iNvin(X \times_{n} \mathbf{v})_{i_{1} \dots i_{n-1} i_{n+1} \dots i_{N}} = \sum_{i_{n}=1}^{I_{n}} x_{i_{1} i_{2} \dots i_{N}} v_{i_{n}} (X×nv)i1in1in+1iN=in=1Inxi1i2iNvin
一个向量和一个张量进行模乘可以减少张量的阶数,下图演示了一个张量的阶数由 3 阶变为 0 阶的过程。

在这里插入图片描述


张量分解 - CP 分解

CP 分解(Canonical Polyadic Decomposition)

1927 年,Hitchcock 提出了 CP 分解。CP 分解将一个 NNN 阶张量 X∈RI1×I2×⋯×IN\mathcal{X} \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN 分解为 RRR 个秩为 1 的张量和的形式,即:
X=∑r=1Rλrar(1)∘ar(2)∘⋯∘ar(N)\mathcal{X} = \sum_{r=1}^{R} \lambda_{r} a_{r}^{(1)} \circ a_{r}^{(2)} \circ \dots \circ a_{r}^{(N)} X=r=1Rλrar(1)ar(2)ar(N)
通常情况下,ar(n)a_{r}^{(n)}ar(n) 是一个单位向量。定义 A(n)=[a1na2n…aRn]A^{(n)} = [a_{1}^{n} \ a_{2}^{n} \ \dots \ a_{R}^{n}]A(n)=[a1n a2n  aRn]D=diag(λ)D = \text{diag}(\lambda)D=diag(λ),那么上述公式可以写为:
X=D×1A(1)×2A(2)⋯×NA(N)\mathcal{X} = D \times_{1} A^{(1)} \times_{2} A^{(2)} \cdots \times_{N} A^{(N)} X=D×1A(1)×2A(2)×NA(N)
矩阵的表达形式为:
X(n)=AnD(A(N)⨀⋯⨀A(n+1)⨀A(n−1)⋯⨀A1)TX_{(n)} = A^{n} D (A^{(N)} \bigodot \dots \bigodot A^{(n+1)} \bigodot A^{(n-1)} \dots \bigodot A^{1})^{T} X(n)=AnD(A(N)A(n+1)A(n1)A1)T
当张量 X\mathcal{X}X 的阶数为 3 时,其分解的形式如下图所示:

三阶张量的 CP 分解

张量的低秩近似

在矩阵中,定义最小的秩为 1 的矩阵和的个数为矩阵的秩。类似地,RRR 的最小值为张量的秩,记作 Rank(X)=R\text{Rank}(\mathcal{X}) = RRank(X)=R,这样的 CP 分解也称为张量的秩分解。需要注意的是,在张量中,秩的定义是不唯一的,张量秩的个数求解是一个 NP 问题。对于一个矩阵 AAA,其 SVD 分解定义为:
A=∑r=1Rσrur∘vr,σ1≥σ2≥⋯≥σR≥0A = \sum_{r=1}^{R} \sigma_{r} u_{r} \circ v_{r}, \quad \sigma_{1} \geq \sigma_{2} \geq \dots \geq \sigma_{R} \geq 0 A=r=1Rσrurvr,σ1σ2σR0
取 SVD 分解得到的前 kkk 个因子作为矩阵 AAA 的近似,可以得到矩阵 AAA 的低秩近似。类似地,取张量的前 kkk 个因子作为张量 X\mathcal{X}X 的低秩近似,即:
X=∑k=1Kλkak(1)∘ak(2)∘⋯∘ak(N)\mathcal{X} = \sum_{k=1}^{K} \lambda_{k} a_{k}^{(1)} \circ a_{k}^{(2)} \circ \dots \circ a_{k}^{(N)} X=k=1Kλkak(1)ak(2)ak(N)
与矩阵的低秩近似不同,张量的最佳 Rank-n 近似并不包括在其最佳 Rank-(n+1) 近似中,即张量的秩 Rank-n 近似无法渐进地得到。

CP 的求解

CP 分解的求解首先要确定分解的秩 1 张量的个数。由于张量的秩 Rank-n 近似无法渐进地得到,通常通过迭代的方法对 RRR 从 1 开始遍历,直到找到一个合适的解。当数据无噪声时,重构误差为 0 所对应的解即为 CP 分解的解;当数据有噪声时,可以通过 CORCONDIA 算法估计 RRR。当分解的秩 1 张量的个数确定下来之后,可以通过交替最小二乘方法对 CP 分解进行求解。以下以三阶张量为例对 ALS 算法进行阐述。

假设 X∈RI×J×K\mathcal{X} \in \mathbb{R}^{I \times J \times K}XRI×J×K 是一个三阶张量,对它进行张量分解的目标表达式为:
min⁡X^∥X−X^∥,X^=∑r=1Rλrar∘br∘cr=[[λ;A,B,C]]\min_{\hat{\mathcal{X}}} \| \mathcal{X} - \hat{\mathcal{X}} \|, \quad \hat{\mathcal{X}} = \sum_{r=1}^{R} \lambda_{r} a_{r} \circ b_{r} \circ c_{r} = \left[\kern-0.15em\left[ \lambda ; A,B,C \right]\kern-0.15em\right] X^minXX^,X^=r=1Rλrarbrcr=[[λ;A,B,C]]
ALS 算法首先固定 BBBCCC 去求解 AAA,接着固定 AAACCC 去求解 BBB,然后固定 BBBCCC 去求解 AAA,如此不断重复迭代直到达到收敛条件。固定矩阵 BBBCCC,可以得到上述式子在 mode-1 矩阵展开时的形式为:
min⁡A^∥X(1)−A^(C⊙B)T∥F\min_{\hat{A}} \| X_{(1)} - \hat{A} (C \odot B)^{T} \|_{F} A^minX(1)A^(CB)TF
其中 A^=A⋅diag(λ)\hat{A} = A \cdot \text{diag}(\lambda)A^=Adiag(λ),那么上述式子的最优解为:
A^=X(1)[(C⊙B)T]†\hat{A} = X_{(1)} [(C \odot B)^{T}]^{\dagger} A^=X(1)[(CB)T]
为了防止数值计算的病态问题,通常将 A^\hat{A}A^ 的每一列单位化,即 λr=∥a^r∥\lambda_{r} = \| \hat{a}_{r} \|λr=a^rar=a^r/λra_{r} = \hat{a}_{r} / \lambda_{r}ar=a^r/λr。将上述式子推广到高阶形式,可以得到:
A(n)=Xn(A(N)⨀⋯⨀A(n+1)⨀A(n−1)⋯⨀A1)V†其中V=A(1)T(A(1)⨀⋯⨀A(n−1)⨀A(n+1)⋯⨀A(N)TA(N))\begin{aligned} & A^{(n)} = X^{n} (A^{(N)} \bigodot \dots \bigodot A^{(n+1)} \bigodot A^{(n-1)} \dots \bigodot A^{1}) V^{\dagger} \\ & \text{其中} \quad V = A^{(1)T} (A^{(1)} \bigodot \dots \bigodot A^{(n-1)} \bigodot A^{(n+1)} \dots \bigodot A^{(N)T} A^{(N)}) \end{aligned} A(n)=Xn(A(N)A(n+1)A(n1)A1)V其中V=A(1)T(A(1)A(n1)A(n+1)A(N)TA(N))
对于一个 NNN 阶张量 XXX,其 ALS 求解的步骤如下图所示。它假设分解出 Rank-1 张量的个数 RRR 是事先已知的。对于各个因子的初始化,可以采用随机初始化,也可以通过以下式子进行初始化:
A(n)=Rleading left singular vectors of X(n)for n=1,…,NA^{(n)} = R \quad \text{leading left singular vectors of} \ X_{(n)} \ \text{for} \ n=1,\dots,N A(n)=Rleading left singular vectors of X(n) for n=1,,N
CP 分解算法

可加约束

在一些应用中,为了使 CP 分解更加鲁棒和精确,可以在分解出的因子上加上一些先验知识,即约束。例如,平滑约束(smooth)、正交约束、非负约束(nonnegative)、稀疏约束(sparsity)等。

CP 分解应用

CP 分解已在信号处理、视频处理、语音处理、计算机视觉、机器学习等领域得到了广泛应用。以下以去噪为例,阐述 CP 分解在高光谱图像处理中的应用。

高光谱图像(HSI)是上个世纪 80 年代以来新兴的一种新型成像技术,它包括了可见光和不可见光范围的几十到几百个连续光谱窄波段,形成了一种数据立方体结构的图像。高光谱图像可以看作是一个三阶张量,图像的空间域和光谱域构成了数据的三个维度。采用低秩 CP 分解对高光谱图像去噪,认为低秩的部分是无噪声的部分,剩下的部分被认为是噪声数据,其示意图如下图所示:

CP 分解算法用于 HSI 去噪

从图中可以看出,一个高光谱图像数据 X\mathcal{X}X 可以由两部分组成,即:
X=S+N\mathcal{X} = \mathcal{S} + \mathcal{N} X=S+N
其中,S\mathcal{S}S 被认为是低秩的部分,即干净的图像;N\mathcal{N}N 是噪声的部分(这里的噪声包括白噪声、高斯噪声等)。可以通过对原始数据 X\mathcal{X}X 进行低秩 CP 分解来得到 S\mathcal{S}S。在 Urban 数据上进行去噪,得到去噪前的数据和去噪之后的数据图分别如下图所示。从图中可以看出,采用 CP 分解可以对高光谱图像进行去噪。

有噪声图像 处理之后的图像


张量分解 - Tucker 分解

Tucker 分解

Tucker 分解最早由 Tucker 在 1966 年提出。一个三阶张量的 Tucker 分解的图示如下图所示:

三阶张量的 Tucker 分解

对于一个三阶张量 X∈RI×J×K\mathcal{X} \in \mathbb{R}^{I \times J \times K}XRI×J×K,Tucker 分解可以得到 A∈RI×PA \in \mathbb{R}^{I \times P}ARI×PB∈RJ×QB \in \mathbb{R}^{J \times Q}BRJ×QC∈RK×RC \in \mathbb{R}^{K \times R}CRK×R 三个因子矩阵和一个核张量 G∈RP×Q×R\mathcal{G} \in \mathbb{R}^{P \times Q \times R}GRP×Q×R。每个 mode 上的因子矩阵称为张量在每个 mode 上的基矩阵或主成分,因此 Tucker 分解又称为高阶 PCA、高阶 SVD 等。从图中可以看出,CP 分解是 Tucker 分解的一种特殊形式:如果核张量的各个维数相同并且是对角的,则 Tucker 分解就退化成了 CP 分解。

在三阶张量形式中,有:
X=G×1A×2B×3C=∑p=1P∑q=1Q∑r=1Rgpqrap∘bq∘cr=[[G;A,B,C]]\mathcal{X} = \mathcal{G} \times_{1} A \times_{2} B \times_{3} C = \sum_{p=1}^{P} \sum_{q=1}^{Q} \sum_{r=1}^{R} g_{pqr} a_{p} \circ b_{q} \circ c_{r} = \left[\kern-0.15em\left[ \mathcal{G} ; A,B,C \right]\kern-0.15em\right] X=G×1A×2B×3C=p=1Pq=1Qr=1Rgpqrapbqcr=[[G;A,B,C]]
将上述公式写成矩阵的形式为:
X1=AG(1)(C⊗B)TX2=BG(2)(C⊗A)TX3=CG(3)(B⊗A)T\begin{aligned} & X_{1} = A G_{(1)} (C \otimes B)^{T} \\ & X_{2} = B G_{(2)} (C \otimes A)^{T} \\ & X_{3} = C G_{(3)} (B \otimes A)^{T} \end{aligned} X1=AG(1)(CB)TX2=BG(2)(CA)TX3=CG(3)(BA)T
对于三阶张量,固定一个因子矩阵为单位阵,就得到 Tucker 分解的一个重要特例:Tucker2。例如,固定 C=IC = IC=I,则退化为:
X=G×1A×2B=[[G;A,B,I]]\mathcal{X} = \mathcal{G} \times_{1} A \times_{2} B = \left[\kern-0.15em\left[ \mathcal{G} ; A,B,I \right]\kern-0.15em\right] X=G×1A×2B=[[G;A,B,I]]
进一步地,如果固定两个因子矩阵,就得到了 Tucker1。例如,固定 C=IC = IC=IB=IB = IB=I,则 Tucker 分解就退化成了普通的 PCA:
X=G×1A=[[G;A,I,I]]\mathcal{X} = \mathcal{G} \times_{1} A = \left[\kern-0.15em\left[ \mathcal{G} ; A,I,I \right]\kern-0.15em\right] X=G×1A=[[G;A,I,I]]
将上述公式推广到 NNN 阶的模型,即可得到:
X=G×1A(1)×2A(2)⋯×(N)A(N)=[[G;A(1),A(2),…,A(N)]]\mathcal{X} = \mathcal{G} \times_{1} A^{(1)} \times_{2} A^{(2)} \cdots \times_{(N)} A^{(N)} = \left[\kern-0.15em\left[ \mathcal{G} ; A^{(1)}, A^{(2)}, \dots, A^{(N)} \right]\kern-0.15em\right] X=G×1A(1)×2A(2)×(N)A(N)=[[G;A(1),A(2),,A(N)]]
写成矩阵形式为:
X(n)=A(n)G(n)(A(N)⊗⋯⊗A(n+1)⊗A(n−1)⋯⊗A(1))TX_{(n)} = A^{(n)} G_{(n)} (A^{(N)} \otimes \dots \otimes A^{(n+1)} \otimes A^{(n-1)} \dots \otimes A^{(1)})^{T} X(n)=A(n)G(n)(A(N)A(n+1)A(n1)A(1))T

nnn-秩与低秩近似

nnn-秩又称为多线性秩。一个 NNN 阶张量 X\mathcal{X}Xnnn-mode 秩定义为:
rankn(X)=rank(X(n))\text{rank}_{n}(\mathcal{X}) = \text{rank}(X_{(n)}) rankn(X)=rank(X(n))
rankn(X)=Rn\text{rank}_{n}(\mathcal{X}) = R_{n}rankn(X)=Rnn=1,…,Nn = 1, \dots, Nn=1,,N,则 X\mathcal{X}X 被称为秩 (R1,R2,…,Rn)(R_{1}, R_{2}, \dots, R_{n})(R1,R2,,Rn) 的张量。RnR_{n}Rn 可以看作是张量 X\mathcal{X}X 在各个 mode 上 fiber 所构成的空间的维度。如果 rankn(X)=Rn\text{rank}_{n}(\mathcal{X}) = R_{n}rankn(X)=Rnn=1,…,Nn = 1, \dots, Nn=1,,N,则很容易得到 X\mathcal{X}X 的一个精确秩 (R1,R2,…,RN)(R_{1}, R_{2}, \dots, R_{N})(R1,R2,,RN) Tucker 分解;然而,如果至少有一个 nnn 使得 rankn(X)>Rn\text{rank}_{n}(\mathcal{X}) > R_{n}rankn(X)>Rn,则通过 Tucker 分解得到的就是 X\mathcal{X}X 的一个秩 (R1,R2,…,RN)(R_{1}, R_{2}, \dots, R_{N})(R1,R2,,RN) 近似。下图展示了一个三阶张量的低秩近似,这在图像处理中可以认为是干净的图像:

三阶张量的低秩近似

Tucker 分解的求解

对于固定的 nnn-秩,Tucker 分解的唯一性不能保证,一般加上一些约束,如分解得到的因子单位正交约束等。例如,HOSVD(High Order SVD)求解算法通过张量的每一个 mode 上做 SVD 分解对各个 mode 上的因子矩阵进行求解,最后计算张量在各个 mode 上的投影之后的张量作为核张量。其算法过程如下图所示:

HOSVD

虽然利用 SVD 对每个 mode 做一次 Tucker1 分解,但 HOSVD 不能保证得到一个较好的近似。然而,HOSVD 的结果可以作为其他迭代算法(如 HOOI)的一个很好的初始化。HOOI(High-order Orthogonal Iteration)算法将张量分解看作是一个优化的过程,不断迭代得到分解结果。假设有一个 NNN 阶张量 X∈RI1×I2×⋯×IN\mathcal{X} \in \mathbb{R}^{I_{1} \times I_{2} \times \dots \times I_{N}}XRI1×I2××IN,那么对 X\mathcal{X}X 进行分解就是对以下问题进行求解:
∣X−[[G;A(1),…,A(N)]]∣=∣vec(X)−(A(N)⊗⋯⊗A(1))vec(G)∣\begin{aligned} & \left| \mathcal{X} - \left[\kern-0.15em\left[ \mathcal{G}; \mathbf{A}^{(1)}, \dots, \mathbf{A}^{(N)} \right]\kern-0.15em\right] \right| \\ = & \left| \text{vec}(\mathcal{X}) - \left( \mathbf{A}^{(N)} \otimes \dots \otimes \mathbf{A}^{(1)} \right) \text{vec}(\mathcal{G}) \right| \end{aligned} =X[[G;A(1),,A(N)]]vec(X)(A(N)A(1))vec(G)
将上述目标函数进一步化简得到:
∥X−[[G;A(1),…,A(N)]]∥2=∥X∥2−2⟨X,[[G;A(1),…,A(N)]]⟩+∥[[G;A(1),…,A(N)]]∥2=∥X∥2−2⟨X×1A(1)T⋯×NA(N)T,G⟩+∥G∥2=∥X∥2−2⟨G,G⟩+∥G∥2\begin{aligned} & \left\| \mathcal{X} - \left[\kern-0.15em\left[ \mathcal{G}; \mathbf{A}^{(1)}, \dots, \mathbf{A}^{(N)} \right]\kern-0.15em\right] \right\|^{2} \\ = & \left\| \mathcal{X} \right\|^{2} - 2 \left\langle \mathcal{X}, \left[\kern-0.15em\left[ \mathcal{G}; \mathbf{A}^{(1)}, \dots, \mathbf{A}^{(N)} \right]\kern-0.15em\right] \right\rangle + \left\| \left[\kern-0.15em\left[ \mathcal{G}; \mathbf{A}^{(1)}, \dots, \mathbf{A}^{(N)} \right]\kern-0.15em\right] \right\|^{2} \\ = & \left\| \mathcal{X} \right\|^{2} - 2 \left\langle \mathcal{X} \times_{1} \mathbf{A}^{(1)T} \cdots \times_{N} \mathbf{A}^{(N)T}, \mathcal{G} \right\rangle + \left\| \mathcal{G} \right\|^{2} \\ = & \left\| \mathcal{X} \right\|^{2} - 2 \left\langle \mathcal{G}, \mathcal{G} \right\rangle + \left\| \mathcal{G} \right\|^{2} \end{aligned} ===X[[G;A(1),,A(N)]]2X22X,[[G;A(1),,A(N)]]+[[G;A(1),,A(N)]]2X22X×1A(1)T×NA(N)T,G+G2X22G,G+G2
G\mathcal{G}G 满足:
G=X×1A(1)T⋯×NA(N)T\mathcal{G} = \mathcal{X} \times_{1} \mathbf{A}^{(1)T} \cdots \times_{N} \mathbf{A}^{(N)T} G=X×1A(1)T×NA(N)T
从而可以得到:
∥X∥2−∥X×1A(1)T⋯×NA(N)T∥2\left\| \mathcal{X} \right\|^{2} - \left\| \mathcal{X} \times_{1} \mathbf{A}^{(1)T} \cdots \times_{N} \mathbf{A}^{(N)T} \right\|^{2} X2X×1A(1)T×NA(N)T2
由于 ∥X∥\|\mathcal{X}\|X 是一个常数,最小化上述式子相当于最大化:
max⁡∥X×1A(1)T⋯×NA(N)T∥subject toA(n)∈RIn×Rnandcolumnwise orthogonal\begin{aligned} & \max \left\| \mathcal{X} \times_{1} \mathbf{A}^{(1)T} \cdots \times_{N} \mathbf{A}^{(N)T} \right\| \\ \text{subject to} \quad & \mathbf{A}^{(n)} \in \mathbb{R}^{I_{n} \times R_{n}} \quad \text{and} \quad \text{columnwise orthogonal} \end{aligned} subject tomaxX×1A(1)T×NA(N)TA(n)RIn×Rnandcolumnwise orthogonal
写成矩阵形式为:
max⁡∥A(n)TW∥s.t.W=X(n)(A(N)⊗⋯⊗A(n+1)⊗A(n−1)⋯⊗A(1))\begin{aligned} & \max \left\| \mathbf{A}^{(n)T} \mathbf{W} \right\| \\ \text{s.t.} \quad & \mathbf{W} = \mathbf{X}_{(n)} \left( \mathbf{A}^{(N)} \otimes \dots \otimes \mathbf{A}^{(n+1)} \otimes \mathbf{A}^{(n-1)} \dots \otimes \mathbf{A}^{(1)} \right) \end{aligned} s.t.maxA(n)TWW=X(n)(A(N)A(n+1)A(n1)A(1))
这个问题可以通过令 A(n)\mathbf{A}^{(n)}A(n)WWW 的前 RnR_{n}Rn 个左奇异值向量来进行求解。HOOI 算法的过程如下图所示:

HOOI 算法

约束 Tucker 分解

除了可以在 Tucker 分解的各个因子矩阵上加上正交约束以外,还可以加一些其他约束,比如稀疏约束、平滑约束、非负约束等。另外,在一些应用场景中,不同 mode 的物理意义不同,可以加上不同的约束。在下图中,在三个不同的 mode 上分别加上了正交约束、非负约束以及统计独立性约束等:

约束 Tucker 分解

Tucker 分解的应用

前面提到,Tucker 分解可以看作是 PCA 的多线性版本,因此可以用于数据降维、特征提取、张量子空间学习等。例如,一个低秩的张量近似可以用于去噪操作等。Tucker 分解同时在高光谱图像中也有所应用,如用低秩 Tucker 分解进行高光谱图像的去噪,用张量子空间进行高光谱图像的特征选择,用 Tucker 分解进行数据的压缩等。以下以高光谱图像去噪为例进行介绍。http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6909773 中对高光谱图像去噪的流程如下图所示:

高光谱图像去噪流程

它首先对高光谱图像进行分块,然后对分块进行聚类,得到一些 group,最后对各个 group 里面的数据进行低秩 Tucker 分解。处理之前的噪声图像和处理之后的图像的对比如下图所示,可以发现 Tucker 分解可以对高光谱数据进行有效的去噪处理:

有噪声图像 处理之后的图像


张量分解 - Block Term Decomposition (BTD)

去年差不多这个时候,我在本人的博客上发表了三篇关于张量分解的博客,从百度统计来看,很多人阅读了这三篇博文。今天,我再介绍一种张量分解 - Block Term Decomposition (BTD),以下将分几个部分对 BTD 进行介绍。

从 CP 分解到 BTD

在 CP 分解中,我们将一个张量分解为 KKK 个 Rank-1 的成员张量的形式,写成公式即为:
T=∑r=1Kar∘br∘cr=∑r=1K(arbrT)∘cr\mathcal{T} = \sum_{r=1}^{K} a_{r} \circ b_{r} \circ c_{r} = \sum_{r=1}^{K} (a_{r} b_{r}^{T}) \circ c_{r} T=r=1Karbrcr=r=1K(arbrT)cr
显然,arbrTa_{r} b_{r}^{T}arbrT 是一个 Rank-1 的矩阵,即一个低秩矩阵。而低秩往往是一些局部的特征,例如人的眉毛通常是低秩的。然而,在一些应用中,我们希望得到不同秩的特征,或者是不同尺度的特征,例如对于人脸,我们希望得到鼻子、眉毛、嘴巴、脸型等特征,此时 CP 分解就无法直观地做到。

基于 CP 分解,我们设想,如果 arbrTa_{r} b_{r}^{T}arbrT 不是一个秩为 1 的矩阵,而是一个秩为 LrL_{r}Lr 的矩阵,那么显然 ara_{r}arbrb_{r}br 就不是一个向量,而是一个秩为 LrL_{r}Lr 的矩阵。于是得到了 BTD 模型的一种形式:
T=∑r=1KArBrT∘cr\mathcal{T} = \sum_{r=1}^{K} A_{r} B_{r}^{T} \circ c_{r} T=r=1KArBrTcr
可以将这个模型进一步推导,得到 BTD 的通俗形式。

BTD 分解概览

2008 年,Lieven De Lathauwer 等人提出了一种 Block Term Decomposition(BTD),这种张量分解在一些论文中也被称为 Block Component Decomposition (BCD)。本人认为叫 BCD 更合理一些,因为这种张量分解将一个 NNN 阶张量分解为 RRR 个成员张量的形式,BCD 更符合。如下图就是一个 Rank−(Lr,Mr,Nr)\text{Rank}-(L_{r}, M_{r}, N_{r})Rank(Lr,Mr,Nr) 的分解,每一个成员张量是一个 Rank−(Lr,Mr,Nr)\text{Rank}-(L_{r}, M_{r}, N_{r})Rank(Lr,Mr,Nr) 的 Tucker 分解:

Block Term Decomposition (BTD)

采用数学表达式可以写为:
T=∑r=1RDr×1Ar×2Br×3Cr\mathcal{T} = \sum_{r=1}^{R} \mathcal{D}_{r} \times_{1} A_{r} \times_{2} B_{r} \times_{3} C_{r} T=r=1RDr×1Ar×2Br×3Cr
其中 Dr\mathcal{D}_{r}Dr 是一个 Rank−(Lr,Mr,Nr)\text{Rank}-(L_{r}, M_{r}, N_{r})Rank(Lr,Mr,Nr) 的张量,Ar∈RI×LA_{r} \in \mathbb{R}^{I \times L}ArRI×L 是一个秩为 III 的矩阵。显然,BTD 分解可以看作是之前介绍的 Tucker 分解和 CP 分解的结合形式。当 R=1R = 1R=1 时,显然成员张量只有一个,此时这个分解就是一个 Rank−(L,M,N)\text{Rank}-(L, M, N)Rank(L,M,N) 的 Tucker 分解。而当每一个成员张量是一个 Rank−1\text{Rank}-1Rank1 分解时,该分解退化为一个 CP 分解(CP 分解是将一个张量分解为 RRR 个秩为 1 的张量分解形式)。这也说明了,BTD 分解具有很强的泛化能力。论文 http://epubs.siam.org/doi/pdf/10.1137/070690730 同时对它的唯一性进行了证明,从证明来看,该算法的唯一性的条件要比 Tucker 分解和 CP 分解的唯一性要弱。

BTD 分解的求解

BTD 分解的求解算法有很多种,例如非线性最小二乘法 http://epubs.siam.org/doi/abs/10.1137/110832124,交替最小二乘算法(ALS),张量对角算法等。其中,交替最小二乘算法形式最为简单。以下以一个三阶张量 T∈RI×J×K\mathcal{T} \in \mathbb{R}^{I \times J \times K}TRI×J×K 为例,介绍这种求解算法。

定义 A=[A1,…,AR]A = [A_{1}, \dots, A_{R}]A=[A1,,AR]B=[B1,…,BR]B = [B_{1}, \dots, B_{R}]B=[B1,,BR]C=[C1,…,CR]C = [C_{1}, \dots, C_{R}]C=[C1,,CR],将 BTD 写为矩阵的形式,可以得到如下三个表达式:
TJK×I=(B⊗C)⋅Blockdiag(D1MN×L,…,DRMN×L)ATTKI×J=(C⊗A)⋅Blockdiag(D1NL×M,…,DRNL×M)BTTIJ×K=(A⊗B)⋅Blockdiag(D1LM×N,…,DRLM×N)CT\begin{aligned} & T_{JK \times I} = (B \otimes C) \cdot \text{Blockdiag}(\mathcal{D}_{1_{MN \times L}}, \dots, \mathcal{D}_{R_{MN \times L}}) A^{T} \\ & T_{KI \times J} = (C \otimes A) \cdot \text{Blockdiag}(\mathcal{D}_{1_{NL \times M}}, \dots, \mathcal{D}_{R_{NL \times M}}) B^{T} \\ & T_{IJ \times K} = (A \otimes B) \cdot \text{Blockdiag}(\mathcal{D}_{1_{LM \times N}}, \dots, \mathcal{D}_{R_{LM \times N}}) C^{T} \end{aligned} TJK×I=(BC)Blockdiag(D1MN×L,,DRMN×L)ATTKI×J=(CA)Blockdiag(D1NL×M,,DRNL×M)BTTIJ×K=(AB)Blockdiag(D1LM×N,,DRLM×N)CT
当更新某一个因子矩阵或张量时,固定其他元素即可进行求解。例如,当求解 AAA 时,固定 Dr\mathcal{D}_{r}DrBBB 以及 CCC,设置 M=(B⊗C)⋅Blockdiag(D1MN×L,…,DRMN×L)M = (B \otimes C) \cdot \text{Blockdiag}(\mathcal{D}_{1_{MN \times L}}, \dots, \mathcal{D}_{R_{MN \times L}})M=(BC)Blockdiag(D1MN×L,,DRMN×L),因此可以得到 AAA 的更新规则为:
A=M†TJK×IA = M^{\dagger} T_{JK \times I} A=MTJK×I
同理可以得到其他矩阵或张量的更新规则。因此,采用 ALS 算法求解 BTD 的步骤如下图所示:

BTD 求解

算法中的 QR 分解是为了防止算法出现数值计算错误。

特殊 BTD 分解

在前面已经介绍了 BTD 分解的两种特殊形式:Tucker 分解和 CP 分解。以下再介绍两种特殊的张量分解。

Rank-(Lr,Lr,1)(L_{r}, L_{r}, 1)(Lr,Lr,1) 分解

当每一个成员张量退化为 Lr×LrL_{r} \times L_{r}Lr×Lr 的矩阵时,可以得到 Rank−(Lr,Lr,1)\text{Rank}-(L_{r}, L_{r}, 1)Rank(Lr,Lr,1) 分解,即:

Rank-(L_{r}, L_{r}, 1) 分解

相应的求解算法与 BTD 算法类似,只是没有最后一步求解 core tensor 的部分:

Rank-(L_{r}, L_{r}, 1) 分解算法

Rank-(L,L,1)(L, L, 1)(L,L,1) 分解

Rank−(Lr,Lr,1)\text{Rank}-(L_{r}, L_{r}, 1)Rank(Lr,Lr,1) 的每一个 LrL_{r}Lr 取值为一致,即 LLL 时,即可得到 Rank−(L,L,1)\text{Rank}-(L, L, 1)Rank(L,L,1) 分解,即:

Rank-(L, L, 1) 分解

BTD 分解的应用

BTD 分解的现阶段主要应用在盲源分离上,尤其是它的蜕化形式 Rank−(L,L,1)\text{Rank}-(L, L, 1)Rank(L,L,1) 形式。在 Rank−(L,L,1)\text{Rank}-(L, L, 1)Rank(L,L,1) 中,crc_{r}cr 可以看作是一个信号,Ar×BrA_{r} \times B_{r}Ar×Br 可以看作是混合矩阵的低秩表达形式。本人也基于此分解在 IEEE TGRS 上发表了一篇题为 “Matrix-Vector Nonnegative Tensor Factorization for Blind Unmixing of Hyperspectral Imagery” 的文章,具体可以参考 http://www.cs.zju.edu.cn/people/qianyt/paper/Matrix-Vector%20Nonnegative%20Tensor%20Factorization%20for%20Blind%20Unmixing%20of%20Hyperspectral%20Imagery.pdf。

此外,BTD 分解现在也开始应用在深度学习中(事实上,张量分解在深度学习中的应用最近被广泛研究,因为张量分解可以有效地减少深度学习中参数的个数,具体可以参考相关文献)。新加坡国立大学颜水成教授 2017 年发表了一篇题为 Sharing Residual Units Through Collective Tensor Factorization in Deep Neural Networks 的文章,这篇文章中,用 BTD 分解来代替残差网络中的卷积单元(尚未仔细阅读,待详细研究后补充):

BTD 分解在深度学习中的应用
 
Figure 1. Convolution kernel approximation by different approaches.
图 1. 不同方法的卷积核近似。

(a) A full rank convolution layer with a kernel size of w×hw \times hw×h.
一个具有 w×hw \times hw×h 核大小的全秩卷积层。
 
(b) An approximation of (a) by using the low-rank Tucker Decomposition (a special case of Block Term Decomposition when R=1R = 1R=1).
使用低秩 Tucker 分解(当 R=1R = 1R=1 时,块项分解的特例)对 (a) 进行近似。
 
© An approximation of (a) by using low-rank Block Term Decomposition. The new proposed CRU shares the first two layers (yellow) across different residual functions.
使用低秩块项分解对 (a) 进行近似。新提出的 CRU 在不同的残差函数中共享前两层(黄色)。


via:

  • 张量分解-张量介绍
    https://www.xiongfuli.com/机器学习/2016-06/tensor-decomposition-part1.html
  • 张量分解-CP分解
    https://www.xiongfuli.com/机器学习/2016-06/tensor-decomposition-cp.html
  • 张量分解-Tucker分解
    https://www.xiongfuli.com/机器学习/2016-06/tensor-decomposition-tucker.html
  • 张量分解-Block term decomposition (BTD)
    https://www.xiongfuli.com/机器学习/2017-06/tensor-decomposition-BTD.html
http://www.dtcms.com/a/446154.html

相关文章:

  • 网站推广及建设ppt河北网站建设企业
  • 【数据结构】二叉搜索树的递归与非递归实现
  • 九亭镇村镇建设办官方网站1688接代加工订单
  • GJOI 9.27/10.3 题解
  • Python实例入门
  • 多线程核心知识点与高并发应用指南
  • 南宁网站建设nnxun政策变了2022二建有必要考吗
  • ASP3605电源芯片关键指标测试说明
  • Spring——事件机制
  • UMI企业智脑4.0与5.0的先进性之争,从“AI工具”到“孪生数字人”,赋能每个员工
  • 城乡建设查询网站网站维护包括
  • 从国标到自动化:VSTO实现身份证智能解析(待测)
  • 租凭境外服务器做违规网站wordpress 幻灯片主题
  • 网站开发团队简介如何写链接网站制作
  • php 8.4.5 更新日志
  • MongoDB 连接时的**认证参数配置错误**
  • 大兴安岭做网站葫芦岛建设工程信息网站
  • 商标设计网站提供哪些服务建筑书店
  • 除 OpenAI/GPT-4o 等主流头部产品外,值得关注的 AI 及 Agent 产品有哪些?
  • Vue 3 —— M / 接口文档
  • 【办公类-109-06】20250916圆牌卡片15CM手工纸+动物头像+拼音表+word单面编辑
  • 服务器搭建网站制作网站怎么用图片做背景
  • 搭建网站空间无印良品vi设计分析
  • 做pc端网站资讯seo诊断工具有哪些
  • 高层次综合基础-vivado hls第三章
  • 网站建设单位不给数据库苏州网络公司工作室
  • windows部署网站phpwordpress教程网页修改
  • 前端GIS篇——WebGIS、WebGL、Java后端篇
  • 网站开发语言分析网站制作想法
  • 做抽奖网站合法吗网站底部备案代码