本書(shū)從程序員的角度介紹了量子計(jì)算,是一本適合學(xué)生和從業(yè)人員閱讀的入門(mén)書(shū)籍。書(shū)中使用基于Python和C++開(kāi)發(fā)的開(kāi)源代碼庫(kù),用完整的數(shù)學(xué)推導(dǎo)和經(jīng)典模擬代碼解釋了超過(guò)25種基本算法。在介紹了量子計(jì)算的基礎(chǔ)知識(shí)后,作者著重講解了一些基礎(chǔ)量子算法和高效模擬它們的基礎(chǔ)設(shè)施,包括量子隱形傳態(tài)、超密編碼、Bernstein-Vazirani算法和Deutsch-Jozsa算法。高級(jí)量子算法的介紹包括量子霸權(quán)實(shí)驗(yàn)、量子傅里葉變換、相位估計(jì)、Shor算法、Grover算法、量子計(jì)數(shù)、振幅放大、量子隨機(jī)游走,以及用于門(mén)近似的Solovay-Kitaev算法。通過(guò)變分量子本征求解器、量子近似優(yōu)化和NP完備問(wèn)題的zui大割算法以及子集和算法,探索了量子模擬的應(yīng)用。書(shū)中還探討了程序員生產(chǎn)力、量子噪聲、量子糾錯(cuò),以及量子編程語(yǔ)言、編譯器和工具面臨的挑戰(zhàn),最后還詳細(xì)介紹了用于轉(zhuǎn)譯的編譯器技術(shù)。
1.本書(shū)作者知名,為Google杰出工程師;2.內(nèi)容通俗易懂,且配有代碼實(shí)現(xiàn);3.多位業(yè)界知名學(xué)者一致推薦;4.面向程序員,方便上手實(shí)踐。
前 言 Preface
我認(rèn)為可以毫不夸張地說(shuō),沒(méi)有人完全理解量子力學(xué)。
—Feynman(1965)
許多數(shù)學(xué)理論給我留下了深刻的印象,這些理論實(shí)際上是關(guān)于特定算法的。這些理論通常用比今天的計(jì)算機(jī)科學(xué)家使用的等效表達(dá)更為冗長(zhǎng)和不夠自然的數(shù)學(xué)術(shù)語(yǔ)來(lái)表述。
—Knuth(1974)
本書(shū)是從程序員的角度介紹量子計(jì)算的入門(mén)指南。大部分概念都通過(guò)代碼進(jìn)行解釋?zhuān)驗(yàn)榱孔佑?jì)算中常見(jiàn)的看起來(lái)復(fù)雜的數(shù)學(xué)知識(shí)在代碼中可能會(huì)變得非常簡(jiǎn)單。對(duì)于許多程序員來(lái)說(shuō),閱讀代碼比閱讀復(fù)雜的數(shù)學(xué)符號(hào)更容易。代碼還可以進(jìn)行實(shí)驗(yàn),有助于讓程序員建立對(duì)量子計(jì)算基本機(jī)制的直覺(jué)和理解。我相信這種方法會(huì)使入門(mén)過(guò)程變得高效而有趣。
與其他學(xué)習(xí)資源不同,本書(shū)不會(huì)使用現(xiàn)有的軟件框架,例如IBM的成熟的Qiskit工具包或Google的Cirq。相反,我們將從頭開(kāi)始建立自己的基礎(chǔ)設(shè)施—最初基于Python的numpy庫(kù)。事實(shí)證明,學(xué)習(xí)基礎(chǔ)知識(shí)只需要幾百行代碼。這些初始代碼雖然速度較慢,但十分明確,易于調(diào)試和實(shí)驗(yàn),是學(xué)習(xí)的絕佳工具。
其次,我們將改進(jìn)基礎(chǔ)設(shè)施,使用C++進(jìn)行加速,并詳細(xì)介紹一種優(yōu)雅的稀疏表示方式。我們將引入基本的編譯器概念,把電路轉(zhuǎn)譯到其他平臺(tái)(如Qiskit、Cirq等)上。這使得我們能夠使用這些系統(tǒng)的高級(jí)功能,比如可擴(kuò)展性能和先進(jìn)的錯(cuò)誤模型。
通常,在介紹量子計(jì)算之前會(huì)先對(duì)復(fù)雜的線(xiàn)性代數(shù)進(jìn)行介紹。但是,本書(shū)不會(huì)按照這個(gè)模式來(lái)做。許多程序員有堅(jiān)實(shí)的線(xiàn)性代數(shù)基礎(chǔ),但是其他人可能缺乏這方面的背景或興趣。本書(shū)的目標(biāo)是成為一個(gè)吸引人的學(xué)習(xí)資源,而不深入討論線(xiàn)性代數(shù)的細(xì)節(jié),因此對(duì)上述兩個(gè)群體都適用。本書(shū)假設(shè)讀者對(duì)復(fù)數(shù)、向量和矩陣有基本的了解。
在第1章中,我們將回顧一些核心概念。隨著內(nèi)容的深入,我們會(huì)介紹少量額外的數(shù)學(xué)概念,這些概念對(duì)于理解算法是必要的。我們希望這種格式對(duì)線(xiàn)性代數(shù)知識(shí)薄弱的讀者有所幫助,同時(shí)對(duì)專(zhuān)業(yè)人士來(lái)說(shuō)又不會(huì)過(guò)于淺顯。在介紹基本數(shù)學(xué)概念之后,本書(shū)后續(xù)內(nèi)容將按以下方式組織。
在第2章中,我們將介紹量子計(jì)算的核心概念,并在Python中使用完整的矩陣和向量實(shí)現(xiàn)它們。我們將討論量子態(tài)、算子、糾纏和測(cè)量,展示構(gòu)造、描述和分析量子比特與量子電路的多種方法。量子力學(xué)、疊加態(tài)、糾纏和測(cè)量都是復(fù)雜而深?yuàn)W的話(huà)題。但是,在本章中,我們只關(guān)注理論計(jì)算方面。
在第3章中,我們將介紹基礎(chǔ)算法,并利用到目前為止所開(kāi)發(fā)的基礎(chǔ)設(shè)施。這部分內(nèi)容以詳盡的方式呈現(xiàn),包括詳細(xì)的數(shù)學(xué)推導(dǎo)。
到目前為止,我們所開(kāi)發(fā)的基礎(chǔ)設(shè)施無(wú)法擴(kuò)展到需要更多量子比特的復(fù)雜算法上。在第4章中,我們將詳細(xì)介紹門(mén)的快速作用,并使用C++進(jìn)行加速。我們將演示稀疏表示如何在某類(lèi)算法中產(chǎn)生最佳性能結(jié)果。本章將引導(dǎo)我們構(gòu)建高性能的量子模擬器。對(duì)基礎(chǔ)設(shè)施不感興趣的讀者可以瀏覽或跳過(guò)這一章。
在第5章中,我們將闡述量子計(jì)算機(jī)確實(shí)具有超越經(jīng)典計(jì)算機(jī)的能力。
第6章將詳細(xì)介紹量子計(jì)算的若干核心算法,例如Grover搜索、量子傅里葉變換、相位估計(jì)、量子隨機(jī)游走、Shor整數(shù)分解算法以及變分量子本征求解器等。本章還將詳細(xì)介紹具有里程碑意義的Solovay–Kitaev算法,該算法可以用小型通用門(mén)集中的門(mén)來(lái)近似構(gòu)造出任意酉門(mén)。前幾章所構(gòu)建的基礎(chǔ)足以讓我們實(shí)現(xiàn)和理解這些神奇的算法。
第7章和第8章則涉及程序員生產(chǎn)力方面的實(shí)際問(wèn)題。我們將討論量子糾錯(cuò),這對(duì)于量子計(jì)算的可行性是至關(guān)重要的。我們還將討論量子編程語(yǔ)言設(shè)計(jì)、編譯器和工具,以進(jìn)一步提高程序員的生產(chǎn)力。
附錄包含正文中沒(méi)有涉及的有趣材料。具體而言,它包含對(duì)稀疏模擬基礎(chǔ)設(shè)施的詳細(xì)描述。
源代碼
本書(shū)中的大部分內(nèi)容都將同時(shí)通過(guò)數(shù)學(xué)和代碼進(jìn)行解釋。為了避免將本書(shū)變成一個(gè)龐大的代碼清單,我們使用諸如[...]之類(lèi)的結(jié)構(gòu)來(lái)替代枯燥或重復(fù)的代碼片段。我們通常會(huì)省略掉諸如Python的import語(yǔ)句或C++的#include指令之類(lèi)的代碼。完整的源代碼按寬松的Apache許可證托管在GitHub(https://github.com/qcc4cp/qcc)上并附有下載、構(gòu)建和運(yùn)行的說(shuō)明。
歡迎大家提出評(píng)論和建議。代碼排版可能會(huì)產(chǎn)生錯(cuò)誤,真實(shí)的源代碼可參見(jiàn)在線(xiàn)存儲(chǔ)庫(kù)。代碼也可能不斷發(fā)展,導(dǎo)致超過(guò)此處所發(fā)布的內(nèi)容。
致 謝?Acknowledgements
本書(shū)的出版離不開(kāi)許多人的幫助。Vincent Russo和Timofey Golubev在數(shù)學(xué)公式、代碼和寫(xiě)作方面提出了許多建議。Gabriel Hannon提供了物理學(xué)相關(guān)概念的寶貴指導(dǎo)。量子計(jì)算堆棧交換(Quantum Computing StackExchange)平臺(tái)是一個(gè)非常有幫助的資源和社區(qū),我的一些問(wèn)題在那里得到了解答。Wes Cowley和Sarah Schedler提供了行文編輯服務(wù),Sue Klefstad制作了令人印象深刻的索引,Eleanor Bolton提供了出色的文本編輯服務(wù)。非常感激Tiago Leao向我推薦了Beauregard(2003),這對(duì)我實(shí)現(xiàn)Shor算法的重構(gòu)至關(guān)重要。Tiago與Rui Maia一起為社區(qū)提供了備受贊賞的參考實(shí)施方案(Leao, 2021)。
我也要感謝Google的許多同事。Dave Bennet和Michael Dorner審閱了本書(shū)的初稿,我相信這對(duì)他們來(lái)說(shuō)不是一次愉快的經(jīng)歷。他們的反饋意見(jiàn)有助于將本書(shū)轉(zhuǎn)化為實(shí)際的學(xué)習(xí)資源。Fedor Kostritsa在文字、數(shù)學(xué)公式、推導(dǎo)和代碼方面提供了詳細(xì)的評(píng)論,Ton Kalker認(rèn)真審查了整本書(shū)稿,并在數(shù)學(xué)表達(dá)上給予了極大的幫助,這兩位同事對(duì)嚴(yán)謹(jǐn)性和細(xì)節(jié)的把控都非常嚴(yán)格。Sergio Boixo和Benjamin Villalonga糾正了我對(duì)量子霸權(quán)實(shí)驗(yàn)的許多誤解。Michael Broughton和Craig Gidney幫助我改進(jìn)了關(guān)于Grover算法的部分。Craig還維護(hù)著優(yōu)雅的在線(xiàn)模擬器Quirk。感謝Mark Heffernan、Chris Leary、Rob Springer和Mirko Rossini。最后,還要感謝Aamer Mahmood的大力支持。
毫無(wú)例外,我在劍橋大學(xué)出版社的聯(lián)系人都非常優(yōu)秀。特別感謝編輯Lauren Cowles在整個(gè)過(guò)程中給予了我極大的指導(dǎo)。
最后,非常感謝我的家人,包括我的愛(ài)犬Charlie,感謝他們?cè)谖液馁M(fèi)心力寫(xiě)作時(shí)給予我的愛(ài)、耐心和支持。
羅伯特·亨特(Robert Hundt)是Google杰出工程師,機(jī)器學(xué)習(xí)編譯器的技術(shù)負(fù)責(zé)人。他曾主導(dǎo)過(guò)Google TPU超級(jí)計(jì)算機(jī)、TensorFlow的XLA編譯器、開(kāi)源CUDA編譯器的軟件開(kāi)發(fā),還是開(kāi)源高層次綜合工具鏈XLS的發(fā)起人。他擁有38項(xiàng)專(zhuān)利,發(fā)表過(guò)超過(guò)25篇科學(xué)論文,是IEEE的高級(jí)會(huì)員。
目 錄
譯者序
前言
致謝
第1章 數(shù)學(xué)基礎(chǔ) 1
1.1 復(fù)數(shù) 1
1.2 狄拉克符號(hào)、左矢和右矢 2
1.2.1 內(nèi)積 3
1.2.2 外積 4
1.3 張量積 4
1.4 酉矩陣和埃爾米特矩陣 5
1.5 公式的埃爾米特伴隨 6
1.6 特征值和特征向量 6
1.7 矩陣的跡 7
第2章 量子計(jì)算基礎(chǔ) 9
2.1 Tensor類(lèi) 9
2.2 量子比特 12
2.3 量子態(tài) 14
2.3.1 量子比特順序 16
2.3.2 二進(jìn)制表示 17
2.3.3 成員函數(shù) 18
2.3.4 量子態(tài)構(gòu)造函數(shù) 20
2.3.5 密度矩陣 22
2.4 輔助函數(shù) 22
2.4.1 比特轉(zhuǎn)換 22
2.4.2 比特迭代 23
2.5 算子 23
2.5.1 酉算子 23
2.5.2 基類(lèi) 24
2.5.3 算子的作用 25
2.5.4 多量子比特 27
2.5.5 算子填充 29
2.6 單量子比特門(mén) 30
2.6.1 單位門(mén) 30
2.6.2 Pauli矩陣 31
2.6.3 旋轉(zhuǎn) 32
2.6.4 相位門(mén) 34
2.6.5 靈活的相位門(mén) 35
2.6.6 門(mén)的平方根 36
2.6.7 投影算子 38
2.6.8 Hadamard門(mén) 39
2.7 受控門(mén) 41
2.7.1 受控非門(mén) 44
2.7.2 受控–受控非門(mén) 44
2.7.3 交換門(mén) 45
2.7.4 受控交換門(mén) 46
2.8 量子電路表示方法 46
2.9 Bloch球 49
2.10 全局相位 52
2.11 量子糾纏 53
2.11.1 直積態(tài) 54
2.11.2 糾纏電路 54
2.11.3 Bell態(tài) 56
2.11.4 GHZ態(tài) 56
2.11.5 最大糾纏 57
2.12 量子不可克隆定理 57
2.13 對(duì)消計(jì)算 58
2.14 約化密度矩陣和分跡 60
2.15 測(cè)量 63
2.15.1 量子力學(xué)的基本假設(shè) 63
2.15.2 投影測(cè)量 64
2.15.3 實(shí)現(xiàn) 66
2.15.4 例子 67
第3章 簡(jiǎn)單算法 69
3.1 隨機(jī)數(shù)生成器 69
3.2 門(mén)的等價(jià) 70
3.2.1 門(mén)的根的平方就是門(mén) 71
3.2.2 倒轉(zhuǎn)受控非門(mén) 71
3.2.3 受控Z門(mén) 72
3.2.4 非Y門(mén) 73
3.2.5 Pauli矩陣的關(guān)系 74
3.2.6 改變旋轉(zhuǎn)軸 74
3.2.7 受控–受控門(mén) 75
3.2.8 多重受控門(mén) 76
3.2.9 受控門(mén)的等價(jià) 77
3.2.10 交換門(mén) 78
3.3 經(jīng)典算術(shù) 78
3.4 交換測(cè)試 82
3.5 量子隱形傳態(tài) 86
3.6 超密編碼 90
3.7 Bernstein-Vazirani算法 93
3.8 Deutsch算法 95
3.8.1 問(wèn)題:區(qū)分兩種函數(shù) 96
3.8.2 構(gòu)造Uf 98
3.8.3 計(jì)算算子 100
3.8.4 實(shí)驗(yàn) 101
3.8.5 通用oracle算子 103
3.8.6 Bernstein-Vazirani算法的
oracle形式 103
3.9 Deutsch-Jozsa算法 104
第4章 可擴(kuò)展、快速仿真 107
4.1 仿真復(fù)雜性 107
4.2 量子寄存器 109
4.3 電路 111
4.3.1 量子比特 112
4.3.2 門(mén)的作用 113
4.3.3 門(mén) 113
4.3.4 伴隨門(mén) 114
4.3.5 測(cè)量 115
4.3.6 交換算子 115
4.3.7 多重受控門(mén)的構(gòu)建 116
4.3.8 例子 117
4.4 門(mén)的快速作用 118
4.5 加速門(mén)的作用 122
4.5.1 電路的最終實(shí)現(xiàn) 124
4.5.2 過(guò)早優(yōu)化,第一步 125
4.6 稀疏表示 127
第5章 超越經(jīng)典 130
5.1 1萬(wàn)年、2天還是200s 131
5.2 量子隨機(jī)電路算法 131
5.3 電路構(gòu)造 133
5.4 估計(jì) 136
5.5 評(píng)估 138
第6章 復(fù)雜算法 140
6.1 相位反沖 141
6.2 量子傅里葉變換 142
6.2.1 二進(jìn)制分?jǐn)?shù) 142
6.2.2 相位門(mén) 144
6.2.3 量子傅里葉變換理論 144
6.2.4 雙量子比特量子傅里葉
變換 146
6.2.5 量子傅里葉變換算子 148
6.2.6 在線(xiàn)模擬 149
6.3 量子算術(shù) 150
6.4 相位估計(jì) 157
6.4.1 特征值與特征向量 157
6.4.2 相位估計(jì)理論 157
6.4.3 推導(dǎo)細(xì)節(jié) 158
6.4.4 實(shí)現(xiàn) 162
6.5 Shor算法 164
6.5.1 模運(yùn)算 164
6.5.2 最大公因數(shù) 165
6.5.3 因數(shù)分解 165
6.5.4 周期尋找 167
6.5.5 Playground 168
6.6 求階 170
6.6.1 主程序 174
6.6.2 支撐程序 176
6.6.3 模加法 178
6.6.4 受控模乘法 180
6.6.5 連分?jǐn)?shù) 181
6.6.6 實(shí)驗(yàn) 182
6.7 Grover算法 183
6.7.1 高層次概述 183
6.7.2 相位反轉(zhuǎn) 184
6.7.3 關(guān)于均值的反轉(zhuǎn) 185
6.7.4 簡(jiǎn)單的數(shù)字例子 186
6.7.5 雙量子比特的例子 186
6.7.6 迭代次數(shù) 188
6.7.7 相位反轉(zhuǎn)的實(shí)現(xiàn) 190
6.7.8 相位反轉(zhuǎn)算子 191
6.7.9 關(guān)于均值的反轉(zhuǎn)的實(shí)現(xiàn) 191
6.7.10 關(guān)于均值反轉(zhuǎn)的算子 194
6.7.11 Grover算法的實(shí)現(xiàn) 195
6.8 振幅放大 198
6.9 量子計(jì)數(shù) 200
6.10 量子隨機(jī)游走 204
6.10.1 一維游走 204
6.10.2 付諸行動(dòng) 206
6.11 變分量子本征求解器 208
6.11.1 系統(tǒng)演化 209
6.11.2 變分原理 210
6.11.3 用Pauli基測(cè)量 211
6.11.4 VQE算法 213
6.11.5 測(cè)量特征值 215
6.11.6 多量子比特 217
6.12 量子近似優(yōu)化算法 220
6.13 最大割算法 221
6.13.1 NP算法的Ising公式 221
6.13.2 最大割/最小割 221
6.13.3 構(gòu)造圖 223
6.13.4 計(jì)算最大割 223
6.13.5 構(gòu)造哈密頓量 225
6.13.6 窺視法的VQE 227
6.14 子集和算法 228
6.14.1 實(shí)現(xiàn) 229
6.14.2 實(shí)驗(yàn) 230
6.15 Solovay–Kitaev定理與算法 231
6.15.1 通用門(mén) 232
6.15.2 SU(2) 232
6.15.3 Bloch球的角度和軸 232
6.15.4 相似性度量 234
6.15.5 預(yù)計(jì)算門(mén) 234
6.15.6 算法 235
6.15.7 平衡的群交換子 236
6.15.8 評(píng)估 239
6.15.9 隨機(jī)門(mén)序列 240
第7章 量子糾錯(cuò) 242
7.1 量子噪聲 242
7.1.1 量子操作 244
7.1.2 比特翻轉(zhuǎn)和相位翻轉(zhuǎn)信道 245
7.1.3 去極化信道 245
7.1.4 振幅阻尼和相位阻尼 246
7.1.5 非精確門(mén) 246
7.2 量子糾錯(cuò)理論 247
7.2.1 量子重復(fù)碼 248
7.2.2 糾正比特翻轉(zhuǎn)錯(cuò)誤 249
7.2.3 糾正相位翻轉(zhuǎn)錯(cuò)誤 251
7.3 9量子比特Shor碼 252
第8章 量子編程語(yǔ)言、編譯器和
工具 254
8.1 量子編譯面臨的挑戰(zhàn) 255
8.2 量子編程模型 255
8.3 量子編程語(yǔ)言 256
8.3.1 QASM 257
8.3.2 QCL 257
8.3.3 Scaffold 259
8.3.4 Q語(yǔ)言 260
8.3.5 Quipper 261
8.3.6 Silq 262
8.3.7 商業(yè)系統(tǒng) 263
8.4 編譯器優(yōu)化 263
8.4.1 經(jīng)典編譯器優(yōu)化 264
8.4.2 簡(jiǎn)單門(mén)變換 265
8.4.3 門(mén)融合 265
8.4.4 門(mén)調(diào)度 266
8.4.5 窺孔優(yōu)化 267
8.4.6 高性能模式庫(kù) 268
8.4.7 邏輯到物理的映射 268
8.4.8 物理門(mén)的分解 269
8.5 轉(zhuǎn)譯 269
8.5.1 中間表示 270
8.5.2 中間表示節(jié)點(diǎn) 270
8.5.3 中間表示基類(lèi) 271
8.5.4 量子電路擴(kuò)展 271
8.5.5 電路的電路 272
8.5.6 代碼生成 273
8.5.7 QASM 274
8.5.8 LIBQ 275
8.5.9 Cirq 276
8.5.10 開(kāi)源模擬器 277
附錄 稀疏實(shí)現(xiàn) 279
參考文獻(xiàn) 290