教你在經典計算機上搭建一個量子神經網絡,已開源

ai科技評論 發佈 2020-08-31T03:13:40+00:00

本文將教你搭建簡單的二分類量子神經網絡,並在經典計算機上運行,該項目已經開源。接下來,我們首先會介紹傳統神經網絡的工作原理,如果你對此已經很熟悉,可以直接跳到第3節閱讀如何搭建量子神經網絡。

作者 | Sashwat Anagolum

編譯 | 張大倩、陳彩嫻

本文將教你搭建簡單的二分類量子神經網絡,並在經典計算機上運行,該項目已經開源。構建量子神經網絡與傳統的方式並不完全相同——它沒有使用帶權重和偏置的神經元,而是將輸入數據編碼為一系列量子比特,應用一系列量子門,並改變門的參數,使損失函數最小化。

項目地址:https://github.com/SashwatAnagolum/DoNew/tree/master/QNN

雖然這聽起來很新鮮,但其根本思想和傳統還是一樣的——改變參數集,使網絡預測和輸入標籤之間的差異最小化,並且同樣基於反向傳播算法。

接下來,我們首先會介紹傳統神經網絡的工作原理,如果你對此已經很熟悉,可以直接跳到第3節閱讀如何搭建量子神經網絡。

1 權重、偏差和構建模塊

幾乎人人都知道神經網絡。如今,許多酷炫的技術都使用了神經網絡,包括自動駕駛汽車、語音助手和惡搞名人照片的軟體等。

神經網絡與其他算法的不同之處在於:我們不用寫下一長串的規則,只需要向神經網絡提供數據即可。

我們可以從IRIS數據集中提取一些數據注入神經網絡,這些數據包括三種花的信息,然後網絡會預測是哪種花。

神經網絡由大量的神經元組成,如下所示:

大多神經元會含有多個數字輸入(上圖的藍色圓圈),然後將每個輸入與表示輸入重要性的權重(w_i)相乘。權重越大,相關輸入就越重要。

偏差被視為另一種權重,只是它所與之相乘的輸入值始終為1。將所有加權輸入進行相加後,得到輸出值。

然後應用激活函數,我們將得到神經元的激活值,如上圖中的紫色圓圈所表示。激活值通過一個函數(上圖中的藍色長方形)傳遞,輸出神經元:

我們可以通過更改激活函數來改變神經元的行為。比方說,我們可以進行一個非常簡單的轉換,例如:

但實際上,我們應用的是更複雜的函數,例如Sigmoid函數:

神經元怎樣才能發揮作用呢?

神經元可以根據所接收到的輸入來做決策。比方說,我們可以向神經元注入以下三個問題的答案,然後讓神經元來猜測我們下次去義大利用餐時是想吃披薩還是想吃意大利麵:

  • 問題1:我喜歡這家餐廳的意大利麵嗎?

  • 問題2:這家餐廳有義大利青醬嗎?

  • 問題3:這家餐廳有三層奶酪披薩嗎?

拋開可能存在的飲食健康問題不說,我們來看一下神經元會有什麼表現:

在對輸入進行編碼時,我們用0代表「否」,1代表「是」。同樣地,對輸出進行編碼時,我們可以分別用0指代意大利麵、用1來指代披薩:

接著,我們用階躍函數(step function)來轉換神經元的激活值:

只需要一個神經元,我們就可以捕捉多種不同的決策行為:

  • 決策1:如果我們喜歡這家餐廳的意大利麵,我們就會點意大利麵,除非青醬賣完,或者這家餐廳提供三層奶酪比薩。

  • 決策2:如果我們不喜歡這家餐廳的意大利麵,我們就會點披薩,除非還有青醬,或者沒有三層奶酪披薩。

或者換個方式:我們可以對神經元進行編程,讓這個神經元與一組特定的偏好對應。

如果我們只是想要預測下次出門吃什麼,我們很容易就能找出神經元的一組權重和偏差。但如果我們要在一個規模齊全的網絡上進行同樣的預測,那該怎麼辦?

預測過程可能要耗很長一段時間。

幸運的是,我們不用猜測所需的權重值,只需創建可以改變神經網絡參數(比如權重、偏差甚至結構)的算法,以便網絡可以學習如何解決問題。

2 「以退為進」

在理想情況下,神經網絡的預測應該與輸入關聯的標記相同。因此,預測與實際輸出的差異越小,神經網絡所學到的權重就越優秀。

我們用一個損失函數來量化這種差異。損失函數可以採用任何形式,例如二次損失函數(quadratic loss function):

y(x)是理想輸出。當饋送帶有參數θ的數據x時,

是神經網絡的輸出。由於損失始終為非負值,一旦取值接近於0,我們就知道網絡已經學會了一個好的參數組。當然,這個過程中可能還會出現其他問題,例如過擬合,但這些可以暫時忽略。

應用損失函數,我們可以找到網絡設置的最佳參數是:

因此,我們要做的不是猜測權重,而是在使用參數θ時,應用梯度下降技術將C最小化:

這時,我們需要留意,增加θ_i的值後,損失會如何變化,然後更新θ_i,以使損失稍微降低。η是一個很小的數字,它的變化取決於我們更新θ_i時所做的改變。

為什麼η是一個小的數字呢?因為我們可以對它進行調整,以保證在每次更新後,數據x的損失會接近0。在多數情況下,這並不是一個好的解決方法,因為這雖然可以減少當下x的損失,但其他饋送到網絡的數據樣本很可能會因此而表現較差。

想必現在大家都已掌握了基本的原理,接下來我們來看看要如何構建一個量子神經網絡(quantum neural network)。

3 量子神經網絡工作原理

首先,我們向網絡提供一些數據x,這些數據x通過特徵圖傳遞——通過特徵圖,我們可以將輸入的數據轉換成某種形式,從而構建輸入量子態:

我們使用的特徵圖可能是任何形式,比如將一個二維向量x變換成一個角。

一旦x被編碼為量子態,我們應用一系列量子門:

網絡的輸出,我們稱之為π(x,0),是最後一個量子比特被測量為 |1〉狀態的機率(Z_n-1代表將Z門應用到最後的量子比特),加上一個經典的偏置項。

最後,我們在輸出的數據中取出和 x 有關聯的標籤,用來計算樣本上的損失——我們將使用二次損失,如下:

從輸出的數據中可以得到網絡 p 的預測:

接下來要計算損失函數

的梯度,當然完全可以使用傳統的方法,但我們需要的是一種在量子計算機上計算的方法。

4 全新的計算梯度的方法

我們先求損失函數對θ_i的微分:

展開最後一項:

通過求導,我們可以去掉常數項。

現在,使用乘積法則,我們可以進一步展開:

上面這個公式讀起來有一點痛苦,但是通過 Hermitian 共軛,可以轉化為下面這個簡單的公式:

U(θ) 由多個門組成,每一個門又由不同的參數控制,求U的偏導數只需要求門U_i(θ_i)對θ_i的偏導數:

我們把U_i定義為相同的形式,稱為G門,當然形式不是唯一的。

定義了U_i的形式後,就能找到它的導數:

幸運的是,我們可以用G門來表示導數:

所以剩下的就是想辦法構造出一個電路來得到所需的內積形式:

Hadamard測試是最簡單的方法——首先,我們準備好輸入的量子態,並將輔助態製備為疊加態:

現在對|ψ>應用Z_n-1B,約束輔助態是|1>:

然後翻轉輔助態,用A做同樣的操作:

最後,對輔助態使用另一個Hadamard門:

現在輔助態等於0的機率是:

因此如果我們用U(θ)代替B,用U(θ)的共軛對θ_i的導數來代替A,然後輔助量子比特為0的機率將會給我們π(x,θ)對θ_i的梯度。

很好!我們找到了一種在量子計算機上解析計算梯度的方法——現在剩下的就是建立我們的量子神經網絡了。

5 建立量子神經網絡

我們導入所有模塊:

看看我們的數據,這是一版刪除了一個類的IRIS數據集:

我們需要從標籤中分離特徵(前四列):

構建一個函數來做特性映射。

由於輸入向量是歸一化的,並且是四維的,對於映射有一個超級簡單的選擇——使用2個量子比特來保存編碼的數據,並使用一個映射將輸入向量重新創建為量子態。

為此,我們需要兩個函數。一個函數從向量中提取角度。

另一個函數將角度轉換成量子態。

這樣講解可能有點令人困惑,但是你並不一定要理解QNN是如何構建的。如果你想了解構建原理可以閱讀這些代碼。

代碼地址:https://github.com/SashwatAnagolum/launchpad/blob/master/tutorials/load_probability_distributions.ipynb

現在可以編寫實現U(θ)所需的函數了,我們將採取RY門和CX門交替層的形式來實現函數。

為什麼需要CX層?如果不把它們包括進來,就沒辦法執行糾纏操作,這將限制網絡能夠涉及的希爾伯特空間的范。使用CX門,網絡可以捕捉量子比特之間的交互。

我們從G 門開始:

接下來,操作CX門:

現在把這些結合在一起得到U(θ):

接下來,我們創建一個函數來獲取網絡的輸出,另一個函數將這些輸出轉換為類別預測:

現在我們可以構建一個函數,在網絡執行上前向傳遞。

緊接著,需要寫出所有關於測量梯度的函數。首先,我們必須能夠應用控制版本的U(θ):

使用這個,我們可以創建一個函數並得出期望值:

現在我們可以算出損失函數的梯度,最後做的乘法是為了得到π(x, θ) - y(x) 梯度項:

一旦我們有了梯度,就可以使用梯度下降來更新網絡參數,「動量」技巧可以幫助加快訓練時間:

現在我們可以建立自己的損失函數和準確率函數,然後就可以觀察網絡訓練的情況:

最後,我們創建訓練網絡的函數,並調用它:

我們傳遞給np.random.sample方法的數字決定了參數集的大小——第一個數字(5)是G層的數量。

這是我在測試5層網絡、15次疊代後得到的數據輸出:

這些數據看起來是相當不錯——我們在驗證集上達到了100%的準確率,這意味著網絡成功地覆蓋了邊緣測試示例!

6 結語

我們成功建立了量子神經網絡,太棒了!可以使用幾種方法來進一步降低損失,例如訓練網絡進行更多的疊代,或者調整超參數:如批量大小和學習率。另一個很酷的方法是為U(θ)嘗試選擇不同的門。

原文連結:https://towardsdatascience.com/quantum-machine-learning-learning-on-neural-networks-fdc03681aed3

[博文視點贈書福利]

AI科技評論聯合博文視點贈送周志華教授「森林樹」十五本,在「周志華教授與他的森林書」一文留言區留言,談一談你和集成學習有關的學習、競賽等經歷。

AI 科技評論將會在留言區選出15名讀者,每人送出《集成學習:基礎與算法》一本。

活動規則:

1. 在「周志華教授與他的森林書」一文留言區留言,留言點讚最高的前 15 位讀者將獲得贈書。獲得贈書的讀者請聯繫 AI 科技評論客服(aitechreview)。

2. 留言內容會有篩選,例如「選我上去」等內容將不會被篩選,亦不會中獎。

3. 本活動時間為2020年8月23日 - 2020年8月30日(23:00),活動推送內僅允許中獎一次

關鍵字: