作者 / 賴昭正 前清大化學系教授、系主任、所長,IBM 研究顧問化學家;合創科學月刊
因為我們確信量子系統一般無法在傳統電腦上有效模擬,量子運算未來最重要的應用可能是量子系統的電腦模擬。——David Deutsch「量子計算之父」
量子革命啟航,2025 年迎來國際量子年。圖 / unsplash
量子物理學誕生於 1900 年初期,源自普朗克(Max Planck)及愛因斯坦(Albert Einstein)等人為了解釋古典物理學無法解釋的黑體輻射和光電效應,提出能量「量化」的奇怪觀念。1920 年代,玻爾(Niels Bohr)、薛定諤 (Erwin Schrödinger)、海森堡( Werner Heisenberg)、玻恩(Max Born)和狄拉克(Paul Dirac)等物理學家為量子力學建立了更完整的數學框架,從而形成了微觀世界的物理理論。最近由於以它為基礎的計算技術不斷有「突破」性的進展,聯合國便迫不及待宣布 2025 年為國際量子科學技術 年。
筆者在芝加哥大學攻讀的是量子化學,博士班資格考試選的是物理化學、無機化學、及物理系的物理數學,論文用的理論工具是「量子」物理,實驗工具是「計算機」,因此應該是位「量子計算機」專家了,但慚愧的是:儘管市面上已經出現許多有關量子計算機的報導,但筆者除了知道其所用的物理原理(參看「延伸閱讀」)外,卻完全不知所云!
查了一下台灣兩大科普雜誌,發現《科學月刊》與《泛科學》都沒報導過!顯然這不是一篇容易寫的科普文章。但因其重要性,及對科普的喜好,在猛 K 一個月後,筆者謹在此先野人獻曝,報導點心得,望能拋磚引玉將來有專家為我們寫一篇更詳細及深入的介紹。在進入本文之前,得預先警告:筆者深深了解數學公式會嚇跑讀者,但是幾經考慮後,覺得不用點數學顯然不能點出量子計算機的骨髓。對數學不感興趣的讀者事實上不需要深入了解:只要從那些數學中看出量子計算機的運算不是確定性的「加減乘除」、而是操縱或然率的「量子物質狀態」改變(「量子位元」一節)即可。如果真的不想看到數學公式,可以跳過「量子閘」及「量子計算機」二節。
量子計算機的起源
20 世紀 80 年代初,美國阿貢國家實驗室(Argonne National Laboratory)貝尼奧夫(Paul Benioff)發表四篇量子計算基礎的開創性論文,證明計算機可以按照量子力學定律運行;費曼(Richard Feynman)獨立提出了量子計算的想法,認為基於量子原理的計算機可以高效地模擬量子系統,克服對於一般電腦來說難度呈指數級增長的計算任務。1985 年牛津大學物理學家德意志(David Deutsch)以費曼和貝尼奧夫的思想為基礎,提出了通用量子計算的概念,並設計出一個適用於量子計算機的演算法。
要了解這些量子計算想法之前,我們得先了解一下現行的(傳統)計算機。
傳統計算機
人類因為有 10 個指頭,所以採用十位元的運算方法,即 0,1,…9;9 再加 1 就進位成 10(借用別人的手指)。當初設計計算機的人也許因為只有兩根手指的關係,卻採用「二位元」(bit)的運算方法,即 0 與 1;1 再加 1 就進位成 10(= 十位元的 2)。事實上這樣的計算法在電路設計上是比較容易的:接近 0 伏特的電壓(通常稱為「低」)表示邏輯 0,而較高的電壓(通常稱為「高」)表示邏輯 1。計算機就是靠這樣的線路及所謂「邏輯閘」(logic gate)來達成計算的任務,如圖一:2 個「二位元」數 A2 A1 及 B2 B1 相加的計算機線路圖。
圖 / 作者提供
「邏輯閘」的目的是將輸入(input)依照所設計的邏輯改成單一的輸出(output)。例如將(0,1)輸入「AND 閘」,圖一的邏輯表告訴我們它將輸出 0;(1,1)將輸出 1,…。又如將(0,1)輸入「XOR 閘」,它將輸出 1;(1,1)將輸出 0,…。讀者應該不難用圖一的線路計算出 10+11=101(O3 O2 O1 );10+01=011;11+11=110;…。
如果要增加「二位元」的數目[如 3 個「二位元」、4 個「二位元」…,或 8 個「二位元」的「位元組」(byte)],只要重複複製圖一 a 及 a′ 之間的線路,將它連在最後一個 a′ 上即可。所以(傳統)計算機的設計是透過「邏輯閘」操縱「二位元」來達到計算的目的。
所以要使用傳統計算機來「解決問題」如微積分方程式 或製定更好投資策略時,必須先將它們「改寫成」加減乘除及簡單邏輯(如 x 則 y)的「運算問題」。
量子位元
量子計算機也是採用「二位元」的運作,但其「二位元」非常不同於上面所提到之「二位元」:
(1)它的 0 與 1 不是電壓的不同,而是物質狀態的不同,稱為 |0> 與 |1>;
(2)它可以有同時存在於 |0> 與 |1> 的「量子疊加」狀態(quantum superposition state,註一),例如 |x>=α|0>+β|1>(|α|2 +|β|2 =1);
(3)當你去測量時,因「波函數坍縮」(wave function collapse)只能得到或然率分別為 |α|2 及 |β|2 的 |0>或 |1> 狀態而已,不能有中間的混合態!
這樣的「二位元」因為具有量子物理的特性,因此稱之為「量子位元」(qubit)。原子的自旋(spin)就是具有這樣的特性,因此可作為量子計算機的「量子位元」。
等一等,電壓不是也可以模擬(1)及(2)嗎?例如 0 代表 0 伏特電壓,1 代表 5 伏特電壓,那麼 0.8(4伏特電壓)不是代表由 80% 的 5 伏特電壓和 20% 的 0 伏特電壓組成的嗎?原則上不錯,但就出現了一個實際設計上的問題:電壓一定要很穩定(註二)。這事實上正也是量子計算機設計上的最大挑戰之一:如何保持「量子位元」的穩定?設計高品質的「量子位元」極具挑戰性:如果「量子位元」與其環境沒有充分隔離,它就會遭受「量子退相干擾」(quantum decoherence),在計算中引入雜訊、錯誤、或崩潰。當然,電壓是沒辦法模擬(3)的:如果允許「疊加」態,測量電壓只能得到「疊加」電壓 4 伏特,不可能量到 0 伏特或 5 伏特。但事實上更嚴重的問題是:電壓沒辦法模仿兩個「量子位元」的「量子糾纏」(quantum entanglement)態:
∣ χ >= 1 2 ( ∣ 00 > + ∣ 11 > )
這狀態是由兩個「量子位元」組成的,而每個「量子位元」是由兩個狀態組成,因此理論上應該共有四個狀態(00, 01, 10, 11)才對;但上式中卻缺少了 |01> 及 |10> 兩個狀態!
量子( 邏輯) 閘
量子計算機的設計與傳統計算機類似,不同的是它用「量子邏輯閘」(quantum logic gate)來操縱「量子位元」。在量子電路模型中,「量子邏輯閘」(或簡稱「量子閘」)是在某些量子位元上運行的基本量子電路,它們是量子電路的組成部分,就像傳統邏輯閘是傳統數位電路的組成部分一樣。在介紹「量子閘」之前,因為「量子位元」可以同時存在於 |0> 與 |1> 之間的狀態,因此用向量(vector)及矩陣(matrix)來表示將比較方便。例如以 |0> 及 |1> 為基底向量(basis vector,可以想成傳統上的 XY 座標軸),「量子位元」|0>、|1>、|x>=α|0>+β|1>將分別為:
如果用向量來表示量子位元,那麼「量子閘」將是一矩陣。
傳統計算機中的「NOT 閘」將 1 改成 0 輸出、0 改成 1 輸出,量子計算機中也有類似的「NOT 量子閘」 能將 |0> 改成 |1> 輸出、|1> 改成 |0> 輸出、上面的 |x> 改成:
1 α 2 + β 2 [ β α ]
輸出。
「阿達瑪閘」(Hadamard gate) 是一基本量子閘,它能將量子位元從單一的確定狀態(|0⟩ 或 |1⟩)轉換為測量任一結果均為 50% 機率的量子疊加態(參見圖二)。「CNOT 閘」是一雙量子位元操作閘:
[ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ]
作用於 H|0> 及另一 |0> 結合的雙量子位元可以得到一量子糾纏態,其電路圖為
圖 / 作者提供
量子 計算機
在結論前讓我們在此以一實際的例子來說明量子計算機可能提供的優勢。為了避免難懂的數學,我們在這裡只能用一最簡單的、不實用、但在開發量子演算法技術上佔有很重要歷史地位的例子:1985 年「量子計算之父」所提出的德意志演算法。德意志演算法用量子計算機解決了一個簡單的問題:給一只能輸入 0 或 1、只能傳回 0 或 1 的函數 f(x),我們如何知道 f(0) 是否等於 f(1)?
圖 / 作者提供
圖三告訴我們如果用傳統的計算機,我們必須用 0 及 1 分別詢問這個函數兩次才可能得到答案:0 表示 f(0)=f(1);1 表示 f(0)≠f(1)。但因為量子位元可以有疊加狀態,我們可以先透過「阿達瑪閘」將 |0> 轉變成 |0> 及 |1> 疊加態後再詢問
Q
f
:
[
(
−
1
)
f
(
0
)
0
0
(
−
1
)
f
(
1
)
]
得到答案後再透過一次「阿達瑪閘」,我們就可以測量結果:如果測得 |0> 則表示 f(0)=f(1); 測得 |1> 則表示 f(0)≠f(1)。有興趣的讀者不妨親自演算一下,驗證筆者沒有算錯(註三)。
德意志演算法利用了量子力學的疊加性及波函數的干涉性,成功地只詢問一次就得到了答案,所以我們可以在這裡吹噓:量子計算機只要用傳統計算機一半的時間就可以解決問題。事實上 Lov Grover 1996 年提出一個搜尋(註四)演算法證明了:當傳統計算機需要使用 ~N 次詢問才能得到答案,量子計算卻只要使用 次求值,就能以高機率找到產生特定輸出值之黑盒函數的唯一輸入(註五):也就是說如果傳統計算機需要 100 年,量子計算機只需要 10 年!所以量子計算機將全面改變我們的…(請讀者填空)。但這不是好像看到一隻黑烏鴉,就說全世界烏鴉都是黑的一樣嗎?
結論
希望在瞰完本文後,讀者對量子計算機有初步的了解,不再只是個空洞的名詞而已。像其它新興科技一樣,我們將時常看到充滿著樂觀、承諾、與「突破」的報導,如去年底谷歌(Google)宣稱「(新的量子晶片)在不到五分鐘的時間內完成了一個「標準基準計算 」(standard benchmark computation),而當今最快的超級電腦則需要 1025 年―這個數字遠遠超過了宇宙的年齡」,及最近微軟(Microsoft)發布了全球首款採用拓撲核心架構的量子晶片,謂創建了更穩定、可擴展的量子位元,「有望」 讓量子計算機「更接近」 解決複雜問題。
但我們都知道量子物理已經有百年的歷史,這知識為我們創造了空前的社會繁榮,因此我們不免要問:以它為基礎的量子計算機科技,為什麼經過了 40 年還是只停留在完成「標準基準計算 」、「有望」、 「更接近」、 …等等「空談」的階段,交不出一張實用的成績單(註六)?…什麼時候它才能真正為我們解決一有「突破」就被提到的複雜問題,如增強網路安全,徹底改變材料科學、新藥、和醫學的研發,優化財務模型、製定更好的投資策略等等承諾?
量子計算之父德意志說:「因為我們確信量子系統一般無法在傳統電腦上有效模擬,量子運算未來最重要的應用可能是量子系統 的電腦模擬。」諾貝爾物理獎得主費曼也持相同的看法。現在報章雜誌的報導都是渉及量子計算機所面臨的硬件設計挑戰;但翻閱證明其可行性的演算法後,筆者覺得如何將上面所提到之巨觀世界的實用問題,「改寫成」能利用量子運算獨特功能來解決之微觀世界的量子系統 ,可能才是一項更重大千萬倍的挑戰!
圖 / US National Weather Service
這使筆者想起了核融發電 的問題。第一顆使用核子分裂的原子彈於 1945 年 8 月在日本廣島爆炸,6 年後年美國愛達荷州的實驗增殖反應器用核分裂產生可用電力,又三年後蘇聯的奧布寧斯克核電廠將核能所產生的電連結到電網。1952 年 11 月 1 日美國在馬紹爾群島引爆了第一顆氫彈。氫同位素核融反應除了比核分裂釋放更多的能量外,不會產生有害的長期放射性廢物;加上氫或氘在自然界中既便宜又豐富,為一種長期、可持續、經濟和安全的發電能源燃料,因此核融發電成為 1950 年代後期全世界先進國家追求的目標;報張雜誌三不五時便有「突破」的報導;但 1960 年到現在,65 年過去了,我們還是「祇聞樓梯響,不見人下來」,甭說看不到一座實用的核融發電廠,能勉強收支平衡的實驗就算是「突破」了。筆者認為量子計算機很可能將步其後塵:雷聲大雨點小、或根本不下雨(註七)!
註解:
(註一)許多科普文章多用「丟擲硬幣來比喻」,謂在空中旋轉之硬幣就是同時存在於正、反兩面的狀態。這顯然完全不懂量子物理:在空中旋轉之硬幣從來沒有同時存在於兩種狀態,它只是很快地在兩種狀態中轉來轉去而已!
(註二)正是因為要避免這一問題,所以傳統計算機設計採用「有」與「沒有」的二元電壓。不只如此,早期的計算機為了偵測錯誤,8 位元的位元組還多加了一位冗餘位元(詳閱「錯誤訊息的偵測與修正」,科學月刊 2009 年 3 月號或《我愛科學 》)。
(註三)先謝了。但請注意:筆者忽略了要求或然率等於 1 的常數如 1/2。
(註四)在未以任何特定方式排序或組織的N項資料庫中尋找特定項目。
(註五)因為傳統計算機每次只能問一項,所以大約要問 N 次才能得到答案;量子計算機可以「疊加」態一次詢問所有的項目,但因天下沒有白吃的飯,所以每次詢問只能得到或然率的答案,需要重複詢問 ~N 才能將或然率提高到相當肯定的地步。
(註六)寫到這裡筆者突然了解為什麼一直對量子計算機「突破」的報導不感興趣:一則沒有新理論,再則好像全是空談,沒有解決實際問題的內容。
(註七)2023 年 5 月,領導微軟量子運算工作的副總裁、「技術院士」 Matthias Troyer 在《ACM 通訊》上撰寫了一篇題為「擺脫炒作與實用性:切實實現量子優勢」(Disentangling Hype from Practicality: On Realistically Achieving Quantum Advantage )的論文,指出量子電腦能夠提供有意義優勢的應用數量比某些人認為的要有限;謂量子電腦只有在解決小數據問題時才能真正發揮其指數級加速的作用。他補充說:「其餘的都是美麗的理論,但不會付諸實踐」。
延伸閱讀: