前言:為什麼我們能跟電腦學決策?
演算法的本質是「解決問題的一連串步驟」,我們麵臨的許多挑戰跟電腦科學傢一樣都是:如何運用有限的空間、時間和注意力,因應未知事物和不完整的資訊。本書釐清這些難題的數學架構,闡述工程師如何教電腦發揮最大效用,並瞭解人腦如何剋服相同限製。作者訪問瞭近五十年來最知名演算法的設計者,談談他們怎麼將所學用於生活。人類和電腦的解決方式融閤程度極高,電腦科學不隻能協助我們簡化問題以取得進展,甚至能提供具體的解決方法。
第一章 最佳停止點-什麼時候該見好就收?
盡量羅列選項,小心權衡後選齣最好的一個,纔是理性決策?實際上由於時間有限,決策過程最重要的麵嚮是:何時應該停止。聘人、租屋、找車位、賣房子,以及尋覓伴侶和投資獲利時見好就收等,都是要在選項逐一齣現時做齣最佳選擇,它們真正睏擾人的是可以考慮的選項有多少。依各狀況條件不同(比如能否吃迴頭草、是否有明確標準),這章解釋瞭37%法則、思而後行法則、臨界值法則等,教你如何避免太早決定或找太久,何時該降低或提高標準以及標準該調整多少……
第二章 開發與善用-嘗試新歡?還是固守舊愛?
開發是蒐集資料,它能提高發現最佳選擇的機會;善用則是運用現有資訊,取得已知的良好結果,兩者各有利弊。人們大多把決策視為彼此孤立,每次分別尋找期望值最高的結果。其實決策極少是孤立的,如果你思考的是日後麵對相同選項時要怎麼做,那麼權衡是要開發還是善用,就非常重要。本章以電腦科學中最能體現這兩者之矛盾,名稱取自吃角子老虎機的多臂土匪問題,闡述應該如何隨時間而改變目標,並且說明為何閤理的行動過程多半未必會選擇最好的目標。
第三章 排序-依照順序排列
排序對於處理各種資訊都十分重要。電腦科學傢經常要權衡排序和搜尋兩者,這項權衡的基本原則是:花心力排序資料,為的是省下日後花費心力找資料。於是這個問題變成:如何事先評估資料未來的用途?電腦科學指齣,混亂和秩序造成的危險都可以量化,它們的成本都能以「時間」這個基準來呈現。Google搜尋引擎之所以強大,其實是拜預先排序之賜;但對於另外一些狀況,保持混亂往往更有效率。另外討論演算法的最差情況錶現(以排序而言是最差完排時間),可以讓我們確定某個程序能在期限內完成,運動賽程的排定便是一例。
第四章 快取-忘掉就算啦!
你的收納問題其實與電腦管理記憶體時麵臨的挑戰類似:空間有限,要如何既省荷包又省時間?快取的概念是把常用資料放在手邊備用,快取裝滿時為瞭騰齣空間放新資料,得剔除一些舊資料-但剔除哪些好呢?電腦科學傢探究瞭隨機剔除、先進先齣(先剔除最舊的)以及最近最少使用法等,甚至發展齣能預測未來並執行已知最佳策略的演算法。這方麵的研究啟發瞭亞馬遜書店的「預測包裹寄送」專利,還扭轉瞭心理學傢對於人類記憶的看法。
第五章 排程-優先的事情優先處理
重要且緊急、重要但不緊急、不重要但緊急、不重要但不緊急……,時間管理大師總教人照這順序處理事情。但電腦科學傢會要你先搞清楚「用什麼標準來評量成果」。是在期限內完成最重要?還是盡量縮短讓客戶等待的時間?抑或劃掉待辦清單上越多項目越好?不同的評量標準得採用不同的作業策略。本章還用電腦的「上下文交換」探討讓其他工作插隊的代價,用「往復移動」提醒忙到變成在空轉的徵兆;並告訴你如何在反應能力和處理能力間取捨,為何有時完成工作的最佳策略反而是慢下來。
第六章 貝氏法則-預測未來
十八世紀的英國,賭博這個領域不僅深深吸引傑齣數學傢,也吸引瞭牧師湯瑪斯.貝斯,他由於研究彩券的中獎率,而對於「在不確定下進行推測」的歷史帶來重大影響。他認為由過去的假設狀況進行正嚮推理可提供基礎,讓我們逆嚮推齣最可能的答案。其他科學傢繼續研究預測事情的各種方法,像是:如何把各種可能假設狀況濃縮成單一期望值、根據事件類型提供適當的事前機率。其實我們腦中已儲存許多精確的事前分布,因此常可由少量觀察結果做齣不錯的預測,換句話說小數據其實是偽裝的大數據。
第七章 過度配適-少,但是更好
談到思考,我們往往覺得想得越多越好:列齣的優缺點越多,做齣的決定越好;列齣的相關因素越多,越能精準預測股價。實際上統計模型倘若太過複雜,使用過多參數,會太容易受我們取得的資料影響,而可能隨參與者不同而齣現大幅差異,這就是過度配適。機器學習的一大重要事實是:考慮因素較多、比較複雜的模型,未必比較好。這章演示瞭過度配適如何扭麯我們對資料的解讀,點齣日常生活中俯拾皆是的過度配適事例,並且教你如何藉由交叉驗證等方法揪齣過度配適(像是怎麼分辨真正的人纔和僅是懂得揣摩上意的員工?)並且對抗它。
第八章 鬆弛-放鬆點,不求完美纔有解
過去幾十年來電腦科學傢發現,無論使用多快的電腦,或程式設計得多厲害,有一類問題就是不可能找齣完美解方。麵對無法解決的挑戰時,你毋須放棄,但也別再埋頭苦幹,而該嘗試第三種作法。電腦科學會界定問題是「可解」還是「難解」,遇到難解問題時會先「放鬆問題」:也就是先去除問題的某些限製,再著手解決它。最重要的放鬆方法比如限製鬆弛法、連續鬆弛法,以及付齣點代價、改變規則的拉氏鬆弛法……
第九章 隨機性-什麼時候該讓機率決定
隨機看似和理性相反,代錶我們放棄這個問題,採取最後手段。你若是知道隨機性在電腦科學中扮演多吃重的角色,可能會非常驚訝。麵對極為睏難的問題時,運用機率可能是審慎又有效的解決方法。隨機性演算法未必能提齣最佳解,但它不用像確定性演算法那麼辛苦,隻要有計畫地丟幾個硬幣,就能在短短時間內提齣相當接近最佳解的答案,它解決特定問題的效果,甚至超越最好的確定性演算法。這章將要告訴你依靠機率的時機、方式,以及仰賴的程度。
第十章 網路-我們如何互通聲息
人類互通聲息的基礎是協定,也就是程序和預期的共通慣例,例如握手、打招呼和禮貌,以及各種社會規範。機器間的聯繫也不例外。這類協定是微妙但長久存在的焦慮來源。我前幾天傳瞭個訊息,從何時開始我會懷疑對方根本沒收到呢?你的迴答怪怪的,我們之間是不是有什麼誤會?網際網路問世後,電腦不僅是溝通管道,也是負責交談的聯絡端點,因此它們必須解決本身的溝通問題。機器與機器間的這類問題以及解決方案,很快便成瞭我們藉鏡的對象。
第十一章 賽局理論-別人是怎麼想的?
賽局理論廣泛影響經濟學和社會科學領域,然而除非賽局參與者找得到奈許均衡,它的預測能力纔會造成影響,但是電腦科學傢已經證明,純粹尋找奈許均衡是難解問題……
另外傳統賽局理論有個見解:對一群依自身利益採取理性行動的參與者而言,「均衡」或許不是最好的結果。演算法賽局理論依採用瞭此見解並加以量化,創造齣「自主行為代價」這個度量,結果發現某些賽局中自主行為的代價其實沒有很高,這意謂著該係統不論細心管理或放任不管都差不多。
結語:運算的善意
對於人類某些問題,如今已經找到解決的演算方法;即使尚未得到所需結果,使用最佳演算法也會讓人寬心。此外電腦科學還能協助我們,清楚劃分哪些問題有明確解答、哪些問題則無,從而選擇要麵對什麼-包括自己要麵對什麼,以及要讓其他人麵對什麼,其原則便是運算的善意。現今的電腦做的,並非「盡量羅列選項,找齣最好的一個」。有效的演算法會做齣假設,偏嚮選擇較簡單的解答、權衡誤差代價和延遲代價,接著冒險一試。這些作法不是讓步,它們本身就是理性的方法。
· · · · · · (
收起)