高維世界與一維價值

我前幾天去德國萊比錫參加了ISC學生集羣大賽。這個比賽的內容是在限定功率(3000W)的條件下,優化集羣的計算性能。每個隊伍的集羣分別由贊助商提供,清華大學隊是浪潮公司贊助的。由於硬件實在沒法和別的學校比,我們只好從軟件上來優化,比賽的程序包括了LINPACKHPCCHPCGQuantum ESPRESSOGadget。最終清華隊獲得了全球第三名,也算是盡力了——畢竟我們的集羣連GPU都沒,而許多隊伍配置極盡奢華,像愛丁堡大學連液冷系統都上了。

世界上「最快」的超級計算機

在ISC會議期間,我們得知了中國的「天河2號」以LINPACK峯值54902.4 TFlop/S的速度保持了超級計算機TOP500榜首,全球媒體爭相報道。但是在各個媒體的報道中,我們看到的是「天河2號」成爲「全球最快的超級計算機」,如Forbes的報道,而紛紛忽略了一個重要細節,即TOP500是以LINPACK的速度來排名的。LINPACK基準測試求解的問題是一個稠密的線性方程組,它完全是計算密集型的應用,其內存訪問、並行通信、磁盤讀寫都不成爲瓶頸。因此有人批評LINPACK提供的數值是「基本上無法到達的,卻有一小撮程序員在無聊地優化它的代碼,爲了使得他們的機器獲得更好的數值」。實際上衡量一個計算機性能的好壞,僅僅通過浮點計算密集型的應用來估計絕對是以偏概全,真實的系統性能還取決於整數計算性能、內存訪問性能、網絡通信性能和磁盤讀寫性能等等各個方面。哪怕是僅僅在科學計算領域,許多應用也不僅僅是在求解稠密線性方程組。許多時候可以認爲LINPACK數值完全不具備參考意義,因爲大多數科學計算應用的性能瓶頸根本不在這上面。

作爲「國家安全戰略投資」的天河2號,想必許多時候在求解的問題是破解密碼。然而一個可怕的事實是,大量密碼學算法,包括散列、非對稱加密(如MD5、RSA),都只進行整數計算,完全沒有任何浮點計算操作。如此看來,追求高LINPACK數值來提高密碼破解的性能,差不多是緣木求魚。

高維世界的序關係

說到CPU的性能,幾年前,大家在裝電腦的時候選購CPU只看主頻,頻率越高越好。於是英特爾爲了迎合市場,推出了奔騰四3.0GHz甚至3.6GHz主頻的CPU。後來進入多核時代,大家就看核心數,雙核的肯定比單核的好,四核的肯定比雙核的好。殊不知CPU的性能好壞有太多的參數,盲目追求高的主頻或者核心的數量沒有意義。不單單是CPU,想想看大家買數碼相機看什麼呢?許多人第一反應當然是像素啊。買單反鏡頭?光圈大小!買汽車?排量!買房?面積!

事實上這個道理淺顯易懂,但人們卻對它無能爲力。作爲沒有相關知識的普通消費者,面對這個世界紛繁複雜的參數真的是無能爲力,於是只好選擇一個「公認」的參數作爲基準了。

這一切的根源在於,向量和向量是無法比較大小的,只有標量纔能比較。向量只能通過一些函數變換到標量纔能比較,如模長,或者在某個空間上的投影。世界上的任何一件東西都可以用一個高維向量來表示,但爲了獲得序關係,我們通常只能把它映射到一個一維空間。在這個過程中,大量的信息都丟失了。對於同一組向量使用不同的函數,獲得序關係可以是完全不一樣的。

這是一個淺顯易懂的道理,而人們卻無能爲力。因爲人們天生傾向於用一個一維的數值來比較一切同類的事物(甚至不同類的事物),但事物天生是高維的。

價值觀是一個從高維空間到一維空間的映射

人們經常談論價值觀,譬如價值觀不同的人不要在一起,現代社會通過價值觀把人分爲不同的羣體。價值觀實際上是一個從高維空間到一維空間的映射,也就是一個高維向量的函數。人們面對紛繁複雜的事物,一個與生俱來的衝動就是對它進行評價,然後與其他事物相互比較。在這個過程中,不同價值觀的人使用了不同的函數,因此得出的結果是大相徑庭的。

商品的價格與價值

作爲一個通用的價值衡量工具,商品的價格成爲一個被廣泛使用的尺度。價格短期看來反應的是供求的關係,但本質上反映了一個長期的、多人的價值。用數學的語言方式表示,價格是一個高維的泛函(Functional),其中每一維的變量都是一個個體的價值觀函數,或者用以下代碼(OCaml)表示:

(* 價值觀是一個從任意向量到整數的函數 *)
type value = (anything -> int)

(* 價格是一個從多個價值觀函數到一個價值觀函數的函數(泛函) *)
val price : (values_of_all : value list) -> value

(* 一個簡單實現:價格即爲所有人價值觀的平均值 *)
let price values_of_all =
  fun thing ->
    let sum = List.fold_left (
      fun sum value_function -> sum + (value_function thing)
    ) 0 values_of_all in
    let number_of_people = (List.length values_of_all) in
    sum / number_of_people

換人話說,價格反映了全體生產者和消費者的價值觀,儘管可能各不相同,但卻用一個工具把它們統一了起來,變成了一個單一的可以衡量不同事物的價值的函數。對於一個個體來說,商品的價格可能偏離個人對商品的價值衡量,因此會有感覺便宜或者感覺貴。根據個人是否有錢,個人對價值的衡量也會不同,個人資產可以作爲價值觀函數的一個其他參數。

用價格衡量價值的方法看似簡單粗暴,有諸多弊端,卻也有着其他方法無可比擬的優點。其最大的優點就是簡單性,因爲人類對複雜事物的理解力實在有限。這也是爲什麼計劃經濟無法執行的一個原因,因爲沒有一個把萬物映射到一維的函數,或者這個函數取樣過於有限,只能反應少數統治者的意願。

價值多元化

一元價值儘管有着便於比較排序的優點,但卻會導致優化目標的單一化。譬如超級計算機只優化LINPACK或其他某個性能,學生爲了應付高考成爲做題機器,全社會「向錢看」道德淪喪等等。儘管着本身沒有什麼問題,卻會讓導致潛在的評估偏差風險。對此,價值多元化的主張被提了出來。價值多元化是把一維的價值標量變爲多維向量,也可以理解爲是多個價值函數的組合。價值多元化以後,價值本身重新變得不可比較,只能按照維度比較(或者價值向量的函數)。

在我看來,價值多元化沒有解決太多的問題,反而喪失了序關係,事實上是一種掩耳盜鈴的方法。價值多元化就等於沒有價值,只是把一個高維向量映射到了另一個向量,不僅丟失了信息,還無法比較。價值多元化可以當作進一步價值比較的「中間結果」,方便進一步計算而已,最終還是要歸結於一維。用金錢衡量一切的一元價值儘管不能解決許多問題,卻是人類目前能想到並實踐的最有效的方法。但願會有更好的方式被發明出來。

相關日誌