作者:
林昱誠(Yu-Cheng Lin)
閱讀時間:
10
分鐘
# VQE 演算法 前一節我們介紹了如何使用 QAOA 解優化問題,在這一節我們將介紹另一種也可以用於優化問題的演算法:Variatrional Quantum Eigensolver (VQE),在文末你會發現 QAOA 是 VQE 的一種特殊形式。 在這裡雖然我們專注在優化問題,但 VQE 的起源來自於化學,因此在這裡我們會從基礎量子物理切入,帶你了解 VQE 究竟怎麼運作。 ## 量子力學簡介 在經典力學中(高中程度),描述萬物運動軌跡與行為的方程式是牛頓定律: \begin{align} F=ma \end{align}
實際上是 Euler–Lagrange equation,不僅僅只在古典力學,量子力學也是
相同的,在微小尺度中,描述萬物運動行為的核心方程式是: \begin{align} \tag{1} \hat{H}|\psi\rangle=E|\psi\rangle \end{align} $\hat{H}$ 是一個矩陣,包含這系統的動能與位能資訊,比方說最簡單的彈簧系統,那他的 $\hat{H}$ 可以寫作: \begin{align} \frac{1}{2}mv^2+\frac{1}{2}kx^2 \end{align} 當然上式要經過"量子化"才能代入(1)式,但透過這樣的舉例你能知道 $\hat{H}$ 講白話就是一個系統的總能量;$|\psi\rangle$ 就是你熟悉的波函數,以 qubit 為例就是 $|0\rangle$ 或 $|1\rangle$,以原子為例,就是高中學過的 $1s,2s,2p$ 等 orbitals(軌域)。當 $\hat{H}$ 作用在 $|\psi\rangle$ 上後就會變成在這狀態 $|\psi\rangle$ 下系統的能量值 $E$。 ### 以氫原子為例 以下舉例以一個簡化的氫原子作為範例,並且為了讓讀者能看懂(1)式的意義而非專注在計算過程,這例子會忽略許多嚴謹性,如果想知道最完整的計算過程可以翻看任何一本量子力學教科書。 在氫原子中,其 $\hat{H}$ 就是動能(電子與原子核)加上位能(電子與原子核): \begin{align}\tag{2} \hat{H}=-\frac{1}{2m_e}\nabla^2_e-\frac{1}{2m_N}\nabla^2_N-\frac{1}{4\pi\epsilon_0}\frac{(Ne)e}{r^2} \end{align} 如果讀者還沒碰過這類公式,你就暫時先接受上式,不必鑽研於為何他是這樣,或是可以參看我們量子模擬系列文章(努力中,未上架)。第一項是描述電子的動能,第二項是質子的動能,第三項是電子與質子的位能。 接著是波函數 $|\psi\rangle$,為方便起見,我們拋去 $s, p, d, f$ 等 orbitals 概念,僅有電子位在第幾層(即主量子數 $n$),因此 \begin{align}\tag{3} |\psi\rangle = |n\rangle, \space \text{where }n=0,1,2,\cdots \end{align} 照你所學過的波爾氫原子模型,代入(1)式會得到: \begin{align} \hat{H}|n\rangle=-\frac{13.6}{n^2}|n\rangle \end{align} 比方說當電子位於基態 $|n\rangle=|1\rangle$ 時: \begin{align} \hat{H}|1\rangle=-13.6|1\rangle \end{align} ## VQE 簡介 VQE 全名第一個單字 "variatrional" 代表量子力學裡的一個近似方法:變分法(variational principle),說明給定一個 $\hat{H}$ 後,任何量子態 $|\psi\rangle$ 對應的期望值(或說能量 $E$)都會比基態能量高或一樣,即: \begin{align} \langle \psi|\hat{H}|\psi\rangle\geq E_{ground} \end{align} 在 VQE 中,演算法要盡可能地找到一組 $|\psi\rangle$ 使得上式相等,或是說盡可能地找到最低能量(因為不是一定能找到真實的基態能量),其中這量子態 $|\psi\rangle$ 與 QAOA 類似,由一組參數 $\theta$ 所決定,所以我們會把量子態改寫成 $|\psi(\theta)\rangle$,跟上一節介紹的 QAOA 一樣,量子電路會輸出 $|\psi(\theta)\rangle$ 的測量結果,將這測量結果傳回給經典電腦計算 $\hat{H}$ 的期望值,透過期望值與當下的參數計算梯度,由 optimizer 給出新的參數傳回量子電腦,如此循環,直到能量收斂,如下圖所示:
Bloch Z
VQE 流程圖

黃色區域包括黑色測量都是在量子電腦上運行,藍色方塊則是在古典電腦上運行。注意初始態 phi0 沒有一定要是全零。

至於要用什麼樣的電路來製備 $|\psi(\theta)\rangle$,這塊電路稱作 "ansatz",這單字的意思就是「怎麼猜」,當然這猜法有很多種,而且目前仍是學術的研究熱門議題之一,學界裡有各種五花八門的 ansatz,怎麼設計 ansatz 可以透過還是猜(或者說各種嘗試之後找到一個不錯用的,也不知道為何好用,就沿用下來了),也可以透過像 QAOA 寫出一個指數項 $e^{-i...}$ 然後分解成一個一個 quantum gate,ansatz 的細節我們先放在文末再介紹。 ## VQE 範例 接著我們用一個簡單的範例來帶大家更了解 VQE 怎麼運作的。假設今天你要模擬的物理系統,其 Hamiltonian 為: \begin{align} H=2Z+X \end{align}
可以回想過去我們介紹圖論,這步就像是把一個 max-cut 問題寫成一堆 Z
當我們要計算其期望值時: \begin{align} \langle \psi|H|\psi\rangle&= \langle \psi|2Z+X|\psi\rangle\\ &=2\langle\psi|Z|\psi\rangle+\langle \psi|X|\psi\rangle\tag{4} \end{align}
這部分就相當於計算 graph 的 cost
在過去的 max-cut 問題中,graph 的期望值都類似上式第一項 $\langle\psi|Z|\psi\rangle$,而在現實中做測量時也是以 $Z$ 軸作為 basis,因此當我們測量到 $|0\rangle$ 時經典電腦就直接當作 $+1$ 做計算,$|1\rangle$ 則為 $-1$,那後面第二項怎麼辦呢?第二項是以 $X$ 軸做 basis,如果今天我們的電腦可以以$X$ 軸做測量,我們會得到 $|+\rangle$ 或是 $|-\rangle$,但今天常用的量子電腦不是這樣,此時我們該怎麼辦呢?讓我們回到 Bloch sphere:
Bloch Z

遇到此情形,就要想辦法從原本以 X 軸做測量翻轉到 Z 軸,因此最簡單的方法就是加上 $RY(-\frac{\pi}{2})$ gate,對 Y 軸順時鐘旋轉 90 度,同理,如果今天遇到 $\langle\psi|Y|\psi\rangle$,就對 X 軸旋轉 90 度,即 $RX(\frac{\pi}{2})$ gate。
只是之前 graph 都只有 Z operator,所以不會有這段
最後,$|\psi(\theta)\rangle$ 我們就簡單地用 $RY$ gate 來製備(理論上不會這樣做,因為 RY gate 只能遍歷 Bloch 球上的一圈,而我們通常會希望一個好的 ansatz 可以翻遍球面上各個地方)
Bloch Z
不同 ansatz 能在 Bloch sphere 上表達的量子態分佈

Picture comes from doi: 10.1002/qute.201900070

所以前一節 QAOA 那複雜的電路就是這邊的 ansatz,製備 graph 的量子態(怎麼切法)
那我們這例子的 VQE 完整電路如下:
Bloch Z
範例(4)式第一項對應的電路圖

Bloch Z
範例(4)式第二項對應的電路圖

對,每一項代表一個電路,所以以這個例子,VQE 會有兩個各為 1 qubit 電路(並不是一個 2 qubits 電路),前面是製備 $|\psi(\theta)\rangle$ 的 ansatz,$RY$,後面則是要轉向 Z 軸,最後做測量,2 這個數字可以直接在經典電腦裡處理)將兩個電路測量到的量子態傳給經典電腦,個別算出期望值後加總起來,然後再提供新的 $\theta$,如此循環。 假設在某次循環,經典電腦給出 $\theta=\pi$,那當下 VQE 第一個電路輸出的 $|\psi(\theta)\rangle$ 為: \begin{align} |\psi\rangle=RY(\pi)|0\rangle = \begin{bmatrix} \cos{\frac{\pi}{2}} & -\sin{\frac{\pi}{2}} \\ \sin{\frac{\pi}{2}} & \cos{\frac{\pi}{2}} \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix}= \begin{bmatrix} 0 \\ 1 \end{bmatrix} \end{align} 那第一項 $2\langle\psi|Z|\psi\rangle$: \begin{align} 2\langle\psi|Z|\psi\rangle= \begin{bmatrix} 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix}= -2 \end{align} 第二個電路輸出的 $|\psi(\theta)\rangle$ 為 \begin{align} |\psi\rangle&=RY(-\frac{\pi}{2})RY(\pi)|0\rangle \\ &= \begin{bmatrix} \cos{(-\frac{\pi}{4})} & -\sin{(-\frac{\pi}{4})} \\ \sin{(-\frac{\pi}{4})} & \cos{(-\frac{\pi}{4})} \end{bmatrix} \begin{bmatrix} \cos{\frac{\pi}{2}} & -\sin{\frac{\pi}{2}} \\ \sin{\frac{\pi}{2}} & \cos{\frac{\pi}{2}} \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix}\\ &= \begin{bmatrix} \cos{(-\frac{\pi}{4})} & -\sin{(-\frac{\pi}{4})} \\ \sin{(-\frac{\pi}{4})} & \cos{(-\frac{\pi}{4})} \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix}= \begin{bmatrix} \frac{1}{\sqrt 2} \\ \frac{1}{\sqrt 2} \end{bmatrix} \end{align} 那第二項期望值為(因為已經轉到 Z basis 了,所以期望值就用 Z 計算): \begin{align} \langle\psi|Z|\psi\rangle= \begin{bmatrix} \frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} \begin{bmatrix} \frac{1}{\sqrt 2} \\ \frac{1}{\sqrt 2} \end{bmatrix}= 0 \end{align} 那其實上式就等於 $\langle\psi|X|\psi\rangle$,我們來做個驗證: \begin{align} \langle\psi|X|\psi\rangle= \begin{bmatrix} 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix}= 0 \end{align} 最後加總起來為: \begin{align} \langle H\rangle&=2\langle H_Z\rangle+\langle H_X\rangle \\ &=-2+0\\ &=-2 \end{align} 接著經典電腦會根據這期望值 $-2$ 和當下的參數(角度)$\pi$ 計算梯度,接著 optimizer 會給出新參數(角度),然後剛剛的步驟再來一次。 ## Ansatz Ansatz 的電路怎麼放是人為設計,並沒有什麼基礎理論來告訴你一定得怎麼做,但怎麼設計有其設計的目標,我們會希望好的 ansatz 有以下性質: - 可以遍歷所有的量子態,以剛剛 1 qubit 的例子來說,單只有 $RY$ 就不是好的 ansatz,如果多加個 $RX$ 就可以遍歷整個 Bloch sphere 球面,這樣才能找到最低能量的量子態 - 越少的 gates 越好,因為現在的量子電腦都不是好的量子電腦,越多 gates,出錯機率越高 - 參數越少越好,剛剛的例子只有一個參數 $\theta$,當系統越大時,所用的參數越多,參數越多,optimizer 就越難優化
Bloch Z
人們透過這些準則去設計(就用猜的啦)各種 ansatz,然後透過實驗去找出真的比較好用的(就經驗啦)

Picture comes from doi: 10.1002/qute.201900070

如果你今天要優化的問題是一個很專門的問題,像是化學分子或是物理的凝態系統,那你的 ansatz 不必遵守第一個守則,你可以設計一個專門針對分子的 ansatz,他只會遍歷符合化學邏輯的量子態,因為如果你要遍歷所有的量子態,可能有些量子態並不符合化學邏輯,那透過 ansatz 刪掉這些可能可以幫你省計算資源與時間,比方說知名的 UCCSD: \begin{align} e^{\hat{T}-\hat{T}^\dagger} \end{align} 這個就類似 QAOA 的 \begin{align} e^{i\alpha_p H} e^{i\beta_p H} \end{align} 然後再把它轉成量子電路。 ## 延伸閱讀 - 量子模擬系列文章(趕工中) - [VQE 簡介](https://arxiv.org/pdf/2402.15879#page13) - [VQE 綜述](https://arxiv.org/pdf/2103.08505) - [透過 pennylane 實作 VQE](https://pennylane.ai/qml/demos/tutorial_vqe) - [透過舊版 Qiskit 實作 VQE](https://github.com/DavitKhach/quantum-algorithms-tutorials/blob/master/variational_quantum_eigensolver.ipynb)
課程目錄