当前位置: 首页 > news >正文

威海 网站建设深圳纯设计的室内设计公司

威海 网站建设,深圳纯设计的室内设计公司,海珠营销型网站建设,网络域名后缀来源#xff1a;机器学习研究组订阅号近日#xff0c;中科大校友、UC伯克利在读博士、知乎用户SIY.Z 在一篇近两万字的长文中#xff0c;详细分析了“量子计算机和传统电子计算机在算法方面的优劣势”。以下是原文内容:这是一篇我很早以前就想写的文章。我的目的是给稍有数学… 来源机器学习研究组订阅号近日中科大校友、UC伯克利在读博士、知乎用户SIY.Z 在一篇近两万字的长文中详细分析了“量子计算机和传统电子计算机在算法方面的优劣势”。以下是原文内容:这是一篇我很早以前就想写的文章。我的目的是给稍有数学等基础的人比较全面客观地介绍量子计算和经典计算在算法上的优劣势而且会涉及到方方面面可以说是一个大杂烩。我觉得我是有资格做这件事的因为 1. 我本人就是计算机科班出身的对计算机系统以及机器学习都有较为深刻的理解 2. 我本科参与过第一线的量子计算的研究 3. 我个人对多个学科都有涉猎因此可以不至于错的离谱地谈论一些实际应用问题。但是哪怕仅仅接触到最表面的一些问题如果要解释清楚都要花费巨大的精力去解释此外即使我写了这样一篇文章可能也少有人关注毕竟吧宣传知识本身在知乎上可能已经过时了渲染情绪要容易的多而且可以天天输出。所以说我写这篇文章也是靠了 “九章” 量子计算机的热度这让我稍微有动力一些。算法研究是一个非常非常复杂艰深的领域特别是我需要横跨量子和经典两大部分而且涉及到的应用涵盖了组合优化密码学生物学科学计算理论计算机等各个领域以个人水平很难涵盖完整。而且考虑到受众我有必要模糊化和简化一些概念而只保证核心思想是正确的。因此如果过程中有差错请多多包涵。此外这篇文章注定很长。与其说是读一篇回答不如说是看一本历史小说。第0章 算法和计算机0.1 什么是算法对于大部分日常问题我们不需要算法直接按照直觉去做就行了。然而对于一个稍微复杂的问题它的解决方案就不是那么简单直接往往需要一系列步骤。简单来说描述一个问题解决方案的步骤就是算法。给定一个问题的算法你就可以一步步的按照算法解决所有的类似的问题。其实生活中最明显的算法的例子是说明书它告诉你如何一步步地去按照说明书去完成一个功能比如说如何安装一个软件如何启动一个电器等等。如果只是考虑到这一步算法本身并没有什么魅力。其实在生活中算法往往被视作 “机械、死板” 的代名词。为什么人执行算法的能力是非常有限的。哪怕对于一个固定的算法人也需要大量的练习才能熟练解决问题而这个过程并不有趣长年按照 “算法” 去组装元件的流水线的工人应该深有体会。人执行算法的准确性很低。比如 DIY 一个玩具如果说明书只有 10 行那么大多数人还是很自信的如果发现说明书竟然要 100 多步那么很多人组装结束后如果发现结果不对会首先怀疑自己中间操作错了。记忆算法很困难。很多人玩过带 “秘籍” 的魔方可以按照说明书上的算法去慢慢还原魔方。但是一旦离开说明书很多人就难以自己操作这些算法需要一定的精力去记忆而且熟练度很大程度上取决于记忆的难度。极其复杂的算法的对人来说首要挑战是记忆而不是操作。算法描述的不精确性。说明书中的每一句话因为自然语言本身的缺陷和场景的复杂性都容易产生歧义。由说明书产生的困惑是人类共有的体验。由于以上这些问题在历史长河中算法并不是科技和生产力的核心问题。虽然算法可能启发来巴贝奇等人发明差分机但是这并没有扭转历史格局。直到 1936 年一位英国的计算机学家数学家逻辑学家密码分析家兼理论生物学家世界级长跑运动员在数学上证实了一个无比强大的机器的存在。在他生后计算机科学的最高成就会以他的名字命名。0.2 执行算法的终极机器——图灵机试想一下在 100 年前有人告诉你存在这样一种机器这个机器非常简单至少是在数学模型的意义上。这个机器的输入的格式是有限的这个机器可以执行的操作也是有限的。所以在现实中你可以用有限的零件制造它。需要构成这个机器的基本操作都是非常简单的而且只需要固定的时间就可以完成。这个机器是万能的。只要你能够用逻辑和数学描述一个算法它就能自动执行它。这个机器是通用的它可以模拟任何一种计算机器包括它本身。没有任何一种机器在使用算法解决问题上比它更加强大。如果一个问题它不能解决那么其他机器也一定不能解决。你会相信这样一种机器的存在吗1936 年前后阿兰 · 图灵Alan Turing构造式地证明了这样一种机器的存在下面是一种更加简单但是更加接近现代计算机的一种图灵机构造而不是最初的 “纸带” 版本我们在之后会多次提到它1. 定义一个集合。这个集合中的元素称为 “符号”。的大小是有限的一般很小。2. 定义一个集合。中的元素称为“状态”。有一个特别的状态称为“终止”另一个特殊状态称为“初始”。3. 图灵机存在。是中的一个元素, 是一个整数是一个符号现代计算机中基本对应于“寄存器”。4. 图灵机存在一个列表。中的每一个位置都独立保存有一个符号。现代计算机中 基本对应于“内存”。5. 定义一个转移函数。对应了 4 类操作操作 1 停机: 对应于终止状态时图灵机停机操作 2读取: 是某些状态时更新的符号为操作 3写入: 是某些状态时更新的符号为操作 4计算: 是某些状态时更新为另外一个状态。我们一般要求的每一步执行都不多于一个常数时间。现代计算机中基本对应于“控制单元和运算器”。6. 图灵机的运行一开始设置为初始状态将输入以符号方式写入反复执行 直到停机。停机时的内容对应了输出。不过阿兰 · 图灵发明这台机器最初的动机并非来自于算法而是为了解决逻辑学和数学问题特别是数论公理化和数理逻辑等最根本的数学问题。当时和他在一个圈子里面的人是希尔伯特哥德尔邱奇等人因此整篇论文充满了逻辑学的风格。这也让图灵机在最初并没有很快走出圈外为公众所知。在二战期间图灵将大部分精力投入到了破译纳粹的密码中并获得了巨大成功。然而随后人们发现图灵机并不仅仅是一个数学玩具它是执行算法的最理想的万能机器。我们来看图灵机为何如此适合算法上文中提到了人类自己执行算法的缺陷其中人执行算法的能力和准确性问题并不适用于机器机器不会疲劳不会出错不会有负面情绪而算法的记忆问题在图灵机中只要把算法转换成一串符号写入到中就可以了自然也没有问题而算法描述的不精确性也是不存在的在图灵机中算法就是一堆符号决定的严格按照来执行不存在不准确。所以最终问题只剩下 4 个如何确定一个问题可以被图灵机解决。如何设计算法。如何将算法变成一堆符号。如何制造图灵机一样的机器。其中对于 “可计算性” 问题的研究回答了问题 1 中的一些重要问题。人们知道一些经典问题比如“任意图灵机的停机问题”是不能被图灵机解决的。对于问题 2算法设计也有了长足的发展成为计算机科学的重要领域。本文中会继续扩展这一段。图灵机的出现改变了算法和机器的关系从前人们希望为算法找到一个机器而现在人们为了机器设计算法。现代编译原理程序语言设计和软件工程解决了问题 3。这部分仍然在不断进步。问题 4 我们将在 0.4 节中说明并且我们还会引入量子计算的概念。0.3 通用计算机——一样的模型不一样的概念图灵机从数学模型到具体应用的道路上一个重要的节点是 “通用计算机” 这种思维的兴起。早在 1937 年图灵就意识到因为图灵机的强大特性一台图灵机可以同时模拟一台甚至多台图灵机现在最直接的应用就是虚拟机。图灵等将这种模型称为“通用图灵机”或者“通用计算机”。但是当时人们只是把它当作一个有趣特性并不是特别在意毕竟模拟另外一台图灵机并不会加快解决问题的速度只能做理论分析时用一用而且它只是一种概念在具体的实现上并不会和图灵机有区别。所以 1946 年制造的第一个电子计算机——ENIAC仍然 “忠实” 地按照图灵机的方式执行对于每一个算法首先去拨动一堆开关设置好也就是计算机的“内存”然后启动机器等到停机时再读取结果。ENIAC 电子计算机然而在 1946 年就是 ENIAC 诞生的同一年冯诺伊曼领悟到了 “通用计算机” 真正的意义并发表了奠定现代计算机体系结构和软硬件生态的一篇论文冯诺伊曼关于电子计算机的论文其中提到了 “存储程序计算机” 和“通用计算机“的概念冯诺伊曼想到既然通用图灵机或者通用计算机可以模拟任意一个图灵机而每个图灵机都可以执行任意的算法那么是不是意味着我可以将所有的算法都放在同一个图灵机里面然后用另外一个算法或者是操作员去选择我要具体执行哪个算法这样一来我就可以将所有的算法都预先准备好然后需要时直接选择这个算法运行就可以了而不用像 ENIAC 一样每次都要重新设置所有的开关。冯诺伊曼的这种想法非常简单也许很多人在他之前就想到了。但是冯诺伊曼意识到这样可以更进一步写算法的人和机器的分离。我只要给机器写一个说明书告诉大家这台机器所有支持的 “操作”称为“指令集”以及每个指令对应的符号编码称为“机器码”这样大家就只要用这些指令去描述算法由于是图灵机必然可以用这些指令的组合描述所有的算法然后把指令一个个翻译成机器码刻录到纸带上。冯诺伊曼把这种纸带上的内容称为“程序”。这些纸带可以远程寄给计算机操作员然后每次执行前就用另一个“转录” 程序把纸带上的内容写到计算机的内存里面再用一个 “启动” 程序去执行这段程序最后再用一个 “输出” 程序把结果打印出来寄回给原来写程序的人。冯诺伊曼称这种这种通用计算机为“存储程序计算机”同时这种计算机的出现导致了一个新的职业的出现——程序员。有趣的是最早的程序员更多的是女性可能是当时的人觉得女性更加耐心而刻纸带在固有印象中更像是“编织”。0.4 在物理世界中制造通用计算机如何将图灵机 / 通用计算机的数学概念变成一个真实的机器呢对应图灵机的数学概念我们需要状态的集合符号的集合列表和函数的物理实现。冯诺伊曼等很快意识到无论是状态还是符号在本质上都是状态。由于符号是有限的我们可以将每个符号一一映射到不同的状态上。而符号的列表只是把一堆状态组合到一起罢了。对状态我们只有三个要求我们可以区分不同的状态。我们有足够多的的状态如果我们知道具体的状态那么我们就可以将它改变为另外一个具体的状态。现实中的物理状态正好符合我们的要求——比如电压的高和电压的低就对应了两个状态。因为它们的物理特性不同我们可以区分两个状态。同时我们有电子元件可以在两个状态之间任意转化。我们将两个物理状态称为 0 和 1这种基本单元也称为“比特bit”同时冯诺伊曼等人发现只要最基本的 0 和 1我们可以构造出越来越多的状态而这些状态依然满足我们要求而方法很简单就是将更多的 0 和 1 组合起来比如 00011011 就是满足我们要求的 4 个状态总之个比特就能够表示个状态。这样要求 1 和 2 就满足了。但是我们如何控制这么多状态呢答案是 “组合逻辑” 这种技术。组合逻辑中有一个特殊的 “元件” 叫 NAND 门“门”这个词出自于电路。如果输入状态是 00011011那么输出就分别是 1110。这也称为 NAND 的真值表。此外还有一个没什么存在感的东西复制也就是把输入复制成任意多份在电路中就是一根导线分成两根。不要小看复制这是一个非常重要的操作我们在之后可以看到在量子力学中一般的复制竟然是禁止的这导致了量子计算机和经典计算机的重要差异。NAND 门的真值表然后组合逻辑的一个重要结论是只要有 NAND而且可以任意复制那么我们可以实现任意多比特作为输入的任意变换。这里举一个简单的例子取反操作也就是将 0 变成 1将 1 变成 0。对于一个输入 x首先我们将它复制一份然后将两个 x 都输入到 NAND 中我就可以实现取反。通过 NAND 的真值表很容易验证这一点。有了组合逻辑之后给定一个图灵机中的函数我们就能实现它无论它多么复杂。在硬件实现上本质上是利用物理模型的演化规则来控制物理状态比如晶体管是通过固体物理的一些原理控制电路的电压电流从而控制每个比特的状态是 0 还是 1。好了我们终于搞定了状态的问题下面就容易多了我们只要将图灵机的各个部分变成各个部件就能够给出一个完整的设计图了冯诺伊曼体系结构这个设计又称为冯诺伊曼体系结构。其中内存单元Memory Unit对应了图灵机的  每一个都对应了独立的一些比特中央处理器CPUCentral Processing Unit对应了状态 和函数。又具体细化为改变的控制单元Control Unit和改变的计算 / 逻辑单元Arithmetic/Logic Unit这些单元都可以由组合逻辑实现而都是一些比特组成的。此外为了实现冯诺伊曼“存储程序计算机” 的想法计算机需要输入设备和输出设备这样我们可以通过输入设备将程序写入到内存单元中将结果从内存单元输出到输出设备。冯诺伊曼体系结构奠定了现代计算机体系结构的基础沿用至今。不过当今计算机做了一些优化比如说不再区分和而且它们的数量有多个称为 “通用寄存器组”。而 所含的比特数称为计算机的“位数”基于不同的的位数的程序 / 操作系统被称为 xx 位程序 / xx 位操作系统比如 32 位和 64 位程序。此外由于 memory 操作慢于逻辑和运算现代计算机中的“Memory Unit” 是分级的CPU 拥有自己的容量更小但是操作更快的 memory unit称为“缓存”Cache而在 CPU 之外有着一块容量更大但是操作更慢的 memory unit这才是现在我们所指的“内存”。现代计算机中的优化要比绝大多数人所想的复制的多需要系统学习才能全部掌握限于篇幅我不就不再继续扩展了。0.5 物理状态与通用计算机在上一节中我们大概了解了如何在物理世界中制造通用计算机。我们的途径是在物理模型中找到一个基本的物理状态。确保这个物理状态可以通过组合产生任意大的状态。利用物理模型的演化规则来实现从而可以控制状态。在电子计算机中物理模型的演化规则是基于固体物理的固体物理中研究了半导体等的能带问题本质上还是基于量子力学我们甚至可以说现代电子计算机就是基于量子力学的量子力学已经给计算机带来了巨大的革命。那么又是什么东西使得其他计算机机真正区别于 “电子计算机” 呢答案是状态电子计算机使用电压表示状态用固体物理的性质控制状态。生物计算机使用 DNA 和其他化学物质表示状态用酶和其他化学物质控制状态。光学计算机使用光的性质表示状态用光学元件控制状态。量子计算机使用 “量子叠加态” 表示状态用固体物理 / 光学元件 / 光学共振腔等控制状态。生物计算机等的概念大家应该很久前就听过但是为何现在主流的还是电子计算机本质上是因为它们的状态并没有给它们带来根本性的优势相比而言电子计算机基于晶体管的设计倒是有极大的优势极高的内部元件集成度。这意味着可以在极小的空间内实现功能。这对硬件运行速度有很大优势。现代电子元件的主频可以达到 5GHz也就是每秒钟至少可以进行 50 亿次操作即使按照真空中的光速每次操作控制信号只能走 6 厘米何况任何物理体系内控制信号都无法始终以真空光速传播且整个路径不一定是直线。其实在拥有 2 个 CPU 的高端服务器上已经可以感受到光速的限制这个例子并不确切但是背后的原因是类似的由于内存一般紧贴每个 CPU所有对每个 CPU 而言对方 CPU 的内存要离自己更远一点而离每个 CPU 较近的内存访问要比较远的内存访问更快称为 NUMA非对称内存访问这是高性能计算软件优化的重点之一。有 2 个 CPU 的高端服务器主板。可以看到每个 CPU 旁边有紧贴有 4 个内存槽。每个 CPU 访问它旁边的内存要快于访问另一个 CPU 的内存。2. 极高的可扩展性。基于电信号和光电转换电子计算机可以轻易组网。现在全世界计算机都在互联网上已经不足为奇了。对于高性能计算等领域可以使用内部的高速网络将大量电子计算机互相连接起来从而成倍地增加运算速度实现高效的并行计算这类计算机也被称为“超级计算机”。对于其他类型的计算机我们尚不知道怎么大规模扩展。3. 极高的稳定性。从零下到接近 80 度电子计算机都可以长期稳定运行。而且自从机械硬盘被替换为固态硬盘后电子计算机内除了散热风扇以外再也没有活动的部件因而抗震抗摔性能卓越可以应用到军事或者卫星等极端环境中。可以说如果现在你摔一部手机首先坏的是它的光学部分屏幕摄像头而不是它的电学部分。这些对生物计算机等是噩梦。4. 电学状态总体上是容易控制的。首先电学设备的能源很容易获得和保存生物计算机就要麻烦不少其次电学设备的控制可以依赖电本身而光学计算机中让光控制光就很困难因为绝大多数情况下两束光都会直接穿过对方因此可能需要非线性晶体而非线性晶体很难做到晶体管类似的控制精度如果要通过干涉控制光就需要相干光而相干光的控制和维持比电路要复杂地多而且光还存在衰减问题。至于生化反应的控制。。。emmm甚至有的时候还处于玄学范围。5. 电路甚至可以给自己编程。在制造 CPU 前为了验证是否能够正常工作除了软件仿真外还会进行硬件仿真。其中有种特殊设备叫 FPGA就可以来更加精确地模拟硬件。FPGA 本身就是个电路但是它支持向它写入控制代码改变内部电路在运行时的“连接”这是真正改变了内部电路而不是软件模拟。最近微软还有 Intel 等已经将 FPGA 集成在主板还有网卡上这样一个软件可以在运行时向 FPGA 写入控制码让它成为一个专用硬件从而大大提高处理效率。既然如此为何量子计算机那么受人重视呢这是因为和生物计算机等不同量子计算机使用量子叠加态作为状态在加速方面有根本性的提升。这甚至导致人们将所有不利用量子叠加态作为状态的计算机都称为“经典计算机”以区别于量子计算机。在引入量子力学之前我们先幻想一个更加简单的物理学模型。通过这个物理学模型我们会发现我们能够制造更快的计算机。第一章 量子计算机1.1 在一个幻想的物理模型中制造计算机在经典计算机中我们基于的状态是 “经典物理学” 的状态比如电压电流等等。这些 “经典物理学” 的状态有一个特点它们都是用数字表示的。实际上我们可以测量到的所有物理量或者物理状态都是数字长度速度质量能量体积辐射强度等等等等。但是你是否想过会不会可观察到的状态只是真正的物理状态的冰山一角这并不是我在说“有一条看不见摸不着的大龙在我的车库里”而是说有一些不能直接观察到的东西会导致不同的物理效应。一个类似的例子是 X 射线X 射线并不能被直接看到但是不意味着它不存在因为它可以产生让胶卷感光这种物理效应不过确实因为 X 射线不能被直接看到导致人们很久之后才发现它并研究它的规律。同样地也许真正的物理状态并不能被直接测量到但是它的效应是改变物理事件发生的概率最终会改变你观察到的状态甚至能展现出磁性超导性等宏观特性。这时候你观察的工具就是“不断制造相同的状态然后用统计学估计概率”。这实际上就是量子力学的核心所在。一个经典的例子是单光子双缝干涉知乎上有非常多相关的内容通过不断重复产生相同的状态一个通过双缝的光子你可以在对面屏幕上清楚地看到干涉条纹这个条纹清晰地反应了这些光子的状态——如果你改变光的波长或者双缝的宽度这些干涉条纹就会改变因为光子的状态改变了。但是你却无法通过观测某个光子来获得它的状态如果你试图单独观测每个光子干涉条纹就会消失。然而你却不能因为观测单个光子发现没有观测到“光子的状态是同时从两个缝中射出这种状态”而认为这个状态不存在因为你可以用统计学方法确认这种状态改变了光子的分布。特别在量子力学中物理状态被称为“量子叠加态”或者简称“量子态”。不过我首先不介绍更多的物理学概念而是用一个类似但是更加简单的幻想的物理状态来向读者展示为啥不同的物理状态会加速计算机执行算法。注意到我一直提的是 “加速”而不是“超越” 经典计算机。因为在理论计算机中“超越”更偏向于指做到图灵机做不到的事情也就是解决一些原本即使给予图灵机无限长的时间无限大的内存也不可能解决的问题。这类模型称为“超计算”。那么在现实物理世界中是否可以实现超计算呢目前的答案是否定的因为目前已知的超计算都要一些变态的条件比如将一个永远不会坏的无限大内存的计算机扔到一个永远存在的虫洞里面永远地进行时间回溯这样计算机经过的永恒的时间对于我们来说就是一瞬间于是就有可能做到原来无法做到的事情。图灵本人对超计算是否定的他和邱奇有以下论题大邱奇图灵论题整个宇宙和一切物理过程都可以用图灵机模拟。所以按照这个理念人属于宇宙的一部分那么人自然也可以被计算机模拟那么计算机当然可以拥有人的智能。所以图灵后来提出 “人工智能” 这个概念也不出意外。当然这也成为了很多科幻小说和哲学问题的来源我们这个宇宙本身会不会只是计算机的一个模拟好了回到正题。下面是一个虚构的物理模型这个物理模型中物理状态都是由向量而不是数表示。我们可以用固定的时间构造任何我们想要的任何元素个数的向量。这个物理模型中你可以用固定时间构造一个矩阵。这个世界遵循这样的物理演化规则你可以用这个矩阵乘这个向量得到一个新的向量这个新的向量就是新的物理状态。并且这个操作用固定时间就可以完成现实世界中需要和矩阵元素一样多次乘法操作。首先我们证明利用这个物理模型构造通用计算机其运行速度不会低于经典计算机1、经典计算机中的任意一个状态或者二进制串都可以对应到一个向量比如这些都是正交的单位向量且一个元素个数为的二进制串对应了一个元素个数为 的向量。有自然语言处理NLP经验的应该感到很熟悉这其实就是 one-hot encoding。2、经典计算机中任意一个组合逻辑都可以对应到一个矩阵。这个很显然由于状态都是单位基向量所以只要往矩阵对应的位置填上 1就可以实现所有的功能。比如 NAND 对应的矩阵 。由于只有右下角有一个 1所以只有作为列向量相乘才会输出。用类似的方法可以表示任何一个组合逻辑。其次我们证明这个计算机可以指数快的加速求解一类问题比如单一结果的无结构搜索问题而经典计算机做不到。单一结果的无结构搜索问题的表述是对于输入其中都是如同之前描述的单位正交向量我们有一个算法可以用固定的时间告诉我的结果是 0 还是 1。并且已知所有的中有且只有一个 。求解的具体值。这个问题在现实中对应的问题之一是密码破解对于固定长度的密码我们可以去一个个尝试密码是否正确但是我们只知道只有一个密码是正确的。对于经典计算机几乎唯一的方法是一个个去试。假设密码由个 bit 构成那么密码的总数量就是比如常用的 256 位 AES 密码的总数量就有 115792089237316195423570985008687907853269984665640564039457584007913129639936 个用经典计算机去暴力破解是不可行的。但是注意到我们这个利用虚拟物理构建的计算机的输入是向量中间的规则是矩阵。首先我们定义函数然后我们就可以利用分配率来同时计算所有情况根据我们的物理模型是可以常数时间构造的所以对于总数量的密码我们只要常数时间就可以破解相对于经典计算机平均需要次快了指数倍。1.2 利用量子态制造计算机幸好上文的计算机是用我们宇宙不存在的物理模型制造的否则任何密码在一瞬间就会被破解了。不过上文幻想的物理规律是去除了一些 “限制” 的量子力学如果它发生在我们的宇宙中会出现无数反常的情况比如严重违背热力学定律。这个模型实际上是 Scott Aaronson 于 2005 年提出的一个模型的简化版本原来的模型用于显示只要对量子力学做轻微的修改就能大大增强量子计算机的计算能力不过这些修改只是存在理论中与物理实验不符。在量子力学的框架中我们对之前的模型加入了以下约束读者没有必要完全了解物理状态的约束量子态向量的模长固定为 1。也就是只有向量的方向是重要的你无法使用它的 “长度” 做任何计算。状态制备 / 初始状态的约束我们仅能够使用步准备一个元素个数为的 one-hot 量子态。这一般作为算法的最初输入。one-hot 即整个向量中只有一个系数是 1其他均为 0。演化的约束从一个量子态到另一个量子态的演化对应的矩阵必须是幺正的幺正演化不改变向量的模长。也就是唯一可以对向量进行的操作是“旋转”。所有的幺正演化都是可逆的矩阵。读出的约束读出结果只能通过 “观测” 完成。根据量子力学的观测公理一个算法输出的结果只能是一个 one-hot 量子态。得到某个 one-hot 量子态的概率为这个 one-hot 量子态在原来向量中的系数的平方严格来说是模平方因为系数可以是复数。在量子力学的限制下我们利用量子态来构造的计算机的加速能力也会相应受到限制。比如说上文的“单一结果的无结构搜索问题”量子计算机最多可以带来平方的加速也就是著名的 Grover 算法。Grover 算法显示了量子计算机优势的同时也被认为显示了量子计算机的局限性。所以量子计算机其实并不能像很多人想象一样轻松破解所有的密码AES 等加密方案面对量子计算机是安全的不过之后我们会谈到RSA 等加密方案在未来可能因为量子计算机变得不安全。如果我们使用量子态为基础去构造图灵机用某个 “幺正演化” 构造转移函数那么我们我们就实现了量子图灵机或者是量子通用计算机和之前一样两者主要是概念上的区别。我们可以证明的是不会有一种量子计算机比量子图灵机 / 通用量子计算机更加“强大”比如可以解决通用量子图灵机不能解决的问题此外通用量子计算机甚至可以高效模拟任何量子力学过程。量子通用计算机是一些量子算法的预设但是我们离物理上实现它还差的很远。1.3 量子门与实现量子图灵机中的转移函数选读在上文中我们使用 “幺正演化” 构造转移函数实现了量子图灵机。但是在实现中 可能是极其复杂的。在经典计算机的例子中我们知道我们可以把状态分解为一串比特而状态的转变可以用组合逻辑表示任意组合逻辑又可以用 NAND 门和 “复制” 来实现。那么我们可否在量子力学中构造类似的东西呢首先量子力学中一个 one-hot 量子态在物理上可以分解为一个个独立的只有 2 个基的向量而它们可以有独立的物理载体比如每个对应一个光子或者超导约瑟夫森结或者一个冷原子。类比于经典的比特我们称它们为“量子比特”。作用在量子比特上的操作称为“量子门”。那么 “幺正演化” 是否可以由一些简单的 “量子门” 来构成呢答案是无法用有限的量子门来组成任意的幺正演化但是如果只要求是近似是可以的。一般认为 HSTCNOT 这几个量子门就足够了。其中 HST都是作用到一个量子比特上而 CNOT 是唯一一个作用到两个量子比特上的操作也是现实中最难实现的操作。此外量子线路的一个特殊操作是测量根据量子力学的公设简单地说测量会导致量子态变成一个 one-hot encoding 的量子态我们可以将这种量子态对应到经典的比特上用于控制一些量子门比如 1 对应使用量子门0 对应不使用量子门。下图展示了一个典型的量子线路“量子隐形传态”quantum teleportation的量子线路由于任何一个量子线路都可以被通用量子计算机等效地执行而通用量子计算机依然离我们很远所以很多量子算法都只是用量子线路来描述的而这些算法在真正的物理实现上也是类似量子线路的形式。之前 Google 的超导量子计算机和现在的“九章”都更接近量子线路甚至它们比一般的量子线路都特殊得多而不是通用量子计算机。当我们能够制造出一个类似 FPGA上文提到过 FPGA一样的设备可以任意编写大规模比如大于 100,000 个可靠的量子门的量子线路时我们离通用量子计算机就近了。第二章 量子算法与应用这一章节中我将反复使用的一个词是 “fineprint细小的条款”。这也是一些量子计算研究者会用的词因为在讨论量子算法时经常有一些微妙的差别从而导致完全不同的结果。2.1 什么是量子算法类似经典算法量子算法通过对量子状态进行一步步操作进而解决问题。然而不同于经典算法量子算法的每一步要不就是一个幺正操作要不就是测量。这给编写量子算法带来了很大的困难。编写量子算法是非常困难的原因主要有 4 个最直接的困难就是不允许对未知的一个状态进行复制比如说算法输入的某个量子态以及所有受到输入影响的状态这里要顺便指出量子图灵机中的 “读取” 和“写入”也不是通过复制完成的而是通过 “交换“或者” 观测 “等量子力学允许的方式实现。这是“量子不可克隆定理” 限定的本质上是幺正操作和测量无法复制未知的状态。这让很多经典算法设计思想很难应用到量子算法设计上。如何利用量子态的性质来加速也是一个问题因为如果设计出来的算法没有明显超过经典算法那么在解决问题上是没有意义的。如果使用经典的算法设计思想是很难造出超过经典算法的量子算法的。输入输出问题。如果输入输出是某个特定的 “量子态”那么设计一些量子算法会变得相当容易但是现实世界无法去直接利用量子态因为量子力学根本上阻止我们直接观测它们。因此如何从经典比特构造出想要的“量子态”以及如何保证最终将“量子态” 通过观测变成想要的经典比特是一个大麻烦。通用量子计算机出现前相关领域缺乏研究动力。综上原因目前已知的量子算法要远远少于经典算法。2.2 一个简单但关键的量子算法QFFT在仅有的一些量子算法中相当多的算法特别是远远优于经典算法的一些的共同特点是使用了 QFFT 量子快速傅立叶变换。这是 Shor 算法以及 HHL 算法的基础。快速傅立叶变换本身就是一个相当重要的数值算法它可以快速地分析出数据中的周期在时域和频域之间转换并可以加速卷积等操作。快速傅立叶变换有 3 个重要特性导致它很容易拥有对应的量子实现规模为的快速傅立叶变换可以被的矩阵乘法描述快速傅立叶变换是可逆的它的逆变换也是矩阵快速傅立叶应用于向量不会改变向量的模长这 3 个重要特性让人立刻意识到快速傅立叶变换和逆变换都对应量子力学中的幺正变换。然后这个幺正变换可以用含有个量子门的量子线路描述而我们只需要 个量子比特就可以构成元素个数为的输入向量。而经典算法中用电路对一个元素个数为 N 的向量进行快速傅立叶变换电路深度为这意味着量子算法对经典算法在 FFT 上有指数加速。不过不要高兴得太早这里有一个 fineprint细小的条款量子算法中的 “向量” 是量子比特构成的量子态和用比特构成的数值的向量是两回事。也就是这个量子算法操作的对象是量子态对应的向量的系数因而只要个量子比特而经典算法中每一个系数都是都是实实在在的用比特表示的数字。也就是根据量子力学的基本原理我们没有任何办法直接写入或者读取这些系数。而且我们甚至没有已知有效方法将任何经典算法中一个向量转变成量子态向量的系数因而 QFFT 并不能加速 FFT。QFFT 的输出结果的几乎唯一的一个用途就是如果输出的向量的系数中有一个系数相对其他的系数特别大那么我们对这个向量进行观测后就会以很大概率获得这个系数对应的 one-hot encoding而这个 one-hot encoding 直接对应了一个经典的比特串。但是正是这个用途让很多算法得到了巨大的加速。这些算法的共同特点是1. 输入的量子态比较容易构造 2.输入 QFFT 的向量中有一个明显的“周期”QFFT 变换到频率领域后对应的频率的系数很大因而我们最终能以较大概率得知这个周期是什么。我们之后可以看到这成为了 Shor 攻破 RSA 加密算法的关键当然前提是有一个可以跑 Shor 算法的量子计算机就目前拥有的信息还早的很。2.2.1 最早让量子计算机出名的算法Shor 算法Shor 算法显示量子计算机可以指数加速 “分解大质因数” 这个问题从而对 RSA 这种非对称加密算法构成威胁。在《夏日大作战》中主角读了 Shor 算法后破解了 RSA 加密造成了一次互联网危机其实人脑按照 Shor 算法去分解 213*7可能比刷一整页《吉米多维奇》的不定积分花的时间还要长。《夏日大作战》中看的论文的标题就是 Shor 算法首先简要介绍一下非对称加密。非对称加密是指一类加密和解密密钥并不相同的加密算法这两个密钥分别称为 “公钥” 和“私钥”且经典计算机中根据公钥计算出私钥是困难的。非对称加密可以做非常多对称加密用同一个密钥加密解密无法完成的事情比如向任何一个人证明自己的身份也就是私钥的拥有者首先你向全世界公开你的身份 AA 可以是一个虚拟身份你的公钥是 p。由于之前不存在一个是 A 的人所以大家都知道 A 这个身份就和公钥 p 绑定了。然后某次交易中对方需要确认你的身份是 A对方可以用你公开的公钥 p 加密一个随机的无法猜出的文本由于只有你拥有私钥 q所以只有你可以很快地解密内容发送回去这样对方就知道你确实是 A。现实中的一个最常用的应用就是网络安全。如果网站的地址包括“https”那么这个网站就实现了 SSL 协议这个协议可以让你验证这个网站是否是真实的在 CA操作系统以及浏览器的共同作用下你本地存放有对应的网址的公钥你就可以通过上述方法去验证这个网站的身份如果有人通过攻击改变了这个网址对应的网站比如说劫持居民的光纤由于攻击者没有私钥你会发现对方无法证实身份这样就可以及时终止交易避免泄露个人信息。注意到对称加密是无法解决这种问题的你不能将可以解密的密钥给用户因为这个是你的身份的“证明”而对称加密中加密解密使用同样一个密钥所以无法工作。在上述协议中如果有人可以用很小的代价从公钥推导出私钥那么后果将是灾难性的。特别地对于 RSA 这种非对称加密算法如果你有高效解决 “大质因数分解” 问题的算法就可以高效地从公钥推导出私钥。Shor 算法就是一种高效的分解大质因数的算法。大质因数分解问题的陈述如下已知  ,  和  是两个很大的质因数。已知  求解  和  。在数论中我们有这样一个问题是待分解的一个大数。对于任何一个数如果不是的因数否则你就分解了求解最小的正整数使得(也就是 a 的 r 次方除以 N 余数是 1)。通过数论可以证明如果解决了这个问题就可以通过后续简单的步骤解决分解大质因数问题。而很显然是待分解的一个大数。对于任何一个数如果不是的因数否则你就分解了定义的最小周期就是。这是因为而我们怎么求周期呢既然是周期函数一个简单的方法是对进行傅立叶变换找出周期对应的频率。可惜现实中 FFT 算法对于这个问题实在是太慢了而且即使我们进行了傅立叶变换在这么大的范围内寻找周期是不现实的。这个时候我们的 QFFT 就有了用途了首先构造出一个量子态向量这个向量编码了对所有 的计算结果。然后我们用 QFFT 对向量进行傅立叶分析然后对输出的向量进行测量。由于傅立叶变换后周期对应的频率的 “系数” 比较大那么量子测量后根据测量公设就会以很大概率得到周期对应的单位基向量且错误率是一个有限的常数。这意味着不断重复这些步骤就可以以非常高的概率得到正确的周期进而最终分解 。我们看到 Shor 算法成功的原因是根本原因是巧妙利用了周期特性然后用 QFFT 求出周期。这个技巧可以用于构造破解所有现在大量使用的非对称加密算法包括离散对数椭圆曲线。由于这些算法都依赖于数论中的难题因而都可以构造出类似的周期从而被破解。那么是否所有的非对称加密算法都可以被量子计算机破解呢答案是否定的。Shor 算法在上个世纪公开以后密码学界就开始研究新的一类非对称加密算法称为“后量子密码学”这些算法避开了数论难题并基于格点纠错编码哈希函数等新的数学对象构造数学难题。目前尚未发现有高效解决这些问题的量子算法。由于新的数学难题会稍微增加加密解密的计算量所以在量子通用计算机出现之前尚未有主流网站用后量子加密算法取代 RSA。通用计算机量子计算机被认为是必要的原因是以目前的发展水平实验中展示出的用 Shor 算法分解的最大的数是 21。而要破解现在通用的 RSA 算法则需要分解一个大约 2048 位的数也就是分解类似这样的数: 323170060713110073007148766886699519604441026697154840321303454275246551388678908931972014115229134636887179609218980194941195591504909210950881523864482831206308773673009960917501977503896521067960576383840675682767922186426197561618380943384761704705816458520363050428875758915410658086075523991239303855219143333896683424206849747865645694948561760353263220580778056593310261927084603141502585928641771167259436037184618573575983511523016459044036976132332872312271256847108202097251571017269313234696785425806566979350459972683529986382155251663894373355436021354332296046453184786049521481935558536110595962306552.3 量子和经典算法的快慢还是量子计算机和经典计算机的快慢我们究竟在比较什么在我们最初的讨论中我们是想比较量子计算和经典计算机的快慢。但是读者会发现到这里时似乎我们转向了讨论量子算法和经典算法的快慢。这两个东西是一样的吗首先讨论机器本身的快慢实际上没有意义的最终我们希望的是解决问题因此比较的是“在经典计算机上解决问题的最优算法和在量子计算机上解决同一个问题的最优算法的快慢”简称为“算法的快慢”。为了消除歧义性我们首先需要定义什么是算法的“快慢”。算法有实际上的快慢也就是生活中我们运行一个程序跑的时间但是实际中的快慢是难以进行理论分析的它受到的影响很多比如硬件的价格和工艺软件的编写质量环境的温度甚至是是否在运行过程中受到其他程序干扰。何况算法的目的是为了使用我们往往在使用之前甚至设计之前就需要知道它的快慢。在这一章节中我们希望理论分析算法的快慢因为这才是对选用算法以及设计算法真正有用的东西。在理论分析中算法的快慢定义为“图灵机执行的时间”我们进而约定经典图灵机和量子图灵机执行一步的时间都是固定的因此时间其实对应了图灵机执行的步数。在量子图灵机的每一步中都可以对整个量子态也就是整个向量进行操作比如 QFFT 中的一个量子门而经典图灵机却做不到如果将这种向量和矩阵的乘法作为经典图灵机的一个操作那么这步操作的时间就没有上限因此不能称为“固定时间的操作”所以这不能作为经典图灵机的一个基本操作。这样一来经典图灵机中的算法就需要用更多步数实现向量和矩阵的乘法。因此在有些算法中量子图灵机可以充分利用自己的优势设计出执行步数少得多的算法。所以在我们的理论分析中解决同一个问题的最优算法的快慢就反映了量子图灵机和经典图灵机的相对优势如果最优的量子算法快于经典算法说明量子计算机本质上支持用更快的算法解决相同的问题这就是量子计算机的优势。2.4 问题的分类游戏然而具体研究解决问题的算法时我们发现大部分 “非平凡” 的问题会有一个参数称为输入规模。比如快速傅立叶变换中的输入规模就是输入向量的元素个数破解密码的规模是密码的长度。一般而言规模和问题的输入占用经典计算机的比特数成正比。我们对算法进行分析后会发现某个问题的最优算法的执行步数是输入规模数学表达式比如快速傅立叶变换是 。算法分析中我们关心的是某个问题的最优算法的执行时间随着输入规模 的变化趋势我们可以根据变化趋势给问题分类而我们将同一个类型的问题归入同一个集合。显然相同的问题对于量子计算机和经典计算机可能有不同的分类这意味着量子计算机和经典计算机会将问题划分为不同的集合下面所有的算法都默认是对应问题的最优算法。2.5 经典计算机视角下的问题分类首先我们可以定义一个集合 P集合 P 包涵了所有的一类经典计算机的最优算法能够在输入规模的多项式时间算法时间的表达式是一个多项式或者比多项式增长更慢的项比如 logN 等内解决的问题。这类问题包括排序快速傅立叶变换求解两地直接的最短路径等等。P 内部的问题在理论分析中被认为是“容易的问题”。另外我们可以定义一个集合 NP集合 NP 包涵了所有的可以多项式内验证结果的问题。显然 P 是 NP 的子集因为 P 问题可以通过再解一遍验证结果。如果 P 问题类似检查数学证明那么 NP 类似于给出证明。关于 P 和 NP 有一个非常著名的数学难题P ? NP虽然 P 是 NP 的子集但是我们至今都没有证明它是真子集。大多数理论计算机学家都相信 P 不等于 NP一是因为 “验证答案的难度和写出答案的难度一样” 过于违背直觉二是因为人们发现了一个 NP 的子集称为 NPCNP-complete。NPC 内部的问题有这样一个性质如果其中任何一个问题被证明属于 P那么 P NP。NPC 内部有非常多有趣的问题比如逻辑满足问题定点着色问题哈密顿回路问题子图同构问题但是若干年都没有任何一个人发现多项式时间解决它们的算法就像找不到黎曼猜想的反例一样这让大家愈加相信 P ! NP。此外非常有趣的一点是相当多和密码学相关的问题都属于 NPRSA离散对数椭圆曲线但是它们既不属于 P也不属于 NPC。如果我们更进一步如果问题询问的是结果是 “真” 的结果的个数且验证每一个结果所用的时间是多项式时间相当于对一个证明题我不仅要求一个证明还要求得到所有不多于某个字数的所有的证明的个数这些问题的集合称为 #P。显然 NP 是 #P 的一个子集因为它至多只有一个结果为真我们只要解决这一个问题就可以了。经典算法中有一大类称为“随机算法”这些算法的执行有随机性不一定每次都能给出正确结果但是正确的概率更大。所以只要通过多次执行我们就可以通过统计越来越清楚地知道哪个是正确的结果。其中一类问题的集合是 BPP (bounded-error probabilistic polynomial time) 。BPP 中的问题对应的算法每次执行的时间是多项式的结果错误率是一个低于 1/2 的常数也就意味着我们总共只要多项式的时间就可以以很高的概率得到正确结果。典型的问题是判断一个数是否是素数。此外集合 PP (probabilistic polynomial time) 不再限制错误率是一个低于 1/2 的常数而是允许它随着问题规模任意接近 1/2所以其中可能有一些问题相当难以解决。显然 BPP 包含于 PP。除了时间意外我们可以用问题使用的内存分类问题。以上所有问题都包括在 PSPACE 这个集合内因为解决它们所消耗的内存是规模的多项式倍我们还可以考虑一个更大的集合EXPSPACE这个集合包括了消耗的内存是规模的指数倍的问题几乎所有能够想到的问题都存在于 EXPSPACE 中否则问题的内存消耗就能够穷尽整个宇宙的物质。算法分类问题是名副其实的数学上最难的问题之一 P ? NP 只是其中的问题之一实际上我们不知道以下任何一对集合的是否相等不过人们倾向于认为它们之间都是真包含的也就是有 15 个未解决的难题P ? BPP ? NP ? #P ? PP ? PSPACE2.6 量子计算机视角下的问题分类由于量子计算机天生就有随机性所以量子计算机的问题分类结果主要是按照随机算法而量子计算机视角下对应于经典计算机 BPP 定义的集合称为 BQP(bounded-error quantum polynomial time)。我们考虑所有问题的集合画出我们定义的这些集合的 Venn 图根据理论进展有些问题的复杂度类可能会发生改变复杂度类的 Venn 图其中 BPP 集合内部的问题可以认为是经典计算机可以 “高效” 解决的问题而 BQP 集合内的问题是量子计算机可以高效解决的问题。我们注意到两点1. BQP 集合内包括比 BPP 更多的问题这意味着有更多经典计算机难以高效解决的问题可以被量子计算机高效解决。2. BQP 没有完整包括 NP所以依然有大量有趣的问题无法被量子计算机高效解决因此量子计算机并不是解决一切的“万能工具”。注BQP 和 NP 两者的具体关系还没有解决我们只知道有些 BQP 内的问题不属于 NP也就是必然存在一些问题量子计算机可以高效解决经典计算机不能高效解决但是 NP 是不是 BQP 的子集呢这是一个未解决的问题不过一般的看法是否定的。这是因为 1. 我们没有发现任何一个 NPC 内的问题属于 BQP 2. “单一结果的无结构搜索问题”是一个 NP 问题但是量子计算机最多只能带来平方的加速也就是著名的 Grover 算法而相当多虚构的可以高效解决任何 NP 问题的机器都可以指数加速这个问题比如上文中的虚构物理体系中这可能暗示了量子计算机的局限性。2.7 量子算法的物理实现难度和用途首先我们讨论对于经典计算机无法高效解决的问题也就是在 P 之外的问题。在上面的 Venn 图中我们发现根据量子算法相对经典计算机的优势是各不相同的。但是我们结合它们的实现难度以及用途来列一张表结合这个表格下一步最有价值也最容易实现的还是量子体系的模拟这也是已经展示了量子霸权的各个量子计算团队下一步的重要目标之一。然后我们讨论经典计算机已经可以高效解决的问题也就是在 P 之内的问题。请原谅我在下面的介绍中不使用算法复杂度标记因为我觉得没有必要再介绍新的概念了是不是如果一个问题经典计算机已经可以高效解决那么就不需要量子计算机呢这可不一定。算法理论中的“简单高效”往往是指对于规模可以在大约这种多项式时间内解决的问题。当比较大的时候现实中已经很难解决很大规模的问题一个非常极端的例子是 AKS 素数测试算法也就是一个判断数是不是素数的算法在最新的结果中这个算法的问题规模是素数的位数在实际中很难运用所以实际中真正使用的反而是一些随机算法这些随机算法虽然有微乎其微的概率错判但是要比 AKS 快的多。这里我们讨论一个非常有代表性的问题线性方程组的解。我们知道对于一个规模为 的稠密大部分系数不是 0的线性方程组用经典算法求解需要大约步而对于稀疏大部分系数是 0的线性方程组用经典算法求解需要大约步其中是矩阵的“条件数”(矩阵极大和极小特征值或者奇异值的比值)是“稀疏度”。对于稀疏矩阵而言存在一个称为 HHL 的算法HHL 代表了 Arram Harrow, Avinatan Hassidim 和 Seth Lloyd 三人发表于 2008 年仅用改进版本也就是大约步就可以解这个方程组。这相对于经典算法的相对问题规模快了指数倍。这个算法在当时引起了轰动因为解线性方程组是一个非常非常重要的问题几乎用于各个领域。下面好几年出现了一大堆“指数加速算法”基本思想都是找一个经典的依赖解线性方程组的问题然后用 HHL 算法指数加速。这在 2014 年左右又大火了一波因为大家开始对机器学习感兴趣而一大堆机器学习问题中都要解线性方程组。2015 年量子算法权威 Scott Aaronson 在 HHL 作者的帮助下直接发了一篇 nature 评论 “Quantum Machine Learning Algorithms: Read the Fine Print“ 指出了很多人对 HHL 的“使用不当”有趣的是这篇评论的引用数占了原 HHL 的 1/5考虑到发表时间已经相当多了。那么 HHL 有哪些“fineprint” 呢和 QFFT 一样输入的向量必须编码到是量子态向量的系数上。如果向量最初是经典计算机中的向量那么显然读取数据就需要步因为向量本身有 个元素这样你就无法获得加速优势。同样的矩阵本身的元素也不能全部来自经典计算机的稀疏矩阵否则读取数据就会占用更多时间。所以大部分机器学习问题除非人为构造数据否则很难直接用 HHL 加速。矩阵必须是稀疏的也就是远小于否则主导运行时间的就是而不是加速效果就会大打折扣。完全无视这一点的相关研究可以说几乎是故意在骗人了。当然也有一个 HHL 的变种算法可以加速稠密的线性方程组的求解但是相对经典算法并没有指数加速。输入的稀疏矩阵必须是可逆的而且数值特性良好否则状态数会很大这样也会失去加速。这个算法的输出和输入一样也是编码到量子态向量的系数上的这意味着你没有办法直接将结果直接转换成经典的表示比如导出成一个数组打印到屏幕上。不过你可以通过一些后续的算法研究这种输出的一些性质虽然还是不能直接得到输出。如果你的问题没有上述任何一个困扰那么恭喜你你可以使用 HHL 来指数加速你的问题求解。看到这些 fineprint你可能会发现 HHL 和之前的 QFFT 算法有一些相当类似的“共性”这是因为 HHL 本身就是依赖 QFFT 的。HHL 算法的例子说明了指数加速一个经典问题有的时候并不是免费的午餐越大的加速往往就带来了越多的对求解问题的限制这也间接说明了量子计算机是有局限性的不是万能的机器。这一个例子进一步展现了量子通用计算机的重要性有相当多的量子算法可以对各类非常具体的经典问题进行一定的加速但不是指数加速因而在量子通用计算机研制出来之前无法展现优势其加速不及指数加速也导致它们难以像 Shor 算法HHL 算法一样有很高的宣传热度。也许最坏的情况是等到通用量子计算机出现后人们发现大部分实际问题在实际的条件下只能获得平方加速但是这并不意味着通用量子计算机的概念并不伟大——要知道比起平方加速我们很多时候只是优化常数。未来智能实验室的主要工作包括建立AI智能系统智商评测体系开展世界人工智能智商评测开展互联网城市云脑研究计划构建互联网城市云脑技术和企业图谱为提升企业行业与城市的智能水平服务。  如果您对实验室的研究感兴趣欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”
http://www.pierceye.com/news/157832/

相关文章:

  • 怎么修改网站信息同ip网站做301
  • 松江品划网络做网站logo设计网页
  • 重庆博达建设集团股份有限公司网站徐州建设企业网站
  • 有没有专门做老年婚介的网站东营会计信息网官网
  • 鞍山怎么做平台软件汕头网站时优化
  • 邹城建网站深圳装修公司排行榜
  • 泊头网站优化WordPress如何添加cnzz
  • dz论坛网站创建页面wap网站建设方案 pdf
  • 网站建设项目报告总结报告seo关于网站搜索排名关键词的标准评定
  • 东莞电商网站建设wordpress注册验证邮箱
  • 网站建设名中国建设劳动学会是假网站吗
  • 一个优秀的个人网站百度极速版免费下载安装
  • 咋做211校徽加网站wordpress免费教程视频教程
  • 网站建设制作网络营销公司蛋糕店网站模板
  • a站网址东莞市网络seo推广价格
  • 莱州市双语网站seo白帽优化
  • 不忘初心网站建设深圳公租房官网
  • 网站点击率原因深圳做自适应网站制作
  • 上海个人建站小程序注册完成后如何制作
  • 微网站开发平台 开源大庆做网站公司
  • 长沙市住房和城乡建设局网站wordpress付费可见插件
  • 建设个人网站的参考网站及文献辽宁建设工程造价管理网站
  • 如何做360网站的排名新品发布会策划方案ppt
  • 网站后台登陆破解哪里有网站模板下载
  • 网站制作器软件下载建站备案
  • 网页模板下载网站站长素材音效网
  • 青岛网站建设要多少钱关键词优化是怎样收费的
  • 网站国际联网备案WordPress文章分页伪静态
  • 电子商务网站开发的任务书东莞seo关键词搜索关键词
  • 宁乡网站建设在哪小天才电话手表网站