天天看點

《宇宙探索編輯部》裡的小匣子有什麼妙用?

你去看《宇宙探索編輯部》了麼?怎麼樣,精神還正常麼?

除了主演們,影片中存在感最強的“配角”就是那個主角不離身的“蓋革計數器”了。可你知道麼?除了“尋找外星人痕迹”,它還和我們享受的諸多現代技術生活關系緊密。

故事要從“随機數”和“擲骰子”講起。

亞馬遜什麼奇怪的東西都賣,包括讓一本正文沒有一個詞的書成為暢銷書。

《百萬随機數》,正如書名,全部内容就是 100 萬個随機生成的數字。這本書誕生于 1955 年,價格為 73 美金(約合人民币 501 元),至今已經再版三次,在亞馬遜上有 700 多個評論,評分高達 4 顆星。

很難想象有誰會需要一本全是數字的書,以緻于它的評論區成了一道網際網路奇觀,許多買家開始一本正經地胡說八道。

“一本引人入勝的書,從頭至尾你都猜不到劇情。”

“一部天才之作,可能是用來傳遞政府關于全球變暖謊言……我發現,數字 23 一直出現在書中,衆所周知,這意味着新世界秩序與這本書有關。”

抛開這些調侃,《百萬随機數》其實是一本相當嚴肅的書,甚至可以稱作随機性領域的一部著作——這是人類曆史上第一次生産出數量如此龐大又高品質的随機數。

01 随機有什麼難的?多擲幾次骰子不就行了

數字還分品質高低麼?這裡更準确的說法可能是,随機性更強或更弱的數字。

骰子算是人類最早的随機數生成器,但擲骰子的結果看似随機,卻可能暗含規律。比如,如果一顆骰子的品質分布并不均勻,某個面比其他面輕微地更重,就會導緻某個結果出現的頻率略高于其他面。

假設一群人正圍繞這顆骰子開賭局,知曉這個秘密的人勝算就會更大一些。

《宇宙探索編輯部》裡的小匣子有什麼妙用?

圖說丨圖檔來源古羅馬 12 毫米骰子,公元 1 年到 410 年|大英博物館 PAS

而就算存在一顆完全平衡的完美骰子,要達到真正随機,投擲時涉及的其他因素也需全部随機才行,手部姿勢、抛出力量、表面摩擦力……這是一個幾乎不可能完成的任務。

量子力學的信徒們認為:任何通過經典力學産生的随機本質上是一種僞随機,是确定性事件的機率組合。他們把這種随機稱為“表面随機性”。

這就讓骰子成為了一個看似真随機,實則僞随機的數字生成器。抽簽、洗牌就更不用提。

如今,我們生活中接觸到最多的僞随機其實來自于計算機,隻不過通常他們不會明說:

如 ChatGPT 所言,看起來它隻是“随便”給了一個數字,背後實則遵循着一整套算法和公式,導緻這個結果不僅有規律也是可預測的。

在這個基礎上人們付出了許多努力,希望生成的結果能夠無限接近“真随機”。

1951 年,“計算機之父”阿蘭·圖靈在 Ferranti Mark 1 計算機中首次内置了随機數生成器。他的方式是将現實中的實體事件引入到計算機的計算過程中,以帶來一個随機的結果。

相比于擲骰子,現實中存在一些被視為真正随機的事件,比如電子的熱運動、光的反射與透射,以及核衰變等。圖靈利用的是導體中電子熱震蕩産生的熱噪聲,這個過程可以一次生成 20 個随機比特。

這些比特是品質極高的随機數,被作為生成最終随機數的“種子”。“種子”的品質直接決定了最終随機數的品質。

圖靈的思路給後世帶來諸多啟發。比如今天的 Linux 系統中就存在一個名為熵池的東西。平時,它被私密地儲存在記憶體中,需要的時候就會生成随機數。

為了讓熵池的熵不減少,系統一直暗中收集着各種實體随機源,比如使用者點選滑鼠,使用鍵盤時記錄下的時間戳——這些都被視為随機性較強的行為。

但這個過程不可避免地限制了生成速度,導緻效率很低,無法廣泛運用;同時,這種随機生成指令對幹擾極其敏感,計算機還要消耗大量功率來避免其受到外界的污染。

于是,另一位“計算機之父”約翰·馮·諾伊曼創造出了另一種随機數生成器。他采用的是數學方法:對一個初始值進行平方,取中間數,再對其取平方并取中間數。重複這個過程,就會得到一個具有統計意義屬性的随機數序列。

例如初始種子是 233,平方之後得到 54289,其中間值是 428。428 就是我們的第一個随機數。

這種做法的好處顯而易見,生産随機數的速度大大提升了。但顯然,這種随機數并不是真正的随機,隻要種子不變,随機數也不會變化。

至此,随機數生成器有了真僞之分:借助實體現象産生随機數的真随機數(TRNG),例如上述提到的熱噪聲、核衰變等;以及馮·諾伊曼創造出的第一個僞随機數生成器(PRNG),其本質是确定性的算法,生成的随機數之間并不是互相獨立的。

02 好累,為什麼要追求真随機?

日常中我們很少會需要這麼高的随機性,用骰子求考試答案時不斷跳出的 C,也權當命運的冥冥指引。

直到 1940 年代,對大量高品質随機數的需求才顯現出來,這直接推動了《百萬随機數》這本書的誕生。其背後的主要驅動力是核裂變過程中的數學描述方法,換句話說,也就是美蘇的核軍備競賽。

設計核反應堆時最關鍵的一步就是預測中子的分布,但運用公式來推導這個過程實在太複雜了。最終,一個著名的統計學方法,蒙特卡洛方法,解決了這個問題。簡單來說,人們不知道中子在裂變過程中的速率和方法,通過蒙特卡洛方法随機抽樣之後,就能模拟中子的行為,進而得到中子傳輸的範圍。

《宇宙探索編輯部》裡的小匣子有什麼妙用?

使用蒙特卡洛方法估算 π 值。放置 30000 個随機點後, π 的估算值與真實值相差 0.07%|Wikipedia

由于蒙特卡洛方法基于随機采樣,它的運作需要大量随機數來支撐。随機數表格一時間成為學術界的“熱門産品”,以緻于為美國軍方服務的 RAND 公司開始生産這種“商品”。1955 年,RAND 公司公開發行了第一版《百萬随機數》。

就像考 0 分并不比考 100 分更容易,《百萬随機數》的緊俏來源于一個事實——大規模地生産高品質的随機數其實是一件相當困難的事。RAND 公司為此付出諸多努力,方法大緻分為三步:

  • 1使用一個每秒産生 10 萬個脈沖的随機頻率脈沖源,将其連接配接到一個五位的二進制計數器上,輸出相當于轉動 32 格輪盤的結果。
  • 2将 32 位中的 20 位轉換為十進制(舍棄剩餘的 12 位),最終保留得到的兩位數的第二位,并輸入到 IBM 打孔機中。
  • 3重複以上過程,直到産生 100 萬個随機數。
《宇宙探索編輯部》裡的小匣子有什麼妙用?

1949 年用于建立偏差數字表的打孔卡|RAND

RAND 公司沒有透露随機脈沖的來源,但有人推測随機脈沖來自于蓋格計數器測量的鈾礦衰變。

蓋格計數器是一種用來探測輻射強度的儀器。鈾在衰變過程中會釋放出粒子,且兩次衰變的間隔是随機的,是以,蓋格計數器接收到的信号便也是随機的。

如今有興趣,你甚至可以自己重制這個過程。GitHub 上有一個完整的教程(https://github.com/nategri/chernobyl_dice),隻需六顆鈾玻璃球、蓋革計數闆、幾個輝光管、幾片拉絲金屬面闆,你就可以打造一台屬于自己的真·随機數生成器。

它還被取了個沒品的名字:切爾諾貝利骰子。

《宇宙探索編輯部》裡的小匣子有什麼妙用?

隻需一雙巧手以及億點點放射性物質 | nategri/chernobyl_dice

極具冷戰年代風格的工具見證了人類如何追求随機性的極緻,也為此後的技術發展留下豐富的遺産。如今,高品質的随機數生成器在許多行業都有應用,包括密碼學、博彩業、統計抽樣、藥物實驗和計算機模拟。

對網絡安全的關注也激發了這種需求。密碼學上,僞随機數的确定性是黑客眼中的大破綻。麻省理工學院的計算機教授史蒂夫·沃德曾提到:“如果你去一個線上撲克網站,你知道算法和種子,你就可以編寫一個程式來預測将要發牌的牌。”

關于這一點,發明“僞随機數生成法”的馮·諾伊曼本人倒也心知肚明:“任何想用數學方法生成随機數的想法,都是有罪的。”

03 還沒完,量子力學有話說

那麼,借助實體現象産生的随機數,就一定是真随機麼?

以擲骰子為例,一旦明确知道骰子抛出時的角度、速度、在空中運動時的風向、阻力、桌面的粗燥程度等一切影響因素,那麼理論上,骰子落地時的數值完全可以推導出來。人們之是以認為它像是“真随機”,是因為實體環境涉及的變量太多,以緻于推導過于複雜。

量子力學是否也隻是由于我們無法觀測而被視為具備随機性呢?

晚年的愛因斯坦以“仇恨”量子力學而出名,他質疑量子力學并未完整地描述實體系統的狀态。那句著名的調侃“我相信上帝不擲骰子”,就是在這個時候誕生的——他不相信世界上存在真正的随機。他的理論被總結為“隐變量理論”,認為在量子力學背後,可能隐藏了一個尚未發現的理論,可以完整解釋量子力學的不确定性。

事實證明,愛因斯坦錯了,1964 年的貝爾不等式證明了定域性隐變量并不存在。不過,科學本來就是通過經驗實證方法,對現象歸因的學科。實體理論是對現實的模組化,并不等同于現實。換句話,量子力學可以産生真随機,是因為在現有條件下,我們并不掌握準确觀測的方法。

是以,最嚴謹的表述是:以目前的科學水準來說,我們認為,量子力學可以産生真随機。

一些數字

20000:RAND 公司使用的 IBM 打孔卡數量

23383506944:1998-2001 年麥茲·哈爾産生的随機比特數。他營運了 random.org 這個網站,提供基于無線電靜電産生的随機數

10231:20000 次硬币投擲中正面向上的次數,來自一位加州大學伯克利分校的學生

10014:20000 次硬币投擲中反面向上的次數,來自另一位加州大學伯克利分校的學生

23:英國國家樂透在頭 20 年出現最多的中獎數字,266 次

作者:ttt

編輯:翁垟、biu

參考文獻

[1] https://www.rand.org/pubs/monograph_reports/MR1418.html

[2] Timothy Sauer.《數值分析》.吳兆金、王國英、範紅軍譯.人民郵電出版社.2010

[3] https://igaojin.me/2018/11/23/此地無人生還:區塊鍊随機數的原罪與救贖/

[4] https://min.news/en/tech/a3af91fde51e0d335bec92830b9d4237.html

[5] https://www.zhihu.com/question/576761456

[6] https://www.cnblogs.com/sumingk/articles/10092452.html

[7] https://zhuanlan.zhihu.com/p/557583762

[8] https://tashian.com/articles/a-brief-history-of-random-numbers/

[9] https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/#:~:text=On%20Linux%2C%20the%20root%20of%20all%20randomness%20is,can%20contain%20up%20to%204%2C096%20bits%20of%20entropy.

繼續閱讀