Compact Neural Networks based on the Multiscale Entanglement Renormalization Ansatz 解读

1.背景

目前的机器学习与量子物理之间的关系:
在这里插入图片描述
虽然量子计算机具有并行性,可以很好的解决上述问题。但是,量子计算机还没有研发成功,因此需要对量子态进行压缩表示:

对表示波函数的张量进行分解,可以实现一定程度的压缩

分解得到的最优结构(如MPS,PEPS,TTN等)由量子系统的关联结构确定,这样的关联结构可以与神经网络联系起来。

最简单的分解是MPS,它已经用于表示神经网络中的线性层:

①减少了神经网络的参数量
②只造成很小的精度损失

TTN虽然也有应用,但是也有其缺点(后面会讲!!!)


本文采用MERA来替代神经网络的线性层,与tensor train(张量火车)分解的方式相比:

在相同精度水平上提供了更高的压缩,在相同的压缩水平上拥有更高的精度

2.线性层的张量分解

核心思想:将线性层表示为张量

在这里插入图片描述

解决方案:将一个矩阵𝒲重塑为一个更高维的数组

假设:𝒲 维数为 d n × d n d^{n}\times d^{n} dn×dn,假设其中的参数为 W a b W_{ab} Wab

将𝒲转换成2𝑛阶的张量:

在这里插入图片描述
如图:
在这里插入图片描述
在这里插入图片描述


由于上述形式的张量参数量相当大,那么如何解决呢?


解决方案:𝒲的tensor train分解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
维数变化原理图:
在这里插入图片描述

tensor train性质:
1.有效捕捉数据间尺度为𝑙𝑜𝑔𝐷的相关性
2.具有高度局部性
3.两端的张量相关性很弱
注释:其中第一点来自于纠缠熵的概念
在这里插入图片描述


分层结构的张量网络可以更好地表示整个线性层的相关性


例如:树张量网络
在这里插入图片描述
在这里插入图片描述
树状连通性使网络充满因果结构,张量及其输出由以下影响:
1.树中的高度
2. 输入
为什么这种因果关系会影响到张量呢?
答:在后面会用高斯权重初始化构建张量,同时也会受到输入数量的影响。
在这里插入图片描述


以前在神经网络的背景下研究过的简单树网络有一个主要的缺陷:


在这里插入图片描述

在极端情况下,相邻输入之间的相关性仅由网络末端的张量控制
解释:
i 4 i_{4} i4 i 5 i_{5} i5为例子, i 4 i_{4} i4依次通过1,2然后到5; i 5 i_{5} i5依次通过3,4然后到5。即要捕捉 i 4 i_{4} i4 i 5 i_{5} i5之间的关系需要到5处才能处理,这也就是所说的“在极端情况下,相邻输入之间的相关性仅由网络末端的张量控制”


为了解决这个问题,引入了MERA


在这里插入图片描述

解缠器的作用:使同一长度尺度上的所有相关性得到相似的处理
解释:
i 1 i_{1} i1 i 2 i_{2} i2的相关性被1捕获和处理, i 2 i_{2} i2 i 3 i_{3} i3的相关性被2捕获和处理,依次往后。这也就是说相邻之间的相关性将会在同一层得到处理。
例如,任何两个相邻输入索引 i n i_{n} in i n + 1 i_{n+1} in+1 之间的相关性将被第一行树元素或解缠结器捕获
这使得网络中的后面元素能够捕捉更长范围的相关性


如何构建秩为𝑁的MERA层呢?


Step1.创建一个树张量层
在这里插入图片描述

Step2. 解缠结器
在这里插入图片描述

3.对比实验

实验四大框架

在这里插入图片描述
在这里插入图片描述


数据集

在这里插入图片描述


实验结果

在这里插入图片描述

4.相关工作

在这里插入图片描述
一些工作讨论了重整化群和深度学习之间的关系,这里只采用MERA代替全连接层

5.讨论

1. 实验结果表明用MERA替代CIFAR-10分类中的全连接层,减少了14000倍的参数,而准确率仅降低了不到1%。而且它的性能优于用张量火车替代全连接层的模型

2. 它的分解层可以潜在处理更大的输入,避免大数据集下的过拟合,但它训练时间可能更长

6.未来工作

1.怎样将MERA的输入reshape成12阶张量,还需要实验进一步说明

2.简单的训练2D MERA直接作用到输入上或仅用二维 MERA 替换网络的卷积层

3.采用纠缠来衡量神经网络中的分布关联,进而来优化和设计网络

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数: gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点: 完后运行,r gdb 中的有用命令 下面是一个有用的 gdb 命令子集,按可能需要的顺序大致列出。 第一列给出了命令,可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布: 一元高斯分布:(将多元高斯分布中的D取值1) 其中代表的是平均值,是方差的平方,也可以用来表示,是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch ,简称ES 。是一个全文搜索服务器,也可以作为NoSQL 数据库,存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项: (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候,访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议:以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么? 在java规范中是这样描述的:Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联,线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口,远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能,出了大概一年了。 程序员们在编程时遇到不会的问题,又没有老师可以提问,就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法,但是不一定得到回复,…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎,题目很狗,第一次踩这个坑,单拉出来写个题解记录一下 题意:给一个数字矩阵,一次操作:对于每一行,可以去掉左端或者右端的数,得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1)全特化2)偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类: 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…