關鍵詞:價值/損失函數 | 決策 | 偏好系統 | 最優解
糾結、選擇與價值函數
糾結是什么?讓我們回歸字面:一個糾纏打結的復雜線團,拆也不是、剪也不是,胡亂嘗試之下甚至纏得更緊。
很不幸的是,我們面對問題時幾乎總是會進入這樣一種狀態。原因有兩個,比如問題本身就很復雜,我們很難找到可行解。但或許更多的情況是,諸多可行解已擺在面前,我們要從中選擇出最優解。糾結的其實是如何選擇。
先讓我們來看一個令人糾結的經典問題:有軌電車難題
假設你看到一輛剎車壞了的有軌電車,即將撞上前方軌道上的5個人,而旁邊的備用軌道上只有1個人,如果你什么都不做,5個人會被撞死。你手邊有一個按鈕,按下按鈕,車會駛入備用軌道,只撞死1個人。你會選擇怎樣做?
糾結了嗎?讓我們先來分析這個問題中的最明顯的關鍵條件:一邊是5個人,一邊是1個人。這時,僅從數字上來看,當然選擇5個人,沒問題吧?
讓我們補充點佐料,那么一大波問題來了:
- 那5個人都是你不認識的人,那1個人則是你的親人
- 1000000個你不認識的人,1個你的親人
- 一邊5人一邊1人,你都不認識,但是你知道如果按了按鈕,你相當于主動殺掉5個無辜的人,會一輩子良心不安,反之如果什么都不做,至少你沒有主動選擇殺死誰,雖然也很難受但似乎可以承受
- (還可以繼續細思恐極下去...)
糾結了嗎?
為什么糾結呢?因為我們顯然不如我們自己通常認為的那樣理性。
是救人多的那邊(功利)?是救親人(道德/情感)?是避免主動選擇造成的傷害(自我保護)?...
然而這道問題,在絕對的理性面前,其實沒有絲毫難度。讓我們嘗試一下。
假設對于此問題你的價值函數是一個簡單的多元線性函數:
f(x1, x2, x3) = a1x1 + a2x2 +a3x3
其中:
x1
: 所有軌道上最后存活的人數
x2
: 軌道上存活你的親人數
x3
: 軌道上你主動殺死的人數
那么好啦,你只需要提供心儀的參數值a1,a2,a3給這個價值函數,就建立起了你自己的模型,使用這個模型,以上所有的問題都能輕松算得最優解。
舉例而言,假如你的參數是1, 100, -2,那么就問題1而言,選擇救那5個路人的價值是1*5 + 100*0 + (-2*1) = 3,選擇救1個親人的價值是1*1 + 100*1 + (-2*5) = 91,91>3,毫無疑問選擇救你的那個親人。
你還可以設置更復雜的價值函數,比如更多自變量,比如非線性:
模型2. 你救的人數存在邊際效益遞減,救2人和救1人差別或許很大,但救10000人和救9000人的差別或許就沒那么強的實感了,隨便來個log來示意一下:
f(x1, x2, x3) = a1logx1 + a2x2 + a3x3
模型3. 你救的親人越多,你越會因為主動殺死別人的行為產生痛苦:
f(x1, x2, x3) = a1x1 + a2x2 + a3x1x3
或許這個例子太過血淋淋了,我們很難做到絕對理性。但我想要講的應該很清楚了,許多糾結的問題,糾結的根源是非理性,解決辦法則是,建立形式化、量化的模型,使用價值函數去評估各種選擇。
偏好系統
接下來讓我們放松一點。
我們有了一個決策模型(Model of Decision),里面有各種選擇,也有價值函數。我們知道價值函數的值當然越大越好,最大的那個對應的自然是最優解。也有反過來的情況,那函數就可以叫做Loss / Cost Function了。這種大與小、可比較,反映的是可行解之間的相對優劣關系,即偏好(Preference)。為什么我們需要價值函數?根本而言我們需要的其實是選擇之間的可比較。
但可比較,其實是一個很有趣的坑。讓我們來看一個例子:
剪刀石頭布相信大家都玩過,剪刀>布,布>石頭,石頭>剪刀,簡單明確的偏好不是嗎?然并然。這個設定存在致命的缺陷。
假設這個偏好系統(System of Preferences / Preference Structure)具有可傳遞性(Transitivity),即:
(石頭>剪刀) AND (剪刀>布) -> 石頭>布
現在我們有了這樣兩條偏好:布>石頭 與 石頭>布。它們都成立使得一致性(Consistency):
布>石頭 -> NOT (石頭>布)
受到了破壞。
這意味著這個系統中可傳遞性與一致性不可共存,進一步可以推知在剪刀石頭布這個環狀結構(cycle)之中,永遠找不到最優解。事實上我們早就認識到了這一點,當三人以上玩這個游戲的時候,我們將會拋棄可傳遞性,如果同時出現剪刀、石頭和布,就會直接進入下一局,直至只出現兩種的某局,從而分出勝負(這好像又變成了一個二分類問題,interesting)。
這種類似的環狀偏好系統還有很多,比如五行相克;在游戲設計中其實也經常用到,比如火焰紋章的劍斧槍,或者夢幻西游里的門派相克,但之所以不會有問題,是因為這種設計目的就是為了消除最優解,從而平衡游戲中的選擇,而且大部分游戲里都不會出現三方混戰的情形(即使很多多人游戲看起來很即時),根本不用考慮可傳遞性。
所以說環,真是一個非常有趣的結構啊,突然又聯系起PageRank(還有我之前參與的英雄聯盟英雄強弱ranking...)之類的東西,走遠了趕緊剎住。
一致性和可傳遞性以外,偏好系統其實還需要一個完整性(Completeness)。也就是說系統內任何選擇之間都是可比的:
石頭,布 -> (石頭>= 布) OR (石頭<=布)
沒有滿足這個基本的完整性,意味著無法確定某些選擇間的相對次序關系,最優解根本無法存在。偏好系統其實還可具有更多的性質,比如連續性(Continuity)和凸性(Convexity),從而支持各種更嚴格的決策模型。
以復雜對抗糾結
像是剪刀石頭布這樣的糾結是可怕的,可怕在于你以為自己已經很理性,對各種選擇有明確的偏好,但其實這些偏好無法同時具有可傳遞性和一致性,有限的理性,有時整體而言其實是不理性的。這種不理性在現實中的根源又在何處?
知乎上有一篇文章討論了單因素模型這種思維模式的危害。人們在面對人生中大大小小的問題時,常常在抓住一個因素的同時,錯誤地忽略了許多其他的重要因素,打敗了一種盲從的同時,又建立了一種新的盲從。看似簡單粗暴毫不費力,實際上事倍功半。
我們常常交替地用不同的“單因素模型”去套用當前面臨的問題,而一旦想綜合考慮多個因素,腦子就覺得不夠用了,補了東墻又拆了西墻。石頭大于剪刀是因為石頭可以把剪刀破壞,剪刀大于布也是因為剪刀可以破壞布,然而布可以破壞石頭嗎?不能,布戰勝石頭靠的是它能把石頭包。。起。。來。。明顯的兩個單因素交替,雙重標準。
沒有通過形式化、通過足夠復雜的模型對整個思考過程、對多個因素進行記錄與審視。因而對于重要的問題,特別是將影響人生大方向的問題,我們隔三差五都在不自覺地重復同樣的怪圈,甚至在一圈內死循環、不斷隨機goto到某一步。我們永遠在建立新的偏好系統,但永遠沒有建立起一個同時具有完整性、可傳遞性和一致性的系統,從而,永遠找不到最優解。
我們的大腦是喜好簡單的,假如有一個方法、一種因素可以解釋萬事萬物,解決所有疑問(42?),為何要細致入微地、艱苦卓絕地考慮所有細枝末節呢?簡化并不是一件壞事,比如上一篇里提到的抓大放小,是非常有用的策略(特別是對于開放問題)。但是正如本篇想要嘗試表達的,過于簡化是錯誤的,是對理性的逃避,只會使糾結更糾結。
當然,每個問題都有其比較適合的模型復雜度,太大太小均非好事,最佳莫過于剛剛好,這一點我將在接下來的文章里繼續進一步的思考。
到此,這個系列已經從心理學教材硬生生扯到了決策/學習的基本概念,所以扯到游戲設計也算設計吧,我這樣安慰自己:)