讀人工智慧全傳04NP完全問題

躺柒發表於2024-07-06

1. 問題解決與搜尋

1.1. 解決問題的能力無疑是區分人類和其他動物的關鍵能力之一

1.1.1. 解決問題是需要智慧的

1.2. 漢諾塔

1.2.1. 對於三個金環而言

1.2.1.1. 你不可能找到少於7次的解決方案了

1.2.2. 最初,我們只能選擇移動最小的金環,只有將它移動到中間或者最右邊的柱子上

1.2.2.1. 所以對應第一步,我們只有兩種移動可能,以及兩種不同的新狀態

1.2.3. 如果我們選擇將最小的金環移動到中間柱子,那麼我們隨後可以執行三種操作

1.2.3.1. 將最小的金環移動到最左側或者最右側的柱子

1.2.3.2. 將第二個金環移動到最右側柱子(不能將第二個金環移動到中間柱子)

1.2.4. 以此類推

1.3. 所有類似漢諾塔的問題都有著相通的解決方案

1.3.1. “狀態”這個術語在人工智慧領域指的是某個事物或者問題在某個特定時刻呈現的結構

1.3.2. 首先,從初始狀態開始,我們考慮每個可能的動作對初始狀態的影響,執行每一步操作都會將初始狀態轉換為一個新的狀態

1.3.3. 如果其中某個新狀態是我們的目標狀態,那就意味著操作成功

1.3.3.1. 這個問題的解決步驟就是從初始狀態達到目標狀態所執行的操作

1.3.4. 否則,在每一個新狀態上,繼續考慮所有可能導致狀態變更的操作,重複這樣的過程,以此類推

1.4. 窮舉搜尋

1.4.1. 窮舉搜尋的方式不僅能保證在問題可解的時候尋找到問題的解,還能保證尋找到問題的最優解

1.4.1.1. 作為計算機的演算法,窮舉搜尋非常簡單,編寫一個程式來實現它非常容易

1.4.2. 簡單的窮盡式搜尋是一項非常原始的技術

1.4.2.1. 可以使用啟發式方法來對它進行最佳化,但是並不保證一定有效

1.4.2.2. 你會發現對搜尋方式的最佳化可以改善一些東西,但是,最終你仍然無法繞過組合爆炸

1.4.2.2.1. 在大多數情況下,能在理論上確保問題可以解決的方案,在實踐中都會遇到這個問題

1.4.3. 學會避免做一些徒勞的移動

1.4.3.1. 一臺簡單執行窮舉搜尋的計算機卻無法做到

1.4.3.2. 它只能窮舉出所有移動下的所有新狀態,哪怕某些窮舉步驟就是在浪費時間,它也會走回頭路,回到已經被確認過失敗的狀態

1.4.4. 除了太多重複和低效率以外,窮舉搜尋還有一個根本的問題

1.4.4.1. 搜尋樹隨著分支因子能增長到多大

1.4.4.1.1. 通常一局圍棋遊戲要走大概200步,在圍棋搜尋樹中儲存200步走棋的搜尋樹狀態數目
1.4.4.1.2. 是一個大到你我都無法想象的天文數字,它比我們宇宙中所有原子的數目還大幾百個數量級

1.4.4.2. 對確定了分支因子數的搜尋樹,在不同層級有多少種狀態

1.5. 搜尋樹這種迅速、荒唐的增長速度導致了無法想象的問題,我們稱之為組合爆炸,它是人工智慧所面臨的最重要的實際問題

1.5.1. 在人工智慧發展初期,組合爆炸被認為是根本性問題,麥卡錫將其確定為1956年人工智慧暑期學校的重要研究課題之一

1.5.2. 搜尋樹中的每個層級都呈指數型增長

1.5.2.1. 在層級增多的時候,組合爆炸會導致可能出現結果的增長速度超乎想象

1.5.2.2. 徹底列舉每一種組合可能性的方式,是不可行的

1.5.2.3. 理論上它行得通(如果時間足夠,總會得到正確的答案),但在實踐中它毫無意義(因為對每種可能的組合做判斷需要的時間是天文數字)

2. 深度優先搜尋

2.1. 並非逐級建立完整的搜尋樹,而是沿著其中一個分支構建搜尋樹

2.2. 透過深度優先搜尋,我們沿著一個分支往下擴充套件,直到得到解決方案或者確信無法得到解決方案

2.3. 如果遇到困難,那麼我們就停止在該分支上的擴充套件,返回到上一級,選擇另外的分支

2.4. 深度搜尋的主要優點在於不用儲存整個搜尋樹,只需要儲存當前正在處理的分支即可

2.5. 缺陷

2.5.1. 如果選擇了錯誤的分支進行探索,可能會在錯誤的路上越走越遠,永遠找不到解決方案

2.6. 首先我們得確認哪個分支最值得搜尋

3. 啟發式搜尋

3.1. 啟發式搜尋的概念就是使用所謂的“經驗法則”來指導搜尋的重點

3.2. 通常我們也無法尋找到直指正確搜尋路徑的啟發式方法,但我們往往可以在感興趣的問題上找到啟發式搜尋方向

3.3. 啟發式搜尋是一個自然而然產生的概念,多年來它被重新定義了很多次,所以爭論到底是誰發明了它已經毫無意義

3.4. 第一個應用在人工智慧程式的啟發式搜尋來自一個玩跳棋遊戲的程式,由IBM的亞瑟·塞繆爾(Aithur Samuel)於20世紀50年代中期創造

3.4.1. 塞繆爾使用的是IBM701計算機,只能處理相當於幾頁文字長度的程式程式碼

3.4.2. 塞繆爾跳棋程式的關鍵點在於給棋盤的各個位置賦予不同的權重,用以評估對選手而言位置“好”的程度

3.4.3. 從直覺來說,某些“好”的位置可能讓某位選手更容易取得勝利,而一些“壞”的位置則會導致失敗

3.4.4. 程式將不同的評估引數整合起來,給出棋盤位置的一個綜合評估價值分數,形成一個量化的評估標準

3.4.5. 再根據啟發式搜尋方法來選擇最佳的棋盤移動路徑

3.5. 極大極小值搜尋

3.5.1. “最壞情況推理”的方法

3.5.2. 假設對手的行為會使得自己的得分最大化,讓你的得分最小化

3.5.3. 是對抗性遊戲的基本概念

3.6. 大部分早期的啟發式搜尋演算法,包括塞繆爾的程式,都使用了某種特別的啟發方式:“嘗試—實踐—判斷”

3.7. 20世紀60年代末,美國SRI人工智慧研究中心的尼爾斯·尼爾森(Nils Nilsson)和他的同事取得了突破,他們開發出名為A*的技術

3.7.1. 在A*之前,啟發式搜尋不過是一個猜謎遊戲

3.7.2. 在A*之後,它是一個數學上很容易理解的過程

3.7.3. A*現在被視為電腦科學中的基礎演算法之一,並且在實踐中得到了廣泛的應用

3.7.4. 儘管A*很驚豔,但它仍然依賴於使用特定的啟發式搜尋:好的啟發能很快地找到解決方案,而差的啟發就沒什麼價值

4. 複雜性障礙

4.1. 圖靈發明計算機可能算是電腦科學史上最大的諷刺之一,因為他的本意是證明有些事情計算機永遠也辦不到

4.2. 在圖靈的研究成果問世後的幾十年裡,探索計算機能做和不能做的事情的範圍形成世界各地數學系的小分支的研究方向

4.2.1. 工作的重點在於把那些固有的不可判定問題(無法用計算機解決的問題)和可判定問題(能夠用計算機解決的問題)區分開來

4.3. 不可判定的問題存在層次結構

4.3.1. 即存在某些問題,不僅不可判定,還是高階不可判定的

4.4. 在20世紀60年代,確定一個問題是否可判定,還遠遠不夠

4.4.1. 一個問題在圖靈看來是可以解決的,並不意味著它在實際操作上是可以實現的

4.4.2. 圖靈只是從理論上證實某些問題有解,但是有些問題的解決方式需要消耗龐大的計算資源

4.4.2.1. 需要動用的計算機記憶體大到不可估量,或者計算機的執行速度慢得出奇,能計算出結果的時間遙遙無期

4.4.2.2. 期待英特爾的工程師們提供計算速度更快的晶片也無濟於事

4.4.2.3. 傳統計算機技術再怎麼突飛猛進,也無法在合理的時間內完成10^29這個數量級的計算任務

5. NP完全問題

5.1. “NP”代表“不確定多項式時間”

5.1.1. 具體的技術定義相當複雜

5.1.2. NP完全問題背後的邏輯很簡單

5.2. NP完全問題的基本結構早在20世紀70年代就已成形

5.2.1. 1971年美籍加拿大數學家斯蒂芬·庫克(Stephen Cook)的一篇論文確定了NP完全問題的核心思想

5.2.2. 隨後美國人理查德·卡普(Richard Karp)證明了庫克NP完全問題的範疇比最初想象的要廣泛得多

5.3. 整個20世紀70年代,人工智慧領域的研究人員開始利用NP問題完全性理論來研究他們的課題,結果令人震驚

5.3.1. 不管哪個領域(解決問題、玩遊戲、計劃、學習、推理任何方面),似乎關鍵性的問題都是NP完全問題(甚至更糟)

5.3.2. 到了20世紀70年代,NP完全性理論和組合爆炸成為籠罩在人工智慧領域的陰影,以計算複雜性的形式阻攔在人工智慧發展道路上,使它陷入停滯

5.4. 組合問題是一個NP完全問題

5.5. 旅行推銷員問題

5.5.1. 旅行推銷員問題和團隊建設問題一樣,都會面臨組合爆炸的難題

5.5.2. 如果你發明了一種可以高效又準確解決團隊建設問題的方法,那麼就等同於你發明了可以高效又準確解決旅行推銷員問題的方法

5.5.3. 這種神奇的方法並不僅僅適用於這兩個問題,而是可以解決所有NP完全問題

5.6. 所有的NP完全問題都能共通,可以互相轉換

5.6.1. 要麼所有NP完全問題存在通用的解,要麼它們都無解

5.6.2. 如果你能找到高效又準確解決某個NP完全問題的方法,就意味著你能夠解決所有NP完全問題

5.7. 事實上NP完全問題能否有效解決,是當今科學界最重要的開放性問題之一

5.7.1. 這個問題被稱為P與NP問題

5.7.2. 我們還沒有明確地證明NP完全問題不可解

5.8. 如果你發現自己要解決的問題是NP完全問題,這就意味著傳統意義上的計算機技術在解決該問題上是行不通的

5.8.1. 從精準的數學意義來說,你的問題太難了

6. 人工智慧寒冬

6.1. 20世紀70年代初,人工智慧的瓶頸讓科學界越來越沮喪,沒有太多有用的核心研究進展

6.1.1. 某些研究人員又大肆鼓吹人工智慧的未來

6.1.2. 當年的研究人員沒有意識到正在研究的問題本質上是計算機無法處理的,因而總存在出現突破性進展,使得問題迎刃而解的可能性

6.2. 到了70年代中期,批評人工智慧的風潮達到狂熱的程度

6.3. 德萊弗斯選擇的報告題目是《鍊金術與人工智慧》,明白無誤地表達了他對這一領域及其工作人員的蔑視

6.3.1. 他的某些觀點是有道理的,特別是關於人工智慧先驅者們浮誇的觀點和宏偉的預測

6.4. 20世紀70年代初到80年代初這10年被稱為人工智慧寒冬

6.4.1. 更確切地說應該是人工智慧的第一個寒冬,因為此後還有類似事件發生

相關文章