本文預計閱讀8-15分鐘!點擊文末【閱讀全文】,即可在 ModelArts 平臺學習到一個經典案例掌握基於MindSpore的深度學習!
專家解惑 | 關於華為雲盤古大模型,你想問的都在這裡~
MindSpore在3.28日正式開源了量子機器學習庫MindQuantum,本文介紹MindQuantum的關鍵技術。介紹MindQuantum前,先簡單闡述下量子計算的相關概念。
量子計算是當今世界最具顛覆性的技術之一,各個國家和公司都在加大該領域的研發投入。量子計算機的概念最早是由著名物理學家費曼於1981年提出,按照他的想法,利用量子力學原理運行的量子計算機,相比於經典計算機能夠更快的對複雜量子系統進行模擬。由於量子系統的糾纏性、疊加性和並行性,人們可以以多項式級乃至指數級的加速來實現一些算法,如用於大數分解的Shor算法、用於量子搜索的Grover算法等。
為了讓大家快速步入量子計算大門,我們首先需要了解一些基本的概念,包括用於信息存儲的量子比特和對量子比特進行邏輯操作的量子門。
在經典計算機裡,人們通常用電位的高低來表示二進位的0和1,然後利用三極體等半導體器件對電流進行操控,以完成通用邏輯運算。然而,在同一時間內,同一個比特只能處於低電位和高電位中的一種情況。在神奇的量子世界裡,一些實體可以同時處於兩種不同的狀態。例如電子,它的自旋可以同時處於向上的狀態和向下的狀態,如果我們把這種向上和向下的狀態分別記為0和1,那麼以電子自旋為代表的量子比特則可以同時處於0和1的疊加態。按照狄拉克符號的規則,我們把這種0和1的狀態分別記為|0>和|1>,稱為右矢表示。對於單個量子比特,其狀態是處於|0>和|1>的疊加態,也即:
|∮)=a|0)+b|1)
這裡,a和b必須滿足|a|²+|b|²=1,也即態的歸一化條件。有一定線性代數基礎的同學看到這裡可能就會想到,單量子比特的態就是以|0>和|1>為基矢所張成的二維空間中的矢量。我們把此空間稱為希爾伯特空間。而多比特量子態所處的空間則由多個這種單比特空間直積而成。為了便於大家理解,我們可以將|0)和|1)用二維空間中最簡單的兩個正交基矢表示:
這樣任意的單量子比特態可以表示為:
這樣任意的單量子比特態可以表示為:
那麼多量子比特又該如何表示呢?以兩比特為例,兩比特量子態所處的空間由兩個二維希爾伯特空間直積而成,四個基矢分別為|00)、|01)、和|11),其中:
其他以此類推。因此,我們可以發現,對於N個比特的系統,其量子態能夠同時處於2^N個計算基矢的疊加態上,這是經典比特無法企及的。
有了基本量子信息載體的量子比特後,我們就需要對這些量子比特進行相應的操控。在經典計算機裡,我們有一些半導體器件來對電信號進行處理,從而形成經典邏輯門,例如與非門、異或門等。而在量子計算機裡,我們將這種對量子比特進行操控的邏輯門成為量子邏輯門,例如在超導量子計算機中,我們可以將一些微波脈衝作用在超導量子比特上,對其進行相應的控制,例如比特翻轉等。這種操控所形成的邏輯我們也可以用線性代數語言來描述,例如最常用的幾個邏輯門X、Y和Z三個泡利門和哈達瑪門H可以分別用矩陣表示為:
這些門都是作用在單比特上的量子門,其作用在量子態的運算規則滿足矩陣乘法,例如:
我們可以發現,X就是比特翻轉門,它將|0)態翻轉為|1)態,將|0)態翻轉為|1)態。除了這種單比特門,我們還有多比特門,例如控制翻轉門CNOT,它的作用效果是只有當控制位為|1)時,才在作用位上作用翻轉門X。
不難發現,上面的量子門的矩陣數值上都是固定的,還有一些門,他們是可變參數的,例如Rx、Ry和Rz旋轉門。它們的矩陣表達式為:
這裡,通過改變 \theta 的值,我們得到不同的旋轉門。
類比於經典線路,我們可以把一系列的量子邏輯門進行精心的設計組合,構成一個量子線路並完成一定的任務。如下圖所示,該量子線路對三個量子比特進行調控,分別為q0、q1、和q2線路由三個量子門構成分別為作用在q0上的哈達瑪門、受q0控制且作用在q1上的X門和作用在q2上的含參數旋轉門Ry(⊙)。
我們可以對量子線路演化後的量子態進行測量,從量子態中提取信息,並進行後續操作。
下面,我們利用MindQuantum來對上面的線路進行演化,並得到最終的量子態。首先,按照[安裝指導](MindSpore/mindquantum)完成MindQuantum的安裝,運行如下代碼,將得到末態量子態。
因此我們得到最終用的量子態為:
早在上個世紀,科學家就提出了用於機器學習的量子感知機概念。最近20年,越來越多的用於機器學習的量子算法被發掘出來,其中包括用於求解線性方程組的HHL算法,和基於此的量子主成分分析、量子支持向量機等。下圖給出了各種量子機器學習算法對最好經典算法的加速效果。
然而,有意義地實用化這些算法需要成千上萬,乃至百萬量級的量子比特,在當前NISQ(Noisy Intermediate-Scale Quantum)階段,真實量子計算機的比特數只能達到幾十到幾百的量級,且系統含有較多噪聲。為了在NISQ階段展現量子計算機的優勢,人們發展出來了量子經典混合機器學習庫,經典計算機與量子計算機相輔相成,共同完成一個複雜的任務,例如量子化學模擬和組合優化等。
MindQuantum是結合MindSpore和HiQ開發的量子機器學習庫,支持多種量子神經網絡的訓練和推理。得益於華為HiQ團隊的量子計算研發能力和MindSpore高性能自動微分能力,MindQuantum能夠高效處理量子機器學習、量子化學模擬和量子優化等問題,性能達到業界TOP1,為廣大的科研人員、老師和學生提供了快速設計和驗證量子機器學習算法的高效平臺。
下圖是MindQuantum的架構圖,當前我們利用量子模擬器算子來對量子體系進行模擬,它可以完成前向傳播和梯度計算的功能,在此基礎之上,我們有量子算法庫,例如量子神經網絡啊、量子化學模擬的VQE和量子優化算法的QAOA等,再往上就有了量子應用,我們可以利用MindQuantum的量子算法來進行機器學習、化學模擬和運籌優化等任務。
在MindQuantum中,量子神經網絡的結構如下圖所描述,其中的量子線路由三大塊構成,編碼線路會將經典數據編碼到量子態上,然後是待訓練線路,我們可以通過調節線路中邏輯門的參數來使得最後的測量結果符合預期。
通過MindQuantum中的MindQuantumLayer,我們可以很容易的搭建量子機器學習層,並且可以無縫的跟MindSpore中其他的算子構成一張更大的機器學習網絡。下面,我們結合一個簡單的例子來體驗一下MindQuantum量子機器學習庫。
對於如上的量子線路,encoder線路表徵系統對初始量子態的誤差影響,a和β為某個固定值,我們需要訓練一個ansatz線路來抵消掉這個誤差,使得最後的量子態還是處於|0)態。這時我們只需要對量子末態進行泡利算符Z測量,由於|0)態是算符Z的本徵態,且本徵值為1,因此我們只需讓測量值最大即可。
import numpy as npfrom mindquantum.ops import QubitOperatorfrom mindquantum import Circuit, Hamiltonian
encoder = Circuit().rx('alpha', 0).ry('beta', 0).no_grad()ansatz = Circuit().rx('a', 0).ry('b', 0)circ = encoder + ansatzham = Hamiltonian(QubitOperator('Z0'))alpha, beta = 0.5, 1.2encoder_data = np.array([[alpha, beta]]).astype(np.float32)from mindquantum.nn import MindQuantumLayerimport mindspore as ms
class Net(ms.nn.Cell): def __init__(self, pqc): super(Net, self).__init__() self.pqc = pqc def construct(self, x): return -self.pqc(x)
pqc = MindQuantumLayer(['alpha', 'beta'], ['a', 'b'], circ, ham)train_net = Net(pqc)opti = ms.nn.Adam(train_net.trainable_params(), 0.2)net = ms.nn.TrainOneStepCell(train_net, opti)for i in range(100): print(net(ms.Tensor(encoder_data)))最後收斂結果為-0.993。同時我們也可以求得最後量子態與目標態的保真度。
from mindquantum.highlevel import StateEvolution
a, b = pqc.weight.asnumpy()pr = {'alpha': alpha, 'beta': beta, 'a': a, 'b': b}state = StateEvolution(circ).final_state(pr)fid = np.abs(np.vdot(state, [1, 0]))**2通過上面的訓練,我們利用量子神經網絡抵消了系統的誤差,使得最後的量子態的保真度達到99.9999%。
更多樣例
除了上面簡單的例子外,我們還給出了利用MindQuantum來進行自然語言處理、量子化學模擬、組合優化求解和手寫體識別等案例,具體請參考下面連結:
https://gitee.com/mindspore/mindquantum/tree/master/tutorials
END
點擊閱讀原文,立刻報名學習!