利用无监督学习探测SSH模型中的拓扑相变

利用无监督学习探测SSH模型中的拓扑相变

我们今天聊点好玩的。

CS界最火热的莫过于人工智能技术了,其中最有趣的就是神经病网络;

而物理中近几年来最有意思的是超出朗道相变的拓扑相变理论。


最近,有人在使用机器学习相关方法去做相变的表征,例如:

https://www.nature.com/articles/nphys4037.pdf?origin=ppubwww.nature.com

我们发现,作者使用了无监督学习中的主成分分析(PCA)去分类Kitaev Model的纠缠谱(ES)从而得到拓扑分类;一个简单的问题是,这样的主成分分析是建立在ES已经成功分类的基础之上的,

来自上文。

而纠缠特征谱是一个相对本身就很高级的概念,我想指出,因为有限大小的格子,在能隙内存在边界上的无能隙的激发,仅仅通过本征谱或者本征函数就可以学习到拓扑相变,不需要ES将数据进行复杂的预处理。


为什么物理可以被机器学习?实际上,物理上的东西是比生活中的东西更加适合被机器理解的,一个简单的想法是,对于local的哈密顿,有一些所谓的domain wall;而在时间域上, \left| \psi(t+dt) \right \rangle=Norm(\left|\psi(t+dt)\right \rangle-iHdt\left| \psi(t+dt))\right \rangle 关联度很大,因此无论是N D统计或者是N+1 D动力学,至少传统的RNN,CNN看起来是优秀的,但是毕竟是炼丹,多得就不知道了。


我们先看一个低能力的例子,然后做作业的时候,我们大开脑洞。



本征函数的例子我将通过SSH模型给出,也就是我们这里的重点,而本征谱学起来很简单。

SSH的哈密顿量很简单,

拓扑相出现在 \delta t<0 的时候,由于是二次的,一两行命令就能写出来体系的哈密顿核:

diag1 = np.array(
        [1 + delta_t*(-1)**(i) for i in range(2*L-1)],
        dtype = complex,
        )
H = np.diag(diag1,-1) +np.diag(diag1,1)

然后我们可以随意将之对角化拿到不同能量下的粒子数分布:

w,v = blas.eigh(H)
N=np.real(np.conj(v)*v)

随后,N的第 N 列就对应了 w 中第 N 个本征能量对应的本征函数的分布,我们将之画出,得到拓扑相和非拓扑相下的分布:

红色圈圈就是我们的目标,也就是SSH模型在零能量附近的边缘态。


我们可以用电脑大量的产生这样的数据,我自己是产生了一大推,并且可以手动的加上on-site弱的disorder(也可以不加,但是拓扑是稳定的),我们现在随便写一个神经病网络,我用的是一个叫做派电筒(pytorch)的包,我们这样去写一个无监督学习:

class AutoEncoder(nn.Module):
    def __init__(self):
        super(AutoEncoder, self).__init__()

        self.encoder = nn.Sequential(
            nn.Linear(4*L*L, 128),
            nn.ReLU(),
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Linear(64, 2),  
        )
        self.decoder = nn.Sequential(
            nn.Linear(2, 64),
            nn.ReLU(),
            nn.Linear(64, 128),
            nn.ReLU(),
            nn.Linear(128, 4*L*L),     
        )

    def forward(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        return encoded, decoded

各个量的含义自明。

我们使用阿达姆优化器,小气的正方形错误作为我们的损失函数,我们在0前后随便搜8000个数据(可以是加无序的拓扑),然后patch成32个,然后shuffle了送进去,我们很快可以得到:

1标记的是有拓扑的,0标记的是没有拓扑的地方;收敛的很快,为了大家方便,我特意炼丹到一个比较慢的学习步骤上去,得到:

我们看到,学波函数简直是一个trivial的事情。



本征谱的一个简单的例子是,在有限大的方格子画磁通为 \Phi = {p \over q} 2 \pi 的能谱分布:

来自NPJ QI,2016,15,Wang,etc.

会发现在能隙中的本征值的个数 N_l 和总的本征值的个数 N 大概有着 1/l 的关系,其中 l 是体系的周长。如果上面的图太密集了不好看,就看我画的,懒得打标题了:


通过使用任何一种无监督学习的办法去学习本征谱,我们可以对体系的拓扑性质进行刻画(有无拓扑),至少通过我的测试,可以将体系分为Qauntum Hall (Z), Normal Insulator, 和Normal Mental. 这个看起来就更加基本一些了。通过本征谱学习拓扑,留作习题。


作业:

1、Qi Xiao-Liang 指出,[1712.01850] Determining a local Hamiltonian from a single eigenstate 对于一局域哈密顿的单一的本征态,就几乎足够得到整个哈密顿了。看起来很诡异,但是通过关联谱函数的研究,我们看到,事实确实如此。试构建合适的人工智障,基于单个本征态去判断体系是否有能隙。


2、对于相互作用体系,我们能否如此进行拓扑分类?对于非厄米体系呢?


3、试利用RNN去处理TEBD的前一段数据,证明,RNN对于某些体系确实具有预测能力。


4、试证明,上面的自炼丹过程(auto-encode)确实能够区分MBL态,无论这个态的数据来自ED还是来自DRMG-X。


蔡家麒,华中科技大学物理学院,

于18年10月作

Email: caidish艾特hust.edu.cn

Blog: https://physcai.com

代码太zz,就不开源了。

编辑于 2018-10-15

文章被以下专栏收录