张量(Tensor)的技术以及它在不同场景中的应用

本文深入介绍了张量的概念、基本操作和在数据恢复(如时空数据补全)及推荐系统中的应用。通过张量分解和补全技术,可以有效地处理大规模数据并提高推荐准确性。此外,文章还探讨了如何利用分布式计算解决张量模型在大数据场景下的挑战。
摘要由CSDN通过智能技术生成

摘要

本文主要介绍张量(Tensor)相关技术以及张量在数据恢复(missing data)、推荐中的应用。在文章的最后,简单介绍怎么通过ADMM算法吧把张量应用在大规模数据上。文章的内容来自于葛瀚骋博士、现任美国亚马逊资深科学家。




我们现在所处的时代是一个信息爆炸的时代,许多现代的信息系统,比如物联网,电子健康记录,以及社交网络,每天都在不断产生着新的数据,这些数据是以指数级的方式去增长的。它的特点包括数量庞大、维度较多、而且这些数据的来源也是“多方面”的。那么我们怎么样去理解“多方面”这个词呢?


这里举一个非常简单的例子,我们可以看到下图这三人大家应该都比较熟悉。他们三人日常会通过不同的方式去联系,比如推特、facebook、微信以及电话。但是因为众所周知的原因,推特以及facebook在某些国家是没法使用的,微信在某些国家是特别受欢迎的。所以,这些因素会导致联系方式上的多样性。

这种多方面的社交关系,可以用多个矩阵来表达。在上述情况下,我们需要四个矩阵来刻画上面所提到的关系,每一个矩阵代表某种特定联系方式下的人物之间关系,比如用一个矩阵来表示基于推特的关系,用另一个矩阵来表示基于微信的关系等等。这种多方面的关系网络存在于我们生活中的点点滴滴。



一、什么是张量(Tensor)?


张量这个词英文叫Tensor。很多人有可能觉得比较陌生,但相信大部分人都听说过Tensorflow。其实Tensorflow里最基本的数据结构就是Tensor,跟本文讲的Tensor的概念是一样的,并不是物理学中的张量概念。 


那具体什么是张量呢,张量是多维数组的泛概念。一维数组我们通常称之为向量,二维数组我们通常称之为矩阵,但其实这些都是张量的一种。以此类推,我们也会有三维张量、四维张量以及五维张量。那么零维张量是什么呢?其实零维张量就是一个数。


为了加深大家对张量概念的理解,再举一个简单例子。如用户对电影的评分可以用来一个二维矩阵来表示。但是如果我们把时间因素也考虑进去,就变成了一个三维数组,那么我们就称这一数组是一个三维张量。其实在某些方面,张量和多维度数据是对等的。张量非常适合去表示多维度的数据,张量通过多维度的数据,可将用户间的内在联系捕捉到。


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


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


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


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

下面我们介绍张量的基本操作。首先如何计算两个张量的内积?其实就是把他们相对应维度的元素相乘,然后把相乘后元素相加,这就是两个张量的内积。张量的每一维度都可以被展成一个相应的矩阵。一个三维的、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我们通常就称为是这个张量的秩。


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




二、张量在时空数据恢复的应用


众所周知,手机已经成为了我们不可或缺的生活工具,每时每刻通过手机在互联网上产生了大量的动态信息,这些动态信息一般分为以下几个维度——时间、位置、内容,这些动态信息本身很有价值,比如谁产生了这些信息,在哪里产生了这些信息,什么时候产生了这些信息,以及这些信息是关于什么事件等。


但是因为各种限制,如访问权限的限制,我们往往不能获取到全部的信息,也就是说我们在获取信息的时候,同时也会发生信息的丢失,比如,我们只能获取到新浪微博中很少一部分的数据,那么我们在基于这些极为有限的信息,来作出社交网络结构特点的估计时,其结果往往是不准确的。


所以如何去恢复这些丢失的信息,对于某些应用来说,是一件非常重要的事情。


接下来我们拿主题标签(Hashtags)举一个例子。主题标签指的是(以微博为例)我们在发微博的时候,会带一个#,后面会跟一个跟你发的信息相关的一个主题,每一个主题标签在发出去的时候都会统计到当时所发信息的时间、地理位置,以及主题内容信息,这三个维度信息就可以被一个三维张量去表示。


  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值