帶你認識MindSpore量子機器學習庫MindQuantum

摘要:MindSpore在3.28日正式開源了量子機器學習庫MindQuantum,本文介紹MindQuantum的關鍵技術。

本文分享自華爲雲社區《MindSpore量子機器學習庫MindQuantum》,作者:HWCloudAI 。

MindSpore在3.28日正式開源了量子機器學習庫MindQuantum,本文介紹MindQuantum的關鍵技術。介紹MindQuantum前,先簡單闡述下量子計算的相關概念。

量子計算基本概念

量子計算是當今世界最具顛覆性的技術之一,各個國家和公司都在加大該領域的研發投入。量子計算機的概念最早是由著名物理學家費曼於1981年提出,按照他的想法,利用量子力學原理運行的量子計算機,相比於經典計算機能夠更快的對複雜量子系統進行模擬。由於量子系統的糾纏性、疊加性和並行性,人們可以以多項式級乃至指數級的加速來實現一些算法,如用於大數分解的Shor算法、用於量子搜索的Grover算法等。爲了讓大家快速步入量子計算大門,我們首先需要了解一些基本的概念,包括用於信息存儲的量子比特和對量子比特進行邏輯操作的量子門。

量子比特

在經典計算機裏,人們通常用電位的高低來表示二進制的0和1,然後利用三極管等半導體器件對電流進行操控,以完成通用邏輯運算。然而,在同一時間內,同一個比特只能處於低電位和高電位中的一種情況。在神奇的量子世界裏,一些實體可以同時處於兩種不同的狀態。例如電子,它的自旋可以同時處於向上的狀態和向下的狀態,如果我們把這種向上和向下的狀態分別記爲0和1

量子邏輯門

量子線路

我們可以對量子線路演化後的量子態進行測量,從量子態中提取信息,並進行後續操作。

下面,我們利用MindQuantum來對上面的線路進行演化,並得到最終的量子態。首先,按照[安裝指導](MindSpore/mindquantum)完成MindQuantum的安裝,運行如下代碼,將得到末態量子態。

import numpy as np
from mindquantum import Circuit
from mindquantum.highlevel import StateEvolution

c = Circuit()
c.h(0)
c.x(1, 0)
c.ry('theta', 2)

state = StateEvolution(c).final_state({'theta': np.pi/2}, ket=True)
print(state)

輸出如下:

0.5¦000⟩
0.5¦011⟩
0.5¦100⟩
0.5¦111⟩

因此我們得到最終用的量子態爲:

量子在機器學習中的應用

早在上個世紀,科學家就提出了用於機器學習的量子感知機概念。最近20年,越來越多的用於機器學習的量子算法被髮掘出來,其中包括用於求解線性方程組的HHL算法,和基於此的量子主成分分析、量子支持向量機等。下圖給出了各種量子機器學習算法對最好經典算法的加速效果。

然而,有意義地實用化這些算法需要成千上萬,乃至百萬量級的量子比特,在當前NISQ(Noisy Intermediate-Scale Quantum)階段,真實量子計算機的比特數只能達到幾十到幾百的量級,且系統含有較多噪聲。爲了在NISQ階段展現量子計算機的優勢,人們發展出來了量子經典混合機器學習庫,經典計算機與量子計算機相輔相成,共同完成一個複雜的任務,例如量子化學模擬和組合優化等。

量子機器學習庫MindQuantum

MindQuantum是結合MindSpore和HiQ開發的量子機器學習庫,支持多種量子神經網絡的訓練和推理。得益於華爲HiQ團隊的量子計算研發能力和MindSpore高性能自動微分能力,MindQuantum能夠高效處理量子機器學習、量子化學模擬和量子優化等問題,性能達到業界TOP1,爲廣大的科研人員、老師和學生提供了快速設計和驗證量子機器學習算法的高效平臺。

下圖是MindQuantum的架構圖,當前我們利用量子模擬器算子來對量子體系進行模擬,它可以完成前向傳播和梯度計算的功能,在此基礎之上,我們有量子算法庫,例如量子神經網絡啊、量子化學模擬的VQE和量子優化算法的QAOA等,再往上就有了量子應用,我們可以利用MindQuantum的量子算法來進行機器學習、化學模擬和運籌優化等任務。

在MindQuantum中,量子神經網絡的結構如下圖所描述,其中的量子線路由三大塊構成,編碼線路會將經典數據編碼到量子態上,然後是待訓練線路,我們可以通過調節線路中邏輯門的參數來使得最後的測量結果符合預期。

通過MindQuantum中的MindQuantumLayer,我們可以很容易的搭建量子機器學習層,並且可以無縫的跟MindSpore中其他的算子構成一張更大的機器學習網絡。下面,我們結合一個簡單的例子來體驗一下MindQuantum量子機器學習庫。

MindQuantum量子神經網絡初體驗

1. 量子線路的搭建

import numpy as np
from mindquantum.ops import QubitOperator
from mindquantum import Circuit, Hamiltonian

encoder = Circuit().rx('alpha', 0).ry('beta', 0).no_grad()
ansatz = Circuit().rx('a', 0).ry('b', 0)
circ = encoder + ansatz
ham =  Hamiltonian(QubitOperator('Z0'))
alpha, beta = 0.5, 1.2
encoder_data = np.array([[alpha, beta]]).astype(np.float32)

2. 搭建訓練網絡

from mindquantum.nn import MindQuantumLayer
import 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)

3. 訓練

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

未來展望

未來我們將不斷豐富量子神經網絡模型,支持更多的硬件後端。也歡迎廣大量子機器學習愛好者有興趣能夠加入我們,共同開發和維護MindQuantum開源社區。

瞭解完MindSpore的關鍵技術是不是很心動呢! 趕緊【點擊鏈接】 並【立即報名】,即可在 ModelArts 平臺學習到一個經典案例掌握基於MindSpore的深度學習!

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章