2020年12月12日 星期六

決斷的演算(2/5)

決斷的演算:預測、分析與好決定的11堂邏輯課
Algorithms to Live By: The Computer Science of Human Decisions
https://www.books.com.tw/products/0010761815


兩位作者

Brian Christian(超神的專業作家)
https://brianchristian.org/

Youtube演講
https://www.youtube.com/watch?v=gPBiJsqTRms

另一本大作The Most Human Human(過去人嘗試變得像機器或電腦般運算,現在人們嘗試讓機器與電腦變得像人一般對話、感受與思考;那麼人跟機器的差別何在?怎麼樣才算是人而非沒血沒淚的演算法機器?)

https://www.books.com.tw/products/0010786061


Tom Griffiths(任教於普林斯頓心理系,跨了統計、電腦演算與心理認知的神人老師,這些神人老師的CV真的會讓人看了氣死...)
http://cocosci.princeton.edu/tom/index.php

兩位作者的文采真是令人崇拜,透過單純與前後邏輯一致的演算法,讓人看見身而為人的人性與人世間的複雜



第三章 排序—依照順序排列

排序對於處理各種資訊都十分重要。電腦科學家經常要權衡排序和搜尋兩者,這項權衡的基本原則是:花心力排序資料,為的是省下日後花費心力找資料。於是這個問題變成:如何事先評估資料未來的用途?電腦科學指出,混亂和秩序造成的危險都可以量化,它們的成本都能以「時間」這個基準來呈現。Google搜尋引擎之所以強大,其實是拜預先排序之賜;但對於另外一些狀況,保持混亂往往更有效率。另外討論演算法的最差情況表現(以排序而言是最差完排時間),可以讓我們確定某個程序能在期限內完成,運動賽程的排定便是一例。

 

排序的用處

讓資料得以被搜尋、找到
IBM的起源正是專用卡片排序機

排序可以
1.by 開頭字母
2.by先後時間
3.by容量大小
4.by個人偏好或關聯性(Google的起家)
5.不排序整理也是一種排序

 

排序的苦惱與代價

規模加大,通常可以獲得規模經濟效應=>降低單位成本

然而規模加大/數據量暴增時,單位資訊的搜尋與排序成本不減反增=>東西越多用難整理

 

假設你要在家宴請賓客

那麼你把房子打掃乾淨所需的時間應該是個常數(constant time與賓客數多寡無關)=>O(1)

而你要花在和每位客人打招呼的時間應該是線性時間(linear time和賓客數多寡成比例)=>O(n)

然而要讓每位賓客相互招呼與擁抱的時間則為人數的平方時間(square time)=>O(n^2)

而如果考量你是主持人要讓賓客相互認識&負責介紹,也就是每多一位賓客,你的工作量會加倍,所需時間稱為指數時間(exponential time)=>O(2^n)

最後最恐怖的乘階時間(factorial time,每個賓客之間有交互作用與不同好惡要考量)=>O(n!)e.g., 撲克牌洗牌好洗到如同開封時的排序(52!)

 

 

泡泡排序

例如排序書籍,一次只調整兩本順序,而且不可以跳過

假如有n本書要移動n格的最差狀況,所需次數就是n*n=n^2(平方時間)

如有五個書架,排列時間與次數不是一個書架的5倍,而是25

 

改良方式:插入排序(Insert Sort)

把所有的書都拿下來,第一本放中央,後續各本再看排序

優點:符合一般人類操作直覺

缺點:可能比氣泡排序稍微快一點,但還是平方時間

 

 

如何突破平方時間/次數的障礙?

電腦科學當中的神奇演算法- 合併排序(Merge Sort)(應該是分割再合併)

先把n/2 =>每組只處理2本書(=平行運算)

然後各組再兩兩合併,每組處理四本書

兩兩合併,每組處理排序8本書,以此類推



 

合併排序的強大運算能力在於- 平行運算+讓複雜度降低,所以所需時間介於線性時間和平方時間之間,精確說是線性對數時間(linearithmic time

O(n log n)- 理論最佳直與最短時間

 

e.g., 4百萬本書要排序

泡泡演算法:(4*10^6)^2=1.6*10^13 (單一個排序處理器所需耗費的時間)

合併排序:4*10^6*log(4*10^6)=2.6*10^7 (多個排序處理器所需耗費的時間)

 

實務應用- 圖書館的借還書排序

其實沒有需要到絕對的排序精準,排序只需精準到某一櫃位(放在同一台推車上的同一箱內)即可=>了解排序項目的分配(書籍或書庫的分配)

即便不精準,借閱人員也還是找得到

 

 

排序好要幹嘛?

找電腦科學家進行排序工作,對方會先問你:是否真的需要排序(=耗費資源整理)

排序(物歸原位)(不斷)耗費資源的事情與工序,排序與整理日後用不到的資料或事務是浪費運算資源與儲存空間,what if不花時間心力排序(亂就讓它亂+定期清理掉),等到要用時,再花時間尋找或直接買新的,會不會更省時省力?

 

呵呵,以上觀念違反某些廠長要求廠內5S或潔癖家庭主婦的觀點,乃至於很多經理人與EHS打工仔都視髒亂與混亂為萬惡之藪,其實這反而是系統遵守熱力學原則與設法節省能量

 

搜尋之神Google的智慧(其實很邪惡,你以為透過搜尋可以發現事實與真相,其實搜尋結果顯示的是覺得你會認同的資訊,只是隨手可得的partial information & FAQ,你自己要再耗費心力判斷與查證,然而絕大多數鄉民無力判斷或質疑股溝大神的神諭 )

1.你會搜尋你(感興趣)的資料=>

2.你搜尋的資料有重複性與關連性=>

3.你要的只是個結果(而非耗時與絕對正確的page rank)=>使用者不耐等候,服務提供者的資源也很寶貴,與其真的耗費能量搜尋排序,不如直接把預先設定好的一些FAQ餵給你(+順便賣廣告&轉移你的注意力)

 

排序可以降低搜尋所需的成本(混亂與秩序兩者之間兩者trade off,成本大小可以用次數或時間來計算)

保持某種程度的混亂,可以讓運作更有效率

 

 

名次未必反映實力-運動賽事中的演算法

單淘汰制(bracket tournamen

32強,變成16強,8強,4強,準決賽=合併排序,線性對數時間(linearithmic time):O(n log n)

優點是很已很快決定冠軍,各隊不用一一與其他隊與對決。

缺點則是第二強的選手如果初賽就遇到第一強的選手被淘汰,那麼銀牌頒給的不是真正的第二名

 

相對合理(能夠找出強弱排序)的賽制

循環賽(Round-Robin)

n個隊伍分別和其他n-1 的隊伍比賽,如同要讓宴會上所有賓客相互擁抱,耗時等於平方時間O(n^2)

 

排位賽(Ladder)

羽球與壁球

依據目前排名排序選手名單,每位可以項前一名次挑戰,獲勝排名就對調

等於比賽的氣泡排序,耗時也是平方時間O(n^2)

 

比排序更重要的是

1.未必要減少比賽數=>影響球團票房收入

2.觀眾在意的是賽事精彩程度

3.比賽本身的運氣與不確定性因素正是重點

 

 

比賽結果的穩固性?

金牌真的第一與最強的嗎?

e.g., 在棒球比賽當中,一支球隊輸了30%的比賽,就有另一支球隊贏了30%的比賽,與球隊本身的強弱無關。

假設NCAA的籃球賽中,真正強的隊伍有70%的機率贏過另一隊(運氣成分30%),假設有64隊要經過六輪單淘汰賽決定出冠軍,那麼最強隊伍贏得冠軍的機率是0.7^6=0.1176,這真正強的球隊獲得冠軍的機率是每10年一次!

 

如何抵銷運氣與noise的干擾?=增加結果穩健性

比較計數排序(Comparison Counting Sort)

用賽制來看,就是先分區的例行賽:各區中的所有隊伍都要兩兩對戰,列出勝負紀錄並且排序(=循環賽制)

各區的季賽後再單淘汰制:沒有打入季後賽=真的實力不夠,季後賽的各區代表隊伍間的決戰有運氣因素(=相對精彩)

 

 

生物界的血腥排序

對於自己的能力與斤兩要有自知之明

猴子間會透過打鬧知道誰是老大、母雞透過雞啄來決定階級

而動物的族群數目約只有數十=小群體的泡泡演算可行,因此相對衝突較小(群體數目越大,泡泡演算越不可行)

 

相對於一般運動賽事,各種比賽個人或隊伍只要爭取最佳名次即可(不須對自己的水準有充分的認識);然而在無限下注的現金撲克當中,當有更強的牌手坐上賭桌時,其他有自知之明的牌手會離開(如同進食的猴子遇到高階的猴子過來時會離開一般);只有當彼此雙方內心對於排序不同時,才有現金賽局(拿出真槍白銀來show hand)

 

階級的資訊可以簡化排序次數與減少衝突

 

以上觀點讓人腦洞大開,以往覺得組織內的階層是非常邪惡的東西,一些坐上大位的高層其實是尸位素餐的代理人與欺上瞞下的lucky bastard

覺得管理與階層不過是必要之惡,如果資訊公開與大家討論達成共識,會是多麼美好的事情

而從演算法的角度來看,資訊公開、大家討論(與辯論相互說服)達成共識=循環賽(Round-Robin),耗時等於平方時間O(n^2)

課內討論,課長搓出共識與初步方案=內部循環賽制

往上呈給經理部長,各部門經理與部長再往上呈給處長,處長再給協理/副總,最後再給總經理董事長=單淘汰賽制,耗時是線性對數時間(linearithmic time):O(n log n)=>有運氣與noise的干擾,政治協商與相互妥協有其必要性

 

以上觀點(=root cause)解釋了

1.為何高階主管不用聰明或夙夜匪懈也能坐穩與當個肥貓(薪資與權力表彰的是地位,而非當事人的能耐;而地位存在的唯一意義就做出決定/say yes or no然而決策型一型二錯誤的風險都很高,所以決策好壞或效益/合理性是一回事,宣揚成好決策與能夠穿鑿附會才是關鍵;高階主管與政治人物的本質就是演員與自欺欺人的騙子,要常常引經據典,言必策略、管理、願景、文化、價值、誠信、創新、團結)

2.組織潛規則與沒有完美的組織

https://eshmanager.blogspot.com/2014/07/blog-post.html#more

3.數據/衡量的失控與政治暗室協商的必要性

https://eshmanager.blogspot.com/2020/09/33.html

4. 科學無法解決干擾(noise)、不確定性=風險的議題

https://www.books.com.tw/products/0010764980

 

再反過來想,其實不用知道以上演算法,組織也自然會形成功能性分組(產銷人發財)與階層(=物以類聚、人以群分),以解決各種資訊傳遞的損耗與拍板做出決策(有決策比沒有決策好);有的老闆自然而然就體會與領悟出不管也是一種好的管理方式,有的創業家或創投發現與領悟隨機投資才是更正確的投資方法,有的投資人發現自己機關算盡的結果竟然不如猴子射飛鏢。

這麼理所當然的事情,Coasetransaction cost來包裝,拿了諾貝爾獎,有如是說國王沒有穿新衣的那個小孩被視為提出了驚天動地的洞見,頒給獎項;經濟學家都是一些活在數學理論與各種理想假設條件當中的怪咖,所以對這個發現大驚小怪?!

https://en.wikipedia.org/wiki/Transaction_cost

https://en.wikipedia.org/wiki/Ronald_Coase

 

欸,為學日益,為道日損,在個人智識的成長日曆上又翻過一頁(對於能有人推薦我看這本書與自己能夠看得懂乃至於有些心得收穫,心懷感激與感動)

https://blog.xuite.net/imissyou7799/twblog/expert-view/494565344

 

 

以競賽代替打鬥

族群本身執行排序的缺點

1.造成對抗(與拉幫結社)

2.階級與名次影響生理與心理(各種獎項與頭銜造成多少人抑鬱沮喪,難怪黑天鵝作者說:依賴外界的認可(抬頭、獎項、榮譽)非常有害於你自己健康,因為人們給予認可的方式既殘忍又不公平,所以最好不要對這種遊戲過度認真!https://eshmanager.blogspot.com/2015/05/blog-post_30.html#more )

 

可以排序卻不需付出代價的方法(其實只是減少排序的成本,對抗與對於身心的影響還是存在)

1.馬拉松

上萬人一起跑,無需兩兩捉對廝殺

 

2.從相對排序改用絕對基準衡量=考試測驗/聯考

或者不同類型的企業,其實就用股價高低來表述誰比較成功

不同國家用GDP來表述誰比較優越

 

3.各種倫理法則或法律

敬老尊賢、海上航行靈活的小船要讓大船

法律上的優先權

 

人類勝過禽獸與能夠建立文明的原因在於-

以競賽取代打鬥,以各種(自己想像出)規矩來取代拳頭與流血衝突

但不管活在哪個年代,求生始終不是件容易的事情,總是有生存競爭壓力。

 

 

 

第四章 快取—忘掉就算啦!

你的收納問題其實與電腦管理記憶體時面臨的挑戰類似:空間有限,要如何既省荷包又省時間?快取的概念是把常用資料放在手邊備用,快取裝滿時為了騰出空間放新資料,得剔除一些舊資料——但剔除哪些好呢?電腦科學家探究了隨機剔除、先進先出(先剔除最舊的)以及最近最少使用法等,甚至發展出能預測未來並執行已知最佳策略的演算法。這方面的研究啟發了亞馬遜書店的「預測包裹寄送」專利,還扭轉了心理學家對於人類記憶的看法。

 

智慧=不斷遺忘不重要的,與牢記重要的

 

 

記憶體階層- 把常用與最近用的放在手邊

記憶體容量越大存取速度越慢

因應方式是:

階層式記憶體- 表層是容量小相對速度快,越下層記憶體容量越大速度越慢

類似論文寫作- 把最相關的文章與書籍留在身邊隨時參考查閱,剩餘的再找時間去查詢圖書館

 

快取:處理器有快取、硬碟記憶體有快取、瀏覽器與伺服器都有快取

現行電腦與智慧手機的記憶體有六層,以加快速度

 

快取存滿時該怎麼辦?

 

 

把隔最久沒用到的資料優先刪除- 貝雷迪演算法

騰出空間=快取替換或刪除

 

由於難以預測哪些資料會在短時間內再次用到,快取替換或刪除的幾個方法

1.隨機刪除,效率其實不算差(反正空間有挪出來了)

2.先進先出:把存放在快取當中最久遠的資料刪除

3.最少使用法(LUR):刪除最少被存取的資料

 

LUR效率最佳

 

 

把圖書館內外翻轉

圖書館=記憶體

最常被借閱使用的資料,應該直接放在最顯眼與最容易取用的書架上,而非歸原位

學生也可以直接參考那些最常被大家借閱的資料為何=通識教育+不用走到櫃位去找書

 

 

距離的重要性

讓資料隨手可得,不論是實體的距離、記憶體內部的layout 還是網際網路的伺服器

 

亞馬遜的混沌倉儲法

不把各項貨品比照圖書館書籍分門別類,而是隨意放置在倉庫各地+登錄該物品所在位置;例外只有需求量大的貨品,擺在相對容易取用的位置,而且還主動預估哪些是可能受當地居民喜愛的商品,把該項商品提前運送至附近倉儲,如此消費者下單時,該項商品的運送時間會越短

 

 

家中的快取- 收納空間整理法

1.比照LUR優先剔除最少用到的品項

e.g., 很久沒穿的衣服

2.考量取用距離

e.g., 內衣在浴室旁,雨具在門口

3.考量取用頻率次數

常穿便服放在衣帽架上

 

 

收納專家說錯了的書面資料整理

不應該分門別類,而是把最近用到的放回最左邊,每次都從左邊找起(=LUR原理)(或者旋轉90度,每次從最上面找起)

不止更有效率而且是最佳方法

 

 

為可能用到的東西挪出空間- 遺忘曲線

人腦會遺忘不是因為腦容量空間不足,而是需要整理與搜尋:人的記憶容量幾乎無限,但搜尋記憶的時間有限;忘掉一些東西才能學習新知識

人的一輩子會經歷太多事情、見過許多人、記錄許多資訊,不可能把如此多的資訊都放在心上

大家常覺得人上了年紀會變得健忘是認知功能衰退,那其實是適應周遭世界節省大腦記憶與存取的能量

另外老人家的記憶量遠比年輕人多,存取起來速度更慢(讓人以為是認知功能衰退)

 

 

經驗的反效果

容量本身就足以影響速度,只要必須搜尋的事物量越多,花費的時間就會加長

老年人的幌神其實可謂大腦在快取處理當中,年紀越長,要回想人名的記憶時間就越長,其實是因為必須過濾的資料多,而非頭腦衰退

年輕人沒經歷過多少人事,當然反應速度快


呵,這個部落格就是我的知識庫與圖書館

可以看過的書所得到的一些想法跟見解記錄下來,然後遺忘去讀下一本書,直到某個時刻想起似乎有某個見解相關再回來google.

沒有留言: