对于张量有哪些增长和操作

内容来自网络,自己梳理和归纳

一、张量通常是动态增长的,它的增长通常可以用三种形式来实现。

第一种是维度的增长。比如我们只考虑用户时间、电影和评分来进行张量建模,那么这个张量只有三个维度。但如果我们再把电影主题也加进去,那么就从一个三维张量增长成了四维张量,这是通过维度上的增长。

第二种增长是维度中数据的增长,如现在我们有用户、时间和电影这三个维度,但是还会有新的用户,也会有新的电影,时间也是逐渐增长的,所以每个维度也会自然增长,但是维数始终是固定的,这就是第二种增长。

最后一种增长是观测数据的增长,比如说维度的个数是固定的,三个维度——用户、时间、电影。那么每个维度上的数量也是固定的,但是呢,我们可能一开始只获取了部分数据,然后后面会获取越来越多的数据。这样就形成了一种观测数据的增长,所以这也是一种张量的增长方式。

二、张量的基本操作

    首先如何计算两个张量的内积?其实就是把他们相对应维度的元素相乘,然后把相乘后元素相加,这就是两个张量的内积。张量的每一维度都可以被展成一个相应的矩阵。一个三维的、3×4×2的张量可以被展成对应的三个矩阵(如下图所示)。

       接下来介绍另一个重要的操作--张量乘以矩阵。因为很多时候我们都需要用一个张量去乘一个矩阵。比如,我们有一个三维张量,它的大小是3×4×2,我们还有一个矩阵,它的大小是2×5。那么我们用这一张量去乘以这一矩阵,最后得到的也是一个张量,它的大小就是3×4×5。

       对于张量,我们可以定义两种不同的积,一个叫Kronecker(克罗内克)积,另一个叫Khatri-Rao积。这两个积跟张量分解息息相关。需要注意的是Khatri-Rao积是基于Kronecker积的扩展。如果大家对于这两种积的运算不太熟悉,建议大家可以在网上查询相关资料,网络有大量关于这两种积的介绍。

三、张量的分解。

     谈张量分解之前,我们先回忆一下矩阵分解。下面的图表示如何做矩阵的SVD分解。SVD分解是矩阵分解的一种形式,一个矩阵A可分解成三个矩阵(如下图所示),U和V都是正交矩阵,S是一个对角矩阵。和矩阵分解相似,张量其实也是可以被分解的。

       张量分解通常是从数据中提取一个低秩(low rank)的结构。具体来说,就是把张量分解成一堆rank为1的张量的和。我们可以看下面的图,这张图里揭示了两种张量分解的方式,一种叫tucker,一种叫cp。张量x,可以被分解成矩阵a、b、c 以及一个张量叫g。这种分解形式跟矩阵的分解非常像。该张量是三维的,其每一维都会分解成一个矩阵。对应的分别是abc,那么中间那个对角矩阵也会变成一个三维的对角张量。

     另外一种方式为cp,cp是由秩为1的张量来组成的,这个秩为1的张量,是由三个向量相乘所得到的。R我们通常就称为是这个张量的秩。

四、张量补全

     张量补全的目标是用一个低秩的模型来恢复丢失的数据。通过下图的两个公式,我们可以看到,其实张量分解和张量补全只有一个微小的差别,就是张量补全会多出一个告诉张量哪个位置是我们观测到的数据,而剩下的就是我们没有观测到的数据。在具体的方法中,张量分解在每次迭代中,是不需要估计丢失信息的。而张量补全在每次迭代中是需要估计丢失信息的。

猜你喜欢

转载自blog.csdn.net/weixin_37805635/article/details/85766775