Tree Tensor Networks#
Timo Felser
本章旨在深入讨论树张量网络的基础知识。从第8.1节开始,我们将介绍树张量网络态的基本概念。在对树张量网络进行形式化定义之后,我们会看到这类张量网络态天然具有无环的层级结构,这极大地有利于计算可观测量和寻找多体哈密顿量基态的相关算法。在第8.2节中,我们将把树张量网络的概念推广到更高维系统的研究中。在那里,我们将看到树张量网络的具体结构对于模拟二维及更高维度的系统至关重要[189],以及如何理想地将一个系统映射以适应树张量网络的拓扑结构。这种映射将通过一个具有最近邻相互作用的4×4系统的逐步实例来进一步强调。此外,我们将会看到,这种网络本身(没有引入第9章中的增强结构)在更高维度上不满足面积定律,因此对于增长的系统尺寸,最终无法忠实地表示物理态。本章的最后一节,第8.2节,致力于对树张量网络数值实现进行深入的技术描述,包括对底层数据结构、重要模块以及实现中高性能计算方面的实际说明的讨论。
本章经许可修改自[150]。© 2021, Timo Felser。保留所有权利。
8.1 树张量网络态#
定义8.1.1 (树张量网络) 树张量网络,缩写为TTN,是一个遵循定义5.3.1的张量网络,其中任意两个张量恰好由一条路径连接。
定义8.1.2 (路径) 设有一组不同的张量 $( \forall i \neq j : \mathcal{T}^{[ i ]} \neq$ $\mathcal{T}^{[ j ]} )$ ,并设 ν 为一组链接,每个链接 $\nu_{i}$ 连接张量 $\mathcal{T}^{[ i ]}$ 和 $\mathcal{T}^{[ i + 1 ]}$ ,其中 $1 \leq i < k$ 。那么,路径定义为有序、交替的列表 $( \mathcal{T}^{[ 1 ]} , \nu_{1} , \mathcal{T}^{[ 2 ]} , \nu_{2} , . . . , \nu_{k - 1} , \mathcal{T}^{[ k ]} )$
进一步地,我们定义:
• 路径的长度为集合中链接的数量 dim $\nu = k - 1$
• $\mathcal{T}^{[ 1 ]}$ 和 $\mathcal{T}^{[ k ]}$ 为路径的端点。
• 一个圈为一条路径加上连接其端点的额外链接。
定理8.1 树张量网络性质 设为一个张量网络,则以下陈述等价:
• 是一个树张量网络。
• 不包含圈,即是无环的(无循环),且添加任何内部链接都会导致圈的形成
• 是连通的,且移除任何内部链接都会断开 $G .$
引理8.1 每一个无环的张量网络都是一个树张量网络。
8.1.1 树张量网络的层级结构#
如图8.1所示,在定义根链接(即网络中最顶层的链接)后,每个TTN都可以排列成具有不同层 $\Lambda_{\ell}$ 的层级结构。在此结构中,第一层 $\Lambda_{1}$ 由通过根链接连接的两个张量组成,而这两个张量的所有其他邻居则属于层 $\Lambda_{2}$ 。因此,相应地填充所有其他层,我们就得到了一个定义良好的层级结构。在这个结构中,层 $\Lambda_{\ell > 1}$ 中的每个张量在层 $\Lambda_{\ell - 1}$ 中恰好有一个邻居,该邻居被定义为其父张量,并且可能在层 $\Lambda_{\ell + 1}$ 中有几个邻居,这些邻居被定义为其子张量。对于 $\ell = 1$ ,我们定义这两个张量互为彼此的父张量(这可能违背传统的生物学直觉,但确保了网络中的每个张量都恰好有一个父张量)。在此结构内,第 $\ell$ 层 $\Lambda_{\ell}$ 中的第 k 个张量可以枚举为 $\mathcal{T}^{[ \ell , k ]}$ 。此外,层级TTN的深度定义为其层数 $\mathcal{L}$ ,即张量与根链接之间的最长路径。为了简洁起见,我们总是选择使得层级有序树的层数最小化的内部链接作为根链接。


图8.1 通用二叉树张量网络(TTN)的结构。绿线表示从张量 $\mathcal{T}^{[ 3 , 2 ]} \mathop{\mathrm{\Delta}}_{\mathrm{to}}^{\bullet} \mathcal{T}^{[ 3 , 3 ]}$ 的唯一可能路径,更具体地说,是从格点 $i_{4}$ 到格点 $i_{9}$ 的路径。在二叉树TTN中,每个张量有三个链接,而在通用TTN中,张量可能具有不同数量的链接,其数量可高于三个。(图片经许可转载自[150])
鉴于网络内收缩的计算复杂度随连接到张量的所有链接的键维度的乘积而缩放,因此,为了构建一个可高效收缩的张量网络,最小化每个张量的链接数量是合理的。因此,一个特别值得关注的类别是二叉树TTN,其中每个张量最多有三个邻居,即在层级结构中最多有两个子节点。此外,该网络中的所有张量都是三阶的。因此,当一个张量没有两个子张量时,它会连接一个物理链接。基于上述定义,我们可以进一步将二叉树TTN分为不同的子类:
完美TTN——在完美二叉树TTN中,每一层都完全填满了最大数量的张量 $( 2^{\ell} )$。因此,层 $\Lambda_{l < \mathcal{L}}$ 中的每个张量都有两个子张量,而最后一层 $\Lambda_{\mathcal{L}}$ 中的每个张量 $\mathcal{T}^{\mathcal{L} , k ]}$ 都有一个向上的内部链接连接到其父张量,以及两个向下的物理链接,用于寻址量子多体系统的局部希尔伯特空间(见图8.2a)。因此,这种TTN只能捕获具有 $N = 2^{\mathcal{L}}$ 个格点的系统。
完全TTN——与完美TTN类似,完全TTN中的每一层都被完全填满,除了最后一层 $\Lambda_{\mathcal{L}}$ 是从左侧开始填充的,即最后一层中的所有张量都尽可能靠在最左边(见图8.2b)。显然,完美TTN是完全TTN的一个子类。然而,与完美TTN不同的是,这种TTN能够描述任意大小的系统。


图8.2 完美TTN (a)的结构,其中每一层都完全填满张量,导致 $N = 2^{\mathcal{L}}$ 个格点;完全TTN (b)的结构,其最后一层可能未被完全填满。完美TTN是完全TTN的一个子类。(图片经许可转载自[150])


图8.3 朝向张量 $\mathcal{T}^{[ 1 , 1 ]}$ 等距化的TTN。所有其他张量(蓝色)都是如第5.1.2节所介绍的等距算子,并满足等距条件(右侧)。张量 $\mathcal{T}^{[ 1 , 1 ]}$(绿色)可以是任意张量。(图片经许可转载自[150])
矩阵乘积态——二叉树TTN的一个特定子类是MPS。在层级树的框架中,MPS等价于一个二叉树TTN,其中每一层 $\Lambda_{l > 2}$ 只包含一个张量。
8.1.2 树张量网络中的等距性#
TTN的一个关键特性是,通过利用张量网络的规范自由度,可以将它们转换为某种等距形式。在这种等距形式(或称幺正规范)下,TTN主要由等距算子组成,这与第5.1.2节中的介绍一致。如图8.3所示,在幺正规范下,网络中只有一个张量不满足等距条件。因此,这个规范总是相对于网络中的某个特定张量 $\mathcal{T}^{[ l , k ]}$ 来定义的。我们将这种TTN称为朝向 $\mathbf{\widehat{\mathcal{T}}}^{[ l , k ]}$ 等距化的TTN。
大部分张量都是等距的,因此在与它们的复共轭沿正确连接收缩时会消失,这一特性在许多数值计算场景中都极具优势。最直接的优势是计算TTN态的内积 $\langle \psi | \psi \rangle$:在此计算中,整个TTN需要与其复共轭收缩。将TTN等距化到任意张量 $\mathcal{T}^{[ l , k ]}$ 上,可将该计算简化为 $\mathcal{T}^{[ l , k ]}$ 与其自身的复共轭在所有 $K$ 个连接上的收缩:$\begin{array} {r} {\sum_{i_{1} , . . . , i_{K}} ( \mathcal{T}^{[ l , k ]} )_{i_{1} , . . . , i_{K}} ( \mathcal{\bar{T}}^{[ l , k ]} )_{i_{1} , . . . , i_{K}}^{\dagger}} \end{array}$。例如,在下一节(第8.1.3节)中,我们将看到,同样地,当利用适当等距化的TTN时,可观测量的计算可以更高效地执行。


图8.4 将TTN从位置张量 $\mathcal{T}^{[ 1 , 1 ]}$ 重新等距化到张量 $\mathcal{T}^{[ 2 , 2 ]}$ 的算法:(a) 张量 $\check{\mathcal{T}}^{[ 1 , 1 ]}$ 通过QR分解被分解为一个等距张量和一个二阶张量(红色)。表示新的张量 $\tilde{\mathcal{T}}^{[ 1 , 1 ]}$ 。(b) 该张量与张量 $\mathcal{T}^{[ 2 , 2 ]}$ 收缩,得到一个新的张量 $\tilde{\mathcal{T}}^{[ 2 , 2 ]}$ ,它不再满足等距条件(标记为绿色)。因此,TTN被等距化到 $\mathcal{T}^{[ 2 , 2 ]}$ 。(图片经许可转载自[150])
拥有一个朝向给定张量 $\mathcal{T}^{[ l , k ]}$ 等距化的TTN后,我们始终可以将这个规范更改为网络中另一个张量 $\mathcal{T}^{[ l^{\prime} , k^{\prime} ]}$,换句话说,将TTN重新等距化到 $\mathcal{T}^{[ l^{\prime} , k^{\prime} ]}$。对于这种重新等距化,我们必须定义从网络当前等距化所朝向的张量 $\mathcal{T}^{[ l , k ]}$ 到目标张量 $\mathcal{T}^{[ l^{\prime} , k^{\prime} ]}$ 的路径 $\Gamma_{l , k}^{l^{\prime} , k^{\prime}}$。作为过程的第一步,张量 $\mathcal{T}^{[ l , k ]}$ 通过QR分解沿路径定义的方向被分解为一个等距张量和一个二阶张量。随后,张量 ${\mathcal{T}}^{[ l , k ]} \gets Q$ 被创建的等距张量替换,而张量 $\mathcal{R}$ 沿路径 $\Gamma_{l , k}^{l^{\prime} , k^{\prime}}$ 与相邻张量收缩。这第一步已经将TTN重新等距化到 $\mathcal{T}^{[ l , k ]}$ 的相邻张量。因此,沿着整个路径 $\Gamma_{l , k}^{l^{\prime} , k^{\prime}}$ 迭代执行此过程,就将TTN重新等距化到所需的张量 $\mathcal{T}^{[ l^{\prime} , k^{\prime} ]}$。例如,图8.4展示了从张量 $\mathcal{T}^{[ 1 , 1 ]}$ 到其相邻张量 $\mathcal{T}^{[ 2 , 2 ]}$ 的重新等距化。
由于我们在重新等距化的每一步都创建一个等距张量,因此可以通过在整个网络中迭代执行QR分解,将此过程扩展到在任意TTN中建立幺正规范。然而,在实践中,等距化通常是在TTN初始化期间创建的,如第8.1.4.3节所示。一旦创建,所执行的TTN算法通常被设计为能够管理、跟踪并利用这种等距化。
8.1.3 可观测量计算#
接下来,介绍TTN中不同可观测量 $O$ 的期望值的计算。在许多量子多体系统的模拟中,特别关注的是(i) 仅作用于一个格点 $s$ 的局域可观测量的计算,(ii) 关联函数,即二体算符,以及(iii) 一般的弦类可观测量的计算。


图8.5 用于计算作用于TTN(a)中单个格点的局域可观测量(橙色)期望值的收缩方案。将网络向直接连接到该算符的张量进行等距化,可将计算简化为三个张量的收缩,因为所有其他张量均为等距张量,当与对应的复共轭收缩时变为单位矩阵(b)。(图片经许可转载自[150])
8.1.3.1 局域可观测量#
设 $O^{[ s ]}$ 是作用于TTN态 $\psi$ 中格点 $i_{s}$ 的局域可观测量。为了高效计算期望值 $\langle{\cal O}^{[ s ]} \rangle_{\psi} = \langle \psi | {\cal O}^{[ s ]} | \psi \rangle$,可将TTN等距化为作用于物理格点 $i_{s}$ 的张量 $\mathcal{T}^{\downarrow \mathcal{L} , \lfloor ( s + 1 ) / 2 \rfloor \rfloor}$($\lfloor \cdot \rfloor$ 表示向下取整函数)。利用TTN中的这种等距化,$\langle O^{[ s ]} \rangle_{\psi}$ 的计算只需收缩三个张量即可完成,复杂度为 $O ( d^{3} m ) + O ( d^{2} m )$,其中 $d$ 是系统的局域物理维度(见图8.5)。
8.1.3.2 关联函数#
设 $O^{[ s_{1} , s_{2} ]}$ 是作用于TTN态 $\psi$ 中格点 $i_{s}$ 和 $i_{s^{\prime}}$ 的关联函数。为了计算期望值 $\langle{\cal O}^{[ s , s^{\prime} ]} \rangle_{\psi} ~ = ~ \langle \psi | {\cal O}^{[ s , s^{\prime} ]} | \psi \rangle$,可将TTN等距化为从物理格点 $s$ 到 $s^{\prime}$ 路径的锚点。因此,只需收缩该路径内的张量,因为其他所有张量在全局收缩中均与其复共轭相互抵消(见图8.6)。该收缩可在最坏情况复杂度 $O ( m^{4} \kappa \log N ) + O ( m^{4} \kappa \log{( N - 1 )} ) + O ( m^{3} \kappa )$ 下执行,其中 $\kappa$ 表示表示关联函数 $O^{[ s_{1} , s_{2} ]}$ 的张量积算符(TPO,见第5.3.5节)的内维度,而 $\log N$ 等于TTN中的层数。
8.1.3.3 弦观测量#
令 $O^{[ s_{1} , s_{2} , \ldots , s_{\Omega} ]}$ 为作用在TTN态 $\psi$ 的格点 $s_{1} , s_{2} , . . . , s_{\Omega}$ 上的弦算符。为了计算期望值 $\langle O^{[ s_{1} , s_{2} , . . . , s_{\Omega} ]} \rangle_{\psi} =$ $\langle \psi | O^{[ s_{1} , s_{2} , \ldots , s_{\Omega} ]} | \psi \rangle$,可以将TTN等距化,使得从每个物理格点 $s ~ \in ~ \{s_{1} , s_{2} , . . . , s_{\Omega} \}$ 到 $s^{\prime} ~ \in ~ \{s_{1} , s_{2} , . . . , s_{\Omega} \}$ 的最长路径锚点固定。在这种情形下,只需要收缩所有这些不同路径内的张量,因为其他所有张量都会在全局收缩中与其复共轭相消。在最一般的情况下,可观测量形成一个MPO [185, 203]。在这种数值上最坏的情况下,收缩中没有任何张量可以忽略,其底层收缩的复杂度变为 $O ( m^{4} \kappa^{2} ( \kappa + 2 ) ( N - 2 ) ) + O ( m^{2} \kappa )$,其中 $\kappa$ 是表示 $O^{[ s_{1} , s_{2} , \ldots , s_{\Omega} ]}$ 的TPO的内维度,而 $N - 2$ 等于TTN中张量的总数。


图8.6 作用于TTN两个格点上的关联函数(橙色)期望值的收缩方案 (a)。开放链接表示完整TTN可能比图示子树更大。绿色线表示连接直接附着于算符的两个张量的路径。将此网络等距化至该路径的锚节点,可将计算简化为仅收缩路径上的所有张量,因为等距条件下其他张量在收缩中消失 (b)。(图片经许可转载自[150])
8.1.4 基态计算#
本节介绍用于计算相互作用量子多体哈密顿量基态的TTN优化算法。如第5.4.1节所述,这种基态搜索可以通过迭代优化张量网络的一个变分参数子集来高效完成,从而最小化能量 $E = \langle \psi | {\mathcal{H}} | \psi \rangle$。特别地,这种优化利用了网络中所有单个张量均可视为独立变量这一事实。因此,优化张量网络态 $| \psi \rangle$ 的核心思想是每次只优化一个或有限子集的张量,从而将全局的、指数级大小的优化问题重新表述为一组局部最小化问题,这些问题的规模由所选网络键维度严格控制。
下面将更详细地说明这一优化过程,从全局优化开始,阐述如何将其重新表述为单个张量或局部相连张量子集的局部最小化问题。随后,介绍局部优化问题以及在实际应用中如何求解该最小化问题,最后讨论TTN初始化对于高效模拟的重要性。


图8.7 寻找量子多体系统基态的树张量网络优化算法。(a) 通过收缩哈密顿量(橙色)与TTN及其复共轭即可计算当前能量。能量的最小化通过迭代优化每个张量的变分参数来执行。因此,定义了扫描序列(绿色),在此序列中我们优化局部张量。(b) 为了优化目标张量(红色),需要收缩其环境(虚线边框的阴影区域),该环境描述了局部问题的有效哈密顿量。(c) 局部优化问题已被简化为张量(红色)、其复共轭以及有效哈密顿量(橙色/蓝色)。(图片经许可转载自[150])
8.1.4.1 求解全局优化问题#
设 $\mathcal{H} \in \mathcal{H}$ 为量子多体系统的哈密顿量,并设 TTN 来表示同一希尔伯特空间中的波函数。那么,该哈密顿量的基态是最小化问题的解
为了找到 $\mathcal{H}$ 的基态,我们优化 TTN 的变分参数,目标是使其所表示的波函数能量 $E ( \Psi )$ 最小化。在此,TTN 允许通过将网络内的每个张量视为一组独立的变分参数来执行此优化问题。因此,可以通过扫描整个网络(见图 1.1)来执行全局优化,在此过程中我们依次对每个张量进行局部优化。为了执行这种局部优化,可以对 Tensor Network 关于网络中任意单个张量 $\mathcal{T}^{[ \kappa ]}$ 进行求导:
$$ \begin{array} {r} {\frac{\partial \Psi} {\partial \mathcal{T}^{[ \kappa ]}} = \frac{\partial} {\partial \mathcal{T}^{[ \kappa ]}} \underset{i_{1} , i_{2} , \ldots , i_{N}} {\sum} \left( \underset{k = 1} {\overset{K} {\prod}} \mathcal{T}_{\{i \}_{k} , \{\chi \}_{k}}^{[ k ]} \right)} \\ {= \underset{i_{1} , i_{2} , \ldots , i_{N}} {\sum} \left( \underset{k = 1} {\overset{K} {\prod}} \frac{\partial} {\partial \mathcal{T}^{[ k ]}} \mathcal{T}_{\{i \}_{k} , \{\chi \}_{k}}^{[ k ]} \right)} \end{array} $$$$ = \sum_{i_{1} , i_{2} , . . . , i_{N}} \left( \prod_{k \neq \kappa} \mathcal{T}_{\{i \}_{k} , \{\chi \}_{k}}^{[ k ]} \right) \equiv \Psi_{e n v}^{[ \kappa ]} $$因此,任何关于 $\mathcal{T}^{[ \kappa ]}$ 的线性函数的导数都可以数值计算得到,我们称得到的 $\Psi_{e n v}^{[ \kappa ]}$ 为张量 $\mathcal{T}^{[ \kappa ]}$ 的环境。根据此定义,能量期望值可以关于单个张量重新表述为
$$ E = \langle \Psi | \mathcal{H} | \Psi \rangle = \langle \mathcal{T}^{[ \kappa ]} | \underbrace{\Psi_{e n v}^{[ \kappa ]} \mathcal{H} \Psi_{e n v}^{[ \kappa ]}}_{\mathcal{H}_{e f f}^{[ \kappa ]}} | \mathcal{T}^{[ \kappa ]} \rangle $$其中,我们进一步为张量 $\mathcal{T}^{[ \kappa ]}$ 定义了有效哈密顿量 $\mathcal{H}_{e f f}^{[ \kappa ]}$。因此,优化问题的全局拉格朗日泛函 $\mathcal{L} ( \Psi , \Psi^{\dagger} ) = \langle \Psi | \mathcal{H} | \Psi \rangle - \epsilon \langle \Psi | \Psi \rangle$ 可以重新表述为关于 $\mathcal{T}^{[ \kappa ]}$ 的局部拉格朗日泛函 $\mathcal{L} ( \mathcal{T}^{[ \kappa ]} , \mathcal{T}^{[ \kappa ]} {}^{\dagger} ) = \langle \mathcal{T}^{[ \kappa ]} | \mathcal{H}_{e f f}^{[ \kappa ]} - \epsilon \mathcal{N} | \mathcal{T}^{[ \kappa ]} \rangle$,其中 $\mathcal{T}^{[ \kappa ]}$ 被重整为一个向量 $| \mathcal{T}^{[ \kappa ]} \rangle$。这里的有效哈密顿量 $\mathcal{H}_{e f f}^{[ \kappa ]}$ 包含了物理哈密顿量 $\mathcal{H}$ 和网络中围绕 $\mathcal{T}^{[ \kappa ]}$ 的所有张量,而 $\mathcal{N}$ 表示一个正定算子,用于有效平方范数约束。因此,我们可以仅通过优化 $\mathcal{T}^{[ \kappa ]}$ 内的变分参数来降低整体能量。在实际操作中,这一重新表述是通过将 $\mathcal{H}$ 与整个环境 $\Psi_{e n v}^{[ \kappa ]}$(即完整的 TTN 及其复共轭,但不包括张量 $\mathcal{T}^{[ \kappa ]}$ 和 $\mathcal{T}^{[ \kappa ]^{\dagger}}$)进行收缩来完成的。图 8.7 展示了这种网络向局部张量 $\mathcal{T}^{[ \kappa ]}$(其中 $\kappa = ( 2 , 1 )$)收缩的过程。一旦 $\mathcal{T}^{[ \kappa ]}$ 的哈密顿量和环境被收缩为有效哈密顿量,$\mathcal{T}^{[ \kappa ]}$ 的极小化问题就存在于一个由网络所选最大键维度 m 限制的空间内,即 $\dim \mathcal{\bar{H}}_{e f f}^{[ \kappa ]} \le m^{3}$。通常,这个局部优化问题可以直接通过特征值分解 $\mathcal{H}_{e f f}^{[ \kappa ]} = E v^{\dagger} \mathcal{H}_{e f f}^{[ \kappa ]} v$ 来求解,其中我们使用对应于最小特征值 $E_{0}$ 的特征向量将张量更新为 $\mathcal{T}^{[ \kappa ]} \to v_{0}$。因此,在 TTN 中优化张量 $\mathcal{T}^{[ \kappa ]}$ 包含三个不同的步骤:
将哈密顿量与环境 $\Psi_{e n v}^{[ \kappa ]}$ 收缩为有效哈密顿量 $\mathcal{H}_{e f f}^{[ \kappa ]} = \Psi_{e n v}^{[ \kappa ]} \mathcal{H} \Psi_{e n v}^{[ \kappa ]}$
计算 $\mathcal{H}_{e f f}^{[ \kappa ]}$ 的最小特征值对应的特征向量 v
将张量更新为 $\mathcal{T}^{[ \kappa ]} \to v_{0}$
接下来,对网络中所有张量迭代地求解局部优化问题,将极有可能收敛到拉格朗日泛函 $\mathcal{L} ( \Psi , \Psi^{\dagger} )$ 的全局极小化问题。通过这种方式,全局优化的复杂度可以成功地降低到一个由 $\Psi$ 的键维度 m 所界定的、显著更小的空间中。
优化的具体扫描顺序通常是随机的,这在复杂系统中(例如第 11 章中介绍的高维晶格规范系统研究)被证明是有益的。另一种成功的顺序是从左下角到右上角迭代进行张量优化,如图 8.7a(绿色部分)所示。通过这种方式,系统的信息可以从直接连接到哈密顿量的张量开始,沿 TTN 向上传播,同时仍能保持一次完整扫描的路径相对较短。在整个网络中迭代这一扫描过程,将导致全局 TTN 在能量和所选可观测量方面的收敛。同样,这一策略可以扩展到一次优化一小部分张量,而不仅仅是单个张量。
8.1.4.2 局部优化#
如上所述,全局最小化问题可以通过对每个局部张量 $\mathcal{T}^{[ \kappa ]}$ 迭代求解局部本征值问题来解决。对于这种优化(即本征值问题),我们可以利用线性代数中成熟的算法。特别是,ARPACK 库 [312] 中实现的 Arnoldi 算法 [310,311] 提供了一种高效的数值解法,该库是一个设计用于求解大规模本征值问题的 Fortran77 子程序集合。Arnoldi 算法通过迭代对角化每个张量 $\mathcal{T}^{[ \kappa ]}$ 对应的有效哈密顿量 $H_{e f f}^{[ \kappa ]}$ 来求解其局部本征值问题。在实际应用中,该算法只需要知道 $\dot{H}_{e f f}^{[ \kappa ]}$ 对 $\mathcal{T}^{[ \kappa ]}$ 的作用,从而在预定精度 $\epsilon$ 内提供 $H_{e f f}^{[ \kappa ]}$ 的最低本征对(详见第 8.2.3 节的实例)。此操作的完整数值复杂度由 $\mathcal{T}^{[ \kappa ]}$ 所有连接维度的上限 $O ( m^{4} )$ 决定。在实际应用中,明智的做法是先从 Arnoldi 算法的低优化精度 $\epsilon$ 开始,并在每次扫描后逐步提高,使得随着 TTN 趋近全局收敛,局部本征值问题的解越来越精确。
进一步地,有趣的策略是将这种单张量更新扩展到双站点更新,即同时优化两个相邻的张量 $\bar{\mathcal{T}}^{\{\kappa \}}$ 和 $\mathcal{T}^{[ \kappa^{\dagger} ]}$。这可以通过类似于上述的方式实现:收缩这两个张量并计算有效哈密顿量,此时的环境 $\Psi_{e f f}^{[ \kappa , \kappa^{\prime} ]}$ 是关于 $\mathcal{T}^{[ \kappa ]}$ 和 $\mathcal{T}^{[ {\kappa}^{\prime} ]}$ 的完整空间的。然而,由于这会导致针对收缩后的双张量空间的局部最小化问题,其数值复杂度更高,为 $O ( m^{5} )$。优化这个收缩后的张量后,再将其分解回原始形式,即两个相互连接的张量,以保持 TTN 结构。这种策略可能会增加数值复杂度,但它允许动态调整键链接(包括其维度,对于对称 TTN 还包括其对称扇区),从而可能实现更好或更快地收敛到全局最小值。


图 8.8 为初始化树张量网络构建一层的结构。(a) 给定两个局部状态空间的站点 $( i_{1} , i_{2} )$ 作为输入,用随机元素初始化一个三阶张量,合并局部空间(左下角)。执行 QR 分解创建一个三阶等距算子 Q,将其用作 TTN 层中的初始化张量 (b)。对于下一 TTN 层,重复该过程,现在使用来自刚创建的低层张量的链接。(c) 从底部到顶部逐层创建 TTN。(图片经许可转载自文献 [150])
作为一种良好的折衷方案,可以在局部单张量优化中利用子空间扩展技术 [170]。该技术通过以下步骤近似双站点更新:(i) 首先增加连接两个张量的键链接的维度,(ii) 然后分别迭代优化这两个局部张量,再 (iii) 将键链接截断回原始维度。这样,局部优化兼具两者优势:它保持了 $O \left( m^{4} \right)$ 的有利算法复杂度,同时有效地执行了完整的双站点优化,从而能够动态调整键链接。关于该技术的更多细节,文献 [170] 提供了深入的阐述以及这三种策略之间的比较。
8.1.4.3 初始化#
对于哈密顿量 $\mathcal{H}$ 的基态搜索,从一个随机猜测 $\left| {\psi_{i n i t}} \right.$ 开始是有益的,目的是最大化与目标态重叠的概率 $| \langle \psi_{\mathrm{init}} | \psi_{\mathrm{target}} \rangle | ^{2} > 0$。这种随机初始化的树可以通过如图 8.8 所示的以下自底向上策略创建。
从 TTN 底部物理指标开始,最底层 $\Lambda_{l = \mathcal{L}}$ 是通过合并两个相邻局部位点形成一个内部链接,并引入随机初始化的张量来构建的。随后,下一层 $\Lambda \mathcal{L} {-} 1$ 可以采用类似方式构建:取刚构建的 $\Lambda_{\mathcal{L}}$ 层中每个张量产生的内部链接,再次通过引入随机初始化的张量合并两个相邻内部链接。按照此过程直至 $l = 1$,完整的 TTN 将被初始化,且每层 $m_{\mathcal{L} - l} = d^{l}$ 的键维数呈指数增长。因此,若在从底层向顶层构建各层时达到用户定义的最大键维数 $m$,我们会相应地截断键维数 $m_{\mathcal{L} - l} = \operatorname*{min} \{d^{l} , m \}$。
重要的是,在存在对称性的情况下,这种对最大允许键维数的截断必须通过截断内部链接中的单个对称扇区来完成。在此,我们可以通过随机截断这些占据的耦合扇区,直至达到该链接设定的最大键维数,从而在状态下引入更多随机性。如此一来,不仅张量本身会被随机初始化,整个网络中耦合对称扇区的分布也是随机的。然而,为了确保优化过程中的最优收敛,关键是要在内部链接中占据与基态对称扇区对应的正确对称扇区。但如前所述,在优化算法过程中,局部键维数可以动态增加,以适应 TTN 内的对称扇区。因此,在对称不变的 TTN 收敛到基态之前,它首先会在网络每条链接上的占据对称扇区中收敛。
8.1.5 哈密顿量的高效处理#
如第 5.3.4 节所述,完整的多体哈密顿量 $\begin{array} {r} {\mathcal{H} = \sum_{p} \mathcal{H}_{p}} \end{array}$ 通常由几个独立的相互作用 $\mathcal{H}_{p}$ 组成,每个相互作用都可以表示为张量积算子 (TPO)。图 8.9 展示了这种分解为一组 TPO 的张量网络表示的示例。在 TTN 分析中,这些 TPO 作用于网络的不同物理链接,而完整哈密顿量则作用于 TTN 的所有开放链接(即物理链接)。
在前面的第 8.1.4 节中,我们说明了在优化过程中,需要反复计算 TTN 中每个张量 $\mathcal{T}^{[ l , k ]}$ 的有效哈密顿量 $\mathcal{H}_{e f f}$。此计算可通过将所有 TPO 分别通过网络收缩来完成,如图 8.10 所示:将所有 TPO $\mathcal{H}_{p}$ 的每个张量与其作用的张量 $\mathcal{T}^{[ l , k ]}$ 及其复共轭 $( \mathcal{T}^{[ l , k ]} )^{\dagger}$ 进行收缩。因此,我们对 TTN 中每一层的相互作用执行重整化过程。该过程将单个 TPO 部分映射到 TTN 内部链接的虚拟子空间。在实际应用中,我们存储
(b)
图 8.9 张量网络框架中的量子多体哈密顿量 $\begin{array} {r} {\mathcal{H} = \sum_{p} \mathcal{H}_{p}} \end{array}$。完整哈密顿量 (a) 被表示为一系列张量积算子 (TPO),每个对应一个相互作用 $\mathcal{H}_{p}$ (b)。(图片经授权转载自文献 [150])
(a)

图8.10 用于高效计算有效哈密顿量 $\mathcal{H}_{eff}$ 的 TTN 链接算子。(a) 表示物理相互作用 $\mathcal{H}_{p}$ 的 TPO 中的每个张量,已与 TTN 最底层中的相应张量及其复共轭(见插图)进行了缩并。(b) 对于每个链接,我们存储相应的粗粒化算子张量作为链接算子(紫色),以在优化算法期间减少所需的计算。(图片经授权转载自文献 [150])
我们将每个内部链接 $\chi$ 处的这些重正化算子存储为链接算子。通过显式存储链接算子,可以在各种 TTN 算法(如时间演化或基态搜索)中减少算法所需的计算量,从而提高计算效率。关于更多实践信息,第8.2.3节提供了一个实际操作示例,包括链接算子的初始化以及用于计算目标 TTN 张量 $\mathcal{T}^{[ l , k ]}$ 的有效哈密顿量 $\mathcal{H}_{eff}$ 的基础缩并方案。
8.2 使用 TTN 模拟高维系统#
一旦完整的 TTN 能够处理一维系统,其在高维中的应用在理论上就变得直接了当。然而,在实现过程中仍然存在一些需要克服的非平凡实际困难。以下章节将更详细地描述这种完整的 TTN 在高维系统中的应用。
8.2.1 二维 TTN 结构与哈密顿量映射#
从分析一维系统转向更高维度时,第一个明显的区别是:在将物理位点附加到 TTN 结构时,我们必须考虑额外的维度。换句话说,问题在于如何将高维晶格映射到通用的一维 TTN 结构上。确实,对于一维系统,物理位点 $i$ 被应用于 TTN 的第 $i$ 个外部链接,而对于一般 $D$ 维系统中位置为 $( x_{1} , x_{2} , . . . , x_{D} )$ 的每个物理位点,则需要一个明确定义的映射到 TTN 的某个物理链接。实际上,这种映射对于 TTN 方法的表示能力和精度至关重要。因此,为了实现高效的映射,我们旨在利用量子多体系统中纠缠通常随距离衰减这一物理原理。因此,映射后的 TTN 结构应以如下方式排列:高纠缠的二分对应于 TTN 的较低层级。对于这些较低层级( $l \ll \log N_{}$ )的 $\nu \in \Lambda_{l}$ 分支,其键维数 $m_{\nu}$ 足够大,能够准确地捕捉面积律纠缠——甚至是完整状态——特别是对于局部维数 $d$ 相当小的情况。相反,TTN 较高层级( $l \gg 1$ )的键维数则受限于所需呈指数增长的键维数。
实现这种映射的一种直接方式是将二维晶格以锯齿形模式映射到 TTN 的物理位点 $j \in \{1 , \ldots , N \}$ 。更具体地说,二维晶格中坐标为 $( x , y )$ (其中 $x , y \in \{1 , \ldots , L \}$ )的每个位点,被映射到一个辅助位点 $j = x + L \cdot ( y - 1 )$ 用于 TTN 模拟。这样,TTN 首先在其较低层级对系统在 x 方向上的每一"列"进行重正化,然后在较高层级将粗粒化后的"列"在 y 方向上合并在一起。因此,得到的 TTN 拓扑结构并不适合捕捉 y 方向上的关联,数值模拟将偏向 x 方向。所以,这种映射对于一般的二维 TTN 方法来说并不理想。
一个成熟的做法是:构建网络时,TTN 的每一层依次交替地分组合并 x 方向或 y 方向上的相邻位点,如图 8.11c 所示。这样,每一层中的每个张量都会将两个位点合并为一个粗粒化的虚拟位点(即内部连接),从底部到顶部逐层建立起层级树状结构。对于一个 $L \times L$ 的系统,这种技术有效地在局域小块上对系统进行了粗粒化,并能够提升 TTN 结构对这些小块内部关联的表征能力,从而总体上更精确地描述底层系统的量子多体态。然而,这种方法天然的局限性在于,它只能处理维度大小为 $L_{k} = 2^{n}$ 的二进制尺寸系统。
针对这一问题,文献[313,314]引入的广义希尔伯特曲线提供了一种有效的折衷方案:利用曲线可以构建精确的 TTN 结构来分析高维系统,同时保持系统的线性维度 $L_{k}$ 为任意大小。如图 8.12 所示,广义希尔伯特曲线定义了从高维系统到一维系统的映射。相应地,每个相互作用通常都会被映射到某个任意的一维长程相互作用。然后,通过通用的 TTN 结构来分析映射后的一维系统。事实上,对于具有最近邻相互作用的各向同性系统,上述构建的 TTN 方案所创建的图与物理相互作用一起,同利用希尔伯特曲线映射系统后得到的图是满射同态的。换句话说,对于二进制尺寸的系统,除了结构简并性之外,通过 x/y 方向交替粗粒化过程得到的 TTN 与使用希尔伯特曲线得到的 TTN 是等价的。
事先,量子多体态中的精确纠缠熵通常在对系统进行分析之前是未知的,这使得为一个给定系统找出理想的张量网络结构颇具挑战性。然而,我们知道纠缠是由系统内部的相互作用所主导的。此外,给定相互作用的耦合强度 $g$ 与基态中引入的纠缠量之间甚至存在联系:随着 g 增大,相互作用相应地引入纠缠;$g \to 0$ 使位点保持无纠缠,而 $g \to \infty$ 则使位点完全纠缠。但是,在两种极端情况(无纠缠和完全纠缠)下,所引入的纠缠熵 $S = 0$ 都为零。因此,纠缠熵在中等耦合强度 $g$ 时达到最大值。因此,了解系统的相互作用可以通过优化 TTN 布局,使其最小化任意相互作用位点之间的平均加权距离,从而帮助找到高效的高维 TTN 结构。
(a)
(2D)

(b)
(3D)
图 8.11 用于二维系统的 TTN 的可能结构。TTN 可以沿着不同的路径穿过系统进行排列,例如希尔伯特曲线 (a) 或蛇形模式 (b)。所选的路径定义了从二维系统到 TTN 位点 $i \in \{1 , . . . , N \}$ 的映射,即每个局域位点 $( x , y ) \to i$,从而为二维 TTN 模拟产生不同的结构。在 (c) 中,定义了一个二叉树结构的 TTN,其张量(绿色)各自将两个位点合并为一个连接键(棕色)。这里的映射从 $8 \times 8$ 格点的物理位点开始,在层与层之间交替地在 x 方向和 y 方向上进行分组。(图片转载经许可自 [150])
图 8.12 广义希尔伯特曲线将 $4 \times 4$ 系统映射到一维。每个位点由代表一维比特的矩形表示,每个相互作用(在二维系统中为最近邻相互作用)现在被映射为长程相互作用。(图片转载经许可自 [150])
图 8.12 将高维系统映射为通用 TTN 结构。(a) (b) 广义希尔伯特曲线定义了从高维系统中的局域物理位点到一维路径的映射:(a) 二维映射 $( x , y ) \to i \in \{1 , . . . , N \}$;(b) 三维映射 $( x , y , z ) \to i \in \{1 , . . . , N \}$。颜色表示 i 的大小。(c) 将高维哈密顿量的所有相互作用部分 $\mathcal{H}_{p}$ 映射到 TTN 的通用基中,形成一个长程相互作用的一维系统(紫色虚线框)。子图 (a) (b) 取自文献 [313]。(图 (c) 转载经许可自 [150])
其中 $D_{p}$ 是相互作用对应的路径距离,其相互作用强度为 $g_{p}$,$N_{p}$ 是系统中的相互作用总数。
通过研究一个仅含最近邻相互作用且具有周期性边界条件的二维各向同性模型,可以说明此映射的重要性。这些形如 $\begin{array} {r} {H = \sum_{p} \mathcal{H}_{p}} \end{array}$ 且 $| g_{p} | \equiv | | H_{p} | |$ 的哈密顿量常用于研究磁化,例如海森堡模型。
一维系统#
在分析二维映射之前,我们首先考察一维情况:如图 8.13 所示,每个相互作用作用于 TTN 的两个相邻位点,对于开放边界条件,相互作用数 $N_{\mathcal{H}} = L - 1$ 与系统长度 L 成正比(对于周期性边界条件,$N_{\mathcal{H}} = L$)。因此,有 $\frac L 2$ 个相互作用的距离 $D_{p} = 1$,即相互作用的两个物理位点均被分配到同一张量的物理连接上。此外,$\textstyle{\frac{L} {4}}$ 个相互作用在 TTN 上的路径距离 $D_{p} = 3$,即它们通过第二层的一个张量连接;$\frac{L} {8}$ 个相互作用具有 $D_{p} = 5$,依此类推。按照此模式直至最高层,平均距离为
图 8.13 一维 TTN 分析中的最近邻相互作用。相互作用根据其距离 $D_{p}$ 排序:对于 $k \in [ 1 , . . . ,$ log $L - 1 ]$ 的 k 层中的所有相互作用,均通过网络中长度为 $D_{p} = 2 k - 1$ 的路径连接。(图片转载经许可自 [150])

(8.2)
该级数在$L \to \infty$时收敛于$\langle D_{\mathrm{1 D}} \rangle \approx 3$。因此,在一维系统的热力学极限下,TTN中最近邻相互作用的平均路径距离是有限的。
二维系统#
对于二维系统的相同分析,平均路径距离$\langle D_{\mathrm{2D}} \rangle = \frac{1}{2} ( \langle D_{x} \rangle + \langle D_{y} \rangle )$可分解为所有相互作用在x方向和y方向的平均路径距离。为简单起见,我们考虑一个二元尺寸的$L \times L$系统,其中$L = 2^{n}$,因此在每个方向上总共有$L^{2}$个相互作用。




图8.14 对于不同底层映射,TTN每一层执行的重整化过程。(a) 具有$L_{x}$个格点的一维系统的粗粒化过程:TTN中$\Lambda_{\mathcal{L}}$层的每个张量将两个相邻的物理格点重整化为一个人工格点。更高层继续合并相邻的人工格点,直到最后两个格点由TTN最顶层的键链接。(b) 利用蛇形模式(图8.11b)时二维系统的粗粒化过程:$\Lambda_{l}$层($l = [ \mathcal{L} , . . . , \mathcal{L} - \log L_{x} ]$)中的张量先在x方向重整化整个系统的第一维度,然后$l = [ \log L_{y} , . . . , 1 ]$层在y方向粗粒化系统。(c) 利用图8.11a、c策略时二维系统的重整化过程:每一层$\Lambda_{l}$沿着x方向(偶数l)和y方向(奇数l)交替粗粒化系统。(经许可转载自[150])
蛇形策略——将蛇形策略应用于系统,TTN首先在x方向上进行粗粒化,所有x方向的相互作用都在下半部分连接(比较图8.14b)。因此,我们有$L$个粗粒化的子分支,每个分支都等价地遵循一维情况。因此,$\langle D_{x} \rangle$的计算遵循与方程(8.2)相同的结构,只是求和上限变为$\frac{1}{2} \log N$,并且现在每个粗粒化的“系统列”有L个这样的求和:
$$ \langle D_{x} \rangle = \frac{L}{N} \sum_{k = 1}^{\log N / 2} \frac{L}{2^{k}} ( 2 k - 1 ) \stackrel{{( N = L^{2} )}} {=} \sum_{k = 1}^{\log L} 2^{- k} ( 2 k - 1 ) $$然而,对于y方向的每个相互作用,在相应路径中总是需要经过距离为$\log N / 2$的TTN完整下半部分。换句话说,这些相互作用仅在TTN拓扑结构的上半部分重新组合,这使得每条路径距离$D_{p}$增加了$2 \cdot \frac{1}{2} \log N = 2 \log L$(一次向上穿过半棵树,一次向下)。因此,存在$\frac{L}{2} L$个距离为$D_{p} = 2 \log L + 1$的相互作用,$\frac{L}{4} L$个距离为$D_{p} = 2 \log L + 3$的相互作用,$\frac{L}{8} L$个距离为$D_{p} = 2 \log L + 5$的相互作用,等等:
$$ \begin{array} {l} {\displaystyle \langle D_{y} \rangle = \frac{L} {N} \left( \frac{L} {2} \cdot ( 2 \log L + 1 ) + \frac{L} {4} \cdot ( 2 \log L + 3 ) + \frac{L} {8} \cdot ( 2 \log L + 5 ) + . . . \right)} \\ {\displaystyle = \sum_{k = 1}^{\log L} 2^{- k} ( 2 \log L + ( 2 k - 1 ) ) = 2 \log L \underbrace{\sum_{k = 1}^{\log L} 2^{- k}}_{= 1 - 1 / L} + \sum_{k = 1}^{\log L} 2^{- k} ( 2 k - 1 )} \end{array} $$确实,对于 $\langle D_{y} \rangle$ 的计算,可以等效地视为带 $D_{p}$ 偏移和 $L$ 倍相互作用的一维情况。这些较低的子分支对系统在 x 方向进行完全粗粒化,将问题缩减到 $l = \log L$ 层的 y 方向。
因此,采用 Snake 策略的完整系统的平均相互作用距离为
$$ \begin{array} {r l} & {\langle D_{\mathrm{Snake}} \rangle = \displaystyle \frac{\langle D_{x} \rangle + \langle D_{y} \rangle} {2} =} \\ & {\qquad = \log L \displaystyle \sum_{\underset{= ( 1 - 1 / L )} {\log L}}^{\log L} + \displaystyle \sum_{\mathrm{k = 1}}^{\log L} 2^{- k} ( 2 k - 1 ) = \log L + 3 - \frac{1} {L} ( 3 \log L + 3 )} \end{array} $$当 $L \to \infty$ 时,该距离对数发散。因此,使用这种简单的 Snake 模式会导致平均相互作用距离对数发散,从而使网络随系统尺寸增大而无法恰当捕捉底层系统的纠缠性质。
Hilbert 曲线——Hilbert 曲线的基本思想是在将高维系统中的任意两个格点映射到一维系统时,最小化空间距离的增加。这通过迭代合并系统的块来实现。TTN 中的平均相互作用距离可通过分析图 8.11c 所示的 TTN 来计算,该 TTN 在 TTN 的每一层交替在 x 和 y 方向分组格点(比较图 8.14c)。因此,当从最底层开始在 x 方向进行粗粒化时,立即有 $\frac{N} {2}$ 个相互作用沿 x 方向作用,并由该层的张量连接,即路径长度 $D_{p} = 1$。下一层连接 $\frac{N} {2}$ 个沿 y 方向的相互作用,路径距离 $D_{p} = 3$。在网络中继续向上,第 $l = \log L - 2$ 层再次合并 $\frac{N} {4}$ 个沿 x 方向作用的相互作用,路径距离 $D_{p} = 5$,而第 $l = \log L - 3$ 层合并 $\frac{N} {4}$ 个沿 y 方向的相互作用,路径距离 $D_{p} = 7$。按照此模式,x 方向的平均路径距离为
$$ \begin{array} {c} {{\displaystyle \langle D_{x} \rangle = \frac{1} {N} \left( \frac{N} {2} \cdot 1 + \frac{N} {4} \cdot 5 + \frac{N} {8} \cdot 9 + \ldots \right) =}} \\ {{= \displaystyle \sum_{k = 1}^{\log N / 2} 2^{- k} ( 4 k - 3 ) \stackrel{( N = L^{2} )} {=} 5 - \frac{1} {L} ( 4 \log L + 5 )}} \end{array} $$而 y 方向的平均路径距离为
$$ \begin{array} {c} {{\langle D_{y} \rangle = \displaystyle \frac{1} {N} \left( \frac{N} {2} \cdot 3 + \frac{N} {4} \cdot 7 + \frac{N} {8} \cdot 11 + . . . \right)}} \\ {{= \displaystyle \sum_{k = 1}^{\log N / 2} 2^{- k} ( 4 k - 1 ) \stackrel{( N = L^{2} )} {=} 7 - \frac{1} {L} ( 4 \log L + 5 ) .}} \end{array} $$因此,对于这种 TTN 结构,平均路径距离 $\langle D_{2 \mathrm{D}} \rangle = \textstyle{\frac{1} {7}} ( \langle D_{x} \rangle + \langle D_{y} \rangle ) \to 6 ( L \to$\infty )$ 在热力学极限下收敛,使得该策略成为通过 TTN 捕捉底层系统纠缠性质的可靠方法。
8.2.2 树张量网络的面积律#
如第 5.3.3 节所述,系统二分后的冯·诺依曼纠缠熵与张量网络的键直接相关。在此背景下,TTN 的无环性质提供了一种有效的方式来测量这种表示量子多体波函数方法所捕获的熵。
在每个 TTN 态 $| \psi \rangle$ 中,连接两个张量的每个内部链接 $\nu$ 将底层晶格 $\mathcal{L}$ 二分两个子系统 $\mathcal{A}^{\left[ \nu \right]}$ 和 $\mathcal{B}^{[ \nu ]}$(见图 8.15)。这使得 TTN 对于每个 $\nu$ 可以重写为施密特分解的形式
$ | \psi \rangle = \sum_{\alpha = 1}^{m_{\nu}} \lambda_{\alpha}^{[ \mathcal{A} , \mathcal{B} ]} | \psi^{[ \mathcal{A} ]} \rangle \otimes | \psi^{[ \mathcal{B} ]} \rangle\tag{8.3} $
其中 $m_{\nu}$ 是 ν 的键维数,$\lambda_{\alpha}^{\left[ \mathcal{R} , \mathcal{B} \right]}$ 是施密特值。对于每个二分划分,施密特秩的上界为相应链接 ν 的键维数 $m_{\nu}$。因此,键维数 $m_{\nu}$ 也限制了 TTN 能够捕获的二体纠缠量。


图 8.15 可能的 TTN 二分划分,链接 $\{i_{k} \}_{\mathcal{A}}$(蓝色)和 $\{i_{k}$(黄色)分别指向二分划分内的物理位点。(图经许可转载自文献[150])
假设物理态 $\psi$ 满足熵面积律,则此类二分划分的纠缠熵 $S ( \mathcal{A}^{[ \nu ]} )$ 随构成 $\mathcal{A}^{\left[ \nu \right]}$ 边界 $\partial_{\nu}$ 的位点数 $\gamma_{\nu}$ 缩放:
$ S ( \mathcal{A}^{[ \nu ]} ) \sim \gamma_{\nu}\tag{8.4} $
为了实际说明态 $\psi$ 的 TTN 表示 $| \psi \rangle$,我们考虑 $\mathcal{L}$ 为一个具有 $N = L \times L$ 个位点的二维系统。此时,编码物理态 $\psi$ 面积律所需的键维数随 L 呈指数增长(参见第 5.3.3 节关于张量网络中纠缠界的更多细节)。更精确地说,每个链接 ν 的键维数 $m_{\nu}$ 应按如下方式缩放:
$ m_{\nu} \approx e^{c \gamma_{\nu}}\tag{8.5} $
其中 $c$ 是常数因子。这种指数级缩放导致的结果是,随着二维系统尺寸的增大,TTN表示最终无法忠实表征面积律态,因为处理如此庞大的指数级网络迅速变得不可行,尤其是当 $\gamma_{\nu = 1} \sim L$ 时。而且,当系统维度超过二维进入更高维时,这种缩放对TTN而言更加关键。
8.2.3 实际示例:$4 \times 4$ 系统#
为提供直观说明,本节将以阶梯式程序描述如何对TTN进行优化,以分析具有开放边界条件、由最近邻相互作用 $\mathcal{H}_{p}$ 构成的方形 $4 \times 4$ 晶格上的二维各向同性哈密顿量。因此,我们假设完整哈密顿量是相互作用 $\mathcal{H} = \sum_{p} \mathcal{H}_{p}$ 的乘积,其中每个相互作用 $\mathcal{H}_{p}$ 都被描述为张量积算子(TPO)(参见第5.3.5节)。为简便起见,本例中我们仅限制只包含(i)局域项 $\mathcal{H}_{p} = h_{i_{p}}^{p}$(作用于位点 $i_{p}$)和(ii)物理位点 $i_{p}$ 与 $i_{p}^{\prime}$ 之间的两体相互作用 $\mathcal{H}_{p} = h_{i_{p}}^{p , 1} h_{i_{p}^{\prime}}^{p , 2}$ 的哈密顿量。然而,TTN方法的基本思想通常可应用于更复杂的哈密顿量 $\mathcal{H}$ 和具有周期边界条件的系统。
(a)


(b)



图8.16 通过希尔伯特曲线将具有最近邻相互作用和开放边界条件的二维 $4 \times 4$ 系统映射到一维TTN。(a) 希尔伯特曲线定义了局域位点 $( x , y ) i \in \{1 , . . . , 16 \}$ 从二维到一维路径的映射。(b) 二维哈密顿量的所有相互作用部分 $\mathcal{H}_{p}$,包括局域项(橙色点)和最近邻相互作用(橙色矩形),后者从 $\mathcal{H}_{1}$ 到 $\mathcal{H}_{24}$ 枚举。(c) (b) 中的算子通过(a)中的希尔伯特曲线映射到TTN。每个相互作用 $\mathcal{H}_{p}$ 通常变为长程相互作用,以橙色TPO表示,构成映射后的一维模型(图片经授权引自文献[150])。
TTN的优化过程由四个主要部分组成:(i) 将高维系统映射到TTN结构,(ii) 初始化TTN,(iii) 初始化TTN连接算子,以及(iv) 用映射后的哈密顿量优化内部TTN。
步骤1(映射)——在实际分析开始前,我们按照第8.2.1节所述对系统进行映射。对于我们的 $4 \times 4$ 示例,图8.16展示了将二维系统映射到一维TTN结构的过程。希尔伯特曲线定义了二维系统中局域位点 $( x , y )$ 与其一维对应位点 $i \in \{1 , . . . , 16 \}$(用于TTN分析)的映射。基于此映射,二维哈密顿量的所有相互作用部分 $\mathcal{H}_{p}$ 均相应变换到一维基矢中。关键在于,二维平面内的所有最近邻相互作用都被映射为一维表示中的一般长程相互作用。因此,原本仅在二维中具有最近邻相互作用的哈密顿量变成了一维长程模型。
步骤2(初始化TTN)——系统映射完成且物理位点分配给TTN的物理链接后,我们开始构建树结构。此构建可从底层逐层进行,从物理链接开始向上直至顶层,遵循第8.1.4.3节的说明。在此示例中,我们将构建完美二叉树TTN,而通常情况下,对于总位点数不是2的幂的情况,最低层的初始化必须适配为完全TTN,因为并非所有物理位点都会连接到这一最低层的张量。初始化这样一个经过等距变换指向张量 $\mathcal{T}^{[ 1 , 1 ]}$ 的随机树后,TTN内的链接算子即可初始化。
步骤3(初始化链接算子)——在此阶段,针对网络中的每个链接 ν 计算粗粒化的哈密顿量部分 $\mathcal{H}_{p}^{[ \nu ]}$,即链接算子。这通过自底向上的方法完成,遵循第8.1.5节呈现的过程。图8.17以我们的4×4示例说明了此过程,对每一层将相应哈密顿量部分与正确的树张量及其复共轭进行缩并。注意,在此初始化之后,对于TTN所等距变换指向的张量 $\mathcal{T}^{[ 1 , 1 ]}$,其有效哈密顿量 $\mathcal{H}_{e f f}^{[ 1 , \bar{1} ]}$ 已经存在。
步骤4(优化)——初始化所有链接算子后,算法开始扫描整个网络,优化每个张量。通常情况下,扫描顺序可由用户任意选择。当选择优化一个张量(例如图8.18所示的 $\mathcal{T}^{[ 2 , 1 ]}$)时,需按照第8.1.4.1节的描述计算有效哈密顿量。在所有链接算子已初始化且TTN呈等距形式的情况下,这可以通过将有效哈密顿量各部分 $( \mathcal{H}_{e f f}^{[ l , k ]} )_{p}$ 与从TTN当前等距变换指向的张量到目标张量路径上的所有张量进行适当缩并来轻松完成。在进行沿路径的缩并时,通过执行QR分解沿路将TTN等距变换指向目标张量可能是明智之举。一旦我们将TTN等距变换指向目标张量,局部优化即求解底层的特征值问题,如第8.1.4.2节所述。当通过ARPACK实现执行时,优化算法仅需知道有效哈密顿量 $\mathcal{H}_{e f f}^{[ l , k ]}$ 作用于待优化张量 $\mathcal{T}^{[ l , k ]}$ 的效果。因此,我们需要迭代地执行 $\mathcal{H}_{e f f}^{[ l , k ]}$ 与 $\mathcal{T}^{[ l , k ]}$ 的缩并,这可以通过分别缩并有效哈密顿量的每个部分 $( \mathcal{H}_{e f f}^{[ l , k ]} )_{p}$ 来完成。之后,特征值求解器返回具有最低特征值(即能量)的特征向量,我们用它替换网络中的旧张量,作为局部优化的结果。优化完一个张量后,我们继续全局优化扫描中的下一个张量,完成一次扫描后,进行下一次扫描,直到所选值(如全局能量、期望值或纠缠熵)收敛。
(a)

(b)
⇒
(c)


图8.17 在等距变换后的TTN内,将图8.16c的哈密顿量部分初始化为链接算子。(a) 代表物理相互作用 $\mathcal{H}_{p}$ 的TPO的每个张量已与TTN最低层中的对应张量及其复共轭(见入口图)缩并,构成不同链接算子的TPO张量。(b) 类似地,(a)中的链接算子与下一层一起向上粗粒化。(c) 最后一次缩并与张量 1, 2 进行,得到所有链接算子(紫色方框内),这些算子构成了 $\mathcal{T}^{[ 1 , 1 ]}$ 的有效哈密顿量 $\mathcal{H}_{e f f}^{[ 1 , 1 ]}$。(图转载自[150],已获许可)
补遗(数值复杂度与周期性边界条件)—— 在介绍了具有开放边界条件的 $4 \times 4$ 系统后,您可能会问能否模拟周期性边界条件。实际上,就 TTN 的数值复杂度而言,周期性边界条件与开放边界条件计算之间的区别仅仅在于哈密顿量部分的数量 $N_{\mathcal{H}}$ ,这会影响 $m^{4}$ 整体算法复杂度的次主导项。确实,对于开放边界条件,$N_{\mathcal{H}}$ 低于周期性边界条件,且差值随系统长度缩放 $N_{\mathcal{H}}^{p e r i o d i c} - N_{\mathcal{H}}^{o p e n} \sim L$
(a)
⇒
(b)

⇒
图8.18 $4 \times 4$ TTN 模拟中张量的优化。(a) TTN 被等距化为 $\mathcal{T}^{[ 1 , 1 ]}$(绿色),所有链接算子初始化为有效哈密顿量 $\mathcal{H}_{e f f}^{[ 1 , 1 ]}$(紫色),其中包含图8.17c 所示的所有局域和相互作用 TPO。待优化目标张量 $\check{\mathcal{T}}^{[ 2 , 3 ]}$(红色)通过绿色路径连接到 $\check{\mathcal{T}}^{[ 1 , 1 ]}$。(b) 网络被等距化到目标张量(现为绿色)后,相应地缩并链接算子,得到用于优化过程的有效哈密顿量 $\mathcal{H}_{e f f}^{[ 2 , 3 ]}$(紫色),该哈密顿量由不同的 TPO 组成(见入口图)。(c) 在优化时,通过求和 $\mathcal{H}_{e f f}^{[ 2 , 3 ]}$ 中所有 TPO 与 $\mathcal{T}^{[ 2 , 3 ]}$ 的缩并,计算有效哈密顿量对目标张量(绿色)的作用(青绿色)。(图转载自[150],已获许可)
整个优化过程的复杂度最大为
$ \zeta_{T} = O \left( m^{4} d^{2} ( N_{\mathcal{T}} N_{\mathcal{H}} I_{\mathcal{T}} + \sum_{k} N_{\mathcal{H} , \mathcal{T}^{[ k ( \Gamma ) ]}} ) \right)
(加上一些次主导项),其中 d 是物理维度,$N_{\mathcal{T}}$ 是 TTN 中的张量数量,$N_{\mathcal{H} , \mathcal{T}}$ 是作用在张量 $\mathcal{T}$ 上的算子数量,$I_{\mathcal{T}}$ 是优化该张量的迭代次数,路径从一个张量到扫描优化中的下一个张量,$\mathcal{T}^{[ k ( \Gamma ) ]}$ 是路径上的第 k 个张量。现在,从开放边界条件转到周期性边界条件,我们会多出 $\Delta N_{H}$ 个哈密顿量部分。因此,额外的复杂度为
虽然 $\Delta N_{H} \sim L$ 成立,影响每个张量 $T$ 的额外哈密顿量部分数量 $\Delta N_{H , T}$ 高度依赖于映射本身。但为简化起见,我们可以假设 $\Delta N_{H , T} \sim L$,那么在所有主导项中,复杂度增加 $\Delta \zeta = O ( L )$,其随系统长度 $L$ 缩放。
相比之下,周期性边界条件的实现在有限 PEPS 中因构造而不可行,并且会导致 2D-DMRG 方法的复杂度从 $O ( m^{3} )$ 增加到 $O ( m^{5} )$。
总而言之,虽然对于其他方法来说,实施周期性边界条件可能不可行,或至少需要改变网络结构,从而导致键维度的缩放大幅增加,但 aTTN 可以高效地应对周期性边界条件的额外复杂度,而无需进行任何根本性改变,仅影响次主导项的数值复杂度。
8.3 技术实现#
实现的总体结构如图 8.19 所示,为一个简化概览。它展示了量子力学中通用张量网络算法的层级结构。最底层是通用线性代数内核,例如 LAPACK 或 BLAS,在计算硬件上执行核心功能。利用这些数学库,张量模块将线性代数扩展到第5.1节中描述的张量代数,包括张量类型实例及其函数的数值定义。如第6.2节简要描述,我们可以包含另一个层级,通过将对称不变张量定义为张量列表(每个对称子空间对应一个)来管理代码中对称性的整合,粗略地说就是这样。该库包括对称张量的定义,以及人们可能执行的所有用于操作对称不变张量的运算(深入描述见参考文献[170,315])。对于通用张量网络,结构中的这个对称层不是必需的。然而,通过利用网络内单个张量层面上的对称不变张量网络的良好定义内部结构,它可以大幅提升计算效率。然后,实际的张量网络利用该库(或者在不考虑对称性的情况下,利用张量库本身)及其内部定义的张量作为完整网络的构建块。在此,精确几何结构与所需的重要函数(例如观测量计算、优化或时间演化)一起被定义。最后,在所有这些之上,定义了张量网络本身的主算法。后面,将以树张量网络(TTN)为例,更详细地展示这种张量网络层级的实现结构。接下来,将更详细地描述 TTN 实现的每一个节点。


图 8.19 通用张量网络代码的典型软件结构概览,其不同层级从在硬件上执行操作的线性代数内核一直到与用户交互的主 TN 算法。本论文中进行的主要张量网络开发,建立在一个预先存在的对称张量库之上,并由最高两个层级(绿色虚线框)组成,特别是将 TTN 实现为张量网络以及将相应的基态优化实现为 TN 算法。图 8.20 更详细地说明了这两个层级。(图片经许可转载自[150])
8.3.1 树张量网络的数据结构#
一般来说,实现用于模拟量子多体系统的树张量网络有两种主要方式。一方面,TTN 可以实现为一组节点,每个节点由一个张量和一个指向其相邻张量的引用列表(即指针)组成。例如,一个二元 TTN 可以用以下用伪代码编写的对象节点来描述:
1 struct node { tensor T; struct node* left; struct node* right;
在这种实现方式中,TTN 的拓扑结构通过每个张量上连边的引用隐式存储。这一概念通常允许非常灵活的 TTN 拓扑结构,当拓扑需要适应底层问题,甚至在优化算法中动态调整时,这种灵活性可能非常有益。调整网络拓扑结构的优势在其量子化学应用中可能很有价值,因为在这些应用中,系统中的相互作用通常是不均匀的,而是由分子结构决定的 [246]。此外,动态可适应的拓扑结构可能成为自动为给定问题找到最有效拓扑结构的关键,这是一个非常有前景但尚未得到充分研究的概念,并指明了张量网络未来研究的一个有趣方向。
另一方面,TTN 可以按静态层次顺序组织,由一组张量数组构成,每个张量在树中被分配一个固定的位置,如下面的伪代码所示。
1 struct Tree tensor[] T; address[] x,y; topology K;
因此,在这一概念中,TTN 的拓扑结构是在数据结构中明确定义的。虽然这种静态实现在动态自适应拓扑方面可能缺乏一些灵活性,但它非常适合具有良好预定义拓扑结构的高效 TTN 模拟。在全局层面上固定精确的拓扑结构,可以将拓扑知识融入操作 TTN 的算法中,例如优化、可观测量计算和熵的计算,这可能导致更高效、结构良好的实现,并允许在这些全局算法上实现高效的并行化技术。因此,这种数据结构非常适合实现完美的 TTN,即拓扑结构是静态且明确定义的完整 TTN,其中每个张量在树中都有一个预定义的位置。
8.3.2 树张量网络的实现#
本节专门介绍能够执行基态搜索的 TTN 软件的实现。具体来说,它更详细地描述了图 8.20 中所示的不同模块,并以简化的形式给出了取自本论文开发过程中编写的 FORTRAN90 代码 [150] 中的一些实用示例。这些示例说明了实现用于高性能计算高维量子多体系统的 TTN 算法最重要的数据结构和最相关的函数。


图 8.20 执行基态搜索或时间演化等分析的树张量网络代码的软件结构。构建在(对称)张量库及其操作之上,可以通过阴影框中的模块正确定义 TTN 几何结构:输入读取器从用户处获取数据,然后由输入处理器对数据预处理以进行分析。运算符模块定义了所有所需的底层数据类型,而 TTN 本身则由树张量网络模块定义。这些模块与主程序进行接口,主程序借助收敛控制模块来执行特定的张量网络算法。
8.3.2.1 (对称)张量库#
如 8.3 节开头所述,实际的 TTN 代码使用一个库,其中定义了一个张量实例以及所有可以对张量进行的操作(参见 5.1 节)。这个库可能可选地具备处理对称性的能力,以改善计算时间并针对所需的全局对称性扇区(更多细节参见 6.2 节)。对于本节描述的 TTN 软件,我们将假设存在这样一个库,并将其用作所开发代码的构建块。关于此类库的深入技术描述,参考文献 [170] 提供了关于实现具有阿贝尔对称性的通用张量库的丰富文献,而参考文献 [315–317] 进一步提供了将非阿贝尔对称性融入现有普通张量库的深入技术细节。
8.3.2.2 算符#
基于张量库,该模块主要用于描述算符,特别是待分析底层系统的哈密顿量 $\begin{array} {r} {\mathcal{H} ~ = ~ \sum_{p} \mathcal{H}_{p}} \end{array}$。完整的算符存储为一个 MPOLayer_type 实例,该实例存储并追踪哈密顿量的所有单个相互作用项 $\mathcal{H}_{p}$,并在全局层面上模拟一个 MPO。因此,在使用这个 MPOLayer_type 实例时,可以像对待 MPO 一样处理它,而它在内部管理其所包含的 TPO(每个 TPO 代表一个相互作用部分 $\mathcal{H}_{p}$)。然而,由于全局 TTN 算法中的数值效率考虑,MPOLayer_type 实例并非直接分解为一个简单的 TPO 列表,而是分解为一个 Operator_type 实例列表,对于 MPO 的每个位点 i,该列表包含作用在该位点上的所有张量。因此,MPOLayer_type 实例实际上描述了一个算符层,或者更一般地,描述了一个张量列表的列表。


图 8.21 用于存储具有不同相互作用项 $\mathcal{H}_{p}$ 的哈密顿量 $\begin{array} {r} {\mathcal{H} ~ = ~ \sum \mathcal{H}_{p}} \end{array}$ 的 MPOLayer_type 实例。(a) 所有相互作用项均表示为 TPO。除局域算符外,所有 TPO 都被枚举 (TPO_id)。此外,每个 TPO 的所有连接也被枚举。(b) 一个 Operator_type 实例模拟所有作用于相同位点 i 的算符:所有局域算符合并到张量 local 中,而对于相互作用部分,单个张量则连同相应的 TPO_id 和连接索引一起存储。(图片经许可转载自[150])
图 8.21 说明了将哈密顿量存储为 MPOLayer_type 实例的方式。实际上,通过该示意图,可以清楚地看到数据有两个维度:TPO 的数量,即相互作用部分 $\mathcal{H}_{p}$ 的个数,以及哈密顿量的物理位点数量 N。因此,我们在 MPOLayer_type 实例中首先沿后一维度方向组织数据,然后在 Operator_type 中沿前一维度方向组织。因此,每个 Operator_type 由一个张量列表组成,该列表模拟哈密顿量在一个单个位点 i 上的全部作用。这里,我们可以利用另一个数值优势:所有作用于单个位点的局域算符可以加合在一起。例如,考虑一个哈密顿量,如 $\begin{array} {r} {\mathcal{H} = \sum_{i} \alpha_{i} \sigma_{x}^{[ i ]} + \beta_{i} \sigma_{z}^{[ i ]} + \sigma_{x}^{[ i ]} \sigma_{x}^{[ i + 1 ]}} \end{array}$,我们可以将局域场 $\mathcal{H}_{i , \mathrm{local}} = \alpha_{i} \sigma_{x}^{[ i ]} + \beta_{i} \sigma_{z}^{[ i ]}$ 合并为一个局域算符。然而,这种求和无法在哈密顿量的非局域相互作用部分 $\mathcal{H}_{i} = \sigma_{x}^{[ i ]} \sigma_{x}^{[ i + 1 ]}$ 上局域地进行。因此,Operator_type 实例至多只需要存储一个局域张量(模拟哈密顿量的局域单位点算符)和一个张量列表,该列表与 MPOLayer_type 实例中的所有其他 Operator_type 实例协同工作。这两个实例可以如下实现。
Operator_type#
Operator_type 实例可以推广为一个通用张量列表的扩展。这一点尤其有用,因为在 TTN 算法中,通用张量列表实例可在多种场合下使用。如下列清单所示,该张量列表对所有对应多体相互作用项 $\mathcal{H}_{p}$ 的张量进行建模,而扩展部分 (i) 添加了一个可选的张量,用于对哈密顿量的所有局域单位点算符进行建模,并且 (ii) 包含一个识别数组 id,用于追踪每个单相互作用项 $\mathcal{H}_{p}$ 在整个哈密顿量(即全局 MPOLayer_type 实例)中的连接关系。
属性 contains_local 和 local 负责处理哈密顿量中可能存在的单位点项,而 id 则关键性地存储了哈密顿量内所有相互作用结构的信息。具体来说,这将成为一个大小为 3×numtensors 的数组,其中每个三元组条目 $\mathrm{id} ( \mathbf{:} , \mathbf{k} ) {=} [ \mathrm{TPO}_{-} \mathbf{id}$ , id_left_link, id_right_link] 包含列表中第 k 个张量的所有必需信息:如图 8.21 所示,每个 TPO $\mathcal{H}_{p}$ 都分配了一个唯一的识别号 TPO_id(例如它所代表的相互作用 $\mathcal{H}_{p}$ 的索引 $p$)。此外,一个 TPO 的所有张量都按其作用的物理位点的顺序排列。在这个顺序中,TPO 的所有内部链接都从左到右枚举。因此,TPO 中每个张量都可以包含一个指向左侧的链接和一个指向右侧的链接,分别由 id_left_link 和 id_right_link 指示。允许这些值为 -1(例如,当张量表示 TPO 的端点时),使得 id 足以捕获典型 TTN 分析的所有相关信息。
请注意,这种实现方式只允许将相互作用项 $\mathcal{H}_{p}$ 表示为张量最多有两个内部链接的 TPO。因此,如图 5.7d 所示的星形相互作用项的建模是不可能的。此外,值得一提的是,第一个索引在 FORTRAN 中是行索引,而在 C++ 等其他语言中则不是这样。因此,对于后一种情况,交换索引在数值上效率更高。
MPOLayer_type#
MPOLayer_type 的数据结构很简单,就是这些 Operator_type 实例的列表,如下所示。

8.3.2.3 树张量网络#
该代码模块描述了一个通用的 TTN,并包含其所有相关函数。具体来说,该模块包含了 TTN 中一层的对象定义(TreeLayer_type)、通用路径(path_type)的定义(该路径可在底层树结构中定义),以及最终对 TTN 本身进行建模的对象定义(tree_type)。对于基态搜索,该模块中针对 tree_type 实例需要包含的重要函数,尤其是网络朝向目标张量的等距化过程,包括有效哈密顿量 $\mathcal{H}_{e f f}$ 的正确收缩(见第 8.1.4 节),以及单个张量的局部优化。
tree_type#
tree_type 实例用于建模具有严格层级导向拓扑结构的树张量网络(Tree Tensor Network),具体如图 8.1 节所示,并遵循定义 8.1.1。完整树由若干层(TreeLayer_type,见下文)构成,每层包含若干张量。一般来说,每个张量可以有任意阶数,且每个张量只有一条链接与上一树层相连。TTN 结构中的某个张量由两个索引定位:layer_index(层索引)和 tensor_index(该层内张量索引)。因此,通用的 tree_type 实例可实现如下:
type, public :: tree_type
integer :: NumSites, NumLayers
type(TreeLayer_type), dimension(:), allocatable :: Layer
logical :: is_isometrised = .false.
integer, dimension(2) :: iso_position
! 链接算符
type(MPOLayer_type), dimension(:), allocatable :: Operators
end type
interface tree_type
module procedure :: tree_construct
end interface其中,标志 is_isometrised 与 iso_position 共同跟踪 TTN 的等距化状态。此外,属性 Operators 可用于存储链接算符,如第 8.1.5 节所述。
关键之处在于,该实例的构造函数 tree_construct 会按照第 8.1.4.3 节的描述创建 TTN:它为给定数量的物理位点 N 初始化一个包含随机张量的 tree_type 实例,并且 TTN 的等距化可以在初始化过程中即时完成。
TreeLayer_type#
TreeLayer_type 实例描述了 Tree_type 实例中的一层张量层。因此,它包含一个张量列表,以及该层中每个张量指向其父张量(即该张量所连接的上一层的对应张量)的引用(upper_address)。为使该地址系统保持一致,每层需要跟踪其指向子张量的向下位点。这种跟踪可以通过对所有向下位点进行排序和枚举,然后存储该层内每个张量的首尾位点索引(site)来实现。因此,利用较低层的 upper_address 信息和上一层的 site 信息,我们可以重建跨层张量的连接关系。
type, private :: TreeLayer_type
integer :: numtensors = 0
type(Tensor_type), dimension(:), allocatable :: tensor
integer :: cutoff
integer, dimension(:,:), allocatable :: site
integer, dimension(:,:), allocatable :: upper_address
! 奇异值
type(real_vector), dimension(:), allocatable :: SingVals
end type此外,借助 sv_present 和 SingVals,我们可以跟踪 TTN 层中每条向上链接上的奇异值。这可能是有意义的,因为:(i)需要奇异值来计算熵(如第 5.3.3 节所述);(ii)除了全局能量之外,奇异值是基态搜索中态表示收敛性的良好预测指标;(iii)在时间演化过程中,当纠缠增长到超过具有有限键维数 m(此处设为 cutoff)的 TTN 的忠实表示能力时,奇异值可以作为一个很好的停止判据。
path_type#
这个辅助对象遵循定义 8.1.2(路径),其用途之一是在优化过程中帮助在 TTN 中传播。每条路径有一个锚张量,定义为层级网络结构中位置最高的张量。该锚点通过其在网络中的位置 anchor_address 以及沿路径行进时的位置 position_anchor 冗余存储。路径本身由一个长度为 4 的数组描述,该数组定义了路径的各步骤。四元组 steps(:,k) 包含路径第 k 步的所有必要信息:(i)+(ii)第 k+1 个张量的地址 [layer_index, tensor_index],即其所在树层及在该层中的位置;(iii)第 k+1 个张量上与第 k 个张量相连的链接索引;(iv)第 k 个张量上同一链接的索引。因此,该实例可实现如下:
type, public :: path_type
integer :: length, position_anchor
integer, dimension(2) :: anchor_address
integer, dimension(:,:), allocatable :: steps
end typetree_optimization_sweep#
将TTN编码为tree_type实例后,我们可以按照第8.1.4.1节所述实现优化扫描,只需遍历TTN结构中的所有张量,对每个张量将有效哈密顿量收缩至目标张量,对网络进行相应的等距化处理并优化该张量。
实例:
subroutine tree\_optimization\_sweep( tree, energy,
arnoldi\_tolerance )
class(tree\_type), intent(inout) :: tree
double complex, intent(out) :: energy
double precision, intent(in), optional ::
arnoldi\_tolerance
integer :: 11, tt
do 11 = 1, tree%numlayers
do tt = 1, tree%layer(11)%numtensors
call tree%isometrise\_towards( [11 ,tt] )
! 优化目标张量(单张量更新)
call tree%optimise\_tensor( energy, tolerance =
arnoldi_tolerance )
end if
end do
end subroutine注意,如第8.2.3节所述,为提升性能,我们可以实现一个函数tree%isometrise_towards()同时执行等距化和链接算符的收缩,因为它们都操作沿同一路径的张量。通过这种方式,代码只需从上次优化的张量向目标张量迭代遍历一次路径,而非两次。最后,函数tree%optimise_tensor()执行第8.1.4.2节描述的局部优化,基本上是将ARPACK求解器直接封装到代码中。
以同样的方式,我们还可以纳入不同的优化技术,如双张量优化、空间扩展技术,甚至梯度下降法,以及不同的扫描顺序,例如随机扫描顺序或用户自定义的扫描顺序。
8.3.2.4 输入读取器#
输入读取器模块读取预定义文件,这些文件通过定义相互作用和耦合强度来模拟待分析的哈密顿量,或为基态搜索设置不同的控制参数,如最大扫描迭代次数或局部优化过程的详细选项。特别地,根据通用哈密顿量$\begin{array} {r} {\mathcal{H} = \sum_{p} \mathcal{H}_{p} ,} \end{array}$给定的相互作用$\mathcal{H}_{p}$,该模块将所有相互作用构建为尊重所选边界条件的TPO。此外,我们还可以读取单个算符,例如在优化过程中作为可观测量进行测量的算符。
8.3.2.5 输入处理器#
基于输入读取器模块定义的相互作用,该模块定义用于建模哈密顿量的MPOLayer_type结构。此外,在此层次上,我们可以处理从高维空间到一维tree_type实例的精确算符映射,如第8.2节所示。同时,该模块作为接口,跟踪待测量的可观测量及其映射,即它们在TTN结构中的应用位置。
8.3.2.6 收敛控制#
该模块独立于张量网络结构本身,旨在跟踪和控制张量网络模拟的收敛性。因此,该模块需集成到主程序中,是管理模拟参数的接口,并基于模拟变量(例如当前能量)提供增强的停止准则。
一方面,该模块定义了基态搜索的所有重要模拟参数,例如局部Arnoldi求解器的容差,甚至可能包括时间演化的参数。该模块还进一步跟踪迭代次数、每次迭代的能量,以及最终目标态目标所需的数值精度。
每次迭代结束时,必须将当前能量作为主程序的接口提供。基于迭代次数和能量的演变,该模块可以自适应调整并返回重要的模拟参数,例如求解特征值问题的建议容差。对于这一特定参数,经验表明以下估计值
max(tol_min, min(tol_max, abs((energy-energy_prev)/energy)/NT)) ,
即经网络中张量数量NT归一化的一次扫描后的相对能量差,并由预定义值tol_max(tol_min)设定上(下)界,可为快速收敛与避免陷入局部最小值之间的平衡提供一个有效值。
8.3.2.7 TTN 算法#
基于上述代码结构,根据第8.1.4节的描述,可以按照以下方式实现搜索量子多体系统基态的算法。
subroutine start_simulation() type(Link_type), dimension(:), allocatable :: physical_links type(MPOLayer_type) :: Hamiltonian type(tree_type) :: tree double precision :: current_energy double precision :: tol integer :: ii character :: converged 从已定义的输入文件读取哈密顿量 tree = read_physical_system(Hamiltonian, physical_links
初始化树张量网络 tree = tree_type(Nsites , physical_links , cutoff, .true. 初始化链接算符 call tree%create_operators(Hamiltonian) current_energy = tree%calculate_energy () call measure_observables() ######################################################## ######################################################## do ii = 1, control%get_max_number_of_iterations() 开始优化 call control%get_iteration_parameters( arnoldi_tolerance = tol )
call tree%optimization_sweep( energy = current_energy ,& arnoldi_tolerance = tol ) converged = control%check_convergence( current_energy ) select case ( converged ) case('f') case('a') write(*,*) write(*,*) '在绝对偏差上收敛' print *, ii exit case('r') write(*,*) write(*,*) '在相对偏差上收敛' print *, ii exit case('d') write(*,*) write(*,*)'收敛失败' exit case default write(*,*) write(*,*) '检查收敛时出错' stop end select call measure_observables() end do end subroutine
仿真通过读取系统哈密顿量及其物理位点信息来进行设置,基于物理系统初始化tree_type实例,在TTN内初始化链接算符,并可选地计算随机初始化网络的可观测值。之后,仿真开始迭代执行预设数量的扫描。如上所述,控制模块负责管理每次扫描的超参数(如Arnoldi容差),并跟踪每次扫描后的全局能量E。基于此跟踪,通过converged值检查收敛性。在实践中,可以跟踪相对值 $| \frac{\delta E} {E} < \bar{\epsilon_{r e l}} |$ 和绝对收敛值 $| \delta E | < \epsilon_{a b s}$。此外,在每次迭代中,我们可以测量并跟踪感兴趣的可观测值,从而观察它们随收敛过程的变化。这尤其有助于研究全局优化是否达到了全局最小值,还是陷入了局部最小值。
8.3.3 迈向高性能计算#
本章的最后部分将针对以第8.3.2节所述方式实现的树张量网络代码的性能进行一般性讨论。特别地,它将阐述在高性能计算系统上执行TTN仿真时的并行化能力前景。
TTN算法中有若干计算可以以不同方式并行化。在最底层,我们可以并行化张量收缩,即执行底层矩阵乘法的LAPACK例程。这可以通过GPU高效完成。然而,必须考虑待收缩张量的大小,因为对于小张量,将数据移动到GPU并传回会产生不利的开销。通过合理的启发式策略,引入GPU甚至GPU集群可能是进一步发展的有趣路径,但这在本论文范围内尚未得到开发。
其次,在对称不变张量上执行的计算可以在很大程度上对不同对称扇区独立进行。由于这些张量在数值上可视为块对角实例,我们可以并行化张量分解或张量收缩等计算,类似于分别对块对角矩阵进行矩阵分解或矩阵乘法的并行化。然而,这种并行化的收益高度依赖于对称扇区的分布,即张量中不同块的数量和大小。
此外,如第8.1.4.2节所述,TTN中单个张量的局部优化可以并行化,因为我们需要将多个哈密顿量部分的收缩与单个张量求和(见图8.22)。每个收缩都可以独立执行,且由于它们都作用于同一空间,每次收缩的计算时间应大致相同。事实证明,在基态搜索中,当仅使用有限数量的CPU时,这种并行化思路是最有效的,特别是因为根据键维度的不同,串行CPU时间中约有75%花费在执行这组收缩上。然而,其效率显然存在上限,即局部优化中需要收缩的TPO算符的数量,这高度依赖于物理系统本身。尽管如此,通过这种优化,我们可以为高达$N = 16 \times 16$(总计包含$2^{256}$个自由度)的系统获得合理的物理结果。在这种情况下,我们使用OpenMP进行并行化,通常能达到能量密度精度量级约为$\sim 10^{- 5}$的基态,这足以获得对背后物理的有价值见解。然而,这种并行化技术随系统规模$N$扩展的效果不够理想。由于优化中需要处理的张量数量随系统规模$N$变化,对于更大的系统规模如$N = 32 \times 32$甚至更大(显然也取决于系统本身),获得高精度结果颇具挑战性。


图8.22 局部优化的收缩方案。在优化过程中,有效哈密顿量$\mathcal{H}_{e f f}$对局部张量(绿色)的作用,是通过将所有TPO在$\mathcal{H}_{e f f}$中的收缩与$\mathcal{T}$求和来计算的。实践中,当在单CPU上执行TTN基态搜索算法时,这些收缩约占计算量的75%,而它们可以高效地并行执行。(图片经许可转载自[150])
另一种并行化TTN基态搜索的可能形式是全局优化技术的MPI并行化,这确实可以提供随系统规模$N$的所需可扩展性。这种并行化旨在通过并行优化所有局部张量来执行全局优化算法。这一思想的成功已在参考文献[318]中针对MPS得到验证。其主要原理是将网络转化为施密特分解形式,从而在内部链接上获得奇异值或施密特值。现在,我们将奇异值收缩到网络两侧,同时在链接上保留其逆值。通过这种方式,网络的每一侧都经过规范,从而可以独立执行局部优化。将这一思想应用于TTN,我们可以将树划分为包含固定数量张量的不同子分支。所有子分支将通过MPI在不同计算节点上并行进行局部优化。优化后,影响邻近分支的信息将传递到相应节点。
虽然在本论文的最终阶段,后一种方案尚未实现,但这可能是张量网络代码发展的又一重大进步,从而推动高维量子多体系统的研究,因为它可以为代码提供随系统规模$N$的理想可扩展性。
8.4 习题#
利用之前练习中开发的代码,定义TTN对象及其基本操作:计算范数,以及评估局部和最近邻算符的期望值。
使用上述开发的工具,为横场伊辛模型编写一个基态搜索算法。从随机TTN开始对一维系统进行搜索,并将得到的基态能量与使用其他方法计算的结果(参见前一章中的习题)进行比较。
利用上述开发的工具,通过实现不同的映射策略(包括蛇形策略和希尔伯特曲率)来扩展基态搜索算法,使其能够模拟更高维度的系统。从随机构造的TTN出发,对二维横场伊辛模型和二维海森堡模型执行基态搜索。比较不同映射策略的表现。
为上述练习中开发的基态搜索算法实现并行化策略。