在我研究生入学的时候,张量(tensor)分解还只是活跃在计算数学领域的一个小方向,经过这几年时间的发展,张量分解以及基于张量的方法遍布各个领域,机器学习一些著名的会议也出现了张量的子版块。这篇小文就当做这几年学习张量的一个总结。因为不是正儿八经的学术论文,有些概念跟定义就不是那么精确了,希望不会引起误导。
张量的背景
张量,是向量与矩阵的推广(这里与黎曼几何里的张量有区别)。向量可以看做是一阶张量,矩阵是二阶张量。张量的阶数某种意义上代表着数据的“丰富程度”,一个矩阵代表了二维信息,一个三阶张量往往蕴含着三维的空间信息。
为什么要用张量这种新的数学工具?矩阵计算难道还不够用吗?在回答这两个问题之前,我们先回顾下当前计算机处理问题的方式。那就是,数据往往以矩阵的方式出现。比如一张用户-商品表可以表征为用户-商品矩阵。一张灰度图也可以用矩阵表示,信息在计算机里的存储以及表示方式都是矩阵的形式,后续的建模跟计算毫无疑问都是基于矩阵。换而言之,计算机处理数学问题基本上是在数值代数(矩阵计算,方程的数值解)的框架下进行的。但是,有的时候我们获取的数据并不是天然的就具有“矩阵”这类形式,比如,RGB图像它是一个三维数组。用户-商品表也往往不是单独出现,因为社交媒体的存在,真正的那张表应该是用户-用户-商品这个三维数组,类似的例子还有很多。那么,问题来了:是否可以建立如同矩阵计算(分解)那样的底层运算,为当前的数据形式(多维数组)提供更有内蕴的计算框架跟工具?