文章專區

2021-05-01零與一之間的威力 量子電腦的原理 617 期

Author 作者 鍾豪/臺灣大學電機碩士畢業,現為卡內基美隆大學電腦工程博士生。喜歡遊走在不同學科之間,最大的興趣是做一切聽起來很酷的事。
近年來,IBM、Google、英特爾(Intel)、微軟(Microsoft)等科技大廠相繼投入量子電腦的研究,「量子電腦」(quantum computer)一詞也越來越常登上新聞版面。到底什麼是量子電腦?它和我們平常用的電腦又有什麼不同呢?

其實,除非你是實驗室裡研究量子電腦的物理學家,否則我們生活當中可以用來計算的機器,像是桌上型電腦、筆記型電腦、智慧型手機、平板電腦,甚至是氣象局裡面可以用以預測天氣的超級電腦,全部屬於「古典電腦」的範圍。換句話說,它們都是「非量子電腦」。

 

不是0就是1的古典電腦

在解釋量子電腦之前,先讓我們來看看古典電腦是怎麼運作的。當我們打開電腦,螢幕上可以顯示出各種不同資訊,例如YouTube上的影片,Word裡的文件,Photoshop裡的照片等。無論這些資訊多麼複雜,它們都是被一連串的「0」與「1」記錄在電腦當中。在這當中,每一個可能是「0」或「1」的數字就被稱作「位元」。比方說,一張1MB〔註〕大小的照片,就是被8×106個位元組成的序列所儲存,若是使用Photoshop修改這張照片,實際上就是修改這段「0」與「1」的序列。

註:MB當中的M代表mega,也就是106的意思;B則代表byte,也就是8位元。因此,1 MB實際代表的是8×106位元。

對古典電腦來說,有一個重要的原則,這串「0」與「1」的序列中,每一個位置「要不是0,要不就是1」。而利用電腦程式修改序列時,我們能做的工作也只能是「把某些位置的0改成1,或是把1改成0」罷了。然而,這個看似理所當然的原則,到了量子電腦當中卻不再適用。

 

我們可以在電腦中每個檔案的說明欄內看到檔案大小,其大小就代表該檔案在電腦裡需要多少位元來儲存。(作者提供)

量子位元── 0與1的疊加態

讓我們先把電腦當中的一個位元想像成一枚硬幣,硬幣的正反面對應到位元的0與1。假設我們有一枚「古典硬幣」,隨機投擲這枚硬幣並將結果用手蓋住,此時硬幣顯示正面或反面的機率各為50%。雖然我不確定手掌下硬幣的狀態,我仍然知道硬幣「要不是正面朝上,要不就是反面朝上」,而我之所以用機率來描述硬幣,是因為我自己對於硬幣狀態的無知〔註〕。

註:這裡的「對硬幣狀態的無知」會與下一段量子硬幣中的「並非因為身為觀測者的我們對於硬幣狀態的無知,而是自然界中這枚『量子硬幣』本身的狀態就是如此」互相對應。

但是換作是「量子硬幣」就不同了,它「可以同時處於『正面』和『反面』兩種狀態的疊加」。在這個時候,如果這枚硬幣正、反兩面疊加的比例是一樣的,那我們觀測這枚硬幣時,就有50%的機率看到正面,50%的機率看到反面。但和古典硬幣不同的是,這種同時處於兩種狀態的描述方法,並非因為身為觀測者的我們對於硬幣狀態的無知,而是自然界中這枚「量子硬幣」本身的狀態就是如此。

和古典電腦一樣,量子電腦中的資訊也能被「0」與「1」組成的序列表示,只不過每一個位元都是一枚量子硬幣,可以同時處於「0」和「1」兩種狀態的疊加。此外,我們還可以進一步控制0和1兩種疊加態的比例。舉例來說,我們可以把「狀態0」的比例調得很高,此時若是測量這個位元,就有很高的機率看到0,而看到1的機率則非常低。像這樣可以表現疊加態特性的位元就稱之為「量子位元」(qubit)。

圖一:量子位元的表示方式及觀測機率
物理學家習慣用|0〉來代表量子位元0,用|1〉來代表量子位元1。而圖中的a|0〉+ b|1〉則代表|0〉和|1〉的疊加態,其中a和b代表兩者的比例。不過,在量子力學中,a和b並不代表觀測疊加態時得到對應結果的機率,而是a和b的平方。也就是說,對於a|0〉+ b|1〉這個疊加態,觀測到|0〉的機率為a2,而觀測到|1〉的機率則為b2

量子電腦裡的疊加態

那麼,疊加態有什麼好處呢?讓我們來看看以下這個例子。假設有一個函數f(x)=x2-6x+9,我們想知道x 等於多少時此函數會為零。一個比較慢的方法是,把x 的值一個一個代入函數嘗試計算,例如f(0)=9、f(1)=4、f(2)=1、f(3)=0 等。而比較聰明的方法是直接分解x2-6x+9,藉此找到方程式的解。然而,有時候函數可能會非常複雜,但是只要f(x) 有整數解,我們就還有機會透過代入數字的方式,慢慢地找到答案。

這時候疊加態就派上用場了。當我們有一個量子位元,我們可以準備0和1的疊加態。此時,若是我們把0和1的疊加態作為f(x) 的輸入,我們就會得到「f(0) 和f(1)的疊加態」,一次操作就能得到兩種答案的疊加態!

接下來,我們還可以再貪心一點,有兩個量子位元時,可以準備00、01、10、11四種狀態的疊加態;若是有10個量子位元時,我們就可以有0 ~ 1023共1024種狀態的疊加態。一旦我們把「0 ~ 1023的疊加態」作為f(x) 的輸入,只需要一次操作,就能得到「f(0), f(1), ......,f(1023) 的疊加態」。更廣泛的說,只要f(x) 的輸入處於哪些狀態的疊加,一次函數的操作就能得到相對應函數值的疊加。

然而,身為觀察者的我們,要知道量子電腦計算出的函數值是什麼,勢必得測量這些量子位元才行。但是,若是此時我們貿然測量「f(0), f(1), ......, f(1023) 的疊加態」,就只會得到f(0), f(1), ......, f(1023) 中的「其中一個」函數值而已。就像投擲量子硬幣,一旦我們觀測硬幣,結果只會是正面或反面其中一個。

只有疊加還不夠,再加一點干涉吧!

如果只是隨機得到其中一個函數值的話,這就和隨機代入一個數字求答案一樣,也就無法展現出疊加態的威力了。因此,只使用疊加態還不夠,我們還需改變疊加態之間的比例才行。如前文所提到,當某個疊加態的比例越高時,我們測量時得到該疊加態的機會就越大。量子演算法設計上的巧妙與困難之處,就在於不知道答案的情況下,要如何調控每一個疊加態之間的比例,使得最後測量結果有很高的機率得到我們想要的答案?我們該怎麼辦到?答案就是「干涉」(interfere)。

我們在高中時學過,當兩道水波相遇時,若是它們的相位相同,就會發生建設性干涉,此時水波的振幅就會變大;反之,若是相位恰好相反,就會發生破壞性干涉,水波的振幅就會變小。同理,量子力學中的疊加態彼此之間也有相位差,只要控制得宜,我們就能讓不同疊加態之間產生建設性或破壞性干涉。

以上述代數字找答案的問題為例,1996年時,美國電腦科學家格羅弗(Lov Grover)發明了一個量子演算法,能有效解決這個問題。在這個演算法中,我們只需要知道正確答案的特性(也就是代入正確答案時函數值為零,錯誤答案時則否),便有辦法只翻轉錯誤答案的相位。如此一來,再透過讓疊加態彼此干涉,就能夠逐漸減少代表錯誤答案的疊加態所佔的比例。最後,就有很高的機率得到正確答案。

圖中的|0〉+|1〉+|2〉+|3〉代表0、1、2、3四種狀態的疊加態,只需要兩個量子位元就可以用二進位表示。此時,若是針對這兩個量子位元進行一次函數計算,就能得到9、4、1、0四種狀態的疊加態,分別對應到四個輸入的函數值。此圖為方便說明疊加態的概念,故省略係數。

 

量子電腦的展望

可惜的是,能巧妙地調控每一個疊加態之間的干涉,使得正確答案的比例順利增加並不是一件容易的事。目前,能夠表現得比古典演算法還要好的量子演算法並不多,換句話說,即使大型量子電腦明天就問世,也只能在特定幾個問題上表現得比古典電腦還好。另一方面,要能具體解決有意義的計算問題,演算法所需的量子位元常需要數千至數萬以上。現在人類建造出的量子電腦具有的量子位元數目僅有幾十個,遠遠不及演算法所需。

現今量子電腦的發展還在幼年時期,尚有巨大的進步空間。接下來就讓我們期待這個全新的計算架構是否能再次創造資訊革命吧!