论文部分内容阅读
张量是矩阵在高维度空间的泛化,矩阵以二维数组的形式包含了行和列,而张量是多维数组。二维数组能够描述两对或者多对变量之间的二元关系,而多维数组能够描述三个,甚至更多变量之间的高阶关系。这种描述高阶关系的能力使得张量不仅仅在文本分析领域有所应用,在社交网络、时间序列分析等领域张量有着更广泛的应用。过去的几十年里,张量在的研究主要集中在物理、数值分析、信号处理和理论计算机科学等理论领域。由于在计算机发展的初期,计算机的处理能力十分有限,而涉及到张量的算法,时间复杂度通常都是指数级的,因此当时矩阵在计算机科学的工程领域被广泛使用。随着计算机的发展和大数据的兴起,张量继理论领域的发展之后,再次在工程领域受到了大量的关注。在海量数据的处理中,面对的常常都是高维度特征空间的数据,矩阵以二维的形式来描述数据的能力越来越难以处理高维度数据,张量正在逐渐成为处理高维度海量数据的主流手段。张量分解是将张量应用于高维度数据处理的主要工具,通过张量分解,隐含在数据中的特征能够被有效地提取出来,同时剔除不重要部分,实现去除噪声数据、降低数据维度和减少数据量的作用。而张量的CP分解是张量分解重要方式。本文首先阐述了张量和张量的CP分解,并分析了传统基于ALS的CP分解算法在计算和实现上的问题。然后针对传统CP分解算法处理大规模数据效率低下的问题,本文设计实现了基于Spark平台的CP分解的分布式算法,ParaTD(Parallel Tensor Decomposition)。对比传统的CP分解算法,本文的主要贡献有三个方面:(1)提出了基于Spark平台的CP分解的分布式算法,并使用Scala进行工程实现,利用Spark的RDD和分布式矩阵的特性,将内存作为计算过程中的数据的主要存储方式,减少了磁盘访问带来的开销。(2)设计并实现了拆分Khatri-Rao乘积的算法,将张量拆分为多个纤维进行计算,避免了计算过程中的临时数据激增,为大规模数据的CP分解打下基础。(3)设计并实现了并行计算外积,以及使用分布式缓存来加速计算矩阵乘积的方案。把用于计算外积的矩阵拆分为行向量,使用分布式的方式对彼此无依赖的外积进行并行的计算;同时利用Spark广播变量的特性,把较小的矩阵在集群上分发,并把大矩阵的乘法化整为零,进一步提高了计算的效率。通过实验表明,相比传统的CP分解算法,本文的分布式CP分解算法在大数据量的情况下,在计算效率和对资源的利用率都有较大的提升。