历时半个多月,我们终于从刚开始的张量学习 ,到现在的张量网络,本人真的是一路艰辛,哎 ,打油诗一首表心意:
本是计科专业狗,年少无知四顾首。
无奈量子吸引我,前路茫茫无处走。
早知人生本就难,科研门前抖一抖。
陷入深渊尚未知,乐此不疲直挥手。
半路出家尝滋味,心理防线已失守。
老板教诲不敢忘,硬着头皮往前走。
其中滋味难传达,卿知否?卿知否?
前路迢迢虽泥泞,组内都是好盆友。
光阴不可再虚度,忆往事痛心疾首!
下定决心埋头干,吾定要大显身手!
祖国崛起志士缺,天下英雄谁敌手?
夜半三更睡不着,写首诗精神抖擞。
Tensor network learning
一 . 张量网络的基本表示方法
我们前面曾经简单的为大家介绍过用圆形点和线结合的方式来表示不同维度的张量!这里我们继续深入了解:
除此之外,您还需要知道:
示意图 | 目的 | 结果公式 |
---|---|---|
一阶张量的内积 | ||
矩阵与张量的乘积 | ||
二阶张量 求迹 | ||
四阶张量 求偏迹 | 对其中的某一个部分求迹 |
还记得我们在前面刚开始学张量的缩并的时候说过:矩阵的乘法就是张量的缩并,我们先来看看传统的矩阵乘积算法:
我们用新的张量(矩阵)表示法看如下图所示:
注意,具有相同索引
j
j
j 的边是缩并的边,这与两个矩阵只有在输入/输出维度匹配时才能相乘,同时结果图片有两个自由索引,即 i 和 k,他们又组成了一个新的矩阵。后面有一系列非常好的动态图片帮助大家理解,此时
j
=
k
j=k
j=k:
同样的,对于高阶张量的缩并我们也可以利用矩阵乘法的原理类比一下:
回过头来,这些都比较低维的张量表示,那么对于更高维的张量来说,新方法是否还能巧妙地表示呢?本期就是图片大赏~~
上面这幅图分别展示了4阶,5阶和6阶张量,每个张量中与点相连的线都代表了它的一个阶数,这里有个圆圈把点给圈住是啥意思呢?
圈内有线,圈外也有线,这就有讲究了!比如第一个四阶张量,直接与 “点” 相连的有三个 ,说明这个四阶张量是由三阶张量排成一排组成的,显然五阶张量是三阶张量排成一个矩阵的形式,那么圈外面就要有两条线了!
我们同样也可以用平面图来表示不同维数的张量,有了上面的基础,大家对下面的这幅图应该能有所体会了:
图片后面的英文也是解释的一部分,英文水平的高低将直接影响你科研的速度和效率!
现在我们再来看看张量的其他几种基本运算方法的图示 ,是动态图片,不动的鼠标放在上面点一下:
(1)如果是矩阵乘以向量,这里的
j
=
k
j=k
j=k:
(2)
H
a
d
a
m
a
r
d
Hadamard
Hadamard 积:
H
a
d
a
m
a
r
d
Hadamard
Hadamard 积就是两个大小相同的张量对应元素数字直接相乘就可了,得到的新张量维数和阶数都不变!
(3)两个向量的外积:
后面张量网络中常用的就是这几个 ,如果缺了某个知识点,我们到时候再补上。
为何张量网络如此好用?
张量是多维数组,按照阶数分类:例如普通数是零阶张量(也被称为标量),向量是一阶张量,矩阵是二阶张量,以此类推…… 虽然低阶张量可以简单地使用数组或者 T i j k l m ⋯ T_{ijklm\cdots} Tijklm⋯(其中角标的数目代表张量的阶数)这样的数学符号来表示,但如果我们要处理高阶张量,这种符号表示法就会很繁琐。
在这种情况下使用图解表示法(diagrammatic notation)是更好的选择。只需要画一个圆(其他形状也行)和由此延伸出去的若干条线,或称之为腿,而腿的数量表示张量的阶数。在这种符号体系中,标量是一个圆,向量有一条腿,矩阵有两条腿,以此类推…… 张量的每一条腿也有维度,就是腿的长度。例如,代表物体在空间中速度的向量就是三维一阶张量。
二 .张量网络初体验
将多个张量(包含向量、矩阵、高阶张量)按照特定规则缩并,形成一个网络,称为张量网络
许多个不同的张量通过缩并形成一个像蜘蛛网一样的示意图!
其中:连接维度(bond dimension)决定张量网络中组成张量的大小。连接维度越大说明张量网络越强大,但同时也需要更多的计算资源
在真正深入学习张量网络之前,我们需要明白一个道理,张量网络的图 包括前面我们说的新方法表示不同阶数的张量都不是一成不变的,他们都是具有灵活性的,比如这个中国的原点表示矩阵的线性变换关系,那么这个矩阵的转置又怎么表示呢,所以此时一味的用圆形表示就不合理了!
类似于这样,我们通过半圆的“方向”就很好的解决了这个问题。以此类推,对称矩阵转置不发生变化又该怎么表示呢?
这就有内味了!
前面我们说张量网络是将许多小的缩并在一起形成大的网络,但是有增就有减,也可以将大的张量网络或者是某一个张量分解成几个小张量,这就自然而然的让我们想到了前几期博客的 非负矩阵分解(NMF)和 奇异值分解(SVD)了:
大家可以按照前面说的将这些不同形状的矩阵对号入座! 总结一下就是:矩阵分解是将一个节点分解为多个节点;矩阵乘法是将多个节点融合为一个节点。,也可以用下面这个图来表示:
看似普通的图其实还蕴藏了这些图的另一个重要的特点:节点的空间位置,颜色都是不重要的唯一重要的是:图有两个自由边。矩阵的乘积是另一个矩阵!
下面我们来看看张量网络示意图来表示我们前面说的CP分解和Trucker 分解:
显然是一个四阶张量,右边的图表示的4个向量的外积(都在一个大圆圈内表示四个所有向量的外积),最后再求和就出来了,这个四阶张量的CP我们一般用不动,有些小伙伴看这个可能有点陌生,我们来看看个熟悉的:
上期博客也曾简单介绍过,第一个是CP分解,第二个是Tucker分解,区别就是核张量是否为对角矩阵,这里就不再赘述了!
除此之外,张量网络的方便简洁还体现在如下:
我们以典范矩阵化为例来对比一下传统的图示法和新张量网络示意图来对比一下:
右侧可以看到张量网络的表达非常简单也很有效. 3个点代表了中间还有很多按序排列的维的意思。
三 . 深化理解与量子过渡
细心的小伙伴可能发现了,我们上面的所有图片,基本上都是直线和点组成的,是不是只有直线呢?显然是不止的,下面我们一边介绍的张量曲线表示,一边向量子系统和MPS 矩阵乘积态做铺垫!
在量子力学中,我们通常把张量看做是一个具有索引的以数字为元素的数组:
和上面的图像表示有略微的区别,但是大体不变:(a)中是在空间
H
i
\mathcal{H_{i}}
Hi 中的张量
ψ
i
\psi_{i}
ψi ,那么三阶张量
T
j
k
i
T_{jk}^{i}
Tjki 所在空间为三者的直积,如下:
H
i
⊗
H
j
⊗
H
k
\mathcal{H}^{i} \otimes \mathcal{H}_{j} \otimes \mathcal{H}_{k}
Hi⊗Hj⊗Hk
这里有三个特殊的张量来代表我们原来学过的那个 Kronecker 函数(
δ
i
j
=
1
−
(
i
−
j
)
2
\delta_{i j}=1-(i-j)^{2}
δij=1−(i−j)2)
这三个图从做左到右分别对应下图的从上到下三个公式:
学习了前面公式的小伙伴们这几个公式应该是不难理解的!后面的张量网络中我们会遇到这几个图形。
从图表上看,两个张量指数的收缩相当于用一根导线连接这些指数,对于给定的张量 T j k i , A n l T_{j k}^{i}, A_{n}^{l} Tjki,Anl和 B m q B_{m}^{q} Bmq ,我们在张量中乘以 δ l j δ q k \delta_{l}^{j} \delta_{q}^{k} δljδqk ,形成一个收缩:
T
j
k
i
A
n
j
B
m
k
=
def
Γ
n
m
i
T_{j k}^{i} A_{n}^{j} B_{m}^{k} \stackrel{\text { def }}{=} \Gamma_{n m}^{i}
TjkiAnjBmk= def Γnmi
这里右边出现了一个新的式子(其实可以不看这个 原理与我们之前将的缩并一样,在量子系统中我们得这样表示):
下面我们再来看看张量里面的迹:
和前面一样,左边的(a)表示的是一个二阶张量的迹,(b)表示的是一个四阶张量,但是只有二阶张量有 “迹” 这个说法,我们把它拆成两个二阶张量的迹,所以中间图示表示的是
B
i
q
i
q
B_{i q}^{i q}
Biqiq 的迹,最右边那个高阶张量中某一小部分的迹,我们称之为“偏迹” ,前面表格中也有!
当两个或更多不相连的张量出现在同一个图中,它们用张量积相乘,在量子系统中,还是用 ⊗ 来表示张量积,图示化如下,图示中的张量积符号就省略了:
上面的图示我们可以用下面这个方程来表示,这里我们用导线扮演了单位张量的角色:
综合以上的内容,我们以后尽量的使用新图示法来表示张量网络及其之间的作用,而不在单纯的用数学符号表示: