Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

参与:李泽南、路作者:Chase Roberts、Stefan Leichenauer

百倍提升张量计算:谷歌开源TensorNetwork

张量网络正越来越多地用于机器学习领域,它被用于执行复杂计算任务,但对于大多数人来说它仍然遥不可及——我们还没有开源库来大规模运行这种底层算法。幸运的是,谷歌正在解决这一问题。昨天,Google AI 发布了 TensorNetwork,它使用 TensorFlow 机器学习框架作为后端,并用 GPU 优化来提高张量计算的效率。

TensorNetwork 链接:https://github.com/google/tensornetwork

在科学领域有很多难度颇高的挑战,如开发高温超导体、理解时空的本质,这些任务需要处理复杂的量子系统。其中最具挑战的是系统中量子态的数量呈指数级增长,使得暴力计算变得不可行。为了解决这个问题,人们开发了张量网络(tensor network)这一数据结构。

张量网络让我们专注于量子态与现实世界问题最相关的部分——如低能态,并忽略那些不太相关的部分。张量网络也越来越多地出现在机器学习(ML)应用中。然而,我们仍然能在 ML 社区中看到广泛应用张量网络所面临的困难:1)目前还没有生产级的张量网络库用于规模化地运行张量网络算法;2)大多数张量网络文献是物理学应用方向的,这就产生了一种错误的固有印象:只有通晓量子力学知识才能理解张量网络算法。

为了解决这些问题,谷歌发布了 TensorNetwork:一个旨在提高张量计算效率的全新开源库。谷歌表示,这个工具是与加拿大圆周理论物理研究所(Perimeter Institute for Theoretical Physics)、谷歌 X 公司共同开发的产品。它使用 TensorFlow 作为后端,针对 GPU 进行优化,与 CPU 上的运行速度相比实现了 100 倍的加速。

谷歌还在一系列论文中介绍了 TensorNetwork,其中第一篇论文《TensorNetwork: A Library for Physics and Machine Learning》介绍了这个库及其 API,并为非物理背景读者介绍了张量网络的背景。在第二篇论文《TensorNetwork on TensorFlow: A Spin Chain Application Using Tree Tensor Networks》中,谷歌将重点放在一个物理问题的案例上,介绍了如何使用这一工具并获得 GPU 加速。

为何张量网络如此好用?

张量是多维数组,按照阶数分类:例如普通数是零阶张量(也被称为标量),向量是一阶张量,矩阵是二阶张量,以此类推……虽然低阶张量可以简单地使用数组或者 T_ijnklm 这样的数学符号来表示(其中指数的数字代表张量的阶数),但如果我们要处理高阶张量,这种符号表示法就会很繁琐。

在这种情况下使用图解表示法(diagrammatic notation)是更好的选择,人们只需要画一个圆(其他形状也行)和若干条线(或腿),腿的数量表示张量的阶数。在这种符号体系中,标量是一个圆,向量有一条腿,矩阵有两条腿,以此类推……张量的每一条腿也有一个维度,就是腿的长度。例如,代表物体在空间中速度的向量就是三维一阶张量

张量的图解表示

以这种方式表示张量的优点是可以简洁地编码数学运算,例如将一个矩阵乘以一个向量以产生另一个向量,或者将两个向量相乘以产生标量。这些都是更为通用的「张量缩并」概念的示例。

张量缩并的图解表示法。以上示例包括向量和矩阵相乘,以及矩阵迹(即矩阵对角元素的总和)。

以下是张量网络的简单示例,它们用图的形式表示将多个张量进行缩并形成新张量的过程。每个张量组件的阶数由其腿的数量决定。腿相连形成一条边表示缩并,而「落单」的腿的个数决定最终张量的阶数。

左:四个矩阵乘积的迹 tr(ABCD),这是一个标量(该图中没有出现「落单」的腿)。右:三个三阶张量通过张量缩并过程生成新的三阶张量(其中有三个「落单」的腿)。

尽管这些示例很简单,但张量网络通常可以表示压缩后的数百个张量。使用传统符号描述这一过程比较困难,这也是 1971 年 Roger Penrose 创造图解表示法的原因。

实践中的张量网络

给出一些黑白图像,每一张图像都可以被认为是 N 个像素值的列表。单个图像中的单个像素可以被 one-hot-encode 为二维向量,将这些像素编码结果结合起来会得到整个图像的 2^N 维 one-hot-encoding 结果。谷歌将高维向量转化为 N 阶张量,然后将所有图像的所有张量聚合到一起得到张量 T_(i1,i2,...,iN)。

这看起来似乎是在浪费时间:用这种方式编码约 50 像素的图像就需要拍字节级别(petabytes)的内存。而这正是张量网络的作用所在。研究人员没有直接存储或操纵张量 T,而是将 T 表示为张量网络内的多个小的张量组合,这样就高效得多了。例如,流行的矩阵乘积态(matrix product state,MPS)网络可以将 T 表示为 N 个较小的张量,从而使总参数量为 N 的线性级,而不是指数级。

在 MPS 张量网络中,高阶张量 T 被表示为多个低阶张量

这并不能表明,在高效创建或操纵大型张量网络的同时能够持续避免使用大量内存。但这至少说明在某些情况下是可能的,这也是张量网络广泛用于量子物理和机器学习领域的原因。Stoudenmire 和 Schwab 在论文《Supervised Learning with Quantum-Inspired Tensor Networks》中使用这种编码来创建图像分类模型,展示了张量网络的新用途。而谷歌开发的 TensorNetwork 库旨在推进这类工作,谷歌在 TensorNetwork 相关论文《TensorNetwork: A Library for Physics and Machine Learning》中介绍了该库的用途。

TensorNetwork 在物理场景中的性能

TensorNetwork 是一个针对张量网络算法的通用库,因此它适用于物理学场景。逼近量子态是张量网络在物理学领域的传统用法,恰好可以说明 TensorNetwork 库的能力。谷歌在另一篇论文《TensorNetwork on TensorFlow: A Spin Chain Application Using Tree Tensor Networks》中,介绍了一种树张量网络(tree tensor network,TTN),它可以逼近周期性量子自旋链(一维)或 thin torus 上点阵模型(二维)的真值状态。谷歌使用 TensorNetwork 库实现了该算法。此外,谷歌研究人员还对比了使用 CPU 和 GPU 的情况,发现在使用 GPU 和 TensorNetwork 库时出现了显著的计算加速(100 倍)。

连接维度 vs 计算时间。连接维度(bond dimension)决定张量网络中张量的大小。连接维度越大说明张量网络越强大,但同时也需要更多的计算资源。

结论和未来工作

谷歌表示这是阐述 TensorNetwork 在现实应用中作用的系列文章的第一篇,后续谷歌将使用 TensorNetwork 在 MNIST 和 Fashion-MNIST 上执行图像分类,以及时序分析、量子电路模拟等。谷歌希望 TensorNetwork 能够成为物理学家和机器学习从业者的得力助手。

原文链接:https://ai.googleblog.com/2019/06/introducing-tensornetwork-open-source.html

工程张量网络张量TensorFlow
1
相关数据
TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

张量网络技术

简单来说,张量网络是通过收缩连接的可数的张量集合。“张量网络方法”是指整个相关领域的工具,在现代量子信息科学、凝聚态物理学、数学和计算机科学中经常使用。

推荐文章
暂无评论
暂无评论~