精华内容
下载资源
问答
  • pytorch 张量乘积和矩阵乘法

    千次阅读 2021-02-07 17:27:17
    pytorch 张量乘积和矩阵乘法 张量乘积( tensor 维度需要一致,对应 位置 元素相乘 ) tensor = torch.ones(4,4) tensor[:,1] = 2 print('tensor:') print(tensor) # 逐个元素相乘结果 print(f"tensor.mul...

    pytorch 张量的乘积和矩阵乘法


    张量的乘积( tensor 维度需要一致,对应 位置 元素相乘 )


    tensor = torch.ones(4,4)
    tensor[:,1] = 2
    print('tensor:')
    print(tensor)
    
    # 逐个元素相乘结果
    print(f"tensor.mul(tensor): \n {tensor.mul(tensor)} \n")
    # 等价写法:
    print(f"tensor * tensor: \n {tensor * tensor}")
    
    

    输出:

    tensor:
    tensor([[1., 2., 1., 1.],
            [1., 2., 1., 1.],
            [1., 2., 1., 1.],
            [1., 2., 1., 1.]])
    tensor.mul(tensor): 
     tensor([[1., 4., 1., 1.],
            [1., 4., 1., 1.],
            [1., 4., 1., 1.],
            [1., 4., 1., 1.]]) 
    
    tensor * tensor: 
     tensor([[1., 4., 1., 1.],
            [1., 4., 1., 1.],
            [1., 4., 1., 1.],
            [1., 4., 1., 1.]])
    

    矩阵乘法(tensor 维度需要一致)


    tensor = torch.ones(4,4)
    tensor[:,1] = 2
    print('tensor:')
    print(tensor)
    
    print(f"tensor.matmul(tensor.T): \n {tensor.matmul(tensor.T)} \n")
    # 等价写法:
    print(f"tensor @ tensor.T: \n {tensor @ tensor.T}")
    

    输出:

    tensor:
    tensor([[1., 2., 1., 1.],
            [1., 2., 1., 1.],
            [1., 2., 1., 1.],
            [1., 2., 1., 1.]])
    tensor.matmul(tensor.T): 
     tensor([[7., 7., 7., 7.],
            [7., 7., 7., 7.],
            [7., 7., 7., 7.],
            [7., 7., 7., 7.]]) 
    
    tensor @ tensor.T: 
     tensor([[7., 7., 7., 7.],
            [7., 7., 7., 7.],
            [7., 7., 7., 7.],
            [7., 7., 7., 7.]])
    

    展开全文
  • @TOC 一、Tensor-train分解 1. 定义 给定N阶张量,将其分解成N个二阶或三阶张量的缩并形式: 2. TT低秩近似 二、矩阵乘积态 1. 定义 2. 矩阵乘积态与量子纠缠 3. 矩阵乘积态的规范自由度与正交形式


    我是一只正在不断学习、希望早日成为小白的小小白,有什么错误欢迎大家批评指正,喜欢的请点个赞哦!

    一、Tensor-train分解(TT分解)

    1. 定义

    给定N阶张量,将其分解成N个二阶或三阶张量的缩并形式:

    TS1S2SN=a1a2aN1AS1a1(1)AS2a1a2(2)ASN1aN2aN1(N1)ASN(N)=AS1:(1)AS2:(2)ASN1::(N1)ASN:(N)TT_{S_{1} S_{2} \ldots S_{N}}=\sum_{a_{1} a_{2} \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_{S_{1}:}^{(1)} A_{S_{2}: \cdots}^{(2)} \ldots A_{S_{N-1}::}^{(N-1)} A_{S_{N}:}^{(N) \mathrm{T}}

    其中,{an}\left\{ {{a}_{n}} \right\}被称为几何或辅助指标,{sn}\left\{ {{s}_{n}} \right\}被称为开放或物理指标。

    tensor-train直译过来就是张量火车,正如下图我们所看到的那样,一个大的张量被分解成了一个个小张量缩并的形式,就像我们平时所看到的一节节火车的车厢,所以不得不说前人还是很富有想象力的。为了方便,在后面的学习中我们会把Tensor-train分解简称为TT分解。
    在这里插入图片描述
    TT分解可以通过N-1次奇异值分解实现。先把第一个指标看成一个指标,后面三个指标看成一个大指标,这样子就得到一个二阶张量(矩阵),将其进行奇异值分解,左边就是奇异值分解后得到的UU,右边就是ΛV\Lambda {{V}^{\dagger }}。同理对右边的张量按照上述方法继续进行奇异值分解……例如四阶张量的TT分解,如下图:
    在这里插入图片描述

    经过N-1次奇异值分解,一个N阶的张量就被分解成了N个小张量。但是严格的TT分解不能解决指数墙的问题,辅助指标会随着奇异值分解的次数呈指数增长。那么这个时候怎么解决这个问题呢?可以先思考下,答案后面揭晓。
    在这里插入图片描述

    2. TT低秩近似

    TT秩的定义
    每一次进行奇异值分解所得到的非0奇异值的个数(辅助指标的维数),因为N阶张量要进行N-1次奇异值分解,所以一个N阶张量的TT秩包含N-1个数。
    在这里插入图片描述

    TT低秩近似
    令辅助指标有一个上限,辅助指标的上限 χ\chi 称为截断维数或裁剪维数:
    min{dim(an)χ}Ts1s2sNa1a1aN1As1a1(1)As2(2)a1a2AsN1aN2aN1(N1)ASNaN1(N)\min _{\left\{\operatorname{dim}\left(a_{n}\right) \leq \chi\right\}} \mid 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}}^{(2)} a_{1} a_{2} \cdots A_{s_{N-1} a_{N-2} a_{N-1}}^{(N-1)} A_{S_{N} a_{N-1}}^{(N)}
    获得TT秩近似最简单的算法之一就是每次进行奇异值分解后将多于截断维数的奇异值和对应的奇异向量进行裁剪,将辅助指标的维数裁剪为 χ\chi ,简而言之就是在进行TT分解时不断利用奇异值分解的低秩近似,是不是超级容易就解决了一个问题。

    随机生成10×10×10×10的张量进行不同截断维数的TT低秩近似的误差(下图为 χ\chi 取30到60)
    在这里插入图片描述附上代码,没事可以自己去试试,感觉有点神奇呢!(看我这没见过世面的样子U•ェ•U):

    import numpy as np
    import BasicFun as bf
    import matplotlib.pyplot as plt
    
    # 考虑(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)的8阶张量,进行无裁剪TT分解,查看分解后辅助指标的维数
    x = np.random.randn(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
    tensors = bf.ttd(x)[0]
    # 读取辅助指标维数
    a_dims = list()
    for x in tensors[:-1]:
        a_dims.append(x.shape[-1])
    print('The ancillary dimensions of the TT form = ')
    print(a_dims)
    
    # 考虑(10, 10, 10, 10)的张量,计算不同截断维数下的误差
    y = np.random.randn(10, 10, 10,10)
    err = list()
    z0 = np.linalg.norm(y)
    for chi in range(30, 61,1):
        tensors = bf.ttd(y, chi)[0]
        y1 = bf.tt_product(tensors)
        err.append(np.linalg.norm(y - y1) / z0)
    print('\nThe error with different dimension cut-off = ')
    print(err)
    plt.plot(np.arange(30, 61,1), err, marker='x')
    plt.xlabel(r'dimension cut-off $\chi$')
    plt.ylabel('relative error')
    plt.show()
    

    二、矩阵乘积态(MPS)

    1. 定义

    一般而言,矩阵乘积态(MPS)定义为系数矩阵满足TT形式的量子态:
    φ=s1s2sNφs1s2sNn=1Nsn|\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=a1a1aN1As1a1(1)As2a1a2(2)AsN1aN2aN1(N1)ASNaN1(N)=As1:(1)AS2:(2)ASN1:(N1)ASN:(N)T\varphi_{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} 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}}

    矩阵乘积态的两种边界条件分别为开发边界条件(OBC)和周期边界条件(PBC),如下图:
    在这里插入图片描述
    在TT分解中,量子态参数个数随N指数增加,满足:
      ⁣ ⁣# ⁣ ⁣ (φ)O(dN)\text{ }\!\!\#\!\!\text{ }\left( \left| \varphi \right\rangle \right)\sim O\left( {{d}^{N}} \right)
    在MPS中,给定辅助指标截断维数为 ,则MPS包含参数的个数随N线性增加,满足:
      ⁣ ⁣# ⁣ ⁣ (MPS)O(Ndχ2)\text{ }\!\!\#\!\!\text{ }\left( MPS \right)\sim O\left( Nd{{\chi }^{2}} \right)
    对于MPS分解,我们并不需要知道指数复杂的量子系数是什么,也不需要进行TT分解,而是直接假设基态具备MPS的形式,直接处理MPS中的局部张量,从而绕开指数墙的问题,但是这样子会引入误差。并且,在求基态时我们是在并不知道基态是什么的情况下直接假设基态是具有给定截断维数的MPS态,因此我们并不能确定这样的MPS态可以有效的描述基态。我们可以从奇异谱入手定义刻画MPS的有效性,而MPS态对应的奇异谱刚好就是量子态的量子纠缠谱,由此引入量子纠缠。有没有很懵,don’t worry,继续往下看!
    在这里插入图片描述

    2. 矩阵乘积态与量子纠缠

    斯密特分解与纠缠谱:给定N自旋的量子态
    φ=s1s2sNφs1s2sNn=1Nsn\left| \varphi \right\rangle =\sum\nolimits_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}{{{\varphi }_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}}\prod\limits_{\otimes n=1}^{N}{\left| {{s}_{n}} \right\rangle }}

    将自旋分成两部分:
    {sn}=(s1,s2,,sK)(sK+1,,sN)\left\{ {{s}_{n}} \right\}=\left( {{s}_{1}},{{s}_{2}},\cdots ,{{s}_{K}} \right)\cup ({{s}_{K+1}},\cdots ,{{s}_{N}})

    两部分不能为空,将前面一部分看成一个指标,后面一部分看成一个指标,这样就得到一个二阶张量(矩阵),对矩阵的系数进行奇异值分解:
    φs1s2sN=a=0D1Us1s2sK,aΛaVsK+1sN,a{{\varphi }_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}}=\sum\limits_{a=0}^{D-1}{{{U}_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{K}},a}}{{\Lambda }_{a}}}V_{{{s}_{K+1}}\cdots {{s}_{N}},a}^{*}

    对系数进行奇异值分解对应于对量子态做分解:
    φ=a=0D1ΛaUaVa\left| \varphi \right\rangle =\sum\limits_{a=0}^{D-1}{{{\Lambda }_{a}}\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle }

    UaVa\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle之间进行直积,Λa{{\Lambda }_{a}}可看成权重系数。该分解被称为量子态的斯密特分解,量子态的斯密特分解对应于系数矩阵的奇异值分解,Λ\Lambda称为量子态的纠缠谱。其中UaVa\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle为D个量子态,满足:
    Ua=s1s2sKD1Us1s2sK,an=1Ksn\left| {{U}^{a}} \right\rangle =\sum\limits_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{K}}}^{D-1}{{{U}_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{K}},a}}\prod\limits_{\otimes n=1}^{K}{\left| {{s}_{n}} \right\rangle }}

    Va=s1s2sKD1VsK+1sN,an=1Ksn\left| {{V}^{a}} \right\rangle =\sum\limits_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{K}}}^{D-1}{{{V}^{*}}_{{{s}_{K+1}}\cdots {{s}_{N}},a}\prod\limits_{\otimes n=1}^{K}{\left| {{s}_{n}} \right\rangle }}

    由于
    φφ=1φ=a=0D1ΛaUaVa\left\langle \varphi \right|\left. \varphi \right\rangle \text{=1},\left| \varphi \right\rangle \text{=}\sum\limits_{a=0}^{D-1}{{{\Lambda }_{a}}\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle }

    所以
    φφ=a=0D1Λa2VaUaUaVa=a=0D1Λa2=1\left\langle \varphi \right|\left. \varphi \right\rangle \text{=}\sum\limits_{a=0}^{D-1}{{{\Lambda }_{a}}^{\text{2}}\left\langle {{V}^{a}} \right|\left\langle {{U}^{a}} \right.\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle }\text{=}\sum\limits_{a=0}^{D-1}{{{\Lambda }_{a}}^{\text{2}}\text{=1}}

    定义φ\left| \varphi \right\rangle被投影到UaVa\left| {{U}^{a}} \right\rangle \left| {{V}^{a}} \right\rangle态的概率满足Pa=Λa2{{P}_{a}}=\Lambda _{a}^{2}(量子力学的基本假设),显然概率满足归一化条件
    aPa=1\sum\nolimits_{a}{{{P}_{a}}=1}

    根据概率论香农熵的定义:

    ES=PaalnPa{{E}^{S}}=-{{P}_{a}}\sum\nolimits_{a}{\ln {{P}_{a}}}

    根据该公式定义量子态的纠缠熵:

    S=a=0D1Λa2lnΛa2S=-\sum\limits_{a=0}^{D-1}{\Lambda _{a}^{2}}\ln \Lambda _{a}^{2}

    因为香农熵是刻画信息量的大小,类推到量子态,那么量子态的纠缠熵就是刻画量子信息量的大小。把量子态二分为A体系和B体系,A、B体系在进行给定基底下的概率测量得到的信息熵就是这两个体系在该二分下的纠缠熵。

    奇异值分解中
    φs1s2sN=a=0D1Us1s2sK,aΛaVsK+1sN,a{{\varphi }_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}}=\sum\limits_{a=0}^{D-1}{{{U}_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{K}},a}}{{\Lambda }_{a}}}V_{{{s}_{K+1}}\cdots {{s}_{N}},a}^{*}

    UVUV满足正交性:
    UU=s1SKUs1SK,αUS1SK,α=IU^{\dagger} U=\sum_{s_{1}\ldots S_{K}} U_{s_{1} \ldots S_{K}, \alpha}^{*} U_{S_{1} \ldots S_{K}, \alpha^{\prime}}=I

    VV=s1SKVs1SK,αVS1SKα=IV^{\dagger} V=\sum_{s_{1}\ldots S_{K}} V_{s_{1} \ldots S_{K}, \alpha}^{*} V_{S_{1} \ldots S_{K} \alpha^{\prime}}=I

    由上述性质可计算开放边界MPS的纠缠,设MPS态满足:
    φs1s2sN=a1a1aN1As1a1(1)AsKaK1aK(K)ΛaK(K)AsK+1aKaK+1(K+1)ASNaN1(N)\varphi_{s_{1} s_{2} \ldots s_{N}}=\sum_{a_{1} a_{1} \ldots a_{N-1}} A_{s_{1} a_{1}}^{(1)} \ldots A_{s_{K} a_{K-1} a_{K}}^{(K)} \Lambda_{a_{K}}^{(K)} A_{s_{K+1} a_{K} a_{K+1}}^{(K+1)} \ldots A_{S_{N} a_{N-1}}^{(N)}

    当如下左/右正交条件满足时,ΛK{{\Lambda }^{K}}为MPS给出的前K个自旋与其余自旋之间的纠缠:

    a. s1As1a1(1)As1a1(1)=Ia1a1\sum_{s_{1}} A_{s_{1} a_{1}}^{(1)} A_{s_{1} a_{1}}^{(1) *}=I_{a_{1} a_{1}}
    b. snan1Asnan1an(n)Asnan1an(n)=Ianan(1<n<K)\sum_{s_{n} a_{n-1}} A_{s_{n} a_{n-1} a_{n}}^{(n)} A_{s_{n} a_{n-1} a_{n}}^{(n) *}=I_{a_{n} a_{n}} \quad(1<n<K)
    c.sNAsNaN1(N)ASNaN1(N)=IaN1aN1\mathrm{c.} \sum_{s_{N}} A_{s_{N} a_{N-1}}^{(N)} A_{S_{N} a_{N-1}}^{(N) *}=I_{a_{N-1} a_{N-1}}
    d.snan+1Asnan1an(n)Asnan1an(n)=Ian1an1(K<n<N)\operatorname{d.} \sum_{s_{n} a_{n+1}} A_{s_{n} a_{n-1} a_{n}}^{(n)} A_{s_{n} a_{n-1} a_{n}}^{(n) *}=I_{a_{n-1} a_{n-1}}(K<n<N)
    e. Λ0(K)Λ1(K)0\Lambda_{0}^{(K)} \geq \Lambda_{1}^{(K)} \geq \cdots \geq 0

    前面K个tensor收缩构成SVD分解中的U,后面的tensor收缩构成SVD分解中的V,称为MPS的中心正交形式,也称为SVD形式。例如长度为4的MPS,箭头表示正交条件的方向:
    在这里插入图片描述
    MPS的中心正交形式在后面的学习中会经常涉及,且与SVD分解紧密联系在一起,所以这个要好好进行理解消化( o=^•ェ•)o!

    3. 矩阵乘积态的规范自由度与正交形式

    计算MPS的斯密特分解可将MPS变成SVD形式,但是其所表示的量子态不能改变。改变MPS中的tensor但不改变其所表示的量子态,被称为规范变换也就是物理量不改变、数学形式改变的变化。进一步定义MPS的规范自由度:对于同一个量子态,可由多组由不同张量组成的MPS态来表示其系数。

    已知MPS满足:
    φS1S2SN=AS1:(1)ASn:(n)ASn+1:(n+1)ASN:(N)T\varphi_{S_{1} S_{2} \ldots S_{N}}=A_{S_{1}:}^{(1)} \ldots A_{S_{n}:}^{(n)} A_{S_{n+1}: \cdots}^{(n+1)} \ldots A_{S_{N}:}^{(N) \mathrm{T}}

    引入任意可逆矩阵UU及其逆矩阵U1{{U}^{-1}},定义:
    Bsn(n)=Asn::(n)U,Bsn(n+1)=U1Asn::(n+1)B_{{{s}_{n}}}^{(n)}=A_{{{s}_{n}}::}^{(n)}U,B_{{{s}_{n}}}^{(n+1)}={{U}^{-1}}A_{{{s}_{n}}::}^{(n+1)}

    得到同一个量子态的两种MPS表示:
    φs1s2sN=As1(1)Asn::(n)Asn+1:(n+1)AsN:(N)T=As1:(1)Bsn:(n)Bsn+1!(n+1)ASN:(N)T\varphi_{s_{1} s_{2} \ldots s_{N}}=A_{s_{1}}^{(1)} \ldots A_{s_{n}::}^{(n)} A_{s_{n+1}: \cdots}^{(n+1)} \ldots A_{s_{N}:}^{(N) \mathrm{T}}=A_{s_{1}:}^{(1)} \ldots B_{s_{n}:}^{(n)} B_{s_{n+1} !}^{(n+1)} \ldots A_{S_{N}:}^{(N) \mathrm{T}}

    公式总是没有图来得直观,下面我们用下图来进行进一步理解。MPS规范变换可以在任何一个或多个辅助指标上插入一个单位阵,也就是任何可逆矩阵及其逆矩阵的乘积。我们都知道任何矩阵乘单位阵都等于自己本身,所以在任何一个或多个辅助指标上插入一个单位阵都不会改变量子态。将变换矩阵作用到各张量{A(n){{A}^{(n)}}}上,就能得到新张量{B(n){{B}^{(n)}}}
    在这里插入图片描述
    在这种情况下,我们插入不同维数的单位矩阵就会得到不同的新张量{B(n){{B}^{(n)}}},这个时候,我们可以通过引入新的约束条件,固定MPS的规范自由度,使得给定量子态具备唯一的MPS表示。

    例如MPS的中心正交形式,如下图所示。当张量{A(n){{A}^{(n)}}}(n<k)满足左正交条件,{A(n){{A}^{(n)}}}(n>k)满足右正交条件,中间的tensor满足归一条件,此时MPS被称为具有KK-中心正交形式。可通过多次的SVD分解进行规范变换从KK-中心正交形式变换成K‘-中心正交形式(KKK\ne K'),这个过程值得细细思考品味。
    在这里插入图片描述
    给定任意一个矩阵乘积态,求量子纠缠谱(Λ(K){{\Lambda }^{(K)}}):
    (1) 把该矩阵乘积态变成K-中心正交形式;
    (2) 对K-中心正交形式的中心tensor做奇异值分解。

    基于K-中心正交形式,可对MPS辅助指标维数进行最优裁剪,裁剪方法为:
    (1) 进行中心正交化,将正交中心放置于第K个张量;
    (2) 对中心张量进行奇异值分解
    AsKaK1aK(K)=β=0χ1UsKaK1βΛβ(K)VaKβA_{{{s}_{K}}{{a}_{K-1}}{{a}_{K}}}^{(K)}=\sum\nolimits_{\beta =0}^{\chi -1}{{{U}_{{{s}_{K}}{{a}_{K-1}}\beta }}\Lambda _{\beta }^{(K)}{{V}_{{{a}_{K}}\beta }}}

    仅保留前χ\chi个奇异值及对应的奇异值向量,其中χ\chi为截断维数;
    (3) 将第K个张量更新为UA(K)U\to {{A}^{(K)}};
    (4) 将第(K+1)个张量更新为
    aKΛβ(K)VaKβAsK+1aKaK+1(K+1)AsK+1βaK+1(K+1)\sum\nolimits_{{{a}_{K}}}{\Lambda _{\beta }^{(K)}{{V}_{{{a}_{K}}\beta }}}A_{{{s}_{K+1}}{{a}_{K}}{{a}_{K+1}}}^{(K+1)}\to A_{{{s}_{K+1}}\beta {{a}_{K+1}}}^{(K+1)}

    通过不断移动正交中心的位置来实现MPS辅助指标的最优裁剪。

    MPS的正则形式:给定量子态
    φ=s1s2sNφs1s2sNn=1Nsn\left| \varphi \right\rangle =\sum\nolimits_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}{{{\varphi }_{{{s}_{1}}{{s}_{2}}\cdots {{s}_{N}}}}\prod\limits_{\otimes n=1}^{N}{\left| {{s}_{n}} \right\rangle }}

    其系数满足:
    φS1S2SN=AS1:(1)Λ(1)AS2:Λ(2)Λ(2)Λ(N2)ASN1:Λ(N1)Λ(N1)ASN:(N)T\varphi_{S_{1} S_{2} \ldots S_{N}}=A_{S_{1}:}^{(1)} \Lambda^{(1)} A_{S_{2}: \Lambda}^{(2)} \Lambda^{(2)} \ldots \Lambda^{(N-2)} A_{S_{N-1}: \Lambda}^{(N-1)} \Lambda^{(N-1)} A_{S_{N}:}^{(N) \mathrm{T}}

    Λ(n){{\Lambda }^{(n)}}是当前位置下进行二分得到的纠缠谱,满足:

    a. s1As1a1(1)As1a1(1)=Ia1a1\sum_{s_{1}} A_{s_{1} a_{1}}^{(1)} A_{s_{1} a_{1}}^{(1) *}=I_{a_{1} a_{1}}
    b. snan1Λan1an1(n1)Asnan1an(n)Λan1an1(n1)Asnan1an(n)=Ianan\sum_{s_{n} a_{n-1}} \Lambda_{a_{n-1} a_{n-1}}^{(n-1)} A_{s_{n} a_{n-1} a_{n}}^{(n)} \Lambda_{a_{n-1} a_{n-1}}^{(n-1)} A_{s_{n} a_{n-1} a_{n}}^{(n) *}=I_{a_{n} a_{n}}
    c. snanAsnan1an(n)Λanan(n)Asnan1an(n)Λanan(n)=Ian1an1(1<n<K)\sum_{s_{n} a_{n}} A_{s_{n} a_{n-1} a_{n}}^{(n)} \Lambda_{a_{n} a_{n}}^{(n)} A_{s_{n} a_{n-1} a_{n}}^{(n) *} \Lambda_{a_{n} a_{n}}^{(n)}=I_{a_{n-1} a_{n-1}} \quad(1<n<K)
    d. SNASN(N)aN1ASNaN1(N)=IaN1aP1\sum_{S_{N}} A_{S_{N}}^{(N)} a_{N-1} A_{S_{N} a^{\prime} N-1}^{(N) *}=I_{a_{N-1} a_{P-1}}

    在这里插入图片描述
    有没有觉很很神奇,神奇的事情还在后面,我们下期见!
    我是一只正在不断学习、希望早日成为小白的小小白,有什么错误欢迎大家批评指正,喜欢的请点个赞哦!
    在这里插入图片描述

    展开全文
  • 矩阵乘积

    2021-04-07 16:51:20
    根据上一篇博客提到的N阶张量的TT分解,我们可以把这样的系数矩阵进行分解,,满足TT形式的量子态我们将其称为矩阵乘积态(MPS)。 写成TT形式后,我们可以通过前述截断辅助指标维数的方法来降低某一量子态的参数...

    在这里插入图片描述
    首先,任意的复合量子态可以写成上面的基于基底的表述形式,他的系数ψ\psi实际上构成了一个N阶张量,si代表着第i个子系统的某个基矢,也代表着N阶张量的某一维度。根据上一篇博客提到的N阶张量的TT分解,我们可以把这样的系数矩阵进行分解,,满足TT形式的量子态我们将其称为矩阵乘积态(MPS)。

    在这里插入图片描述
    写成TT形式后,我们可以通过前述截断辅助指标维数的方法来降低某一量子态的参数复杂度。TT形式中间的每一个张量,有一个物理指标(维数为d)和两个辅助指标(维数被截断),总共我们有N个这样的张量,所以参数的复杂度是可求的。显然可见,我们通过这样的方法把参数复杂度从指数级降到了线性级。

    但是,这里还存在一个问题,TT分解本质上是对已有的一个张量进行分解,如果我已经知道了这样的一个N阶参数矩阵,所谓的降低复杂度也没有了什么意义。所以,为了绕过指数墙,我们直接假设MPS态,直接求解局部张量。

    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    由于是奇异值分解,所以,U和V都是量子态(归一),由ψ>|\psi>是归一的,可以得到Λ\Lambda平方和为1(U本身是一组正交归一的量子态,是前K个子系统复合后的系统的一组标准正交基)(其实,U和V的维数都是受到了奇异谱的限制,与相应的子系统的维数没啥关系),所以,设计的这一组U和V满足schmidt分解的要求。

    这里的奇异谱在schmidt分解里面又称为纠缠谱,纠缠谱数目的多少称为schmidt数。某种意义上来说,schmidt数反映了两个系统之间的纠缠程度。当且仅当schmidt数等于1时,ψ\psi可写成积状态也就是可分态,两子系统之间不存在纠缠性。另外,由纠缠谱可引伸出纠缠熵的概念。

    另一个问题,我们直接设定局部张量,我们怎么知道这样得到的MPS态和真实的量子态之间的误差是多大?
    在这里插入图片描述
    如果我的张量可以写成奇异值分解的形式,我就可以衡量两者之间的误差。

    在这里插入图片描述
    这边是为了凑出奇异值分解的形式,如果要满足奇异值分解,则两边的矩阵应该是酉矩阵。而下方的a,b,c,d条件实际上在TT分解的过程中就应当保持的(在这里可理解成,左边分出了左特征向量矩阵,右边是把右特征向量矩阵分出来了)
    在这里插入图片描述
    对比之前的TT分解图,这里的分解是有一定的区别的(在新增加的对角阵的右边)
    在a,b,c,d条件下,大家可以自行证明U×UU\times U^*=II(证明的时候式子比较长,缩并的维度也比较多,要仔细一点),所以如果我们能把量子态写成这样的形式,同时满足a,b,c,d,e条件,那么这样的形式我们就可以称为MPS态的SVD形式。联系前面所提的schmidt分解的内容,这样SVD形式中的Λ\Lambda反映了前k个子系统与其余系统的纠缠关系。

    展开全文
  • 前两天我主要学习了卷积神经网络的一些相关理论,并写成了一篇博客,这一期 ,基于前面学习过张量矩阵乘积态的相关基础理论深度学习中的卷积神经网络,我们下面将学习论文中 是如何将这二者完美的结合在一起!...

    前两天我主要学习了卷积神经网络的一些相关理论,并写成了一篇博客,这一期 ,基于前面学习过张量中矩阵乘积态的相关基础理论和深度学习中的卷积神经网络,我们下面将学习论文中 是如何将这二者完美的结合在一起!

    一.深度学习简介

    作为机器学习最重要的一个分支,深度学习近年来发展迅猛,在国内外都引起了广泛的关注。然而深度学习的火热也不是一时兴起的,而是经历了一段漫长的发展史。接下来我们通过一张图片就可以大概的了解一下它的发展历程:
    在这里插入图片描述
    作为机器学习发展到一定阶段的产物,近年来深度学习技术之所以能引起社会各界广泛的关注,是因为不光在学术界,同时也在工业界取得了重大突破和广泛的应用。其中应用最广的几个研究领域分别是自然语言处理、语音识别和图像处理。

    而我们这里需要深度理解学习的就是图像处理部分:

    事实上,图像领域目前算是深度学习应用最为成熟的领域。也正是由于深度学习算法在ImageNet图像识别大赛中远超其它机器学习算法、以巨大优势夺魁才推动了深度学习发展的第三次浪潮。目前,通过卷积神经网络(CNN)构建的图像处理系统能够有效的减小过拟合、对大像素数图像内容能很好的识别,在融合GPU加速技术后,使得神经网络在实际中能够更好的拟合训练数据,更快更准确的识别大部分的图片。总而言之,深度学习模型可谓是和图像处理技术的完美结合,不仅能够提高图像识别的准确率,同时还可以在一定程度上提高运行效率,减少了一定的人力成本!

    虽然对于一些特殊图像的处理我们的CNN 略有不同,但是CNN的 层级结构却总是确定的:即卷积计算层,全连接层,池化层和 非线性的元素激活步骤!

    结合我们之前学习的 minist 手写数据集,这里的全连接层就是用过一定的函数将输入数据信号最终返回对应的预测标签值。那么全连接层的操作可以用如下
    函数表示:

    y=WTx+b\mathbf{y}=W^{T} \mathbf{x}+\mathbf{b}
    在上次的 论文研读中,我们也学过这个函数,这里的 x 与 y 显然就是来自上层的输入和该层数据处理后的输出,通常是凭借向量或者矩阵的形式!W 就是 权重系数,它所代表的便是 输入神经元和输出神经元之间的关联强度,因为不同的数据特征矢量我们给予的 权重也是不同的!b 就是与y 同维度的一个偏置矢量!

    根据我们前面所学的知识:一维哈密顿量的基态可以用矩阵乘积态来表示,多自旋量子态的系数算符可以用矩阵乘积态表示为矩阵乘积算符(MPO) , 至此 ,就将指数爆炸增长的问题转移为参数成线性增加的多项式增加模型!所以 ,如果我们能用这样的思想来代替深度学习中全连接层中的 大量参数,那么我们的图像数据问题 相关的计算难度会瞬间降低!

    二 . 矩阵乘积算符回顾

    我们之前的几期博客都详细的介绍了什么是矩阵乘积算符和相关的重要知识点,并且是结合多自旋量子态的算符方法,这里我们还需要做一个简单的回顾,温故而知新嘛!

    这里我们就不再介绍张量的新表示法和相关的内容了,直接看一下对于多体量子态,如何用MPS 表示:一个量子态可以用一个完备基矢表示的波函数表示,例如对于N 体波函数 的 Ψ|\Psi\rangle 可以表示为:

    Ψ=i1i2iNCi1i2i3iNi1i2iN|\Psi\rangle=\sum_{i_{1} i_{2} \ldots i_{N}} C_{i_{1} i_{2} i_{3} \ldots i_{N}}\left|i_{1} i_{2} \ldots i_{N}\right\rangle

    其实这里就是基矢的一个叠加,其对应的权重系数也就是张量元素Ci1i2i3iNC_{i_{1} i_{2} i_{3} \ldots i_{N}} , 那们,对于的物理算符系数就是:

    O^=i1i2iN,j1j2jNOi1i2i3iNj1j2jNj1j2jNi1i2iN\hat{O}=\sum_{i_{1} i_{2} \ldots i_{N}, j_{1} j_{2} \ldots j_{N}} O_{i_{1} i_{2} i_{3} \ldots i_{N} j_{1} j_{2} \ldots j_{N}}\left|j_{1} j_{2} \ldots j_{N}\right\rangle\left\langle i_{1} i_{2} \ldots i_{N}\right|

    这里我们在前面也做了非常详细的解释,可以假设每个粒子的局部自由度为 dd , 对于所有 nn ,ini_{n} 从1 取到 dd ,所以权重张量和算符系数张量的 分别具有 dNd^{N}d2Nd^{2N} ,我们之前是以单自旋量子态和多自旋量子态为例,向大家详细解释过,传送门~~

    我们传统的张量网络在可以转换为一维形式下的矩阵乘积态,对于前面的张量CCOO ,我们用公式表达:

    Ci1i2iN=k1k2k(N1)Ak1(1)[i1]Ak1k2(2)[i2]Ak(N1)(N)[iN]C_{i_{1} i_{2} \ldots i_{N}}=\sum_{k_{1} k_{2} \ldots k_{(N-1)}} A_{k_{1}}^{(1)}\left[i_{1}\right] A_{k_{1} k_{2}}^{(2)}\left[i_{2}\right] \ldots A_{k_{(N-1)}}^{(N)}\left[i_{N}\right]

    这里的 A(i)A^{(i)} 就是定义在 ii 处理一个局域张量 ,k1,k2kNk_{1},k_{2}\dots k_{N} 是我们引入的辅助指标,为的是把 原本的矩阵形式的局域张量链接在一起!并且每个局域张量都是直积的形式结合!对于物理算符 OO 来说,它的公式表达为:

    Oi1iNj1jN=k1k2k(N1)Bk1(1)[i1j1]Bk1k2(2)[i2j2]Bk(N1)(N)[iNjN]O_{i_{1} \cdots i_{N} ;j_{1} \ldots j_{N}}=\sum_{k_{1} k_{2} \ldots k_{(N-1)}}B_{k_{1}}^{(1)}\left[i_{1} j_{1}\right] B_{k_{1} k_{2}}^{(2)}\left[i_{2} j_{2}\right] \ldots B_{k_{(N-1)}}^{(N)}\left[i_{N} j_{N}\right]

    下面的图片分别对应这两个公式:

    在这里插入图片描述
    显然,(a) 是权重张量CC 和它的矩阵乘积态表示,(b) 就是物理算符系数 OO 和它的矩阵乘积态表示!

    说了这么多,引入这两个东西的主要目的就是减少参数,绕过指数墙这一问题!本来对与一个多粒子量子态的系数张量,它的维数有 2N2^{N},但是现在,我们回过头来看 ,参数只有 D2d(N2)+2DdD^{2} d(N-2)+2 D d ,这里的DD 就是我们增加的辅助指标的个数,也叫键维数。对于张量OO来说,参数减少为:D2d2(N2)+2Dd2D^{2} d^{2}(N-2)+2 D d^{2}NN 越大,这里的优势就越明显!

    三 . 全连接层与MPO的结合

    我们再把目光转移到CNN上,对于一个完整的图像处理,我们一般把卷积核都会设置的非常小,因为在不知道具体图像包含的特征位置和数量的情况下,维度较小的卷积核能更好的为我们搜集图像信息,而卷积核过大可能会遗漏一小部分,又因为一般的图片维数非常高,在后面全连接层接受这些参数之后,代入相应的映射函数,又会增加参数的数量,比如:对于全连接层来说,输入 x 和输出 y 元素个数分别为 NNMM ,那么权重参数矩阵WW 中元素就会是 N×MN\times M 个,本身 NNMM就已经很大了,这样对你的CPU来说就有点麻烦,所以我们需要探寻一种新方法!

    根据前面所说,MPO的降维效果在全连接层的应用是否有效?

    先将WW 中的大量参数分成 Wij=Wi1i2in,j1j2jnW_{i j}=W_{i_{1} i_{2} \ldots i_{n}, j_{1} j_{2} \ldots j_{n}} ,显然满足:i=1nIi=N,i=1nJi=M\prod_{i=1}^{n} I_{i}=N, \quad \prod_{i=1}^{n} J_{i}=M

    在这里插入图片描述这里我们就不再详细解释了,不过必须要知道的是,连接的实线就是权重系数,也就是组成WW 的元素!

    直接将全连接层的权重系数 用MPO来表示为:

    Wi1i2in,j1j2jn=k1k2k(n1)ωk1(1)[i1j1]ωk1k2(2)[i2j2]ωk(n1)(n)[injn]W_{i_{1} i_{2} \ldots i_{n}, j_{1} j_{2} \ldots j_{n}} =\sum_{k_{1} k_{2} \ldots k_{(n-1)}} \omega_{k_{1}}^{(1)}\left[i_{1} j_{1}\right] \omega_{k_{1} k_{2}}^{(2)}\left[i_{2} j_{2}\right] \ldots \omega_{k_{(n-1)}}^{(n)}\left[i_{n} j_{n}\right]

    iijj正好和我们映射函数的输入和输出相对应,那 w(i)w^{(i)} 就是一个尺寸为Ki1×KiK_{i-1} \times K_{i}, ,当然开头结尾的局域张量还是三阶的,KK依然是引入的虚拟辅助指标,图示表示为:
    在这里插入图片描述这两个图片长得就非常的相似,空心圆圈代表的是指标 imi_{m}iji_{j} ,wm[i,j]w^{m}[i,j] 代表的是一个矩阵,(a)中WW 的左右两边代表的就是输入和输出!

    这样的话,我们理论上是可以将维度大幅度降低,从而实计算效率的提升!

    展开全文
  • 对于手性CFT,近似值采用矩阵乘积状态的形式。 对于由手性反手性部分组成的完整CFT,近似值由有限相关状态给出。 我们表明,键维数在逼近误差的反函数中呈多项式缩放,而在最小dis的反函数中呈亚指数式增长
  • 1. 张量 tension 2. 矩阵 Hadamard 乘积 转置矩阵( transposed matrix):矩阵 A 的,表示为: 3. 导数 y =f (x) 的导函数 f ‘(x): 当 ∆x 无限接近 0 时“(∆x 的式子 )”接近的值,f’(x) 表示图像切线的...
  • 张量学习(7):张量乘积

    千次阅读 2020-11-21 10:15:58
    张量积(积张量):有两个任意阶张量,第一个张量的每一个分量乘以第二个张量中的每一个分量,它们组合的集合仍然是一个张量,称为第一个张量乘以第二个张量乘积张量积的阶数等于因子张量阶数之。 例如:...
  • 这是「橘子AI笔记」的第 4 篇推送前段时间看过一些矩阵求导的教程,在看过...本文旨在帮助您学习向量、矩阵和高阶张量(三维或三维以上的数组)的求导方法,以及如何求对向量、矩阵和高阶张量的导数。01.简化,简化,...
  • ITensor库还包括可组合和可扩展的算法,用于优化和转换张量网络,例如矩阵乘积状态和矩阵乘积运算符,例如DMRG算法。 西蒙斯基金会下属的熨斗研究所(Flatiron Institute)支持ITensor的开发。 安装 ITensors...
  • tensor tool 张量工具包

    2018-05-17 10:24:21
    张量tucker分解、CP、PARAPAC分解,khatri-rao积,以及张量和矩阵乘积等代码
  • 矩阵论记号约定​zhuanlan.zhihu.comKronecker张量积与线性矩阵方程张量积的矩阵形式 是双线性映射,称为Kronecker积。常用性质不加证明地罗列如下:[结合律] ,其中 ;[混合乘积] ,其中 ;若 ,则 ; , ; ,注意...
  • 矩阵论记号约定​zhuanlan.zhihu.comKronecker张量积与线性矩阵方程张量积的矩阵形式 是双线性映射,称为Kronecker积。常用性质不加证明地罗列如下:[结合律] ,其中 ;[混合乘积] ,其中 ;若 ,则 ; , ; ,注意...
  • 使用python tensorly 实现张量tucker分解

    千次阅读 热门讨论 2018-06-22 11:51:25
    Tucker Decomposition可以看作是张量的PCA(principal components analysis),将一个张量分解为一个核心张量和因子矩阵乘积形式 采用tucker函数来进行TD分解,首先需要设定rank import tensorly as tl import ...
  • 这里写目录标题TEBD算法定义TEBD算法计算...TEBD算法为一种基于矩阵乘积态的、近似收缩张量网络的数值算法。从处于边界的张量构成的MPS开始,一行一行或一列一列地收缩张量网络。 把张量网络沿水平方向从中间分成两部
  • 在本文中,我们以类似纪梵塔的方式表达了一些简单的随机张量模型,即微分算子作用于通用1-Hermitian矩阵模型的乘积。 最后,我们得出这些张量模型的Hirota方程。 我们的分解是实现此类模型可集成性的第一步。
  • 矩阵基础复习

    2019-03-05 17:36:48
    标量、向量、矩阵和张量 ...矩阵乘积:C=AB,其中,A: m * n; B: n * p; C: m * p ​ Ci,j=∑kAi,kBk,j 点积: xTy 矩阵乘积性质: 单位矩阵逆矩阵 单位矩阵:任意向量单位矩阵相乘,都不会改变,...
  • B 1及其无限梯度对称乘积符号(×B 1)∞的情况分别对应于通常的高自旋理论及其多粒子扩展。 推测多粒子B 2高自旋理论与弦理论相关。 预期p> 2的B p-高自旋模型是对rank-p边界张量sigma模型的对偶。 具有p≥2的B p...
  • 矩阵分解一样,我们希望通过张量分解去提取原数据中所隐藏的信息或主要成分。当前主流的张量分解方法有CP分解,Tucker分解,t-SVD分解等,更新的方法大多是在他们的基础上做进一步的改进或引用。因此,张量分解也...
  • 矩阵相乘的实现方法

    2020-05-24 11:17:40
    矩阵相乘问题作为一个工作中科研中常用的简单计算问题,在处理大批量数据任务中显得尤为重要。目前不论是基于pytorch还是tensorflow的深度学习框架,数据的...例如实现矩阵A(25)和矩阵B(52)的乘积: A: 1 2 3 4 5 6 7
  • 张量指数函数已经广泛应用于控制论、图像处理各个工程领域.鉴于此,在矩阵广义逆的基础上,首次在张量内积空间上定义一种有效的张量广义逆,从而构造张量Padé逼近的一种连分式算法.利用张量t-积成功计算张量的幂,...
  • 机器学习基础——矩阵

    千次阅读 2017-11-06 22:39:42
    标量、向量、矩阵和张量标量:一个单独的数向量:一列数/一个坐标矩阵:一个二维数组张量:坐标超过二维的数组转置:矩阵以对角线为轴的镜像矩阵向量相乘矩阵乘积:C=AB,其中,A: m * n; B: n * p; C: m * p​ Ci...
  •   这里将一个三阶张量分解成了两个二阶张量和若干个三阶张量的乘积,如果我们用等式来表达这个过程会显得麻烦,此时,新的方法就起到了作用。 定义:给定一个N阶张量,如果能将其分解成N个二阶或
  • 张量分解(三)】Tucker分解

    千次阅读 2020-04-28 18:23:30
    本文是对论文Tensor Decompositions and Applications进行了翻译、整理、筛选...Tucker分解可以看作是主成分分析(PCA)的一种高阶版本,其将张量分解为一个核张量与每一维度上对应矩阵乘积。具体来说,以三阶张量...
  • 概述 传统上,使用CANDECOMP / PARAFAC(CP)或Tucker模型或其某些变体,将... 让人想起矩阵分解,我们提出了一个新的张量分解,将其作为张量乘积。 为了导出新的因式分解,我们定义了张量之间的闭合乘法运算。 ...
  • 等式矩阵的词和规范性矩阵乘积的一些奇异值不等式Hadamard积的Schur补和矩阵不等式关于0,1的对称和规范矩阵有固定行和的0与1元素的规范矩阵张量对称类的指标与非零可合元素关于在瓤(R,S)中(0,1)一矩阵的精确数,...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

张量和矩阵乘积