在人工智慧的領域中,推理引擎是一種智慧系統的軟體元件,藉由對知識庫應用邏輯規則來推導出新資訊。最早的推理引擎是專家系統的一部分。典型的專家系統包含兩個主要成分:知識庫和推理引擎。知識庫儲存了有關世界的事實,而推理引擎則將邏輯規則應用於知識庫,推導出新的知識。隨著知識庫中每一條新事實的添加,這一過程會不斷迭代。推理引擎主要在兩種模式下運作,即向前鏈結和向後鏈結。向前鏈結從已知的事實開始,聲明新的事實;而向後鏈結則從目標出發,向回推導出滿足該目標所需的事實。
推理的概念已擴展到包括訓練好的神經網絡生成預測或決策的過程。
在這個背景下,「推理引擎」可以指執行這些操作的系統特定部分,甚至是硬體。這類推理在各種應用中發揮著關鍵作用,包括影像辨識、自然語言處理、以及自動駕駛等。這些應用中的推理階段特徵是高容量的數據輸入和即時處理的需求。
推理引擎使用的邏輯通常以IF-THEN規則的形式表示。這類規則的一般格式為 IF
在這樣的情況下,推理引擎的發展給予了開發者一種高效代表邏輯的方法。
例如,對所有自然數的普遍量化的聲明是合法且在數學證明中所需的,但當被包含在運算的定理證明器中時,可能導致計算機進入無限循環。專家系統的標準邏輯於是轉為焦點放在 IF-THEN 這種陳述上,這是一個能夠有效使用計算資源的強大一般機制。同時,一些心理學研究也表明人類在儲存複雜知識時偏好使用 IF-THEN 的表示形式。
一個經典的模態例子為「如果你是人類,那麼你就是凡人」,可以用偽代碼表示為:Rule1: Human(x) => Mortal(x)
。在推理引擎中的一個簡單應用為,在向前鏈結過程中,推理引擎會尋找知識庫中符合 Human(x) 的事實,然後為每一條找到的事實添加新資訊 Mortal(x) 到知識庫。若找到一個名為蘇格拉底的對象,即可推導出蘇格拉底是凡人。
早期的推理引擎主要集中於向前鏈結,通常使用Lisp編程語言實現。Lisp由於其強大的符號操作能力而成為早期人工智慧研究的常用平台。由於其解釋性語言的特性,適合構建複雜的調試環境。然而,這也意味著Lisp程序的速度較慢且穩定性不如當時的編譯語言,如C。早期的一種常見做法是將一個專家系統的應用推理引擎重新包裝成為可重用的工具,以供其他研究者開發其他專家系統。例如,MYCIN是早期的醫療診斷專家系統,而EMYCIN是從MYCIN中延伸出的推理引擎,並可供其他研究者使用。
隨著專家系統逐漸從研究原型轉向部署系統,對速度和穩定性的關注日益加強。
第一個流行的向前鏈結引擎是OPS5,利用Rete算法來優化規則觸發的效率。此外,另一個重要的技術是Prolog邏輯編程語言,其主要集中在向後鏈結,也提供了各種商業版本及效率和穩定性的優化。隨著專家系統在商業界引發大量關注,許多受知名AI研究者指導的公司推出了產品化版本的推理引擎。
目前有一些開源推理引擎實施,如ClipsRules和RefPerSys(受到CAIA及雅克·皮特拉的啟發)。Frama-C靜態源代碼分析器也使用了一些推理引擎技術。
隨著科技的進步,推理引擎也不斷發展,從早期的邏輯規則到當前的神經網絡推理技術,這一演變無疑將影響未來智慧系統的發展方向。在這個快速變化的領域中,我們是否能理解推理引擎背後的真正潛力及其對人類生活的影響呢?