- 作者/ 布萊恩·柯尼罕( Brian W. Kernighan)
- 譯者/ 李芳齡
人工智慧的開端
在電腦發展之初的二十世紀中期,人們開始思考可以如何用電腦來執行通常只有人類才能做到的事情,一個明顯的目標是玩西洋跳棋和西洋棋之類的棋盤遊戲,因為這領域有個優點,那就是有完全明確的規則,並有一大群感興趣且有資格稱為專家的人。
另一個目標是把一種語言翻譯成另一種語言,這顯然困難得多,但更為重要,例如,在冷戰時期,從俄文到英文的機器翻譯是很要緊的事。其他的應用包括語音辨識與生成,數學與邏輯推理,做決策,及學習過程。
這些主題的研究很容易取得資助,通常是來自美國國防部之類的政府機構。我們已經在前文中看到,美國國防部對早期網路研究的資助有多珍貴,它引領出網際網路的發展。人工智慧的研究也同樣受到激勵及慷慨資助。
我認為,把 1950 年代及 1960 年代的人工智慧研究形容為「天真的樂觀」,應該是公允的。當時的科學家覺得突破就快到來,再過個五或十年,電腦就能正確地翻譯語言,在西洋棋比賽中擊敗最優的人類棋手。
我當時只是個大學生,但我著迷於這個領域和潛在成果,大四時的畢業論文就以人工智慧為主題。可惜,那篇論文早已被我搞丟了,我也想不起當年的我是否也抱持相同於當時普遍的樂觀態度。
但是,事實證明,幾乎每個人工智慧的應用領域都遠比設想的要困難得多,「再過個五或十年」總是一次又一次被端出來。成果很貧乏,資金用罄了,這領域休耕了一、二十年,那段期間被稱為「人工智慧之冬」。
把專家的判斷規則,直接寫成一堆判斷式的「工人智慧」階段
到了 1980 年代和1990年代,這個領域開始用一種不同的方法復耕了,這方法名為專家系統(expert systems)或規則式系統(rule-based systems)。
專家系統是由領域專家寫出很多規則,程式設計師把這些規則轉化為程式,讓電腦應用它們來執行某個工作。醫療診斷系統就是一個著名的應用領域,醫生制定研判一名病患有何問題的規則,讓程式去執行診斷、支援、補充,或理論上甚至取代醫生。
MYCIN 系統是早期的一個例子,用於診斷血液感染,它使用約 600 條規則,成效至少跟一般醫生一樣好。這系統是由專家系統先驅愛德華.費根鮑姆(Edward Feigenbaum)發展出來的,他因為在人工智慧領域的貢獻,於 1994 年獲頒圖靈獎。
專家系統有一些實質性的成功,包括顧客支援系統、機械維修系統以及其他焦點領域,但最終看來也有重大限制。
實務上,難以彙集一套完整的規則,而且有太多例外情況。這種方法未順利擴大應用於大量主題或新問題領域,需要隨著情況變化或了解的改進,更新規則,舉例而言,想想看,在 2020 年遇上一名體溫升高、喉嚨痛、劇烈咳嗽的病患時,診斷規則該如何改變?這些原本是一般感冒的症狀,或許有輕微的併發症,但很可能是新冠肺炎,具有高傳染性,且對病患本身及醫療人員都非常危險。
擺脫「工人智慧」,讓電腦能自學——機器學習的基本概念
機器學習的基本概念是對一種演算法給予大量的例子,讓它自行學習,不給它一套規則,也不明確地編程讓它去解決特定問題。
最簡單的形式是,我們為程式提供一個標記了正確值的訓練集(training set),例如,我們不試圖建立如何辨識手寫數字的規則,而是用一個大樣本的手寫數字去訓練一套學習演算法,我們對每個訓練資料標記其數值,這演算法使用它在辨識訓練資料時的成功及失敗來學習如何結合這些訓練資料的特徵,得出最佳辨識結果。
當然,所謂的「最佳」,並不是確定的:機器學習演算法盡力去提高得出好結果的機率,但不保證完美。訓練之後,演算法根據它從訓練集學到的,對新的資料進行分類,或是預測它們的值。
監督式學習——人類教電腦看見特徵,由演算法來算出規則
使用有標記的資料(labeled data/tagged data)來學習,此稱為監督式學習(supervised learning)。大多數監督式學習演算法有一個共通的架構,它們處理大量標記了正確類別(正確值)的例子,例如,這文本是不是垃圾郵件,或者,這照片中的動物是哪種動物,或者,一棟房子的可能價格。演算法根據這個訓練集,研判能讓它得出最佳分類或做出最佳預測的參數值;其實就是讓它學習如何從例子做出推斷。
我們仍然得告訴演算法,哪些「特徵」能幫助做出正確研判,但我們不對這些特徵給予權值或把它們結合起來。舉例而言,若我們試圖訓練演算法去過濾郵件,我們需要與垃圾郵件內容有關的特徵,例如類似郵件用詞(「免費!」)、已知的垃圾郵件主題、怪異字符、拼字錯誤、不正確的文法等等。
這些特徵單獨來看,並不能研判一份郵件就是垃圾郵件,但給予足夠的標記資料,演算法就能開始區別垃圾郵件與非垃圾郵件——至少,在濫發垃圾郵件者做出進一步調整之前,這演算法具有此過濾成效。
手寫數字辨識是一個眾所周知的問題,美國國家標準與技術研究院(National Institute of Standards and Technology,NIST)提供一公開測試組,有 60,000 個訓練圖像集和 10,000 個測試圖像集,<圖表>是其中一個小樣本。機器學習系統對此資料的辨識成效很好,在公開競賽中,錯誤率低於 0.25%,亦即平均 400 個字符中只有一個錯誤。
機器學習演算法可能因種種因素而失敗,例如,「過度擬合」(over-fitting),演算法對其訓練資料的表現很好,但對新資料的表現遠遠較差。或者,我們可能沒有足夠的訓練資料,或是我們提供了錯誤的特徵集,或者,演算法產生的結果可能確證了訓練集內含偏誤。
這在刑事司法應用系統(例如判刑或預測再犯)中是特別敏感的問題,但在使用演算法來對人們做出研判的任何情況,也會造成問題,例如信用評等、房貸申請、履歷表篩選。
垃圾郵件偵測及數位辨識系統是分類型演算法(classification algorithms)的例子:對資料項做出正確分類。
預測型演算法(prediction algorithms)則是試圖預測一數值,例如房子價格、運動比賽得分、股市趨勢。
舉例而言,我們可能試圖根據位置、年齡、客廳面積與房間數等主要特徵來預測房子價格,更複雜的模型——例如 Zillow 使用的模型——會加入其他特徵,例如相似房屋之前的售價、社區特色、房地產稅、當地學校素質。
非監督式學習——讓電腦自己找出特徵與規則
不同於監視式學習,非監督式學習(unsupervised learning)使用未加入標記的訓練資料,亦即沒有對資料加上任何標記或標籤。非監督式學習演算法試圖在資料中找出型態或結構,根據資料項的特徵,把它們分組。有一種盛行的演算法名為「k 群集分析」(k-means clustering),演算法盡力把資料分成 k 群,讓每一群中的資料項相似性最大化,並且各群之間的相似性最小化。
舉例而言,為研判文件的作者,我們可能假設有兩名作者,我們選擇可能的關聯性特徵,例如句子的長度、詞彙量、標點符號風格等等,然後讓分群演算法(clustering algorithm)盡它所能地把文件區分成兩群。
非監督式學習也適用於在一群資料項中辨識離群項(outliers),若大多數資料項以某種明顯方式群集,但有一些資料項不能如此群集,可能代表必須進一步檢視這些資料項。
舉例而言,設若<圖表>中的人工資料代表信用卡使用情形的某個層面,多數資料點分別群集於兩大群之一,但有一些資料點無法群集於這兩群中的任何一群,或許,這些資料點沒什麼問題——群集分析不需要做到完美,但它們也可能是詐欺或錯誤的情況。
非監督式學習的優點是不需要做可能滿花錢的訓練資料標記工作,但它不能應用於所有情況。使用非監督式學習,必須思考出與各群集相關的一些可用的特徵,當然,對於可能有多少個分群,也需有一個起碼的概念。
我曾經做過一個實驗,使用一個標準的 k 群集分析演算法來把約 5,000 個臉孔影像區分為兩群,我天真地期望這演算法或許能區分出性別。結果是,它的正確率約 90%,我不知道它是根據什麼來下結論的,我也無法從那些錯誤的情況中看出什麼明顯型態。
——摘自《普林斯頓最熱門的電腦通識課》,2022 年 2 月,商業周刊。