Total Pageviews

2021/06/13

[閱讀筆記] Algorithms to Live By - 結語 (Conclusion) - 運算的善意

 結語 (Conclusion) - 運算的善意

  1. 現今的電腦做的,並非「盡量羅列選項,找出最好的一個」。有效的演算法會做出假設,偏向選擇較簡單的解答、權衡誤差代價和延遲代價,接著冒險一試。這些作法不是讓步,它們本身就是理性的方法。

  2. Merrill M. Flood (數學家、囚徒困境提出者之一) 曾說:我深信對人類最重要的,是以本性待人接物。把許多耗費腦力的工作交給機器代勞,可讓人類有更多時間與誘因,學習如何共存共榮。

  3. 電腦不僅是工具,也是我們的夥伴,由這點可得出三個結論

結論

說明

電腦學家與數學家已找到可以解決人類問題的方法

  • 37% 法則、LRU (Least Recently Used) 演算法、以及依據信賴上限決定是否開發 (explore) 等,都屬於這類例子。

結果 (result) 經常成為頭條新聞,但過程才是我們可以控制的

  • 37% 法則其實有 63% 的失敗率;LRU 管理快取方式,不保證你 100% 能找到想要的東西;以信賴上限來權衡開發或善用,不代表一定不會遺憾。

  • 以上方法皆無法預測未來,但我們已盡其所能,已努力讓自己採取最明智的行動 (the wisest act)。採取最佳的可能「過程」,即使「結果」不如所願,也不該怪自己

清楚劃分有解答與沒有解答的問題

  • 如果遇到難解問題,經驗法則、估計和有計畫地運用隨機性,可以幫助我們找到有用的解答。有時候「夠好」真的已經夠好

  • 理解複雜性有助於選擇問題,如果我們能控制要面對哪種狀況,應該就能選擇可解的狀況。


  1. 運算的善意 (computational kindness):我們不只要選擇自己面對的問題,也要面臨選擇要給其他人的問題,可能是規劃程式的方式,也可能是提出問題的方式。比起沒有明確答案的問題,一般人似乎偏好有設限的問題,即使這個限制只是隨便訂的也不要緊。為表達客氣而不說明自己的偏好,反而會增加運算負擔;說明自身喜好或許不是那麼客氣,卻能明顯減少互動的運算成本

  1. 我們可以試著給他人較少的選項,而非盡量增加。例如,不要給 10 個選項,給兩、三個就好。如果群組中的每個人先刪去最不喜歡的選項,就可以讓每個人都輕鬆點。如果要請人共進午餐或排定開會時間,提出一、兩個確定提議讓對方接受或拒絕,是個不錯的起點。

  2. 不要再要求對方提出建議或解決方案,應自己提出。例如,不要問別人下周何時有空碰面,而是主動提出你的第一與第二個理想的時間。

  3. 運算的善意,不僅是行為原則,也是設計原則。設計的主要目標,是讓使用者免除不必要的對立、摩擦與腦力消耗。

  1. 在處理困難的題目時,最好的演算法是在最短時間內得出最合理的答案,而不是仔細考慮所有因素,進行所有可能的計算。生命苦短,我們沒有這麼多時間。納入越多因素,找到完美解達的時間就越長,包括在有限資訊的狀況下跟求職者面談、在不斷變化的世界中試圖解決開發與善用的兩難、或是執行工作時有某些部分需仰賴他人等。有效的演算法會做出假設,偏向選擇較簡單的解答、權衡誤差代價和延遲代價,接著冒險一試。這些並非我們難以理性面對時的讓步,它們本身就是理性的方法。

  2. 決斷的演算總結

① 最佳停止點 (Optimal Stopping) - 什麼時候該見好就收?

② 開發或善用 (Explore / Exploit) - 嘗試新歡?還是固守舊愛?

③ 排序理論 (Sorting) - 依照順序排列

如果能以一個簡單數值來評量表現,就能以常數時間演算法來決定名次。從只能呈現排名的序數改成基數 (直接指定評定水準的方式),就能自然地依序排列要讓成千上萬、甚至數百萬個群體生活在同一空間中,就必須跳脫出來,從序數變成基數 (或稱為基準)。人類和猿猴、雞等動物的差別是,以競賽取代打鬥

④ 快取 (caching) - 忘掉就算啦!

  • 善用 LRU (Least Recently Used) 演算法「移至前端」(move-to-front) 法則:

    • 衣帽架是你的 cache,冬天的大衣、外套、領帶等,應掛在衣帽架上以利穿脫,且衣帽架應接近大門。

    • 我們下次可能需要的資料就是上次用過的那些,再接下來需要的可能就是前面倒數第二次使用的資料;此外,我們最不需要的資料,就是未使用時間最長的那個

    • 由於我們無法預知未來,所以把用過的東西放在最上面是最好的方法,刻意不排序往往比花時間排序更有效率,我們不需整理的理由不是懶,而是已經整理好了。

⑤ 排程 - 優先的事情優先處理 (Scheduling  - First Things First)

  • 最短時間加權法」可說是不確定狀況下的最佳通用排程策略的選項之一,是排程理論中的瑞士刀:一出現新工作,就把它的重要性除以完成所需時間,如果結果高於正在進行的工作,就做新工作,反之則繼續進行當前工作

  • 若你發現手上許多短時間工作,因此常需要做 context switch 時,可採源自電腦科學的 interrupt coalescing (中斷聚合) 概念。舉例來說,假設你有五張信用卡帳單,依據最晚結帳時間設定繳費日,在該繳費日坐下來一次處理所有帳單,不管帳單是 1 天前、3 星期前送達都沒關係。

⑥ 貝氏法則 - 預測未來 (Bayes’s Rule - Predicting the Future)

  • 貝氏法則告訴我們,要以有限的證據進行預測時,最重要的條件是擁有正確的事前分布,也就是知道哪種分布可為我們提供證據

  • 如果你想要成為具有正確直覺的貝氏統計學家,若你想自然地做出正確預測,不需思考應採用哪個預測法則,就必須好好保護你的事前分布,你該做的反而是違反直覺地少看新聞

⑦ 過度配適  - 少,但是更好 (Overfitting - When to Think Less)

  • 有時候不是在理性與直覺間做選擇。跟著直覺走,有時也是理性的解決方案。決策越複雜、越不穩定、越不確定,仰賴直覺決定提前停止 (early stopping) 的方式就越理性

  • 模型越複雜,越容易產生 outfit 問題,易受雜訊影響。善用 Lasso 演算法,簡化到只剩下少數幾個重要因素,方程式也因此變得簡單穩定,增強統計模型的預測準確性和可解釋性。少即是多 (less is more) 與減少 overfit,將是人類社會的重要指南

⑧ 鬆弛 - 放鬆點,不求完美才有解 (Overfitting - When to Think Less)

  • 遇到難解問題,即使擁有超級電腦也無用武之地。我們要學會放鬆 (Relaxation),電腦才派得上用場。

放鬆方法

說明

① 限制鬆弛法

(Constraint Relaxation)

直接去除某些限制,求出比較鬆弛問題的解,再把結果套用到真實狀況。

② 連續鬆弛法


把離散或二元選擇轉化成連續體,例如決定點冰紅茶或檸檬水時,先想像混合兩種飲料的冰檸檬紅茶,再決定要進位或捨去;又如飲料從加糖與不加糖,變成一到十分糖。

③ 拉式鬆弛法

(Lagrangian Relaxation)

把不可能變成高昂代價,教我們改變規則 (或是先違反規則、再接受後果),例如,演唱會稍微超過限制時間並支付罰款,會比嚴格限制表演時間來得好,以換取歌迷滿意度。


  • 鬆弛法的優點與必要性

優點與必要性

說明

① 為真實解答設下品質界線

透過放鬆限制條件的 trade-off 有助於讓人看見問題的全貌與合理設定自己的期待。

② 能與現實互相調和

提出一個與現實調和的參考解,讓人知道最佳解存在的範疇;在那個範疇附近都算 OK。

③ 追求完美是一種浪費資源與生命的行為

先假設比較容易的問題,並加以解決,才是取得進展的最佳策略。


⑨ 隨機性  - 什麼時候該讓機率決定 (Randomness   - When to Leave It to Chance)

  • 隨機性演算法用於特定問題的效果,甚至超越最好的確定性演算法。問題的最佳解決方法有時候是交給機率決定,而不是自己試圖推出答案。

  • 無論是抖動、隨機重新開始、或是接受解決方案偶而變糟,隨機性用於避免局部最大值的效果都很好。機率不只是處理困難最佳化問題的可行方法,在許多狀況下還是必要方法。從模擬退火法可以得知,你應盡早使用隨機性,並快速離開隨機的狀態,隨時間而降低隨機性,停留在接近結冰的時間最久

⑩ 網路 (Networking) — 我們如何互通聲息

  • 在 TCP 中,沒有單向傳輸,一旦沒有持續的回饋,發送者會立刻減緩發送速度。TCP 壅塞控制 (congestion control) 的核心,稱為加法遞增乘法遞減演算法 (AIMD, additive-increase/multiplicative-decrease)。在 AIMD 中,一批封包完整接收後,不會讓傳送封包數加倍,而只會 +1,而發生封包遺失時,則會使傳輸率降一半

  • 指數退讓法 (Exponential backoff) 是處理各種網路失敗或不可靠性的預設方法。當我們的電腦試圖連線一台顯然已停機的網站,就會使用指數退讓法 (Exponential backoff),起先是一秒鐘後 retry,接著是幾秒鐘後 retry,如此不斷拉長,對 client 或 server 端都有好處,不僅可防止停機的伺服器重新上線時因 HTTP Requests 太多而停擺,也可防止 client 端浪費太多時間白做工,而且此法也不會迫使我們的電腦完全放棄。

  • 許多公司強調的「高速網際網路」,指的是高頻寬,而非低延遲;網路工程師早該將「低延遲」視為最優先的問題。我們需要更多協和式客機 (Concorde),而非更大台的波音。例如,對線上遊戲玩家而言,即使 50ms 的延遲,都可能影響到他幹掉別人,還是別人幹掉他。

⑪ 賽局理論 - 別人是怎麼想的?

  • 如果改變策略沒有幫助,可以嘗試改變賽局。如果無法改變賽局,至少你多少可以控制要加入那些賽局。通往地獄的路是由遞迴、惡性均衡及 information cascade 所組成。尋找由誠實所主導的賽局,接著好好做自己就好。

  • 從囚徒困境,我們學到

    • 總是對其他人釋出善意作為開端:「名聲」是很重要的,因為別人都會記得你曾經做過的選擇。

    • 適當的「以眼還眼」是必要的:當對手之前選擇背叛時,用「背叛」來處罰對手。

    • 具有高度的可預測性 (predictable),反而更能讓別人願意跟你合作,在長時間獲得最佳的利益。

    • 在巨大的利益面前,很可能重複的囚犯困境變成「只玩一場」的囚犯困境,這時人跟人之間的信任變得不值一提:這時請千萬小心提防,採取必要的措施,因為很可能那些最信任的人,看起來最不可能背叛的人,都會屈服在這只需要玩一次的遊戲中。

No comments: