柚子快報(bào)激活碼778899分享:量子計(jì)算 量子機(jī)器學(xué)習(xí)
柚子快報(bào)激活碼778899分享:量子計(jì)算 量子機(jī)器學(xué)習(xí)
量子計(jì)算概論
量子位元的布洛赫球表示
布洛赫球表面上的任何一點(diǎn)都代表一個量子位態(tài)。因此,量子位的任何廣義狀態(tài)|ψ?可由三個參數(shù)γ、θ和φ表示,如下所示:
我們已經(jīng)看到的量子位的狀態(tài)可以表示為|ψ?= α|0?+ β|1?,其中α和β為復(fù)數(shù)。我們可以將任意復(fù)數(shù)α在笛卡爾坐標(biāo)系中表示為α = a + ib 或者,我們可以選擇將極坐標(biāo)中的任何復(fù)數(shù) α 表示為其中。
如果我們?nèi)『停敲次覀冇幸韵陆Y(jié)果:?
如果忽略全局相位因子,狀態(tài)的Bloch球表示可表示為:
布洛赫球面上有無數(shù)個點(diǎn),每個點(diǎn)對應(yīng)一個量子位態(tài)。然而,在測量量子位時,如果測量在標(biāo)準(zhǔn)0?1基礎(chǔ)上完成,我們僅觀察到兩種狀態(tài)之一|0?或|1?。隨后對量子位的測量繼續(xù)展示被測狀態(tài)。因此,如果我們測量量子位狀態(tài)為∣0?,連續(xù)的后測量將繼續(xù)揭示狀態(tài)∣0?。所以,測量改變了量子位的狀態(tài)。
Stern-Gerlach實(shí)驗(yàn)
斯特恩-格拉赫實(shí)驗(yàn)是最早用來理解量子位特性的實(shí)驗(yàn)之一。這個實(shí)驗(yàn)是斯特恩在1921年構(gòu)想出來的,1922年他和格拉赫合作進(jìn)行了這個實(shí)驗(yàn)。在實(shí)驗(yàn)裝置中,向各個方向發(fā)射的熱銀原子通過一個準(zhǔn)直器,以使銀原子束在水平方向上排列。下一階段,銀原子束通過磁鐵的兩個磁極。
磁鐵有一個特殊的設(shè)置,南極是平的,北極有鋒利的邊緣。這使得從準(zhǔn)直器出來的銀原子由于該區(qū)域的不均勻磁場而發(fā)生偏轉(zhuǎn)。隨后,偏轉(zhuǎn)的銀原子被收集到探測器屏幕上。磁鐵的設(shè)計(jì)是這樣的,沿著z方向的磁場,因此一般來說,非均勻磁場B檢測到原子的方式是,它們應(yīng)該撞擊到探測器中兩個極端之間的任何位置,但它們撞擊的是兩個不同的位置,A和B。 銀原子在穿過磁場時,受到一個力F,由勢能U的負(fù)梯度給出,如圖所示: 勢能是銀原子的磁矩μ與斯特恩格拉赫裝置的不均勻磁場B的點(diǎn)積的負(fù)數(shù)。因此,勢能U可以寫成: 將方程代入,我們將銀原子所受的力的表達(dá)式簡化為:因此,我們看到當(dāng)原子沿z方向的磁矩為負(fù)時,施加在原子上的力為正。正的力將把原子推到偏轉(zhuǎn)屏上O點(diǎn)以上,而負(fù)的力將把原子推到偏轉(zhuǎn)屏上O點(diǎn)以下的任何一點(diǎn)。同樣,經(jīng)典的z方向上的磁矩μz可以用原子的磁矩表示為: 參數(shù)θ是μ與z軸的夾角。根據(jù)上面的公式,取+|μ|和?|μ|之間的連續(xù)值。因此,所有的原子都應(yīng)該分布在這兩個值之間。然而,正如前面所討論的,這并沒有發(fā)生,原子出現(xiàn)在兩個離散的點(diǎn)上。讓我們從一個角度來解釋這個現(xiàn)象,以及它與角動量量子化的關(guān)系。 一個銀原子有47個電子,46個電子的總角動量是零。原子的總角動量由軌道角動量和自旋角動量組成。此外,第47個電子的軌道角動量為零。因此,與銀原子相關(guān)的唯一角動量是來自第47個電子的自旋角動量。我們應(yīng)該能在偏轉(zhuǎn)屏上得到第47個電子的自旋角動量的信號。原子核對原子角動量的貢獻(xiàn)不大,因此可以忽略。所以,銀原子的磁矩,實(shí)際上是由于第47個電子的自旋角動量。所有原子撞擊的兩個離散區(qū)域應(yīng)該對應(yīng)于固有自旋角動量,它可以取兩個離散值,對應(yīng)于O以上的離散區(qū)域,以及對應(yīng)于O以下的離散區(qū)域。通常,對應(yīng)的狀態(tài)被表示為∣0?狀態(tài)。被表示為∣1?狀態(tài)。因此,Stern-Gerlach實(shí)驗(yàn)確立了角動量是量子化的事實(shí)。Stern-Gerlach上下狀態(tài)完美地匹配Bloch球表示,因此|+z?=∣0?,且|?z?=∣1?。事實(shí)上,原子的自旋角動量和軌道角動量是在這個實(shí)驗(yàn)中首先想到的。在這個Stern Gerlach裝置中,如果原子只有軌道角動量,那么由于銀原子的軌道角動量為零,人們可以預(yù)期原子束在磁場的影響下不會偏轉(zhuǎn)。這個事實(shí)讓物理學(xué)家相信除了軌道角動量之外,還有自旋角動量的存在。 在下圖中A的Stern-Gerlach實(shí)驗(yàn)的示意圖中,模型已大大簡化,其中來自烘爐的輸入束流輸出兩束原子∣+ Z?和∣?Z?。 在上圖B中,我們將兩個Stern-Gerlach裝置串聯(lián)在一起。第一裝置使原子沿z方向偏轉(zhuǎn),第二裝置使原子沿x方向偏轉(zhuǎn)。對應(yīng)于∣+ Z?狀態(tài)的原子僅通過沿著x軸的第二個設(shè)備被發(fā)送。與預(yù)期相反,我們看到在x方向有兩束原子,我們可以方便地稱為狀態(tài)∣+ x?和∣?x?。只是要清楚的是,盡管x、y和z軸互相正交,狀態(tài)向量∣+ z?并不垂直于∣?x?或∣+ x?。
多量子
用兩個經(jīng)典比特,我們可以有四種狀態(tài):00 01 10和11。一個有兩個量子位A和B的量子系統(tǒng)可以是4種狀態(tài)的疊加,這些狀態(tài)對應(yīng)于計(jì)算基態(tài)00、01、10和11。我們可以將雙量子位系統(tǒng)的狀態(tài)表示為: 在形式∣ij?的計(jì)算基狀態(tài)中,i表示第一個量子位的基狀態(tài),j表示第二個量子位的基狀態(tài)。因此,概率振幅aij表示聯(lián)合狀態(tài)∣ij?。這些概率振幅屬于復(fù)平面,這些振幅的平方之和應(yīng)該是1。 現(xiàn)在讓我們看看態(tài)∣ψ?AB將發(fā)生什么,如果我們碰巧測量一個量子比特,說量子A,我們觀察態(tài)|0?。由于我們已經(jīng)觀察到量子位A處于|0?態(tài),在|1?態(tài)中與量子位A對應(yīng)的計(jì)算基態(tài)將消失。量子位A和B的新合并狀態(tài)∣ψ’?AB將如下: 當(dāng)然,為了確保新狀態(tài)的概率和為1,我們需要對新狀態(tài)的組成振幅進(jìn)行歸一化。
貝爾態(tài)
最有趣的雙量子位態(tài)之一是如下所示的狀態(tài): 這個態(tài)是態(tài)∣00?和∣11?同等比例的疊加。如果我們觀察量子位A并測量其態(tài)為∣0?,那么雙量子位坍塌為態(tài)∣00?。如果我們現(xiàn)在測量量子位元B的狀態(tài),那么我們只能找到量子位B一個狀態(tài)就是∣0?。類似地,如果我們測量量子位A處于狀態(tài)∣1?,雙量子位狀態(tài)坍塌為∣11?。在這種狀態(tài)下,如果我們對量子位B進(jìn)行測量,我們將發(fā)現(xiàn)它在狀態(tài)∣1?中具有100%的確定性。方程中兩個糾纏量子位元的疊加態(tài)也被稱為貝爾態(tài)。在這個貝爾態(tài)中,我們可以觀察到,兩個量子位的狀態(tài)是完全相關(guān)的,這種量子現(xiàn)象被稱為量子糾纏。想象一下,我們用兩個電子之間的量子糾纏來創(chuàng)造Bell態(tài),然后我們把這兩個電子分開一段距離?,F(xiàn)在,如果我們測量一個電子并觀察它處于狀態(tài)∣0?,那么另一個電子如果被測量也將處于狀態(tài)∣0?,即使它們被很遠(yuǎn)的距離分開。貝爾狀態(tài)引起了包括愛因斯坦在內(nèi)的研究人員的極大興趣。
多量子態(tài)
狄拉克符號
在量子力學(xué)中,量子系統(tǒng)的狀態(tài)存在于復(fù)希爾伯特空間中。希爾伯特空間是一個具有內(nèi)積范數(shù)的向量空間。它也是一個完全的矢量空間,在那里量子態(tài)序列的收斂不會是一個問題。在這里,我們不打算過多地討論完全向量空間的定義。不熟悉完全向量空間的讀者可以把它們想象成量子系統(tǒng)可以獲得的所有可能狀態(tài)的空間。
右矢
根據(jù)Dirac向量符號,與量子狀態(tài)相關(guān)的列向量表示為∣ψ?。向量的這種符號表示稱為Ket表示。
左矢
觀察列向量被轉(zhuǎn)置為行向量,振幅被轉(zhuǎn)換為它們的共軛復(fù)數(shù)。對于一個復(fù)數(shù)(a + i b),它的共軛復(fù)數(shù)由(a - i b)給出。如果一個Ket向量只有實(shí)數(shù)的概率振幅,那么相應(yīng)的Bra向量就是它的轉(zhuǎn)置。
內(nèi)積
矢量的級數(shù)
希爾伯特空間中一個向量的大小也稱為這個向量的范數(shù),它被定義為向量與自身的內(nèi)積的平方根。就Ket和Bra符號而言,向量|ψ?的范數(shù)如下: ci?是ci的復(fù)共軛,向量|ψ?∈的第i個分量。一個量子狀態(tài)|ψ?的內(nèi)積〈ψ|ψ?等于1。振幅的平方屬于狀態(tài)∣ψ?坍塌到狀態(tài)∣i?測量的概率。由于計(jì)算基礎(chǔ)是互斥和窮舉的,因此它們對應(yīng)的概率之和應(yīng)為1,因此由式1-37和1-38可得:
外積
張量積
張量積為我們提供了一種從兩個或多個現(xiàn)有向量空間創(chuàng)建更大向量空間的便捷方法。如果我們有一個向量空間 V ∈,其基為 { |?, ∣?… ∣?} 和另一個向量空間 U ∈,其基為 { |?, ∣?… ∣?} ,然后通過使用張量積,我們可以得到一個更大的向量空間 W ∈,其中 m × n 個基集元素,形式為 ∣? ? ∣?。為了方便起見,我們將基向量∣? ? ∣? 寫為 ∣?。 張量積在量子計(jì)算中很重要,因?yàn)樗鼈冊试S我們從幾個量子比特的單個狀態(tài)中創(chuàng)建量子態(tài)。為了便于說明,我們考慮由 |? = |0? + ∣1? 給出的量子位 A 的狀態(tài),以及由 |? = |0? + ∣1? 給出的量子位 B 的狀態(tài)。它們的組合狀態(tài)可以表示為兩個狀態(tài)的張量積,如下所示: 需要注意的一點(diǎn)是,并非所有的多量子比特狀態(tài)都可以表示為單個量子比特狀態(tài)的張量積。一個經(jīng)典的例子是貝爾態(tài),它不能被分解為單個量子比特態(tài)的張量積。這發(fā)生在量子位處于糾纏態(tài)時。
單量子比特門
在量子計(jì)算中,人們應(yīng)該能夠操縱量子系統(tǒng)的狀態(tài)。就像在經(jīng)典系統(tǒng)中一樣,我們通過不同的門來操縱比特的狀態(tài),如OR,AND,NOT,XOR等。在量子計(jì)算中,我們使用量子門來操縱量子比特的狀態(tài)。讓我們先來看看非門的量子等價物。
量子非門
經(jīng)典的NOT門在現(xiàn)有狀態(tài)為0時將位的狀態(tài)更改為1,反之亦然。量子門做類似的事情,但在量子位計(jì)算基礎(chǔ)狀態(tài)的振幅方面。它將∣0?態(tài)的概率振幅分配給∣1?態(tài),反之亦然。量子NOT門作為算子X工作,如下圖所示: 如果我們在計(jì)算的基礎(chǔ)上把量子位的狀態(tài)表示為矢量,那么我們有:
現(xiàn)在讓我們試著解碼X的矩陣表示形式。從公式可以看出,X將一個向量變換成另一個相同維數(shù)的向量,因此X可以表示為一個方陣。一個方陣將二維向量的分量倒轉(zhuǎn)就是矩陣X,如下所示。 在量子門的變換下,總概率應(yīng)該是守恒的。對于NOT門,我們可以看到概率是守恒的。一般來說,為了保證概率守恒,任何量子門只需要遵守一個性質(zhì)即可:它們應(yīng)該是酉矩陣。 當(dāng)且僅當(dāng)下列關(guān)系式成立時,具有實(shí)數(shù)項(xiàng)的矩陣U稱為酉矩陣: 矩陣是矩陣U的轉(zhuǎn)置,而I是單位矩陣。在量子力學(xué)中,酉算子和狀態(tài)空間分量都可以是復(fù)數(shù)。對于具有復(fù)數(shù)項(xiàng)的酉矩陣 U,,其中是矩陣 U 的復(fù)共軛轉(zhuǎn)置。
任何可逆矩陣 U 乘以它的逆矩陣都會得到單位矩陣,并且矩陣乘法是可交換的。
比較上面兩個方程,我們可以看到任何酉矩陣 U 的逆都是其復(fù)共軛轉(zhuǎn)置。既 矩陣通常用表示,因此對于酉矩陣,一般可以寫出以下形式:
現(xiàn)在讓我們做一些數(shù)學(xué)計(jì)算,看看在量子系統(tǒng)的狀態(tài)下,概率之和是否真的守恒。 當(dāng)應(yīng)用幺正變換U時,讓量子系統(tǒng)的狀態(tài)∣?變?yōu)闋顟B(tài)∣?(參見圖1-6)。 每個計(jì)算基狀態(tài)對應(yīng)的概率總和為1,因此我們可以寫〈|?= 1。對量子態(tài) ∣? 應(yīng)用酉變換 U 后,新狀態(tài)為 |? = U ∣ ?。 ∣ ? 的左矢表示為 ?∣ = ?∣。現(xiàn)在狀態(tài) |? 中每個計(jì)算基礎(chǔ)狀態(tài)的概率之和如下: 由于對于酉矩陣,公式簡化為: 由于兩個向量的點(diǎn)積在幺正變換下是不變的,因此兩個向量之間的距離也保持不變,因?yàn)閮蓚€向量之間的距離只不過是點(diǎn)積的線性和。
Hadamard門
Hadamard 門作用于狀態(tài) |0? 的量子位,并將其帶到的等疊加狀態(tài)。它還將狀態(tài) |1? 轉(zhuǎn)換為狀態(tài) 。哈達(dá)馬門對應(yīng)的酉矩陣如下:
就布洛赫球體表示而言,哈達(dá)馬門將沿 z 軸對齊的狀態(tài) |0? 變?yōu)檠卣?x 軸對齊的狀態(tài) 。 (見圖 1-7。) 需要注意的一件事是,如果我們連續(xù)兩次應(yīng)用阿達(dá)瑪門,量子位元的狀態(tài)保持不變。這是因?yàn)榘⑦_(dá)瑪矩陣的平方等于單位矩陣。
量子Z門
量子Z門使?fàn)顟B(tài)∣0?沒有變化,而它將狀態(tài)∣1?改變?yōu)?|1?。量子Z門的變換表示如下: 因此,給定任意狀態(tài) |ψ? = α|0? + β∣1?,Z 門會發(fā)生變化并將其轉(zhuǎn)換為 α|0? ? β∣1?。量子 Z 門可以用計(jì)算基礎(chǔ)狀態(tài)的外積寫成如下:
多量子比特門
當(dāng)我們想到2位經(jīng)典門時,我們會想到AND,XOR,NAND和NOR門。事實(shí)上,在經(jīng)典計(jì)算范式中,NAND門被稱為通用門,因?yàn)槿魏纹渌簧系拈T都可以通過組合NAND門來構(gòu)建。幫助我們構(gòu)建通用量子門的兩種量子比特門之一是條件非門,或CNOT門,下一節(jié)將介紹。
CNOT門
CNOT門作用在兩個量子位上:量子位A,被稱為控制量子位,量子位B,是目標(biāo)量子位。在應(yīng)用一個CNOT門,控制量子位狀態(tài)保持不變。如果控制量子位處于狀態(tài)∣1?,目標(biāo)量子位狀態(tài)被翻轉(zhuǎn)。 兩個量子位的計(jì)算基礎(chǔ)狀態(tài)是它們對應(yīng)的基礎(chǔ)狀態(tài)的張量積。例如,當(dāng)兩個量子位都處于零狀態(tài)時的雙量子位狀態(tài)由給出。我們簡化符號,將狀態(tài)寫為 ∣00?。表 1-2 顯示了應(yīng)用 CNOT 門時量子位計(jì)算基礎(chǔ)狀態(tài)如何變化。 學(xué)習(xí)量子門如何轉(zhuǎn)換計(jì)算基態(tài)的想法是有用的,因?yàn)榱孔娱T是線性算子。這使得我們可以線性累加對應(yīng)于計(jì)算基態(tài)的轉(zhuǎn)換態(tài),以理解疊加態(tài)上量子門的轉(zhuǎn)換。因此,對于作用于量子位狀態(tài)α|0?+ β|1?的幺正算子U(適用于任何線性算子),我們可以這樣寫: 現(xiàn)在,如果我們仔細(xì)看表1-2,我們可以看到,應(yīng)用CNOT門后的目標(biāo)量子位的狀態(tài)是什么都沒有,但在應(yīng)用CNOT門之前,兩個量子位的狀態(tài)的模2相加。因此,對兩個量子位的CNOT操作可以表示如下(見圖1-8): CNOT門的矩陣表示是4×4方陣。 如果我們只考慮目標(biāo)量子位的輸出,在某種意義上,異或門可以被認(rèn)為是量子CNOT門的經(jīng)典對應(yīng)物。異或門的輸出只不過是它的兩個輸入位A和b的模相加。然而,與CNOT門不同的是,異或門是不可逆的。任何幺正的量子門操作都是可逆的,因此通過應(yīng)用幺正門的逆變換,我們可以恢復(fù)量子系統(tǒng)的原始狀態(tài)。應(yīng)該注意的是,酉變換的逆也是酉變換。 經(jīng)典的異或門是不可逆的,因?yàn)榻o定異或門的輸出,我們無法確定它的兩個輸入。然而,我們可以傳遞其中一個位,比如位A,作為一個額外的輸出,使異或門可逆。(如圖1-9所示) 在幾種多量子位門中,CNOT門的特殊之處在于任何量子門都可以用CNOT門和一個或多個單量子位門來構(gòu)建。換句話說,CNOT和單量子位門形成了一個通用的量子門集合,我們可以用它構(gòu)造任意精度水平的任意給定量子門。
受控U門
另一個值得特別提到的多量子位門是受控u門(見圖1-10)。假設(shè)我們有一個幺正算子U作用于n個量子位的量子系統(tǒng)。我們可以把受控U門想象成一種基于控制量子位的狀態(tài)將酉算子U應(yīng)用到n個目標(biāo)量子位的系統(tǒng)上的門。當(dāng)控制量子位處于狀態(tài)∣1?,幺正算子應(yīng)用于n目標(biāo)量子位的系統(tǒng),而當(dāng)控制量子位處于∣0?狀態(tài),沒有在n目標(biāo)位的系統(tǒng)上應(yīng)用轉(zhuǎn)換。實(shí)際上,CNOT門是受控u門的一種特殊情況,其中幺正算子是單量子位X門。
復(fù)制量子位:不可克隆定理
在經(jīng)典的計(jì)算范式中,復(fù)制一點(diǎn)信息是微不足道的。我們可以有一個經(jīng)典的CNOT門,它把要復(fù)制的輸入位作為控制位,把一個被初始化為零的位作為目標(biāo)位來完成一個位復(fù)制機(jī)制。換句話說,一個經(jīng)典的CNOT門只不過是XOR門,就像我們之前建立的那樣。參見圖1- 11。 現(xiàn)在讓我們看看我們是否可以使用CNOT門復(fù)制一個量子位|ψ?的狀態(tài)。兩個量子位的輸入狀態(tài)可以寫為: 在應(yīng)用CNOT時,雙量子比特系統(tǒng)的新狀態(tài)改變?yōu)棣羭00?+ β∣11?。現(xiàn)在讓我們看看我們是否能夠復(fù)制量子位的狀態(tài)∣ψ?。如果我們成功復(fù)制了量子位,那么兩個量子位的輸出狀態(tài)將是 比較CNOT α|00?+ β∣11?的雙量子比特輸出狀態(tài)和方程1-64,我們看到,CNOT不可能復(fù)制狀態(tài)∣ψ?,除非αβ = 0。條件αβ = 0僅當(dāng)α或β為0時才滿足。條件α = 0適用于狀態(tài)|ψ?=∣1?,而條件β = 0適用于條件|ψ?= |0?。這告訴我們,我們不能復(fù)制量子態(tài),除非它處于計(jì)算的基本態(tài)之一。事實(shí)上,我們可以將一個量子位的觀測推廣到任意數(shù)量的量子位的量子系統(tǒng)。這種量子位元的未知疊加態(tài)不能被復(fù)制的特性被稱為不可克隆定理。 如前所述,如果量子位狀態(tài)處于計(jì)算基狀態(tài)之一,我們可以復(fù)制量子位。假設(shè)量子位處于狀態(tài)|ψ?=∣1?。那么CNOT gate的輸出將為∣11?,這將等于狀態(tài)|ψ?|ψ?=∣11?。
不同基的測量
到目前為止,在討論量子位狀態(tài)的測量時,我們僅研究了規(guī)范計(jì)算基礎(chǔ)狀態(tài)|0?和∣1?。更準(zhǔn)確地說,我們已經(jīng)將量子比特的狀態(tài)表示為|ψ?= α|0?+ β∣1?。當(dāng)我們在計(jì)算基礎(chǔ)上進(jìn)行測量時,要么我們得到一個0,具有概率|α|2,使量子位的測量后狀態(tài)為∣0?,要么我們得到一個1,具有概率|β|2,使量子位的∣1?的測量后狀態(tài)。我們可以在其他正交基狀態(tài)以及例如∣+?和∣??基狀態(tài)表示量子位,其中
或者,我們可以根據(jù)∣+?和∣??狀態(tài)表示狀態(tài)∣0?和∣1?,如下: 現(xiàn)在,如果我們在| +?的基礎(chǔ)上測量量子比特的狀態(tài),或者我們將觀察+狀態(tài),且有概率|α + β|2使測量后狀態(tài)為∣??,或者我們將觀察-狀態(tài),且有概率|α?β|2使測量后狀態(tài)為∣??。一般情況下,我們可以將量子位的狀態(tài)寫在任何線性獨(dú)立的基中表示|?1?,∣?2?,比如|ψ?= α1 |?1?+ α2 |?2?。 在圖1-12中,我們說明了測量量子狀態(tài)∣ψ?的電路表示。在測量時,量子態(tài)會坍縮到用于測量的計(jì)算基態(tài)之一。例如,對于一個量子位狀態(tài),我們可能選擇在|0?,∣1?中測量,因此測量輸出將是0或1狀態(tài)。類似地,如果我們選擇在|+?,∣?1?中測量量子位狀態(tài),輸出狀態(tài)將是+狀態(tài)或-狀態(tài)。
貝爾態(tài)量子門
當(dāng)兩個量子位A和B像貝爾態(tài)一樣相互糾纏時,就不可能分離單個的量子位態(tài)。換句話說,我們不能將貝爾態(tài)表示為各個量子位態(tài)的張量積,如下所示: 如果我們對量子比特A進(jìn)行測量,我們得到一個0,有0.5概率使測量后狀態(tài)為∣00?,或者我們得到一個1,有0.5概率使測量后狀態(tài)為∣11?。在隨后的量子位B的測量中,如果量子位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)。我們可以通過在∣0?狀態(tài)初始化的兩個量子位x和y來創(chuàng)建Bell狀態(tài)。我們通過第一個量子位通過Hadamard gate(見圖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ù)。 為了說明量子隱形傳態(tài),我們將量子態(tài)的發(fā)送方稱為愛麗絲,量子態(tài)的接收方稱為鮑勃。我們將用一個故事來說明量子隱形傳態(tài)。Alice 和 Bob 在童年時期共享貝爾狀態(tài) |?,其中第一個量子位 屬于 Alice,量子位 屬于 Bob。由于工作原因,鮑勃不得不搬到另一個城市?,F(xiàn)在愛麗絲想與鮑勃分享一些信息:第三個量子位 狀態(tài)∣ψ?。 圖1-15所示為量子隱形傳態(tài)電路。需要注意的一件事是,單電路線不是物理線。它們僅僅描述了不同量子位門運(yùn)行所相對的時間的流逝。測量后的雙線用于描述測量量子位狀態(tài)后繼承的經(jīng)典信息。 Alice 和 Bob 使用最初處于狀態(tài) |0? 的量子位 和,通過使用哈達(dá)瑪門的量子電路,然后在時間時應(yīng)用 CNOT 門,達(dá)到貝爾狀態(tài) |?。現(xiàn)在Alice想要將量子位狀態(tài)∣ψ?發(fā)送給Bob。 如果我們觀察任意時刻 t 的三量子位狀態(tài) ∣?,其中,則可以寫成如下: 在時間時,Alice 的量子位 和分別是 CNOT 門的控制量子位和目標(biāo)量子位。 CNOT 門會改變疊加態(tài) ∣? 中不同的計(jì)算基礎(chǔ)狀態(tài),如下所示: 因此,任意時刻 t 的狀態(tài)∣?,其中,可以寫成如下: 現(xiàn)在,在時間時,Hadamard 門應(yīng)用于第一個量子位,因此在任何時間 t(其中),三個量子位的組合狀態(tài) |? 可以表示如下: 展開公式中的項(xiàng),我們得到狀態(tài) ∣?,如下所示: 由于在時間時我們將測量 Alice 的量子位,因此根據(jù) Alice 量子位的計(jì)算基礎(chǔ)狀態(tài)來排列狀態(tài) |? 是有意義的,即 |00?、|01?、|10?、| 11?。重新排列公式 1-79 中的各項(xiàng),我們得到: 現(xiàn)在,一旦我們在時間對 Alice 的量子位進(jìn)行測量,我們將測量它們處于四種計(jì)算基礎(chǔ)狀態(tài)之一,而 Bob 的量子位的狀態(tài)將是與之糾纏的狀態(tài)。例如,如果我們測量 Alice 的兩個量子位均為 0,即 和,那么 Bob 的量子位的狀態(tài)就是與狀態(tài) ∣00? 相關(guān)的狀態(tài),即 (α|0? + β) ∣1?)。這是 Alice 希望發(fā)送給 Bob 的狀態(tài)。 現(xiàn)在,假設(shè)我們測量且 。那么 Bob 的狀態(tài)就是與狀態(tài) ∣11? 相關(guān)的狀態(tài),即 (α|1? ? β∣0?)。這并不是理想的狀態(tài)。然而,這些變換在鮑勃的量子比特上排列起來;即,和 將負(fù)責(zé)將 (α|1? ? β∣0?) 轉(zhuǎn)換為所需狀態(tài) (α|0? + β∣1?)。 在這種情況下,只不過是具有以下矩陣表示的量子非門: 這會翻轉(zhuǎn)概率幅度,因此在應(yīng)用 X 門時,狀態(tài) (α|1? ? β∣0?) 將轉(zhuǎn)換為 (α|0? ? β∣1?)。接下來,Bob 的量子位將通過 = Z門,這只會翻轉(zhuǎn)與狀態(tài) |1? 相關(guān)的相位。這會將量子位狀態(tài) (α|0? ? β∣?) 轉(zhuǎn)換為所需的量子位狀態(tài) (α|0? + β∣1?)。 表 1-4 列出了與 Alice 量子位測量相對應(yīng)的所有四種可能性。它們每個都產(chǎn)生 Bob 量子位的最終狀態(tài)為 (α|0? + β∣1?)。
量子并行算法
量子并行性允許人們同時評估多個不同輸入值的函數(shù)。假設(shè)我們有一個函數(shù) f(x),其中 x 接受 n 個不同的值。通過開發(fā)適當(dāng)?shù)挠献儞Q,人們可以使用量子計(jì)算機(jī)同時計(jì)算 x 的所有可能值的 f (x)。許多量子算法利用量子并行性。參見圖 1-16。 假設(shè)我們要計(jì)算一個具有二元定義域和值域的函數(shù) f(x),即 f : X ∈ {0, 1} → {0, 1}。 評估該函數(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)可以展開如下: 方程 1-81 中的狀態(tài)是一個有用的狀態(tài),其中 f (0) 和 f(1) 作為分量,與其相應(yīng)的輸入糾纏在一起。就好像我們通過為函數(shù)域中的所有值創(chuàng)建疊加狀態(tài)來在其整個域上立即評估該函數(shù)。這種量子現(xiàn)象稱為量子并行性。 現(xiàn)在的問題是,我們?nèi)绾螐倪@個疊加狀態(tài)∣ψ?得到函數(shù)評估? 正如我們已經(jīng)建立的,為了能夠從給定的狀態(tài)中提取任何信息,我們需要執(zhí)行度量。如果我們將數(shù)據(jù)量子位測量為0,我們將狀態(tài)崩潰為∣0,f(0)??,F(xiàn)在,如果我們對第二個量子位進(jìn)行測量,我們肯定能得到f(0)的值,這是百分之百確定的。類似地,如果我們在第二個量子位上測量到第一個量子位為1,我們肯定會測量f(1)的值。 我們可以將這種方法推廣到其域中具有多個輸入值的函數(shù)。假設(shè)我們有一個函數(shù),其域中有個值,使得 我們可以通過在 n 個量子位系統(tǒng)上使用 Hadamard 門來創(chuàng)建所有個值的相等疊加狀態(tài)作為計(jì)算基礎(chǔ)狀態(tài)。為了說明這個想法,我們從最初處于 ∣0? 狀態(tài)的兩個量子位開始(見圖 1-17)。對它們中的每一個應(yīng)用 Hadamard 門,我們得到以下結(jié)果: 因此,我們可以看到,通過在 ∣0? 狀態(tài)初始化的 2 個量子位上使用 Hadamard 門,我們能夠獲得四個計(jì)算基礎(chǔ)狀態(tài)的相等疊加。我們可以用整數(shù)表示來表示計(jì)算基礎(chǔ)狀態(tài)的“二進(jìn)制字符串”表示,如下所示: 現(xiàn)在,如果我們從初始化為 ∣0? 狀態(tài)的 n 個量子位開始,而不是兩個量子位,那么通過對每個量子位應(yīng)用哈達(dá)瑪變換,我們得到以下疊加狀態(tài): 因此,我們可以看到,通過使用 n 個量子位,我們可以同時評估一個函數(shù)在其域中的 2n 個輸入。當(dāng)然,為了得到函數(shù)值,我們必須對狀態(tài) |ψ? 進(jìn)行測量,每次測量都會產(chǎn)生輸入 x 及其對應(yīng)的函數(shù)值 f(x)。
量子干涉
如前所述,在量子計(jì)算算法中,目標(biāo)是使量子系統(tǒng)狀態(tài)給出的概率分布偏向于一個或多個結(jié)果。讓我們用一個例子來討論量子干涉。
總結(jié)
至此,我們進(jìn)入了第一章的結(jié)尾。在本章中,我們介紹了量子位(量子計(jì)算的基本單位)的大量基礎(chǔ)知識。此外,我們還討論了糾纏和疊加的重要量子力學(xué)性質(zhì)。此外,我們還研究了幾個重要的單量子位和多量子位門,它們對于操縱量子位的狀態(tài)非常重要。在本章末尾,我們討論了貝爾態(tài)、與量子隱形傳態(tài)相關(guān)的概念以及量子并行性。 您將在接下來的章節(jié)中看到,量子并行性是多個量子計(jì)算和量子機(jī)器學(xué)習(xí)應(yīng)用中的重要組成部分。在下一章中,我們將討論量子計(jì)算和量子機(jī)器學(xué)習(xí)背景下所需的線性代數(shù)的重要思想,研究量子力學(xué)的假設(shè),然后更詳細(xì)地研究量子系統(tǒng)中的測量。最后,我們將以一些重要的量子計(jì)算算法來結(jié)束本章,以進(jìn)一步了解量子計(jì)算及其相關(guān)算法的強(qiáng)大功能。
量子計(jì)算的數(shù)學(xué)基礎(chǔ)和假設(shè)
量子力學(xué)比經(jīng)典力學(xué)更基礎(chǔ),它在微觀和宏觀層面上都起作用。然而,對于高速運(yùn)動的微觀域中的粒子和系統(tǒng),量子力學(xué)的表現(xiàn)變得更加重要。關(guān)于量子力學(xué)的解釋方面仍然存在問題。然而,在操作層面上,它可以高精度地處理各種現(xiàn)象。量子力學(xué)的數(shù)學(xué)比經(jīng)典力學(xué)簡單得多,而且作為一種計(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ù)知識對于理解量子力學(xué)和量子計(jì)算至關(guān)重要。在本章中,我們將研究線性代數(shù)中的具體思想,這些思想是量子態(tài)、量子演化和量子測量思想的核心。
向量的線性獨(dú)立性
如果一個向量不能表示為另一個向量的線性縮放,則這兩個向量 |v1? 和 |v2 ? 被稱為線性無關(guān)。從數(shù)學(xué)上來說,如果 |v1? ≠ k|v2 ? 對于某個常數(shù) k,|v1? 和 |v2 ? 是線性無關(guān)的。一組 n 個向量 |v1 ?,|v2 ?…。 |vn? 如果它們中沒有一個可以表示為其他的線性組合,則稱它們是線性無關(guān)的。要確定給定的 n 個向量集是否線性無關(guān),當(dāng)且僅當(dāng)每個線性系數(shù) c1 到 cn 為零時 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 為零,如果通過列向量 |v1? 到 |vn ? 形成的矩陣是滿秩的,則這是可能的。如果維度為 m × n 的矩陣 A 的秩等于 m 和 n 中的最小值,則稱其為滿秩。為了使公式 2-1 中的矩陣成為滿秩,其秩必須為 n(假設(shè) m > n)。如果矩陣是 n × n 方陣,我們可以通過確保矩陣的行列式非零來驗(yàn)證該矩陣是滿秩的。 如果一組 n 個向量 |v1 ?, |v2 ?, . 。 |vn ? ε ?n 是線性無關(guān)的,向量跨越整個 n 維向量空間??缭絥個向量意味著可以通過n個向量的線性組合來產(chǎn)生不同的其他向量。因此,使用一組 n 個線性無關(guān)向量,可以產(chǎn)生中所有可能的向量。如果向量 |v1 ?, |v2 ?, . 。 |vn ? 不是線性獨(dú)立的,那么它們將跨越內(nèi)的更小的子空間。讓我們嘗試用一個例子來說明向量跨度的概念。 假設(shè)我們有一個向量|v1?= [1,2,3]T。使用這個,我們可以在三維空間中只跨越一個維度,因?yàn)樗邢蛄慷紝⑹莂∣v1?的形式,其中a是標(biāo)量乘數(shù)。 現(xiàn)在,如果我們采用另一個向量|v2?= [5 9 7]T,它不是∣v1?的標(biāo)量乘數(shù),我們可以采用a|v1?+ b∣v2?的形式的線性組合,在三維向量空間中跨越一個二維子空間,如圖2-1所示。 現(xiàn)在,如果我們將另一個向量|v3?= [4 8 1]T到我們的向量集,我們可以跨越整個?3向量空間,因?yàn)閨v1?,∣v2?,和∣v3?是線性獨(dú)立的。如果我們將∣v3?視為∣v1?和∣v2?的線性組合,那么它不可能跨越整個三維空間。我們將被限制在由∣v1?和∣v2?跨越的二維子空間。
基向量
一組n個線性獨(dú)立的向量|v1?,|v2?,....|vn?形成了表示n維向量空間中任何給定向量的基礎(chǔ)。使用n個基向量的線性組合一次就可以在n維向量空間中創(chuàng)建任何向量。
標(biāo)準(zhǔn)正交基
當(dāng)一個向量空間的基集合中的向量元素彼此正交時,我們就說它有一組標(biāo)準(zhǔn)正交基。一組基向量|?1?,|?2?......∣?n?被認(rèn)為形成一個標(biāo)準(zhǔn)正交基,如果以下情況成立: 我們不需要明確地引用線性無關(guān)性作為正交基的條件,因?yàn)橄蛄康恼恍钥偸潜WC向量的線性無關(guān)。 在量子力學(xué)中,我們總是用標(biāo)準(zhǔn)正交基來表示希爾伯特空間中的量子態(tài)。
線性算子
量子態(tài)存在于復(fù)雜的希爾伯特空間中。在線性和酉算子的作用下,量子態(tài)從一種態(tài)演化到另一種態(tài)。 由于任何向量都可以表示為其基向量的線性和,因此要理解線性算子如何變換向量空間中的任何給定向量,只需知道線性算子如何變換其基向量就足夠了。當(dāng)向量 |v? 和 |w? 的維度匹配時,我們可以將 A 視為從 V 到 V 的線性算子。 向量空間上的兩個平凡算子是使向量保持不變的單位I算子和將任意向量變換為0向量的零算子。 如果A是一個從向量空間V到向量空間W的線性算子,如果B是一個從向量空間W到向量空間Y的線性算子,那么可以通過組合來定義一個線性算子BA,該組合將向量|v?∈V映射到向量| Y?∈Y,如下所示:
將線性算子解釋為矩陣
因此,方程2-9描述了基元素與線性算子A?或它對應(yīng)的矩陣A關(guān)于這兩個基底的關(guān)系。一般來說,線性算子也可以看作是關(guān)于通?;囊粋€矩陣。在本書中,我們不會對線性算子及其相應(yīng)的矩陣作任何區(qū)別。除非另有說明,否則矩陣變換是關(guān)于通常的基的。在量子力學(xué)中,線性算符是方陣,因此向量空間V上的線性算符可以被認(rèn)為是從V到V的變換。此外,對于形式為a: V→V的線性算符,在沒有明確規(guī)定的情況下,我們將假設(shè)通常的基。 既然我們在定義線性算子和它們對應(yīng)的矩陣時特別注意基,讓我們花點(diǎn)時間來學(xué)習(xí)量子位態(tài)的通?;?。對于單量子比特系統(tǒng),通常的基向量為|0?= [1 0]T且|1?= [0 1]T。 類似地,對于兩個量子比特系統(tǒng),通常的基向量將是單個量子比特通常基狀態(tài)的張量積,即,|i??∣j?,其中i表示量子比特1的通常基狀態(tài),j表示量子比特2的通?;鶢顟B(tài)。我們可以有四種這樣的組合:|0??|0?,|0??|1?,|1??∣0?,且|1??∣1?。它們的列向量表示可以通過展開張量積得到。示例:|1??|0?= [0 1]T?[1 0]T = [0 0 1 0]T。通常,對于一個n-量子比特系統(tǒng),將存在2n個基狀態(tài)向量,其形式為|ko??|k1??|k2?…?∣kn?1?,其中ki表示第i個量子比特的基向量。
外積形式的線性算子
Pauli 算子及其外積表示
我們在第一章中簡要地討論了泡利矩陣。四個泡利矩陣是線性運(yùn)算符,相對于計(jì)算基∣0?和∣1?。 將泡利矩陣表示為外積的最簡單方法是確定計(jì)算基礎(chǔ)狀態(tài)向量在泡利矩陣運(yùn)算時的變換。例如,如果我們采用泡利矩陣 σz ,它將基礎(chǔ)狀態(tài) ∣0? 轉(zhuǎn)換為 ∣0? ,并將基礎(chǔ)狀態(tài) ∣1? 轉(zhuǎn)換為 ? ∣1?。因此,根據(jù)公式 2-11,我們可以寫出以下內(nèi)容:
線性算子的特征向量和特征值
向量空間 V 上的線性算子 A 的特征向量是向量 ∣v?,使得 A∣v? = λ∣v?。這里,λ是特征值,∣v?是特征值λ對應(yīng)的特征向量。圖 2-2 顯示了特征向量的變換。 我們可以通過求解det| a?λI| = 0給出的特征方程來求得線性算子a的特征值。線性算子A的特征方程對應(yīng)的特征函數(shù)定義為c(λ) = det∣A?λ i∣。特征方程自然地來自于特征向量方程,如下所示: 公式2-17可以有兩個解,微不足道的一個是|v?= 0。然而,更有趣的解是當(dāng)(A?λI)的列向量不是線性無關(guān)時。在這種情況下,矩陣(A - λI)不是滿秩的,因此它的行列式det(A - λI)應(yīng)該是零。這就給出了特征值解的著名特征方程如下:
算子的對角線表示
如果∣k?表示的算子A的特征向量是正交的,其對應(yīng)的特征值用λk表示,則算子A可以表示為: 這種表示法稱為算子的對角線表示法。對應(yīng)于算子A的矩陣是對角線的如果算子以特征向量作為基用對角線矩陣的形式表示的話。并不是所有的矩陣或運(yùn)算符都有對角線表示。這里所示的線性算子A對于通常的計(jì)算基礎(chǔ)具有對角線表示: 在這種情況下,特征向量∣0?和∣1?對應(yīng)于特征值3和4。我們再看另一個算子它關(guān)于通?;谋硎臼怯膳堇仃嚘襵表示的。
算子的伴隨
伴隨算子也稱為厄米共軛算子。在第一章中,我們將伴隨算子稱為算子的共軛轉(zhuǎn)置,因?yàn)槿绻覀円盟阕拥木仃嚤硎痉?,那么它正是如此。向?|v? 的共軛轉(zhuǎn)置,我們表示為 ?v|也可以用伴隨符號 |v?? 來表示。 伴隨算子的一些性質(zhì)在這里概述: 對于兩個線性算子A和B, (AB)?= B?A?。 一個算子的伴隨子的伴隨子返回同一個算子。換句話說,(A?)?= A 一般情況下,算子A與其伴隨的A?是不相等的。類似地,在一般情況下,算子A和它的伴隨算子不是可換的;即通常AA?不等于A?A。
自伴或厄米算子
當(dāng)運(yùn)算符 A 等于其伴隨運(yùn)算符時,即 A = A+,則該運(yùn)算符被稱為自伴隨運(yùn)算符或 Hermitian 運(yùn)算符。 Hermitian 算子的一些相關(guān)屬性如下: 厄米算子總是具有實(shí)數(shù)特征值。 對于非簡并的厄米算子,即每個特征值僅對應(yīng)于一個特征向量,厄米算子的特征向量彼此正交。
普通運(yùn)算符
如果線性算子 A 與其伴隨 A? 可交換,則稱其為正規(guī)算子 A。因此,對于普通算子來說,AA? = A?A。這里概述了普通運(yùn)算符的一些重要屬性: 厄米算符A自然是一個正規(guī)的算符,因?yàn)閷τ诙蛎姿惴鸄 = A+,因此關(guān)系A(chǔ)A?= A?A總是成立的。然而,正規(guī)算子不一定是厄米特算子。 正規(guī)算子可以進(jìn)行譜分解。在譜分解形式中,可以將一個正規(guī)算子A表示為。其中,λk表示特征向量∣k?對應(yīng)的特征值。我們將在后面的章節(jié)中更詳細(xì)地討論譜分解。
酉算子
我們在第一章詳細(xì)討論了酉算子,因?yàn)榱孔酉到y(tǒng)狀態(tài)上允許的所有變換本質(zhì)上應(yīng)該是酉算子。對于任何酉算子 U,我們知道 UU? = U?U = I,它自動滿足正規(guī)算子的條件:UU? ? U?U = 0。因此,所有酉算子都是正規(guī)算子。因此,正規(guī)算子族同時包含厄米算子和酉算子,如圖 2-3 所示。此外,多個酉算子可以是Hermitian算子,反之亦然。例如,Hadamard 矩陣既是酉矩陣又是 Hermitian 矩陣。
線性算子的譜分解
這稱為線性算子的譜分解,其中正規(guī)算子的特征值和相應(yīng)的特征向量分別為λk和|k?。我們在第 1 章中廣泛使用的 Hadamard 門是一個普通算子。
線性算子的跡
線性算子的跡可以定義為其對角線項(xiàng)的總和。矩陣跡的一些性質(zhì)如下: 線性算子的特征值之和等于算子的跡。 如果 ∣u? 和 ∣v? 是向量空間 V 中的兩個向量,并且 A 是 V 上的運(yùn)算符,那么我們有:
向量張量積的線性算子
如果 A 和 B 分別是向量空間 V 和 W 中向量 ∣v? 和 ∣w? 上的線性算子,則向量 |v? ? ∣w? 上的線性算子由 A ? B 給出。 線性算子 A ? B 對 |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) 寫成如下:
換向器和反換向器算子
對于兩個可交換的算子,換向算子為零。如果兩個運(yùn)算符交換,則可以同時對它們進(jìn)行對角化。
量子力學(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)向量∣ψ?包含給定時間量子系統(tǒng)的所有信息。 根據(jù)我們選擇的基礎(chǔ),狀態(tài)可以代表不同的物理可觀測值。例如,我們可以查看相對于 ∣0? 和 ∣1? 計(jì)算基礎(chǔ)狀態(tài)的量子位狀態(tài),并將量子位表示為 |ψ? = α|0? + β ∣1?。這里α和β是狀態(tài)|0?和|1?對應(yīng)的概率幅,量子位處于∣0?和|1?的疊加。
假設(shè) 2:量子進(jìn)化
在方程 2-49 中,U(t1 , t0) 是將量子系統(tǒng)從狀態(tài) |ψ(to)? 帶到 |ψ(t1 )? 的酉算子。
量子態(tài)時間演化的薛定諤方程
讓我們嘗試看看酉算子 U(t1 , t0) 與量子力學(xué)最重要的方程之一:薛定諤方程的關(guān)系。 在上式中, ? 是歸一化普朗克常數(shù),等于 h/2π ,其中 h 是普朗克常數(shù)。這里的術(shù)語 H 指的是封閉量子系統(tǒng)的哈密頓量,不要與哈達(dá)瑪變換混淆。 特征值特意表示為 Ek 以表示能量。我們用 ∣Ek? 表示相應(yīng)的本征態(tài)。處于最低能量狀態(tài)的量子系統(tǒng)將處于對應(yīng)于最小能量本征值 Emin 的本征態(tài) ∣Emin? 。由于哈密頓算子是厄米算子,因此我們只能有真實(shí)的能級。 表達(dá)式 e^###是酉算子,它將具有哈密頓量 H 的量子系統(tǒng)從時間 t0 的狀態(tài) |ψ(t0)? 轉(zhuǎn)變?yōu)闀r間 t1 的 |ψ(t1 )?。它正是方程 2-49 中的酉算子 U(t1 , t0),因此我們可以說: 基本上,U(t1, t0)與H具有相同的特征向量∣Ek?與特征值e^###是哈密頓特征值Ek的指數(shù)版本。
假設(shè) 3:量子測量
我們之前已經(jīng)確定,我們可以用代表某些可測量物理量的合適正交基來表達(dá)狀態(tài)。狀態(tài)|ψ?一般可以表示為這些正交基狀態(tài)的疊加。如果我們嘗試測量 ∣0? 和 |1? 基本狀態(tài)中量子位的狀態(tài),假設(shè)量子位為 |ψ? = α|0? + β ∣ 1?,則測量將產(chǎn)生狀態(tài) 0 或 1 之一。 測量產(chǎn)生狀態(tài) 0 的概率為 |α|2,而狀態(tài) 1 的概率為 |β|2。 量子位的測量后狀態(tài)是測量的基礎(chǔ)狀態(tài)。例如,如果我們再次測量量子位狀態(tài)為∣0?,我們將得到相同的狀態(tài)∣0?。 當(dāng)我們進(jìn)行測量時,量子系統(tǒng)不再封閉,因?yàn)樗c測量過程相互作用。因此,在測量時,量子態(tài)不再根據(jù)薛定諤方程演化。
一般測量算子
該完整性方程來自這樣一個事實(shí):與集合 {Mk} 中不同測量算子相關(guān)的概率之和應(yīng)為 1。可以通過對方程 2-55 所示的不同結(jié)果的概率求和來證明這一點(diǎn)。 到目前為止,我們還沒有對這些測量算子{Mk}的結(jié)構(gòu)做出任何假設(shè)。只要它們滿足完整性方程并產(chǎn)生有效的正概率值,它們就是有效的測量算子?,F(xiàn)在讓我們看看當(dāng)您計(jì)劃對不同的計(jì)算基礎(chǔ)狀態(tài)進(jìn)行測量時如何定義這些測量運(yùn)算符。如果您使用正交計(jì)算基礎(chǔ)狀態(tài) {| ψk ?},則可以將測量算子定義為 Mk = |ψk??ψk |。 測量算子的一些重要屬性如下: 測量算子是厄米算子。
投影測量算子
投影測量是一種組合各個測量算子 P0 、 P1 、PN ? 1 對應(yīng)于正交基向量 |ψ0?, |ψ1 ?, 。 。 ∣ ψN ? 1 ?等的方法。投影測量算子 M 是 Hermitian 算子,其表示形式如下: 請注意,雖然與各個基態(tài)相關(guān)的運(yùn)算符 P0、P1、...PN ? 1 是酉的,投影測量算子 M 不是酉算子。 投影測量算子可用于計(jì)算可由正交基表示的結(jié)果的統(tǒng)計(jì)屬性。例如,我們可以根據(jù)量子系統(tǒng)的狀態(tài) |ψ? 計(jì)算其平均結(jié)果,如下所示: 如果要制作量子態(tài) ∣ψ? 的多個相同副本并相對于測量算子 M 基向量進(jìn)行測量,則射影算子 M 的標(biāo)準(zhǔn)差是結(jié)果分布的度量。投影測量算子的標(biāo)準(zhǔn)偏差導(dǎo)致了著名的海森堡不確定性原理,如下一節(jié)所示。
海森堡測不準(zhǔn)原理
海森堡不確定性原理給出了兩個投影測量算子(例如 M 和 N)的標(biāo)準(zhǔn)差乘積的下界,給定量子態(tài) ∣ψ?。 假設(shè)我們有兩個測量算子M和N,并且我們在精確狀態(tài)下復(fù)制量子系統(tǒng)的多個副本,比如2n,∣ψ??,F(xiàn)在,如果我們對算子M進(jìn)行n次測量,對算子N進(jìn)行n次測量,我們會看到M和N結(jié)果的標(biāo)準(zhǔn)差遵循以下關(guān)系: 方程2-74稱為一般海森堡測不準(zhǔn)原理。為了證明海森堡測不準(zhǔn)原理,我們將用一個數(shù)學(xué)小插曲來研究柯西-施瓦茨不等式。如圖2-4所示。 這是復(fù)向量空間中向量的柯西-施瓦茨不等式,我們將用它來證明海森堡不確定性原理。 首先,M 和 N 是投影測量算子,是 Hermitian 算子。讓我們采用兩個狀態(tài) ∣Φ1 ? 和 ∣Φ2 ?,它們是在系統(tǒng)狀態(tài) |ψ? 上應(yīng)用投影測量算子 M 和 iN 的結(jié)果,定義如下: 現(xiàn)在我們已經(jīng)接近證明海森堡測不準(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)差來表達(dá)同樣的事情。 ,我們可以將公式 2-86 重寫如下: 方程 2-88 中的不等式是海森堡不確定性原理對于兩個測量算子 M 和 N 的最一般版本。如果將算子 M 和 N 選擇為位置算子 x ? 和動量算子 p ? ,則交換算子將其代入公式 2-88,可得到與位置和動量相關(guān)的海森堡測不準(zhǔn)原理:
POVM 算子
一般測量算子和投影測量算子不僅給出了測量各種結(jié)果的概率的規(guī)則,而且還給出了測量后狀態(tài)的清晰表述。然而,在各種應(yīng)用中,測量后的狀態(tài)對于實(shí)驗(yàn)來說并不那么重要。衡量各種結(jié)果的概率的能力是唯一重要的事情。在這種情況下,POVM 測量方案被證明是一種方便的公式。我們可以定義一個正算子Ek,使得當(dāng)測量狀態(tài)∣ψ?時k的結(jié)果的概率如下: 希爾伯特空間 V 中的正算子 A 是對于每個 |ψ? ∈ V 滿足 ?ψ|A|ψ? ≥ 0 的算子。因此,確保算子 Ek 為正將確保我們具有由 P( 表示的概率k) ≥ 0。如果我們有 N 個我們感興趣的結(jié)果,我們必須以滿足完整性方程的方式構(gòu)建正算子 Ek;即。算子 Ek 稱為 POVM 元素,而完整集合 {Ek } 稱為 POVM。與投影測量算子{Pk}不同,POVM算子{Ek}不需要滿足關(guān)系。因此,正測量算子{Ek}不限于僅測量與一組正交基態(tài)有關(guān)的結(jié)果。因此,從這個意義上說,POVM 比投影測量算子更通用,而后者實(shí)際上是前者的特例。讓我們看看 POVM 與投影測量不同的更有趣的情況,而不是將投影測量視為 POVM 的特殊情況。假設(shè)我們想要檢測兩個不一定正交的狀態(tài)。我們可以將這兩個狀態(tài)記作。不用說,由于狀態(tài) ∣ψ1 ? 和 ∣ψ2? 之間的重疊,我們不可能完全確定地測量這兩個狀態(tài)。讓我們定義三個 POVM 元素,如下所示,看看如何最好地檢測這兩個事件:如果測量狀態(tài)為 |ψ1? = |0?,則永遠(yuǎn)不會觀察到 E1,因?yàn)樗鼘?yīng)于正交狀態(tài) ∣1?。然而,如果檢測到 E1,我們可以安全地推斷出正在測量的狀態(tài)必須是狀態(tài)。類似的,如果檢測到 E2,那么它必須是狀態(tài) |ψ1? = ∣ 0?。它不可能是狀態(tài)因?yàn)樗c (| 0??| 1?) 正交。當(dāng)檢測到 E3 時,我們無法確定所測量的狀態(tài)。這里的中心點(diǎn)是,使用 POVM,我們永遠(yuǎn)不會錯誤地識別我們要測量的狀態(tài)。只是有時我們無法確定我們所面臨的實(shí)際狀態(tài)。
密度算子
到目前為止,我們一直使用狀態(tài)向量 |ψ? 來表示量子系統(tǒng)。量子系統(tǒng)也可以用密度算子 ρ 來表示。對于我們目前所研究的與周圍環(huán)境隔離且處于純量子態(tài)的量子系統(tǒng),密度算子只不過是狀態(tài)向量∣ψ?與其自身的外積。因此,我們有這個:
混合量子態(tài)的密度算子
有時很難確定量子系統(tǒng)所處的確切量子態(tài)。我們可以以經(jīng)典概率 pi 獲得 n 個純量子態(tài) ∣ψi ? 中任意一個的量子態(tài)。在這種情況下,密度算子就派上用場了,我們可以為這種混合量子態(tài)系統(tǒng)定義密度算子,如下所示: 因此,混合量子態(tài)的密度算子只不過是其每個組成純態(tài)的密度算子的平均值。 混合態(tài)的密度算子的跡也是 1。請參見以下內(nèi)容:
混合量子態(tài)密度算子的演化
對于封閉量子系統(tǒng),狀態(tài)向量的演化由 |ψ(t2 ? = U(t2 , t1)|ψ(t1 )? 給出。讓我們看看當(dāng)系統(tǒng)處于混合狀態(tài)時密度算子如何演化。請注意,在混合量子態(tài)中,n 個不同的可能狀態(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 可以寫為酉演化后純態(tài)密度算子的平均值,為此處顯示:
使用密度算子進(jìn)行測量
假設(shè)我們有一個與結(jié)果 m 相對應(yīng)的測量算子 Mm。測量算子 Mm = ∣ Φm??Φm ∣ 對應(yīng)于基向量 ∣ Φm?。假設(shè)我們知道量子系統(tǒng)處于純態(tài) ∣ψi?,結(jié)果 m 的概率由條件概率 P(m/i) 給出。
測量后的密度算子
密度算子的混合狀態(tài)與純狀態(tài)
我們在前面的章節(jié)中看到了混合狀態(tài)與純狀態(tài)在表示方面有何不同。然而,給定一個密度算子,我們可以通過檢查密度算子的平方跡來檢查它是純態(tài)還是混合態(tài)。對于純狀態(tài),tr(ρ^2) = 1,而對于混合狀態(tài),tr(ρ^2) < 1。鼓勵讀者進(jìn)行數(shù)學(xué)計(jì)算來驗(yàn)證這一說法。
多量子系統(tǒng)的聯(lián)合密度算子
約化密度算子
貝爾態(tài)的部分跡
這意味著量子位 A 處于混合狀態(tài)。這是一個有趣的觀察,因?yàn)閮蓚€量子位的聯(lián)合狀態(tài)處于純狀態(tài),而各個量子位處于混合狀態(tài)。這種奇怪的行為與量子糾纏現(xiàn)象有關(guān)。
延遲測量原理
在許多量子電路中,測量常常在電路的中間部分進(jìn)行,測量結(jié)果用于有條件地控制后續(xù)的量子門。例如,在第一章中,我們在量子隱形傳態(tài)電路中觀察到,愛麗絲的兩個量子位上的測量用于控制鮑勃量子位上的酉算子。圖2-5顯示了供參考的量子隱形傳態(tài)電路,其中前兩個量子位Q1和Q2屬于Alice,而量子位Q3屬于Bob。 實(shí)際上,在圖 2-5 的量子隱形傳態(tài)電路中,在測量 Alice 的量子位時,我們得到了經(jīng)典信息 M1 和 M2 ,它們用于有條件地控制相繼應(yīng)用于 Bob 量子位的酉算子 X 和 Z。我們在圖 2-6 中的量子隱形傳態(tài)中所做的不同之處在于,將 Bob 量子位上的 X 和 Z 運(yùn)算符設(shè)置為 Alice 量子位的量子信息(狀態(tài)),然后測量 Alice 量子位到電路末端。 人們可能會說圖 2-5 中的量子電路更加直觀和可解釋,因?yàn)樗枰獙⒔?jīng)典信息從 Alice 傳遞給 Bob;然而,中心思想是圖 2-5 和圖 2-6 中的電路是等效的。這種將測量推到電路末端的方法稱為延遲測量原理。 總結(jié)延遲測量狀態(tài)的原理,可以將電路中間部分的測量移至電路末端。此外,如果電路中間部分中的測量用于經(jīng)典地控制電路其他部分中的酉運(yùn)算,則它們可以被條件量子運(yùn)算取代。延遲測量原理的結(jié)果是測量與調(diào)節(jié)操作進(jìn)行交換。
近似酉算子
在經(jīng)典計(jì)算體系中,一小組門(例如 AND、OR 和 NOT 門)可用于實(shí)現(xiàn)任何經(jīng)典函數(shù)。因此,這樣一組門被認(rèn)為對于經(jīng)典計(jì)算是通用的。在量子計(jì)算范式中,如果任何給定的酉算子可以通過由通用集中的門組成的量子電路近似到任意精度,則一組門被認(rèn)為是通用的。在第一章中,我們在實(shí)現(xiàn)一些量子算法時接觸了 CNOT 和 Hadamard 門。這兩個門以??及相位門和 π/8 門被認(rèn)為是通用的,因?yàn)槭褂眠@些門可以將任何單一門逼近到任意精度。圖 2-7 顯示了四個門及其酉變換以供參考。 現(xiàn)在讓我們看看使用一組離散量子門來近似酉變換意味著什么。讓我們采用在相同狀態(tài) ∣ψ? 上運(yùn)行的兩個酉變換 U 和 V,其中 U 是我們想要實(shí)現(xiàn)的酉變換,V 是我們能夠使用離散門集實(shí)現(xiàn)的酉變換。我們可以定義用 V 逼近 U 的誤差如下: 正如我們在公式 2-114 中看到的,誤差 E(U, V) 是當(dāng)使用 V 而不是 U 作為酉算子時期望變換狀態(tài)與實(shí)際變換狀態(tài)之間差異的最大范數(shù)。還要注意變換 E(U, V) 中的誤差與測量變換狀態(tài)時的誤差之間的關(guān)系。如果我們有一組 n 個測量算子 M1 , M2 …。 。 , Mn 屬于正交集 |ψ1 ?, |ψ2 ?, …. ,|ψn?,則每個測量元素Mk給出測量狀態(tài)的概率為|ψk?。如果可以模擬所需的酉算子 U,那么在狀態(tài) ∣ψ? 變換之后對基 ∣ψk? 的測量將產(chǎn)生概率 pk(U),如下所示: 類似地,如果我們使用 V 作為 ∣ψ? 上的酉變換而不是 U,然后使用測量算子 Mk 對基本狀態(tài) ∣ψk? 進(jìn)行測量,那么測量狀態(tài) ∣ψk? 的概率可以為寫成如下: 公式2-121中的不等式告訴我們,如果用E(U, V)給出的V來近似算子U的誤差很小,那么測量概率和實(shí)際概率的差異也很小。事實(shí)上,誤差范數(shù)的上限是以 V 逼近 U 時的誤差為上限,即 2E(U, V)。 該不等式概括為由 n 個酉算子 U1 、 U2 、…、Un 組成的序列,由 n 個酉算子 V1、V2、…、Vn 的序列近似。通過歸納可以看出,與 n 個酉運(yùn)算序列的近似相關(guān)的誤差遵循以下關(guān)系: 因此,我們看到該關(guān)系對于 n = 2 成立。通過歸納,我們可以將此關(guān)系擴(kuò)展到由 V1 、 V2 .. Vn 近似的酉算子 U1 、 U2…、 Un 的任意序列。
索洛維-基塔耶夫定理
每當(dāng)我們查看空間 U 中的近似元素時,我們都會查看該空間中元素的較小子集 W,這很容易實(shí)現(xiàn)。通過組合使用較小子集 W 中的元素,我們形成一個在 U 中稠密的空間 V。在拓?fù)渲?,如?V 的閉包等于集合 U,則子集 V 被稱為 U 的稠密子集。非正式地,每個稠密集 V 中的元素任意接近于集合 U 中的元素。稠密集的最佳示例是由 ? 表示的有理數(shù)集合,作為由 ? 表示的實(shí)線的子集。每個實(shí)數(shù)要么是有理數(shù),要么任意接近于一。 U 的密集子集 V 可用于使用 V 的元素以任意精度表示 U 的元素。例如,由于位的二進(jìn)制表示,經(jīng)典計(jì)算機(jī)只能使用有理數(shù)。然而,由于有理數(shù)形成實(shí)線 ? 的稠密子集,因此我們可以高精度地逼近實(shí)無理數(shù)。類似地,在量子計(jì)算的情況下,可能的門的集合形成一個連續(xù)體,并且并不總是可以用 SU(d) 中的元素精確地構(gòu)造一個門。 設(shè) SU(d) 表示 d 維希爾伯特狀態(tài)空間中的酉算子群。因此,Solovay-Kitaev 定理根據(jù)可接受的誤差 ? 給出了通用集合 V(或者通用集合 V 的元素的函數(shù))所需門的近似數(shù)量的估計(jì)。逼近酉算子時可接受的誤差越低,構(gòu)建這種酉門所需的通用集中的門數(shù)量就越大。
ERP悖論、局部現(xiàn)實(shí)主義和貝爾不等式
在經(jīng)典世界中,每當(dāng)我們想到任何物體時,我們都會假設(shè)該物體的物理屬性存在,無論我們是否觀察到它。對此類物體的任何測量都只能揭示物理特性。然而,根據(jù)量子力學(xué),物體不具有任何與其測量無關(guān)的物理屬性。事實(shí)上,只有在系統(tǒng)上進(jìn)行測量時,這些物理特性才會存在。這種對僅通過測量而具有物理特性的物體的解釋被稱為哥本哈根解釋。例如,根據(jù)量子力學(xué),除非測量到特定的能級,否則電子不具有任何特定的能級,例如基態(tài)或激發(fā)態(tài)。量子力學(xué)給我們提供的是一組假設(shè),告訴我們給定電子狀態(tài),測量時電子處于特定狀態(tài)的概率是多少。 從1920年到1930年,包括愛因斯坦在內(nèi)的幾位物理學(xué)家都不相信量子力學(xué)所提供的這個新觀點(diǎn)。著名論文《物理現(xiàn)實(shí)的量子力學(xué)描述能否被認(rèn)為是完整的?》由愛因斯坦、羅森和波多爾斯基(統(tǒng)稱EPR)所寫,詳細(xì)描述了一個思想實(shí)驗(yàn),以反駁哥本哈根的解釋。他們的論點(diǎn)基于量子糾纏的概念。假設(shè)我們有一個角動量為0的量子系統(tǒng),同時發(fā)射兩個光子P1和P2。由于光子有自旋和角動量必須守恒,如果一個光子有自旋向上的狀態(tài),另一個光子必須有自旋向下的狀態(tài),以確保系統(tǒng)的角動量為零。我們表示自旋上升狀態(tài)為∣0?,而自旋下降狀態(tài)為∣1?。這種現(xiàn)象被稱為糾纏,其中兩個光子不是獨(dú)立的。假設(shè)每個光子粒子具有相同的自旋向上和向下的傾斜度,兩個粒子的聯(lián)合狀態(tài)由給出。如果一個光子的自旋已知,那么另一個光子的自旋就立即已知。假設(shè)我們把光子分開1光年的天文距離,大約是9.46 × 10^12千米。如果我們測量一個光子P1,我們有50%的機(jī)會測量自旋向上,50%的機(jī)會測量自旋向下?,F(xiàn)在讓我們假設(shè)我們測量P1處于一個自旋狀態(tài)∣0?,然后我們快速測量,比方說在1秒內(nèi),P2的狀態(tài)。光子P2總是會測量自旋向上。量子力學(xué)表明,粒子的狀態(tài)不是預(yù)先確定的,只有在測量之后才可用。這意味著P1的測量信息必須比光傳播得快得多,才能在1秒內(nèi)到達(dá)P2,這樣P2才能根據(jù)測量時的休眠狀態(tài)調(diào)整狀態(tài)。EPR認(rèn)為,根據(jù)特殊相對規(guī)則,沒有任何物體的速度能超過光速,因此哥本哈根的解釋應(yīng)該是無效的。這種特殊相對的理論違背被稱為ERP悖論。 相反,ERP提出了另一種可能的量子糾纏理論,該理論指出,兩個光子的狀態(tài)從一開始就被預(yù)先確定了,光子P1是一個自旋向上的狀態(tài),而光子P2是一個自旋向下的狀態(tài)。這個信息隱藏在光子粒子的局部內(nèi),所以當(dāng)它們分開時,就不會發(fā)生通信。這叫做局部隱變量理論。 這就好像兩個光子粒子是一對手套,如果一個是左手,另一個就是右手。一旦我們發(fā)現(xiàn)了左手,我們就知道另一個無論它在宇宙中的哪個位置都一定是右手。從1935年到1964年,近30年來,局部隱變量理論一直是對量子力學(xué)的有效解釋,直到愛爾蘭物理學(xué)家約翰·貝爾(John Bell)的出現(xiàn),他根據(jù)著名的貝爾方程提出了一個驗(yàn)證局部隱變量理論是否正確的實(shí)驗(yàn)。 要推翻ERP的主張,我們需要理解貝爾不等式。貝爾不等式不涉及量子力學(xué)。我們做了一個思想實(shí)驗(yàn),用相似的感覺來推斷貝爾不平等,即普通世界是如何運(yùn)作的,或者愛因斯坦、波多爾斯基和羅森認(rèn)為自然應(yīng)該如何服從。我們用量子力學(xué)分析來跟進(jìn)普通世界分析,以證明它與普通世界分析是不一致的。 我們進(jìn)行了如圖2-8所示的實(shí)驗(yàn),裁判Colin為Alice和Bob準(zhǔn)備了兩個粒子,并將粒子發(fā)送給他們進(jìn)行測量。 一旦愛麗絲接收到她的粒子,她可以選擇測量與可觀測Q相關(guān)的物理性質(zhì)PQ,或者她可以選擇測量與可觀測R相關(guān)的物理性質(zhì)PR。愛麗絲在接收到她的粒子時,拋一個均勻硬幣來決定她想要測量的性質(zhì)。 如圖2-8所示,每一項(xiàng)物理性質(zhì)的測量都有兩個結(jié)果:+1或?1。與Alice類似,Bob在接收到粒子時,會測量與可觀測S和T有關(guān)的兩個物理性質(zhì)PS或PT中的一個。Bob在接收到粒子之前不會選擇要測量的性質(zhì)。愛麗絲和鮑勃同時進(jìn)行測量,這樣一個人的測量結(jié)果不會改變另一個人的測量結(jié)果。 現(xiàn)在我們來看簡單量(QS + RS + RT - QT),并試著計(jì)算它的期望。對表達(dá)式進(jìn)行簡化,得到: 從公式2-126中,我們可以很容易地看出,在某一時刻,S(Q + R)或T(R?Q)中的任何一個都是非零的,而非零的值是+2或- 2。因此: 對于由Q = q, R = r, S = s, T = t給出的Alice和Bob粒子的任何廣義測量態(tài),我們有QS + RS + RT - QT的期望如下: 現(xiàn)在,由于和的期望等于期望的和,我們可以將公式2-128改寫為: 方程2-129被稱為貝爾不等式。這個結(jié)果也被稱為CHSH不等式,以四位發(fā)明者的姓名首字母命名。 現(xiàn)在我們來分析一下貝爾不等式在量子系統(tǒng)中是否成立。這里Colin準(zhǔn)備了兩個量子位的糾纏量子態(tài)如下: 科林把第一個量子位給愛麗絲,第二個給鮑勃進(jìn)行測量。Alice對可觀測值Q和R進(jìn)行了測量,我們將其賦值如下: 在方程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,這違反了貝爾不等式。這意味著我們在推導(dǎo)貝爾不等式時所做的一個或多個假設(shè)必定是錯誤的。貝爾不等式或愛因斯坦、羅森和波多爾斯基在這方面做出的可能錯誤的假設(shè)可以總結(jié)如下:現(xiàn)實(shí)主義假設(shè):物理屬性具有獨(dú)立于觀察或測量的確定值的假設(shè)局部性假設(shè):假設(shè) Alice 執(zhí)行測量不會影響 Bob 的測量結(jié)果 這兩個假設(shè)一起被稱為局域?qū)嵲谡?,而貝爾不等式的違反證明它們中至少有一個是錯誤的。因此,我們從貝爾不等式的違反中學(xué)到的是,盡管局部現(xiàn)實(shí)主義符合我們的日常經(jīng)驗(yàn),但它并不適用于世界在最基本層面上的運(yùn)作方式。根據(jù)最近的實(shí)驗(yàn)證據(jù),物理學(xué)家得出的結(jié)論是,為了對量子力學(xué)有深入直觀的理解,應(yīng)該從我們對世界的常識性觀點(diǎn)中放棄局域性和實(shí)在論中的一個或兩者。
哈密??頓模擬和Trotterization
常數(shù)哈密頓量 H 下量子系統(tǒng)的演化由薛定諤方程給出。薛定諤方程的解給出了時間 t0 和 t 之間狀態(tài)向量 ∣ψ? 的酉演化為 |ψ(t1)? = U(t1 , t0) ∣ ψ(t0 )?,其中 。 在哈密頓模擬中,給定哈密頓算子 H 和演化時間 t,我們需要組合一系列門來實(shí)現(xiàn)酉算子 。哈密??頓量模擬是使用絕熱計(jì)算的算法的重要組成部分,例如我們將在第 7 章中研究的量子近似優(yōu)化算法(QAOA)。大多數(shù)物理系統(tǒng)中的哈密頓量可以表示為僅很少的顆粒。因此,對于 n 體量子系統(tǒng),我們可以將哈密頓量寫如下: 每個 Hk 哈密頓主義者通常都像兩個身體相互作用一樣簡單。這里要強(qiáng)調(diào)的一點(diǎn)是更容易用量子門構(gòu)造,因?yàn)樗扔纤阕庸ぷ髟诟〉木植孔酉到y(tǒng)上。如果我們能夠表達(dá),那么輕松構(gòu)造 的能力就會很有用。然而,一般來說,因?yàn)橐话闱闆r下各個局部哈密頓量不會交換,即 Hk Hl ≠ Hl Hk 。事實(shí)證明,即使兩個哈密頓量 H1 和 H2 不交換,我們也可以利用特羅特(Trotter)公式模擬單個哈密頓量來模擬整體哈密頓量。 上式中的O(.)表示Big O的計(jì)算復(fù)雜度。
如果哈密頓量 H1 和 H2 比 H = H1 + H2 更容易模擬,那么應(yīng)用 2-142 中的酉算子序列就證明是有用的命題。 Trotter 公式可以擴(kuò)展到兩個以上哈密頓量的和。例如,如果我們有 H = H1 + H2 + H3,我們可以通過酉算子序列來 Trotterize H 的酉演化,如下所示:
總結(jié)
至此,我們結(jié)束了第二章。在這一章中,我們主要介紹了量子力學(xué)的數(shù)學(xué)和它的假設(shè),以更好地幫助我們理解和實(shí)現(xiàn)不同的基于量子的算法以及量子機(jī)器學(xué)習(xí)。我們詳細(xì)研究了測量及其不同的變體,如射影測量和POVM,因?yàn)闇y量是基于量子的算法的組成部分。此外,我們涵蓋了特定的重要主題線性代數(shù)是中心的量子力學(xué)表示。 在下一章中,我們將從前兩章中學(xué)習(xí)并實(shí)現(xiàn)幾個基于量子計(jì)算的算法,如量子隱形傳態(tài)、Deutsch-Jozsa、Grover的算法和Bernstein-Vazirani等。我們將在谷歌的Cirq和IBM的Qiskit中實(shí)現(xiàn)這些量子算法。
量子算法概論
1981年,理查德·費(fèi)曼提出了這樣的想法:由遵守量子力學(xué)定律的量子力學(xué)元件構(gòu)建的計(jì)算機(jī)可以對量子系統(tǒng)進(jìn)行有效的模擬。量子計(jì)算基于疊加、糾纏和干涉等量子力學(xué)特性定律。與經(jīng)典計(jì)算不同,在量子計(jì)算機(jī)中,由于其疊加特性,寄存器可以同時存在于所有可能的狀態(tài)。只有當(dāng)測量量子系統(tǒng)時,我們才能觀察到一種可能的狀態(tài)。這樣的系統(tǒng)是有利的,因?yàn)楫?dāng)測量時,每個狀態(tài)可以以在測量之前的狀態(tài)中編碼的特定概率出現(xiàn)。量子計(jì)算的工作原理是將所需狀態(tài)的概率增加到足夠高的值,以便可以通過最少數(shù)量的測量以高置信度獲得所需狀態(tài)。在這方面,由量子疊加產(chǎn)生的量子干涉發(fā)揮著重要作用,因?yàn)樗试S與給定狀態(tài)相對應(yīng)的概率幅度相互干擾和抵消。量子干涉的這一特性使測量結(jié)果偏向于我們希望作為量子算法結(jié)果的一組狀態(tài)。同樣,量子糾纏允許人們在量子對象(尤其是量子位)之間創(chuàng)建強(qiáng)相關(guān)性,從而發(fā)揮量子算法的優(yōu)勢,正如您將在本章中看到的那樣。
在本章中,我們將研究量子算法,旨在了解這些算法相對于經(jīng)典算法的量子霸權(quán)。我們已經(jīng)在第一章中了解了量子隱形傳態(tài)算法以及使用量子并行性制定算法的方法。在本章中,我們將實(shí)現(xiàn)其他幾種量子計(jì)算算法,例如 Deutsch Jozsa、貝爾不等式、Bernstein-Vajirani 算法和 Grover 算法,以擴(kuò)大我們理解的量子算法的范圍。對于這些新算法,我們將首先研究它們的技術(shù)推導(dǎo),然后再進(jìn)行實(shí)現(xiàn)。我們將使用 Google 的 Cirq 作為實(shí)現(xiàn)這些算法的首選量子計(jì)算框架。然而,我們將在 IBM 的 Qiskit 中實(shí)現(xiàn)其中一些算法,以獲得多個量子計(jì)算框架的經(jīng)驗(yàn)。在這些量子計(jì)算框架中實(shí)現(xiàn)這些量子計(jì)算算法將為我們提供不同的視角,并有助于填補(bǔ)我們在研究其技術(shù)細(xì)節(jié)時可能存在的任何空白。
Cirq
Cirq 是 Google Research 于 2018 年發(fā)布的開源量子計(jì)算軟件庫。開發(fā)人員可以構(gòu)建和運(yùn)行包含所有相關(guān)一元、二元和三元門的量子算法。 Cirq 目前不提供對谷歌量子計(jì)算機(jī)的訪問。我們將使用 Cirq 的量子計(jì)算模擬器(稱為 Simulator)在本地執(zhí)行量子算法。
使用 Hadamard 門進(jìn)行 Cirq 仿真
讓我們首先通過簡單的量子電路模擬來熟悉 Cirq 語言。 Cirq 語言中的量子位通常使用 LineQubit 或 GridQubit 選項(xiàng)來定義。 LineQubit 允許您在一維晶格上定義量子位,而 GridQubit 允許您在二維晶格上定義量子位。
使用 Cirq 的 GridQubit 功能,我們定義一個在基本狀態(tài) |0? 處初始化的量子位,并應(yīng)用 Hadamard 變換就可以了。Cirq 中的 Hadamard 變換定義為 H 本身。然后,我們使用 Cirq 中的測量功能測量來測量計(jì)算基礎(chǔ)中的新狀態(tài)。測量不需要您像許多其他量子計(jì)算包中所要求的那樣顯式定義用于存儲測量結(jié)果的經(jīng)典寄存器。所有對量子位的操作都在 Cirq 中以量子電路的形式定義。定義電路后,您可以使用 Cirq Simulator 對同一電路運(yùn)行 100 次模擬并測量結(jié)果。Cirq 具有直方圖工具來獲取每個測量結(jié)果的計(jì)數(shù)。量子電路中的任何狀態(tài)測量都可以與密鑰綁定。一旦模擬器運(yùn)行,就可以通過鍵訪問結(jié)果,如清單 3-1 中的示例所示。
清單 3-1. 使用 Cirq 對量子位進(jìn)行 Hadamard 變換后的測量
# 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)下測量量子位的相同副本時,我們在狀態(tài) 0 下獲得 54 個測量值,在狀態(tài) 1 下獲得 46 個測量值,如圖3-1所示。
正如預(yù)期的那樣,在兩個計(jì)算基礎(chǔ)狀態(tài) 0 和 1 上的分布幾乎是均勻的。如果我們增加進(jìn)行測量的副本數(shù)量,每個狀態(tài)的概率將趨于 1/2 。如果 n 是我們進(jìn)行測量的量子態(tài)的副本數(shù),并且 Pn(0) 和 Pn (1) 是根據(jù)這 n 個副本的測量確定的概率,則以下情況成立:
現(xiàn)在讓我們針對不同的 n 值模擬前面的代碼,看看概率序列如何收斂到理想值。
我們創(chuàng)建一個名為 hadamard_state_measurement 的函數(shù)來計(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 中,我們通過對狀態(tài) 的相同副本的不同測量來計(jì)算狀態(tài) ∣0? 的概率。從圖 3-2 中的圖表可以看出,隨著副本數(shù)量從 100 增加到 500,狀態(tài) ∣0? 的概率逐漸向理論值 1/2 收斂,并且振蕩逐漸減小。
Qiskit
Qiskit 是 IBM 于 2017 年發(fā)布的開源量子計(jì)算軟件庫。Qiskit 代表量子信息科學(xué)套件,其量子計(jì)算堆棧中有四個主要組件,如下所列: ????????1. Qiskit Terra:它提供了構(gòu)建量子電路的所有基本組件。 ????????2. Qiskit Aer:您可以使用 Aer 工具開發(fā)噪聲模型來模擬真實(shí)量子計(jì)算設(shè)備中可能發(fā)生的真實(shí) 噪聲模擬。 Aer 還提供了 C++ 模擬器框架。 ????????3. Qiskit Ignis:這是一個用于分析和最小化量子電路中的噪聲的框架。 ????????4. Qiskit Agua:包含跨域算法和在量子真實(shí)設(shè)備或模擬器上運(yùn)行這些算法的邏輯。
在本書中,您將不時使用 Qiskit 編程語言。為了熟悉 Qiskit 的基本編碼語法,您將實(shí)現(xiàn)與前面在 Cirq 中所示相同的程序:測量 Hadamard 變換后的量子位。參見清單 3-3。
清單 3-3。使用 Qiskit 對量子位進(jìn)行 Hadamard 變換后的測量
"""
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)定義量子電路。此外,我們還通過 QuantumCircuit 選項(xiàng)定義電路本身時所需的量子位。 QuantumCircuit 選項(xiàng)的其他輸入是存儲測量結(jié)果所需的經(jīng)典位。由于我們正在測量等疊加的量子位的狀態(tài),因此我們將需要一個經(jīng)典位來進(jìn)行測量。與 Qiskit 中的 Cirq 不同,我們必須明確定義經(jīng)典寄存器或位來存儲測量結(jié)果。 Qiskit 中的 Hadamard 變換 H 是通過使用 QuantumCircuit 創(chuàng)建的電路來定義的。我們使用 Circuit.h(0) 在唯一的量子位上定義 Hadamard 變換。需要注意的一件事是,用于保存測量結(jié)果的經(jīng)典位并不隱式地與 Qiskit 上的量子位相關(guān)聯(lián),我們必須在使用電路的測量功能進(jìn)行測量時對此映射進(jìn)行編碼。我們使用的模擬器是從 Qiskit 中的 Aer 框架導(dǎo)入的。與 Cirq 中模擬量子電路的 run 命令非常相似,我們在 Qiskit 中使用執(zhí)行命令。
貝爾態(tài)的創(chuàng)建和測量
我們在第一章中討論了貝爾態(tài),同時討論了量子糾纏和量子隱形傳態(tài)等算法。兩個量子位 A 和 B 的貝爾狀態(tài)由下式給出:
在清單 3-4 中,我們首先對在狀態(tài) |ψ?_A= ∣0? 初始化的量子位 A 應(yīng)用哈達(dá)瑪變換 H,以創(chuàng)建疊加態(tài)來創(chuàng)建貝爾態(tài) 。然后,我們將受控非門(通常稱為 CNOT)應(yīng)用到基于量子位 A 作為控制位的狀態(tài) |ψ?_B = ∣0? 初始化的量子位 B 上。
清單 3-4。使用 Cirq 創(chuàng)建和測量貝爾狀態(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)來定義參與貝爾狀態(tài)的兩個量子位。清單 3-4 的輸出顯示量子電路是 cirq。在貝爾狀態(tài)的測量中,我們得到幾乎相等比例的整數(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)建和測量,如清單 3-5 所示。
清單 3-5。使用 Qiskit 創(chuàng)建和測量貝爾狀態(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 在測量 Bell 狀態(tài)時幾乎同等地采樣了狀態(tài) ∣00? 和 ∣11?。
量子隱形傳態(tài)?
量子隱形傳態(tài)是在不使用任何通信信道的情況下在發(fā)送者和接收者之間傳輸量子態(tài)的方法。與第一章一樣,我們將量子態(tài)的發(fā)送者命名為 Alice,將量子態(tài)的接收者命名為 Bob,以保持引用一致。圖 3-3 顯示了量子隱形傳態(tài)電路的高級電路。
我們在本章開頭指出,量子算法通過在量子位之間創(chuàng)建有意義的相關(guān)性來受益于量子糾纏。這些相關(guān)性的本質(zhì)比經(jīng)典系統(tǒng)所能實(shí)現(xiàn)的要強(qiáng)得多,因?yàn)榧词瓜喔魺o限大的距離,量子粒子也可以表現(xiàn)出高相關(guān)性。
在量子隱形傳態(tài)中,愛麗絲和鮑勃讓他們的控制量子位通過量子糾纏共享貝爾態(tài)。 Alice 想向 Bob 發(fā)送一個量子位狀態(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),就對 Alice 的雙量子位 Q1 和 Q2 應(yīng)用 CNOT 算子,其中 Q1 充當(dāng)控制量子位,Q2 充當(dāng)目標(biāo)量子位。 4. 對量子位 Q1 應(yīng)用 Hadamard 變換,然后測量 Alice 的量子位 Q1 和 Q2。我們將Q1和Q2的測量狀態(tài)表示為M1和M2。 5. 基于測量狀態(tài) M2 作為控制量子位,在 Bob 的量子位 Q3 上應(yīng)用 CNOT 算子。最后,對 Bob 的量子位 Q3 測量的狀態(tài) M1 應(yīng)用條件 Z 運(yùn)算符。 6. 在此階段,Bob 的量子位 Q3 具有 Alice 傳輸?shù)臓顟B(tài)∣ψ?。
我們在 Cirq 中實(shí)現(xiàn)量子隱形傳態(tài)算法,并通過傳輸相等的疊加態(tài)來說明它。一般情況下,要傳輸?shù)臓顟B(tài)∣ψ?可以通過將∣0?狀態(tài)轉(zhuǎn)換為所需狀態(tài)∣ψ?所需的電路來指定。為此,我們在Quantum_ teleportation 例程中使用qubit_to_send_op 變量。例如,傳輸?shù)券B加狀態(tài)變量,我們通過變量 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)被傳輸,我們就測量 Bob 的量子位 Q3,看看測量值的分布是否等于傳輸波形的概率分布。清單 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')
從測量結(jié)果中,我們看到Alice將等疊加狀態(tài)傳輸給了Bob。
量子隨機(jī)數(shù)發(fā)生器
經(jīng)典計(jì)算機(jī)中的大多數(shù)隨機(jī)數(shù)生成器并不是真正隨機(jī)的,因?yàn)樗鼈兪峭ㄟ^算法以確定性方式生成的,因此遵守可再現(xiàn)性規(guī)范。準(zhǔn)確地說,經(jīng)典的隨機(jī)數(shù)生成器從初始種子狀態(tài)開始,并且使用種子狀態(tài)生成的隨機(jī)數(shù)序列始終是相同的。因此,我們看到這些隨機(jī)數(shù)生成器生成的數(shù)字序列模仿了隨機(jī)數(shù)序列的屬性,同時是確定性的。這些確定性隨機(jī)數(shù)生成器例程稱為偽隨機(jī)生成器。偽隨機(jī)數(shù)具有可重復(fù)性和速度的優(yōu)點(diǎn),但不能安全地用于諸如使用隨機(jī)密鑰來安全傳輸數(shù)據(jù)的密碼學(xué)等應(yīng)用。
與偽隨機(jī)數(shù)生成器相反的是硬件隨機(jī)數(shù)生成器,它利用量子過程、光電效應(yīng)等物理過程生成隨機(jī)數(shù)。由于這些物理過程高度不可預(yù)測,因此它們?yōu)檎骐S機(jī)數(shù)奠定了良好的基礎(chǔ)可用于密碼學(xué)等安全應(yīng)用的生成器。
在本節(jié)中,我們將說明使用多個量子位的隨機(jī)整數(shù)生成器例程。這個想法很簡單,如下所示: 1. 確定表示要采樣的整數(shù)值范圍所需的量子位數(shù)量。例如,如果我們必須從 0 到 7 的八個整數(shù)中進(jìn)行采樣,則需要 log2 (8) = 3 個量子位。 2. 通過對最初處于 ∣0? 狀態(tài)的每個量子位應(yīng)用 Hadamard 變換來創(chuàng)建相等的疊加態(tài)。等疊加狀態(tài)由下式給出:這里∣x?代表計(jì)算基礎(chǔ)狀態(tài)∣x0 x1… xn ? 1? 的整數(shù)值。其中每個 xi ∈ {0, 1}。 3. 將計(jì)算基礎(chǔ)狀態(tài)映射到實(shí)際整數(shù)并將映射存儲在字典 s2n_map 中。如果要采樣的整數(shù)范圍從零開始,則從計(jì)算基礎(chǔ)狀態(tài)到實(shí)際整數(shù)的字典可以只是二進(jìn)制到十進(jìn)制的轉(zhuǎn)換,如下所示:如果范圍從偏移量 b 開始,我們可以將計(jì)算基礎(chǔ)狀態(tài)映射到要采樣的整數(shù)值,如下所示: 4. 一旦定義了映射,我們就可以對等疊加狀態(tài) |ψ? 進(jìn)行測量,并使用字典映射 s2n_map 將測量的計(jì)算基礎(chǔ)狀態(tài)映射到整數(shù)值。
在清單 3-7 中,我們使用 10 個量子位生成 0 到 210 之間的隨機(jī)數(shù)。由于我們從 0 開始采樣,因此我們算法的偏移量 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ù)生成器電路中,我們可以看到它包括對每個量子位應(yīng)用 Hadamard 算子,然后進(jìn)行測量。從量子隨機(jī)數(shù)生成器的輸出中,我們看到它生成的 20 個數(shù)字的樣本均值是 510.95。這接近隨機(jī)數(shù)采樣的數(shù)字的平均值,即假設(shè)均勻分布的 0 到 2^10。
Deutsch–Jozsa 算法實(shí)現(xiàn)
Deutsch-Jozsa 算法使用我們在第 1 章中簡要討論過的量子并行性。Deutsch-Jozsa 算法評估二元函數(shù)是否平衡或恒定。如果函數(shù) f(x) 的定義域中一半值的計(jì)算結(jié)果為 0,另一半計(jì)算結(jié)果為 1,則函數(shù) f(x) 被稱為平衡函數(shù)。常數(shù)函數(shù)對于其定義域中的所有值始終計(jì)算為相同的二進(jìn)制值 0 或 1。例如,如果我們使用三個量子位的系統(tǒng),我們可以有 2^3 = 8 個計(jì)算基礎(chǔ)狀態(tài),其形式為 ∣x1 x2x3?,其中每個 xi ∈ {0, 1}。如果我們在這八個計(jì)算基礎(chǔ)狀態(tài)上定義一個函數(shù) f (x) = f (x1 , x2, x3) ,并且其中一半計(jì)算結(jié)果為 1,另一半計(jì)算結(jié)果為 0,我們就說該函數(shù)是平衡的。圖 3-4 顯示了 Deutsch-Jozsa 算法的高級圖。
?Deutsch-Jozsa 算法的步驟可以總結(jié)如下: 1.基于函數(shù)的域的大小,我們定義輸入量子比特的數(shù)量。例如,如果f(x)的域有四個值,那么我們需要log2(4)= 2個量子位。所以一般來說,如果我們在函數(shù)的定義域中有2^n個值,我們需要使用n個輸入量子比特。此外,該算法需要一個目標(biāo)量子位來保持f(x)的值。 2. 通過對每個輸入量子位應(yīng)用 Hadamard 變換 H,將狀態(tài) |0?^?n 初始化的輸入量子位變換為相等疊加狀態(tài)。 3. 通過連續(xù)應(yīng)用 NOT 變換 X 和 Hadamard 變換 H,將在狀態(tài) |0? 初始化的目標(biāo)量子位變換為負(fù)狀態(tài) |??,如下所示:這為我們提供了輸入和目標(biāo)量子位的組合狀態(tài),如下所示: 4. 我們有一個預(yù)言機(jī) Uf,它將每個計(jì)算基礎(chǔ)狀態(tài)二進(jìn)制字符串 x 作為輸入,并在目標(biāo)量子位中輸出 f(x),如下所示:因此,對于任意計(jì)算基狀態(tài) ∣x?,|x? ? (| 0??| 1?) 上的酉變換 Uf 可以表示為: 當(dāng) f(x) = 0 時,我們有以下結(jié)果:當(dāng) f(x) = 1 時,我們有以下結(jié)果: 對于 f(x) 的任何二進(jìn)制值進(jìn)行推廣,我們有以下結(jié)果: 基于此,我們可以說,預(yù)言變換Uf在所有量子位的組合狀態(tài)∣ψ1?上的應(yīng)用可以表達(dá)如下: 這里要進(jìn)行的一個有趣的觀察是,通過在疊加中對目標(biāo)量子位應(yīng)用酉變換,我們可以獲得在全局階段中顯示的函數(shù)值 f(x)。這通常被稱為相位反沖技巧。 5. 接下來,我們對每個輸入量子位應(yīng)用哈姆達(dá)變換 H,這改變了輸入量子位的計(jì)算基礎(chǔ)。新狀態(tài) |ψ3 ? 如下所示: 新的計(jì)算基礎(chǔ) ∣z? 是對應(yīng)于 n 個輸入量子位的二進(jìn)制字符串 ∣z0 , z1…zn ? 1? 的整數(shù)表示。術(shù)語 x ⊙ z 指的是 x 和 z 模 2 的二進(jìn)制串之間的點(diǎn)積。 6. 我們對 |ψ3? 的幾個相同副本進(jìn)行測量,并將注意力集中在所有輸入量子位測量為零狀態(tài)的實(shí)例上,即 z0 = z1 = … = zn ? 1 = 0。此時我們可以忽略目標(biāo)量子位,因?yàn)樗臓顟B(tài)不與輸入量子位糾纏。該輸入量子位狀態(tài)的幅度如下: 從公式 3-13 中我們可以看出,如果函數(shù) f(x) 是平衡函數(shù),則幅度將為零,因?yàn)?f(x) = 0 對應(yīng)的 +1 會抵消 f(x) = 1對應(yīng)的 ?1 。這意味著對于平衡狀態(tài),我們將無法觀察到對應(yīng)于 z0 = z1 = … = zn ? 1 = 0 的狀態(tài) |z? = ∣0?。另一方面,如果我們有一個常數(shù)函數(shù),概率幅值為 1,我們最終會以 100% 的概率在測量中觀察到狀態(tài) |z? = ∣0?。
我們對函數(shù) f(x) 的域大小為 4 實(shí)現(xiàn) Deutsch-Jozsa 算法,這意味著我們需要兩個量子位用于輸入寄存器,一個量子位用于目標(biāo)寄存器。清單3-6顯示了詳細(xì)的代碼。預(yù)言機(jī)改造是通過預(yù)言機(jī)函數(shù)來實(shí)現(xiàn)的。
我們通過不對狀態(tài)∣ψ1?應(yīng)用任何變換來定義常量函數(shù)的預(yù)言。對狀態(tài)不應(yīng)用任何變換可以被認(rèn)為是通過預(yù)言機(jī) Uf 實(shí)現(xiàn)常數(shù)函數(shù) f(x) = 0 作為恒等變換。因此,恒等變換后的輸出狀態(tài)∣ψ2?等于輸入狀態(tài)∣ψ1?。
我們通過基于輸入量子位的狀態(tài)作為控制量子位對目標(biāo)量子位應(yīng)用 CNOT 變換來定義平衡函數(shù) f(x) 的預(yù)言。通過連續(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,對應(yīng)于∣11?的二進(jìn)制量子位狀態(tài)。由于我們的測量中沒有任何與 ∣00? 相對應(yīng)的狀態(tài),因此它證實(shí)了該函數(shù)確實(shí)是平衡的。
類似地,對于常數(shù)函數(shù),我們看到所有測量值都是 0,對應(yīng)于預(yù)期的二進(jìn)制量子位狀態(tài) ∣00?。
Bernstein-Vajirani算法?
Bernstein-Vajirani 算法可以被認(rèn)為是 Deutsch-Jozsa 算法的擴(kuò)展。與 Deutsch-Jozsa 算法非常相似,我們面臨一個未知函數(shù),該函數(shù)將 0 和 1 的二進(jìn)制字符串作為輸入,并輸出 0 或 1 的二進(jìn)制值。此外,假設(shè)函數(shù)輸出可以寫為如下:
Bernstein-Vajirani 算法的目標(biāo)是找出秘密二進(jìn)制字符串 定義函數(shù) s = s0, s1…sn ? 1。由于該函數(shù)是由其秘密字符串 s 定義的,因此我們將黑盒函數(shù)稱為 fs(x)。
在經(jīng)典的計(jì)算體系中,可以通過查詢黑盒函數(shù) n 次來找出秘密字符串。在n次中,每次只能將一個輸入位設(shè)置為1,其余設(shè)置為0,然后觀察輸出。例如,通過評估輸入模式 10000..0 的函數(shù),它將輸出秘密位 s0,因?yàn)橐韵虑闆r成立:
在量子計(jì)算范式中,我們可以像 Deutsch-Jozsa 一樣使用量子并行性,只需調(diào)用一次定義黑盒函數(shù)的預(yù)言機(jī)即可找出秘密字符串 s。我們將參考 Deutsch-Jozsa 電路中的圖 3-4,同時參考 Bernstein-Vajirani 算法中的不同中間狀態(tài),因?yàn)閮烧叩母呒夒娐穲D是相同的。
以下是Bernstein-Vajirani算法的詳細(xì)步驟: 1. 根據(jù)函數(shù) f(x) 的定義域,定義所需的輸入量子位數(shù)量。例如,如果函數(shù)有 2n 個輸入,那么我們將需要 n 個量子位。我們將所有輸入量子位初始化為狀態(tài)∣0?。我們還定義了一個在狀態(tài) ∣0? 初始化的目標(biāo)量子位。 我們對輸入量子位應(yīng)用 Hadamard 變換 H 來定義相等疊加態(tài)。 通過連續(xù)應(yīng)用 NOT 變換 X 和 Hadamard 變換 H,將目標(biāo)量子位變換為負(fù)狀態(tài)。 這為我們提供了輸入和目標(biāo)量子位的組合狀態(tài) |ψ1?(參見圖 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?(見圖 3-4),如下所示: 請參閱 Deutsch-Jozsa 算法,了解如何通過相位反沖技巧讓 f(x) 值顯示在全局相位中。 3. 與 Deutsch-Jozsa 算法一樣,我們對組合狀態(tài) ∣ψ2 ? 中的每個輸入量子位應(yīng)用 Hadamard 變換 H,以獲得狀態(tài) ∣ψ3?,如下所示: 在上式中,∣z? 表示 n 個輸入量子位的新計(jì)算基礎(chǔ)。術(shù)語 x ⊙ z 表示 x 和 z 模 2 的二進(jìn)制字符串表示形式之間的點(diǎn)積。 4. 我們知道函數(shù) fs(x) = s ⊙ x,因此我們可以重寫 |ψ3 ?,如下所示: 如果我們忽略目標(biāo)量子位并查看任何輸入計(jì)算基礎(chǔ)狀態(tài) ∣z? 的振幅,則振幅由以下公式給出: 5. 當(dāng)輸入計(jì)算基礎(chǔ)狀態(tài) z 等于秘密字符串 s 時,其幅度由下式給出: 由于 2 × s ⊙ x 可被 2 整除,因此 2 × s ⊙ x mod 2 始終等于 0。這給出了計(jì)算基礎(chǔ)狀態(tài) ∣z? = ∣s? 的幅度,如下所示: 6. 由于秘密字符串 s 對應(yīng)的計(jì)算基礎(chǔ)狀態(tài)的幅度為 1,因此如果我們測量輸入量子位,我們將以 100% 的概率得到狀態(tài) ∣s?。
我們以通用方式針對任意數(shù)量的輸入量子位實(shí)現(xiàn) Bernstein-Vajirani 算法,并針對六個輸入量子位執(zhí)行該算法。六個量子位的函數(shù)域中的輸入數(shù)量為 2^6 = 64。對于相應(yīng)秘密位設(shè)置為 1 的每個輸入量子位,我們對目標(biāo)量子位應(yīng)用 CNOT 變換,并將輸入量子位作為控制量子位。該變換確保每當(dāng)秘密字符串 s 和計(jì)算基礎(chǔ)狀態(tài)字符串 x 之間的點(diǎn)積為偶數(shù)時,目標(biāo)量子位上的結(jié)果變換為零。另一方面,當(dāng)該點(diǎn)積為奇數(shù)時,目標(biāo)量子位將進(jìn)行 NOT 運(yùn)算??偨Y(jié)一下,這個轉(zhuǎn)換實(shí)現(xiàn)了Oracle轉(zhuǎn)換:
當(dāng)秘密字符串 s 和計(jì)算基礎(chǔ)狀態(tài)字符串 x 之間的點(diǎn)積為偶數(shù)時,則 fs(x) = 0,因此 |fs (x) ⊕ y? = ∣y?。正如我們在這種情況下看到的,目標(biāo)量子位 ∣y? 的狀態(tài)保持不變。當(dāng)點(diǎn)積為奇數(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 算法在測量輸入量子位時以 100% 的概率正確識別了秘密字符串 111011。建議讀者針對較大的域大小執(zhí)行該算法,并查看該算法是否按預(yù)期工作。
貝爾不等式檢驗(yàn)?
貝爾的不等式檢驗(yàn)說明??了這樣一個事實(shí):通過使用量子糾纏,人們可以實(shí)現(xiàn)比無法相互通信的兩方或多方之間經(jīng)典的相關(guān)性更強(qiáng)的相關(guān)性。盡管糾纏可以在兩個量子物體之間產(chǎn)生強(qiáng)相關(guān)性,但它本身在通信中并沒有什么用處,因?yàn)閮H對一個量子物體進(jìn)行糾纏態(tài)測量就可以使另一個量子物體的測量完全確定性。例如,對于 Alice 和 Bob 共享的 Bell 狀態(tài),Alice 對 ∣0? 或 ∣1? 的測量完全決定了 Bob 量子位的狀態(tài),反之亦然。然而,如果Alice和Bob都可以在糾纏后進(jìn)行測量并影響測量的最終結(jié)果,那么Alice和Bob之間就可以創(chuàng)建有用的相關(guān)性,這在經(jīng)典設(shè)置中是不可能的。我們將通過愛麗絲和鮑勃之間的合作游戲來激發(fā)貝爾不等式檢驗(yàn)。然而,在我們進(jìn)行貝爾不等式測試之前,讓我們推斷出如果 Alice 在|α?正交基 , ∣α⊥ ? 中測量她的量子位,而 Bob 在|β? 正交基 ∣β⊥ ? 中測量他的量子位,則得出不同結(jié)果的概率, 假設(shè)它們共享貝爾狀態(tài).需要了解這些概率才能提出合作博弈的獲勝策略。
我們將 Alice 基的一般測量基礎(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ǔ) {|α?, |α⊥?} 中寫出 ∣0? 和 ∣1?,如下所示:
類似地,我們可以在另一個基組 {|β ?, |β⊥?} 中表示 |0? 和 |1?,其中 β 是基狀態(tài) |β ? 與 |0? 狀態(tài)所成的角度,如下所示:
現(xiàn)在,如果 Alice 在 {|α?, |α⊥ ?} 基礎(chǔ)上測量她的量子位,而 Bob 在 {|β?, |β⊥?} 基礎(chǔ)上測量他的量子位,則糾纏貝爾態(tài)可以用以下形式表示下列的:
表 3-2 顯示了 Alice 的測量基礎(chǔ)狀態(tài)(即 {|α?, |α⊥?})和 Bob 的測量基礎(chǔ)狀態(tài)(即 {|β?, |β)的每個結(jié)果的概率⊥?}。
現(xiàn)在讓我們討論 Alice 和 Bob 之間的合作博弈來說明貝爾不等式檢驗(yàn)。游戲由兩名玩家(愛麗絲和鮑勃)和一名裁判組成。 Alice和Bob相隔很遠(yuǎn),他們之間沒有任何溝通渠道。在每一輪中,裁判向 Alice 發(fā)送一個 x1 位,向 Bob 發(fā)送一個 x2 位。根據(jù)接收到的位,Alice 和 Bob 應(yīng)該分別返回位 a(x1) 和 b(x2 )。如果滿足以下條件,愛麗絲和鮑勃將贏得本輪:
表 3-3 顯示了所有 x1 和 x2 對贏得比賽的真值表。
在經(jīng)典世界中,Alice 和 Bob 能夠想出的最佳策略最多 75% 的情況下會贏得比賽。這里,這些策略類似于 Alice 和 Bob 用于發(fā)回比特的決策函數(shù) a(x1 ) 和 b(x2 )。人們可以驗(yàn)證愛麗絲和鮑勃在經(jīng)典意義上玩的最佳策略是發(fā)回相同的位。因此,成功概率為 75% 的兩種最佳策略如下:
現(xiàn)在讓我們看看 Alice 和 Bob 是否可以通過量子策略做得更好,因?yàn)樗麄児蚕碡悹枒B(tài)。這是一種這樣的策略:
1. 如果 Alice 收到位 x1 = 0,她會在與 α = 0 相關(guān)的 { ∣0?, ∣π/2?} 基礎(chǔ)上測量她的量子位,這給了我們標(biāo)準(zhǔn) {|0?,| 1?}計(jì)算基礎(chǔ)。如果她收到位 x1 = 1,她會在 { ∣π/4 ?, ∣3π/4?} 基礎(chǔ)上測量她的量子位。 2. Bob 選擇類似的策略,根據(jù)他是否收到位 x2,他在 { ∣π/8 ?, ∣5π/8?} 或 { ∣? π/8 ?, ∣3π/8?} 中測量量子位= 0 或 x2 = 1。
對于每個測量的基礎(chǔ) {|k?, | k⊥ ?} Alice 和 Bob 會發(fā)回 0(表示 |k?)和 1(表示 ∣k⊥?)。這是很重要的一點(diǎn),因?yàn)樗鼘⒋_定 Alice 和 Bob 返回的 a(x1 ) 和 b(x2 ) 的值。
當(dāng)x1=0時,x2=0 現(xiàn)在 |α = 0? ? ∣β = π/8? 對應(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) 時,概率為
相似地
另外,|α⊥, α = 0? ? ∣β⊥, β = π/8? 對應(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) 時,概率為。
結(jié)合上面兩個公式,我們可以說,當(dāng) (x1 = 0, x2 = 0) 時,Alice 和 Bob 有獲勝概率。
當(dāng)x1 = 0,x2 = 1時:
現(xiàn)在 |α = 0? ? ∣β = ? π/8? 對應(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) 時,概率為。
相似地,
狀態(tài) |α⊥, α = 0? ? ∣β⊥, β = ? π/8? 對應(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é)合公式,我們可以說,當(dāng) (x1 = 0, x2 = 1) 時,Alice 和 Bob 有獲勝概率。
類似地,使用所采用的策略可以推斷出,對于其余兩個條件 (x1 = 1, x2 = 0) 和 (x1 = 1, x2 = 1),Alice 和 Bob 的獲勝概率為。建議讀者對這兩個條件進(jìn)行數(shù)學(xué)計(jì)算,并驗(yàn)證該說法是否正確。
因此,對所有可能的位 x1 和 x2 組合使用所采用的策略,Alice 和 Bob 設(shè)法發(fā)回 a(x1) 和 b(x2 ),以確保 a(x1 ) ⊕ b(x2 ) = x1 x2 的概率。這高于經(jīng)典設(shè)置中可實(shí)現(xiàn)的最大獲勝概率 0.75。
我們通過對清單 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 的問題中,我們得到一個函數(shù) f(x),其訪問僅限于通過黑盒變換 Uf 進(jìn)行查詢,就像 Deutsch-Jozsa 和 Bernstein-Vajirani 算法中的那樣。作為西蒙問題的一部分,我們需要執(zhí)行以下操作: 1. 判斷該函數(shù)是否是一對一函數(shù),即輸入的每個值都映射到唯一的輸出。 2. 判斷該函數(shù)是否為二對一函數(shù),即輸入的每個值正好映射到兩個輸入。當(dāng)函數(shù)為二對一時,存在一個秘密二進(jìn)制字符串 s 將具有相同輸出的每對輸入 x1 和 x2 聯(lián)系起來,即 f(x1 ) = f(x2 ) 當(dāng)且僅當(dāng) x1 ⊕ x2 = s。我們需要為已識別的二對一函數(shù)確定秘密字符串 s。 3.此外,假定輸入函數(shù)將始終是一對一函數(shù)或二對一函數(shù)。
西蒙算法是其他重要算法的先驅(qū),例如用于整數(shù)素因數(shù)分解的肖爾算法。圖 3-5 展示了 Simon 算法的高級流程圖。
以下是與西蒙算法相關(guān)的步驟: 1. 我們根據(jù)問題的領(lǐng)域從 n 個輸入量子位開始。此外,我們定義一組 n 個量子位作為目標(biāo)量子位來保存 f(x) 的值。所有量子位都初始化為零。 2n 個量子位的初始狀態(tài)可以寫成如下: 2. 我們對每個輸入量子位應(yīng)用 Hadamard 變換,為輸入創(chuàng)建相等的疊加態(tài)。 Hadamard 變換后 2n 個量子位的組合狀態(tài)由下式給出: 3. 在下一階段,我們通過 Oracle 變換 Uf 將函數(shù) f(x) 應(yīng)用于每個計(jì)算基礎(chǔ)狀態(tài) x = xo x1…xn ? 1。因此,對于每個計(jì)算基礎(chǔ)狀態(tài)|x?,我們有: 在上式中,|y? 是 n 個目標(biāo)量子位中每一個的初始狀態(tài),因此 y = 0。這給我們提供了新狀態(tài) |ψ2 ?,如下所示: 請注意,與之前的算法不同,Simon 算法中沒有相位反沖,因?yàn)槲覀冊O(shè)置了目標(biāo)量子位的初始狀態(tài) y = 0。
我們對輸入量子位應(yīng)用 Hadamard 變換以獲得最終狀態(tài) ∣ψ3 ?,如下所示:
4. 現(xiàn)在讓我們看看當(dāng)秘密字符串 s = 0000…0 時會發(fā)生什么,即函數(shù)是一對一的。當(dāng)函數(shù)是一對一函數(shù)時,f(x) 的每個值都與特定的輸入字符串 x 相關(guān)聯(lián)。因此,如果我們測量目標(biāo)量子位并觀察 ∣f(x)?,我們將只得到一個對應(yīng)的 x。對于每個輸入 ∣z? 狀態(tài),假設(shè)我們已經(jīng)觀察到目標(biāo)量子位的狀態(tài)為 ∣f(x)?,則概率幅度由 給出。因此,給定 ∣z? 狀態(tài)的相應(yīng)概率,我們觀察到目標(biāo)量子位的狀態(tài)為 ∣f(x)?,由 給出。由于所有 z 的概率相同,因此我們在每個目標(biāo)量子位狀態(tài) f(x) 的輸入狀態(tài) z 上得到均勻分布。 5. 現(xiàn)在我們討論秘密字符串s不全零的情況;即,該函數(shù)是二對一函數(shù)。一旦我們測量了目標(biāo)量子位并觀察了狀態(tài) ∣c?,就會有兩個 x 值,例如 x1 和 x2,這將給出 f(x1 ) = f(x2 ) = c。對于目標(biāo)量子位的每個測量狀態(tài) c,每個輸入量子位狀態(tài) ∣z? 的概率幅度由以下給出: 對于任何狀態(tài) ∣z? 具有非零概率幅度,以下應(yīng)該成立: 對于二對一函數(shù),我們知道 x1 和 x2 由關(guān)系 x1 ⊕ x2 = s 綁定,這也意味著 x2 = x1 ⊕ s?,F(xiàn)在讓我們通過替換 x2 = (x1 ⊕ s) 來簡化 x1 ⊙ z = x2 ⊙ z。 由于兩邊都有 x1 ⊙ z,因此恒等式簡化為 s ⊙ z = 0。 這意味著當(dāng)我們獲得測量任何輸入狀態(tài) z 的非零概率時,則 s ⊙ z = 0 。 我們可以測量輸入量子位并觀察 n 個不同的 z 值。根據(jù)觀察到的 z 值,我們可以求解一組 n 個方程,如下所示,以找到秘密字符串: 這n個方程可以通過高斯消元法等算法方便地求解。 清單 3-11 說明了 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) 值(存儲在組合 |x?|f(x)? 狀態(tài)的最后 3 位中)的兩個結(jié)果,就可以輕松找到秘密字符串?;鸩瘛H绻覀?nèi)蓚€結(jié)果 111010 和 001010,我們可以看到兩個結(jié)果的輸出位相同并且等于 010。因此,如果我們對兩個輸入 111 和 001 進(jìn)行模 2 加法,我們將得到我們的密碼。因此,密碼是 111 ⊕ 001,這給我們 110,它與我們選擇的密碼相匹配。建議讀者編寫一個小函數(shù),使用類似的邏輯自動執(zhí)行密鑰查找過程。?
格羅弗算法
量子計(jì)算相對于經(jīng)典計(jì)算的潛在優(yōu)勢之一是它訪問數(shù)據(jù)庫元素的速度。格羅弗算法就是這樣一種算法,它可以在從數(shù)據(jù)庫中搜索項(xiàng)目時提供二次加速。 Grover 的算法使用幅度放大技巧,這不僅有助于數(shù)據(jù)庫搜索任務(wù),而且可以廣泛用于多種應(yīng)用。
假設(shè)數(shù)據(jù)庫中有 N = 2^n 個項(xiàng)目,并且我們想要搜索由 k 索引的項(xiàng)目,我們將其稱為獲勝者。我們可以通過對應(yīng)于 n 個輸入量子位的計(jì)算基礎(chǔ)狀態(tài) ∣x? 來定義 N 個項(xiàng)目。預(yù)言機(jī)在每個計(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? 上工作的酉算子,如下所示: 對于計(jì)算基礎(chǔ)狀態(tài)∣k?引用的獲勝項(xiàng),Oracle變換的效果如下所示:
現(xiàn)在我們已經(jīng)了解了有關(guān)預(yù)言機(jī)的一些信息,讓我們看看 Grover 算法的步驟: 1. 基于數(shù)據(jù)庫中的項(xiàng)目數(shù)量 N = 2n,我們使用 Hadamard 變換定義 n 個量子位上的相等疊加狀態(tài),初始化為 |0??n,即。我們還將在 ∣0? 處初始化的目標(biāo)量子位設(shè)置為負(fù)狀態(tà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)。通過我們在 Deutsch-Jozsa 算法中說明的相位反沖技巧,將 Uf 應(yīng)用于 |ψ1? 可以得到 ∣ψ2 ?。經(jīng)過預(yù)言酉 Uf 變換后的狀態(tài) ∣ψ2 ? 由下式給出: 可以看到,目標(biāo)量子位狀態(tài)保持不變,我們能夠得到每個計(jì)算基礎(chǔ)狀態(tài)∣x?對應(yīng)的階段的函數(shù)值f(x)。因此,展望未來,我們可以丟棄目標(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ù)為 1,其他地方為 0。 3. 我們可以想到等疊加態(tài)作為兩個相互正交的向量的線性組合:搜索到的或獲勝的項(xiàng)目,我們用 ∣k? 表示,向量 ∣c? 是通過刪除向量分量獲得的單位向量∣k? 來自等疊加態(tài) |ψin ?。圖 3-6(a) 說明了這一點(diǎn)。 這允許我們在兩個向量 ∣k? 和 |c? 的范圍內(nèi)寫 |ψin?(見圖 3-6(a)),如下所示: 4. 現(xiàn)在,一旦我們對狀態(tài)∣ψin?應(yīng)用預(yù)言變換Uf,與獲勝項(xiàng)狀態(tài)∣k?對應(yīng)的階段就會乘以-1,因此輸出狀態(tài)∣ψmid?可以表達(dá)如下: 因此,酉預(yù)言變換 Uf 基本上具有對向量 ∣c? 進(jìn)行反射的效果,如圖 3-6(b) 所示。反射具有否定獲勝狀態(tài)∣k?振幅的效果。 5. 最后,我們將向量 |ψmid? 反映在向量 |ψeq ? 上,其中 |ψeq? 是 n 個量子位的相等疊加狀態(tài),即 。沿向量 |ψeq? 的反射由以下公式給出:變換。在 |c? 和 |k? 的二維基礎(chǔ)上,我們可以將 |ψeq? 寫為。這使得酉變換 U eqψ 如下: 將酉變換 Uψeq 應(yīng)用于 |ψmid?,即 ∣c? 和 ∣k? 的二維基礎(chǔ)中的 [cosθ ? sinθ]T,我們得到 ∣ψo(hù)ut?,如下所示: 因此,通過連續(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ψ ,使我們能夠通過向獲勝者狀態(tài) ∣k? 放大幅度來收斂到該狀態(tài)。我們可以將這兩個變換組合為 UUeq f ψ 并將其稱為 Grover 變換 G。因此,如果我們應(yīng)用 Grover 變換進(jìn)行 m 次迭代,則最終輸出狀態(tài)將非常接近∣k?。 當(dāng)我們使用屬于具有四個項(xiàng)目(即 N = 4)的預(yù)言機(jī)的雙輸入量子位時,我們有以下結(jié)果: 因此,獲勝項(xiàng)目的初始幅度為 1/2,相應(yīng)的概率為 1/4。由于 sinr=1/2 ,這意味著 θ = 30°。經(jīng)過酉變換 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. 我們需要一種方法來根據(jù)量子算子提出酉變換 Uψeq 。就Hadamard門而言,Uψeq 可以寫成如下: 現(xiàn)在 H?n|0??n 什么都不是,而是 n 個量子位的相等疊加狀態(tài),因此其中 N = 2n。此外,由于 Hadamard 變換 H 是冪等的,我們有 H2 = I。使用此信息,我們可以重寫公式 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? 反射的酉變換,剩下的就是找到一種方法來實(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),讓我們看看這個變換對基本狀態(tài) ∣x? 有何作用。 因此,當(dāng)基礎(chǔ)狀態(tài)不是 |0??n 時,變換會翻轉(zhuǎn)相位。 這種條件相翻轉(zhuǎn)算子可以通過使用 CNOT、X 和 H 門的組合來實(shí)現(xiàn),正如我們將在兩個量子位的 Grover 算法實(shí)現(xiàn)過程中看到的那樣。 10. 請注意,僅在 Grover 變換的第一次迭代中,Grover 變換 |ψin ? 的輸入狀態(tài)才等于 |ψeq?。您不應(yīng)該假設(shè)在每次迭代中都會出現(xiàn)這種情況,因?yàn)閺牡诙蔚_始,Grover 迭代的 ∣ψin ? 狀態(tài)會有所不同。
現(xiàn)在我們已經(jīng)詳細(xì)討論了 Grover 算法的所有不同方面,我們可以將 Grover 算法的高級流程圖放在一起,如圖 3-7 所示。
如前所述,我們使用數(shù)據(jù)庫大小 4 來實(shí)現(xiàn) Grover 算法。此外,我們構(gòu)建 oracle Uf 來搜索元素 01 以供說明。對于預(yù)言機(jī)的廣義實(shí)現(xiàn),我們反轉(zhuǎn)獲勝者元素位為零所對應(yīng)的輸入量子位的狀態(tài)。這確保獲勝者計(jì)算基礎(chǔ)狀態(tài)轉(zhuǎn)換為 |1??n 給出的所有 1 狀態(tài),其中 n 是輸入量子位的數(shù)量。在下一步中,我們基于所有輸入量子位作為控制量子位,對目標(biāo)量子位應(yīng)用條件 NOT 變換。由于獲勝者計(jì)算基礎(chǔ)狀態(tài)為 |1??n ,因此目標(biāo)量子位上的條件 NOT 變換只會為獲勝者狀態(tài)設(shè)置 f(x) = 1。由于相位反沖,為獲勝者計(jì)算狀態(tài)設(shè)置 f(x) = 1 將在其幅度中引入所需的 -1 翻轉(zhuǎn)因子。條件 NOT 變換是通過使用 Toffoli 門來實(shí)現(xiàn)的。一旦實(shí)現(xiàn)所需的翻轉(zhuǎn),我們需要撤消條件 NOT 運(yùn)算,以便獲勝者計(jì)算基礎(chǔ)狀態(tài)從 |1??n 恢復(fù)到其原始值。
該算法的另一個重要部分是構(gòu)建反射算子 U eqψ ,它將反映在關(guān)于相等疊加狀態(tài) ∣ψeq? 的預(yù)言變換 Uf 后獲得的狀態(tài) ∣ψmid? 。我們可以按照圖 3-8 中 Grover 算法電路圖所示的方式實(shí)現(xiàn)這一點(diǎn),數(shù)據(jù)庫大小為 4。預(yù)言 Uf 和彎曲算子 U eqψ 形成了 Grover 迭代器。通過 Grover 迭代器的幾輪應(yīng)用,人們應(yīng)該能夠以高概率測量獲勝者狀態(tài)。對于由使用兩個量子位的計(jì)算基礎(chǔ)狀態(tài)索引的四個項(xiàng)目組成的數(shù)據(jù)庫,我們在一個 Grover 迭代器中收斂到獲勝者狀態(tài)。
建議讀者采用包括∣00?在內(nèi)的不同基態(tài),并驗(yàn)證條件相位翻轉(zhuǎn)算子是否按預(yù)期工作。 Grover 算法的一次迭代足以收斂到獲勝者狀態(tài) 01,正如我們之前在圖 3-8 中看到的那樣。具體實(shí)現(xià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 算法。通過利用疊加、糾纏、干涉以及與量子力學(xué)相關(guān)的其他微妙之處的量子力學(xué)特性,所有這些量子算法在計(jì)算上比經(jīng)典算法更高效。建議讀者徹底了解不同的算法及其基礎(chǔ)數(shù)學(xué),以便更好地理解計(jì)算的量子范式。
在下一章中,我們將研究基于量子傅立葉變換的算法,這些算法構(gòu)成了量子計(jì)算和量子機(jī)器學(xué)習(xí)范式中一組重要算法的支柱。期待您的參與!
量子傅立葉變換及相關(guān)算法
在本章中,我們將研究量子傅里葉變換及其在不同量子算法中的應(yīng)用。對于經(jīng)典計(jì)算機(jī)來說,將整數(shù)因式分解為素?cái)?shù)或求周期等問題是計(jì)算上難以解決的問題,因?yàn)樯婕暗倪\(yùn)算數(shù)量呈指數(shù)級增長。使用很大程度上基于量子傅立葉變換的量子相位估計(jì)算法可以有效地解決整數(shù)因式分解和周期查找。另外,由于量子相位估計(jì)的目的是找到與酉算子的特征向量相對應(yīng)的特征值,因此它是優(yōu)化中重要算法的支柱,例如 HHL 算法(以 Hassim、Harrow 和 Lloyd 命名),用作矩陣求逆量子計(jì)算中的例行公事。我們首先修改傅里葉變換及其離散對應(yīng)物離散傅里葉變換的概念,然后繼續(xù)討論令人興奮的量子傅里葉變換和量子相位估計(jì)算法領(lǐng)域。接下來我們討論和實(shí)現(xiàn)一些與量子傅里葉變換相關(guān)的算法,例如分解數(shù)字和周期查找。在本章的最后,我們簡要介紹了群論的基礎(chǔ)知識,試圖解釋隱藏子群問題以及它與幾種基于傅里葉變換的算法的關(guān)系。
傅立葉級數(shù)
實(shí)數(shù)變量的周期函數(shù)可以展開為正弦和余弦形式的傅立葉級數(shù),或者一般而言復(fù)指數(shù)函數(shù)的形式。我們可以將這樣一個在長度為 L 的周期后重復(fù)自身的周期函數(shù) f(x) 用傅立葉級數(shù)展開形式表示如下:
任何函數(shù) f(x) 都可以被視為其域中不同 x 值的函數(shù)值向量。如果 x 是實(shí)數(shù),則在任何給定區(qū)間內(nèi) x 的值有無數(shù)個,并且該函數(shù)可以被視為無限維向量。式4-1中代入不同k值得到的指數(shù)函數(shù)充當(dāng)基函數(shù),就像矢量基一樣。對于域區(qū)間 [a, b] 上的任意兩個函數(shù) f 和 g,該函數(shù)空間中的點(diǎn)積(其中 L = b ? a)由以下給出:
其中 f(x)* 表示 f(x) 的復(fù)共軛函數(shù)。讓我們計(jì)算對應(yīng)于 k = k1 和 k = k2 值的兩個復(fù)指數(shù)函數(shù) gk1 和 gk2 的點(diǎn)積。
由于 k1 、 k2 是實(shí)數(shù)離散值,因此對于 k1 和 k2 的所有可能值,k2 ? k1 = t 始終是整數(shù)。這里強(qiáng)調(diào)了兩種可能性。 情況 1:當(dāng) k2 ≠ k1 時,k2 ? k1 是非零整數(shù)。對于 k2 ? k1 的任何非零整數(shù)值,。這使得上式 4-3 中的點(diǎn)積表達(dá)式為零。 情況 2:當(dāng) k2 = k1 時,k2 ? k1 = 0。我們不能直接代入公式 4-3 中的 k2 ? k1 = 0,因?yàn)橛?0 代入分母 k2 ? k1 會使表達(dá)式不確定。我們可以評估的是? 的極限,因?yàn)?k1 ? k2 → 0。
我們可以從公式 4-4 和公式 4-6 推斷,復(fù)指數(shù)函數(shù) 構(gòu)成所有具有基本周期長度 L 的周期函數(shù)的正交基。另外,我們從方程 4-6 中注意到,由 給出的 gk 范數(shù)的平方是 L。我們可以通過其范數(shù) 對 gk(x) 進(jìn)行歸一化,以便給出指數(shù)基函數(shù)由具有單位范數(shù),因此形成正交基。
k 項(xiàng)可以解釋為某種形式的頻率。不同的 k 值會導(dǎo)致具有多個頻率的周期函數(shù)中的不同諧波。
對應(yīng)于不同頻率 k 的每個諧波的系數(shù)可以計(jì)算為 f(x) 與單位基向量 hk(x) 的點(diǎn)積,如下所示:
傅里葉變換
傅里葉變換是傅里葉級數(shù)的自然擴(kuò)展,我們嘗試用復(fù)指數(shù)函數(shù)來表示非周期函數(shù)。您可以將非周期函數(shù)視為周期長度 L → ∞ 的函數(shù),因此由 a 和 b 表示的一個周期 L 的下限和上限分別趨向于 ?∞ 和 +∞。類似地,非周期函數(shù)中的諧波不再是離散的,而是占據(jù)連續(xù)的頻率。非周期函數(shù)的傅里葉變換表示可以寫成傅里葉級數(shù)的極限情況,如下所示:
可以將? 代入得到傅里葉變換表示如下:
為了在不同的變換中用 k 一致地引用頻率變量,讓我們再次將變量 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ù)的傅里葉變換將成為其傅里葉級數(shù)表示。
離散傅里葉變換
我們之前定義的傅里葉變換僅適用于連續(xù)函數(shù)。如果我們有一個針對離散輸入變量的函數(shù) ,我們可以使用離散傅立葉變換。任何函數(shù)都可以用其離散傅里葉變換 (DFT) 展開表示如下:
離散傅里葉變換的頻率響應(yīng)函數(shù)如下所示:
克羅內(nèi)克德爾塔函數(shù)
克羅內(nèi)克增量(見圖 4-1)是一個僅當(dāng)離散變量 n 的值 m 時才等于 1 的函數(shù)。對于 n 的所有其他值,該函數(shù)的值為 0。
克羅內(nèi)克德爾塔函數(shù)可以被認(rèn)為是 N 維向量,僅在 n 的一個離散值時才假設(shè)值為 1。當(dāng) m ≠ 0時,兩個克羅內(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)克德爾塔函數(shù)寫為單位向量 |j?。這將公式 4-16 中離散函數(shù)的表示簡化為以下形式:
克羅內(nèi)克增量的這種矢量表示將在量子傅里葉變換公式中派上用場。
使用 Kronecker Delta 函數(shù)激發(fā)量子傅立葉變換
克羅內(nèi)克 delta 函數(shù)的頻率響應(yīng)可使用公式 4-15 計(jì)算如下:
根據(jù)頻率響應(yīng),我們可以使用離散傅立葉變換展開式(參見公式 4-14)將寫成如下: 與傅里葉級數(shù)一樣,即使在不同 k 值的離散傅里葉變換的情況下,復(fù)指數(shù)函數(shù)也會形成標(biāo)準(zhǔn)正交基。我們可以將這些復(fù)指數(shù)函數(shù)表示為單位范數(shù)的 N 維基向量,并使用狄拉克符號將它們表示為 |k?。換句話說,我們有這個: 復(fù)指數(shù)函數(shù)的這種向量表示允許我們將公式 4-19 中的函數(shù)表示簡化如下: 或者,我們可以將表示為克羅內(nèi)克 delta 基中的 |m?,因此方程 4-21 可以寫成全基方程,如下所示: 量子傅立葉變換被視為兩組基函數(shù)之間的變換:空間或時域基函數(shù)由 Kronecker delta= |m? 給出,頻率基函數(shù)由指數(shù)給出。 在這方面,方程 4-22 是一個重要的表示,因?yàn)榱孔痈盗⑷~變換是酉變換 U,它采用 |m? 給出的任何廣義空間或時域基函數(shù),并用頻域基 |k? 表示它,所示這里: 由于傅里葉變換酉算子 U 是線性的,任何離散函數(shù)的傅里葉變換都可以計(jì)算為傅里葉級數(shù)變換在其基函數(shù)上的線性和,如下所示: 替換 U| j? 根據(jù)4-24中的公式4-23,我們有: 現(xiàn)在是頻率 k 的傅里葉頻率響應(yīng),我們可以用表示。替換為,我們看到公式 4-25 可以寫成如下: 通過寫。在克羅內(nèi)克 delta 的基礎(chǔ)上,我們可以將公式 4-26 重寫如下: 公式 4-27 為我們提供了一種通用方法,通過了解譜/時域和頻域之間的基函數(shù)關(guān)系,對任何給定的離散函數(shù)執(zhí)行傅立葉變換。需要注意的一件事是,酉變換 U 只是改變了進(jìn)行傅里葉變換的函數(shù)的表示基礎(chǔ)。正如我們將在本章的其余部分中看到的那樣,我們需要理解并執(zhí)行量子傅里葉變換,就需要這種傅里葉變換方法。
量子傅里葉變換
在本節(jié)中,我們將研究量子傅里葉變換電路,以了解傅里葉變換在量子計(jì)算領(lǐng)域中到底是如何工作的。使用 n 個量子位,我們可以定義 |x1 x2…xn? = ∣x? 形式的計(jì)算基礎(chǔ),其中 x 是二進(jìn)制字符串 x1x2…xn 的十進(jìn)制展開,由以下給出:
使用 n 個量子位,我們可以獲得個計(jì)算基礎(chǔ)狀態(tài)。 明確地說,每個量子位的計(jì)算基礎(chǔ)狀態(tài)由 xi ∈ {0, 1} 表示。 您需要了解圖 4-2 中的傅立葉變換電路對任何廣義計(jì)算基礎(chǔ)狀態(tài) |x? = |x1x2…xn? 的變換。計(jì)算基礎(chǔ)狀態(tài)|x?只不過是克羅內(nèi)克δ函數(shù)。 量子電路中使用的門是哈達(dá)瑪門H和旋轉(zhuǎn)門,如下所示: 我們從第一個量子位開始,看看電路中各個門對其狀態(tài)的轉(zhuǎn)換。 Hadamard 門 H 將量子位的狀態(tài)從 |? 更改為。 我們可以將 -1 的值替換為或更方便地替換為。這讓我們可以重寫量子位的狀態(tài),如下所示:
?現(xiàn)在就像我們將二進(jìn)制字符串寫成整數(shù)形式一樣,類似地我們可以采用符號來表示二進(jìn)制分?jǐn)?shù),如下所示: 使用這個符號,我們可以寫成作為。因此,哈達(dá)瑪乘積(在公式 4-31 中)之后的量子位 1 的狀態(tài)可以重寫如下:
?接下來,以狀態(tài) |? 的第 m 個量子位的值為條件,連續(xù)應(yīng)用旋轉(zhuǎn)矩陣。以狀態(tài) |? 中第 m 個量子位的值為條件的變換可以表示如下: 如果量子位 m 處于狀態(tài) |0?,則指數(shù)項(xiàng)變?yōu)?,因此條件變換變?yōu)楹愕茸儞Q。使用公式 4-32,第二個量子位進(jìn)行條件變換后第一個量子位的狀態(tài)可以寫成如下: 現(xiàn)在可以寫成。因此,簡化為,并且以第二個量子位為條件的旋轉(zhuǎn) R2 后第一個量子位的狀態(tài)變?yōu)槿缦拢?/p>
如此下去,經(jīng)過所有條件旋轉(zhuǎn)后,量子位 1 的狀態(tài)可以表示為:
?現(xiàn)在我們將注意力轉(zhuǎn)移到第二個量子位的轉(zhuǎn)換上。如果觀察圖 4-2,我們會發(fā)現(xiàn)量子位 2 重復(fù)了與量子位 1 相同的變換模式。因此,通過歸納,我們可以將量子位 2 上的變換寫成如下:
?一般來說,對于任何量子位m,變換可以寫成如下:
結(jié)合所有量子位上的變換,我們可以在基向量 |x1x2…xn? 上寫出整體變換,如下所示:
?接下來,我們使用 SWAP 運(yùn)算符交換量子位的狀態(tài),以便索引 m 表示的任何量子位與索引 n ? m 的量子位交換其狀態(tài)(見圖 4-3)。 SWAP操作后,量子位的整體狀態(tài)如下:
我們之前看到(公式 4-22),任何基向量 = |x? 上的傅里葉變換允許我們以復(fù)指數(shù)頻率基表示它,如下所示:?
通過代入 和,我們有以下結(jié)果:
現(xiàn)在,因此。將其代入公式 4-42,我們得到以下結(jié)果:
?我們可以將狀態(tài) |k? = |? 表示為的狀態(tài)張量積,因此我們有: 公式 4-44 中的求和可以在每個量子位基本狀態(tài)上進(jìn)行計(jì)算,而指數(shù)項(xiàng)的乘積可以附加到每個量子位。這將公式 4-44 簡化為:
將每個量子位的基本狀態(tài)的求和展開并寫出張量積的每一項(xiàng),我們得到:
讓我們通過在公式 4-47 中代入不同的 p 值來計(jì)算。
除最后一項(xiàng)外,所有項(xiàng)均大于或等于 1。將公式 4-48 中的代入表達(dá)式中。 我們得到以下結(jié)果:?
由于除了最后一項(xiàng)之外的所有項(xiàng)都大于或等于 1,因此它們將貢獻(xiàn)因子 1,因?yàn)槲覀冎缹τ?m 的任何整數(shù)值,都是 1。這簡化了以下內(nèi)容:
類似地,當(dāng) p = 2 時,我們將得到,這意味著除了最后兩項(xiàng)之外,我們將獲得所有整數(shù)值。因此,我們有這個:?
利用公式 4-49 和公式 4-50 的觀察結(jié)果,我們可以將公式 4-46 簡化如下:?因此,我們看到從公式 4-51 中的定義導(dǎo)出的復(fù)指數(shù)或頻率基礎(chǔ)上的 |x1x2…xn? 的傅里葉變換展開與通過量子傅里葉變換電路實(shí)現(xiàn)的傅里葉變換展開完全匹配(參見公式 4-39) 。
需要注意的一件事是,當(dāng)我們談?wù)撘话愕母道锶~變換(在量子計(jì)算之外)時,我們談?wù)摰氖敲總€復(fù)指數(shù)基的復(fù)系數(shù)或權(quán)重,它們由 |k? 表示。在量子傅立葉變換電路中,這些系數(shù)與其疊加的復(fù)基態(tài) |k? 相關(guān)聯(lián)。疊加是有利的,因?yàn)樗鼘⒏盗⑷~系數(shù)及其基以和的形式組合在一起,這就是復(fù)指數(shù)基 |k? 中的輸入函數(shù)信號表示。因此,基于 |x1x2…xn? 的量子變換實(shí)際上是 |x1 x2 …xn ? 在復(fù)指數(shù)或頻率基礎(chǔ)上的傅里葉展開。函數(shù)的傅里葉變換和函數(shù)在頻率基礎(chǔ)上的傅里葉變換展開有時可以互換使用。需要記住的重要一點(diǎn)是,|x1 x2…xn? 上的傅里葉變換允許我們將 |x1 x2…xn? 本身寫為復(fù)指數(shù)或頻率基礎(chǔ)上的展開式。
證明量子傅里葉電路正在做與離散傅里葉變換相同的變換是一個漫長而嚴(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)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。