量子線性系統(tǒng)算法及實(shí)踐——以Cirq為例

概述

求解線性方程組是科學(xué)計(jì)算中的一個(gè)基礎(chǔ)問(wèn)題壮不,也可利用線性方程組構(gòu)造復(fù)雜的算法由缆,如數(shù)值計(jì)算中的插值與擬合注祖、大數(shù)據(jù)中的線性回歸、主成分分析等均唉。而正是由于線性求解問(wèn)題在學(xué)科中的基礎(chǔ)性作用是晨,其在科學(xué)、工程舔箭、金融罩缴、經(jīng)濟(jì)應(yīng)用、計(jì)算機(jī)科學(xué)等領(lǐng)域也應(yīng)用廣泛层扶,如常見的天氣預(yù)報(bào)箫章,需要通過(guò)建立并求解包含百萬(wàn)變量的線性方程組實(shí)現(xiàn)對(duì)大氣中類似溫度、氣壓镜会、濕度等的模擬和預(yù)測(cè)修械;如銷量預(yù)測(cè)降宅,需要采用線性回歸方式的時(shí)序預(yù)測(cè)方法進(jìn)行預(yù)測(cè)。

2009年,Harrow认臊、Hassidim和Lloyd三人基于量子相位估計(jì)提出了HHL算法梯轻,是線性系統(tǒng)算法的一個(gè)典型代表梯刚。HHL算法對(duì)于大型良態(tài)稀疏矩陣A及皂、用量子算法高效制備的量子態(tài)b,可以在復(fù)雜度O(polylogN)內(nèi)輸出Ax=b的量子態(tài)近似解季率。量子線性系統(tǒng)算法(QLSA)可以用于矩陣求逆野瘦,求解特征值、線性回歸、插值與擬合等鞭光,被廣泛應(yīng)用于量子機(jī)器學(xué)習(xí)等算法中吏廉,可以指數(shù)級(jí)提升求解效率。但HHL算法也有一定的局限性惰许,HHL算法以及系列改進(jìn)算法的內(nèi)核都是基于量子傅里葉變換席覆,因需要指數(shù)級(jí)的量子線路資源難以實(shí)現(xiàn),這也是當(dāng)前HHL算法在NISQ時(shí)代的局限所在汹买。

NISQ即含噪聲中等規(guī)模量子器件佩伤,NISQ計(jì)算機(jī)是指那些擁有50-100量子比特、以及高保真量子門的設(shè)備晦毙。Cirq是谷歌一款用于編寫生巡、操作和優(yōu)化量子線路的Python庫(kù),支持在量子計(jì)算機(jī)及量子模擬器上運(yùn)行cirq編譯的量子線路见妒。Cirq為處理NISQ時(shí)代量子計(jì)算機(jī)提供了有效的抽象孤荣。類似的量子編程框架軟件還有啟科量子的QuTrunk產(chǎn)品。QuTrunk 使用 Python 作為宿主語(yǔ)言须揣,利用 Python 的語(yǔ)法特性 實(shí)現(xiàn)針對(duì)量子程序的 DSL(領(lǐng)域?qū)S谜Z(yǔ)言)盐股。cirq與QuTrunk兩款產(chǎn)品都支持連接量子計(jì)算機(jī)和量子模擬器使用。本文將主要介紹量子線性系統(tǒng)算法中的典型算法HHL的數(shù)學(xué)原理及使用cirq耻卡、QuTrunk實(shí)現(xiàn)算法的代碼示例疯汁。

1.量子線性算法

一般線性算法英文表述為The linear-system Algorithm,簡(jiǎn)稱LSP卵酪;量子線性算法英文表述為The Quantum linear-system Algorithm幌蚊。LSA與QLSA分別需要解決的問(wèn)題如下:

LSA需要解決的問(wèn)題是找到一個(gè)N維向量x,使得Ax=b溃卡。

QLSA需要解決的問(wèn)題是找到一個(gè)n位量子比特`{|\widetilde{x}}\rangle`霹肝,滿足`‖|x\rangle-|{\widetilde{x}}\rangle‖≤ε`和Ax=b。

一般求解線性方程組的問(wèn)題時(shí)會(huì)給定一個(gè)系統(tǒng)`A\vec{x}=\vec塑煎`,再尋找對(duì)于矩陣`\vec{A}`和向量`\vec臭蚁``\vec{x}`最铁。其中,假設(shè)A是厄米矩陣垮兑。將`\vec{x}``\vec冷尉`分別表示為量子態(tài)|x〉和|b〉后,重新縮放為單位向量即`‖\vec{x}‖=‖\vec系枪‖=1`雀哨。因此可以將傳統(tǒng)的向量表示`A\vec{x}=\vec`轉(zhuǎn)化為量子態(tài)表示`A|x\rangle=|b\rangle`,對(duì)應(yīng)的|x〉求解方法為` {A^{-1}|b\rangle\over ‖A^{-1}|b\rangle‖} `雾棺。

2.量子線性算法子程序——量子相位估計(jì)

量子相位估計(jì)算法(Quantum Phase Estimation Algorithm膊夹,簡(jiǎn)稱QPE),是HHL算法中的一個(gè)子程序捌浩。若假設(shè)一個(gè)幺正算符U放刨,則該幺正算符作用在其本征態(tài)|u〉上會(huì)出現(xiàn)一個(gè)相位`e^{2πiφ}`,現(xiàn)在我們假設(shè)算符的本征值φ是未知尸饺,在已知算符U和本征態(tài)`|u\rangle`情況下进统,量子相位估計(jì)算法可以估計(jì)相位φ。以下為使用cirq進(jìn)行哈密頓量模擬的演示代碼:

class HamiltonianSimulation(cirq.EigenGate):

    def __init__(self, A, t, exponent=1.0):
        cirq.EigenGate.__init__(self, exponent=exponent)
        self.A = A
        self.t = t
        ws, vs = np.linalg.eigh(A)
        self.eigen_components = []
        for w, v in zip(ws, vs.T):
            theta = w * t / math.pi
            P = np.outer(v, np.conj(v))
            self.eigen_components.append((theta, P))

    def _num_qubits_(self) -> int:
        return 1

    def _with_exponent(self, exponent):
        return HamiltonianSimulation(self.A, self.t, exponent)

    def _eigen_components(self):
        return self.eigen_components

量子相位估計(jì)程序如下:

  • 輸入:受控單位`C_iU`浪听;n個(gè)量子比特輸入態(tài)`|ψ〉=\sum_uψ_u|ψ〉`螟碎,其`U|ψ〉=e^{2πiλ_u}|u〉`

  • 輸出`\sum_uψ_u|{\widetilde{λ}}_u〉|u〉`迹栓。

  • 步驟:

步驟1使用t個(gè)輔助量子比特進(jìn)行初始化操作掉分,具體執(zhí)行為`H^{\otimes t}`,產(chǎn)生均勻疊加態(tài)迈螟。

步驟2根據(jù)公式`C_{t-i-1}U^{2i}`創(chuàng)建量子線路

步驟3應(yīng)用`QFT^╀`

  • 測(cè)量測(cè)量輔助量子比特得到`|{\widetilde{λ}}_u〉`概率`{|Ψu|}^2`叉抡。
量子相位估計(jì).jpg

圖為量子相位估計(jì)線路圖

2.1使用cirq定義量子相位估計(jì)

  • 使用cirq完成量子線性系統(tǒng)算法,其中需要先進(jìn)行量子相位估計(jì)操作答毫。量子相位估計(jì)門操作中最后一個(gè)量子比特儲(chǔ)存特征向量褥民,剩下的量子比特都作為量子位存儲(chǔ)的相位。
class PhaseEstimation(cirq.Gate):
    """
        num_qubits: The number of qubits of the unitary.
        unitary: The unitary gate whose phases will be estimated.
    """
    def __init__(self, num_qubits, unitary):
        self._num_qubits = num_qubits
        self.U = unitary

    def num_qubits(self):
        return self._num_qubits

    def _decompose_(self, qubits):
        qubits = list(qubits)
        yield cirq.H.on_each(*qubits[:-1])
        yield PhaseKickback(self.num_qubits(), self.U)(*qubits)
        yield cirq.qft(*qubits[:-1], without_reverse=True) ** -1

2.2使用QuTrunk進(jìn)行量子傅里葉變換

量子傅里葉變換是量子相位估計(jì)的一個(gè)子程序洗搂,使用QuTrunk進(jìn)行量子傅里葉操作示例如下:

首先準(zhǔn)備QuTrunk做量子傅里葉變換的環(huán)境消返。numpy是一個(gè)Python包,是一個(gè)由多維數(shù)組對(duì)象和用于處理數(shù)組的例程集合組成的庫(kù)耘拇。numpy擁有線性代數(shù)和隨機(jī)數(shù)生成的內(nèi)置函數(shù)撵颊,因此通常在進(jìn)行數(shù)組的算數(shù)和邏輯運(yùn)算、進(jìn)行傅立葉變換以及與線性代數(shù)有關(guān)的操作時(shí)候都需要使用numpy惫叛。在示例代碼中倡勇,QuTrunk通過(guò)qutrunk.circuit模塊實(shí)現(xiàn)量子邏輯門操作。在以下量子線路中嘉涌,對(duì)所有量子比特進(jìn)行H門操作以制備初態(tài)量子比特時(shí)妻熊,只需使用All(H) * qureg命令即可。在QuTrunk的量子邏輯門中p門的主要作用是將單個(gè)量子位的`|0\rangle``|1\rangle`之間的相位移動(dòng)給定的角度仑最。如扔役,P(np.pi / 4) * qreg[0]表示相位移動(dòng)角度為`\frac{π}4`

import numpy as np

from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import H, All, P


def run_QFT():
    circuit = QCircuit()
    qureg = circuit.allocate(3)

    All(H) * qureg
    circuit.qft([q.index for q in qureg])
    print(circuit.get_all_state())

    circuit.run()


def run_Full_QFT():
    circuit = QCircuit()
    qureg = circuit.allocate(3)

    All(H) * qureg
    circuit.qft()
    print(circuit.get_all_state())

    circuit.run()


def qft_single_wave():
    num_qubits = 4
    circuit = QCircuit()
    qreg = circuit.allocate(num_qubits)
    All(H) * qreg
    P(np.pi / 4) * qreg[0]
    P(np.pi / 2) * qreg[1]
    P(np.pi) | qreg[2]
    circuit.qft()
    print(circuit.get_all_state())
    circuit.run()

    return circuit


if __name__ == "__main__":
    run_QFT()
    run_Full_QFT()
    circuit = qft_single_wave()
    print(circuit.draw())

3.HHL算法

用于反演方程系統(tǒng)的HHL算法是一個(gè)基礎(chǔ)性的警医、易于理解的子程序亿胸,它是許多量子機(jī)器學(xué)習(xí)算法的基礎(chǔ)。該算法試圖用量子計(jì)算機(jī)求解Ax=b婉刀。HHL算法已在不同的量子計(jì)算機(jī)上被證明诱桂,HHL算法將求解向量`\vec{x}`的值轉(zhuǎn)化為求解矩陣M的期望值(M滿足`\vec{x^╀}M\vec{x}`)肝劲。在量子計(jì)算機(jī)上求解HHL算法時(shí),可以通常測(cè)量的概率得出期望值比如pauli算法X、Y舱殿、Z冈绊,可以將測(cè)量的概率轉(zhuǎn)換為關(guān)于這些運(yùn)算符的期望值霸妹。

HHL算法的核心思想如下:分別表示矩陣A的特征向量`{|u_j〉}`和特征值`{|λ~j~〉}`静盅,其中`0<λj<1`。因此蚣常,向量`\vec市咽`可以寫成特征向量的線性組合`{|u_j〉}``\vec抵蚊=\sum_{j\in \{1,N\}}β_j|u_j〉`施绎。HHL算法的目標(biāo)是獲取`\vec{x}=\sum_{j\in \{1,N\}}β_j{1\over{λ_j}}|u_j〉`。以下為HHL算法及其執(zhí)行的三個(gè)步驟(矩陣A可以使用量子相位估計(jì)算法得到):

HHL算法三步驟.jpg

HHL算法具體程序如下:

  • 輸入

1.輸入態(tài)`|b〉=\sum_jβ_j|u_j〉`;

2.使用`e^{iAt}`單元執(zhí)行受控操作的能力

  • 輸出量子態(tài)|x〉贞绳,|x〉滿足`A\vec{x}=\vec谷醉`

  • 步驟:

步驟1使用幺正變換`e^iA`進(jìn)行量子相位估計(jì)冈闭。該操作將特征值`λ_j`映射到以二進(jìn)制形式輸入寄存器以轉(zhuǎn)換系統(tǒng)俱尼。`|0\rangle_a|0\rangle_r|b\rangle_m \xrightarrow \\\sum_{j\in \{1,N\}}β_j|0\rangle_a|λ_j\rangle_r|u_j\rangle_m`

步驟2對(duì)每個(gè)`λ_j`執(zhí)行旋轉(zhuǎn)輔助量子比特`|0\rangle_a``\sqrt{1-{\frac{C^2}{{λ_j}^2}}}|0\rangle_a+\frac{C}{λ_j}|1\rangle_a `。最后該系統(tǒng)演變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=%60%5Csum_%7Bj%5Cin%20%5C%7B1%2CN%5C%7D%7D%CE%B2_j%EF%BC%88%5Csqrt%7B1-%7B%5Cfrac%7BC%5E2%7D%7B%7B%CE%BB_j%7D%5E2%7D%7D%7D%7C0%5Crangle_a%2B%5Cfrac%7BC%7D%7B%CE%BB_j%7D%7C1%5Crangle_a%EF%BC%89%7C%CE%BB_j%5Crangle_r%7Cu_j%5Crangle_m%20%60" alt="`\sum_{j\in \{1,N\}}β_j(\sqrt{1-{\frac{C^2}{{λ_j}^2}}}|0\rangle_a+\frac{C}{λ_j}|1\rangle_a)|λ_j\rangle_r|u_j\rangle_m `" mathimg="1">

步驟3執(zhí)行與步驟一相反的操作拒秘,此時(shí)系統(tǒng)表達(dá)式為`\sum_{j\in \{1,N\}}β_j(\sqrt{1-{\frac{C^2}{{λ_j}^2}}}|0\rangle_a+\frac{C}{λ_j}|1\rangle_a)|0_j\rangle_r|u_j\rangle_m `

  • 測(cè)量測(cè)量輔助量子比特得到`|x\rangle≈\sum_{j\in \{1,N\}}C(\frac{β_j}{λ_j})|u_j\rangle`号显。
HHL.png

HHL算法線路圖

3.1使用cirq定義HHL算法的量子線路

以下為使用cirq構(gòu)建HHL量子線路代碼示例。示例代碼中躺酒,cirq實(shí)現(xiàn)的是2×2的哈密頓矩陣押蚤。HHL算法一般使用三組量子比特,分別為輔助量子比特羹应、用于存儲(chǔ)矩陣A的量子比特揽碘、用于存儲(chǔ)輸入量子態(tài)`|b\rangle``|x\rangle`。量子邏輯門操作順序?yàn)槭紫仁褂昧孔酉辔还烙?jì)模塊提取A的特征值园匹,再對(duì)輔助量子比特進(jìn)行受控旋轉(zhuǎn)雳刺,最后進(jìn)行量子相位估計(jì)逆操作。操作的最終結(jié)果準(zhǔn)確性取決于寄存器大小和量子線路參數(shù)裸违。

def hhl_circuit(A, C, t, register_size, *input_prep_gates):

    ancilla = cirq.LineQubit(0)
    # to store eigenvalues of the matrix
    register = [cirq.LineQubit(i + 1) for i in range(register_size)]
    # to store input and output vectors
    memory = cirq.LineQubit(register_size + 1)

    c = cirq.Circuit()
    hs = HamiltonianSimulation(A, t)
    pe = PhaseEstimation(register_size + 1, hs)
    c.append([gate(memory) for gate in input_prep_gates])
    c.append(
        [
            pe(*(register + [memory])),
            EigenRotation(register_size + 1, C, t)(*(register + [ancilla])),
            pe(*(register + [memory])) ** -1,
            cirq.measure(ancilla, key='a'),
        ]
    )

    c.append(
        [
            cirq.PhasedXPowGate(
                exponent=sympy.Symbol('exponent'), phase_exponent=sympy.Symbol('phase_exponent')
            )(memory),
            cirq.measure(memory, key='m'),
        ]
    )

    return c

結(jié)尾

HHL算法并非意味著我們已經(jīng)可以實(shí)現(xiàn)HHL算法在真正的量子計(jì)算機(jī)上運(yùn)行解決實(shí)際問(wèn)題掖桦。目前雖有在量子計(jì)算機(jī)上實(shí)現(xiàn)HHL算法的成功示例,但HHL算法廣泛依然在很大程度上取決于有效量子比特?cái)?shù)的數(shù)目供汛。因此枪汪,量子計(jì)算機(jī)的研發(fā)工作還任重道遠(yuǎn)涌穆。如何利用現(xiàn)有的物理設(shè)備挖掘量子算法的應(yīng)用潛力,開發(fā)更多高效的量子算法雀久,也成為現(xiàn)階段量子計(jì)算領(lǐng)域的一項(xiàng)重點(diǎn)工作宿稀。

參考來(lái)源:

https://mp.weixin.qq.com/s/Vhv0oUQj0bBkL3cv9Pe0Ow

https://cloud.tencent.com/developer/article/1069783

https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.120.050502

https://github.com/quantumlib/Cirq/blob/master/examples/hhl.py

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赖捌,隨后出現(xiàn)的幾起案子祝沸,更是在濱河造成了極大的恐慌,老刑警劉巖越庇,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罩锐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悦荒,警方通過(guò)查閱死者的電腦和手機(jī)唯欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搬味,“玉大人境氢,你說(shuō)我怎么就攤上這事∨鑫常” “怎么了萍聊?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悦析。 經(jīng)常有香客問(wèn)我寿桨,道長(zhǎng),這世上最難降的妖魔是什么强戴? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任亭螟,我火速辦了婚禮,結(jié)果婚禮上骑歹,老公的妹妹穿的比我還像新娘预烙。我一直安慰自己,他們只是感情好道媚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布扁掸。 她就那樣靜靜地躺著,像睡著了一般最域。 火紅的嫁衣襯著肌膚如雪谴分。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天镀脂,我揣著相機(jī)與錄音牺蹄,去河邊找鬼。 笑死薄翅,一個(gè)胖子當(dāng)著我的面吹牛钞馁,可吹牛的內(nèi)容都是我干的虑省。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼僧凰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了熟丸?” 一聲冷哼從身側(cè)響起训措,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎光羞,沒想到半個(gè)月后绩鸣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纱兑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年呀闻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潜慎。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捡多,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铐炫,到底是詐尸還是另有隱情垒手,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布倒信,位于F島的核電站科贬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳖悠。R本人自食惡果不足惜榜掌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乘综。 院中可真熱鬧憎账,春花似錦、人聲如沸瘾带。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)看政。三九已至朴恳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允蚣,已是汗流浹背于颖。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚷兔,地道東北人森渐。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓做入,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親同衣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竟块,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容