论文笔记(二)补充知识之张量Tensor

2019-04-13 14:05发布

最近看的一篇paper需要的背景知识(可能略有删改)
目录 1.张量简介 2.张量的定义与运算 2.1 张量(Tensor) 2.2  纤维(Fibre) 2.3 切片(Slice) 2.4 内积(Inner product) 2.5 矩阵展开(Unfolding-Matricization) 2.6 外积(Outer Product) 2.7 Kronecker乘积(Kronecker Product) 2.8 Hadamard乘积(Hadamard Product) 2.9 Khatri-Rao乘积(Khatri-Rao Product) 2.10 张量与矩阵的模积(Mode-n Product) 2.11 张量与向量的模积(Mode-n Product) 3.参考资料

1.张量简介

张量(tensor)是一个多维的数据存储形式,数据的的维度被称为张量的阶,可以看成是向量和矩阵在多维空间中的推广。 向量可以看成是一维张量,矩阵可以看成是两维张量。 下面是一个三阶张量的例子,它有三维即3个mode。   值得注意的是这里说的张量是一个具有某种排列形式的数据的集合,它和物理中的张量场是不同的。 传统的方法(例如ICA,PCA、SVD和NMF)对于维数比较高的数据,一般将数据展成二维的数据形式(矩阵)进行处理,这种处理方式使得数据的结构信息丢失(比如说图像的邻域信息丢失),使得求解往往病态。而采用张量对数据进行存储,能够保留数据的结构信息,因此近些年在图像处理以及计算机视觉等领域得到了一些广泛的应用。张量分解中常见的两种分解是CP分解(Canonical Polyadic Decomposition (CPD)和Tucker分解(Tucker Decomposition)。下面将重点介绍这两种分解,并且将他们在图像处理中的一些应用进行阐述。

2.张量的定义与运算

2.1 张量(Tensor)

一个NI_{1}	imes I_{2}	imes... 	imes I_{N}维的张量可以表示为Yin R^{I_{1}	imes I_{2}	imes...	imes I_{N}}张量中的每一个元素可以由y_{i_1i_2...i_n}表示,其中(i_n in {1,2,...,I_n})。

2.2  纤维(Fibre)

纤维是指从张量中抽取向量的操作。在矩阵中固定其中一个维度,可以得到行或者列。类似于矩阵操作,固定其它维度,只保留一个维度变化,可以得到有纤维的概念。比如说我们对上图中的三阶张量分别按照I,J,K 三个mode进行Fiber操作可以得到如图所示的x_{:jk},x_{i:k},x_{ij:}三个维度的纤维。 三阶张量的Fiber

2.3 切片(Slice)

切片操作是指在张量中抽取矩阵的操作。在张量中如果保留两个维度变化,其它的维度变化可以得到一个矩阵,这个矩阵即为张量的切片。对图中的张量分别按照I,J,K三个方向进行操作可以得到如下图所示的x_{i::},x_{:j:},x_{::k}三个维度的切片。 三阶张量的Slice

2.4 内积(Inner product)

两个大小相同的张量X,Yin R^{I_{1}	imes I_{2}	imes...	imes I_{N}} 定义为张量中相对应的元素的乘积之和形式,即: langle X,Y 
angle =sum limits_{i_1=1}^{I_1}sum limits_{i_2=1}^{I_2}...sum limits_{i_N=1}^{I_N}x_{i_1i_2...i_N}y_{i_1i_2...i_N} 相应张量Xin R^{I_{1}	imes I_{2}	imes...	imes I_{N}} 的范数定义为: |X| =sqrt{sum limits_{i_1=1}^{I_1}sum limits_{i_2=1}^{I_2}...sum limits_{i_N=1}^{I_N}x_{i_1i_2...i_N}^{2}} 即所有元素的平方和的平方根。

2.5 矩阵展开(Unfolding-Matricization)

张量的矩阵展开是将一个张量的元素重新排列(即对张量的mode-n的纤维进行重新排列),得到一个矩阵的过程,张量Xin R^{I_{1}	imes I_{2}	imes...	imes I_{N}} 在第n维度上展开矩阵表示为X_{(n)}in R^{I_n	imes(I_{1}	imes I_{2}	imes...I_{n-1}I_{n+1}...	imes I_{N})} 。对一个三阶张量按照I,J,K三个方向进行矩阵展开得到的矩阵如下图三阶张量的矩阵展开

2.6 外积(Outer Product)

定义张量Xin R^{I_{1}	imes I_{2}	imes...	imes I_{N}} 和张量Yin R^{J_{1}	imes J_{2}	imes...	imes J_{M}}的外积为: Z=Xcirc Y in R^{I_{1}	imes I_{2}	imes...	imes I_{N}	imes J_{1}	imes J_{2}	imes...	imes J_{M}} 其中:z_{i_1,i_2,...,i_N,j_1,j_2,...,j_M}=x_{i_1,i_2,...,i_N}*y_{j_1,j_2,...,j_M}即张量Z 是张量X和张量Y 中的每一个元素的乘积构成的。特别地如果XY 分别是一个向量那么他们的外积是一个秩为1的矩阵,如果XYZ 分别是一个向量,那么他们的外积是一个秩为1三阶张量。

2.7 Kronecker乘积(Kronecker Product)

Kronecker乘积定义在两个矩阵{mathbf{A}} in {mathbb{R}^{I{mathbf{ 	imes }}J}},{mathbf{B}} in {mathbb{R}^{K{mathbf{ 	imes }}L}}上的运算: Kronecker乘积

2.8 Hadamard乘积(Hadamard Product)

Hadamard 乘积定义在两个相同大小的矩阵{mathbf{A}} in {mathbb{R}^{I{mathbf{ 	imes }}J}},{mathbf{B}} in {mathbb{R}^{I{mathbf{ 	imes }}J}} 上的运算: Hadamard乘积

2.9 Khatri-Rao乘积(Khatri-Rao Product)

Khatri-Rao乘积定义了两个相同列数的矩阵{mathbf{A}} in {mathbb{R}^{I{mathbf{ 	imes }}K}},{mathbf{B}} in {mathbb{R}^{J{mathbf{ 	imes }}K}} 上的操作,它的过程如下图所示。{mathbf{A}} odot {mathbf{B}} = left[ {egin{array}{*{20}{l}}{{{mathbf{a}}_1} otimes {{mathbf{b}}_1}}&{{{mathbf{a}}_2} otimes {{mathbf{b}}_2}}& cdots &{{{mathbf{a}}_K} otimes {{mathbf{b}}_K}}end{array}} 
ight]in {mathbb{R}^{IJ{mathbf{ 	imes }}K}}三阶张量的Slice

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

张量与矩阵的模积定义了一个张量Xin {mathbb{R}^{{I_1}{mathbf{ 	imes }}{I_2}{mathbf{ 	imes }} cdots {mathbf{ 	imes }}{I_N}}} 和一个矩阵{mathbf{U}} in {mathbb{R}^{J{mathbf{ 	imes }}{I_n}}}的n-mode乘积 left( {X{ 	imes_n}{mathbf{U}}} 
ight) in {mathbb{R}^{{I_1}{mathbf{ 	imes }} cdots {mathbf{ 	imes }}{I_{n - 1}}{mathbf{ 	imes }}J{mathbf{ 	imes }}{I_{n + 1}}{mathbf{ 	imes }} cdots {mathbf{ 	imes }}{I_N}}},其元素定义为 {left( {X{ 	imes_n}{mathbf{U}}} 
ight)_{{i_1} cdots {i_{n - 1}}j{i_{n + 1}} cdots {i_N}}} = sumlimits_{{i_n} = 1}^{{I_n}} {{x_{{i_1}{i_2} cdots {i_N}}}{u_{j{i_n}}}} 这个定义可以写成沿mode-n展开的形式为:Y =X{ 	imes_n}{mathbf{U}} Leftrightarrow {{mathbf{Y}}_{(n)}} = {mathbf{U}}{{mathbf{X}}_{(n)}} 如果J<I_{n} 那么张量和矩阵的乘积可以看作是一个降维的过程,它把一个高维度的张量映射到一个低维度的张量空间。图???演示了一个张量Gin R^{7	imes5	imes 8}和一个矩阵Ain R^{4	imes 7}的乘积最终得到张量Yin R^{4	imes 5 	imes 8} ,张量的第一个维度由7变成了4。 三阶张量的Slice

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

张量与向量的模积定义了一个张量X in {mathbb{R}^{{I_1}{mathbf{ 	imes }}{I_2}{mathbf{ 	imes }} cdots {mathbf{ 	imes }}{I_N}}} 与向量{mathbf{v}} in {mathbb{R}^{{I_n}}} 的运算为:{left( {X{{ar 	imes }_n}{mathbf{v}}} 
ight)_{{i_1} cdots {i_{n - 1}}{i_{n + 1}} cdots {i_N}}} = sumlimits_{{i_n} = 1}^{{I_n}} {{x_{{i_1}{i_2} cdots {i_N}}}{v_{{i_n}}}}一个向量和一个张量进行模乘可以减少张量的阶数,下图演示了一个张量的阶数由3阶变为0阶的过程。三阶张量的Slice

3.参考资料

http://www.xiongfuli.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2016-06/tensor-decomposition-part1.html