用人腦生成等概率隨機數,困擾人類30萬年的問題解決了 | 附“源代碼”
如何避免人類對數字偏好的差異
曉查 發自 凹非寺
量子位 出品 | 公眾號 QbitAI
讓人類隨機說出一個1-10之間的整數(包括1和10),每個數字被選中的概率都是10%嗎?答案當然是否定的。
半年前,有人對8500名學生做了一項調查,發現人類似乎對7有種特殊的偏好,有接近3成的人會選擇“7”,而選擇兩端數字的概率會偏小,選“10”人甚至僅有1.9%。
如果用計算機,我們就可以生成近乎完全隨機的數,保證每個數被抽中的概率都是10%。(注:其實計算機生成的是偽隨機數,并不完全隨機,但效果遠勝過人類。)
在這件看似超級簡單的事情上,人腦輸給了電腦。人類隨機函數human.random遠不及Numpy里的np.random啊。
難怪有Twitter網友會調侃:智人誕生30多萬年以來就沒能解決這個問題。
因為人類是有情感的:1和10分別位于兩端,選擇這樣兩個數是否會太刻意?7是不是我的幸運數字?潛意識里的想法都會左右你最終的選擇。
那該怎么辦?
怎么才能把人類隨機函數變成真正的隨機函數,要做的就是把概率分布大于10%的數挪到概率小于10%的數上。
你可以想象成切碎這些長條并重新排列,讓它們都一樣高:
舉一個極端的例子,假設我們將每個長條都“切割”成無限小的塊,然后就可以像樂高一樣使用這些塊來建立任何形狀的概率分布。
現在,我們來定義這樣一個變量xi,j,它表示我們把數字i調整到數字j的樣本占數字i總樣本中的比例。
因為選7的人比較多,我們希望把部分7調整到1,如果把20%的7變成1,那么x7,1=0.2。xi,i表示自身不調整的部分。
最后我們希望所有隨機數的概率都是0.1,所以其他數字調整進j的比例之和應該滿足:
同時,我們還必須確保原始分布中的所有概率質量(probability mass)都是守恒的。所以每個i調整到1到10的總概率應該等于1(注:原文如此,應等于原本選擇數字i的概率Pi)。
另外,我們還希望盡可能保留原始的分布,也就是讓xi,i(保持不動的部分)之和最大,即不調整的部分盡可能多。
現在這個問題就變成了一個線性規劃問題,在這20個約束條件下,令對角元素之和最大。
經過電腦計算后,調整方案是這樣的:
這個結果雖然直觀卻不夠精確,準確的調整比例為:
按照上面的圖表,選7的結果中有28%的比例需要調整為10,20%的比例需要調整為1,等等。
但是這28%、20%的比例如何獲得,最初的隨機分布表就可以啊。
本來就有28%的人選擇7,如果我們獲得了一個7,在問第二個人,如果也得到一個7,我們就把第一個7強制轉換成1。
人腦隨機數生成器
現在你明白人類隨機數生成器的工作原理了,下面就是這套程序的“源代碼
按照這個程序,你應該能得到一個接近平均的從1到10的隨機數發生器,前提是你得有8500個人。
以上算法的思路和代碼和源代碼來自博客:
https://torvaney.github.io/projects/human-rng
- 腦機接口走向現實,11張PPT看懂中國腦機接口產業現狀|量子位智庫2021-08-10
- 張朝陽開課手推E=mc2,李永樂現場狂做筆記2022-03-11
- 阿里數學競賽可以報名了!獎金增加到400萬元,題目面向大眾公開征集2022-03-14
- 英偉達遭黑客最后通牒:今天必須開源GPU驅動,否則公布1TB機密數據2022-03-05



