当前位置:   article > 正文

张量网络系列(TT分解 MPS)

tt分解

本期将正式进入张量网络中的核心部分:矩阵乘积态,闲话少叙,我们直接进入正题~~

1. Tensor-train 分解

小伙伴们先思考一个问题:对于高阶张量,我们直接对其研究定然较为麻烦,那是能否找到一个方法将其分解为多个二阶或者三阶张量的缩并形式? 此时Tensor-trian分解法应运而生:
在这里插入图片描述上面这一坨就是Tensor-train 分解 的公式表达,哎呀 !看的我就懵逼加难受,不过却可以证明这真是 “火车” ,有亿点长!

莫怕!我们掏出新张量的表示方法,大家一起来看看这个东西:
在这里插入图片描述
先看数学公式,大张量的指标为 s 1 , s 2 ⋯ s n s_{1},s_{2} \cdots s_{n} s1,s2sn , 每一个后面分解的二阶或三阶张量的第一个指标就是原大张量对应的指标,引入的新指标 a 1 , a 2 ⋯ a n a_{1},a_{2} \cdots a_{n} a1,a2an 我称之为几何或辅助指标

再看上面的张量示意图,其实还是比较好理解的 , s s s 作为开放指标 不参与缩并过程,第一个子张量的辅助指标是 a 1 a_{1} a1, 也只有这一个,第二个张量的辅助指标就是 a 1 a 2 a_{1}a_{2} a1a2 ,这样,第一个与第二个小张量就可以缩并起来了,同理,第三个张量的辅助指标就是 a 2 , a 3 a_{2},a_{3} a2,a3 ,以此类推,后面依次缩并,当然,两边的都是二阶张量,中间的是三阶张量!

通常情况下,TT分解可以通过N-1次的奇异值分解或者 QR分解实现(这里的QP分解目前可以不做掌握)。我们举个例子理解一下:
在这里插入图片描述这是一个四阶张量的TT分解,我们把这四阶张量的第一个指标保持不变,后面三个指标reshape成一个大指标 ,就像是我们前面说的矩阵化,对得到的新矩阵进行奇异值分解,看上图的一第一个等号右边的图形,第一个矩阵就是传说中的左奇异向量组成的 U U U 矩阵,后面就是 Λ \Lambda Λ V V V 的乘积!然后在原路reshape 回来,以此类推,一共要做N-1次奇异值分解,这里有一张非常好的图,应该对理解有作用:
在这里插入图片描述

TT秩:这里非常的有趣,所谓的TT秩和前面我们介绍的秩不是一个东西,此秩非彼秩,他代表的是N-1个秩 ,这N-1个秩 分别对应在做奇异值分解的时候每一个中间的对角矩阵中非0奇异值的个数!

这里还需要注意,在引入辅助指标帮助我们进行奇异值分解的时候,辅助指标也就是某个矩阵的维数 是在逐渐上升的,如果做严格SVD分解的话,这个秩秩怕是会增大,所以 就需要我们进行低秩近似!

最优TT低近似秩: 对于某个给定张张量 T T T ,TT分解使得:

在这里插入图片描述(这里应该是双竖线求范数,不是绝对值!)

那么 T ~ S 1 s 2 … s N = ∑ a 1 a 1 … a N − 1 A s 1 a 1 ( 1 ) A s 2 a 1 a 2 ( 2 ) … A s N − 1 a N − 2 a N − 1 ( N − 1 ) A S N ( N ) a N − 1 \tilde{T}_{S_{1} s_{2} \ldots s_{N}}=\sum_{a_{1} a_{1} \ldots a_{N-1}} A_{s_{1} a_{1}}^{(1)} A_{s_{2} a_{1} a_{2}}^{(2)} \ldots A_{s_{N-1} a_{N-2} a_{N-1}}^{(N-1)} A_{S_{N}}^{(N)} a_{N-1} T~S1s2sN=a1a1aN1As1a1(1)As2a1a2(2)AsN1aN2aN1(N1)ASN(N)aN1 就称为 T T T 张量的最优TT低秩近似!

其实大概的意思就是,我们需要限制每次SVD分解后辅助指标维数的增长,设定一个限制维数 的上限 X \mathcal{X} X, 能让原来的大张量和低秩近似后的张量相减后的范数最小,此时满足最小范数条件对应的 X \mathcal{X} X 就是我们要找的值!

这里辅助指标的上限 X \mathcal{X} X 称为 截断维数 或是 裁减维数

2. 量子知识点回顾

上面的TT分解部分我相信大家学起来应当是非常顺滑的,我们目前的小目标是向 矩阵乘积态 MPS 进发, 虽然TT分解是 铺垫学习中最重要的部分,但是没有量子的张量网络是莫得灵魂的,这也是必须要的,所以下面我们一起回顾一下前面学习的量子知识,还没有接触过量子的小伙伴如果继续向下看的话,貌似、可能、应该会懵逼,所以你需要去看我的另一个专栏 ,猛戳这里 ——量子计算入门,这估计会耗费您不少的宝贵时光,当然了 ,没有量子力学的基础直接就看量子计算估计也是不太现实,所以啊,我的另一个专栏 从线性代数代量子力学 已经为您准备好了!

人活着,本来就已经很难了,你竟然还要学这些东西~~ 对了,不要忘记一篇一篇点赞!爱你呦 (๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤

在这里插入图片描述

  • 我们都知道算子算符的本质就是矩阵,也是张量。算符与态矢的相乘,可以写成相应指标的收缩: σ + φ ⇔ ∑ j σ i j + φ j \boldsymbol{\sigma}^{+} \boldsymbol{\varphi} \Leftrightarrow \sum_{j} \boldsymbol{\sigma}_{i j}^{+} \boldsymbol{\varphi}_{j} σ+φjσij+φj

  • 任意的二自旋量子态可以写成基矢的叠加:
    ∣ φ ⟩ = φ 00 ∣ 00 ⟩ + φ 01 ∣ 01 ⟩ + φ 10 ∣ 10 ⟩ + φ 11 ∣ 11 ⟩ = ∑ i j = 0 1 φ i j ∣ i j ⟩ |\varphi\rangle=\varphi_{00}|00\rangle+\varphi_{01}|01\rangle+\varphi_{10}|10\rangle+\varphi_{11}|11\rangle=\sum_{i j=0}^{1} \varphi_{i j}|i j\rangle φ=φ0000+φ0101+φ1010+φ1111=ij=01φijij

  • 二自旋量子态 ∣ φ ⟩ |\varphi\rangle φ 的系数 可以看做是 2x2的矩阵: [ φ 00 φ 01 φ 10 φ 11 ] \left[

    φ00φ01φ10φ11
    \right] [φ00φ10φ01φ11]

  • 对于两个自旋态矢构成的基矢为四个四维向量: ∣ 0 ⟩ ∣ 0 ⟩ , ∣ 0 ⟩ ∣ 1 ⟩ , ∣ 1 ⟩ ∣ 0 ⟩ , ∣ 1 ⟩ ∣ 1 ⟩ |0\rangle|0\rangle,|0\rangle|1\rangle,|1\rangle|0\rangle,|1\rangle|1\rangle 00,01,10,11;推广一下:对于 N N N 维自旋体系,对应希伯尔特空间维数为 2 N 2^{N} 2N , 即量子态的系数为 2 N 2^{N} 2N维张量,算符的系数为 2 N × 2 N 2^{N}\times2^{N} 2N×2N 维张量。
    在这里插入图片描述左边是 N N N个量子态的图形表示,每一个 “腿” 都代表相应的指标,而每一个指标的维数是2,也就是对应每一个自旋的空间!

那么如何定义单体的算符在多体量子态上的运算呢?此时需要引入单体算符: 作用到某一个自旋上的算符,像泡利算符,系数维数是 2x2 的。

我们以三自旋算符为例,简单介绍单体算符作用到多体量子态的规则:定义一个算符 O ^ ( 1 ) \hat{O}^{(1)} O^(1) 仅作用在第一个自旋态上,根据前面的知识,其对应的系数维数是2x2,三自旋量子态 ∣ φ ⟩ |\varphi\rangle φ 对应的系数维数是2x2x2,后面两个自旋态我们用单位算符去作用,相当于没作用:

∣ φ ′ ⟩ = O ^ ( 1 ) ∣ φ ⟩ = O ^ ( 1 ) ⊗ I ^ ( 2 ) ⊗ I ^ ( 3 ) ∣ φ ⟩ \left|\varphi^{\prime}\right\rangle=\hat{O}^{(1)}|\varphi\rangle=\hat{O}^{(1)} \otimes \hat{I}^{(2)} \otimes \hat{I}^{(3)}|\varphi\rangle φ=O^(1)φ=O^(1)I^(2)I^(3)φ

在这里插入图片描述

注意,刚刚才说算符的系数为 2 N × 2 N 2^{N}\times2^{N} 2N×2N 维张量,所以这里 O ^ ( 1 ) ⊗ I ^ ( 2 ) ⊗ I ^ ( 3 ) \hat{O}^{(1)} \otimes \hat{I}^{(2)} \otimes \hat{I}^{(3)} O^(1)I^(2)I^(3) 的维数为 2 3 × 2 3 2^{3}\times2^{3} 23×23 ,上面这一坨公式,我们直接写成如下这个就好:

φ i ′ j k ′ = ∑ i O i ′ i ( 1 ) φ i j k \varphi_{i^{\prime} j k}^{\prime}=\sum_{i} O_{i^{\prime} i}^{(1)} \varphi_{i j k} φijk=iOii(1)φijk

这样缩并后就不需要再一步一步的去计算矩阵了!在这里,最不能忘的就是虽然你这个算符只是作用在第一个自旋态上,其实整个多量子态都被你的这个操作改变了,不存在说只有被作用的自旋态发生改变,张量是个整体,这就和那个量子测量改变量子态有点像!

了解了这个之后,我们在看 多体算符作用在多量子态上的运算 就会简单多了,其可以写成多个定义在不同空间的单体算符的直积 ,就相当于单体算符的多次作用!:
在这里插入图片描述
例如将第一个和第二个自旋空间中的算符 O ^ = O ^ ( 1 ) ⊗ O ^ ( 2 ) \hat{O}=\hat{O}^{(1)} \otimes \hat{O}^{(2)} O^=O^(1)O^(2) 作用到三自旋态上,照葫芦画瓢:
φ i ′ j ′ k ′ = ∑ i j O i i ′ ( 1 ) O j j ′ ( 2 ) φ i j k \varphi_{i^{\prime} j^{\prime} k}^{\prime}=\sum_{i j} O_{i i^{\prime}}^{(1)} O_{j j^{\prime}}^{(2)} \varphi_{i j k} φijk=ijOii(1)Ojj(2)φijk

这些算符之间可以相互调换顺序,是对易的!

有时候,某些多体算符不能被拆分成多个单体算符,就需要我们根据实际情况进行收缩,就像下图一样!
在这里插入图片描述
还有一个图,不知道大家能不能看出来:如果不同的算符作用在相同的自旋上,从下至上一次将各个算符作用到量子态上:
在这里插入图片描述
看图,第一个是二体算符作用在 第二个和第四个自旋态上,并且是不能用直积的形式拆分,所以中间要用线连起来,后面的道理是一样的!

3 . 矩阵乘积态(MPS)

我们终于走到这一步了,鬼知道我这几天经历了什么!!!!我们先通过一个生活中的例子来看看MPS到底是干嘛用的:

在这里插入图片描述
切成小份就是它的最终奥义所在!

为什么我们在介绍TT分解之后紧接着介绍的是多量子态的算符系数,而不是直接干 MPS呢? 你猜的没错,这二者的完美结合才能实现我们最终目的!

如果我们要将多量子态做类似于TT分解一样的操作,由于基态的参数复杂度随自旋N呈指数上升,所以在经典计算机上 无法进行严格对角化求基态,因此,我们还是要和起前面利用低秩近似来优化一样,需要优化一下这多量子态张量。。。。。

假设N自旋基态的系数可以写成 N个二阶或者三阶 张量构成的TT形式,先要直接优化这个N阶张量,进而求解此基态对应的最优化问题:

E g = min ⁡ ⟨ g ∣ g ⟩ = 1 ⟨ g ∣ H ^ ∣ g ⟩ E_{g}=\min _{\langle g \mid g\rangle=1}\langle g|\widehat{H}| g\rangle Eg=gg=1mingH g

也就是在此基态在满足归一化条件的前提下,我们要极小化它的能量!至于为啥和能量扯上关系了,唉,那就下回再叙了!

  • 一般而言,矩阵乘积态(Matrix product states,MPS)定义为系数矩阵满足TT形式的量子态:
    ∣ φ ⟩ = ∑ s 1 s 2 … s N φ s 1 s 2 … s N ∏ ⊗ n = 1 N ∣ s n ⟩ |\varphi\rangle=\sum_{s_{1} s_{2} \ldots s_{N}} \varphi_{s_{1} s_{2} \ldots s_{N}} \prod_{\otimes n=1}^{N}\left|s_{n}\right\rangle φ=s1s2sNφs1s2sNn=1Nsn

想要看懂这个式子,首先你要知道前面说的 : ∣ φ ⟩ = φ 00 ∣ 00 ⟩ + φ 01 ∣ 01 ⟩ + φ 10 ∣ 10 ⟩ + φ 11 ∣ 11 ⟩ = ∑ i j = 0 1 φ i j ∣ i j ⟩ |\varphi\rangle=\varphi_{00}|00\rangle+\varphi_{01}|01\rangle+\varphi_{10}|10\rangle+\varphi_{11}|11\rangle=\sum_{i j=0}^{1} \varphi_{i j}|i j\rangle φ=φ0000+φ0101+φ1010+φ1111=ij=01φijij,这个是二旋的,多旋量子态 需要 单量子态的多次直积: ∏ ⊗ n = 1 N ∣ s n ⟩ \prod_{\otimes n=1}^{N}\left|s_{n}\right\rangle n=1Nsn,前面的系数也是相对应,最后再相加!

这个系数 φ s 1 s 2 … s N \varphi_{s_{1} s_{2} \ldots s_{N}} φs1s2sN 就和前面写成TT分解的一样了:

φ s 1 s 2 … s N = ∑ a 1 a 1 … a X A s 1 a 1 ( 1 ) A s 2 a 1 a 2 ( 2 ) … A s N − 1 a N − 2 a N − 1 ( N − 1 ) A S N a N − 1 ( N ) = A S 1 : ( 1 ) A S 2 : ⋯ ( 2 ) … A S N − 1 : : ( N − 1 ) A S N ( N ) T \varphi_{s_{1} s_{2} \ldots s_{N}}=\sum_{a_{1} a_{1} \ldots a_{\mathcal{X}}} A_{s_{1} a_{1}}^{(1)} A_{s_{2} a_{1} a_{2}}^{(2)} \ldots A_{s_{N-1} a_{N-2}a_{N-1}}^{(N-1)} A_{S_{N} a_{N-1}}^{(N)}=A_{S_{1}:}^{(1)} A_{S_{2}: \cdots}^{(2)} \ldots A_{S_{N-1}::}^{(N-1)} A_{S_{N}}^{(N) \mathrm{T}} φs1s2sN=a1a1aXAs1a1(1)As2a1a2(2)AsN1aN2aN1(N1)ASNaN1(N)=AS1:(1)AS2:(2)ASN1::(N1)ASN(N)T
各个指标的含义和前面没有太大的区别!如果你是从头到尾认真看了并加以思索了,现在除了那个优化问题和能量扯上了关系没搞懂之外,我个人感觉应当是不难的,甚至可以说是比较好理解,所有的难点都图片具象化了!

MPS 有两种边界条件:

  • 开发边界条件 (Open boundary condition,OBC)周期边界条件 (Periodoic boundary condition,PBC)
    在这里插入图片描述第一个OBS和前面的TT差不多,开头和结尾都是二阶张量,中间的都是三阶的,而PBS将开头和结尾又引入了一个辅助指标缩并了,形成了一个环状的样子,这就让所有子张量都是三阶的了!

MPS中,对于给定的辅助截断指标 X \mathcal{X} X,MPS所含参数 不再是呈指数型增加了,而是呈正比的线性增加,这也正是我们引入MPS的最大原因所在!当然,这要样做难免会有或大或小的误差存在,具体可以举一个图像应用的例子看一看:在这里插入图片描述
和奇异值压缩图像有点像,如果限制维数太小的话,图像就模糊一片了!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/176349
推荐阅读
相关标签
  

闽ICP备14008679号