Qiskit漢化1.3|表示量子比特狀態(tài)

??學習量子計算、密碼學、Space等Web3前沿技術
??認領Bounty,賺取賞金
??參與Hackathon,獲得資助
更多Web3精彩技術分享盡在Dōjō??
WeChat: @HackerDojo0

表示量子比特狀態(tài)
您現(xiàn)在對比特以及我們熟悉的數(shù)字計算機的工作原理有所了解。現(xiàn)代軟件中使用的所有復雜變量、對象和數(shù)據(jù)結構基本上都只是一大堆比特。我們這些從事量子計算工作的人稱這些為?經(jīng)典變量。使用它們的計算機,就像您用來閱讀本文的計算機一樣,我們稱之為經(jīng)典計算機。
在量子計算機中,我們的基本變量是量子比特:比特的量子變體。這些與普通位具有完全相同的限制:它們只能存儲單個二進制信息,并且只能為我們提供?0
或1
的輸出。然而,它們也可以用只有量子力學才能描述的方式來操縱。這為我們提供了新的玩法,使我們能夠找到設計算法的新方法。
為了完全理解這些新門,我們首先需要了解如何寫下量子比特狀態(tài)。為此,我們將使用數(shù)學中的向量、矩陣和復數(shù)。雖然我們將逐步介紹這些概念,但最好是你已經(jīng)熟悉它們。如果您需要更深入的解釋或復習,可以在此處找到指南。(https://qiskit.org/textbook/ch-appendix/linear_algebra.html)
1.經(jīng)典比特與量子比特
1.1 狀態(tài)向量
在量子物理學中,我們使用狀態(tài)向量來描述系統(tǒng)的狀態(tài)。假設我們想描述汽車在軌道上的位置,這是一個經(jīng)典的系統(tǒng),所以我們可以使用一個數(shù)字$x$:

$$
x=4
$$
或者,我們可以將一組數(shù)放在一個稱為狀態(tài)向量的向量中。狀態(tài)向量中的每個元素都包含在某個確定的地方找到汽車的概率:

$$
|x\rangle = \begin{bmatrix} 0\ \vdots \ 0 \ 1 \ 0 \ \vdots \ 0 \end{bmatrix}
\begin{matrix} \ \ \ \leftarrow \ \ \ \ \end{matrix}
\begin{matrix} \ \ \text{Probability of} \ \text{car being at} \ \text{position 4} \ \ \ \end{matrix}
$$
這不僅僅限制于位置,我們也可以設狀態(tài)向量為汽車所有可能擁有的速度,以及所有汽車可能擁有的顏色。在經(jīng)典系統(tǒng)中(像是上面所描述的汽車),當我們只需要一個數(shù)字的時候,使用這樣一個巨大的向量是一件愚蠢的事。但是在本章節(jié)中,狀態(tài)向量是一種很好的方式來存儲量子系統(tǒng)的軌跡,包括量子計算機。
1.2量子符號
經(jīng)典比特總是有一個完全定義的狀態(tài):在計算中的每一點,它們要么是0
,要么就是1
。對于經(jīng)典比特沒有比這更詳細的信息了。因此,要寫下經(jīng)典比特(c
)的狀態(tài),我們可以使用這兩個二進制值。例如:
c = 0
對于量子比特,這一限制被解除。我們從量子比特中得到的是0
還是1
,只需要在進行測量以提取輸出時確定。在這一點上,它必須承諾這兩個選項之一。在其他任何時候,它的狀態(tài)都比簡單的二進制值更復雜。
要了解如何描述這些,我們可以首先關注兩個最簡單的情況。正如我們在上一節(jié)中看到的,可以準備一個量子比特,使其在測量時肯定會給出結果0
的狀態(tài)。
我們需要為這個狀態(tài)命名。讓我們?nèi)狈ο胂罅Σ⒎Q之為$0$.同樣,存在一個量子比特狀態(tài),該狀態(tài)肯定會輸出1
?.我們稱之為$1$。這兩種狀態(tài)是完全相互排斥的。要么量子比特肯定輸出0
?,要么肯定輸出1
?。沒有重疊。用數(shù)學表示這一點的一種方法是使用兩個正交向量。
$$
|0\rangle = \begin{bmatrix} 1 \ 0 \end{bmatrix} , , , , |1\rangle =\begin{bmatrix} 0 \ 1 \end{bmatrix}.
$$
這里由大量符號需要解釋。首先,讓我們解開這些奇怪的東西 |和 ? 。它們的工作本質上只是提醒我們,我們討論的向量表示標記為$0$和$1$的量子比特狀態(tài)。這有助于我們將它們與比特值0
和1
或數(shù)字0和1區(qū)分開來。它是狄拉克符號法一部分,由狄拉克引入。
如果你不熟悉向量,你基本上可以把它們看作是我們使用某些規(guī)則操縱的數(shù)字列表。如果您熟悉高中物理課上的向量,您就會知道這些規(guī)則使向量非常適合描述具有量級和方向的量。例如,物體的速度用矢量完美地描述。然而,我們使用量子態(tài)向量的方式與此略有不同,所以不要太堅持你以前的直覺。是時候做一些新的事情了。
使用向量,我們可以描述更復雜的狀態(tài),而不僅僅是$|0 ?$和$|1?$.例如,考慮向量
$$
|q_0\rangle = \begin{bmatrix} \tfrac{1}{\sqrt{2}} \ \tfrac{i}{\sqrt{2}} \end{bmatrix} .
$$
為了理解這種狀態(tài)的含義,我們需要使用數(shù)學規(guī)則來操作向量。具體來說,我們需要了解如何將向量相加以及如何將它們乘以標量。
提醒:矩陣加法和標量乘法(點擊這里擴展)提醒:正交基(點擊這里擴展)狀態(tài)$|0?$和$|1?$組成正交基,我們可以表示具有這兩種狀態(tài)組合的任何 2D 向量。這允許我們用另一種形式來寫量子比特的狀態(tài):
$$
|q_0\rangle = \tfrac{1}{\sqrt{2}}|0\rangle + \tfrac{i}{\sqrt{2}}|1\rangle
$$
這個向量,$|q_0\rangle$被稱為量子比特的狀態(tài)向量,它告訴我們關于這個量子比特的一切。目前,我們只能對這個狀態(tài)向量的特定示例得出一些簡單的結論:它并不完全是$|0?$且不是完全$|1?$。相反,它由兩者的線性組合描述。在量子力學中,我們通常使用“疊加”一詞來描述這樣的線性組合。
雖然我們的示例狀態(tài)$|q_0\rangle$可以表示為疊加$|0?$和$|1?$,它和它們一樣,是一個明確和定義良好的量子比特狀態(tài)。為了看到這一點,我們可以開始探索如何操縱量子比特。
1.3使用 Qiskit 探索量子比特
首先,我們需要導入我們需要的所有工具:
在Qiskit中,我們使用QuantumCircuit
對象來存儲我們的電路,這本質上是我們電路上的量子操作以及它們所應用的量子比特的列表。
在我們的量子電路中,我們的量子比特總是以狀態(tài)$|0?$開始。我們可以使用initialize()
方法將其轉換為任何狀態(tài)。我們以列表的形式給initialize()
我們想要的向量,并告訴它我們想在這個狀態(tài)中初始化哪個量子比特:

然后,我們可以使用 Qiskit 的模擬器之一來查看量子比特的結果狀態(tài)。
為了從我們的電路中獲取結果,我們使用?run
執(zhí)行我們的電路,將電路和后端作為參數(shù)。然后,我們用.result()
來得到這個結果:
從result
中,我們可以使用.get_statevector()
獲得最后的狀態(tài)向量:
Statevector([0.+0.j, 1.+0.j],dims=(2,))
注意:?Python使用j
來表示復數(shù)$i$。我們看到一個有兩個復數(shù)元素的向量:0.+0.j
?= 0, 和?1.+0.j
?= 1.
現(xiàn)在讓我們像在真正的量子計算機中一樣測量我們的量子比特,看看結果:

這一次,我們不再使用狀態(tài)向量,而是使用.get_counts()
來獲取結果0
和1
的計數(shù):

我們可以看到(正如我們所料),我們有100%的幾率觀察到$|1?$。這一次,讓我們將量子比特置于疊加狀態(tài),看看會發(fā)生什么。我們將使用在前面提到的狀態(tài)$|q_0\rangle$:
$$
|q_0\rangle = \tfrac{1}{\sqrt{2}}|0\rangle + \tfrac{i}{\sqrt{2}}|1\rangle
$$
我們需要將這些振幅添加到python的列表中。為了添加一個復數(shù)振幅,Python使用j
作為虛數(shù)單位(我們在數(shù)學上通常稱之為“$i$”):
然后,我們像以前一樣重復初始化量子比特的步驟:
Statevector([0.70710678+0.j, 0.+0.70710678j],dims=(2,))

我們可以看到我們有相等的概率來測量|0?或|1?.為了解釋這一點,我們需要談談測量。
2.測量規(guī)則
2.1一個非常重要的規(guī)則
測量有一個簡單的規(guī)則。為了計算狀態(tài)$|x\rangle$下$|ψ\rangle$的概率,我們這樣做:
$$
p(|x\rangle) = | \langle x| \psi \rangle|^2
$$
符號 ? 和 |告訴我們?x|是一個行向量,符號|和?告訴我們|ψ?是一個列向量。在量子力學中我們稱列向量為kets,行向量為bras。它們一起組成狄拉克(bra-ket)符號。任何ket$|a\rangle$都具有相應的bra$\langle a|$,我們使用共軛轉置在它們之間進行轉換。
提醒:共軛轉置(單擊此處展開)提醒:內(nèi)積(單擊此處展開)
在上面的等式中,$|x?$可以是任何量子態(tài)。為了計算測量到$|x?$的概率,我們?nèi)?|x?$和測量到的狀態(tài)(這里是$|ψ?$)的內(nèi)積,然后進行平方。這可能看起來有點復雜,但很快就會成為你的第二感性。
如果我們觀察之前的狀態(tài)$|q_0?$,我們可以看到觀測到$|0?$的概率確實是0.5:
$$
\begin{aligned}
|q_0\rangle & = \tfrac{1}{\sqrt{2}}|0\rangle + \tfrac{i}{\sqrt{2}}|1\rangle \
\langle 0| q_0 \rangle & = \tfrac{1}{\sqrt{2}}\langle 0|0\rangle + \tfrac{i}{\sqrt{2}}\langle 0|1\rangle \
& = \tfrac{1}{\sqrt{2}}\cdot 1 + \tfrac{i}{\sqrt{2}} \cdot 0\
& = \tfrac{1}{\sqrt{2}}\
|\langle 0| q_0 \rangle|^2 & = \tfrac{1}{2}
\end{aligned}
$$
您應該自己練習驗證觀測到$|1?$的概率。
這個規(guī)則支配著我們?nèi)绾螐牧孔討B(tài)中獲取信息。因此,它對我們在量子計算中所做的一切都非常重要。它也立即暗示了幾個重要的事實。
2.2 本規(guī)則的意義
#1?規(guī)范化
該規(guī)則向我們表明振幅與概率有關。如果我們希望概率加起來為 1(他們應該?。?,我們需要確保狀態(tài)向量被正確規(guī)范化。具體來說,我們需要狀態(tài)向量的大小為 1。
$$
\langle\psi|\psi\rangle = 1 \
$$
因此,如果:
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
然后:
$$
|\alpha|^2 + |\beta|^2 = 1
$$
這解釋了你在本章中看到的$\sqrt{2}$的因數(shù)。事實上,如果給initialize()
一個未歸一化的向量,它會報錯:
錯誤輸出
快速練習
創(chuàng)建一個狀態(tài)向量,該向量將給出$1/3$測量概率$|0?$。
創(chuàng)建一個不同的狀態(tài)向量,該向量將給出相同的測量概率。
驗證測量的概率$|1?$對于這兩種狀態(tài)是$2/3$。
你可以在下面的小部件中檢查你的答案(答案精度為±1%,你可以在向量中使用pi
和sqrt()
等numpy術語):
#2?替代測量
測量法則給出了狀態(tài)$|ψ?$被測量為$|x?$的概率$p(x)$。它沒有告訴我們$|x?$只能是$|0?$或$|1?$。
到目前為止,我們所考慮的測量實際上只是測量量子比特的無數(shù)種可能方法中的一種。對于任意一對正交的狀態(tài),我們可以定義一種測量方法,讓量子比特在這兩種狀態(tài)之間做出選擇。
下一節(jié)將進一步探討這種可能性?,F(xiàn)在,請記住,$|x?$并不僅僅局限于$|0?$或$|1?$。
#3?全局相圖
我們知道觀測狀態(tài)$|1?$將會帶給我們確定性的輸出 1。但是我們也同樣能夠將狀態(tài)用這種方式書寫:
$$
\begin{bmatrix}0 \ i\end{bmatrix} = i|1\rangle.
$$
為了了解它的行為,我們應用度量規(guī)則。
$$
|\langle x| (i|1\rangle) |^2 = | i \langle x|1\rangle|^2 = |\langle x|1\rangle|^2
$$
這里我們發(fā)現(xiàn)一旦取出復數(shù)的大小,因子$i$就消失了。這種效應與測量狀態(tài)$|x?$完全無關。不管我們考慮的是什么測量,狀態(tài)$i|1?$的概率與狀態(tài)$|1?$的概率相同。由于測量是我們從量子比特中提取任何信息的唯一方法,這意味著這兩種狀態(tài)在物理相關的所有方面都是等效的。
更一般地說,我們將$|γ|=1$的狀態(tài)上的任何總體因子$γ$稱為“全局相位”。僅在整體階段上存在差異的狀態(tài)在物理上是無法區(qū)分的。
$$
|\langle x| ( \gamma |a\rangle) |^2 = | \gamma \langle x|a\rangle|^2 = |\langle x|a\rangle|^2
$$
請注意,這與疊加項之間的相位差不同,這被稱為“相對相位”。一旦我們考慮不同類型的測量和多量子比特,這就變得重要起來。
#4?觀察者效應
我們知道振幅包含了我們在特定狀態(tài)下找到量子比特的概率信息,但一旦我們測量了量子比特,我們就確定知道量子比特的狀態(tài)是什么。例如,如果我們測量狀態(tài)中的量子比特:
$$
|q\rangle = \alpha|0\rangle + \beta|1\rangle
$$
在狀態(tài)$|0?$中找到它,如果我們再次測量,有100%的機會在狀態(tài)$|0?$中找到量子比特。這意味著測量的行為會改變量子比特的狀態(tài)。
$$
|q\rangle = \begin{bmatrix} \alpha \ \beta \end{bmatrix} \xrightarrow{\text{Measure }|0\rangle} |q\rangle = |0\rangle = \begin{bmatrix} 1 \ 0 \end{bmatrix}
$$
我們有時將此稱為量子比特狀態(tài)的坍縮。這是一種強有力的效果,因此必須明智地使用。例如,如果我們不斷測量每個量子比特以跟蹤它們在計算中的每個點的值,它們將始終處于定義良好的$|0?$或$|1?$狀態(tài)。因此,它們與經(jīng)典比特沒有什么不同,我們的計算可以很容易地被經(jīng)典計算取代。為了實現(xiàn)真正的量子計算,我們必須允許量子比特探索更復雜的狀態(tài)。因此,只有在我們需要提取輸出時才使用測量。這意味著我們經(jīng)常將所有的測量放在量子電路的末端。
我們可以使用Qiskit的狀態(tài)向量模擬器來演示這一點。讓我們初始化一個疊加態(tài)的量子比特:

這應該在狀態(tài)中初始化我們的量子比特:
$$
|q\rangle = \tfrac{i}{\sqrt{2}}|0\rangle + \tfrac{1}{\sqrt{2}}|1\rangle
$$
我們可以使用模擬器驗證這一點:
我們可以看到這里的量子比特初始化狀態(tài)為[0.+0.70710678j 0.70710678+0.j],這是我們所期望的狀態(tài)。
現(xiàn)在讓我們創(chuàng)建一個電路來測量這個量子比特:

當我們模擬整個電路時,可以看到其中一個振幅始終為0:
您可以重新運行此單元格幾次,以重新初始化量子比特并再次測量它。你會注意到,任何一種結果都是等概率的,但量子比特的狀態(tài)從來都不是$|0?$和$|1?$的疊加。有點有趣的是,狀態(tài)$|0?$上的全局相位仍然存在,但由于這是全局相位,我們永遠無法在真正的量子計算機上測量它。
關于量子模擬器的說明
我們可以看到,寫下一個量子比特的狀態(tài)需要跟蹤兩個復數(shù),但當使用真正的量子計算機時,我們只會收到每個量子比特的是或否(0或1)答案。10量子比特量子計算機的輸出看起來像這樣:
$$
0110111110
$$
只有10位,沒有疊加或復振幅。當使用真正的量子計算機時,我們無法在計算過程中看到量子比特的狀態(tài),因為這將破壞它們!這種行為對于學習來說并不理想,因此Qiskit提供了不同的量子模擬器:默認情況下,aer_simulator
模擬真實量子計算機的執(zhí)行,但如果我們在電路中包含某些指令,也允許您在測量之前查看量子狀態(tài)。例如,這里包含了.save_statevector()
指令,這意味著可以對模擬結果使用.get_statevector()
。
3.布洛赫球
3.1 描述受限量子比特狀態(tài)
我們在本章前面看到,量子比特($|q?$)的一般狀態(tài)是:
$$
|q\rangle = \alpha|0\rangle + \beta|1\rangle
$$
$$
\alpha, \beta \in \mathbb{C}
$$
(第二行告訴我們$α$和$β$是復數(shù))。第2節(jié)中的前兩個含義告訴我們,我們無法區(qū)分其中一些狀態(tài)。這意味著我們可以更具體地描述量子比特。
首先,由于我們無法測量全局相位,我們只能測量狀態(tài)$|0?$和$|1?$之間的相位差。我們可以將$α$和$β$限制為實數(shù),并添加一個項來告訴我們它們之間的相對相位,而不是復數(shù):
$$
|q\rangle = \alpha|0\rangle + e^{i\phi}\beta|1\rangle
$$
$$
\alpha, \beta, \phi \in \mathbb{R}
$$
最后,由于量子比特狀態(tài)必須被規(guī)范化,即
$$
\sqrt{\alpha^2 + \beta^2} = 1
$$
我們可以使用三角恒等式:
$$
\sqrt{\sin^2{x} + \cos^2{x}} = 1
$$
為了用一個變量$θ$來描述真實的$α$和$β$:
$$
\alpha = \cos{\tfrac{\theta}{2}}, \quad \beta=\sin{\tfrac{\theta}{2}}
$$
從這里我們可以用兩個變量$?$和$θ$來描述任何量子比特的狀態(tài):
$$
|q\rangle = \cos{\tfrac{\theta}{2}}|0\rangle + e^{i\phi}\sin{\tfrac{\theta}{2}}|1\rangle
$$
$$
\theta, \phi \in \mathbb{R}
$$
3.2 直觀表示量子比特狀態(tài)
我們想繪制量子比特的一般狀態(tài):
$$
|q\rangle = \cos{\tfrac{\theta}{2}}|0\rangle + e^{i\phi}\sin{\tfrac{\theta}{2}}|1\rangle
$$
如果我們將$θ$和$?$解釋為球面坐標($r=1$,因為量子比特狀態(tài)的大小是$1$),我們可以在球面上繪制任何單個量子比特狀態(tài),稱為布洛赫球。
下面我們繪制了狀態(tài)中的量子比特$|+?$。在這種情況下,$\theta = \pi/2, \phi = 0$。
Qiskit有一個繪制布洛赫球的函數(shù)plot_bloch_vector()
。這個函數(shù)默認接受笛卡兒坐標,但也可以通過傳遞參數(shù)coord_type='spherical'
接受球坐標。
你也可以嘗試這個交互式布洛赫球體演示。

注意
第一次學習量子比特狀態(tài)時,很容易混淆量子比特狀態(tài)矢量和它的布洛赫矢量。請記住,狀態(tài)矢量器是1.1節(jié)中討論的矢量,它保持了量子比特可能處于的兩種狀態(tài)的振幅。布洛赫球向量是一個可視化工具,它將2D、復雜的狀態(tài)向量映射到真實的3D空間。
快速練習
使用plot_bloch_vector()
繪制狀態(tài)中的量子比特:
1.$|0?$
2.$|1?$
3.$\tfrac{1}{\sqrt{2}}(|0\rangle + |1\rangle)
$
4.$\tfrac{1}{\sqrt{2}}(|0\rangle - i|1\rangle)
$
5.$\tfrac{1}{\sqrt{2}}\begin{bmatrix}i\1\end{bmatrix}
$


關于Hacker Dōjō?
由Hacker共建的加密、Web3前沿技術開源知識社區(qū)。Dōjō 會以直播/音頻/文字等形式定期組織分享session, 分享主題主要覆蓋L1和L2的共識算法,架構,GitHub repo相關內(nèi)容,包括不限于以下話題:Scroll / Polygon zkEVM、 Eigen的混合證明系統(tǒng)、Starkware、azTec、 Optimism、Zecrey、Aptos、 Move、密碼學(零知識證明、公鑰加密、哈希函數(shù)、格密碼) 、 分布式系統(tǒng)、 以太坊協(xié)議棧、 量子計算和量子信息、衛(wèi)星通信系統(tǒng)和航天器系統(tǒng)設計等。
?Bounty詳情及認領進度詳情:https://innovative-laser af4.notion.site/174922df15884848b6ac8b57cb4f2fae?v=612e13dc6b9d44dd8197f755abb9fe9c
?加入 Dōjō 中文社區(qū)微信聯(lián)系:@HackerDojo0
有關DoraHacks
DoraHacks 是一個全球范圍內(nèi)的極客運動,全球黑客馬拉松組織者,也是全球最活躍的多鏈 Web3 開發(fā)者平臺之一。DoraHacks.io平臺使得世界各地的Hacker和開源開發(fā)者可以參與黑客馬拉松、Bounty、Grant、Grant DAO,以及公共物品質押等加密原生協(xié)議和基礎設施進行協(xié)作并獲得資助。到目前為止,DoraHacks 社區(qū)的 4000 多個項目已經(jīng)獲得了來自全球行業(yè)支持者超過 3000 萬美元的資助。大量開源社區(qū)、DAO 和 超過50個主要區(qū)塊鏈生態(tài)系統(tǒng)正在積極使用 Dora 的基礎設(DoraHacks.io)進行開源融資和社區(qū)治理。
官網(wǎng):https://dorahacks.io/