第十章 邏輯推理系統

61
第第第 第第第第第第 10.1 簡簡 10.2 簡簡 簡簡簡 簡簡 10.3 簡簡簡簡簡簡 10.4 簡簡簡簡簡 10.5 簡簡簡簡簡簡簡簡 10.6 簡簡簡簡簡簡簡簡簡 10.7 簡簡簡簡 10.8 簡簡簡簡 簡簡簡簡簡

description

第十章 邏輯推理系統. 10.1 簡介 10.2 索引、 檢索與一致化 10.3 邏輯程式系統 10.4 定理證明器 10.5 向前連鎖生產系統 10.6 框架系統與語意網路 10.7 描述邏輯 10.8 撤回管理、 假設與解釋. 10.1 簡介. 用代理人建立推理系統的想法很好─就是可以代表知識並推理的系統。這樣系統的主要優點為高度模組化。控制的結構可以跟知識分離,而每一知識單元可以完全獨立於其他知識單元。所以更容易實驗此系統並且修改它,系統可以更容易跟其他代理人解釋其運作,系統可以更容易自我學習。 . - PowerPoint PPT Presentation

Transcript of 第十章 邏輯推理系統

Page 1: 第十章 邏輯推理系統

第十章 邏輯推理系統10.1 簡介10.2 索引、 檢索與一致化10.3 邏輯程式系統10.4 定理證明器10.5 向前連鎖生產系統10.6 框架系統與語意網路10.7 描述邏輯10.8 撤回管理、 假設與解釋

Page 2: 第十章 邏輯推理系統

10.1 簡介 用代理人建立推理系統的想法很好─就是可以代表知識並推理的系統。這樣系統的主要優點為高度模組化。控制的結構可以跟知識分離,而每一知識單元可以完全獨立於其他知識單元。所以更容易實驗此系統並且修改它,系統可以更容易跟其他代理人解釋其運作,系統可以更容易自我學習。

Page 3: 第十章 邏輯推理系統

自動推理系統有許多種,每一種設計都是針對不同的問題。我們將它們歸類為以下四種: 定理證明器與邏輯程式語言 生產系統 框架系統與語意網路 描述邏輯系統

Page 4: 第十章 邏輯推理系統

這四種系統如何實作以及如何達到以下五個功能: 1. 新增一個事實到知識庫裡。這事實可能是認知得來,或是從推論而來。我們稱此功能為 TELL。 2.已有一個知識庫與一個新的事實,連接現有的知識庫與新的事實導出隱含的事實。在向後連鎖系統中,這也是 TELL的功能。 3. 決定一個查詢是否適用於知識庫。我們稱此功能

為 ASK。不同版本的 ASK功能不同,包括回傳一組所有可能的替代讓此查詢為真。

Page 5: 第十章 邏輯推理系統

4. 定一個查詢是否存在知識庫─一個限制的 ASK。

5.從知識庫移除一個命題。此功能要能分辨修正一個證明為錯的命題與遺忘一個不再使用的命題,並且要能更新知識庫以反映真實世界的改變,以及能夠記得之前世界的狀態 ( 有些系統可以做到這些分別;其他系統則需要知識工程師盡量簡化知識的內容 )。

Page 6: 第十章 邏輯推理系統

10.2 索引、檢索與一致化 TELL與 ASK通常可以用正向與反向鏈結或解析來作複雜的推理。在本節中,我們使用兩個實作部分的 TELL與 ASK且較為簡單的功能。我們稱這兩個功能為 STORE與FETCH 。

Page 7: 第十章 邏輯推理系統

命題與項目的實做 建立一個推理系統的第一不就是定義命題與項目的資料類型。這牽涉到定義命題的語法─在邏輯層級與使用者互動的格式─以及系統用來儲存與操作命題的內部表示格式。對於不同的命題可能有許多內部的表示方法。

Page 8: 第十章 邏輯推理系統

儲存與擷取 在我們有命題與項目的資料類型後,我們要能夠在知識庫裡維護一組命題,讓它們可以有效率地擷取使用。通常, FETCH指令是用來尋找知識庫裡的命題使其符合查詢的要求,或是至少可以符合語法結構。 ASK是用來作推論,過程中會呼叫一連串的 FETCH。所以推論的計算所需包括兩方面: ASK所使用的搜尋策略,與用來實作 FETCH的資料結構。

Page 9: 第十章 邏輯推理系統

表格索引 用雜湊表來實做知識庫是比較好的方法。如果我們只需要處理基礎文字的命題,我們可以將 STORE實做成當給定 P 時,在雜湊表裡

的 P 鍵之下存一個「真」,給定時,在雜湊表裡存一個「偽」。這樣 FETCH就可以對雜湊表做簡單的查詢,且 FETCH與 STORE都只需要 O(1)。

Page 10: 第十章 邏輯推理系統

雜湊表的鍵就是述詞的符號,而在每個鍵下所存的值包含四個部分:   代表述詞的肯定文字列舉項目   否定文字列舉項目   當述詞在結果時的命題列舉項目   當述詞在假設時的命題列舉項目

Page 11: 第十章 邏輯推理系統

所以假定有以下的知識庫:

此知識庫的雜湊表如圖 10.1 。...)(...)()(

),()(),()(),(

),(),(),(

),(

AnnMaleTedMaleJackMalexyBrotheryMaleyxBrother

xMaleyxBrotherSamAnnBrother

BobbieJackBrotherJackTedBrotherJohnRichardBrother

Page 12: 第十章 邏輯推理系統
Page 13: 第十章 邏輯推理系統

樹狀索引 表格索引對於許多的術語符號且每個符號的子句很少時是個理想的方法。但是在某些應用裡,一個述詞可能有很多的子句。例如,在美國的戶口調查局知識庫裡用社會安全碼來代表人,所以 Brother(012-34-5678,x) 的查詢需要從數百萬個Brother裡尋找。

Page 14: 第十章 邏輯推理系統

若要讓此搜尋有效率,我們需要對參數做索引,對述詞符號也要做索引。一個方法就是把表格裡的 Brother項目改用另一個表格代表,其索引使用 Brother的第一個參數。我們也可以將尋找符合句子的程序看成遊走一個樹的結構。而查詢命題的某一個符號就代表樹的每個分支 (圖 10.2) 。

Page 15: 第十章 邏輯推理系統
Page 16: 第十章 邏輯推理系統

一致化演算法 透過聰明的索引,可以減少 unification的呼叫,但是呼叫的次數可能還是很多。因此,這個 unification的演算法必須要有效率。圖 10.3 的演算法是個簡單的例子。它以遞迴法同時查看兩個運算式,最後產生unification的結果,但是若中途遇到不相符合的狀況就停止。

Page 17: 第十章 邏輯推理系統
Page 18: 第十章 邏輯推理系統

10.3 邏輯程式系統 用陳述的方法建立智慧系統有許多優點。邏輯程式語言則試著延伸這些優點到所有的程式設計。任何的計算都可看成是選擇某個程式到某個機器上並提供某些輸入後產生詳盡結果的程序。邏輯程式將程式與輸入視為對現實世界的邏輯陳述,而將產生詳盡結果程序視為一種推論的程序。

Page 19: 第十章 邏輯推理系統

Prolog程式語言 當它使用於邏輯知識庫時,一個 Prolog程式有以下的特色: 一個包含一連串其內部連結的句子的程式。所有的變數都隱含通用的量化,且在不同句子的相同變數是不同的。只有 Horn子句可接受。這表示每一個子句不是單元命題就是一個沒有 negated先行詞與單元結果的意涵。 項目可以是常數符號、變數或是函數項目。

Page 20: 第十章 邏輯推理系統

  查詢可以包括連結、分離、變數或函數。 除了意涵的 negated先行詞外, Prolog 使用一個negation as failure運算子:如果系統無法證明P,則 not P 證明就成立。

所有語法上不同的項目都假定是不同的物件。也就是說,當 A 是常數時, A=B 或 A=F(x) 不成立。當 x 是變數時, x=B或 x=F(y) 成立。 系統有預先建立許多數學、輸入 / 輸出、與不同的系統與知識庫功能的述詞。使用者些述詞的文句是在執行後就能證明,而不是用進一步的推論。在 Prolog符號裡 (大寫的名稱為變數 ) , X is 4+3 產生 X 為 7 。然而 5 is X+Y不能計算,因為其內建的函數無法解任意的方程式。

Page 21: 第十章 邏輯推理系統

實作 Prolog的設計者做了許多決定以提供一個簡單,快速執行的模式: 所有的推論都用反向鏈結,且是深度優先搜尋。這表示在證明一個命題遇到死路時, Prolog就回到最近一個包含不同路徑的步驟。先行詞的搜尋順序是由左而右,而應用知識庫的子句是由第一個到最後一個。忽略 unification程序的 occur-check 。

Page 22: 第十章 邏輯推理系統

邏輯程式的編譯 使用之前的一些方法就可以造出一個有效率的Prolog直譯器。不過就跟所有的語言一樣,以直譯式執行總是比執行編譯程式慢。這是因為直譯器通常是跟程式內容無關的。 Prolog的直譯器在執行程式時必須要藉由資料庫搜尋找到符合目標的命題,以及分析命題結構決定要產生的子目標。所以大部分重要的 Prolog程式都是用編譯碼執行的。

Page 23: 第十章 邏輯推理系統

目前電腦的指令集跟 Prolog的語法非常不符合,所以大部分的 Prolog編譯器將程式編譯成中間語言,而不是編譯成機器碼。最常用的中間語言就是Warren Abstract Machine,或是 WAM,。 WAM是一組抽象的適合用於 Prolog的指令集,且可以被直譯程式執行,也可以再編譯成機器碼。其它的編譯器將 Prolog轉譯成高階語言,如 Lisp或 C,然後再用高階語言的編譯器將程式編譯成機器碼。例如, Member述詞的定義可以編譯成圖 10.4 的程式。

Page 24: 第十章 邏輯推理系統
Page 25: 第十章 邏輯推理系統

關於此可歸納為以下的重點:Member的子句已經建立到程序裡,所以要推論時不用再搜尋知識庫,只要呼叫對應的程序就好。 如前所述,目前變數的限制都放在 trail裡,上面的程序第一步就是儲存 trail 的目前狀態,之後第一子句失敗時才能用 RESET-TRAIL恢復。這樣會解除第一

次 UNIFY呼叫的所有變數限制。 此程序最技巧性的地方就是用 continuations來達到選擇點的功能。 Continuation的作用就是決定當目前的目標完成時,下一個程序要達成的目標。

Page 26: 第十章 邏輯推理系統

其它的邏輯程式語言 雖然 Prolog是目前邏輯程式的標準,還是有許多其他的系統延伸基本的 Prolog提供不同的功能。例如, Prolog程式的平行化也是一個重要的議題,在Prolog程式中有兩個地方適合平行化處理。第一個,稱為 OR-平行化,就是要一致化知識庫裡許多不同的文句與意涵。每一種一致化都成是搜尋樹裡的一個分支,並且是可能的答案,且這些分支都能夠平行地處理。第二個是 AND-平行化,就是要平行地處理某個意涵裡的每一個交集。

Page 27: 第十章 邏輯推理系統

高等控制機制 再回到我們的戶口普查知識庫,如果有這樣的查詢 “總統配偶的收入是多少 ?” 這在 Prolog可以描述如下: 執行此查詢可能需要許多時間,因為它必須列舉所有的 person/income,然後取得每一個person的配偶,最後再檢查誰的工作室總統。

)Pr,(),(),( esidentpOccupationpsMarriedisIncome

Page 28: 第十章 邏輯推理系統

10.4 定理證明器 定理證明器 (或稱為自動推理器 ) 跟邏輯程式語言有兩個地方不同。首先,大部分邏輯程式語言只處理 Horn子句,而定理證明器可以接受完整的一階邏輯。第二, Prolog程式會把邏輯與控制綁在一起。程式設計師寫跟會影響程式的執行結果。在定理證明器裡,使用者可以寫任意一種表示方法,甚至寫成,其結果都會一樣。

Page 29: 第十章 邏輯推理系統

定理證明器的設計 在本節裡,我們要討論 OTTER (Organized Technique for Theorem-proving and Effective Research) (McCune, 1992) 這個定理證明器,並且著重在其控制策略上。在準備一個問題給 OTTER時,使用者必須要將知識分為四個部分:

Page 30: 第十章 邏輯推理系統

一組稱為證實集合 (sos) 的子句,定義關於問題的重要事實。每一個解決步驟都會針對某個定理解決證實集合裡的一個成員,所以搜尋是著重於證實集合 t。 一組在證實集合之外可用的定理。這些定理提供問題領域的背景知識。而背景知識跟問題本身的界限就由使用者決定。 一組方程式稱為 rewrites 或 demodulators。雖然demodulator是方程式,它們都是由左至右來執行。因此,又定義了一個讓所有項目簡化的格式。例如, x + 0 = x 代表所有 x+0 都可以用 x 來取代。

一組定義控制策略的參數與子句。使用者可以定義一個經驗法則函數來控制搜尋,以及一個過濾函數來消除不使用的目標。

Page 31: 第十章 邏輯推理系統

單元的權重很輕,所以搜尋個過程可以視為單元優先策略。在每一個步驟裡, OTTER會將最輕的子句從 set of support移到可用的清單,並同時加上一些解決子句所獲得的結果。當OTTER碰到反例時或是在 set of support沒有新的子句時就會停止。此演算法如圖 10.5 。

Page 32: 第十章 邏輯推理系統
Page 33: 第十章 邏輯推理系統

Prolog的推廣 要建立一個定理證明器的另一個方法就是用Prolog編譯器,然後找一個完整的推理器來 做 完 全 的 一 階 邏 輯 。 Prolog Technology Theorem Prover 或稱為PTTP (Stickel, 1988) 就是採用這種方法。 PTTP 包括了五個對於 Prolog重要的改變:

Page 34: 第十章 邏輯推理系統
Page 35: 第十章 邏輯推理系統

把定理證明器當成助手 到目前為止,我們把推理系統當成一個獨立的代理人,必須要靠自己做決定與行動。我們也可以把定理證明器當成助手,提供建議給數學家。在此模式下,數學加成為監督者,決定下一步要做的動作,然後要定理證明器完成。這樣可以消除代理人自己決定的缺失,因為監督者可以取消一個耗時太久的查詢。

Page 36: 第十章 邏輯推理系統

定理證明器的實際使用 定理證明器已經產生一些新的數學證明。 SAM (Semi-Automated Mathematics) 這個程式是第一個可以證明 lattice理論裡的一個 lemma的證明器 (Guard et al., 1969)。而 AURA程式也可以回答數學領域裡許多開放的問題 (Wos與 Winker, 1983)。而 Boyer-Moore定理證明器 (Boyer and Moore, 1979) 已經被使用並加強數年了,且被Natarajan Shankar 用來產生第一個 Godel’s Incompleteness Theorem 的正規證明 (Shankar, 1986) 。

Page 37: 第十章 邏輯推理系統

10.5  向前連鎖生產系統 Prolog與大部分其它的邏輯程式語言是反向鏈結的。對於一個查詢,它們就會尋找一個合適的證明來建立可以符合此查詢的文句。另一種不使用查詢的方法是向前連鎖。推論規則直接應用到知識庫以產生新的宣告,此程序會一直進行直到某些條件成立為止。

Page 38: 第十章 邏輯推理系統

一般的生產系統有三個特點: 系統維護一個稱為工作記憶的知識庫。這包含一組沒有變數的

positive literals。 系統也維護獨立的規則記憶。這包含一組推論規則,每一個都是的格式,而 pi是 literals, acti是當 pi滿足時要執行的動作。允許的動作包括從工作記憶新增與刪除元素,以及其他如列印變數值。 在每一個循環裡,系統會計算規則的子集合,其子式子的左手邊由工作記憶目前的內容滿足,這稱為匹配階段 (match phase)。 系統接著決定要執行的規則。這稱為衝突解決階段 (conflict

resolution phase)。 在每一個循環的最後一步就是要從已選擇的規則裡執行動作。這稱為動作階段。

Page 39: 第十章 邏輯推理系統

匹配階段 Unification會有比對一對 literals的問題,而每一個 literal都可能包含變數。我們可以直接使用 unification來實作向前連鎖生產系統,但是這會非常沒有效率。如果在 working memory裡有 w 個 elements,以及 r 的規則 (其中每個規則的 left-hand side都有 n 個elements),且解決一個問題需要 c 的循環,則一個基本的比對演算法必須執行 wrnc次unification 。

Page 40: 第十章 邏輯推理系統

rete演算法首先把 rule memory編譯成圖 10.6 的網路。在此圖裡,圓形的節點代表working memory的 fetches (沒有unification)。在節點 A, working memory元素 A(1)與 A(2)已經被 fetched並儲存。

Page 41: 第十章 邏輯推理系統
Page 42: 第十章 邏輯推理系統

衝突解決階段 有些生產系統會執行所有規則的動作然後完成匹配階段。其它的生產系統會將這些規則當成建議,然後在衝突解決階段決定要接受的建議。這個 phase 可以當成控制策略。一些使用的策略如下:No duplication 。不重複執行相同的規則與相同的參數。Recency 。優先使用會參考到最近建立好 working memory elements的規則。

Specificity 。優先使用較特別的規則。 Operation priority 。優先使用較高優先的動作,例如一些 ranking指定的。

Page 43: 第十章 邏輯推理系統

生產系統的實際使用 向前連鎖生產系統代表許多 AI的早期研究。尤其是 XCON系統 (原本叫 R1 (McDermott, 1982)),是生產系統 (規則為主 ) 的架構來建立的。 XCON包含數千調規則來設計電腦組件設定給Digital Equipment Corporation的客戶使用。

Page 44: 第十章 邏輯推理系統

10.6  框架系統與語意網路 在 1986年,在 Peano發展七年後目前成為標準的一階邏輯, Charles Peirce提出一個圖形的方法稱為 existential graphs,並稱為未來的邏輯。之後就有一段時間在邏輯與語意網路的爭論。目前廣為大家所接受的是每一個語意網路或frame system都可以當成邏輯的命題,且大部分人都接受它也可以成為一階邏輯。

Page 45: 第十章 邏輯推理系統

語意網路的語法和語意語意網路著重於物件的分類與其間的關係。如下:也就是說貓是哺乳類動物。我們也可以很容易寫,但是當語意網路首先在 AI裡使用 (大約在 1961年 ) 時,這還不能為人所接受。大部分人認為使用邏輯必須要寫成這樣寫起來比較麻煩。加入讓人覺得此句不允許例外,而讓人覺得有一些轉圜的空間。

MammalsCats Subset

)()( xMammalxxCats

Page 46: 第十章 邏輯推理系統

我們現在體認到語意比符號重要。圖 10.7 是一個典型的 frame-based網路,以及把網路轉成 first-order logic。此網路可以用來回答 “一個 Opus有幾隻腳 ?”,然後透過 與

連結,從 Opus到 Penguins到Birds,然後知道鳥類有兩隻腳。

Member

Subset

Page 47: 第十章 邏輯推理系統
Page 48: 第十章 邏輯推理系統

五種標準的連結歸納於圖 10.8 。請注意一個定理證明器或是邏輯程式語言可以使用連結的邏輯的轉譯,然後靠一般的邏輯推論來作推論。一個語意網路系統使用特殊目的的演算法來跟隨連結,因此可以比一般的邏輯推論要快。

Page 49: 第十章 邏輯推理系統
Page 50: 第十章 邏輯推理系統

包括例外的繼承 由圖的連結當成包括例外的繼承是很直覺的想法,但是把語意定義成 first-order logic也是可行的。邏輯轉譯的第一步就是要 reify關聯,一個關聯 R 城一個物件而不是 predicate。這表示 Rel(R,A,B)只是一般的單元命題,而不是一個複雜命題的縮寫。

Page 51: 第十章 邏輯推理系統

多重繼承 有些語意網路允許多重繼承─也就是說,一個物件可以屬於多個 category,然後可以沿著數個不同的路徑繼承不同的屬性。例如,有些人可能都屬於 Billionaire 與 PoloPlayer 這兩種category,因此我們可以推論出他們是有錢人且都會騎馬。

然而,兩個繼承路徑也可能產生衝突的答案。如圖 10.9, Opus是企鵝,因此也只會嘎嘎叫。

Page 52: 第十章 邏輯推理系統
Page 53: 第十章 邏輯推理系統

繼承與改變 一個知識庫若不能擴充就對代理人沒有用。在一階邏輯的系統裡,我們使用 TELL加入新的命題到知識庫,於是我們就可以使用monotonicity。

Page 54: 第十章 邏輯推理系統

語意網路的實作 當我們決定好網路的意義後,我們就可以開始網路的實作。當然我們也可以用定理證明器或邏輯語言來實作,且在某些情況下這是最好的選擇。但是對於簡單的語意網路,我們可以用較為直覺的實作。在網路裡的一個節點可以用一個資料結構來表示,其中有代表基本分類連結的屬性:它所屬的 category;它所擁有的elements;以及所包含的子集合與父集合。

Page 55: 第十章 邏輯推理系統

語意網路的表現 有 些 語 意 網 路擴充符號使 其允許 所 有 的 一階邏輯 。 Peirce’s original existential graphs 、 partitioned semantic networks (Hendrix, 1975) 、與 SNEPS(Shapiro, 1970)都是用這個方法。另一個較常用的方法就是保留表現性的限制,使用 procedural attachment來彌補這個缺失。 Procedural attachment這個技巧就是一個用程式語言寫的函數可以存成某個關聯的值,然後用來回答在關聯上的 ASK (或者是 TELL)。

Page 56: 第十章 邏輯推理系統

10.7  描述邏輯 一階邏輯的語法是設計來說明物件的。而描述邏輯著重

於 categories與其定義。它們提供複雜的機制用現有的關聯定義 categories,所以會比傳統的語意網路語言更能表現其意義。主要的推論為包容subsumption─檢查某個 category是否為另一個category的子集合─與分類 classification─檢查一個物件是否屬於某一個 category 。

Page 57: 第十章 邏輯推理系統

CLASSIC語言 (Borgida et al., 1989) 就是一種描述邏輯。而 CLASSIC描述的語法在圖 10.1110。 10 注意,這一個語言並沒有允許我們簡單的陳述一個概念或一個種類是其他的子集合。這是一種謹慎的策略:種類之間的包容關係必須導自這些種類描述的某些觀點。如果不是,某些事情將會在描述中失去。

Page 58: 第十章 邏輯推理系統
Page 59: 第十章 邏輯推理系統

描述邏輯的實際應用 因為它們包括清楚的語意以及簡單的邏輯運算,描述邏輯已經在 AI研究的理論與實務上越來越受歡迎。

Page 60: 第十章 邏輯推理系統

10.8  撤回管理、假設與解釋 我們已經討論許多 TELL與 ASK,但是很少討論到 RETRACT。大部分邏輯推理系統不管其實作都需要有 RETRACT。要 retract一個命題主要有三個理由,其一為一個事實可能不再重要,且我們想要忘記事實以騰出更多空間作其他使用。其二可能是系統正在追蹤真實世界的狀態 (不去擔心過去的狀態 ) 且真實世界狀態是在改變的。

Page 61: 第十章 邏輯推理系統

以前要實作 truth maintenance系統的演算法有點複雜,我們不討論。因為 truth maintenance問題的計算難度跟命題推論一樣難─也是 NP-hard。因此,不要期待 truth maintenance是萬靈藥 ( 除了簡單的小問題 )。但是如果小心地使用 (例如,知道選擇什麼是一個假設,什麼是一個不能 retract的事實 ),則 TMS可成為一個邏輯系統的重要部分。