本節書摘來自華章計算機《人工智能:計算agent基礎》一書中的第1章,第1.4節,作者:(加)david l.poole,alan k.mackworth 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
一般情況下,要解決的問題或要完成的任務,包括解的構成,是通過非形式化的方式給出的,例如“他們到達時,請立即遞交包裹”或“請修理家中存在故障的電力系統”。
計算機解決問題的一般架構在圖1-4中給出。為了解決問題,系統設計者必須:
具體化任務,并制定解決方案。
用特定的語言表達問題,以便計算機進行推理。11
用計算機計算出相應結果進行輸出,可以給使用者呈現一個答案或是在環境中需要執行的一系列行為。
解釋作為問題的解決方案的輸出結果。

知識是可以用來解決本領域問題的領域資訊。解決多種問題需要多種知識,而且知識必須能夠在計算機中進行表達。為了解決問題,設計應用程式時,我們需要為如何表達知識來進行定義。表示方案是agent中使用的知識形式,而一部分知識的表示則是知識的内部表達。表示方案指定了知識的形式。知識庫則是agent中存儲的所有知識的表達。
一個好的表示方案是很多競争性目标間的折中。表示應該:
足夠豐富,能夠表達解決問題所需的所有知識。
盡可能地接近問題,并且簡潔、自然、可維護。我們應該很容易地看出該表達與要表達的領域之間的關系,以便很容易地确定該表達是否正确。問題的微小變化,也應導緻問題表達的微小改變。
能夠經得起有效計算的檢驗,通常指能夠有效地描述問題特征,有利于獲得計算增益,并且能夠在準确度和計算時間之間進行權衡。
能夠從人類、資料或先前經驗中獲得。
已經設計出了不同的表示方案,很多方案開始時有某些目标,後來擴充到包含其他目标。例如,有些表示方案設計出來用于學習,而後被擴充用來解決更多的問題,并具有了推理能力。有些表示方案設計出來用于表達意識,而後又加上了推理及學習。有些表示方案設計出來用于推理,而後逐漸變得更為自然、易懂。
當給了一個問題或任務時,以下一些問題必須要考慮到。
問題的解決方案是什麼?怎麼樣的解決方案才算好的?
問題如何進行表達?解決問題時需要世界中哪些特性?需要哪些具體的世界知識?agent如何從專家那裡或以前的經驗中獲得知識?這些知識如何被調試、維護和改進?
agent如何計算輸出結果,以此作為問題的解決方案?能不能把最壞情況下或平均情況下的臨界時間減到最小?了解答案是怎樣推導出來的對于一個人來說很重要嗎?
這些問題會在下一部分讨論,本書的表示方案部分也會涉及這些問題。
1.4.1 定義解
給定問題的一個非形式化描述,在考慮使用計算機之前,知識庫設計者應該确定問題解的構成。不僅是人工智能領域,任何涉及軟體設計的地方都會存在這個問題。很多軟體工程都涉及問題描述的提煉。
通常,并不是所有問題都能很好地說明,不僅是有些地方沒有進行說明,而且沒有說明的地方也不能被随意填充。舉例來說,當你讓交易agent搜尋出那些有健康隐患的度假村時,你并不希望它傳回所有的度假村資訊,盡管符合你要求的度假村也包含在裡面。然而,如果agent根本就沒有度假村的完全知識,那麼傳回所有的資訊可能是保證符合要求的唯一方法。同樣,當要求将垃圾傳送到垃圾桶時,傳送機器人卻把所有的物品都傳送到了垃圾桶裡,盡管保證了所有垃圾都能被帶走,但這樣一個傳送機器人你不會想要。人工智能的很多成果來自于常識推理;我們希望計算機能夠對未闡明的假設做出常識性的推論。
給定一個定義明确的問題,下一步就是判斷如果答案不正确或不完全,對問題的解決有沒有影響。例如,如果說明書要求所有的執行個體,那麼缺少幾個執行個體可以嗎?如果增加另外的執行個體可以嗎?通常人們想要的是符合某些标準的最優解決方案,而不僅僅是任意方案。一般分為以下4類解決方案:
最優解。問題的最優解是指在所有的可能解中最符合求解品質度量的最好的解。這個度13量用序數來描述。但是在一些情況下,例如綜合多種标準或不确定推理時,我們需要一種要考慮相對大小的基數度量。序數度量的一個例子是讓機器人帶出盡可能多的垃圾,越多越好。作為基數度量的例子,你可以讓傳送機器人在最小化傳送距離的同時,将盡可能多的垃圾帶到垃圾桶,明确規定它們之間要進行權衡。為了節省時間,丢掉一些垃圾可能會更好。一般基數度量的期望值,即效用函數主要應用于決策論中。
可滿足解。agent經常并不需要最優解,隻需一些滿足條件的解就可以。可滿足解是指那些滿足充分條件的解。例如,人們可以指令機器人帶出所有的垃圾,也可以指令它隻帶出三件垃圾。
近似最優解。好的基數度量的一個優點是它允許使用近似值。近似最優解是指其品質度量接近理論上存在的最優解。一般agent不需要問題的最優解,隻要那些解接近最優就可以。例如,機器人為了送出垃圾可能并不需要達到最優的傳輸距離,可能隻需要在最優距離10%範圍以内就可以。
對于一些問題,獲得近似最優解比獲得最優解更容易,但對于另外一些問題,獲得近似最優解和獲得最優解一樣難。一些近似算法能夠得到在最優解的一定範圍内的解,而有的則根本找不到。
可能解。可能解是指一個解,盡管它可能不是問題的真正解,但也是一個有希望的解。這是一種用精确的方式來對可滿足解進行近似的方法。例如,在傳送機器人可能會丢垃圾或者無法撿起來的狀況下,可以設定成機器人有80%的可能性撿起三件垃圾。我們一般期望去區分錯肯定誤差率(計算機給出的不正确答案的比率)和錯否定誤差率(計算機沒有給出的正确答案的比率)。有些應用程式可能會容忍這些誤差中的一個遠超過另一個。
這裡的分類并不是互相排斥的。有一種稱為可能近似正确(pac)的學習形式,認為可能學習到一種近似正确的概念。
1.4.2 表示
如果你對解的本質有要求,你就需要表示問題,以便于計算機來解決它。
計算機和人類思維都屬于實體符号系統。符号是一種可以被操作的有意義的圖案。例如,字、句、手勢、文章裡的标記與二進制序列都是符号。符号系統對符号進行創造、複制、修改和撤銷。本質上來說,符号是符号系統中被操作的基本單元。
這裡用到實體這個術語,是因為實體符号系統中的符号是部分現實世界中的實體對象,盡管它們可能存在于計算機和大腦内部。它們需要實體地影響行為或運動控制。
很多人工智能技術依賴于newell和simon[1976]提出的實體符号系統假設:
實體符号系統具有必要且充分的機制以進行一般的智能活動。
這是一個強有力的假設,它的意思是任意agent必定是一個實體符号系統,而且實體符号系統包括智能行為所需的一切,沒有不可思議的量子論現象。世界中的實體符号系統也需要一個用來進行感覺和行為的主體。實體符号系統假設是經驗性的假設,像其他科學假設一樣,它也需要證據來論證,或者有其他可替代的假設存在。實際上,它也可能是錯誤的。
agent可以看做通過操作符号來産生動作。其中許多符号用來表示世界中的事物;一些符号則用來表示有用的概念,這些概念可能具有擴充含義,也可能不具有擴充含義;另外還有一些符号表示agent的内部狀态。
agent可以用實體符号系統對世界進行模組化。世界模型是世界中真實存在的詳情和世界的動态行為的表達。世界并沒有什麼特定的标準。所有的模型都是抽象出來的,它們表達的僅僅是世界的一部分,遺留了很多其他細節。agent可以有一個非常簡單的世界模型,也可以有一個非常詳細的世界模型。抽象的層次是指按抽象程度排列的一個偏序。低層抽象比高層抽象擁有更多的細節。agent可以擁有多重的,甚至是對立的世界模型。模型,不是看它是否正确,而是看它是否有用。
【例1-2】 傳送機器人可以對環境進行高層抽象模組化,包括房間、走廊、門和障礙物,忽略距離、機器人的大小、需要的操縱角度、車輪的移動、包裹的重量、15障礙物的詳細情況、加拿大的政治形勢以及其他事物。機器人也可以通過将一些細節加入模型中對環境進行低層次抽象模組化。這些細節中的一些與機器人完成任務無關,而一些則是機器人成功的關鍵。例如,在某些情況下,為了使機器人不在一些特定的拐角處被卡住,機器人的大小和操縱角度是關鍵。而在其他情況下,如果機器人接近走廊的中心位置,那麼就不需要對它們的寬度或操縱角度進行模組化。
選擇一個合适的抽象層次比較難,因為
對于人類來說,高層次的描述更容易說明和了解。
低層次的描述更準确,更有預測性。通常高層次抽象忽略的細節可能正是解決問題的關鍵之處。
層次越低,越難進行推理。因為低層次模型的解涉及更多的步驟和更多可供選擇的行動路線。
你可能根本不知道低層次模組化所需要的資訊。例如,傳送機器人可能不知道自己會遇到什麼樣的障礙物或地闆有多滑,并在遇到這些情況時應該做些什麼。
對環境進行多層次抽象模組化可能會更好些。這個問題會在2.3節進行讨論。
我們可以對生物系統和計算機進行多層次抽象描述。逐層降低的層次是神經層次、生物化學層次(什麼樣的化學藥品和電勢可以傳送)、化學層次(會進行什麼樣的化學反應)、實體層次(原子力和量子論現象)。在神經層次之上需要什麼層次來計算智能仍是一個開放性難題。注意,這些層次描述在科學本來的分層結構中得到共鳴,科學家被劃分為實體學家、化學家、生物學家、心理學家、人類學家等。盡管我們不知道哪個層次的描述更重要,但我們猜想建立一個agent不必模仿人類的每一層,可以在現代計算機的基礎上進行高層次模組化。這個猜想是人工智能研究的一部分。
對生物實體和計算性實體來說,以下兩個層次看起來是共有的:
知識層是将agent所知道的、所相信的以及它的目标抽象出來。知識層考慮的是agent知道什麼,而不是它如何進行推理。例如,傳送agent的行為可以用它是否知道包裹有沒有到達和是否知道特定的人在哪裡來描述。人類和自動agent都可以在知識層次上進行描述。在這個層次上,不需要說明如何計算解和agent可能會用到哪些政策。16
符号層是對agent的推理進行描述。為了實作知識層,agent需要通過操作符号來産生答案。我們設計了很多認知科學方面的實驗來判定推理時會産生什麼樣的符号操作。注意,知識層說明的是對于外部世界,agent相信什麼,它的目标是什麼;而符号層是對agent内部關于外部世界推理的描述。
1.4.3 推理與行為
符号的操作産生行為被稱為推理。
人工智能表達不同于用傳統語言編寫的計算機程式的一個重要方面是,人工智能表達的主要是需要計算什麼,而不是怎樣進行計算。我們可能明确指出agent應該找出病人最可能得的疾病,或指出機器人應該拿杯咖啡,而不是給出做這些事情的具體指令。很多人工智能推理涉及通過可能空間的搜尋來決定怎樣完成任務。
在決定agent要做什麼時,有三個方面的計算必須差別開來:1)要設計agent時的計算;2)在觀察世界、需要行動之前,agent能做的計算;3)當agent執行某些動作時所做的計算。
設計時刻推理是在設計agent時進行的推理。它由agent的設計者而不是agent本身來完成。
離線計算是在動作之前由agent完成的計算,它包括彙編和學習。agent離線擷取背景知識和資料,并将其彙編成可用的形式,稱之為知識庫。背景知識可以在設計時或離線狀态時給出。
線上計算是在觀察環境及在環境中進行某些行為時由agent完成的計算。線上狀态擷取的資訊稱為觀察。agent必須使用知識庫和觀察來決定要做什麼。
差別設計者思維中的知識和agent思維中的知識是重要的。考慮以下極端情況:
一種極端情況是,高度專業化的agent在為其設計的環境中能夠運作良好,但離開這個合适位置卻變得無能為力。設計者可能為構造agent做了大量工作,而agent本身不用做很多就可以運作良好。舉個自動調溫器的例子,設計一個自動調溫器是困難的,因為它必須在正确的溫度下準确打開或關閉,但是自動調溫器本身并不需要做很多計算。再比如,17繪圖機器人每天在汽車廠繪制相同零件的例子。為了完美地完成繪制任務,可能需要很多設計時間或離線計算,但繪圖機器人幾乎不需要線上計算就能完成繪圖任務;它能感覺到有一個零件在特定的位置,然後進行其預先定義好的動作。這些專業agent不适用于不同的環境或變化的目标。如果一個不同的零件放在特定的位置,繪圖機器人不會注意到,即使注意到了也不知道要做些什麼,必須通過重新設計或重新程式設計來繪制不同的零件,或者将其改變成為磨光機或跟蹤洗滌機。
另一種極端情況是非常柔性的agent,可以在任意環境下生存,可以在運作時接受新任務。簡單的生物agent,如昆蟲,能适應複雜變化的環境,但是它們不能執行任意任務。設計一個可以适應複雜環境和變化目标的agent是一個主要挑戰。agent能夠比設計者知道更多的環境細節。就算是在生物學方面也沒有制造出這樣的agent。人類可能是唯一現存的執行個體,但即使是人類也需要時間來适應新環境。
雖然柔性agent是我們的終極夢想,但研究者們也不得不通過更多的平凡目标來達到這個目标。研究者們已經制造了很多适應于特定環境下的特定agent,而不是制造那種能夠适應任何環境完成任何任務的通用型agent。設計者能夠對特定環境結構進行開發,而agent不必對其他的可能性進行推理。
構造agent的兩大一般政策如下:
第一個政策是簡化環境并為這些環境建立複雜的推理系統。例如,工廠機器人可以在工廠這個工程環境裡完成各種複雜的任務,但它們在自然環境中可能是沒用的。很多問題的複雜性可以通過簡化環境來降低。建立實用性的系統也是非常重要的,因為許多環境可以為agent設計得更簡單些。
第二個政策是在自然環境中建立簡單的agent。這種政策是受到昆蟲的啟發,昆蟲雖然隻有有限的推理能力卻能在複雜環境中生存。随着它們的任務越來越複雜,agent可以被設計為擁有更多的推理能力。
簡化環境的一個優點是我們能用它證明agent的性質或在特定狀态對agent進行優化。證明agent的性質或優化主要需要一個agent及其環境的模型。agent可能會做一點或很多推理,但agent的觀察者或設計者能夠對agent及其環境做出推理。例如,設計者能夠證明agent是否能夠達到目标,是否能夠避免陷入不利的狀況中(安全目标),18會不會在某個地方卡住(活躍性),會不會最終開始它應該做的事情(公平)。當然,證明實際上等價于其模型。
為複雜環境構造agent的優點是人類的生活環境和我們想要agent活動的環境是多種多樣的。
幸運的是,這些方面的研究都一直在進行。在第一種情況下,研究者們從簡單的環境入手,逐漸使環境變得更加複雜。在第二種情況下,研究者們增加agent行為的複雜性。