柚子快報(bào)激活碼778899分享:量子計(jì)算 量子機(jī)器學(xué)習(xí)
柚子快報(bào)激活碼778899分享:量子計(jì)算 量子機(jī)器學(xué)習(xí)
量子計(jì)算概論
量子位元的布洛赫球表示
布洛赫球表面上的任何一點(diǎn)都代表一個(gè)量子位態(tài)。因此,量子位的任何廣義狀態(tài)|ψ?可由三個(gè)參數(shù)γ、θ和φ表示,如下所示:
我們已經(jīng)看到的量子位的狀態(tài)可以表示為|ψ?= α|0?+ β|1?,其中α和β為復(fù)數(shù)。我們可以將任意復(fù)數(shù)α在笛卡爾坐標(biāo)系中表示為α = a + ib 或者,我們可以選擇將極坐標(biāo)中的任何復(fù)數(shù) α 表示為其中。
如果我們?nèi)『?,那么我們有以下結(jié)果:?
如果忽略全局相位因子,狀態(tài)的Bloch球表示可表示為:
布洛赫球面上有無(wú)數(shù)個(gè)點(diǎn),每個(gè)點(diǎn)對(duì)應(yīng)一個(gè)量子位態(tài)。然而,在測(cè)量量子位時(shí),如果測(cè)量在標(biāo)準(zhǔn)0?1基礎(chǔ)上完成,我們僅觀察到兩種狀態(tài)之一|0?或|1?。隨后對(duì)量子位的測(cè)量繼續(xù)展示被測(cè)狀態(tài)。因此,如果我們測(cè)量量子位狀態(tài)為∣0?,連續(xù)的后測(cè)量將繼續(xù)揭示狀態(tài)∣0?。所以,測(cè)量改變了量子位的狀態(tài)。
Stern-Gerlach實(shí)驗(yàn)
斯特恩-格拉赫實(shí)驗(yàn)是最早用來(lái)理解量子位特性的實(shí)驗(yàn)之一。這個(gè)實(shí)驗(yàn)是斯特恩在1921年構(gòu)想出來(lái)的,1922年他和格拉赫合作進(jìn)行了這個(gè)實(shí)驗(yàn)。在實(shí)驗(yàn)裝置中,向各個(gè)方向發(fā)射的熱銀原子通過(guò)一個(gè)準(zhǔn)直器,以使銀原子束在水平方向上排列。下一階段,銀原子束通過(guò)磁鐵的兩個(gè)磁極。
磁鐵有一個(gè)特殊的設(shè)置,南極是平的,北極有鋒利的邊緣。這使得從準(zhǔn)直器出來(lái)的銀原子由于該區(qū)域的不均勻磁場(chǎng)而發(fā)生偏轉(zhuǎn)。隨后,偏轉(zhuǎn)的銀原子被收集到探測(cè)器屏幕上。磁鐵的設(shè)計(jì)是這樣的,沿著z方向的磁場(chǎng),因此一般來(lái)說(shuō),非均勻磁場(chǎng)B檢測(cè)到原子的方式是,它們應(yīng)該撞擊到探測(cè)器中兩個(gè)極端之間的任何位置,但它們撞擊的是兩個(gè)不同的位置,A和B。 銀原子在穿過(guò)磁場(chǎng)時(shí),受到一個(gè)力F,由勢(shì)能U的負(fù)梯度給出,如圖所示: 勢(shì)能是銀原子的磁矩μ與斯特恩格拉赫裝置的不均勻磁場(chǎng)B的點(diǎn)積的負(fù)數(shù)。因此,勢(shì)能U可以寫(xiě)成: 將方程代入,我們將銀原子所受的力的表達(dá)式簡(jiǎn)化為:因此,我們看到當(dāng)原子沿z方向的磁矩為負(fù)時(shí),施加在原子上的力為正。正的力將把原子推到偏轉(zhuǎn)屏上O點(diǎn)以上,而負(fù)的力將把原子推到偏轉(zhuǎn)屏上O點(diǎn)以下的任何一點(diǎn)。同樣,經(jīng)典的z方向上的磁矩μz可以用原子的磁矩表示為: 參數(shù)θ是μ與z軸的夾角。根據(jù)上面的公式,取+|μ|和?|μ|之間的連續(xù)值。因此,所有的原子都應(yīng)該分布在這兩個(gè)值之間。然而,正如前面所討論的,這并沒(méi)有發(fā)生,原子出現(xiàn)在兩個(gè)離散的點(diǎn)上。讓我們從一個(gè)角度來(lái)解釋這個(gè)現(xiàn)象,以及它與角動(dòng)量量子化的關(guān)系。 一個(gè)銀原子有47個(gè)電子,46個(gè)電子的總角動(dòng)量是零。原子的總角動(dòng)量由軌道角動(dòng)量和自旋角動(dòng)量組成。此外,第47個(gè)電子的軌道角動(dòng)量為零。因此,與銀原子相關(guān)的唯一角動(dòng)量是來(lái)自第47個(gè)電子的自旋角動(dòng)量。我們應(yīng)該能在偏轉(zhuǎn)屏上得到第47個(gè)電子的自旋角動(dòng)量的信號(hào)。原子核對(duì)原子角動(dòng)量的貢獻(xiàn)不大,因此可以忽略。所以,銀原子的磁矩,實(shí)際上是由于第47個(gè)電子的自旋角動(dòng)量。所有原子撞擊的兩個(gè)離散區(qū)域應(yīng)該對(duì)應(yīng)于固有自旋角動(dòng)量,它可以取兩個(gè)離散值,對(duì)應(yīng)于O以上的離散區(qū)域,以及對(duì)應(yīng)于O以下的離散區(qū)域。通常,對(duì)應(yīng)的狀態(tài)被表示為∣0?狀態(tài)。被表示為∣1?狀態(tài)。因此,Stern-Gerlach實(shí)驗(yàn)確立了角動(dòng)量是量子化的事實(shí)。Stern-Gerlach上下?tīng)顟B(tài)完美地匹配Bloch球表示,因此|+z?=∣0?,且|?z?=∣1?。事實(shí)上,原子的自旋角動(dòng)量和軌道角動(dòng)量是在這個(gè)實(shí)驗(yàn)中首先想到的。在這個(gè)Stern Gerlach裝置中,如果原子只有軌道角動(dòng)量,那么由于銀原子的軌道角動(dòng)量為零,人們可以預(yù)期原子束在磁場(chǎng)的影響下不會(huì)偏轉(zhuǎn)。這個(gè)事實(shí)讓物理學(xué)家相信除了軌道角動(dòng)量之外,還有自旋角動(dòng)量的存在。 在下圖中A的Stern-Gerlach實(shí)驗(yàn)的示意圖中,模型已大大簡(jiǎn)化,其中來(lái)自烘爐的輸入束流輸出兩束原子∣+ Z?和∣?Z?。 在上圖B中,我們將兩個(gè)Stern-Gerlach裝置串聯(lián)在一起。第一裝置使原子沿z方向偏轉(zhuǎn),第二裝置使原子沿x方向偏轉(zhuǎn)。對(duì)應(yīng)于∣+ Z?狀態(tài)的原子僅通過(guò)沿著x軸的第二個(gè)設(shè)備被發(fā)送。與預(yù)期相反,我們看到在x方向有兩束原子,我們可以方便地稱為狀態(tài)∣+ x?和∣?x?。只是要清楚的是,盡管x、y和z軸互相正交,狀態(tài)向量∣+ z?并不垂直于∣?x?或∣+ x?。
多量子
用兩個(gè)經(jīng)典比特,我們可以有四種狀態(tài):00 01 10和11。一個(gè)有兩個(gè)量子位A和B的量子系統(tǒng)可以是4種狀態(tài)的疊加,這些狀態(tài)對(duì)應(yīng)于計(jì)算基態(tài)00、01、10和11。我們可以將雙量子位系統(tǒng)的狀態(tài)表示為: 在形式∣ij?的計(jì)算基狀態(tài)中,i表示第一個(gè)量子位的基狀態(tài),j表示第二個(gè)量子位的基狀態(tài)。因此,概率振幅aij表示聯(lián)合狀態(tài)∣ij?。這些概率振幅屬于復(fù)平面,這些振幅的平方之和應(yīng)該是1。 現(xiàn)在讓我們看看態(tài)∣ψ?AB將發(fā)生什么,如果我們碰巧測(cè)量一個(gè)量子比特,說(shuō)量子A,我們觀察態(tài)|0?。由于我們已經(jīng)觀察到量子位A處于|0?態(tài),在|1?態(tài)中與量子位A對(duì)應(yīng)的計(jì)算基態(tài)將消失。量子位A和B的新合并狀態(tài)∣ψ’?AB將如下: 當(dāng)然,為了確保新?tīng)顟B(tài)的概率和為1,我們需要對(duì)新?tīng)顟B(tài)的組成振幅進(jìn)行歸一化。
貝爾態(tài)
最有趣的雙量子位態(tài)之一是如下所示的狀態(tài): 這個(gè)態(tài)是態(tài)∣00?和∣11?同等比例的疊加。如果我們觀察量子位A并測(cè)量其態(tài)為∣0?,那么雙量子位坍塌為態(tài)∣00?。如果我們現(xiàn)在測(cè)量量子位元B的狀態(tài),那么我們只能找到量子位B一個(gè)狀態(tài)就是∣0?。類似地,如果我們測(cè)量量子位A處于狀態(tài)∣1?,雙量子位狀態(tài)坍塌為∣11?。在這種狀態(tài)下,如果我們對(duì)量子位B進(jìn)行測(cè)量,我們將發(fā)現(xiàn)它在狀態(tài)∣1?中具有100%的確定性。方程中兩個(gè)糾纏量子位元的疊加態(tài)也被稱為貝爾態(tài)。在這個(gè)貝爾態(tài)中,我們可以觀察到,兩個(gè)量子位的狀態(tài)是完全相關(guān)的,這種量子現(xiàn)象被稱為量子糾纏。想象一下,我們用兩個(gè)電子之間的量子糾纏來(lái)創(chuàng)造Bell態(tài),然后我們把這兩個(gè)電子分開(kāi)一段距離?,F(xiàn)在,如果我們測(cè)量一個(gè)電子并觀察它處于狀態(tài)∣0?,那么另一個(gè)電子如果被測(cè)量也將處于狀態(tài)∣0?,即使它們被很遠(yuǎn)的距離分開(kāi)。貝爾狀態(tài)引起了包括愛(ài)因斯坦在內(nèi)的研究人員的極大興趣。
多量子態(tài)
狄拉克符號(hào)
在量子力學(xué)中,量子系統(tǒng)的狀態(tài)存在于復(fù)希爾伯特空間中。希爾伯特空間是一個(gè)具有內(nèi)積范數(shù)的向量空間。它也是一個(gè)完全的矢量空間,在那里量子態(tài)序列的收斂不會(huì)是一個(gè)問(wèn)題。在這里,我們不打算過(guò)多地討論完全向量空間的定義。不熟悉完全向量空間的讀者可以把它們想象成量子系統(tǒng)可以獲得的所有可能狀態(tài)的空間。
右矢
根據(jù)Dirac向量符號(hào),與量子狀態(tài)相關(guān)的列向量表示為∣ψ?。向量的這種符號(hào)表示稱為Ket表示。
左矢
觀察列向量被轉(zhuǎn)置為行向量,振幅被轉(zhuǎn)換為它們的共軛復(fù)數(shù)。對(duì)于一個(gè)復(fù)數(shù)(a + i b),它的共軛復(fù)數(shù)由(a - i b)給出。如果一個(gè)Ket向量只有實(shí)數(shù)的概率振幅,那么相應(yīng)的Bra向量就是它的轉(zhuǎn)置。
內(nèi)積
矢量的級(jí)數(shù)
希爾伯特空間中一個(gè)向量的大小也稱為這個(gè)向量的范數(shù),它被定義為向量與自身的內(nèi)積的平方根。就Ket和Bra符號(hào)而言,向量|ψ?的范數(shù)如下: ci?是ci的復(fù)共軛,向量|ψ?∈的第i個(gè)分量。一個(gè)量子狀態(tài)|ψ?的內(nèi)積〈ψ|ψ?等于1。振幅的平方屬于狀態(tài)∣ψ?坍塌到狀態(tài)∣i?測(cè)量的概率。由于計(jì)算基礎(chǔ)是互斥和窮舉的,因此它們對(duì)應(yīng)的概率之和應(yīng)為1,因此由式1-37和1-38可得:
外積
張量積
張量積為我們提供了一種從兩個(gè)或多個(gè)現(xiàn)有向量空間創(chuàng)建更大向量空間的便捷方法。如果我們有一個(gè)向量空間 V ∈,其基為 { |?, ∣?… ∣?} 和另一個(gè)向量空間 U ∈,其基為 { |?, ∣?… ∣?} ,然后通過(guò)使用張量積,我們可以得到一個(gè)更大的向量空間 W ∈,其中 m × n 個(gè)基集元素,形式為 ∣? ? ∣?。為了方便起見(jiàn),我們將基向量∣? ? ∣? 寫(xiě)為 ∣?。 張量積在量子計(jì)算中很重要,因?yàn)樗鼈冊(cè)试S我們從幾個(gè)量子比特的單個(gè)狀態(tài)中創(chuàng)建量子態(tài)。為了便于說(shuō)明,我們考慮由 |? = |0? + ∣1? 給出的量子位 A 的狀態(tài),以及由 |? = |0? + ∣1? 給出的量子位 B 的狀態(tài)。它們的組合狀態(tài)可以表示為兩個(gè)狀態(tài)的張量積,如下所示: 需要注意的一點(diǎn)是,并非所有的多量子比特狀態(tài)都可以表示為單個(gè)量子比特狀態(tài)的張量積。一個(gè)經(jīng)典的例子是貝爾態(tài),它不能被分解為單個(gè)量子比特態(tài)的張量積。這發(fā)生在量子位處于糾纏態(tài)時(shí)。
單量子比特門
在量子計(jì)算中,人們應(yīng)該能夠操縱量子系統(tǒng)的狀態(tài)。就像在經(jīng)典系統(tǒng)中一樣,我們通過(guò)不同的門來(lái)操縱比特的狀態(tài),如OR,AND,NOT,XOR等。在量子計(jì)算中,我們使用量子門來(lái)操縱量子比特的狀態(tài)。讓我們先來(lái)看看非門的量子等價(jià)物。
量子非門
經(jīng)典的NOT門在現(xiàn)有狀態(tài)為0時(shí)將位的狀態(tài)更改為1,反之亦然。量子門做類似的事情,但在量子位計(jì)算基礎(chǔ)狀態(tài)的振幅方面。它將∣0?態(tài)的概率振幅分配給∣1?態(tài),反之亦然。量子NOT門作為算子X(jué)工作,如下圖所示: 如果我們?cè)谟?jì)算的基礎(chǔ)上把量子位的狀態(tài)表示為矢量,那么我們有:
現(xiàn)在讓我們?cè)囍獯aX的矩陣表示形式。從公式可以看出,X將一個(gè)向量變換成另一個(gè)相同維數(shù)的向量,因此X可以表示為一個(gè)方陣。一個(gè)方陣將二維向量的分量倒轉(zhuǎn)就是矩陣X,如下所示。 在量子門的變換下,總概率應(yīng)該是守恒的。對(duì)于NOT門,我們可以看到概率是守恒的。一般來(lái)說(shuō),為了保證概率守恒,任何量子門只需要遵守一個(gè)性質(zhì)即可:它們應(yīng)該是酉矩陣。 當(dāng)且僅當(dāng)下列關(guān)系式成立時(shí),具有實(shí)數(shù)項(xiàng)的矩陣U稱為酉矩陣: 矩陣是矩陣U的轉(zhuǎn)置,而I是單位矩陣。在量子力學(xué)中,酉算子和狀態(tài)空間分量都可以是復(fù)數(shù)。對(duì)于具有復(fù)數(shù)項(xiàng)的酉矩陣 U,,其中是矩陣 U 的復(fù)共軛轉(zhuǎn)置。
任何可逆矩陣 U 乘以它的逆矩陣都會(huì)得到單位矩陣,并且矩陣乘法是可交換的。
比較上面兩個(gè)方程,我們可以看到任何酉矩陣 U 的逆都是其復(fù)共軛轉(zhuǎn)置。既 矩陣通常用表示,因此對(duì)于酉矩陣,一般可以寫(xiě)出以下形式:
現(xiàn)在讓我們做一些數(shù)學(xué)計(jì)算,看看在量子系統(tǒng)的狀態(tài)下,概率之和是否真的守恒。 當(dāng)應(yīng)用幺正變換U時(shí),讓量子系統(tǒng)的狀態(tài)∣?變?yōu)闋顟B(tài)∣?(參見(jiàn)圖1-6)。 每個(gè)計(jì)算基狀態(tài)對(duì)應(yīng)的概率總和為1,因此我們可以寫(xiě)〈|?= 1。對(duì)量子態(tài) ∣? 應(yīng)用酉變換 U 后,新?tīng)顟B(tài)為 |? = U ∣ ?。 ∣ ? 的左矢表示為 ?∣ = ?∣?,F(xiàn)在狀態(tài) |? 中每個(gè)計(jì)算基礎(chǔ)狀態(tài)的概率之和如下: 由于對(duì)于酉矩陣,公式簡(jiǎn)化為: 由于兩個(gè)向量的點(diǎn)積在幺正變換下是不變的,因此兩個(gè)向量之間的距離也保持不變,因?yàn)閮蓚€(gè)向量之間的距離只不過(guò)是點(diǎn)積的線性和。
Hadamard門
Hadamard 門作用于狀態(tài) |0? 的量子位,并將其帶到的等疊加狀態(tài)。它還將狀態(tài) |1? 轉(zhuǎn)換為狀態(tài) 。哈達(dá)馬門對(duì)應(yīng)的酉矩陣如下:
就布洛赫球體表示而言,哈達(dá)馬門將沿 z 軸對(duì)齊的狀態(tài) |0? 變?yōu)檠卣?x 軸對(duì)齊的狀態(tài) 。 (見(jiàn)圖 1-7。) 需要注意的一件事是,如果我們連續(xù)兩次應(yīng)用阿達(dá)瑪門,量子位元的狀態(tài)保持不變。這是因?yàn)榘⑦_(dá)瑪矩陣的平方等于單位矩陣。
量子Z門
量子Z門使?fàn)顟B(tài)∣0?沒(méi)有變化,而它將狀態(tài)∣1?改變?yōu)?|1?。量子Z門的變換表示如下: 因此,給定任意狀態(tài) |ψ? = α|0? + β∣1?,Z 門會(huì)發(fā)生變化并將其轉(zhuǎn)換為 α|0? ? β∣1?。量子 Z 門可以用計(jì)算基礎(chǔ)狀態(tài)的外積寫(xiě)成如下:
多量子比特門
當(dāng)我們想到2位經(jīng)典門時(shí),我們會(huì)想到AND,XOR,NAND和NOR門。事實(shí)上,在經(jīng)典計(jì)算范式中,NAND門被稱為通用門,因?yàn)槿魏纹渌簧系拈T都可以通過(guò)組合NAND門來(lái)構(gòu)建。幫助我們構(gòu)建通用量子門的兩種量子比特門之一是條件非門,或CNOT門,下一節(jié)將介紹。
CNOT門
CNOT門作用在兩個(gè)量子位上:量子位A,被稱為控制量子位,量子位B,是目標(biāo)量子位。在應(yīng)用一個(gè)CNOT門,控制量子位狀態(tài)保持不變。如果控制量子位處于狀態(tài)∣1?,目標(biāo)量子位狀態(tài)被翻轉(zhuǎn)。 兩個(gè)量子位的計(jì)算基礎(chǔ)狀態(tài)是它們對(duì)應(yīng)的基礎(chǔ)狀態(tài)的張量積。例如,當(dāng)兩個(gè)量子位都處于零狀態(tài)時(shí)的雙量子位狀態(tài)由給出。我們簡(jiǎn)化符號(hào),將狀態(tài)寫(xiě)為 ∣00?。表 1-2 顯示了應(yīng)用 CNOT 門時(shí)量子位計(jì)算基礎(chǔ)狀態(tài)如何變化。 學(xué)習(xí)量子門如何轉(zhuǎn)換計(jì)算基態(tài)的想法是有用的,因?yàn)榱孔娱T是線性算子。這使得我們可以線性累加對(duì)應(yīng)于計(jì)算基態(tài)的轉(zhuǎn)換態(tài),以理解疊加態(tài)上量子門的轉(zhuǎn)換。因此,對(duì)于作用于量子位狀態(tài)α|0?+ β|1?的幺正算子U(適用于任何線性算子),我們可以這樣寫(xiě): 現(xiàn)在,如果我們仔細(xì)看表1-2,我們可以看到,應(yīng)用CNOT門后的目標(biāo)量子位的狀態(tài)是什么都沒(méi)有,但在應(yīng)用CNOT門之前,兩個(gè)量子位的狀態(tài)的模2相加。因此,對(duì)兩個(gè)量子位的CNOT操作可以表示如下(見(jiàn)圖1-8): CNOT門的矩陣表示是4×4方陣。 如果我們只考慮目標(biāo)量子位的輸出,在某種意義上,異或門可以被認(rèn)為是量子CNOT門的經(jīng)典對(duì)應(yīng)物。異或門的輸出只不過(guò)是它的兩個(gè)輸入位A和b的模相加。然而,與CNOT門不同的是,異或門是不可逆的。任何幺正的量子門操作都是可逆的,因此通過(guò)應(yīng)用幺正門的逆變換,我們可以恢復(fù)量子系統(tǒng)的原始狀態(tài)。應(yīng)該注意的是,酉變換的逆也是酉變換。 經(jīng)典的異或門是不可逆的,因?yàn)榻o定異或門的輸出,我們無(wú)法確定它的兩個(gè)輸入。然而,我們可以傳遞其中一個(gè)位,比如位A,作為一個(gè)額外的輸出,使異或門可逆。(如圖1-9所示) 在幾種多量子位門中,CNOT門的特殊之處在于任何量子門都可以用CNOT門和一個(gè)或多個(gè)單量子位門來(lái)構(gòu)建。換句話說(shuō),CNOT和單量子位門形成了一個(gè)通用的量子門集合,我們可以用它構(gòu)造任意精度水平的任意給定量子門。
受控U門
另一個(gè)值得特別提到的多量子位門是受控u門(見(jiàn)圖1-10)。假設(shè)我們有一個(gè)幺正算子U作用于n個(gè)量子位的量子系統(tǒng)。我們可以把受控U門想象成一種基于控制量子位的狀態(tài)將酉算子U應(yīng)用到n個(gè)目標(biāo)量子位的系統(tǒng)上的門。當(dāng)控制量子位處于狀態(tài)∣1?,幺正算子應(yīng)用于n目標(biāo)量子位的系統(tǒng),而當(dāng)控制量子位處于∣0?狀態(tài),沒(méi)有在n目標(biāo)位的系統(tǒng)上應(yīng)用轉(zhuǎn)換。實(shí)際上,CNOT門是受控u門的一種特殊情況,其中幺正算子是單量子位X門。
復(fù)制量子位:不可克隆定理
在經(jīng)典的計(jì)算范式中,復(fù)制一點(diǎn)信息是微不足道的。我們可以有一個(gè)經(jīng)典的CNOT門,它把要復(fù)制的輸入位作為控制位,把一個(gè)被初始化為零的位作為目標(biāo)位來(lái)完成一個(gè)位復(fù)制機(jī)制。換句話說(shuō),一個(gè)經(jīng)典的CNOT門只不過(guò)是XOR門,就像我們之前建立的那樣。參見(jiàn)圖1- 11。 現(xiàn)在讓我們看看我們是否可以使用CNOT門復(fù)制一個(gè)量子位|ψ?的狀態(tài)。兩個(gè)量子位的輸入狀態(tài)可以寫(xiě)為: 在應(yīng)用CNOT時(shí),雙量子比特系統(tǒng)的新?tīng)顟B(tài)改變?yōu)棣羭00?+ β∣11??,F(xiàn)在讓我們看看我們是否能夠復(fù)制量子位的狀態(tài)∣ψ?。如果我們成功復(fù)制了量子位,那么兩個(gè)量子位的輸出狀態(tài)將是 比較CNOT α|00?+ β∣11?的雙量子比特輸出狀態(tài)和方程1-64,我們看到,CNOT不可能復(fù)制狀態(tài)∣ψ?,除非αβ = 0。條件αβ = 0僅當(dāng)α或β為0時(shí)才滿足。條件α = 0適用于狀態(tài)|ψ?=∣1?,而條件β = 0適用于條件|ψ?= |0?。這告訴我們,我們不能復(fù)制量子態(tài),除非它處于計(jì)算的基本態(tài)之一。事實(shí)上,我們可以將一個(gè)量子位的觀測(cè)推廣到任意數(shù)量的量子位的量子系統(tǒng)。這種量子位元的未知疊加態(tài)不能被復(fù)制的特性被稱為不可克隆定理。 如前所述,如果量子位狀態(tài)處于計(jì)算基狀態(tài)之一,我們可以復(fù)制量子位。假設(shè)量子位處于狀態(tài)|ψ?=∣1?。那么CNOT gate的輸出將為∣11?,這將等于狀態(tài)|ψ?|ψ?=∣11?。
不同基的測(cè)量
到目前為止,在討論量子位狀態(tài)的測(cè)量時(shí),我們僅研究了規(guī)范計(jì)算基礎(chǔ)狀態(tài)|0?和∣1?。更準(zhǔn)確地說(shuō),我們已經(jīng)將量子比特的狀態(tài)表示為|ψ?= α|0?+ β∣1?。當(dāng)我們?cè)谟?jì)算基礎(chǔ)上進(jìn)行測(cè)量時(shí),要么我們得到一個(gè)0,具有概率|α|2,使量子位的測(cè)量后狀態(tài)為∣0?,要么我們得到一個(gè)1,具有概率|β|2,使量子位的∣1?的測(cè)量后狀態(tài)。我們可以在其他正交基狀態(tài)以及例如∣+?和∣??基狀態(tài)表示量子位,其中
或者,我們可以根據(jù)∣+?和∣??狀態(tài)表示狀態(tài)∣0?和∣1?,如下: 現(xiàn)在,如果我們?cè)趞 +?的基礎(chǔ)上測(cè)量量子比特的狀態(tài),或者我們將觀察+狀態(tài),且有概率|α + β|2使測(cè)量后狀態(tài)為∣??,或者我們將觀察-狀態(tài),且有概率|α?β|2使測(cè)量后狀態(tài)為∣??。一般情況下,我們可以將量子位的狀態(tài)寫(xiě)在任何線性獨(dú)立的基中表示|?1?,∣?2?,比如|ψ?= α1 |?1?+ α2 |?2?。 在圖1-12中,我們說(shuō)明了測(cè)量量子狀態(tài)∣ψ?的電路表示。在測(cè)量時(shí),量子態(tài)會(huì)坍縮到用于測(cè)量的計(jì)算基態(tài)之一。例如,對(duì)于一個(gè)量子位狀態(tài),我們可能選擇在|0?,∣1?中測(cè)量,因此測(cè)量輸出將是0或1狀態(tài)。類似地,如果我們選擇在|+?,∣?1?中測(cè)量量子位狀態(tài),輸出狀態(tài)將是+狀態(tài)或-狀態(tài)。
貝爾態(tài)量子門
當(dāng)兩個(gè)量子位A和B像貝爾態(tài)一樣相互糾纏時(shí),就不可能分離單個(gè)的量子位態(tài)。換句話說(shuō),我們不能將貝爾態(tài)表示為各個(gè)量子位態(tài)的張量積,如下所示: 如果我們對(duì)量子比特A進(jìn)行測(cè)量,我們得到一個(gè)0,有0.5概率使測(cè)量后狀態(tài)為∣00?,或者我們得到一個(gè)1,有0.5概率使測(cè)量后狀態(tài)為∣11?。在隨后的量子位B的測(cè)量中,如果量子位A的狀態(tài)為0,我們得到0的概率為1。類似地,如果量子位A處于狀態(tài)1,我們就有1的概率得到量子位B的狀態(tài)1。所以,在貝爾態(tài)的量子位元的狀態(tài)是相互關(guān)聯(lián)的。
現(xiàn)在讓我們看看我們?nèi)绾螐牧孔娱T創(chuàng)建貝爾態(tài)。我們可以通過(guò)在∣0?狀態(tài)初始化的兩個(gè)量子位x和y來(lái)創(chuàng)建Bell狀態(tài)。我們通過(guò)第一個(gè)量子位通過(guò)Hadamard gate(見(jiàn)圖1-13),它將量子位x轉(zhuǎn)換為|+?狀態(tài), 量子比特上的Hadamard gate變換(H)表示∣0?和∣1?可被推廣如下: 將x, y∈{0,1}的不同值代入方程1-71,可以得到不同的Bell態(tài),如表1-3所示。
量子隱形傳態(tài)
量子隱形傳態(tài)是一種不需要任何通信通道就能在發(fā)送端和接收端之間傳輸量子態(tài)的量子計(jì)算技術(shù)。 為了說(shuō)明量子隱形傳態(tài),我們將量子態(tài)的發(fā)送方稱為愛(ài)麗絲,量子態(tài)的接收方稱為鮑勃。我們將用一個(gè)故事來(lái)說(shuō)明量子隱形傳態(tài)。Alice 和 Bob 在童年時(shí)期共享貝爾狀態(tài) |?,其中第一個(gè)量子位 屬于 Alice,量子位 屬于 Bob。由于工作原因,鮑勃不得不搬到另一個(gè)城市?,F(xiàn)在愛(ài)麗絲想與鮑勃分享一些信息:第三個(gè)量子位 狀態(tài)∣ψ?。 圖1-15所示為量子隱形傳態(tài)電路。需要注意的一件事是,單電路線不是物理線。它們僅僅描述了不同量子位門運(yùn)行所相對(duì)的時(shí)間的流逝。測(cè)量后的雙線用于描述測(cè)量量子位狀態(tài)后繼承的經(jīng)典信息。 Alice 和 Bob 使用最初處于狀態(tài) |0? 的量子位 和,通過(guò)使用哈達(dá)瑪門的量子電路,然后在時(shí)間時(shí)應(yīng)用 CNOT 門,達(dá)到貝爾狀態(tài) |??,F(xiàn)在Alice想要將量子位狀態(tài)∣ψ?發(fā)送給Bob。 如果我們觀察任意時(shí)刻 t 的三量子位狀態(tài) ∣?,其中,則可以寫(xiě)成如下: 在時(shí)間時(shí),Alice 的量子位 和分別是 CNOT 門的控制量子位和目標(biāo)量子位。 CNOT 門會(huì)改變疊加態(tài) ∣? 中不同的計(jì)算基礎(chǔ)狀態(tài),如下所示: 因此,任意時(shí)刻 t 的狀態(tài)∣?,其中,可以寫(xiě)成如下: 現(xiàn)在,在時(shí)間時(shí),Hadamard 門應(yīng)用于第一個(gè)量子位,因此在任何時(shí)間 t(其中),三個(gè)量子位的組合狀態(tài) |? 可以表示如下: 展開(kāi)公式中的項(xiàng),我們得到狀態(tài) ∣?,如下所示: 由于在時(shí)間時(shí)我們將測(cè)量 Alice 的量子位,因此根據(jù) Alice 量子位的計(jì)算基礎(chǔ)狀態(tài)來(lái)排列狀態(tài) |? 是有意義的,即 |00?、|01?、|10?、| 11?。重新排列公式 1-79 中的各項(xiàng),我們得到: 現(xiàn)在,一旦我們?cè)跁r(shí)間對(duì) Alice 的量子位進(jìn)行測(cè)量,我們將測(cè)量它們處于四種計(jì)算基礎(chǔ)狀態(tài)之一,而 Bob 的量子位的狀態(tài)將是與之糾纏的狀態(tài)。例如,如果我們測(cè)量 Alice 的兩個(gè)量子位均為 0,即 和,那么 Bob 的量子位的狀態(tài)就是與狀態(tài) ∣00? 相關(guān)的狀態(tài),即 (α|0? + β) ∣1?)。這是 Alice 希望發(fā)送給 Bob 的狀態(tài)。 現(xiàn)在,假設(shè)我們測(cè)量且 。那么 Bob 的狀態(tài)就是與狀態(tài) ∣11? 相關(guān)的狀態(tài),即 (α|1? ? β∣0?)。這并不是理想的狀態(tài)。然而,這些變換在鮑勃的量子比特上排列起來(lái);即,和 將負(fù)責(zé)將 (α|1? ? β∣0?) 轉(zhuǎn)換為所需狀態(tài) (α|0? + β∣1?)。 在這種情況下,只不過(guò)是具有以下矩陣表示的量子非門: 這會(huì)翻轉(zhuǎn)概率幅度,因此在應(yīng)用 X 門時(shí),狀態(tài) (α|1? ? β∣0?) 將轉(zhuǎn)換為 (α|0? ? β∣1?)。接下來(lái),Bob 的量子位將通過(guò) = Z門,這只會(huì)翻轉(zhuǎn)與狀態(tài) |1? 相關(guān)的相位。這會(huì)將量子位狀態(tài) (α|0? ? β∣?) 轉(zhuǎn)換為所需的量子位狀態(tài) (α|0? + β∣1?)。 表 1-4 列出了與 Alice 量子位測(cè)量相對(duì)應(yīng)的所有四種可能性。它們每個(gè)都產(chǎn)生 Bob 量子位的最終狀態(tài)為 (α|0? + β∣1?)。
量子并行算法
量子并行性允許人們同時(shí)評(píng)估多個(gè)不同輸入值的函數(shù)。假設(shè)我們有一個(gè)函數(shù) f(x),其中 x 接受 n 個(gè)不同的值。通過(guò)開(kāi)發(fā)適當(dāng)?shù)挠献儞Q,人們可以使用量子計(jì)算機(jī)同時(shí)計(jì)算 x 的所有可能值的 f (x)。許多量子算法利用量子并行性。參見(jiàn)圖 1-16。 假設(shè)我們要計(jì)算一個(gè)具有二元定義域和值域的函數(shù) f(x),即 f : X ∈ {0, 1} → {0, 1}。 評(píng)估該函數(shù)的一種便捷方法是從相等疊加態(tài)作為數(shù)據(jù)輸入,并以初始化為狀態(tài) |y? = ∣0? 的量子位作為目標(biāo)。使用適當(dāng)?shù)挠祥T,我們將聯(lián)合狀態(tài) ∣x, y? 轉(zhuǎn)換為 ∣x, y ⊕ f(x)?,其中 ⊕ 表示模 2 加法。 應(yīng)用酉門后的輸出狀態(tài)可以展開(kāi)如下: 方程 1-81 中的狀態(tài)是一個(gè)有用的狀態(tài),其中 f (0) 和 f(1) 作為分量,與其相應(yīng)的輸入糾纏在一起。就好像我們通過(guò)為函數(shù)域中的所有值創(chuàng)建疊加狀態(tài)來(lái)在其整個(gè)域上立即評(píng)估該函數(shù)。這種量子現(xiàn)象稱為量子并行性。 現(xiàn)在的問(wèn)題是,我們?nèi)绾螐倪@個(gè)疊加狀態(tài)∣ψ?得到函數(shù)評(píng)估? 正如我們已經(jīng)建立的,為了能夠從給定的狀態(tài)中提取任何信息,我們需要執(zhí)行度量。如果我們將數(shù)據(jù)量子位測(cè)量為0,我們將狀態(tài)崩潰為∣0,f(0)??,F(xiàn)在,如果我們對(duì)第二個(gè)量子位進(jìn)行測(cè)量,我們肯定能得到f(0)的值,這是百分之百確定的。類似地,如果我們?cè)诘诙€(gè)量子位上測(cè)量到第一個(gè)量子位為1,我們肯定會(huì)測(cè)量f(1)的值。 我們可以將這種方法推廣到其域中具有多個(gè)輸入值的函數(shù)。假設(shè)我們有一個(gè)函數(shù),其域中有個(gè)值,使得 我們可以通過(guò)在 n 個(gè)量子位系統(tǒng)上使用 Hadamard 門來(lái)創(chuàng)建所有個(gè)值的相等疊加狀態(tài)作為計(jì)算基礎(chǔ)狀態(tài)。為了說(shuō)明這個(gè)想法,我們從最初處于 ∣0? 狀態(tài)的兩個(gè)量子位開(kāi)始(見(jiàn)圖 1-17)。對(duì)它們中的每一個(gè)應(yīng)用 Hadamard 門,我們得到以下結(jié)果: 因此,我們可以看到,通過(guò)在 ∣0? 狀態(tài)初始化的 2 個(gè)量子位上使用 Hadamard 門,我們能夠獲得四個(gè)計(jì)算基礎(chǔ)狀態(tài)的相等疊加。我們可以用整數(shù)表示來(lái)表示計(jì)算基礎(chǔ)狀態(tài)的“二進(jìn)制字符串”表示,如下所示: 現(xiàn)在,如果我們從初始化為 ∣0? 狀態(tài)的 n 個(gè)量子位開(kāi)始,而不是兩個(gè)量子位,那么通過(guò)對(duì)每個(gè)量子位應(yīng)用哈達(dá)瑪變換,我們得到以下疊加狀態(tài): 因此,我們可以看到,通過(guò)使用 n 個(gè)量子位,我們可以同時(shí)評(píng)估一個(gè)函數(shù)在其域中的 2n 個(gè)輸入。當(dāng)然,為了得到函數(shù)值,我們必須對(duì)狀態(tài) |ψ? 進(jìn)行測(cè)量,每次測(cè)量都會(huì)產(chǎn)生輸入 x 及其對(duì)應(yīng)的函數(shù)值 f(x)。
量子干涉
如前所述,在量子計(jì)算算法中,目標(biāo)是使量子系統(tǒng)狀態(tài)給出的概率分布偏向于一個(gè)或多個(gè)結(jié)果。讓我們用一個(gè)例子來(lái)討論量子干涉。
總結(jié)
至此,我們進(jìn)入了第一章的結(jié)尾。在本章中,我們介紹了量子位(量子計(jì)算的基本單位)的大量基礎(chǔ)知識(shí)。此外,我們還討論了糾纏和疊加的重要量子力學(xué)性質(zhì)。此外,我們還研究了幾個(gè)重要的單量子位和多量子位門,它們對(duì)于操縱量子位的狀態(tài)非常重要。在本章末尾,我們討論了貝爾態(tài)、與量子隱形傳態(tài)相關(guān)的概念以及量子并行性。 您將在接下來(lái)的章節(jié)中看到,量子并行性是多個(gè)量子計(jì)算和量子機(jī)器學(xué)習(xí)應(yīng)用中的重要組成部分。在下一章中,我們將討論量子計(jì)算和量子機(jī)器學(xué)習(xí)背景下所需的線性代數(shù)的重要思想,研究量子力學(xué)的假設(shè),然后更詳細(xì)地研究量子系統(tǒng)中的測(cè)量。最后,我們將以一些重要的量子計(jì)算算法來(lái)結(jié)束本章,以進(jìn)一步了解量子計(jì)算及其相關(guān)算法的強(qiáng)大功能。
量子計(jì)算的數(shù)學(xué)基礎(chǔ)和假設(shè)
量子力學(xué)比經(jīng)典力學(xué)更基礎(chǔ),它在微觀和宏觀層面上都起作用。然而,對(duì)于高速運(yùn)動(dòng)的微觀域中的粒子和系統(tǒng),量子力學(xué)的表現(xiàn)變得更加重要。關(guān)于量子力學(xué)的解釋方面仍然存在問(wèn)題。然而,在操作層面上,它可以高精度地處理各種現(xiàn)象。量子力學(xué)的數(shù)學(xué)比經(jīng)典力學(xué)簡(jiǎn)單得多,而且作為一種計(jì)算裝置,量子力學(xué)已經(jīng)取得了巨大的成功。在本章中,我們將討論線性代數(shù)中的一些主題,然后轉(zhuǎn)向量子力學(xué)的假設(shè)。
線性代數(shù)主題
由于量子系統(tǒng)的狀態(tài)存在于希爾伯特空間中,并且狀態(tài)上的算子是線性的,因此線性代數(shù)在量子力學(xué)的研究中變得至關(guān)重要。在第一章中,我們討論了線性代數(shù)中的一些主題,以了解量子力學(xué)和量子計(jì)算。然而,更嚴(yán)格的線性代數(shù)知識(shí)對(duì)于理解量子力學(xué)和量子計(jì)算至關(guān)重要。在本章中,我們將研究線性代數(shù)中的具體思想,這些思想是量子態(tài)、量子演化和量子測(cè)量思想的核心。
向量的線性獨(dú)立性
如果一個(gè)向量不能表示為另一個(gè)向量的線性縮放,則這兩個(gè)向量 |v1? 和 |v2 ? 被稱為線性無(wú)關(guān)。從數(shù)學(xué)上來(lái)說(shuō),如果 |v1? ≠ k|v2 ? 對(duì)于某個(gè)常數(shù) k,|v1? 和 |v2 ? 是線性無(wú)關(guān)的。一組 n 個(gè)向量 |v1 ?,|v2 ?…。 |vn? 如果它們中沒(méi)有一個(gè)可以表示為其他的線性組合,則稱它們是線性無(wú)關(guān)的。要確定給定的 n 個(gè)向量集是否線性無(wú)關(guān),當(dāng)且僅當(dāng)每個(gè)線性系數(shù) c1 到 cn 為零時(shí) c1 |v1? + c2 |v2? + …cn |vn? = 0。如果我們將向量 |v1? 到 |vn ? 排列為矩陣 A 的向量,我們可以將 c1|v1? + c2 |v2? + … + cn |vn? = 0 表達(dá)如下: 僅當(dāng)系數(shù)向量 [c1, c2....cn]T 為零,如果通過(guò)列向量 |v1? 到 |vn ? 形成的矩陣是滿秩的,則這是可能的。如果維度為 m × n 的矩陣 A 的秩等于 m 和 n 中的最小值,則稱其為滿秩。為了使公式 2-1 中的矩陣成為滿秩,其秩必須為 n(假設(shè) m > n)。如果矩陣是 n × n 方陣,我們可以通過(guò)確保矩陣的行列式非零來(lái)驗(yàn)證該矩陣是滿秩的。 如果一組 n 個(gè)向量 |v1 ?, |v2 ?, . 。 |vn ? ε ?n 是線性無(wú)關(guān)的,向量跨越整個(gè) n 維向量空間。跨越n個(gè)向量意味著可以通過(guò)n個(gè)向量的線性組合來(lái)產(chǎn)生不同的其他向量。因此,使用一組 n 個(gè)線性無(wú)關(guān)向量,可以產(chǎn)生中所有可能的向量。如果向量 |v1 ?, |v2 ?, . 。 |vn ? 不是線性獨(dú)立的,那么它們將跨越內(nèi)的更小的子空間。讓我們嘗試用一個(gè)例子來(lái)說(shuō)明向量跨度的概念。 假設(shè)我們有一個(gè)向量|v1?= [1,2,3]T。使用這個(gè),我們可以在三維空間中只跨越一個(gè)維度,因?yàn)樗邢蛄慷紝⑹莂∣v1?的形式,其中a是標(biāo)量乘數(shù)。 現(xiàn)在,如果我們采用另一個(gè)向量|v2?= [5 9 7]T,它不是∣v1?的標(biāo)量乘數(shù),我們可以采用a|v1?+ b∣v2?的形式的線性組合,在三維向量空間中跨越一個(gè)二維子空間,如圖2-1所示。 現(xiàn)在,如果我們將另一個(gè)向量|v3?= [4 8 1]T到我們的向量集,我們可以跨越整個(gè)?3向量空間,因?yàn)閨v1?,∣v2?,和∣v3?是線性獨(dú)立的。如果我們將∣v3?視為∣v1?和∣v2?的線性組合,那么它不可能跨越整個(gè)三維空間。我們將被限制在由∣v1?和∣v2?跨越的二維子空間。
基向量
一組n個(gè)線性獨(dú)立的向量|v1?,|v2?,....|vn?形成了表示n維向量空間中任何給定向量的基礎(chǔ)。使用n個(gè)基向量的線性組合一次就可以在n維向量空間中創(chuàng)建任何向量。
標(biāo)準(zhǔn)正交基
當(dāng)一個(gè)向量空間的基集合中的向量元素彼此正交時(shí),我們就說(shuō)它有一組標(biāo)準(zhǔn)正交基。一組基向量|?1?,|?2?......∣?n?被認(rèn)為形成一個(gè)標(biāo)準(zhǔn)正交基,如果以下情況成立: 我們不需要明確地引用線性無(wú)關(guān)性作為正交基的條件,因?yàn)橄蛄康恼恍钥偸潜WC向量的線性無(wú)關(guān)。 在量子力學(xué)中,我們總是用標(biāo)準(zhǔn)正交基來(lái)表示希爾伯特空間中的量子態(tài)。
線性算子
量子態(tài)存在于復(fù)雜的希爾伯特空間中。在線性和酉算子的作用下,量子態(tài)從一種態(tài)演化到另一種態(tài)。 由于任何向量都可以表示為其基向量的線性和,因此要理解線性算子如何變換向量空間中的任何給定向量,只需知道線性算子如何變換其基向量就足夠了。當(dāng)向量 |v? 和 |w? 的維度匹配時(shí),我們可以將 A 視為從 V 到 V 的線性算子。 向量空間上的兩個(gè)平凡算子是使向量保持不變的單位I算子和將任意向量變換為0向量的零算子。 如果A是一個(gè)從向量空間V到向量空間W的線性算子,如果B是一個(gè)從向量空間W到向量空間Y的線性算子,那么可以通過(guò)組合來(lái)定義一個(gè)線性算子BA,該組合將向量|v?∈V映射到向量| Y?∈Y,如下所示:
將線性算子解釋為矩陣
因此,方程2-9描述了基元素與線性算子A?或它對(duì)應(yīng)的矩陣A關(guān)于這兩個(gè)基底的關(guān)系。一般來(lái)說(shuō),線性算子也可以看作是關(guān)于通?;囊粋€(gè)矩陣。在本書(shū)中,我們不會(huì)對(duì)線性算子及其相應(yīng)的矩陣作任何區(qū)別。除非另有說(shuō)明,否則矩陣變換是關(guān)于通常的基的。在量子力學(xué)中,線性算符是方陣,因此向量空間V上的線性算符可以被認(rèn)為是從V到V的變換。此外,對(duì)于形式為a: V→V的線性算符,在沒(méi)有明確規(guī)定的情況下,我們將假設(shè)通常的基。 既然我們?cè)诙x線性算子和它們對(duì)應(yīng)的矩陣時(shí)特別注意基,讓我們花點(diǎn)時(shí)間來(lái)學(xué)習(xí)量子位態(tài)的通?;?。對(duì)于單量子比特系統(tǒng),通常的基向量為|0?= [1 0]T且|1?= [0 1]T。 類似地,對(duì)于兩個(gè)量子比特系統(tǒng),通常的基向量將是單個(gè)量子比特通?;鶢顟B(tài)的張量積,即,|i??∣j?,其中i表示量子比特1的通?;鶢顟B(tài),j表示量子比特2的通?;鶢顟B(tài)。我們可以有四種這樣的組合:|0??|0?,|0??|1?,|1??∣0?,且|1??∣1?。它們的列向量表示可以通過(guò)展開(kāi)張量積得到。示例:|1??|0?= [0 1]T?[1 0]T = [0 0 1 0]T。通常,對(duì)于一個(gè)n-量子比特系統(tǒng),將存在2n個(gè)基狀態(tài)向量,其形式為|ko??|k1??|k2?…?∣kn?1?,其中ki表示第i個(gè)量子比特的基向量。
外積形式的線性算子
Pauli 算子及其外積表示
我們?cè)诘谝徽轮泻?jiǎn)要地討論了泡利矩陣。四個(gè)泡利矩陣是線性運(yùn)算符,相對(duì)于計(jì)算基∣0?和∣1?。 將泡利矩陣表示為外積的最簡(jiǎn)單方法是確定計(jì)算基礎(chǔ)狀態(tài)向量在泡利矩陣運(yùn)算時(shí)的變換。例如,如果我們采用泡利矩陣 σz ,它將基礎(chǔ)狀態(tài) ∣0? 轉(zhuǎn)換為 ∣0? ,并將基礎(chǔ)狀態(tài) ∣1? 轉(zhuǎn)換為 ? ∣1?。因此,根據(jù)公式 2-11,我們可以寫(xiě)出以下內(nèi)容:
線性算子的特征向量和特征值
向量空間 V 上的線性算子 A 的特征向量是向量 ∣v?,使得 A∣v? = λ∣v?。這里,λ是特征值,∣v?是特征值λ對(duì)應(yīng)的特征向量。圖 2-2 顯示了特征向量的變換。 我們可以通過(guò)求解det| a?λI| = 0給出的特征方程來(lái)求得線性算子a的特征值。線性算子A的特征方程對(duì)應(yīng)的特征函數(shù)定義為c(λ) = det∣A?λ i∣。特征方程自然地來(lái)自于特征向量方程,如下所示: 公式2-17可以有兩個(gè)解,微不足道的一個(gè)是|v?= 0。然而,更有趣的解是當(dāng)(A?λI)的列向量不是線性無(wú)關(guān)時(shí)。在這種情況下,矩陣(A - λI)不是滿秩的,因此它的行列式det(A - λI)應(yīng)該是零。這就給出了特征值解的著名特征方程如下:
算子的對(duì)角線表示
如果∣k?表示的算子A的特征向量是正交的,其對(duì)應(yīng)的特征值用λk表示,則算子A可以表示為: 這種表示法稱為算子的對(duì)角線表示法。對(duì)應(yīng)于算子A的矩陣是對(duì)角線的如果算子以特征向量作為基用對(duì)角線矩陣的形式表示的話。并不是所有的矩陣或運(yùn)算符都有對(duì)角線表示。這里所示的線性算子A對(duì)于通常的計(jì)算基礎(chǔ)具有對(duì)角線表示: 在這種情況下,特征向量∣0?和∣1?對(duì)應(yīng)于特征值3和4。我們?cè)倏戳硪粋€(gè)算子它關(guān)于通?;谋硎臼怯膳堇仃嚘襵表示的。
算子的伴隨
伴隨算子也稱為厄米共軛算子。在第一章中,我們將伴隨算子稱為算子的共軛轉(zhuǎn)置,因?yàn)槿绻覀円盟阕拥木仃嚤硎痉?,那么它正是如此。向?|v? 的共軛轉(zhuǎn)置,我們表示為 ?v|也可以用伴隨符號(hào) |v?? 來(lái)表示。 伴隨算子的一些性質(zhì)在這里概述: 對(duì)于兩個(gè)線性算子A和B, (AB)?= B?A?。 一個(gè)算子的伴隨子的伴隨子返回同一個(gè)算子。換句話說(shuō),(A?)?= A 一般情況下,算子A與其伴隨的A?是不相等的。類似地,在一般情況下,算子A和它的伴隨算子不是可換的;即通常AA?不等于A?A。
自伴或厄米算子
當(dāng)運(yùn)算符 A 等于其伴隨運(yùn)算符時(shí),即 A = A+,則該運(yùn)算符被稱為自伴隨運(yùn)算符或 Hermitian 運(yùn)算符。 Hermitian 算子的一些相關(guān)屬性如下: 厄米算子總是具有實(shí)數(shù)特征值。 對(duì)于非簡(jiǎn)并的厄米算子,即每個(gè)特征值僅對(duì)應(yīng)于一個(gè)特征向量,厄米算子的特征向量彼此正交。
普通運(yùn)算符
如果線性算子 A 與其伴隨 A? 可交換,則稱其為正規(guī)算子 A。因此,對(duì)于普通算子來(lái)說(shuō),AA? = A?A。這里概述了普通運(yùn)算符的一些重要屬性: 厄米算符A自然是一個(gè)正規(guī)的算符,因?yàn)閷?duì)于厄米算符A = A+,因此關(guān)系A(chǔ)A?= A?A總是成立的。然而,正規(guī)算子不一定是厄米特算子。 正規(guī)算子可以進(jìn)行譜分解。在譜分解形式中,可以將一個(gè)正規(guī)算子A表示為。其中,λk表示特征向量∣k?對(duì)應(yīng)的特征值。我們將在后面的章節(jié)中更詳細(xì)地討論譜分解。
酉算子
我們?cè)诘谝徽略敿?xì)討論了酉算子,因?yàn)榱孔酉到y(tǒng)狀態(tài)上允許的所有變換本質(zhì)上應(yīng)該是酉算子。對(duì)于任何酉算子 U,我們知道 UU? = U?U = I,它自動(dòng)滿足正規(guī)算子的條件:UU? ? U?U = 0。因此,所有酉算子都是正規(guī)算子。因此,正規(guī)算子族同時(shí)包含厄米算子和酉算子,如圖 2-3 所示。此外,多個(gè)酉算子可以是Hermitian算子,反之亦然。例如,Hadamard 矩陣既是酉矩陣又是 Hermitian 矩陣。
線性算子的譜分解
這稱為線性算子的譜分解,其中正規(guī)算子的特征值和相應(yīng)的特征向量分別為λk和|k?。我們?cè)诘?1 章中廣泛使用的 Hadamard 門是一個(gè)普通算子。
線性算子的跡
線性算子的跡可以定義為其對(duì)角線項(xiàng)的總和。矩陣跡的一些性質(zhì)如下: 線性算子的特征值之和等于算子的跡。 如果 ∣u? 和 ∣v? 是向量空間 V 中的兩個(gè)向量,并且 A 是 V 上的運(yùn)算符,那么我們有:
向量張量積的線性算子
如果 A 和 B 分別是向量空間 V 和 W 中向量 ∣v? 和 ∣w? 上的線性算子,則向量 |v? ? ∣w? 上的線性算子由 A ? B 給出。 線性算子 A ? B 對(duì) |v? ? |w? 的作用如下: 因此,A ? B 可以被認(rèn)為是由 V ? W 給出的向量空間 V 和 W 的張量積的線性算子。
普通算子的功能
指數(shù)函數(shù)在量子力學(xué)中至關(guān)重要,正如我們將在本章后面的量子力學(xué)假設(shè)中看到的那樣。我們可以如下定義普通算子 A 上的指數(shù)函數(shù),其中 c ∈ ? 是任意常數(shù)。根據(jù)公式 2-38,我們可以將 exp(cA) 寫(xiě)成如下:
換向器和反換向器算子
對(duì)于兩個(gè)可交換的算子,換向算子為零。如果兩個(gè)運(yùn)算符交換,則可以同時(shí)對(duì)它們進(jìn)行對(duì)角化。
量子力學(xué)假設(shè)
在本節(jié)中,我們將介紹量子力學(xué)的基本假設(shè)。這些假設(shè)充當(dāng)了物理量子世界和量子力學(xué)數(shù)學(xué)公式之間的橋梁。
假設(shè) 1:量子態(tài)
量子系統(tǒng)的狀態(tài)由復(fù)希爾伯特空間中的向量 |ψ? 表示。希爾伯特空間是配備有由內(nèi)積導(dǎo)出的范數(shù)的完全向量空間。 狀態(tài)向量∣ψ?包含給定時(shí)間量子系統(tǒng)的所有信息。 根據(jù)我們選擇的基礎(chǔ),狀態(tài)可以代表不同的物理可觀測(cè)值。例如,我們可以查看相對(duì)于 ∣0? 和 ∣1? 計(jì)算基礎(chǔ)狀態(tài)的量子位狀態(tài),并將量子位表示為 |ψ? = α|0? + β ∣1?。這里α和β是狀態(tài)|0?和|1?對(duì)應(yīng)的概率幅,量子位處于∣0?和|1?的疊加。
假設(shè) 2:量子進(jìn)化
在方程 2-49 中,U(t1 , t0) 是將量子系統(tǒng)從狀態(tài) |ψ(to)? 帶到 |ψ(t1 )? 的酉算子。
量子態(tài)時(shí)間演化的薛定諤方程
讓我們嘗試看看酉算子 U(t1 , t0) 與量子力學(xué)最重要的方程之一:薛定諤方程的關(guān)系。 在上式中, ? 是歸一化普朗克常數(shù),等于 h/2π ,其中 h 是普朗克常數(shù)。這里的術(shù)語(yǔ) H 指的是封閉量子系統(tǒng)的哈密頓量,不要與哈達(dá)瑪變換混淆。 特征值特意表示為 Ek 以表示能量。我們用 ∣Ek? 表示相應(yīng)的本征態(tài)。處于最低能量狀態(tài)的量子系統(tǒng)將處于對(duì)應(yīng)于最小能量本征值 Emin 的本征態(tài) ∣Emin? 。由于哈密頓算子是厄米算子,因此我們只能有真實(shí)的能級(jí)。 表達(dá)式 e^###是酉算子,它將具有哈密頓量 H 的量子系統(tǒng)從時(shí)間 t0 的狀態(tài) |ψ(t0)? 轉(zhuǎn)變?yōu)闀r(shí)間 t1 的 |ψ(t1 )?。它正是方程 2-49 中的酉算子 U(t1 , t0),因此我們可以說(shuō): 基本上,U(t1, t0)與H具有相同的特征向量∣Ek?與特征值e^###是哈密頓特征值Ek的指數(shù)版本。
假設(shè) 3:量子測(cè)量
我們之前已經(jīng)確定,我們可以用代表某些可測(cè)量物理量的合適正交基來(lái)表達(dá)狀態(tài)。狀態(tài)|ψ?一般可以表示為這些正交基狀態(tài)的疊加。如果我們嘗試測(cè)量 ∣0? 和 |1? 基本狀態(tài)中量子位的狀態(tài),假設(shè)量子位為 |ψ? = α|0? + β ∣ 1?,則測(cè)量將產(chǎn)生狀態(tài) 0 或 1 之一。 測(cè)量產(chǎn)生狀態(tài) 0 的概率為 |α|2,而狀態(tài) 1 的概率為 |β|2。 量子位的測(cè)量后狀態(tài)是測(cè)量的基礎(chǔ)狀態(tài)。例如,如果我們?cè)俅螠y(cè)量量子位狀態(tài)為∣0?,我們將得到相同的狀態(tài)∣0?。 當(dāng)我們進(jìn)行測(cè)量時(shí),量子系統(tǒng)不再封閉,因?yàn)樗c測(cè)量過(guò)程相互作用。因此,在測(cè)量時(shí),量子態(tài)不再根據(jù)薛定諤方程演化。
一般測(cè)量算子
該完整性方程來(lái)自這樣一個(gè)事實(shí):與集合 {Mk} 中不同測(cè)量算子相關(guān)的概率之和應(yīng)為 1??梢酝ㄟ^(guò)對(duì)方程 2-55 所示的不同結(jié)果的概率求和來(lái)證明這一點(diǎn)。 到目前為止,我們還沒(méi)有對(duì)這些測(cè)量算子{Mk}的結(jié)構(gòu)做出任何假設(shè)。只要它們滿足完整性方程并產(chǎn)生有效的正概率值,它們就是有效的測(cè)量算子?,F(xiàn)在讓我們看看當(dāng)您計(jì)劃對(duì)不同的計(jì)算基礎(chǔ)狀態(tài)進(jìn)行測(cè)量時(shí)如何定義這些測(cè)量運(yùn)算符。如果您使用正交計(jì)算基礎(chǔ)狀態(tài) {| ψk ?},則可以將測(cè)量算子定義為 Mk = |ψk??ψk |。 測(cè)量算子的一些重要屬性如下: 測(cè)量算子是厄米算子。
投影測(cè)量算子
投影測(cè)量是一種組合各個(gè)測(cè)量算子 P0 、 P1 、PN ? 1 對(duì)應(yīng)于正交基向量 |ψ0?, |ψ1 ?, 。 。 ∣ ψN ? 1 ?等的方法。投影測(cè)量算子 M 是 Hermitian 算子,其表示形式如下: 請(qǐng)注意,雖然與各個(gè)基態(tài)相關(guān)的運(yùn)算符 P0、P1、...PN ? 1 是酉的,投影測(cè)量算子 M 不是酉算子。 投影測(cè)量算子可用于計(jì)算可由正交基表示的結(jié)果的統(tǒng)計(jì)屬性。例如,我們可以根據(jù)量子系統(tǒng)的狀態(tài) |ψ? 計(jì)算其平均結(jié)果,如下所示: 如果要制作量子態(tài) ∣ψ? 的多個(gè)相同副本并相對(duì)于測(cè)量算子 M 基向量進(jìn)行測(cè)量,則射影算子 M 的標(biāo)準(zhǔn)差是結(jié)果分布的度量。投影測(cè)量算子的標(biāo)準(zhǔn)偏差導(dǎo)致了著名的海森堡不確定性原理,如下一節(jié)所示。
海森堡測(cè)不準(zhǔn)原理
海森堡不確定性原理給出了兩個(gè)投影測(cè)量算子(例如 M 和 N)的標(biāo)準(zhǔn)差乘積的下界,給定量子態(tài) ∣ψ?。 假設(shè)我們有兩個(gè)測(cè)量算子M和N,并且我們?cè)诰_狀態(tài)下復(fù)制量子系統(tǒng)的多個(gè)副本,比如2n,∣ψ??,F(xiàn)在,如果我們對(duì)算子M進(jìn)行n次測(cè)量,對(duì)算子N進(jìn)行n次測(cè)量,我們會(huì)看到M和N結(jié)果的標(biāo)準(zhǔn)差遵循以下關(guān)系: 方程2-74稱為一般海森堡測(cè)不準(zhǔn)原理。為了證明海森堡測(cè)不準(zhǔn)原理,我們將用一個(gè)數(shù)學(xué)小插曲來(lái)研究柯西-施瓦茨不等式。如圖2-4所示。 這是復(fù)向量空間中向量的柯西-施瓦茨不等式,我們將用它來(lái)證明海森堡不確定性原理。 首先,M 和 N 是投影測(cè)量算子,是 Hermitian 算子。讓我們采用兩個(gè)狀態(tài) ∣Φ1 ? 和 ∣Φ2 ?,它們是在系統(tǒng)狀態(tài) |ψ? 上應(yīng)用投影測(cè)量算子 M 和 iN 的結(jié)果,定義如下: 現(xiàn)在我們已經(jīng)接近證明海森堡測(cè)不準(zhǔn)原理了。和可以被認(rèn)為是運(yùn)算符 M 和 N 的標(biāo)準(zhǔn)差,其期望 ?M? 和 ?N? 為零。我們可以將公式 2-86 中的 M 和 N 分別替換為 (M ? ?M?) 和 (N ? ?N?),以用運(yùn)算符 M 和 N 的標(biāo)準(zhǔn)差來(lái)表達(dá)同樣的事情。 ,我們可以將公式 2-86 重寫(xiě)如下: 方程 2-88 中的不等式是海森堡不確定性原理對(duì)于兩個(gè)測(cè)量算子 M 和 N 的最一般版本。如果將算子 M 和 N 選擇為位置算子 x ? 和動(dòng)量算子 p ? ,則交換算子將其代入公式 2-88,可得到與位置和動(dòng)量相關(guān)的海森堡測(cè)不準(zhǔn)原理:
POVM 算子
一般測(cè)量算子和投影測(cè)量算子不僅給出了測(cè)量各種結(jié)果的概率的規(guī)則,而且還給出了測(cè)量后狀態(tài)的清晰表述。然而,在各種應(yīng)用中,測(cè)量后的狀態(tài)對(duì)于實(shí)驗(yàn)來(lái)說(shuō)并不那么重要。衡量各種結(jié)果的概率的能力是唯一重要的事情。在這種情況下,POVM 測(cè)量方案被證明是一種方便的公式。我們可以定義一個(gè)正算子Ek,使得當(dāng)測(cè)量狀態(tài)∣ψ?時(shí)k的結(jié)果的概率如下: 希爾伯特空間 V 中的正算子 A 是對(duì)于每個(gè) |ψ? ∈ V 滿足 ?ψ|A|ψ? ≥ 0 的算子。因此,確保算子 Ek 為正將確保我們具有由 P( 表示的概率k) ≥ 0。如果我們有 N 個(gè)我們感興趣的結(jié)果,我們必須以滿足完整性方程的方式構(gòu)建正算子 Ek;即。算子 Ek 稱為 POVM 元素,而完整集合 {Ek } 稱為 POVM。與投影測(cè)量算子{Pk}不同,POVM算子{Ek}不需要滿足關(guān)系。因此,正測(cè)量算子{Ek}不限于僅測(cè)量與一組正交基態(tài)有關(guān)的結(jié)果。因此,從這個(gè)意義上說(shuō),POVM 比投影測(cè)量算子更通用,而后者實(shí)際上是前者的特例。讓我們看看 POVM 與投影測(cè)量不同的更有趣的情況,而不是將投影測(cè)量視為 POVM 的特殊情況。假設(shè)我們想要檢測(cè)兩個(gè)不一定正交的狀態(tài)。我們可以將這兩個(gè)狀態(tài)記作。不用說(shuō),由于狀態(tài) ∣ψ1 ? 和 ∣ψ2? 之間的重疊,我們不可能完全確定地測(cè)量這兩個(gè)狀態(tài)。讓我們定義三個(gè) POVM 元素,如下所示,看看如何最好地檢測(cè)這兩個(gè)事件:如果測(cè)量狀態(tài)為 |ψ1? = |0?,則永遠(yuǎn)不會(huì)觀察到 E1,因?yàn)樗鼘?duì)應(yīng)于正交狀態(tài) ∣1?。然而,如果檢測(cè)到 E1,我們可以安全地推斷出正在測(cè)量的狀態(tài)必須是狀態(tài)。類似的,如果檢測(cè)到 E2,那么它必須是狀態(tài) |ψ1? = ∣ 0?。它不可能是狀態(tài)因?yàn)樗c (| 0??| 1?) 正交。當(dāng)檢測(cè)到 E3 時(shí),我們無(wú)法確定所測(cè)量的狀態(tài)。這里的中心點(diǎn)是,使用 POVM,我們永遠(yuǎn)不會(huì)錯(cuò)誤地識(shí)別我們要測(cè)量的狀態(tài)。只是有時(shí)我們無(wú)法確定我們所面臨的實(shí)際狀態(tài)。
密度算子
到目前為止,我們一直使用狀態(tài)向量 |ψ? 來(lái)表示量子系統(tǒng)。量子系統(tǒng)也可以用密度算子 ρ 來(lái)表示。對(duì)于我們目前所研究的與周圍環(huán)境隔離且處于純量子態(tài)的量子系統(tǒng),密度算子只不過(guò)是狀態(tài)向量∣ψ?與其自身的外積。因此,我們有這個(gè):
混合量子態(tài)的密度算子
有時(shí)很難確定量子系統(tǒng)所處的確切量子態(tài)。我們可以以經(jīng)典概率 pi 獲得 n 個(gè)純量子態(tài) ∣ψi ? 中任意一個(gè)的量子態(tài)。在這種情況下,密度算子就派上用場(chǎng)了,我們可以為這種混合量子態(tài)系統(tǒng)定義密度算子,如下所示: 因此,混合量子態(tài)的密度算子只不過(guò)是其每個(gè)組成純態(tài)的密度算子的平均值。 混合態(tài)的密度算子的跡也是 1。請(qǐng)參見(jiàn)以下內(nèi)容:
混合量子態(tài)密度算子的演化
對(duì)于封閉量子系統(tǒng),狀態(tài)向量的演化由 |ψ(t2 ? = U(t2 , t1)|ψ(t1 )? 給出。讓我們看看當(dāng)系統(tǒng)處于混合狀態(tài)時(shí)密度算子如何演化。請(qǐng)注意,在混合量子態(tài)中,n 個(gè)不同的可能狀態(tài) ∣ψi ? 就像純態(tài)一樣演化。因此,如果系統(tǒng)在酉演化后以概率 pi 處于狀態(tài) ∣ψi(t1 )? ,則系統(tǒng)將處于狀態(tài) U (t2, t1) ∣ ψi(t1 )? 具有相同的概率 pi. 因此,酉演化后混合態(tài)的密度算子 ρ2 可以寫(xiě)為酉演化后純態(tài)密度算子的平均值,為此處顯示:
使用密度算子進(jìn)行測(cè)量
假設(shè)我們有一個(gè)與結(jié)果 m 相對(duì)應(yīng)的測(cè)量算子 Mm。測(cè)量算子 Mm = ∣ Φm??Φm ∣ 對(duì)應(yīng)于基向量 ∣ Φm?。假設(shè)我們知道量子系統(tǒng)處于純態(tài) ∣ψi?,結(jié)果 m 的概率由條件概率 P(m/i) 給出。
測(cè)量后的密度算子
密度算子的混合狀態(tài)與純狀態(tài)
我們?cè)谇懊娴恼鹿?jié)中看到了混合狀態(tài)與純狀態(tài)在表示方面有何不同。然而,給定一個(gè)密度算子,我們可以通過(guò)檢查密度算子的平方跡來(lái)檢查它是純態(tài)還是混合態(tài)。對(duì)于純狀態(tài),tr(ρ^2) = 1,而對(duì)于混合狀態(tài),tr(ρ^2) < 1。鼓勵(lì)讀者進(jìn)行數(shù)學(xué)計(jì)算來(lái)驗(yàn)證這一說(shuō)法。
多量子系統(tǒng)的聯(lián)合密度算子
約化密度算子
貝爾態(tài)的部分跡
這意味著量子位 A 處于混合狀態(tài)。這是一個(gè)有趣的觀察,因?yàn)閮蓚€(gè)量子位的聯(lián)合狀態(tài)處于純狀態(tài),而各個(gè)量子位處于混合狀態(tài)。這種奇怪的行為與量子糾纏現(xiàn)象有關(guān)。
延遲測(cè)量原理
在許多量子電路中,測(cè)量常常在電路的中間部分進(jìn)行,測(cè)量結(jié)果用于有條件地控制后續(xù)的量子門。例如,在第一章中,我們?cè)诹孔与[形傳態(tài)電路中觀察到,愛(ài)麗絲的兩個(gè)量子位上的測(cè)量用于控制鮑勃量子位上的酉算子。圖2-5顯示了供參考的量子隱形傳態(tài)電路,其中前兩個(gè)量子位Q1和Q2屬于Alice,而量子位Q3屬于Bob。 實(shí)際上,在圖 2-5 的量子隱形傳態(tài)電路中,在測(cè)量 Alice 的量子位時(shí),我們得到了經(jīng)典信息 M1 和 M2 ,它們用于有條件地控制相繼應(yīng)用于 Bob 量子位的酉算子 X 和 Z。我們?cè)趫D 2-6 中的量子隱形傳態(tài)中所做的不同之處在于,將 Bob 量子位上的 X 和 Z 運(yùn)算符設(shè)置為 Alice 量子位的量子信息(狀態(tài)),然后測(cè)量 Alice 量子位到電路末端。 人們可能會(huì)說(shuō)圖 2-5 中的量子電路更加直觀和可解釋,因?yàn)樗枰獙⒔?jīng)典信息從 Alice 傳遞給 Bob;然而,中心思想是圖 2-5 和圖 2-6 中的電路是等效的。這種將測(cè)量推到電路末端的方法稱為延遲測(cè)量原理。 總結(jié)延遲測(cè)量狀態(tài)的原理,可以將電路中間部分的測(cè)量移至電路末端。此外,如果電路中間部分中的測(cè)量用于經(jīng)典地控制電路其他部分中的酉運(yùn)算,則它們可以被條件量子運(yùn)算取代。延遲測(cè)量原理的結(jié)果是測(cè)量與調(diào)節(jié)操作進(jìn)行交換。
近似酉算子
在經(jīng)典計(jì)算體系中,一小組門(例如 AND、OR 和 NOT 門)可用于實(shí)現(xiàn)任何經(jīng)典函數(shù)。因此,這樣一組門被認(rèn)為對(duì)于經(jīng)典計(jì)算是通用的。在量子計(jì)算范式中,如果任何給定的酉算子可以通過(guò)由通用集中的門組成的量子電路近似到任意精度,則一組門被認(rèn)為是通用的。在第一章中,我們?cè)趯?shí)現(xiàn)一些量子算法時(shí)接觸了 CNOT 和 Hadamard 門。這兩個(gè)門以??及相位門和 π/8 門被認(rèn)為是通用的,因?yàn)槭褂眠@些門可以將任何單一門逼近到任意精度。圖 2-7 顯示了四個(gè)門及其酉變換以供參考。 現(xiàn)在讓我們看看使用一組離散量子門來(lái)近似酉變換意味著什么。讓我們采用在相同狀態(tài) ∣ψ? 上運(yùn)行的兩個(gè)酉變換 U 和 V,其中 U 是我們想要實(shí)現(xiàn)的酉變換,V 是我們能夠使用離散門集實(shí)現(xiàn)的酉變換。我們可以定義用 V 逼近 U 的誤差如下: 正如我們?cè)诠?2-114 中看到的,誤差 E(U, V) 是當(dāng)使用 V 而不是 U 作為酉算子時(shí)期望變換狀態(tài)與實(shí)際變換狀態(tài)之間差異的最大范數(shù)。還要注意變換 E(U, V) 中的誤差與測(cè)量變換狀態(tài)時(shí)的誤差之間的關(guān)系。如果我們有一組 n 個(gè)測(cè)量算子 M1 , M2 …。 。 , Mn 屬于正交集 |ψ1 ?, |ψ2 ?, …. ,|ψn?,則每個(gè)測(cè)量元素Mk給出測(cè)量狀態(tài)的概率為|ψk?。如果可以模擬所需的酉算子 U,那么在狀態(tài) ∣ψ? 變換之后對(duì)基 ∣ψk? 的測(cè)量將產(chǎn)生概率 pk(U),如下所示: 類似地,如果我們使用 V 作為 ∣ψ? 上的酉變換而不是 U,然后使用測(cè)量算子 Mk 對(duì)基本狀態(tài) ∣ψk? 進(jìn)行測(cè)量,那么測(cè)量狀態(tài) ∣ψk? 的概率可以為寫(xiě)成如下: 公式2-121中的不等式告訴我們,如果用E(U, V)給出的V來(lái)近似算子U的誤差很小,那么測(cè)量概率和實(shí)際概率的差異也很小。事實(shí)上,誤差范數(shù)的上限是以 V 逼近 U 時(shí)的誤差為上限,即 2E(U, V)。 該不等式概括為由 n 個(gè)酉算子 U1 、 U2 、…、Un 組成的序列,由 n 個(gè)酉算子 V1、V2、…、Vn 的序列近似。通過(guò)歸納可以看出,與 n 個(gè)酉運(yùn)算序列的近似相關(guān)的誤差遵循以下關(guān)系: 因此,我們看到該關(guān)系對(duì)于 n = 2 成立。通過(guò)歸納,我們可以將此關(guān)系擴(kuò)展到由 V1 、 V2 .. Vn 近似的酉算子 U1 、 U2…、 Un 的任意序列。
索洛維-基塔耶夫定理
每當(dāng)我們查看空間 U 中的近似元素時(shí),我們都會(huì)查看該空間中元素的較小子集 W,這很容易實(shí)現(xiàn)。通過(guò)組合使用較小子集 W 中的元素,我們形成一個(gè)在 U 中稠密的空間 V。在拓?fù)渲?,如?V 的閉包等于集合 U,則子集 V 被稱為 U 的稠密子集。非正式地,每個(gè)稠密集 V 中的元素任意接近于集合 U 中的元素。稠密集的最佳示例是由 ? 表示的有理數(shù)集合,作為由 ? 表示的實(shí)線的子集。每個(gè)實(shí)數(shù)要么是有理數(shù),要么任意接近于一。 U 的密集子集 V 可用于使用 V 的元素以任意精度表示 U 的元素。例如,由于位的二進(jìn)制表示,經(jīng)典計(jì)算機(jī)只能使用有理數(shù)。然而,由于有理數(shù)形成實(shí)線 ? 的稠密子集,因此我們可以高精度地逼近實(shí)無(wú)理數(shù)。類似地,在量子計(jì)算的情況下,可能的門的集合形成一個(gè)連續(xù)體,并且并不總是可以用 SU(d) 中的元素精確地構(gòu)造一個(gè)門。 設(shè) SU(d) 表示 d 維希爾伯特狀態(tài)空間中的酉算子群。因此,Solovay-Kitaev 定理根據(jù)可接受的誤差 ? 給出了通用集合 V(或者通用集合 V 的元素的函數(shù))所需門的近似數(shù)量的估計(jì)。逼近酉算子時(shí)可接受的誤差越低,構(gòu)建這種酉門所需的通用集中的門數(shù)量就越大。
ERP悖論、局部現(xiàn)實(shí)主義和貝爾不等式
在經(jīng)典世界中,每當(dāng)我們想到任何物體時(shí),我們都會(huì)假設(shè)該物體的物理屬性存在,無(wú)論我們是否觀察到它。對(duì)此類物體的任何測(cè)量都只能揭示物理特性。然而,根據(jù)量子力學(xué),物體不具有任何與其測(cè)量無(wú)關(guān)的物理屬性。事實(shí)上,只有在系統(tǒng)上進(jìn)行測(cè)量時(shí),這些物理特性才會(huì)存在。這種對(duì)僅通過(guò)測(cè)量而具有物理特性的物體的解釋被稱為哥本哈根解釋。例如,根據(jù)量子力學(xué),除非測(cè)量到特定的能級(jí),否則電子不具有任何特定的能級(jí),例如基態(tài)或激發(fā)態(tài)。量子力學(xué)給我們提供的是一組假設(shè),告訴我們給定電子狀態(tài),測(cè)量時(shí)電子處于特定狀態(tài)的概率是多少。 從1920年到1930年,包括愛(ài)因斯坦在內(nèi)的幾位物理學(xué)家都不相信量子力學(xué)所提供的這個(gè)新觀點(diǎn)。著名論文《物理現(xiàn)實(shí)的量子力學(xué)描述能否被認(rèn)為是完整的?》由愛(ài)因斯坦、羅森和波多爾斯基(統(tǒng)稱EPR)所寫(xiě),詳細(xì)描述了一個(gè)思想實(shí)驗(yàn),以反駁哥本哈根的解釋。他們的論點(diǎn)基于量子糾纏的概念。假設(shè)我們有一個(gè)角動(dòng)量為0的量子系統(tǒng),同時(shí)發(fā)射兩個(gè)光子P1和P2。由于光子有自旋和角動(dòng)量必須守恒,如果一個(gè)光子有自旋向上的狀態(tài),另一個(gè)光子必須有自旋向下的狀態(tài),以確保系統(tǒng)的角動(dòng)量為零。我們表示自旋上升狀態(tài)為∣0?,而自旋下降狀態(tài)為∣1?。這種現(xiàn)象被稱為糾纏,其中兩個(gè)光子不是獨(dú)立的。假設(shè)每個(gè)光子粒子具有相同的自旋向上和向下的傾斜度,兩個(gè)粒子的聯(lián)合狀態(tài)由給出。如果一個(gè)光子的自旋已知,那么另一個(gè)光子的自旋就立即已知。假設(shè)我們把光子分開(kāi)1光年的天文距離,大約是9.46 × 10^12千米。如果我們測(cè)量一個(gè)光子P1,我們有50%的機(jī)會(huì)測(cè)量自旋向上,50%的機(jī)會(huì)測(cè)量自旋向下。現(xiàn)在讓我們假設(shè)我們測(cè)量P1處于一個(gè)自旋狀態(tài)∣0?,然后我們快速測(cè)量,比方說(shuō)在1秒內(nèi),P2的狀態(tài)。光子P2總是會(huì)測(cè)量自旋向上。量子力學(xué)表明,粒子的狀態(tài)不是預(yù)先確定的,只有在測(cè)量之后才可用。這意味著P1的測(cè)量信息必須比光傳播得快得多,才能在1秒內(nèi)到達(dá)P2,這樣P2才能根據(jù)測(cè)量時(shí)的休眠狀態(tài)調(diào)整狀態(tài)。EPR認(rèn)為,根據(jù)特殊相對(duì)規(guī)則,沒(méi)有任何物體的速度能超過(guò)光速,因此哥本哈根的解釋?xiě)?yīng)該是無(wú)效的。這種特殊相對(duì)的理論違背被稱為ERP悖論。 相反,ERP提出了另一種可能的量子糾纏理論,該理論指出,兩個(gè)光子的狀態(tài)從一開(kāi)始就被預(yù)先確定了,光子P1是一個(gè)自旋向上的狀態(tài),而光子P2是一個(gè)自旋向下的狀態(tài)。這個(gè)信息隱藏在光子粒子的局部?jī)?nèi),所以當(dāng)它們分開(kāi)時(shí),就不會(huì)發(fā)生通信。這叫做局部隱變量理論。 這就好像兩個(gè)光子粒子是一對(duì)手套,如果一個(gè)是左手,另一個(gè)就是右手。一旦我們發(fā)現(xiàn)了左手,我們就知道另一個(gè)無(wú)論它在宇宙中的哪個(gè)位置都一定是右手。從1935年到1964年,近30年來(lái),局部隱變量理論一直是對(duì)量子力學(xué)的有效解釋,直到愛(ài)爾蘭物理學(xué)家約翰·貝爾(John Bell)的出現(xiàn),他根據(jù)著名的貝爾方程提出了一個(gè)驗(yàn)證局部隱變量理論是否正確的實(shí)驗(yàn)。 要推翻ERP的主張,我們需要理解貝爾不等式。貝爾不等式不涉及量子力學(xué)。我們做了一個(gè)思想實(shí)驗(yàn),用相似的感覺(jué)來(lái)推斷貝爾不平等,即普通世界是如何運(yùn)作的,或者愛(ài)因斯坦、波多爾斯基和羅森認(rèn)為自然應(yīng)該如何服從。我們用量子力學(xué)分析來(lái)跟進(jìn)普通世界分析,以證明它與普通世界分析是不一致的。 我們進(jìn)行了如圖2-8所示的實(shí)驗(yàn),裁判Colin為Alice和Bob準(zhǔn)備了兩個(gè)粒子,并將粒子發(fā)送給他們進(jìn)行測(cè)量。 一旦愛(ài)麗絲接收到她的粒子,她可以選擇測(cè)量與可觀測(cè)Q相關(guān)的物理性質(zhì)PQ,或者她可以選擇測(cè)量與可觀測(cè)R相關(guān)的物理性質(zhì)PR。愛(ài)麗絲在接收到她的粒子時(shí),拋一個(gè)均勻硬幣來(lái)決定她想要測(cè)量的性質(zhì)。 如圖2-8所示,每一項(xiàng)物理性質(zhì)的測(cè)量都有兩個(gè)結(jié)果:+1或?1。與Alice類似,Bob在接收到粒子時(shí),會(huì)測(cè)量與可觀測(cè)S和T有關(guān)的兩個(gè)物理性質(zhì)PS或PT中的一個(gè)。Bob在接收到粒子之前不會(huì)選擇要測(cè)量的性質(zhì)。愛(ài)麗絲和鮑勃同時(shí)進(jìn)行測(cè)量,這樣一個(gè)人的測(cè)量結(jié)果不會(huì)改變另一個(gè)人的測(cè)量結(jié)果。 現(xiàn)在我們來(lái)看簡(jiǎn)單量(QS + RS + RT - QT),并試著計(jì)算它的期望。對(duì)表達(dá)式進(jìn)行簡(jiǎn)化,得到: 從公式2-126中,我們可以很容易地看出,在某一時(shí)刻,S(Q + R)或T(R?Q)中的任何一個(gè)都是非零的,而非零的值是+2或- 2。因此: 對(duì)于由Q = q, R = r, S = s, T = t給出的Alice和Bob粒子的任何廣義測(cè)量態(tài),我們有QS + RS + RT - QT的期望如下: 現(xiàn)在,由于和的期望等于期望的和,我們可以將公式2-128改寫(xiě)為: 方程2-129被稱為貝爾不等式。這個(gè)結(jié)果也被稱為CHSH不等式,以四位發(fā)明者的姓名首字母命名。 現(xiàn)在我們來(lái)分析一下貝爾不等式在量子系統(tǒng)中是否成立。這里Colin準(zhǔn)備了兩個(gè)量子位的糾纏量子態(tài)如下: 科林把第一個(gè)量子位給愛(ài)麗絲,第二個(gè)給鮑勃進(jìn)行測(cè)量。Alice對(duì)可觀測(cè)值Q和R進(jìn)行了測(cè)量,我們將其賦值如下: 在方程2-131和2-132中,Z和X是泡利矩陣。 很像之前,我們計(jì)算關(guān)于糾纏態(tài)∣ψ?在量子力學(xué)意義上的期望例如,關(guān)于狀態(tài)|ψ?的E[QS]可以表示為: 在方程2-129中,我們可以看到,利用感知普通世界如何運(yùn)作,或者ERP如何感知世界給了我們期望的上限2。然而,我們可以看到量子力學(xué)給出的期望值是2√2,這違反了貝爾不等式。這意味著我們?cè)谕茖?dǎo)貝爾不等式時(shí)所做的一個(gè)或多個(gè)假設(shè)必定是錯(cuò)誤的。貝爾不等式或愛(ài)因斯坦、羅森和波多爾斯基在這方面做出的可能錯(cuò)誤的假設(shè)可以總結(jié)如下:現(xiàn)實(shí)主義假設(shè):物理屬性具有獨(dú)立于觀察或測(cè)量的確定值的假設(shè)局部性假設(shè):假設(shè) Alice 執(zhí)行測(cè)量不會(huì)影響 Bob 的測(cè)量結(jié)果 這兩個(gè)假設(shè)一起被稱為局域?qū)嵲谡?,而貝爾不等式的違反證明它們中至少有一個(gè)是錯(cuò)誤的。因此,我們從貝爾不等式的違反中學(xué)到的是,盡管局部現(xiàn)實(shí)主義符合我們的日常經(jīng)驗(yàn),但它并不適用于世界在最基本層面上的運(yùn)作方式。根據(jù)最近的實(shí)驗(yàn)證據(jù),物理學(xué)家得出的結(jié)論是,為了對(duì)量子力學(xué)有深入直觀的理解,應(yīng)該從我們對(duì)世界的常識(shí)性觀點(diǎn)中放棄局域性和實(shí)在論中的一個(gè)或兩者。
哈密??頓模擬和Trotterization
常數(shù)哈密頓量 H 下量子系統(tǒng)的演化由薛定諤方程給出。薛定諤方程的解給出了時(shí)間 t0 和 t 之間狀態(tài)向量 ∣ψ? 的酉演化為 |ψ(t1)? = U(t1 , t0) ∣ ψ(t0 )?,其中 。 在哈密頓模擬中,給定哈密頓算子 H 和演化時(shí)間 t,我們需要組合一系列門來(lái)實(shí)現(xiàn)酉算子 。哈密??頓量模擬是使用絕熱計(jì)算的算法的重要組成部分,例如我們將在第 7 章中研究的量子近似優(yōu)化算法(QAOA)。大多數(shù)物理系統(tǒng)中的哈密頓量可以表示為僅很少的顆粒。因此,對(duì)于 n 體量子系統(tǒng),我們可以將哈密頓量寫(xiě)如下: 每個(gè) Hk 哈密頓主義者通常都像兩個(gè)身體相互作用一樣簡(jiǎn)單。這里要強(qiáng)調(diào)的一點(diǎn)是更容易用量子門構(gòu)造,因?yàn)樗扔纤阕庸ぷ髟诟〉木植孔酉到y(tǒng)上。如果我們能夠表達(dá),那么輕松構(gòu)造 的能力就會(huì)很有用。然而,一般來(lái)說(shuō),因?yàn)橐话闱闆r下各個(gè)局部哈密頓量不會(huì)交換,即 Hk Hl ≠ Hl Hk 。事實(shí)證明,即使兩個(gè)哈密頓量 H1 和 H2 不交換,我們也可以利用特羅特(Trotter)公式模擬單個(gè)哈密頓量來(lái)模擬整體哈密頓量。 上式中的O(.)表示Big O的計(jì)算復(fù)雜度。
如果哈密頓量 H1 和 H2 比 H = H1 + H2 更容易模擬,那么應(yīng)用 2-142 中的酉算子序列就證明是有用的命題。 Trotter 公式可以擴(kuò)展到兩個(gè)以上哈密頓量的和。例如,如果我們有 H = H1 + H2 + H3,我們可以通過(guò)酉算子序列來(lái) Trotterize H 的酉演化,如下所示:
總結(jié)
至此,我們結(jié)束了第二章。在這一章中,我們主要介紹了量子力學(xué)的數(shù)學(xué)和它的假設(shè),以更好地幫助我們理解和實(shí)現(xiàn)不同的基于量子的算法以及量子機(jī)器學(xué)習(xí)。我們?cè)敿?xì)研究了測(cè)量及其不同的變體,如射影測(cè)量和POVM,因?yàn)闇y(cè)量是基于量子的算法的組成部分。此外,我們涵蓋了特定的重要主題線性代數(shù)是中心的量子力學(xué)表示。 在下一章中,我們將從前兩章中學(xué)習(xí)并實(shí)現(xiàn)幾個(gè)基于量子計(jì)算的算法,如量子隱形傳態(tài)、Deutsch-Jozsa、Grover的算法和Bernstein-Vazirani等。我們將在谷歌的Cirq和IBM的Qiskit中實(shí)現(xiàn)這些量子算法。
量子算法概論
1981年,理查德·費(fèi)曼提出了這樣的想法:由遵守量子力學(xué)定律的量子力學(xué)元件構(gòu)建的計(jì)算機(jī)可以對(duì)量子系統(tǒng)進(jìn)行有效的模擬。量子計(jì)算基于疊加、糾纏和干涉等量子力學(xué)特性定律。與經(jīng)典計(jì)算不同,在量子計(jì)算機(jī)中,由于其疊加特性,寄存器可以同時(shí)存在于所有可能的狀態(tài)。只有當(dāng)測(cè)量量子系統(tǒng)時(shí),我們才能觀察到一種可能的狀態(tài)。這樣的系統(tǒng)是有利的,因?yàn)楫?dāng)測(cè)量時(shí),每個(gè)狀態(tài)可以以在測(cè)量之前的狀態(tài)中編碼的特定概率出現(xiàn)。量子計(jì)算的工作原理是將所需狀態(tài)的概率增加到足夠高的值,以便可以通過(guò)最少數(shù)量的測(cè)量以高置信度獲得所需狀態(tài)。在這方面,由量子疊加產(chǎn)生的量子干涉發(fā)揮著重要作用,因?yàn)樗试S與給定狀態(tài)相對(duì)應(yīng)的概率幅度相互干擾和抵消。量子干涉的這一特性使測(cè)量結(jié)果偏向于我們希望作為量子算法結(jié)果的一組狀態(tài)。同樣,量子糾纏允許人們?cè)诹孔訉?duì)象(尤其是量子位)之間創(chuàng)建強(qiáng)相關(guān)性,從而發(fā)揮量子算法的優(yōu)勢(shì),正如您將在本章中看到的那樣。
在本章中,我們將研究量子算法,旨在了解這些算法相對(duì)于經(jīng)典算法的量子霸權(quán)。我們已經(jīng)在第一章中了解了量子隱形傳態(tài)算法以及使用量子并行性制定算法的方法。在本章中,我們將實(shí)現(xiàn)其他幾種量子計(jì)算算法,例如 Deutsch Jozsa、貝爾不等式、Bernstein-Vajirani 算法和 Grover 算法,以擴(kuò)大我們理解的量子算法的范圍。對(duì)于這些新算法,我們將首先研究它們的技術(shù)推導(dǎo),然后再進(jìn)行實(shí)現(xiàn)。我們將使用 Google 的 Cirq 作為實(shí)現(xiàn)這些算法的首選量子計(jì)算框架。然而,我們將在 IBM 的 Qiskit 中實(shí)現(xiàn)其中一些算法,以獲得多個(gè)量子計(jì)算框架的經(jīng)驗(yàn)。在這些量子計(jì)算框架中實(shí)現(xiàn)這些量子計(jì)算算法將為我們提供不同的視角,并有助于填補(bǔ)我們?cè)谘芯科浼夹g(shù)細(xì)節(jié)時(shí)可能存在的任何空白。
Cirq
Cirq 是 Google Research 于 2018 年發(fā)布的開(kāi)源量子計(jì)算軟件庫(kù)。開(kāi)發(fā)人員可以構(gòu)建和運(yùn)行包含所有相關(guān)一元、二元和三元門的量子算法。 Cirq 目前不提供對(duì)谷歌量子計(jì)算機(jī)的訪問(wèn)。我們將使用 Cirq 的量子計(jì)算模擬器(稱為 Simulator)在本地執(zhí)行量子算法。
使用 Hadamard 門進(jìn)行 Cirq 仿真
讓我們首先通過(guò)簡(jiǎn)單的量子電路模擬來(lái)熟悉 Cirq 語(yǔ)言。 Cirq 語(yǔ)言中的量子位通常使用 LineQubit 或 GridQubit 選項(xiàng)來(lái)定義。 LineQubit 允許您在一維晶格上定義量子位,而 GridQubit 允許您在二維晶格上定義量子位。
使用 Cirq 的 GridQubit 功能,我們定義一個(gè)在基本狀態(tài) |0? 處初始化的量子位,并應(yīng)用 Hadamard 變換就可以了。Cirq 中的 Hadamard 變換定義為 H 本身。然后,我們使用 Cirq 中的測(cè)量功能測(cè)量來(lái)測(cè)量計(jì)算基礎(chǔ)中的新?tīng)顟B(tài)。測(cè)量不需要您像許多其他量子計(jì)算包中所要求的那樣顯式定義用于存儲(chǔ)測(cè)量結(jié)果的經(jīng)典寄存器。所有對(duì)量子位的操作都在 Cirq 中以量子電路的形式定義。定義電路后,您可以使用 Cirq Simulator 對(duì)同一電路運(yùn)行 100 次模擬并測(cè)量結(jié)果。Cirq 具有直方圖工具來(lái)獲取每個(gè)測(cè)量結(jié)果的計(jì)數(shù)。量子電路中的任何狀態(tài)測(cè)量都可以與密鑰綁定。一旦模擬器運(yùn)行,就可以通過(guò)鍵訪問(wèn)結(jié)果,如清單 3-1 中的示例所示。
清單 3-1. 使用 Cirq 對(duì)量子位進(jìn)行 Hadamard 變換后的測(cè)量
# Import the Package cirq
import cirq
# Define a Qubit
qubit = cirq.GridQubit(0,0)
# Create a Cirquit in cirq
circuit = cirq.Circuit([cirq.H(qubit),
cirq.measure(qubit,key='m')])
print("Circuit Follows")
print(circuit)
sim = cirq.Simulator()
output = sim.run(circuit,repetitions=100)
print("Measurement Output:")
print(output)
print("Histogram stats follow")
print(output.histogram(key='m')
? Out put
Circuit Follows
(0, 0): ───H───M('m')───
Measurement Output: m=1000111111111101111011100101000101011000010000110110101000101100111011101001001001000000010000001000
Counter({0: 54, 1: 46})
從清單 3-1 的輸出中可以看到,在相等疊加狀態(tài)下測(cè)量量子位的相同副本時(shí),我們?cè)跔顟B(tài) 0 下獲得 54 個(gè)測(cè)量值,在狀態(tài) 1 下獲得 46 個(gè)測(cè)量值,如圖3-1所示。
正如預(yù)期的那樣,在兩個(gè)計(jì)算基礎(chǔ)狀態(tài) 0 和 1 上的分布幾乎是均勻的。如果我們?cè)黾舆M(jìn)行測(cè)量的副本數(shù)量,每個(gè)狀態(tài)的概率將趨于 1/2 。如果 n 是我們進(jìn)行測(cè)量的量子態(tài)的副本數(shù),并且 Pn(0) 和 Pn (1) 是根據(jù)這 n 個(gè)副本的測(cè)量確定的概率,則以下情況成立:
現(xiàn)在讓我們針對(duì)不同的 n 值模擬前面的代碼,看看概率序列如何收斂到理想值。
我們創(chuàng)建一個(gè)名為 hadamard_state_measurement 的函數(shù)來(lái)計(jì)算不同 n 值的概率,如清單 3-2 所示。
# Import the Package cirq
import cirq
import matplotlib.pyplot as plt
def hadamard_state_measurement(copies):
# Define a Qubit
qubit = cirq.GridQubit(0, 0)
# Create a Circuit in cirq
circuit = cirq.Circuit([cirq.H(qubit)
,cirq.measure(qubit, key='m')])
print("Circuit Follows")
print(circuit)
sim = cirq.Simulator()
output = sim.run(circuit, repetitions=copies)
res = output.histogram(key='m')
prob_0 = dict(res)[0] / copies print(prob_0)
return prob_0
def main(copies_low=10, copies_high=1000):
probability_for_zero_state_trace = []
copies_trace = []
for n in range(copies_low, copies_high):
copies_trace.append(n)
prob_0 = hadamard_state_measurement(n)
probability_for_zero_state_trace.append(prob_0)
plt.plot(copies_trace, probability_for_zero_state_trace)
plt.xlabel('No of Measurements')
plt.ylabel("Probability of the State 0")
plt.title("Convergence Sequence of Probability for State 0") plt.show()
if __name__ == '__main__':
main()
在清單 3-2 中,我們通過(guò)對(duì)狀態(tài) 的相同副本的不同測(cè)量來(lái)計(jì)算狀態(tài) ∣0? 的概率。從圖 3-2 中的圖表可以看出,隨著副本數(shù)量從 100 增加到 500,狀態(tài) ∣0? 的概率逐漸向理論值 1/2 收斂,并且振蕩逐漸減小。
Qiskit
Qiskit 是 IBM 于 2017 年發(fā)布的開(kāi)源量子計(jì)算軟件庫(kù)。Qiskit 代表量子信息科學(xué)套件,其量子計(jì)算堆棧中有四個(gè)主要組件,如下所列: ????????1. Qiskit Terra:它提供了構(gòu)建量子電路的所有基本組件。 ????????2. Qiskit Aer:您可以使用 Aer 工具開(kāi)發(fā)噪聲模型來(lái)模擬真實(shí)量子計(jì)算設(shè)備中可能發(fā)生的真實(shí) 噪聲模擬。 Aer 還提供了 C++ 模擬器框架。 ????????3. Qiskit Ignis:這是一個(gè)用于分析和最小化量子電路中的噪聲的框架。 ????????4. Qiskit Agua:包含跨域算法和在量子真實(shí)設(shè)備或模擬器上運(yùn)行這些算法的邏輯。
在本書(shū)中,您將不時(shí)使用 Qiskit 編程語(yǔ)言。為了熟悉 Qiskit 的基本編碼語(yǔ)法,您將實(shí)現(xiàn)與前面在 Cirq 中所示相同的程序:測(cè)量 Hadamard 變換后的量子位。參見(jiàn)清單 3-3。
清單 3-3。使用 Qiskit 對(duì)量子位進(jìn)行 Hadamard 變換后的測(cè)量
"""
Measure a qubit after Hadamard Transform
"""
import numpy as np
from qiskit import QuantumCircuit, execute, Aer
from qiskit.visualization import plot_histogram
# Use Aer's qasm_simulator
simulator = Aer.get_backend('qasm_simulator')
# Create a Quantum Circuit with 1 Qubit
circuit = QuantumCircuit(1, 1)
# Add a H gate on Qubit 0
circuit.h(0)
# Map the quantum measurement to the classical register
circuit.measure([0], [0])
# Execute the circuit on the qasm simulator
job = execute(circuit, simulator, shots=100)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(circuit)
print("\nTotal count for 0 and 1 are:",counts)
# Draw the circuit
print(circuit.draw(output='text'))
?
在 Qiskit 中,我們使用 QuantumCircuit 選項(xiàng)定義量子電路。此外,我們還通過(guò) QuantumCircuit 選項(xiàng)定義電路本身時(shí)所需的量子位。 QuantumCircuit 選項(xiàng)的其他輸入是存儲(chǔ)測(cè)量結(jié)果所需的經(jīng)典位。由于我們正在測(cè)量等疊加的量子位的狀態(tài),因此我們將需要一個(gè)經(jīng)典位來(lái)進(jìn)行測(cè)量。與 Qiskit 中的 Cirq 不同,我們必須明確定義經(jīng)典寄存器或位來(lái)存儲(chǔ)測(cè)量結(jié)果。 Qiskit 中的 Hadamard 變換 H 是通過(guò)使用 QuantumCircuit 創(chuàng)建的電路來(lái)定義的。我們使用 Circuit.h(0) 在唯一的量子位上定義 Hadamard 變換。需要注意的一件事是,用于保存測(cè)量結(jié)果的經(jīng)典位并不隱式地與 Qiskit 上的量子位相關(guān)聯(lián),我們必須在使用電路的測(cè)量功能進(jìn)行測(cè)量時(shí)對(duì)此映射進(jìn)行編碼。我們使用的模擬器是從 Qiskit 中的 Aer 框架導(dǎo)入的。與 Cirq 中模擬量子電路的 run 命令非常相似,我們?cè)?Qiskit 中使用執(zhí)行命令。
貝爾態(tài)的創(chuàng)建和測(cè)量
我們?cè)诘谝徽轮杏懻摿素悹枒B(tài),同時(shí)討論了量子糾纏和量子隱形傳態(tài)等算法。兩個(gè)量子位 A 和 B 的貝爾狀態(tài)由下式給出:
在清單 3-4 中,我們首先對(duì)在狀態(tài) |ψ?_A= ∣0? 初始化的量子位 A 應(yīng)用哈達(dá)瑪變換 H,以創(chuàng)建疊加態(tài)來(lái)創(chuàng)建貝爾態(tài) 。然后,我們將受控非門(通常稱為 CNOT)應(yīng)用到基于量子位 A 作為控制位的狀態(tài) |ψ?_B = ∣0? 初始化的量子位 B 上。
清單 3-4。使用 Cirq 創(chuàng)建和測(cè)量貝爾狀態(tài)
import cirq
# Define the two qubits using LineQubit
q_register = [cirq.LineQubit(i) for i in range(2)]
# Define the Cirquit with a Hadamard Gate on the qubit 0
# followed by CNOT operation
cirquit = cirq.Circuit([cirq.H(q_register[0]), cirq.CNOT(q_register[0], q_register[1])])
# Measure both the qubits
cirquit.append(cirq.measure(*q_register,key='z'))
print("Circuit")
print(cirquit)
# Define the Simulator
sim = cirq.Simulator()
# Simulate the cirquit for 100 iterations
output = sim.run(cirquit, repetitions=100)
print("Measurement Output")
print(output.histogram(key='z'))
?在清單 3-4 中,我們使用 Cirq 的 LineQubit 選項(xiàng)來(lái)定義參與貝爾狀態(tài)的兩個(gè)量子位。清單 3-4 的輸出顯示量子電路是 cirq。在貝爾狀態(tài)的測(cè)量中,我們得到幾乎相等比例的整數(shù)結(jié)果:0和3。整數(shù)結(jié)果0代表狀態(tài)|00?,而結(jié)果3代表狀態(tài)∣11?。我們現(xiàn)在在 Qiskit 中實(shí)現(xiàn)貝爾狀態(tài)的創(chuàng)建和測(cè)量,如清單 3-5 所示。
清單 3-5。使用 Qiskit 創(chuàng)建和測(cè)量貝爾狀態(tài)
"""
Quantum Entanglement Example with Qiskit
"""
import numpy as np
from qiskit import QuantumCircuit, execute, Aer
from qiskit.visualization import plot_histogram
# Use Aer's qasm_simulator
simulator = Aer.get_backend('qasm_simulator')
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)
# Add a H gate on Qubit 0
circuit.h(0)
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)
# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])
# Execute the circuit on the qasm simulator
job = execute(circuit, simulator, shots=100)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
# Draw the circuit
print(circuit.draw(output='text'))
從清單 3-5 的輸出中我們可以看到,Qiskit 在測(cè)量 Bell 狀態(tài)時(shí)幾乎同等地采樣了狀態(tài) ∣00? 和 ∣11?。
量子隱形傳態(tài)?
量子隱形傳態(tài)是在不使用任何通信信道的情況下在發(fā)送者和接收者之間傳輸量子態(tài)的方法。與第一章一樣,我們將量子態(tài)的發(fā)送者命名為 Alice,將量子態(tài)的接收者命名為 Bob,以保持引用一致。圖 3-3 顯示了量子隱形傳態(tài)電路的高級(jí)電路。
我們?cè)诒菊麻_(kāi)頭指出,量子算法通過(guò)在量子位之間創(chuàng)建有意義的相關(guān)性來(lái)受益于量子糾纏。這些相關(guān)性的本質(zhì)比經(jīng)典系統(tǒng)所能實(shí)現(xiàn)的要強(qiáng)得多,因?yàn)榧词瓜喔魺o(wú)限大的距離,量子粒子也可以表現(xiàn)出高相關(guān)性。
在量子隱形傳態(tài)中,愛(ài)麗絲和鮑勃讓他們的控制量子位通過(guò)量子糾纏共享貝爾態(tài)。 Alice 想向 Bob 發(fā)送一個(gè)量子位狀態(tài) |ψ? 。我們將此用于傳輸?shù)牧孔游环Q為 Q1,將 Alice 和 Bob 用于共享貝爾狀態(tài)的控制量子位稱為 Q2 和 Q3。
以下是與量子隱形傳態(tài)算法相關(guān)的步驟: 1. 將控制量子位 Q2 和 Q3 初始化為狀態(tài)∣0?,將量子位 Q1 初始化為要傳輸?shù)臓顟B(tài) |ψ?。 2. 在Q2和Q3之間創(chuàng)建Bell狀態(tài),首先在Q2上應(yīng)用Hadamard變換H,然后在Q3上進(jìn)行CNOT操作,其中Q2充當(dāng)控制量位。 3. 一旦 Alice 和 Bob 的控制量子位 Q2 和 Q3 之間建立了貝爾狀態(tài),就對(duì) Alice 的雙量子位 Q1 和 Q2 應(yīng)用 CNOT 算子,其中 Q1 充當(dāng)控制量子位,Q2 充當(dāng)目標(biāo)量子位。 4. 對(duì)量子位 Q1 應(yīng)用 Hadamard 變換,然后測(cè)量 Alice 的量子位 Q1 和 Q2。我們將Q1和Q2的測(cè)量狀態(tài)表示為M1和M2。 5. 基于測(cè)量狀態(tài) M2 作為控制量子位,在 Bob 的量子位 Q3 上應(yīng)用 CNOT 算子。最后,對(duì) Bob 的量子位 Q3 測(cè)量的狀態(tài) M1 應(yīng)用條件 Z 運(yùn)算符。 6. 在此階段,Bob 的量子位 Q3 具有 Alice 傳輸?shù)臓顟B(tài)∣ψ?。
我們?cè)?Cirq 中實(shí)現(xiàn)量子隱形傳態(tài)算法,并通過(guò)傳輸相等的疊加態(tài)來(lái)說(shuō)明它。一般情況下,要傳輸?shù)臓顟B(tài)∣ψ?可以通過(guò)將∣0?狀態(tài)轉(zhuǎn)換為所需狀態(tài)∣ψ?所需的電路來(lái)指定。為此,我們?cè)赒uantum_ teleportation 例程中使用qubit_to_send_op 變量。例如,傳輸?shù)券B加狀態(tài)變量,我們通過(guò)變量 qubit_to_send_op 將 cirq.H 運(yùn)算符發(fā)送到Quantum_teleportation 例程。 Hadamard 算子將在狀態(tài) ∣0? 初始化的量子位 Q1 轉(zhuǎn)換為等疊加狀態(tài)。建議讀者嘗試使用 qubit_to_send_op 傳輸不同的狀態(tài)。一旦量子位狀態(tài)被傳輸,我們就測(cè)量 Bob 的量子位 Q3,看看測(cè)量值的分布是否等于傳輸波形的概率分布。清單 3-6 顯示了量子隱形傳態(tài)算法的詳細(xì)實(shí)現(xiàn)。
清單 3-6。模擬量子隱形傳態(tài)
import cirq
def quantum_teleportation(qubit_to_send_op='H',
num_copies=100):
Q1, Q2, Q3 = [cirq.LineQubit(i) for i in range(3)]
cirquit = cirq.Circuit()
"""
Q1 : Alice State qubit to be sent to Bob
Q2: Alices control qubit
Q3: Bobs control qubit
Set a state for Q1 based on qubit_to_send_op :
Implemented operators H,X,Y,Z,I
"""
if qubit_to_send_op == 'H':
cirquit.append(cirq.H(Q1))
elif qubit_to_send_op == 'X':
cirquit.append(cirq.X(Q1))
elif qubit_to_send_op == 'Y':
cirquit.append(cirq.X(Q1))
elif qubit_to_send_op == 'I':
cirquit.append(cirq.I(Q1))
else:
raise NotImplementedError("Yet to be implemented")
# Entangle Alice and Bob's control qubits : Q2 and Q3
cirquit.append(cirq.H(Q2))
cirquit.append(cirq.CNOT(Q2, Q3))
# CNOT Alice's data Qubit Q1 with control Qubit Q2
cirquit.append(cirq.CNOT(Q1, Q2))
# Transform Alice's data Qubit Q1
# on +/- basis using Hadamard Transform
cirquit.append(cirq.H(Q1))
# Measure Alice's qubit Q1 and Q2
cirquit.append(cirq.measure(Q1, Q2))
# Do a CNOT on Bob's qubit Q3 using Alice's
# control qubit Q2 after measurement
cirquit.append(cirq.CNOT(Q2, Q3))
# Do a Conditioned Z Operation on Bob's qubit Q3
# using Alice's control qubit Q1 after measurement
cirquit.append(cirq.CZ(Q1, Q3))
# Measure the final transmitted state to Bob in Q3
cirquit.append(cirq.measure(Q3, key='Z'))
print("Circuit")
print(cirquit)
sim = cirq.Simulator()
output = sim.run(cirquit, repetitions=num_copies)
print("Measurement Output")
print(output.histogram(key='Z'))
if __name__ == '__main__':
quantum_teleportation(qubit_to_send_op='H')
從測(cè)量結(jié)果中,我們看到Alice將等疊加狀態(tài)傳輸給了Bob。
量子隨機(jī)數(shù)發(fā)生器
經(jīng)典計(jì)算機(jī)中的大多數(shù)隨機(jī)數(shù)生成器并不是真正隨機(jī)的,因?yàn)樗鼈兪峭ㄟ^(guò)算法以確定性方式生成的,因此遵守可再現(xiàn)性規(guī)范。準(zhǔn)確地說(shuō),經(jīng)典的隨機(jī)數(shù)生成器從初始種子狀態(tài)開(kāi)始,并且使用種子狀態(tài)生成的隨機(jī)數(shù)序列始終是相同的。因此,我們看到這些隨機(jī)數(shù)生成器生成的數(shù)字序列模仿了隨機(jī)數(shù)序列的屬性,同時(shí)是確定性的。這些確定性隨機(jī)數(shù)生成器例程稱為偽隨機(jī)生成器。偽隨機(jī)數(shù)具有可重復(fù)性和速度的優(yōu)點(diǎn),但不能安全地用于諸如使用隨機(jī)密鑰來(lái)安全傳輸數(shù)據(jù)的密碼學(xué)等應(yīng)用。
與偽隨機(jī)數(shù)生成器相反的是硬件隨機(jī)數(shù)生成器,它利用量子過(guò)程、光電效應(yīng)等物理過(guò)程生成隨機(jī)數(shù)。由于這些物理過(guò)程高度不可預(yù)測(cè),因此它們?yōu)檎骐S機(jī)數(shù)奠定了良好的基礎(chǔ)可用于密碼學(xué)等安全應(yīng)用的生成器。
在本節(jié)中,我們將說(shuō)明使用多個(gè)量子位的隨機(jī)整數(shù)生成器例程。這個(gè)想法很簡(jiǎn)單,如下所示: 1. 確定表示要采樣的整數(shù)值范圍所需的量子位數(shù)量。例如,如果我們必須從 0 到 7 的八個(gè)整數(shù)中進(jìn)行采樣,則需要 log2 (8) = 3 個(gè)量子位。 2. 通過(guò)對(duì)最初處于 ∣0? 狀態(tài)的每個(gè)量子位應(yīng)用 Hadamard 變換來(lái)創(chuàng)建相等的疊加態(tài)。等疊加狀態(tài)由下式給出:這里∣x?代表計(jì)算基礎(chǔ)狀態(tài)∣x0 x1… xn ? 1? 的整數(shù)值。其中每個(gè) xi ∈ {0, 1}。 3. 將計(jì)算基礎(chǔ)狀態(tài)映射到實(shí)際整數(shù)并將映射存儲(chǔ)在字典 s2n_map 中。如果要采樣的整數(shù)范圍從零開(kāi)始,則從計(jì)算基礎(chǔ)狀態(tài)到實(shí)際整數(shù)的字典可以只是二進(jìn)制到十進(jìn)制的轉(zhuǎn)換,如下所示:如果范圍從偏移量 b 開(kāi)始,我們可以將計(jì)算基礎(chǔ)狀態(tài)映射到要采樣的整數(shù)值,如下所示: 4. 一旦定義了映射,我們就可以對(duì)等疊加狀態(tài) |ψ? 進(jìn)行測(cè)量,并使用字典映射 s2n_map 將測(cè)量的計(jì)算基礎(chǔ)狀態(tài)映射到整數(shù)值。
在清單 3-7 中,我們使用 10 個(gè)量子位生成 0 到 210 之間的隨機(jī)數(shù)。由于我們從 0 開(kāi)始采樣,因此我們算法的偏移量 b 為 0。
清單 3-7。量子隨機(jī)數(shù)發(fā)生器
import cirq
import numpy as np
def random_number_generator(low=0,high=2**10,m=10):
"""
:param low: lower bound of numbers to be generated
:param high: Upper bound of numbers to be generated
:param number m : Number of random numbers to output
:return: string of random numbers
"""
# Determine the number of Qubits required
qubits_required = int(np.ceil(np.log2(high - low)))
print(qubits_required)
# Define the qubits
Q_reg = [cirq.LineQubit(c) for c
in range(qubits_required)]
# Define the circuit
circuit = cirq.Circuit()
circuit.append(cirq.H(Q_reg[c]) for c
in range(qubits_required))
circuit.append(cirq.measure(*Q_reg, key="z"))
print(circuit)
# Simulate the circuit
sim = cirq.Simulator()
num_gen = 0
output = []
while num_gen <= m :
result = sim.run(circuit,repetitions=1)
rand_number = result.data.get_values()[0][0] + low
if rand_number < high :
output.append(rand_number)
num_gen += 1
return output
if __name__ == '__main__':
output = random_number_generator()
print(output)
從隨機(jī)數(shù)生成器電路中,我們可以看到它包括對(duì)每個(gè)量子位應(yīng)用 Hadamard 算子,然后進(jìn)行測(cè)量。從量子隨機(jī)數(shù)生成器的輸出中,我們看到它生成的 20 個(gè)數(shù)字的樣本均值是 510.95。這接近隨機(jī)數(shù)采樣的數(shù)字的平均值,即假設(shè)均勻分布的 0 到 2^10。
Deutsch–Jozsa 算法實(shí)現(xiàn)
Deutsch-Jozsa 算法使用我們?cè)诘?1 章中簡(jiǎn)要討論過(guò)的量子并行性。Deutsch-Jozsa 算法評(píng)估二元函數(shù)是否平衡或恒定。如果函數(shù) f(x) 的定義域中一半值的計(jì)算結(jié)果為 0,另一半計(jì)算結(jié)果為 1,則函數(shù) f(x) 被稱為平衡函數(shù)。常數(shù)函數(shù)對(duì)于其定義域中的所有值始終計(jì)算為相同的二進(jìn)制值 0 或 1。例如,如果我們使用三個(gè)量子位的系統(tǒng),我們可以有 2^3 = 8 個(gè)計(jì)算基礎(chǔ)狀態(tài),其形式為 ∣x1 x2x3?,其中每個(gè) xi ∈ {0, 1}。如果我們?cè)谶@八個(gè)計(jì)算基礎(chǔ)狀態(tài)上定義一個(gè)函數(shù) f (x) = f (x1 , x2, x3) ,并且其中一半計(jì)算結(jié)果為 1,另一半計(jì)算結(jié)果為 0,我們就說(shuō)該函數(shù)是平衡的。圖 3-4 顯示了 Deutsch-Jozsa 算法的高級(jí)圖。
?Deutsch-Jozsa 算法的步驟可以總結(jié)如下: 1.基于函數(shù)的域的大小,我們定義輸入量子比特的數(shù)量。例如,如果f(x)的域有四個(gè)值,那么我們需要log2(4)= 2個(gè)量子位。所以一般來(lái)說(shuō),如果我們?cè)诤瘮?shù)的定義域中有2^n個(gè)值,我們需要使用n個(gè)輸入量子比特。此外,該算法需要一個(gè)目標(biāo)量子位來(lái)保持f(x)的值。 2. 通過(guò)對(duì)每個(gè)輸入量子位應(yīng)用 Hadamard 變換 H,將狀態(tài) |0?^?n 初始化的輸入量子位變換為相等疊加狀態(tài)。 3. 通過(guò)連續(xù)應(yīng)用 NOT 變換 X 和 Hadamard 變換 H,將在狀態(tài) |0? 初始化的目標(biāo)量子位變換為負(fù)狀態(tài) |??,如下所示:這為我們提供了輸入和目標(biāo)量子位的組合狀態(tài),如下所示: 4. 我們有一個(gè)預(yù)言機(jī) Uf,它將每個(gè)計(jì)算基礎(chǔ)狀態(tài)二進(jìn)制字符串 x 作為輸入,并在目標(biāo)量子位中輸出 f(x),如下所示:因此,對(duì)于任意計(jì)算基狀態(tài) ∣x?,|x? ? (| 0??| 1?) 上的酉變換 Uf 可以表示為: 當(dāng) f(x) = 0 時(shí),我們有以下結(jié)果:當(dāng) f(x) = 1 時(shí),我們有以下結(jié)果: 對(duì)于 f(x) 的任何二進(jìn)制值進(jìn)行推廣,我們有以下結(jié)果: 基于此,我們可以說(shuō),預(yù)言變換Uf在所有量子位的組合狀態(tài)∣ψ1?上的應(yīng)用可以表達(dá)如下: 這里要進(jìn)行的一個(gè)有趣的觀察是,通過(guò)在疊加中對(duì)目標(biāo)量子位應(yīng)用酉變換,我們可以獲得在全局階段中顯示的函數(shù)值 f(x)。這通常被稱為相位反沖技巧。 5. 接下來(lái),我們對(duì)每個(gè)輸入量子位應(yīng)用哈姆達(dá)變換 H,這改變了輸入量子位的計(jì)算基礎(chǔ)。新?tīng)顟B(tài) |ψ3 ? 如下所示: 新的計(jì)算基礎(chǔ) ∣z? 是對(duì)應(yīng)于 n 個(gè)輸入量子位的二進(jìn)制字符串 ∣z0 , z1…zn ? 1? 的整數(shù)表示。術(shù)語(yǔ) x ⊙ z 指的是 x 和 z 模 2 的二進(jìn)制串之間的點(diǎn)積。 6. 我們對(duì) |ψ3? 的幾個(gè)相同副本進(jìn)行測(cè)量,并將注意力集中在所有輸入量子位測(cè)量為零狀態(tài)的實(shí)例上,即 z0 = z1 = … = zn ? 1 = 0。此時(shí)我們可以忽略目標(biāo)量子位,因?yàn)樗臓顟B(tài)不與輸入量子位糾纏。該輸入量子位狀態(tài)的幅度如下: 從公式 3-13 中我們可以看出,如果函數(shù) f(x) 是平衡函數(shù),則幅度將為零,因?yàn)?f(x) = 0 對(duì)應(yīng)的 +1 會(huì)抵消 f(x) = 1對(duì)應(yīng)的 ?1 。這意味著對(duì)于平衡狀態(tài),我們將無(wú)法觀察到對(duì)應(yīng)于 z0 = z1 = … = zn ? 1 = 0 的狀態(tài) |z? = ∣0?。另一方面,如果我們有一個(gè)常數(shù)函數(shù),概率幅值為 1,我們最終會(huì)以 100% 的概率在測(cè)量中觀察到狀態(tài) |z? = ∣0?。
我們對(duì)函數(shù) f(x) 的域大小為 4 實(shí)現(xiàn) Deutsch-Jozsa 算法,這意味著我們需要兩個(gè)量子位用于輸入寄存器,一個(gè)量子位用于目標(biāo)寄存器。清單3-6顯示了詳細(xì)的代碼。預(yù)言機(jī)改造是通過(guò)預(yù)言機(jī)函數(shù)來(lái)實(shí)現(xiàn)的。
我們通過(guò)不對(duì)狀態(tài)∣ψ1?應(yīng)用任何變換來(lái)定義常量函數(shù)的預(yù)言。對(duì)狀態(tài)不應(yīng)用任何變換可以被認(rèn)為是通過(guò)預(yù)言機(jī) Uf 實(shí)現(xiàn)常數(shù)函數(shù) f(x) = 0 作為恒等變換。因此,恒等變換后的輸出狀態(tài)∣ψ2?等于輸入狀態(tài)∣ψ1?。
我們通過(guò)基于輸入量子位的狀態(tài)作為控制量子位對(duì)目標(biāo)量子位應(yīng)用 CNOT 變換來(lái)定義平衡函數(shù) f(x) 的預(yù)言。通過(guò)連續(xù)的CNOT變換,我們實(shí)現(xiàn)了帶有真值表的平衡函數(shù)的預(yù)言機(jī),如表3-1所示。
清單 3-8 顯示了 Deutsch-Jozsa 算法的詳細(xì)實(shí)現(xiàn)。
清單 3-8。 Deutsch-Jozsa 實(shí)施
import cirq
import numpy as np
The oracle function implements the oracle for the balanced function as well as for the constant function. For the constant function, we do not apply any transformation, and hence it ends up implementing the constant function f(x) = 0 . Alternately, we implement the balanced function of four computational basis states using a CNOT transform on the target qubit based on the 2 input qubit states in succession. For the computation basis state given by |x1x2? for the two-qubit input, the balanced function
implemented can be written as f(x) = f(x0, x1) = x0 ⊕ x1.
def oracle(data_reg, y_reg, circuit, is_balanced=True): if is_balanced:
circuit.append([cirq.CNOT(data_reg[0],y_reg)
,cirq.CNOT(data_reg[1], y_reg)])
return circuit
def deutsch_jozsa(domain_size: int,
func_type_to_simulate: str = "balanced",
copies: int = 1000):
"""
:param domain_size: Number of inputs to the function
:param oracle: Oracle simulating the function
:return: whether the function is balanced or constant
"""
# Define the data register and the target qubit
reqd_num_qubits = int(np.ceil(np.log2(domain_size))) #Define the input qubits
data_reg = [cirq.LineQubit(c) for c
in range(reqd_num_qubits)] # Define the Target qubits
y_reg = cirq.LineQubit(reqd_num_qubits) # Define cirq Circuit
circuit = cirq.Circuit()
# Define equal superposition state for the input qubits circuit.append(cirq.H(data_reg[c]) for c
in range(reqd_num_qubits)) # Define Minus superposition state circuit.append(cirq.X(y_reg)) circuit.append(cirq.H(y_reg))
# Check for nature of function : balanced/constant # to simulate and implement Oracle accordingly
if func_type_to_simulate == 'balanced': is_balanced = True
else:
is_balanced = False
circuit = oracle(data_reg, y_reg, circuit, is_balanced=is_balanced)
# Apply Hadamard transform on each of the input qubits circuit.append(cirq.H(data_reg[c]) for
c in range(reqd_num_qubits)) # Measure the input qubits
circuit.append(cirq.measure(*data_reg, key='z')) print("Circuit Diagram Follows")
print(circuit)
sim = cirq.Simulator()
result = sim.run(circuit, repetitions=copies) print(result.histogram(key='z'))
if name == ' main ':
print("Execute Deutsch Jozsa for a Balanced Function of Domain size 4") deutsch_jozsa(domain_size=4, func_type_to_simulate='balanced', copies=1000)
print("Execute Deutsch Jozsa for a Constant Function of Domain size 4") deutsch_jozsa(domain_size=4,
func_type_to_simulate='', copies=1000)
?從平衡函數(shù)的輸出中,我們看到所有狀態(tài)都是 3,對(duì)應(yīng)于∣11?的二進(jìn)制量子位狀態(tài)。由于我們的測(cè)量中沒(méi)有任何與 ∣00? 相對(duì)應(yīng)的狀態(tài),因此它證實(shí)了該函數(shù)確實(shí)是平衡的。
類似地,對(duì)于常數(shù)函數(shù),我們看到所有測(cè)量值都是 0,對(duì)應(yīng)于預(yù)期的二進(jìn)制量子位狀態(tài) ∣00?。
Bernstein-Vajirani算法?
Bernstein-Vajirani 算法可以被認(rèn)為是 Deutsch-Jozsa 算法的擴(kuò)展。與 Deutsch-Jozsa 算法非常相似,我們面臨一個(gè)未知函數(shù),該函數(shù)將 0 和 1 的二進(jìn)制字符串作為輸入,并輸出 0 或 1 的二進(jìn)制值。此外,假設(shè)函數(shù)輸出可以寫(xiě)為如下:
Bernstein-Vajirani 算法的目標(biāo)是找出秘密二進(jìn)制字符串 定義函數(shù) s = s0, s1…sn ? 1。由于該函數(shù)是由其秘密字符串 s 定義的,因此我們將黑盒函數(shù)稱為 fs(x)。
在經(jīng)典的計(jì)算體系中,可以通過(guò)查詢黑盒函數(shù) n 次來(lái)找出秘密字符串。在n次中,每次只能將一個(gè)輸入位設(shè)置為1,其余設(shè)置為0,然后觀察輸出。例如,通過(guò)評(píng)估輸入模式 10000..0 的函數(shù),它將輸出秘密位 s0,因?yàn)橐韵虑闆r成立:
在量子計(jì)算范式中,我們可以像 Deutsch-Jozsa 一樣使用量子并行性,只需調(diào)用一次定義黑盒函數(shù)的預(yù)言機(jī)即可找出秘密字符串 s。我們將參考 Deutsch-Jozsa 電路中的圖 3-4,同時(shí)參考 Bernstein-Vajirani 算法中的不同中間狀態(tài),因?yàn)閮烧叩母呒?jí)電路圖是相同的。
以下是Bernstein-Vajirani算法的詳細(xì)步驟: 1. 根據(jù)函數(shù) f(x) 的定義域,定義所需的輸入量子位數(shù)量。例如,如果函數(shù)有 2n 個(gè)輸入,那么我們將需要 n 個(gè)量子位。我們將所有輸入量子位初始化為狀態(tài)∣0?。我們還定義了一個(gè)在狀態(tài) ∣0? 初始化的目標(biāo)量子位。 我們對(duì)輸入量子位應(yīng)用 Hadamard 變換 H 來(lái)定義相等疊加態(tài)。 通過(guò)連續(xù)應(yīng)用 NOT 變換 X 和 Hadamard 變換 H,將目標(biāo)量子位變換為負(fù)狀態(tài)。 這為我們提供了輸入和目標(biāo)量子位的組合狀態(tài) |ψ1?(參見(jiàn)圖 3-4),如下所示: 2. 未知函數(shù) fs(x) 在計(jì)算基礎(chǔ)上的預(yù)言機(jī) Uf 輸入量子位的狀態(tài) ∣x? 和目標(biāo)量子位狀態(tài) ∣y? 應(yīng)該像這樣工作: 使用與 Deutsch-Jozsa 相同的方法,我們得到新的狀態(tài) |ψ2?(見(jiàn)圖 3-4),如下所示: 請(qǐng)參閱 Deutsch-Jozsa 算法,了解如何通過(guò)相位反沖技巧讓 f(x) 值顯示在全局相位中。 3. 與 Deutsch-Jozsa 算法一樣,我們對(duì)組合狀態(tài) ∣ψ2 ? 中的每個(gè)輸入量子位應(yīng)用 Hadamard 變換 H,以獲得狀態(tài) ∣ψ3?,如下所示: 在上式中,∣z? 表示 n 個(gè)輸入量子位的新計(jì)算基礎(chǔ)。術(shù)語(yǔ) x ⊙ z 表示 x 和 z 模 2 的二進(jìn)制字符串表示形式之間的點(diǎn)積。 4. 我們知道函數(shù) fs(x) = s ⊙ x,因此我們可以重寫(xiě) |ψ3 ?,如下所示: 如果我們忽略目標(biāo)量子位并查看任何輸入計(jì)算基礎(chǔ)狀態(tài) ∣z? 的振幅,則振幅由以下公式給出: 5. 當(dāng)輸入計(jì)算基礎(chǔ)狀態(tài) z 等于秘密字符串 s 時(shí),其幅度由下式給出: 由于 2 × s ⊙ x 可被 2 整除,因此 2 × s ⊙ x mod 2 始終等于 0。這給出了計(jì)算基礎(chǔ)狀態(tài) ∣z? = ∣s? 的幅度,如下所示: 6. 由于秘密字符串 s 對(duì)應(yīng)的計(jì)算基礎(chǔ)狀態(tài)的幅度為 1,因此如果我們測(cè)量輸入量子位,我們將以 100% 的概率得到狀態(tài) ∣s?。
我們以通用方式針對(duì)任意數(shù)量的輸入量子位實(shí)現(xiàn) Bernstein-Vajirani 算法,并針對(duì)六個(gè)輸入量子位執(zhí)行該算法。六個(gè)量子位的函數(shù)域中的輸入數(shù)量為 2^6 = 64。對(duì)于相應(yīng)秘密位設(shè)置為 1 的每個(gè)輸入量子位,我們對(duì)目標(biāo)量子位應(yīng)用 CNOT 變換,并將輸入量子位作為控制量子位。該變換確保每當(dāng)秘密字符串 s 和計(jì)算基礎(chǔ)狀態(tài)字符串 x 之間的點(diǎn)積為偶數(shù)時(shí),目標(biāo)量子位上的結(jié)果變換為零。另一方面,當(dāng)該點(diǎn)積為奇數(shù)時(shí),目標(biāo)量子位將進(jìn)行 NOT 運(yùn)算。總結(jié)一下,這個(gè)轉(zhuǎn)換實(shí)現(xiàn)了Oracle轉(zhuǎn)換:
當(dāng)秘密字符串 s 和計(jì)算基礎(chǔ)狀態(tài)字符串 x 之間的點(diǎn)積為偶數(shù)時(shí),則 fs(x) = 0,因此 |fs (x) ⊕ y? = ∣y?。正如我們?cè)谶@種情況下看到的,目標(biāo)量子位 ∣y? 的狀態(tài)保持不變。當(dāng)點(diǎn)積為奇數(shù)時(shí),fs(x) = 1,因此 |fs(x) ⊕ y? = ∣1 ⊕ y?。在這種情況下,我們可以看到 NOT 運(yùn)算被應(yīng)用于目標(biāo)量子位的狀態(tài)。清單 3-9 顯示了 Bernstein-Vajirani 算法的詳細(xì)實(shí)現(xiàn)。
清單 3-9。實(shí)施 Bernstein–Vajirani 算法
import cirq import numpy as np def func_bit_pattern(num_qubits): """ Create the Oracle function Parameters :param num_qubits: :return: """ bit_pattern = [] for i in range(num_qubits): bit_pattern.append(np.random.randint(0, 2)) print(f"Function bit pattern: \ {''.join([str(x) for x in bit_pattern]) }") return bit_pattern def oracle(input_qubits,target_qubit,circuit, num_qubits,bit_pattern): """ Define the oracle
:param input_qubits: :param target_qubit: :param circuit: :param num_qubits: :param bit_pattern: :return: """ for i in range(num_qubits): if bit_pattern[i] == 1: circuit.append(cirq.CNOT(input_qubits[i], target_qubit)) return circuit def BV_algorithm(num_qubits, bit_pattern): """ :param num_qubits: :return: """ input_qubits = [cirq.LineQubit(i) for i in range(num_qubits)] target_qubit = cirq.LineQubit(num_qubits) circuit = cirq.Circuit() circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) circuit.append([cirq.X(target_qubit) , cirq.H(target_qubit)]) circuit = oracle(input_qubits,target_qubit, circuit,num_qubits,bit_pattern) circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) circuit.append(cirq.measure(*input_qubits,key='Z')) print("Bernstein Vajirani Circuit Diagram") print(circuit) sim = cirq.Simulator() results = sim.run(circuit, repetitions=1000)
:param input_qubits: :param target_qubit: :param circuit: :param num_qubits: :param bit_pattern: :return: """ for i in range(num_qubits): if bit_pattern[i] == 1: circuit.append(cirq.CNOT(input_qubits[i], target_qubit)) return circuit def BV_algorithm(num_qubits, bit_pattern): """ :param num_qubits: :return: """ input_qubits = [cirq.LineQubit(i) for i in range(num_qubits)] target_qubit = cirq.LineQubit(num_qubits) circuit = cirq.Circuit() circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) circuit.append([cirq.X(target_qubit) , cirq.H(target_qubit)]) circuit = oracle(input_qubits,target_qubit, circuit,num_qubits,bit_pattern) circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) circuit.append(cirq.measure(*input_qubits,key='Z')) print("Bernstein Vajirani Circuit Diagram") print(circuit) sim = cirq.Simulator() results = sim.run(circuit, repetitions=1000)
?從輸出中我們可以看到,Bernstein-Vajirani 算法在測(cè)量輸入量子位時(shí)以 100% 的概率正確識(shí)別了秘密字符串 111011。建議讀者針對(duì)較大的域大小執(zhí)行該算法,并查看該算法是否按預(yù)期工作。
貝爾不等式檢驗(yàn)?
貝爾的不等式檢驗(yàn)說(shuō)明??了這樣一個(gè)事實(shí):通過(guò)使用量子糾纏,人們可以實(shí)現(xiàn)比無(wú)法相互通信的兩方或多方之間經(jīng)典的相關(guān)性更強(qiáng)的相關(guān)性。盡管糾纏可以在兩個(gè)量子物體之間產(chǎn)生強(qiáng)相關(guān)性,但它本身在通信中并沒(méi)有什么用處,因?yàn)閮H對(duì)一個(gè)量子物體進(jìn)行糾纏態(tài)測(cè)量就可以使另一個(gè)量子物體的測(cè)量完全確定性。例如,對(duì)于 Alice 和 Bob 共享的 Bell 狀態(tài),Alice 對(duì) ∣0? 或 ∣1? 的測(cè)量完全決定了 Bob 量子位的狀態(tài),反之亦然。然而,如果Alice和Bob都可以在糾纏后進(jìn)行測(cè)量并影響測(cè)量的最終結(jié)果,那么Alice和Bob之間就可以創(chuàng)建有用的相關(guān)性,這在經(jīng)典設(shè)置中是不可能的。我們將通過(guò)愛(ài)麗絲和鮑勃之間的合作游戲來(lái)激發(fā)貝爾不等式檢驗(yàn)。然而,在我們進(jìn)行貝爾不等式測(cè)試之前,讓我們推斷出如果 Alice 在|α?正交基 , ∣α⊥ ? 中測(cè)量她的量子位,而 Bob 在|β? 正交基 ∣β⊥ ? 中測(cè)量他的量子位,則得出不同結(jié)果的概率, 假設(shè)它們共享貝爾狀態(tài).需要了解這些概率才能提出合作博弈的獲勝策略。
我們將 Alice 基的一般測(cè)量基礎(chǔ)表示為 ∣α? 和 ∣α⊥ ?,其中 α 是基態(tài) ∣α? 與 ∣0? 狀態(tài)所成的角度。因此,我們可以將它們表示如下:
計(jì)算基礎(chǔ)狀態(tài)∣0?在基礎(chǔ)狀態(tài)∣α?和∣α⊥?上的投影為?0| α? = cos α 和 ?0| α⊥? = ? sin α。類似地,計(jì)算基礎(chǔ)狀態(tài)∣1?在∣α?上的投影為?1| α? = sin α 且 |α⊥ ? 為 ?1|α⊥ ? = cos α。利用這些信息,我們可以在基礎(chǔ) {|α?, |α⊥?} 中寫(xiě)出 ∣0? 和 ∣1?,如下所示:
類似地,我們可以在另一個(gè)基組 {|β ?, |β⊥?} 中表示 |0? 和 |1?,其中 β 是基狀態(tài) |β ? 與 |0? 狀態(tài)所成的角度,如下所示:
現(xiàn)在,如果 Alice 在 {|α?, |α⊥ ?} 基礎(chǔ)上測(cè)量她的量子位,而 Bob 在 {|β?, |β⊥?} 基礎(chǔ)上測(cè)量他的量子位,則糾纏貝爾態(tài)可以用以下形式表示下列的:
表 3-2 顯示了 Alice 的測(cè)量基礎(chǔ)狀態(tài)(即 {|α?, |α⊥?})和 Bob 的測(cè)量基礎(chǔ)狀態(tài)(即 {|β?, |β)的每個(gè)結(jié)果的概率⊥?}。
現(xiàn)在讓我們討論 Alice 和 Bob 之間的合作博弈來(lái)說(shuō)明貝爾不等式檢驗(yàn)。游戲由兩名玩家(愛(ài)麗絲和鮑勃)和一名裁判組成。 Alice和Bob相隔很遠(yuǎn),他們之間沒(méi)有任何溝通渠道。在每一輪中,裁判向 Alice 發(fā)送一個(gè) x1 位,向 Bob 發(fā)送一個(gè) x2 位。根據(jù)接收到的位,Alice 和 Bob 應(yīng)該分別返回位 a(x1) 和 b(x2 )。如果滿足以下條件,愛(ài)麗絲和鮑勃將贏得本輪:
表 3-3 顯示了所有 x1 和 x2 對(duì)贏得比賽的真值表。
在經(jīng)典世界中,Alice 和 Bob 能夠想出的最佳策略最多 75% 的情況下會(huì)贏得比賽。這里,這些策略類似于 Alice 和 Bob 用于發(fā)回比特的決策函數(shù) a(x1 ) 和 b(x2 )。人們可以驗(yàn)證愛(ài)麗絲和鮑勃在經(jīng)典意義上玩的最佳策略是發(fā)回相同的位。因此,成功概率為 75% 的兩種最佳策略如下:
現(xiàn)在讓我們看看 Alice 和 Bob 是否可以通過(guò)量子策略做得更好,因?yàn)樗麄児蚕碡悹枒B(tài)。這是一種這樣的策略:
1. 如果 Alice 收到位 x1 = 0,她會(huì)在與 α = 0 相關(guān)的 { ∣0?, ∣π/2?} 基礎(chǔ)上測(cè)量她的量子位,這給了我們標(biāo)準(zhǔn) {|0?,| 1?}計(jì)算基礎(chǔ)。如果她收到位 x1 = 1,她會(huì)在 { ∣π/4 ?, ∣3π/4?} 基礎(chǔ)上測(cè)量她的量子位。 2. Bob 選擇類似的策略,根據(jù)他是否收到位 x2,他在 { ∣π/8 ?, ∣5π/8?} 或 { ∣? π/8 ?, ∣3π/8?} 中測(cè)量量子位= 0 或 x2 = 1。
對(duì)于每個(gè)測(cè)量的基礎(chǔ) {|k?, | k⊥ ?} Alice 和 Bob 會(huì)發(fā)回 0(表示 |k?)和 1(表示 ∣k⊥?)。這是很重要的一點(diǎn),因?yàn)樗鼘⒋_定 Alice 和 Bob 返回的 a(x1 ) 和 b(x2 ) 的值。
當(dāng)x1=0時(shí),x2=0 現(xiàn)在 |α = 0? ? ∣β = π/8? 對(duì)應(yīng)于 a(x1 ) = 0, b(x2 ) = 0。因此,我們有 a(x1) ⊕ b(x2 ) = 0 ⊕ 0 = 0 = xy = 0 × 0 = 0 當(dāng) (x1 = 0, x2 = 0) 時(shí),概率為
相似地
另外,|α⊥, α = 0? ? ∣β⊥, β = π/8? 對(duì)應(yīng)于 a(x1 ) = 1, b(x2 ) = 1。因此,我們有 a(x1 ) ⊕ b(x2 ) = 1 ⊕ 1 = 0 = xy = 0 × 0 = 0 當(dāng) (x1 = 0, x2 = 0) 時(shí),概率為。
結(jié)合上面兩個(gè)公式,我們可以說(shuō),當(dāng) (x1 = 0, x2 = 0) 時(shí),Alice 和 Bob 有獲勝概率。
當(dāng)x1 = 0,x2 = 1時(shí):
現(xiàn)在 |α = 0? ? ∣β = ? π/8? 對(duì)應(yīng)于 a(x1 ) = 0, b(x2 ) = 0。因此,a(x1) ⊕ b(x2 ) = 0 ⊕ 0 = 0 = xy = 0 × 1 = 0 當(dāng) (x1 = 0, x2 = 1) 時(shí),概率為。
相似地,
狀態(tài) |α⊥, α = 0? ? ∣β⊥, β = ? π/8? 對(duì)應(yīng)于 a(x1 ) = 1, b(x2 ) = 1。因此,a(x1 ) ⊕ b(x2 ) = 1 ⊕ 1 = 0 = xy = 0 × 1= 0 當(dāng) (x1 = 0, x2 = 1) 概率為
結(jié)合公式,我們可以說(shuō),當(dāng) (x1 = 0, x2 = 1) 時(shí),Alice 和 Bob 有獲勝概率。
類似地,使用所采用的策略可以推斷出,對(duì)于其余兩個(gè)條件 (x1 = 1, x2 = 0) 和 (x1 = 1, x2 = 1),Alice 和 Bob 的獲勝概率為。建議讀者對(duì)這兩個(gè)條件進(jìn)行數(shù)學(xué)計(jì)算,并驗(yàn)證該說(shuō)法是否正確。
因此,對(duì)所有可能的位 x1 和 x2 組合使用所采用的策略,Alice 和 Bob 設(shè)法發(fā)回 a(x1) 和 b(x2 ),以確保 a(x1 ) ⊕ b(x2 ) = x1 x2 的概率。這高于經(jīng)典設(shè)置中可實(shí)現(xiàn)的最大獲勝概率 0.75。
我們通過(guò)對(duì)清單 3-10 中 Alice 和 Bob 之間的合作博弈進(jìn)行建模,在 Cirq 中實(shí)現(xiàn)貝爾不等式。合作博弈就是使用我們剛才討論的策略。
清單 3-10。貝爾不等式
import cirq import numpy as np def bell_inequality_test_circuit(): """ Define 4 qubits 0th qubit - Alice 1st qubit - contains the bit sent to Alice by the referee 2nd qubit - Bob's qubit 3rd qubit - contains the bit sent to Bob by the referee :return: cirq circuit """ qubits = [cirq.LineQubit(i) for i in range(4)] circuit = cirq.Circuit() # Entangle Alice and Bob to the Bell state circuit.append([cirq.H(qubits[0]), cirq.CNOT(qubits[0], qubits[2])]) # Apply X^(-0.25) on Alice's Qubit circuit.append([cirq.X(qubits[0])**(-0.25)]) # Apply Hadamard transform to the referee Qubits # for Alice and Bob # This is done to randomize the qubit circuit.append([cirq.H(qubits[1]), cirq.H(qubits[3])]) # Perform a Conditional X^0.5 on Alice and Bob # Qubits based on corresponding referee qubits circuit.append([cirq.CNOT(qubits[1], qubits[0])**0.5]) circuit.append([cirq.CNOT(qubits[3], qubits[2])**0.5]) # Measure all the qubits circuit.append(cirq.measure(qubits[0], key='A')) circuit.append(cirq.measure(qubits[1], key='r_A')) circuit.append(cirq.measure(qubits[2], key='B')) circuit.append(cirq.measure(qubits[3], key='r_B')) return circuit
def main(iters=1000): # Build the Bell inequality test circuit circuit = bell_inequality_test_circuit() print("Bell Inequality Test Circuit") print(circuit) #Simulate for several iterations sim = cirq.Simulator() result = sim.run(circuit, repetitions=iters) A = result.measurements['A'][:, 0] r_A = result.measurements['r_A'][:, 0] B = result.measurements['B'][:, 0] r_B = result.measurements['r_B'][:, 0] win = (np.array(A) + np.array(B)) % 2 == (np.array(r_A) & np.array(r_B)) print(f"Alice and Bob won {100*np.mean(win)} % of the times") if __name__ == '__main__': main()
西蒙算法
在 Simon 的問(wèn)題中,我們得到一個(gè)函數(shù) f(x),其訪問(wèn)僅限于通過(guò)黑盒變換 Uf 進(jìn)行查詢,就像 Deutsch-Jozsa 和 Bernstein-Vajirani 算法中的那樣。作為西蒙問(wèn)題的一部分,我們需要執(zhí)行以下操作: 1. 判斷該函數(shù)是否是一對(duì)一函數(shù),即輸入的每個(gè)值都映射到唯一的輸出。 2. 判斷該函數(shù)是否為二對(duì)一函數(shù),即輸入的每個(gè)值正好映射到兩個(gè)輸入。當(dāng)函數(shù)為二對(duì)一時(shí),存在一個(gè)秘密二進(jìn)制字符串 s 將具有相同輸出的每對(duì)輸入 x1 和 x2 聯(lián)系起來(lái),即 f(x1 ) = f(x2 ) 當(dāng)且僅當(dāng) x1 ⊕ x2 = s。我們需要為已識(shí)別的二對(duì)一函數(shù)確定秘密字符串 s。 3.此外,假定輸入函數(shù)將始終是一對(duì)一函數(shù)或二對(duì)一函數(shù)。
西蒙算法是其他重要算法的先驅(qū),例如用于整數(shù)素因數(shù)分解的肖爾算法。圖 3-5 展示了 Simon 算法的高級(jí)流程圖。
以下是與西蒙算法相關(guān)的步驟: 1. 我們根據(jù)問(wèn)題的領(lǐng)域從 n 個(gè)輸入量子位開(kāi)始。此外,我們定義一組 n 個(gè)量子位作為目標(biāo)量子位來(lái)保存 f(x) 的值。所有量子位都初始化為零。 2n 個(gè)量子位的初始狀態(tài)可以寫(xiě)成如下: 2. 我們對(duì)每個(gè)輸入量子位應(yīng)用 Hadamard 變換,為輸入創(chuàng)建相等的疊加態(tài)。 Hadamard 變換后 2n 個(gè)量子位的組合狀態(tài)由下式給出: 3. 在下一階段,我們通過(guò) Oracle 變換 Uf 將函數(shù) f(x) 應(yīng)用于每個(gè)計(jì)算基礎(chǔ)狀態(tài) x = xo x1…xn ? 1。因此,對(duì)于每個(gè)計(jì)算基礎(chǔ)狀態(tài)|x?,我們有: 在上式中,|y? 是 n 個(gè)目標(biāo)量子位中每一個(gè)的初始狀態(tài),因此 y = 0。這給我們提供了新?tīng)顟B(tài) |ψ2 ?,如下所示: 請(qǐng)注意,與之前的算法不同,Simon 算法中沒(méi)有相位反沖,因?yàn)槲覀冊(cè)O(shè)置了目標(biāo)量子位的初始狀態(tài) y = 0。
我們對(duì)輸入量子位應(yīng)用 Hadamard 變換以獲得最終狀態(tài) ∣ψ3 ?,如下所示:
4. 現(xiàn)在讓我們看看當(dāng)秘密字符串 s = 0000…0 時(shí)會(huì)發(fā)生什么,即函數(shù)是一對(duì)一的。當(dāng)函數(shù)是一對(duì)一函數(shù)時(shí),f(x) 的每個(gè)值都與特定的輸入字符串 x 相關(guān)聯(lián)。因此,如果我們測(cè)量目標(biāo)量子位并觀察 ∣f(x)?,我們將只得到一個(gè)對(duì)應(yīng)的 x。對(duì)于每個(gè)輸入 ∣z? 狀態(tài),假設(shè)我們已經(jīng)觀察到目標(biāo)量子位的狀態(tài)為 ∣f(x)?,則概率幅度由 給出。因此,給定 ∣z? 狀態(tài)的相應(yīng)概率,我們觀察到目標(biāo)量子位的狀態(tài)為 ∣f(x)?,由 給出。由于所有 z 的概率相同,因此我們?cè)诿總€(gè)目標(biāo)量子位狀態(tài) f(x) 的輸入狀態(tài) z 上得到均勻分布。 5. 現(xiàn)在我們討論秘密字符串s不全零的情況;即,該函數(shù)是二對(duì)一函數(shù)。一旦我們測(cè)量了目標(biāo)量子位并觀察了狀態(tài) ∣c?,就會(huì)有兩個(gè) x 值,例如 x1 和 x2,這將給出 f(x1 ) = f(x2 ) = c。對(duì)于目標(biāo)量子位的每個(gè)測(cè)量狀態(tài) c,每個(gè)輸入量子位狀態(tài) ∣z? 的概率幅度由以下給出: 對(duì)于任何狀態(tài) ∣z? 具有非零概率幅度,以下應(yīng)該成立: 對(duì)于二對(duì)一函數(shù),我們知道 x1 和 x2 由關(guān)系 x1 ⊕ x2 = s 綁定,這也意味著 x2 = x1 ⊕ s?,F(xiàn)在讓我們通過(guò)替換 x2 = (x1 ⊕ s) 來(lái)簡(jiǎn)化 x1 ⊙ z = x2 ⊙ z。 由于兩邊都有 x1 ⊙ z,因此恒等式簡(jiǎn)化為 s ⊙ z = 0。 這意味著當(dāng)我們獲得測(cè)量任何輸入狀態(tài) z 的非零概率時(shí),則 s ⊙ z = 0 。 我們可以測(cè)量輸入量子位并觀察 n 個(gè)不同的 z 值。根據(jù)觀察到的 z 值,我們可以求解一組 n 個(gè)方程,如下所示,以找到秘密字符串: 這n個(gè)方程可以通過(guò)高斯消元法等算法方便地求解。 清單 3-11 說(shuō)明了 Simon 算法的詳細(xì)實(shí)現(xiàn)。秘密字符串110用于演示西蒙算法的實(shí)現(xiàn)。 清單 3-11。西蒙算法
import cirq import numpy as np def oracle(input_qubits, target_qubits, circuit): # Oracle for Secret Code 110 circuit.append(cirq.CNOT(input_qubits[2],target_qubits[1])) circuit.append(cirq.X(target_qubits[0])) circuit.append(cirq.CNOT(input_qubits[2], target_qubits[0])) circuit.append(cirq.CCNOT(input_qubits[0],input_qubits[1], target_qubits[0])) circuit.append(cirq.X(input_qubits[0])) circuit.append(cirq.X(input_qubits[1])) circuit.append(cirq.CCNOT(input_qubits[0], input_qubits[1], target_qubits[0])) circuit.append(cirq.X(input_qubits[0])) circuit.append(cirq.X(input_qubits[1]))
circuit.append(cirq.X(target_qubits[0])) return circuit def simons_algorithm_circuit(num_qubits=3,copies=1000): """ Build the circuit for Simon's Algorithm :param num_qubits: :return: cirq circuit """ input_qubits = [cirq.LineQubit(i) for i in range(num_qubits)] target_qubits = [cirq.LineQubit(k) for k in range(num_qubits, 2 * num_qubits)] circuit = cirq.Circuit() # Create Equal Superposition state for the # Input qubits through Hadamard Transform circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) # Pass the Superposition state through the oracle circuit = oracle(input_qubits, target_qubits, circuit) # Apply Hadamard transform on the input corners circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) # Measure the input and the target qubits circuit.append(cirq.measure(*(input_qubits + target_qubits), key='Z')) print("Circuit Diagram for Simons Algorithm follows") print(circuit) #Simulate Algorithm sim = cirq.Simulator() result = sim.run(circuit,repetitions=copies) out = dict(result.histogram(key='Z')) out_result = {} for k in out.keys():
new_key = "{0:b}".format(k) if len(new_key) < 2*num_qubits: new_key = (2*num_qubits – len(new_key))*'0' + new_key out_result[new_key] = out[k] print(out_result) if __name__ =='__main__': simons_algorithm_circuit()
根據(jù) Simon 算法的輸出,只需選擇 f(x) 值(存儲(chǔ)在組合 |x?|f(x)? 狀態(tài)的最后 3 位中)的兩個(gè)結(jié)果,就可以輕松找到秘密字符串?;鸩瘛H绻覀?nèi)蓚€(gè)結(jié)果 111010 和 001010,我們可以看到兩個(gè)結(jié)果的輸出位相同并且等于 010。因此,如果我們對(duì)兩個(gè)輸入 111 和 001 進(jìn)行模 2 加法,我們將得到我們的密碼。因此,密碼是 111 ⊕ 001,這給我們 110,它與我們選擇的密碼相匹配。建議讀者編寫(xiě)一個(gè)小函數(shù),使用類似的邏輯自動(dòng)執(zhí)行密鑰查找過(guò)程。?
格羅弗算法
量子計(jì)算相對(duì)于經(jīng)典計(jì)算的潛在優(yōu)勢(shì)之一是它訪問(wèn)數(shù)據(jù)庫(kù)元素的速度。格羅弗算法就是這樣一種算法,它可以在從數(shù)據(jù)庫(kù)中搜索項(xiàng)目時(shí)提供二次加速。 Grover 的算法使用幅度放大技巧,這不僅有助于數(shù)據(jù)庫(kù)搜索任務(wù),而且可以廣泛用于多種應(yīng)用。
假設(shè)數(shù)據(jù)庫(kù)中有 N = 2^n 個(gè)項(xiàng)目,并且我們想要搜索由 k 索引的項(xiàng)目,我們將其稱為獲勝者。我們可以通過(guò)對(duì)應(yīng)于 n 個(gè)輸入量子位的計(jì)算基礎(chǔ)狀態(tài) ∣x? 來(lái)定義 N 個(gè)項(xiàng)目。預(yù)言機(jī)在每個(gè)計(jì)算基礎(chǔ)狀態(tài) |x? ∈ {0, 1}^n 上工作,并為獲勝者項(xiàng)目返回函數(shù)輸出 f(x) = 1,為其余項(xiàng)目返回 0。在量子計(jì)算范式中,我們可以將預(yù)言機(jī) Uf 視為在計(jì)算基礎(chǔ)狀態(tài) ∣x? 上工作的酉算子,如下所示: 對(duì)于計(jì)算基礎(chǔ)狀態(tài)∣k?引用的獲勝項(xiàng),Oracle變換的效果如下所示:
現(xiàn)在我們已經(jīng)了解了有關(guān)預(yù)言機(jī)的一些信息,讓我們看看 Grover 算法的步驟: 1. 基于數(shù)據(jù)庫(kù)中的項(xiàng)目數(shù)量 N = 2n,我們使用 Hadamard 變換定義 n 個(gè)量子位上的相等疊加狀態(tài),初始化為 |0??n,即。我們還將在 ∣0? 處初始化的目標(biāo)量子位設(shè)置為負(fù)狀態(tài),我們用它來(lái)實(shí)現(xiàn)相位反沖技巧。這給出了輸入和目標(biāo)量子位的組合狀態(tài) |ψ1 ?,如下所示: 2. 下一步,我們實(shí)現(xiàn)預(yù)言機(jī) Uf,它作用于輸入和目標(biāo)的計(jì)算基礎(chǔ)狀態(tài) Uf |x? ∣y? = |x? ∣ f(x) ⊕ y?,其中 y 是目標(biāo)量子位狀態(tài)。通過(guò)我們?cè)?Deutsch-Jozsa 算法中說(shuō)明的相位反沖技巧,將 Uf 應(yīng)用于 |ψ1? 可以得到 ∣ψ2 ?。經(jīng)過(guò)預(yù)言酉 Uf 變換后的狀態(tài) ∣ψ2 ? 由下式給出: 可以看到,目標(biāo)量子位狀態(tài)保持不變,我們能夠得到每個(gè)計(jì)算基礎(chǔ)狀態(tài)∣x?對(duì)應(yīng)的階段的函數(shù)值f(x)。因此,展望未來(lái),我們可以丟棄目標(biāo)量子位,并將預(yù)言機(jī) Uf 在任何計(jì)算基礎(chǔ)狀態(tài)上的變換視為 Uf|x? = (?1)^f(x) |x??,F(xiàn)在我們已經(jīng)僅根據(jù)輸入量子位建立了 Oracle 函數(shù),我們將不再引用目標(biāo)量子位。某種意義上,預(yù)言機(jī)實(shí)現(xiàn)了函數(shù) f(x),當(dāng) x 是獲勝者狀態(tài)時(shí),該函數(shù)為 1,其他地方為 0。 3. 我們可以想到等疊加態(tài)作為兩個(gè)相互正交的向量的線性組合:搜索到的或獲勝的項(xiàng)目,我們用 ∣k? 表示,向量 ∣c? 是通過(guò)刪除向量分量獲得的單位向量∣k? 來(lái)自等疊加態(tài) |ψin ?。圖 3-6(a) 說(shuō)明了這一點(diǎn)。 這允許我們?cè)趦蓚€(gè)向量 ∣k? 和 |c? 的范圍內(nèi)寫(xiě) |ψin?(見(jiàn)圖 3-6(a)),如下所示: 4. 現(xiàn)在,一旦我們對(duì)狀態(tài)∣ψin?應(yīng)用預(yù)言變換Uf,與獲勝項(xiàng)狀態(tài)∣k?對(duì)應(yīng)的階段就會(huì)乘以-1,因此輸出狀態(tài)∣ψmid?可以表達(dá)如下: 因此,酉預(yù)言變換 Uf 基本上具有對(duì)向量 ∣c? 進(jìn)行反射的效果,如圖 3-6(b) 所示。反射具有否定獲勝狀態(tài)∣k?振幅的效果。 5. 最后,我們將向量 |ψmid? 反映在向量 |ψeq ? 上,其中 |ψeq? 是 n 個(gè)量子位的相等疊加狀態(tài),即 。沿向量 |ψeq? 的反射由以下公式給出:變換。在 |c? 和 |k? 的二維基礎(chǔ)上,我們可以將 |ψeq? 寫(xiě)為。這使得酉變換 U eqψ 如下: 將酉變換 Uψeq 應(yīng)用于 |ψmid?,即 ∣c? 和 ∣k? 的二維基礎(chǔ)中的 [cosθ ? sinθ]T,我們得到 ∣ψo(hù)ut?,如下所示: 因此,通過(guò)連續(xù)的酉變換 Uf 和 Uψeq ,我們已經(jīng)從狀態(tài) |ψin? = sinθ|k? + cosθ ∣ c? 變?yōu)?|ψo(hù)ut? = sin 3θ|k? + cos 3θ|c?。由于sin在第一象限是單調(diào)遞增的,cos是單調(diào)遞減的,所以不難看出sin項(xiàng)給出的|k?的幅度已經(jīng)從sinθ增加到sin3θ,而其余狀態(tài)的幅度由∣c給出? 從 cosθ 減小到 cos3θ。 6. 連續(xù)迭代地應(yīng)用酉變換 Uf 和 U eqψ ,使我們能夠通過(guò)向獲勝者狀態(tài) ∣k? 放大幅度來(lái)收斂到該狀態(tài)。我們可以將這兩個(gè)變換組合為 UUeq f ψ 并將其稱為 Grover 變換 G。因此,如果我們應(yīng)用 Grover 變換進(jìn)行 m 次迭代,則最終輸出狀態(tài)將非常接近∣k?。 當(dāng)我們使用屬于具有四個(gè)項(xiàng)目(即 N = 4)的預(yù)言機(jī)的雙輸入量子位時(shí),我們有以下結(jié)果: 因此,獲勝項(xiàng)目的初始幅度為 1/2,相應(yīng)的概率為 1/4。由于 sinr=1/2 ,這意味著 θ = 30°。經(jīng)過(guò)酉變換 Uf 和 Ueq 后,獲勝項(xiàng)目的新振幅為 sin3θ = sin (3 × 30°) = sin 90° = 1。這意味著起始狀態(tài) |ψin ? 已轉(zhuǎn)換為獲勝項(xiàng)目狀態(tài)∣k? 只需一次迭代。 7. 預(yù)言機(jī)提供的 Uf 變換與 Deutsch-Jozsa 和 Bernstein-Vajirani 算法中的相同。 8. 我們需要一種方法來(lái)根據(jù)量子算子提出酉變換 Uψeq 。就Hadamard門而言,Uψeq 可以寫(xiě)成如下: 現(xiàn)在 H?n|0??n 什么都不是,而是 n 個(gè)量子位的相等疊加狀態(tài),因此其中 N = 2n。此外,由于 Hadamard 變換 H 是冪等的,我們有 H2 = I。使用此信息,我們可以重寫(xiě)公式 3-57,如下所示: 2|ψeq??ψeq | ? I 正是關(guān)于向量 ?ψeq | 的反射變換。 現(xiàn)在我們已經(jīng)證明了 H?n(2| 0??n ?0|?n ? I)H?n 確實(shí)是關(guān)于 |ψeq? 反射的酉變換,剩下的就是找到一種方法來(lái)實(shí)現(xiàn)使用標(biāo)準(zhǔn)門進(jìn)行變換 (2| 0??n ?0|?n ? I)。 9. 為了了解如何實(shí)現(xiàn) (2| 0??n ?0|?n ? I),讓我們看看這個(gè)變換對(duì)基本狀態(tài) ∣x? 有何作用。 因此,當(dāng)基礎(chǔ)狀態(tài)不是 |0??n 時(shí),變換會(huì)翻轉(zhuǎn)相位。 這種條件相翻轉(zhuǎn)算子可以通過(guò)使用 CNOT、X 和 H 門的組合來(lái)實(shí)現(xiàn),正如我們將在兩個(gè)量子位的 Grover 算法實(shí)現(xiàn)過(guò)程中看到的那樣。 10. 請(qǐng)注意,僅在 Grover 變換的第一次迭代中,Grover 變換 |ψin ? 的輸入狀態(tài)才等于 |ψeq?。您不應(yīng)該假設(shè)在每次迭代中都會(huì)出現(xiàn)這種情況,因?yàn)閺牡诙蔚_(kāi)始,Grover 迭代的 ∣ψin ? 狀態(tài)會(huì)有所不同。
現(xiàn)在我們已經(jīng)詳細(xì)討論了 Grover 算法的所有不同方面,我們可以將 Grover 算法的高級(jí)流程圖放在一起,如圖 3-7 所示。
如前所述,我們使用數(shù)據(jù)庫(kù)大小 4 來(lái)實(shí)現(xiàn) Grover 算法。此外,我們構(gòu)建 oracle Uf 來(lái)搜索元素 01 以供說(shuō)明。對(duì)于預(yù)言機(jī)的廣義實(shí)現(xiàn),我們反轉(zhuǎn)獲勝者元素位為零所對(duì)應(yīng)的輸入量子位的狀態(tài)。這確保獲勝者計(jì)算基礎(chǔ)狀態(tài)轉(zhuǎn)換為 |1??n 給出的所有 1 狀態(tài),其中 n 是輸入量子位的數(shù)量。在下一步中,我們基于所有輸入量子位作為控制量子位,對(duì)目標(biāo)量子位應(yīng)用條件 NOT 變換。由于獲勝者計(jì)算基礎(chǔ)狀態(tài)為 |1??n ,因此目標(biāo)量子位上的條件 NOT 變換只會(huì)為獲勝者狀態(tài)設(shè)置 f(x) = 1。由于相位反沖,為獲勝者計(jì)算狀態(tài)設(shè)置 f(x) = 1 將在其幅度中引入所需的 -1 翻轉(zhuǎn)因子。條件 NOT 變換是通過(guò)使用 Toffoli 門來(lái)實(shí)現(xiàn)的。一旦實(shí)現(xiàn)所需的翻轉(zhuǎn),我們需要撤消條件 NOT 運(yùn)算,以便獲勝者計(jì)算基礎(chǔ)狀態(tài)從 |1??n 恢復(fù)到其原始值。
該算法的另一個(gè)重要部分是構(gòu)建反射算子 U eqψ ,它將反映在關(guān)于相等疊加狀態(tài) ∣ψeq? 的預(yù)言變換 Uf 后獲得的狀態(tài) ∣ψmid? 。我們可以按照?qǐng)D 3-8 中 Grover 算法電路圖所示的方式實(shí)現(xiàn)這一點(diǎn),數(shù)據(jù)庫(kù)大小為 4。預(yù)言 Uf 和彎曲算子 U eqψ 形成了 Grover 迭代器。通過(guò) Grover 迭代器的幾輪應(yīng)用,人們應(yīng)該能夠以高概率測(cè)量獲勝者狀態(tài)。對(duì)于由使用兩個(gè)量子位的計(jì)算基礎(chǔ)狀態(tài)索引的四個(gè)項(xiàng)目組成的數(shù)據(jù)庫(kù),我們?cè)谝粋€(gè) Grover 迭代器中收斂到獲勝者狀態(tài)。
建議讀者采用包括∣00?在內(nèi)的不同基態(tài),并驗(yàn)證條件相位翻轉(zhuǎn)算子是否按預(yù)期工作。 Grover 算法的一次迭代足以收斂到獲勝者狀態(tài) 01,正如我們之前在圖 3-8 中看到的那樣。具體實(shí)現(xiàn)請(qǐng)參見(jiàn)清單3-12。
清單 3-12。格羅弗算法
import cirq import numpy as np def oracle(input_qubits, target_qubit, circuit, secret_element='01'): print(f"Element to be searched: {secret_element}")
# Flip the qubits corresponding to the bits containing 0 for i, bit in enumerate(secret_element): if int(bit) == 0: circuit.append(cirq.X(input_qubits[i])) # Do a Conditional NOT using all input qubits as control # qubits circuit.append(cirq.TOFFOLI(*input_qubits, target_qubit)) # Revert the input qubits to the state prior to Flipping for i, bit in enumerate(secret_element): if int(bit) == 0: circuit.append(cirq.X(input_qubits[i])) return circuit def grovers_algorithm(num_qubits=2, copies=1000): # Define input and Target Qubit input_qubits = [cirq.LineQubit(i) for i in range(num_qubits)] target_qubit = cirq.LineQubit(num_qubits) # Define Quantum Circuit circuit = cirq.Circuit() # Create equal Superposition State circuit.append([cirq.H(input_qubits[i]) for i in range(num_qubits)]) # Take target qubit to minus state |-> circuit.append([cirq.X(target_qubit) ,cirq.H(target_qubit)]) # Pass the qubit through the Oracle circuit = oracle(input_qubits, target_qubit, circuit) # Construct Grover operator. circuit.append(cirq.H.on_each(*input_qubits)) circuit.append(cirq.X.on_each(*input_qubits)) circuit.append(cirq.H.on(input_qubits[1])) circuit.append(cirq.CNOT(input_qubits[0] ,input_qubits[1]))
circuit.append(cirq.H.on(input_qubits[1])) circuit.append(cirq.X.on_each(*input_qubits)) circuit.append(cirq.H.on_each(*input_qubits)) # Measure the result. circuit.append(cirq.measure(*input_qubits, key='Z')) print("Grover's algorithm follows") print(circuit) sim = cirq.Simulator() result = sim.run(circuit, repetitions=copies) out = result.histogram(key='Z') out_result = {} for k in out.keys(): new_key = "{0:b}".format(k) if len(new_key) < num_qubits: new_key = (num_qubits - len(new_key))*'0' + new_key out_result[new_key] = out[k] print(out_result) if __name__ =='__main__': grovers_algorithm(2)
總結(jié)
至此,我們進(jìn)入了第 3 章的結(jié)尾。在本章中,我們熟悉了 Cirq 中的量子計(jì)算編程范式,并在一定程度上熟悉了 Qiskit 中的量子計(jì)算編程范式。在本章中,我們研究了各種量子計(jì)算算法,例如 Deutsch-Jozsa 算法、Bernstein-Vajirani 算法、貝爾不等式、Grover 算法和 Simon 算法。通過(guò)利用疊加、糾纏、干涉以及與量子力學(xué)相關(guān)的其他微妙之處的量子力學(xué)特性,所有這些量子算法在計(jì)算上比經(jīng)典算法更高效。建議讀者徹底了解不同的算法及其基礎(chǔ)數(shù)學(xué),以便更好地理解計(jì)算的量子范式。
在下一章中,我們將研究基于量子傅立葉變換的算法,這些算法構(gòu)成了量子計(jì)算和量子機(jī)器學(xué)習(xí)范式中一組重要算法的支柱。期待您的參與!
量子傅立葉變換及相關(guān)算法
在本章中,我們將研究量子傅里葉變換及其在不同量子算法中的應(yīng)用。對(duì)于經(jīng)典計(jì)算機(jī)來(lái)說(shuō),將整數(shù)因式分解為素?cái)?shù)或求周期等問(wèn)題是計(jì)算上難以解決的問(wèn)題,因?yàn)樯婕暗倪\(yùn)算數(shù)量呈指數(shù)級(jí)增長(zhǎng)。使用很大程度上基于量子傅立葉變換的量子相位估計(jì)算法可以有效地解決整數(shù)因式分解和周期查找。另外,由于量子相位估計(jì)的目的是找到與酉算子的特征向量相對(duì)應(yīng)的特征值,因此它是優(yōu)化中重要算法的支柱,例如 HHL 算法(以 Hassim、Harrow 和 Lloyd 命名),用作矩陣求逆量子計(jì)算中的例行公事。我們首先修改傅里葉變換及其離散對(duì)應(yīng)物離散傅里葉變換的概念,然后繼續(xù)討論令人興奮的量子傅里葉變換和量子相位估計(jì)算法領(lǐng)域。接下來(lái)我們討論和實(shí)現(xiàn)一些與量子傅里葉變換相關(guān)的算法,例如分解數(shù)字和周期查找。在本章的最后,我們簡(jiǎn)要介紹了群論的基礎(chǔ)知識(shí),試圖解釋隱藏子群?jiǎn)栴}以及它與幾種基于傅里葉變換的算法的關(guān)系。
傅立葉級(jí)數(shù)
實(shí)數(shù)變量的周期函數(shù)可以展開(kāi)為正弦和余弦形式的傅立葉級(jí)數(shù),或者一般而言復(fù)指數(shù)函數(shù)的形式。我們可以將這樣一個(gè)在長(zhǎng)度為 L 的周期后重復(fù)自身的周期函數(shù) f(x) 用傅立葉級(jí)數(shù)展開(kāi)形式表示如下:
任何函數(shù) f(x) 都可以被視為其域中不同 x 值的函數(shù)值向量。如果 x 是實(shí)數(shù),則在任何給定區(qū)間內(nèi) x 的值有無(wú)數(shù)個(gè),并且該函數(shù)可以被視為無(wú)限維向量。式4-1中代入不同k值得到的指數(shù)函數(shù)充當(dāng)基函數(shù),就像矢量基一樣。對(duì)于域區(qū)間 [a, b] 上的任意兩個(gè)函數(shù) f 和 g,該函數(shù)空間中的點(diǎn)積(其中 L = b ? a)由以下給出:
其中 f(x)* 表示 f(x) 的復(fù)共軛函數(shù)。讓我們計(jì)算對(duì)應(yīng)于 k = k1 和 k = k2 值的兩個(gè)復(fù)指數(shù)函數(shù) gk1 和 gk2 的點(diǎn)積。
由于 k1 、 k2 是實(shí)數(shù)離散值,因此對(duì)于 k1 和 k2 的所有可能值,k2 ? k1 = t 始終是整數(shù)。這里強(qiáng)調(diào)了兩種可能性。 情況 1:當(dāng) k2 ≠ k1 時(shí),k2 ? k1 是非零整數(shù)。對(duì)于 k2 ? k1 的任何非零整數(shù)值,。這使得上式 4-3 中的點(diǎn)積表達(dá)式為零。 情況 2:當(dāng) k2 = k1 時(shí),k2 ? k1 = 0。我們不能直接代入公式 4-3 中的 k2 ? k1 = 0,因?yàn)橛?0 代入分母 k2 ? k1 會(huì)使表達(dá)式不確定。我們可以評(píng)估的是? 的極限,因?yàn)?k1 ? k2 → 0。
我們可以從公式 4-4 和公式 4-6 推斷,復(fù)指數(shù)函數(shù) 構(gòu)成所有具有基本周期長(zhǎng)度 L 的周期函數(shù)的正交基。另外,我們從方程 4-6 中注意到,由 給出的 gk 范數(shù)的平方是 L。我們可以通過(guò)其范數(shù) 對(duì) gk(x) 進(jìn)行歸一化,以便給出指數(shù)基函數(shù)由具有單位范數(shù),因此形成正交基。
k 項(xiàng)可以解釋為某種形式的頻率。不同的 k 值會(huì)導(dǎo)致具有多個(gè)頻率的周期函數(shù)中的不同諧波。
對(duì)應(yīng)于不同頻率 k 的每個(gè)諧波的系數(shù)可以計(jì)算為 f(x) 與單位基向量 hk(x) 的點(diǎn)積,如下所示:
傅里葉變換
傅里葉變換是傅里葉級(jí)數(shù)的自然擴(kuò)展,我們嘗試用復(fù)指數(shù)函數(shù)來(lái)表示非周期函數(shù)。您可以將非周期函數(shù)視為周期長(zhǎng)度 L → ∞ 的函數(shù),因此由 a 和 b 表示的一個(gè)周期 L 的下限和上限分別趨向于 ?∞ 和 +∞。類似地,非周期函數(shù)中的諧波不再是離散的,而是占據(jù)連續(xù)的頻率。非周期函數(shù)的傅里葉變換表示可以寫(xiě)成傅里葉級(jí)數(shù)的極限情況,如下所示:
可以將? 代入得到傅里葉變換表示如下:
為了在不同的變換中用 k 一致地引用頻率變量,讓我們?cè)俅螌⒆兞?m 更改為 k 并將非周期函數(shù) f(x) 的傅里葉變換表示如下:
諧波的系數(shù)函數(shù)現(xiàn)在處于連續(xù)域,它與 f(x) 的關(guān)系如下:
一般而言,系數(shù)稱為函數(shù) f(x) 的頻率響應(yīng)。從 f(x) 到其頻率響應(yīng)的變換稱為傅里葉變換 ,表示如下:
類似地,可以應(yīng)用傅里葉逆變換從函數(shù)的頻率響應(yīng)到函數(shù)本身,如下所示。
需要注意的一件事是,周期函數(shù)的傅里葉變換將成為其傅里葉級(jí)數(shù)表示。
離散傅里葉變換
我們之前定義的傅里葉變換僅適用于連續(xù)函數(shù)。如果我們有一個(gè)針對(duì)離散輸入變量的函數(shù) ,我們可以使用離散傅立葉變換。任何函數(shù)都可以用其離散傅里葉變換 (DFT) 展開(kāi)表示如下:
離散傅里葉變換的頻率響應(yīng)函數(shù)如下所示:
克羅內(nèi)克德?tīng)査瘮?shù)
克羅內(nèi)克增量(見(jiàn)圖 4-1)是一個(gè)僅當(dāng)離散變量 n 的值 m 時(shí)才等于 1 的函數(shù)。對(duì)于 n 的所有其他值,該函數(shù)的值為 0。
克羅內(nèi)克德?tīng)査瘮?shù)可以被認(rèn)為是 N 維向量,僅在 n 的一個(gè)離散值時(shí)才假設(shè)值為 1。當(dāng) m ≠ 0時(shí),兩個(gè)克羅內(nèi)克 delta 函數(shù) 和的點(diǎn)積為 0,而克羅內(nèi)克 delta 的范數(shù),即與其自身的點(diǎn)積為 1。因此,克羅內(nèi)克 delta 函數(shù)可用于定義正交在非頻域中表示離散函數(shù)的基礎(chǔ)。例如,離散函數(shù)可以表示為其代表性 Kronecker delta 函數(shù)的線性和,如下所示:
現(xiàn)在,如果我們想檢索任意 n = j 處的函數(shù)值,只需= 1,因此我們就可以得到的函數(shù)值。
事實(shí)上,我們可以將克羅內(nèi)克德?tīng)査瘮?shù)寫(xiě)為單位向量 |j?。這將公式 4-16 中離散函數(shù)的表示簡(jiǎn)化為以下形式:
克羅內(nèi)克增量的這種矢量表示將在量子傅里葉變換公式中派上用場(chǎng)。
使用 Kronecker Delta 函數(shù)激發(fā)量子傅立葉變換
克羅內(nèi)克 delta 函數(shù)的頻率響應(yīng)可使用公式 4-15 計(jì)算如下:
根據(jù)頻率響應(yīng),我們可以使用離散傅立葉變換展開(kāi)式(參見(jiàn)公式 4-14)將寫(xiě)成如下: 與傅里葉級(jí)數(shù)一樣,即使在不同 k 值的離散傅里葉變換的情況下,復(fù)指數(shù)函數(shù)也會(huì)形成標(biāo)準(zhǔn)正交基。我們可以將這些復(fù)指數(shù)函數(shù)表示為單位范數(shù)的 N 維基向量,并使用狄拉克符號(hào)將它們表示為 |k?。換句話說(shuō),我們有這個(gè): 復(fù)指數(shù)函數(shù)的這種向量表示允許我們將公式 4-19 中的函數(shù)表示簡(jiǎn)化如下: 或者,我們可以將表示為克羅內(nèi)克 delta 基中的 |m?,因此方程 4-21 可以寫(xiě)成全基方程,如下所示: 量子傅立葉變換被視為兩組基函數(shù)之間的變換:空間或時(shí)域基函數(shù)由 Kronecker delta= |m? 給出,頻率基函數(shù)由指數(shù)給出。 在這方面,方程 4-22 是一個(gè)重要的表示,因?yàn)榱孔痈盗⑷~變換是酉變換 U,它采用 |m? 給出的任何廣義空間或時(shí)域基函數(shù),并用頻域基 |k? 表示它,所示這里: 由于傅里葉變換酉算子 U 是線性的,任何離散函數(shù)的傅里葉變換都可以計(jì)算為傅里葉級(jí)數(shù)變換在其基函數(shù)上的線性和,如下所示: 替換 U| j? 根據(jù)4-24中的公式4-23,我們有: 現(xiàn)在是頻率 k 的傅里葉頻率響應(yīng),我們可以用表示。替換為,我們看到公式 4-25 可以寫(xiě)成如下: 通過(guò)寫(xiě)。在克羅內(nèi)克 delta 的基礎(chǔ)上,我們可以將公式 4-26 重寫(xiě)如下: 公式 4-27 為我們提供了一種通用方法,通過(guò)了解譜/時(shí)域和頻域之間的基函數(shù)關(guān)系,對(duì)任何給定的離散函數(shù)執(zhí)行傅立葉變換。需要注意的一件事是,酉變換 U 只是改變了進(jìn)行傅里葉變換的函數(shù)的表示基礎(chǔ)。正如我們將在本章的其余部分中看到的那樣,我們需要理解并執(zhí)行量子傅里葉變換,就需要這種傅里葉變換方法。
量子傅里葉變換
在本節(jié)中,我們將研究量子傅里葉變換電路,以了解傅里葉變換在量子計(jì)算領(lǐng)域中到底是如何工作的。使用 n 個(gè)量子位,我們可以定義 |x1 x2…xn? = ∣x? 形式的計(jì)算基礎(chǔ),其中 x 是二進(jìn)制字符串 x1x2…xn 的十進(jìn)制展開(kāi),由以下給出:
使用 n 個(gè)量子位,我們可以獲得個(gè)計(jì)算基礎(chǔ)狀態(tài)。 明確地說(shuō),每個(gè)量子位的計(jì)算基礎(chǔ)狀態(tài)由 xi ∈ {0, 1} 表示。 您需要了解圖 4-2 中的傅立葉變換電路對(duì)任何廣義計(jì)算基礎(chǔ)狀態(tài) |x? = |x1x2…xn? 的變換。計(jì)算基礎(chǔ)狀態(tài)|x?只不過(guò)是克羅內(nèi)克δ函數(shù)。 量子電路中使用的門是哈達(dá)瑪門H和旋轉(zhuǎn)門,如下所示: 我們從第一個(gè)量子位開(kāi)始,看看電路中各個(gè)門對(duì)其狀態(tài)的轉(zhuǎn)換。 Hadamard 門 H 將量子位的狀態(tài)從 |? 更改為。 我們可以將 -1 的值替換為或更方便地替換為。這讓我們可以重寫(xiě)量子位的狀態(tài),如下所示:
?現(xiàn)在就像我們將二進(jìn)制字符串寫(xiě)成整數(shù)形式一樣,類似地我們可以采用符號(hào)來(lái)表示二進(jìn)制分?jǐn)?shù),如下所示: 使用這個(gè)符號(hào),我們可以寫(xiě)成作為。因此,哈達(dá)瑪乘積(在公式 4-31 中)之后的量子位 1 的狀態(tài)可以重寫(xiě)如下:
?接下來(lái),以狀態(tài) |? 的第 m 個(gè)量子位的值為條件,連續(xù)應(yīng)用旋轉(zhuǎn)矩陣。以狀態(tài) |? 中第 m 個(gè)量子位的值為條件的變換可以表示如下: 如果量子位 m 處于狀態(tài) |0?,則指數(shù)項(xiàng)變?yōu)?,因此條件變換變?yōu)楹愕茸儞Q。使用公式 4-32,第二個(gè)量子位進(jìn)行條件變換后第一個(gè)量子位的狀態(tài)可以寫(xiě)成如下: 現(xiàn)在可以寫(xiě)成。因此,簡(jiǎn)化為,并且以第二個(gè)量子位為條件的旋轉(zhuǎn) R2 后第一個(gè)量子位的狀態(tài)變?yōu)槿缦拢?/p>
如此下去,經(jīng)過(guò)所有條件旋轉(zhuǎn)后,量子位 1 的狀態(tài)可以表示為:
?現(xiàn)在我們將注意力轉(zhuǎn)移到第二個(gè)量子位的轉(zhuǎn)換上。如果觀察圖 4-2,我們會(huì)發(fā)現(xiàn)量子位 2 重復(fù)了與量子位 1 相同的變換模式。因此,通過(guò)歸納,我們可以將量子位 2 上的變換寫(xiě)成如下:
?一般來(lái)說(shuō),對(duì)于任何量子位m,變換可以寫(xiě)成如下:
結(jié)合所有量子位上的變換,我們可以在基向量 |x1x2…xn? 上寫(xiě)出整體變換,如下所示:
?接下來(lái),我們使用 SWAP 運(yùn)算符交換量子位的狀態(tài),以便索引 m 表示的任何量子位與索引 n ? m 的量子位交換其狀態(tài)(見(jiàn)圖 4-3)。 SWAP操作后,量子位的整體狀態(tài)如下:
我們之前看到(公式 4-22),任何基向量 = |x? 上的傅里葉變換允許我們以復(fù)指數(shù)頻率基表示它,如下所示:?
通過(guò)代入 和,我們有以下結(jié)果:
現(xiàn)在,因此。將其代入公式 4-42,我們得到以下結(jié)果:
?我們可以將狀態(tài) |k? = |? 表示為的狀態(tài)張量積,因此我們有: 公式 4-44 中的求和可以在每個(gè)量子位基本狀態(tài)上進(jìn)行計(jì)算,而指數(shù)項(xiàng)的乘積可以附加到每個(gè)量子位。這將公式 4-44 簡(jiǎn)化為:
將每個(gè)量子位的基本狀態(tài)的求和展開(kāi)并寫(xiě)出張量積的每一項(xiàng),我們得到:
讓我們通過(guò)在公式 4-47 中代入不同的 p 值來(lái)計(jì)算。
除最后一項(xiàng)外,所有項(xiàng)均大于或等于 1。將公式 4-48 中的代入表達(dá)式中。 我們得到以下結(jié)果:?
由于除了最后一項(xiàng)之外的所有項(xiàng)都大于或等于 1,因此它們將貢獻(xiàn)因子 1,因?yàn)槲覀冎缹?duì)于 m 的任何整數(shù)值,都是 1。這簡(jiǎn)化了以下內(nèi)容:
類似地,當(dāng) p = 2 時(shí),我們將得到,這意味著除了最后兩項(xiàng)之外,我們將獲得所有整數(shù)值。因此,我們有這個(gè):?
利用公式 4-49 和公式 4-50 的觀察結(jié)果,我們可以將公式 4-46 簡(jiǎn)化如下:?因此,我們看到從公式 4-51 中的定義導(dǎo)出的復(fù)指數(shù)或頻率基礎(chǔ)上的 |x1x2…xn? 的傅里葉變換展開(kāi)與通過(guò)量子傅里葉變換電路實(shí)現(xiàn)的傅里葉變換展開(kāi)完全匹配(參見(jiàn)公式 4-39) 。
需要注意的一件事是,當(dāng)我們談?wù)撘话愕母道锶~變換(在量子計(jì)算之外)時(shí),我們談?wù)摰氖敲總€(gè)復(fù)指數(shù)基的復(fù)系數(shù)或權(quán)重,它們由 |k? 表示。在量子傅立葉變換電路中,這些系數(shù)與其疊加的復(fù)基態(tài) |k? 相關(guān)聯(lián)。疊加是有利的,因?yàn)樗鼘⒏盗⑷~系數(shù)及其基以和的形式組合在一起,這就是復(fù)指數(shù)基 |k? 中的輸入函數(shù)信號(hào)表示。因此,基于 |x1x2…xn? 的量子變換實(shí)際上是 |x1 x2 …xn ? 在復(fù)指數(shù)或頻率基礎(chǔ)上的傅里葉展開(kāi)。函數(shù)的傅里葉變換和函數(shù)在頻率基礎(chǔ)上的傅里葉變換展開(kāi)有時(shí)可以互換使用。需要記住的重要一點(diǎn)是,|x1 x2…xn? 上的傅里葉變換允許我們將 |x1 x2…xn? 本身寫(xiě)為復(fù)指數(shù)或頻率基礎(chǔ)上的展開(kāi)式。
證明量子傅里葉電路正在做與離散傅里葉變換相同的變換是一個(gè)漫長(zhǎng)而嚴(yán)格的工作。建議讀者詳細(xì)閱讀這一推論,因?yàn)樗鼧?gòu)成了與量子傅里葉變換相關(guān)的幾種算法的支柱。
QFT在Cirq中的實(shí)現(xiàn)
柚子快報(bào)激活碼778899分享:量子計(jì)算 量子機(jī)器學(xué)習(xí)
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。