张量网络让我们专注于量子态与现实世界问题最相关的部分——如低能态,并忽略那些不太相关的部分。张量网络也越来越多地出现在机器学习(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 加速。
尽管这些示例很简单,但张量网络通常可以表示压缩后的数百个张量。使用传统符号描述这一过程比较困难,这也是 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)决定张量网络中张量的大小。连接维度越大说明张量网络越强大,但同时也需要更多的计算资源。