很好的的总结–张量(Tensor)的技术以及它在不同场景中的应用–转载贪心科技,尊重原文TAPER: A Contextual Tensor-Based Approach for
Personalized Expert Recommendation,尊重作者Hancheng Ge,,只想分享好论文和思路。
https://mp.weixin.qq.com/s/Fwvo3lO1LFh_MofXrLVB1Q
张量(Tensor)的技术以及它在不同场景中的应用
葛瀚骋 北京贪心科技 2018-05-31
摘要

本文主要介绍张量(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)举一个例子。主题标签指的是(以微博为例)我们在发微博的时候,会带一个#,后面会跟一个跟你发的信息相关的一个主题,每一个主题标签在发出去的时候都会统计到当时所发信息的时间、地理位置,以及主题内容信息,这三个维度信息就可以被一个三维张量去表示。

我们通常所获取的主题标签信息是不完整的,我们的目标是学习一个模型,使得我们没有观测到的数据,也可以通过这个模型来补全。其实这一目标的本质就是去恢复某个张量不完全信息。

如上图所示,有三种信息丢失的情景,第一种是随机丢失,第二种是某些位置的主题标签信息丢失,第三种是某些位置的所有信息完全丢失。

对于第一种信息丢失的情况,我们可以用一个基于张量的时空动态模型去补全那些没有观测到的信息,下图展示了一个基本的模型结构:通过张量分解,我们可以得到相对于每一维的潜在矩阵,也就是U1、U2和U3,这三个矩阵分别对应的是主题标签、时间和地理位置信息,通过张量的CP分解模型,我们得到了潜在矩阵,通过这些矩阵相乘,我们最终可以得到一个估计的张量,这个估计张量就是我们对于未观测到的信息的估计。

但这种张量估计的模型却不能应对第二种和第三种信息丢失的情景,即在某些位置的主题标签信息丢失或者所有信息都丢失的情景,通过这种张量模型是无法恢复的。

应对第二种和第三种信息丢失的情景,我们可以利用辅助信息,如地理位置的辅助信息可以是人口规模、产业结构这些数据。通过这些辅助信息,我们可以制作出一个相似矩阵,将这一矩阵添加到模型中,使得模型能够学习到哪些信息之间存在相似性。

用一个例子来说明一下,假如休斯敦和印第安纳波利斯在NBA的分布扩展上存在相似性,那么如果我们能知道NBA在休斯敦是如何分布扩展的,那么我们就可以用这一方法去预估NBA在印第安纳波利斯是如何分布扩展。

这种方法背后的核心思想其实就是如果两个对象很相似,那么他们的潜在表达也应该是很相似的。

三、张量在个性化专家推荐中的应用

随着一些内容网站的兴起,如知乎,推特,微博等,这些内容网站上会产生很多大V,这些大V是高质量内容的制造者。

这些大V我们称之为专家,我们的目标是给对的人推荐对的专家。

我们可以看到这些内容网站有很多不同的主题,如,政治、科学、娱乐等等,在每一主题下,用户都会关注一些这一主题下的专家,如在政治主题下,有些用户就会关注希拉里或者奥巴马,科技领域他们就会关注扎克伯克等等,这样数据一般会有三个维度——主题、专家、用户,这种数据集合起来就可以表示成一个三维的张量。

这样一来,我们就可以把推荐的问题,转变成一个数据恢复的问题,其实这些问题本质上都是一样的,都是同一个问题。也就是,给你一部分观测到的数据,去估计没有观测到的数据。

其实,这样一个基础的张量补全模型对于性化的专家推荐系统来说是远远不够的,因为一个推荐系统的数据是非常稀疏的。因为每个用户选择专家的数量非常有限,而且选择主题的数量也非常有限。另外,用户之间的关系也是非常复杂。

值得一提的是,每一个用户都有非常丰富的背景信息,如他的社交信息,行为信息,位置信息,所有的这些背景信息,都可以用来提高推荐系统的准确度,问题在于我们应该如何对用户的背景信息建模,如何将这些背景信息整合到我们的基础张量补全的模型中。

为了让大家对这个问题有更好的理解,用一个推特的例子来阐释一下。

我们通过下面的图来看一下地理位置信息是如何影响用户对专家的选择的。图片中显示了用户和专家之间平均距离的累计分布函数,基于这个函数我们可以看到在不同城市中,用户与专家之间的距离是不一样的,据此我们就可以假设,地理位置信息会在某种程度上会影响用户对专家的选择。

那么我们如何对这些背景信息进行建模,进而添加到张量补全模型中呢?

有两种方式可以对背景信息进行建模,一种是相似模型。正如上个例子中所介绍的,用户可以通过地理位置信息和主题信息去计算一个相似矩阵。另一种是邻接矩阵,这一矩阵可以代表不同用户间的对应关系。如用户与专家之间是否互相关联。

下面拿地理空间信息建模来给大家举一个例子。

我们可以用一个邻接矩阵来表示一个专家在用户所在地的受欢迎程度。通过该方式我们可以对不同维度的背景信息,以及不同实体间建立模型。

所以我们一旦有了同类实体间(如:用户与用户、主题与主题)的背景信息关系,或者异类实体间(如:用户与专家、用户与主题)的背景信息关系,我们就可以通过相似矩阵和邻接矩阵直接把这些信息正则化,从而加入到基础的张量补全模型当中,这样我们就可以做出更准确的推荐。

下图代表了这类推荐的结果,其中tf代表了张量分解,MF代表了矩阵分解,Y轴代表了前K个推荐的正确率。从上图可以看到,即使不考虑任何背景信息的情况下,张量分解也要比矩阵分解在这一应用中有更好的表现。其主要原因是,张量分解在推荐中,能同时考虑带三个维度的相互关系,而矩阵分解只能考虑到两个维度。

四、利用分布式计算去解决张量模型在大数据中的应用

下面给大家介绍如何利用分布式计算去解决张量模型在大数据中的应用。数据的指数级增长是张量在解决问题时面临的主要挑战之一,所以我们经常需要去开发一些可扩展方法去加速这些模型,从而使这些模型能很好的分析海量的数据。

下面给大家介绍一下如何利用分布式系统使张量补全模型能运用在海量的数据中。

图片中所显示的问题,可以通过交替方向乘子算法(ADMM)来求最优解,从而求解到最优的潜在矩阵。然而在真正运行大数据的时候,这一算法并不能很好的处理,会遇到三个问题。

首先,我们可以看到在图片中显示的,在计算的第四步当中,我们需要计算一个一百万乘一百万矩阵的逆,这样一个大于30GB的数据是不可能在一个电脑中计算出来的。

第二个问题,是我们需要计算克罗内克积,随着输入的张量的变大,克罗内克积的维度会变得非常巨大,一个电脑去计算如此大的克罗内克积也是不现实的。

第三个问题,是在每次迭代时,我们都需要去计算一个估计张量,如果这一张量有三个维度,每一维度都有一百万数据的话,这个估计张量会包含至少一兆的元素。如果想通过一个电脑计算出来,基本是不可能实现的。

针对三个问题,我们开发了一个系统DisTenc,这一系统就可以处理大型的拉普拉斯矩阵的逆,并减小作为中间数据的克罗内克积的大小,同时也可以合理的计算每次迭代中的估计张量,从而实现张量模型在大数据中的有效应用。

欢迎关注贪心科技公众号获取更多AI内容

更多AI大咖学习分享活动会在群内举办,欢迎添加微信号“greedytech”,群主会拉你进群

此为贪心科技原创,转载请联系本公众号获得授权。

很好的--张量(Tensor)的技术以及它在不同场景中的应用--转载贪心科技相关推荐

  1. 低延迟流式语音识别技术在人机语音交互场景中的实践

    美团语音交互部针对交互场景下的低延迟语音识别需求,提出了一种全新的低出字延迟流式语音识别方案.本方法将降低延迟问题转换成一个知识蒸馏过程,极大地简化了延迟优化的难度,仅通过一个正则项损失函数就使得模型 ...

  2. 实时音频混音技术在视频直播场景中的实践

    最近半年,视频直播领域中产生不少创新玩法,其中包括K歌直播和合唱直播.这些创新玩法都用到实时音频混音技术.今天我们来聊一下混音技术的实现,及其在创新玩法中的应用. \\ 混音的应用场景 \\ 混音,顾 ...

  3. 虚拟人四大难题:技术、产品、市场、中之人

    "虚拟人行业是一个创业者比使用者还多的行业." 西谷直播电商集团研究院院长雄歌认为,业内一些头部超写实虚拟人,看似接到了很多代言,但本质上是小圈子的自我繁殖和相互吹捧,没有背后运营 ...

  4. Tensor Core技术解析(上)

    Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...

  5. pytorch 创建张量tensor

    pytorch 创建张量tensor 先看下面一张图 通过上图有了一个直观了解后,我们开始尝试创建一下. 先创建一个标量和一个向量 a = torch.tensor([1]) #标量 print(a) ...

  6. Pytorch张量tensor的使用

    1. 张量Tensor Tensors张量: 张量的概念类似于Numpy中的ndarray数据结构, 最大的区别在于Tensor可以利用GPU的加速功能. 张量是一个统称,其中包含很多类型:   [各 ...

  7. tensor转换为图片_pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换

    1, 创建pytorch 的Tensor张量: torch.rand((3,224,224)) #创建随机值的三维张量,大小为(3,224,224) torch.Tensor([3,2]) #创建张量 ...

  8. pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换

    pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换 1, 创建pytorch 的Tensor张量: torch.rand((3,224,224)) #创建随机值的三维张量,大小为 ...

  9. 什么是张量 (tensor)?

    在TensorFlow 官方文档中文版中学习cifar10时,对张量Tensor的概念一知半解,特别在理解代码如何批量读取图片,如何实现卷积的细节困扰了我好几天,在查询网上的资料后总结如下: 一.Te ...

  10. 【问题解决】Origin显示“很抱歉,我们目前发生技术问题,请稍后再试一次”解决

    问题 如图显示"很抱歉,我们目前发生技术问题,请稍后再试一次" 解决 我是直接关掉V就可以上了,上的CN的服务器(开V上的是HK的服务器) 总结 1.如果有挂了V的,把V关掉 2. ...

最新文章

  1. mysql 触发器判断不插入数据_mysql关于触发器怎么判断数据存在时更新不存在时添加呢!...
  2. C# 利用WMI对象获取物理内存和可用内存大小
  3. 全国大学生电子设计大赛 赛前准备
  4. 脚手架工程:工程目录结构
  5. php吞了throw错误,PHP 异常与错误处理
  6. tp3 默认模块 默认方法_您需要了解的有关默认方法的所有信息
  7. 设置和清除LD_LIBRARY_PATH
  8. apple watch3连android,Apple watch 可以连android手机吗?
  9. 2017.8.21 弦论 思考记录
  10. android bugly 错误分析,使用 Robolectric 单元测试运行时 bugly 初始化异常
  11. CSS表格和表单的样式
  12. 知其然(1) 无法使用 DISTINCT, GROUP BY 等子句从视图中选择 ROWID 或采样
  13. ActiveMQ高可用集群的搭建
  14. 演出节目名字_【时空文化集团演出公司承制】山东港口首届道德模范、最美家庭颁奖典礼成功举办!...
  15. 微信小程序的前世今生
  16. win10查看电池详细使用情况报告(查看损耗等)以及无法启动服务问题
  17. [转] 两篇关于flash 职业和webgame的文章
  18. Digital Clock 3D for Mac(3D机械时钟动态桌面壁纸)
  19. System.currentTimeMillis()和System.nanoTime()的区别
  20. python练习题 21-30

热门文章

  1. 美国大学计算机信息技术专业排名,新鲜出炉 2019年USNews美国大学信息技术管理专业排名榜单!...
  2. bootstrap 可编辑列表,实现某个单元格动态控制是否可编辑状态
  3. 每日一算法:杨辉三角形
  4. Java不生成 xml注解_java注解生成xml和包含CDATA
  5. 用LNMP+wordpress搭了一个网站
  6. 大学心理学课本_大学心理学的教材依次(全部)都有哪些?
  7. PPT去除页码的方法
  8. 寻找协调器FindCoordinatorRequest请求流程
  9. word怎么把页面顺序倒过来_怎么把word顺序颠倒
  10. html为标题添加脚注,如何在rmarkdown html中的特定标题下放置脚注?