(原標題:科普:量子計算機是這樣計算的)
來源:電子大爆炸
導讀:AlphaGo大戰李世石,最終以4:1擊敗李世石。計算機擊敗了人類已成事實,不用懷疑。當你知道量子計算機就是為「優化」問題而誕生時,你就會懂得這個結果將是必然。但是我們看到,部分媒體一知半解,過分渲染了量子計算機的能力,片面解讀了它的計算優勢。當您看了這兩篇D-Wave公司的文章,您就會明白:什麼是量子計算機、它是如何實現和工作的、它長得什麼樣、解決什麼類型的問題等……D-Wave系統公司,是世界上第一個量產量子計算機的公司,堪稱量子計算機的鼻祖。本文及下一篇文章都是翻譯他們寫的科普文章《量子計算入門》和《D-Wave量子計算機硬體介紹》,李電匠在此逐段逐段的翻譯整合如下,之前的分開翻譯的部分,請進入歷史消息中查找。李電匠只有國家四級的英語水平,不當之處,敬請諒解!
本教程是想介紹量子計算中的概念和術語、提供一個量子計算機大致概念以及為何您可能會想去弄一個。這裡的材料是用非常高階的概念寫的,目的是讓那些有工科背景和無工科背景的觀眾比較容易理解。若您有物理、數學、編程方面的背景,則對您理解本文中的概念是有幫助的,但這並不是硬性要求。跟著本入門的閱讀,您將學到:
1:量子物理是如何給了我們一種新的計算方式
2:量子計算和古典計算的相似性和差異性
3:量子計算的基本單元是如何用來解決難題的
4:為什麼量子計算同樣適用於人工智慧、機器自學應用以及量子計算機可能會用作人工智慧的協處理器
第一節
1.1 - 傳統計算機原理
為了理解量子計算,我們先來了解一下傳統計算機原理是有幫助的。我們採用了現代數位化計算機和它們的能力去執行大量不同的軟體應用,比如,我們的臺式機,筆記本和智慧型手機可以運行電子表格、流媒體視頻、允許我們和世界另一端的人聊天以及讓我們沉浸在栩栩如生的3D場景中。但是對於這些數位化計算機的核心來說,他們都有共同點:他們都是執行簡單算法操作,他們的計算能力取決於能做這些事情的計算速度的極大值。電腦美妙執行數十億條指令。這些指令執行的如此迅速以便於電腦可以允許我們運行非常複雜的高級軟體。傳統電腦的原理總體來說可以用圖1來表示
圖1,傳統電腦中的數據流
儘管在許多領域中傳統電腦很好的解決了很多問題,但在某些領域中使用傳統電腦進行計算看起來非常困難。比如這些領域:圖像識別、自然語言(讓電腦理解我們人類所說的話而不是程式語言)、必須讓電腦先學習相關經驗才有能力處理的某些特殊的任務。甚至有些是在過去幾十年已經投入大量努力和研究到某個領域,但我們在這個領域的進展還是很慢的,我們不得不去使用大量超級計算機去運算,消耗著大量的能源和空間。
我們可能會問:難道這世上沒有其他設計計算機系統的方式嗎?如果我們可以從撓頭思考開始,做些完全不同的,使得計算效果在傳統電腦發現很難的領域有較大的改進。那麼我們怎樣才能重新構建一種新類型的電腦呢?
1.2 - 一種新的計算方式
相對於將0和1組成的比特流轉換成其他比特流的傳統計算操作,量子計算是一種截然不同的計算方式。在量子計算中,一切都是變化的,不管是從我們經常理解信息比特的物理層還是操作他們的設備都完全不同。我們製造這種設備的方法是不同的,需要新材料、新的設計規則和新的處理器架構。最終,我們編寫這些系統的方法也完全不同。本文將揭露這些問題的源頭,也就是如何將傳統的二進位0和1的信息表達方式替換成新的信息表達方式「qubit"(Q比特),這樣才能改變我們對計算本身的思考方式。
1.3 - 電燈開關遊戲
在了解量子計算之前,我們需要深刻理解為什麼我們不能用傳統數字計算機去解決某些問題。讓我們思考這樣一個數學問題去勾勒這一點,我們稱之為電燈開關遊戲。
電燈開關遊戲涉及試圖在一堆開關中尋找最好的設置。這裡的一張圖舉例介紹這個問題:
圖二,電燈開關遊戲
讓我們想像一下,每一個燈的開關有一個數字跟它緊密相關,是給你備選的的(你不要去改變這個)。我們叫這個數字是「偏差值」。你要做的是:對每一個燈的開關打開或者關閉進行選擇。在我們的遊戲中,打開表示1,關閉表示-1。我們緊接著把所有開關的偏差值乘以對應的打開/關閉的值。這將會產生一個結果。這個遊戲的本意是設置所有開關打開關閉狀態以求得最小值。在數學上,我們把每隔開關的偏差值定義為hi,開關設定稱為Si
圖三,玩電燈開關遊戲,把每個開關的偏差值乘以他們的設定值(你必須選)後加總。
根據哪個開關是打開以及哪個開關是關閉的,我們將得到不同的分數。您可以試一下這個遊戲。希望您能很輕鬆地找到,因為這有一個簡單規則可以成功:
圖四,請為這個開關設置的特殊「猜想」作答
我們發現如果我們設置所有帶正偏差值的開關為關閉,將負偏差值的開關打開,然後再加總,我們將得到最小的一個值。容易吧?我可以給你無窮多個不同偏差值的開關,而你只用看把這些開關按這個規則打開關閉即可。
好,我們讓這個問題更難一些。請想像一下有很多「對」開關有附加規則,這裡的一是「一對」而不是一個開關。我們增加一個新的偏差值J,把兩個開關的設定值相乘後與J相乘,我們把這樣的規則用於每一對開關後的結果和之前的結果加總。還是一樣,我們需要做的是,如何選擇開關狀態打開或關閉以適應這個新規則。
圖五,增加附加規則讓開關遊戲的難度取決於開關「對」數
但現在這個是非常、非常難以決定到底是哪個個開關應該打開或者關閉了,因為鄰居會影響它。甚至簡化到如前圖只有兩個開關的情況,您仍不能使用之前的規則,也就是根據偏差值設置他們為負數。(您試試)在所有開關都有鄰居的複雜網絡面前,這一下子要找出正確的組合讓你得到最小值,就變得非常沮喪了。
圖六,電燈開關遊戲,帶有附加規則,產生一張互相作用的電燈開關網
1.4 - 那麼量子機制怎麼幫我們?
每一對開關你若嘗試所有組合,有四種可能性:
[開,開],[開,關],[關,開],[關,關]。
但隨著您增加越來越多的開關數量,這種可能性的數量將隨著開關數量呈指數增長:
圖7,電燈開關遊戲帶來的指數問題
您應該明白為什麼這個遊戲不再好玩了。實際上這個問題甚至對於大多數強大的超級計算機來說都很困難。要把這麼多可能的配置存進內存,並把他們送進傳統處理器,去計算我們的猜測是否正確的話,那將花費非常長的時間。假設500個開關,宇宙都沒有足夠的時間去檢查所有的配置。
量子機制可以給我們此問題的好幫手。量子計算機的基礎計算能力來源於一種想法,也就是您可以將信息比特放進狀態中的疊加態。您可以想像成這麼一種情況,量子比特還沒有決定它將成為那種狀態。有人喜歡把這種疊加態看作「同時擁有兩種狀態」。或者你也可以把量子比特的狀態看作未決定是選+1還是-1。這意味著如果使用量子計算機,我們的電燈開關將能同時打開和關閉。
圖8:量子機制的信息比特(Q比特)可以存在於已知的疊加態中,這個疊加態並沒有選擇到底是變成+1或是-1(換句話講,您可以認為它即是+1又是-1)
現在來看一下和之前同樣數目的開關群,但現在送入量子計算機的內存(注意那個偏差值還沒有加上去)
圖9,一個由疊加態下的量子比特組成的網,答案就在這裡的某處!
由於所有的電燈開關都是同時打開並且關閉,我們知道正確答案(正確的打開關閉每一個開關)就在什麼地方擺著呢,它只是現在還躲著我們。但也沒問題,因為量子機制將把它給我們找出來。D-Wave量子計算機允許您用一種這樣的「量子表述」並提取出獲得最小值的開關打開關閉的配置。下面就是它的工作原理:
圖10,計算機採用疊加態比特開始計算,結束時產生傳統常態比特流,並沿此方式找到答案
你啟動了如前所述的量子疊加態下的系統,您慢慢的調節量子計算機去關閉量子疊加效應。同時,你慢慢調高所有的偏差值(H,J的要先調)。當這個操作執行了,所有開關會慢慢跳出他們的疊加態並選擇一個狀態不管是打開還是關閉。當您把他們加總的時候,內部採用量子機制工作的電腦幫助開關設置到正確的狀態以獲得最小值。儘管N個開關可能產生2的N次方個可能性配置,它也能在結束的時候發現最小值,贏得電燈開關遊戲。所以,我們可以知道量子計算機允許我們精簡表達式,就像這種我們研究的:
\[ E(s) = \sum_i h_i s_i + J_{ij}s_i s_j \]
但對於傳統計算機又是非常困難的(或者說不可能完成)
第二節
2.1 這是個數學公式,誰關心啊?
我們從來不會製造一個機器用來玩某種奇怪變態的電燈開關遊戲。日常生活中,我們曾經遇到許多應用程式的核心問題,其本質是在一對變量中(比如開關)尋找一個最佳組合。一部分我們列舉如下。甚至科學探索本身就是一種優化問題。(你們試圖尋找最佳要素「配置」,以使得科學公式能夠和真實世界的觀測一致)
圖11,舉的這些例子都是在尋找良好的「開關設置」,並可以非常有效的被量子計算機處理。
2.2 能量程序
為了理解這些問題是如何被映射成尋找開關設置的,讓我們看看量子計算機是如何被編程的。回到前面的圖1,在比特流通過邏輯程序的應用軟體轉換成其他比特流的那個過程,我們現在用一種不確定是「-1」還是「1」的東西去代替,因此計算方式從最基礎的方式上就不一樣了,如圖12所示。在這種情況下,一組Q比特被初始化進入疊加態,此時「能量程序」(取代邏輯程序)開始作用於這組Q比特。Q比特在計算的開始時一種未決定的狀態,在計算結束時所有的Q比特都已經做出了選擇,不論這種選擇是-1還是1。那麼什麼是能量程序呢?其實就是H和J的數值啦,我們之前說的偏移量設置。在電燈開關遊戲中,我們說H和J是給定的。我們現在知道了,H和J其實是來自您想解決的問題,並因為問題不同而不同。
圖12,量子計算機最基礎的操作就是支持能量程序(一組H和J的數字)
並讓計算機尋找開關設置(+1和-1)
精巧製作一個能量程序或者說構造出一系列的H和J的值,用來解析您真正關心的實際問題,是極端困難和花費時間的。這基本上等同於在您的電腦內部通過發送機器碼到微處理器給您的電腦編程一樣!幸運的是,這有一個比較好的方式,即通過量子編譯器去編寫量子電腦程式。這種過程的細節解釋,參見「Programming with D-Wave」白皮書。
2.3 量子計算機會學習
教會電腦知道現實問題的原因並從經驗中學習的方法就叫做機器學習。這是人工智慧的一個分支。我們所寫的大部分代碼都是完全靜態的,也就是說,給定新的數據,它將不斷地重複執行相同的計算並且犯同樣的錯誤。使用機器學習,我們可以設計自我修正的程序。這種程序還可以學習採用新的方法去處理一小段數據,甚至這些數據機器從來就沒見過。在D-Wave硬體上運行很好的程式都是需要在不確定條件下學習和做出決定的程序。舉個例子,假設讓電腦基於一組之前給它看過的相似物體的圖片中識別某個物體。對於遵循嚴格邏輯原因設計的傳統電腦架構來說,這個任務非常困難。如果系統被輸入了一張新圖,它就很難對這張圖進行總體描述。比如「這看起來像個蘋果」。D-Wave的處理器是被設計成支持那些擁有高級認知水平和決斷能力的應用程式
我們怎樣才能使用量子計算機去實現學習呢?舉個例子,比如我們想讓系統識別物體。為此編寫能量程序也是非常困難的,甚至是使用量子編譯器也是如此,因為我們不知道在細節上如何能抓住讓系統必須認識的物體本質。幸運的是,我們還有另一種方法繞開這個問題。因為這裡有一種模式可以讓量子計算機根據新輸入的數據片段來調整它自己的能量程序。這就允許機器做出比較好的去猜想這個物體到底是什麼。甚至這個實例電腦從來沒有見過。下面的章節給除了這個過程的大致框架。
2.4 一種可以自我編程的電腦
為了讓系統可以改變自己的能量程序,你一開始給系統看很多很多的你想讓它知道的概念實例。如圖13的例子,這裡是想讓電腦學習不同類型水果的差異。為了達到這一點,我們展示很多不同的蘋果、楊梅、瓜果的圖片(或者其他,用數字代表這些圖)給系統構思差異。同時,我們每次告訴系統「正確」答案,也就是告知它「開關設置」(標識)在每次量子計算完成後的設置。系統必須找出一個能量程序(我們一開始並不知道,再此顯示一個問號),能讓系統一看到所示圖片,就能找到相關的標識。如果它答錯了許多次,那麼算法就知道應該需要更改能量程序了。
圖13,通過允許它自己改寫能量程序教育量子晶片。系統調整能量程序直至每次都能答對。
這就是我們常說的培訓或者學習階段。
一開始系統隨機選擇一個能量程序(記得嗎,就是一堆h和j的值)。他一開始可能選擇了錯誤的標識,不過沒關係,我們繼續給它看樣品,而且每次允許它調整能量程序。那麼他將越來越會選擇正確的標識(開關設置)。當系統基於之前的數據已經100%準確了,我們就保留最後的能量程序,並用這個能量程序作為我們的「學習」程序去識別一張新的從未見過的樣品(圖14)。在機器學習術語中,這就是稱為強制學習算法。我們不斷地示圖和告訴正確答案的目的就是為了幫助它學習。當然系統還支持其它類型的學習算法,甚至某些可以在標識數據不可用的情況下使用。
圖14,在系統在訓練期間發現一個好的能量程序後,它可以標識出從未見過的樣品以幫助我們解決現實問題。這就是所謂的「測試」階段。
2.5 不確定性是一個功能特性
另外有意思的一點就是量子計算機是概率論化的,意思就是它會給出很多個答案,某些是你在尋找的,而某些不是。一開始聽到這個,恐怕不是件好事。就像你每次問計算機同一個問題,而計算機每次給你不同的答案一樣,這應該是個Bug吧!但是,對於量子計算機來說,返回不同答案意味著我們得到了關於電腦的信心度重要信息。拿上面的水果例子。假設你問它100遍,計算機回答100遍蘋果,那麼計算機就是100%自信。但如果它回答50遍蘋果,50遍楊梅,那就意味著電腦不確定你拿給他看的是什麼。但如果你把蘋果和楊梅的混合圖片給電腦看而得到這種結果的話,那麼這個就是完全正確的了。當你要設計一種能夠做出複雜決定和從現實生活中學習的系統時,這種不確定性是非常有用的。