2 知的エージェントIntelligent Agents

2.1 エージェントと環境Agents and Environments

Figure 2.1



エージェントとは、センサーsensorsによってそれが置かれた環境を知覚し、作動装置actuatorsによってその環境に対して働きかけるもの。
知覚シーケンスpercept sequenceとは、あるエージェントがその時点までに受けとった個々の知覚perceptを並べたものであり、一般的にはエージェントはこの知覚シーケンスを基に判断をして行動する。
エージェントの行動は、与えられた知覚シーケンスに対して何らかの行動が対応するという関数と見ることができる(エージェント関数agent function)。
だが内部的に見ると、その対応付けは具体的な機構によって実現されている(エージェント・プログラムagent program)。

ごく簡単な例:a vacuum-cleaner world

Figure 2.2


この世界は、AとBの2つのマスと、それぞれにゴミがあるかどうかしかない。
エージェント(掃除機)は、自分が今どのマスにいるか、そこにゴミがあるかどうかを知覚できる。
エージェントの可能な行動はRight、Left、Suck(、または何もしない)。
エージェント関数の例(一部)は次のようになる。

Figure 2.3


与えられた知覚シーケンス(左列)と、それに対応する行動(右列)の表となっている。
この表の右列をどのように埋めたら合理的ということになるのだろうか。

2.2 よい振る舞い:合理性という概念Good Behavior: The Concept of Rationality

2.2.0 (冒頭)

与えられた知覚シーケンスに対してどのように行動するのが合理的なのかの判断は、成績測定尺度performance measureによる。
一般的に成績測定尺度は、設計者の思う理想的なエージェントの状態や行動ではなく、どのような環境の状態が望ましいのかという点に基づいて設計するのが良い。

エージェントの状態を基準にした場合、酸っぱい葡萄の寓話のように、自分に都合の良い値に調整されてしまう危険性がある。
またエージェントの行動を基準にした場合、たとえば「ゴミを掃除した回数」とすると、ゴミを掃除してまた汚して(上記の例ではこの行動は存在しないが)また掃除して…とすることがエージェントにとって合理的とされてしまう。
よって、「床が綺麗であること」のように環境の状態を基準にしたほうがよい。
これでもまだ考えるべき事柄はいろいろあるが。

2.2.1 合理性Rationality

合理性は次の4つに依存する:
  1. 成績測定尺度
  2. エージェントの、環境についての事前知識
  3. エージェントが取りうる行動
  4. その時点までのエージェントの知覚シーケンス
よって合理的なエージェントとは、全ての可能な知覚シーケンスに対して、その知覚シーケンスから読み取れる内容とあらかじめエージェント自身が持っている知識を基に、成績測定尺度により期待される成績が最大になるような行動をとるものということになる。
合理的な振る舞いというものは常に一意に定まるというものではなく、エージェントの能力や成績測定尺度の設計等に依存する。
Figure 2.3は、前述の設定で、成績測定尺度が「1,000タイムステップの間での綺麗な床のタイムステップ別の総数」である場合は合理的だといえる。

2.2.2 全知、学習、自律Omniscience, learning, and autonomy

合理的であるということは、行動の結果がどうなるかを確実に予想できる(全知)ということではない。全知でなくても合理的でありうる。
道路を横断している最中にたまたま上空を通過していた飛行機から落ちてきたドアにぶつかったとしても、ドアが降ってきていることを確認しなかったから合理的ではなかったとは言えない。
とはいえ、左右の安全を確認していなかったとしたらそれは合理的とは言えない。適切な範囲での情報収集information gatheringをする必要がある。

合理的エージェントは、情報を収集するだけでなく、知覚から学習しなければならない。
環境についての知識を更新しないエージェントは、想定外の状況の変化に対応することが難しい。
このようなエージェントは、「自律性を欠く」と言われる。
合理的エージェントは、自律性を持っていなければならない。

2.3 環境の特質The Nature of Environments

2.3.0 (冒頭)

課題環境task environmentとは、本質的には合理的エージェントを解とする問題のこと。

2.3.1 課題環境の規定Specifying the task environment

エージェントを設計するには、まず課題環境がどうなっているのかをはっきりさせなければならない。
課題環境は、成績測定尺度、環境、作動装置、センサーの4つ(Performance Measure, Environment, Actuators, Sensorsの頭文字をとってPEASと呼ぶ)をできるだけ明確にしなければならない。

全自動タクシーというようなものを課題として設定するならば、PEASは以下のような感じになるだろう。

Figure 2.4


その他のPEASの例。

Figure 2.5



2.3.2 課題環境の特性Properties of task environments

課題環境は非常に多くのパターンが考えられるが、以下のような対立軸に当てはめてみることである程度その特性を分類することができる。

完全に観測可能fully observable 対 部分的に観測可能partially observable
センサーによって常に環境のすべてを(成績測定尺度に関係しない情報は不要だが)知ることができる場合は、完全に観測可能。
この場合は、エージェントは内部的に過去の情報を保持しておく必要はない。

これに対して、一部しか知ることができない場合は、部分的に観測可能。

さらに、センサーが全く使えない場合は、観測不能unobservable
こういった場合でも、合理的に行動する方法は存在する(→4章)。

単一エージェントsingle agent 対 複数エージェントmultiagent
クロスワード・パズルのような一人で行うゲームと、チェスのような複数人で行うゲームを考えてみれば、この違いは容易に理解できる。
たとえば全自動タクシーを考えたときに他の車をただの動く物体と考えるか他のエージェントと考えるかは少々微妙な問題だが、重要なのは自分の成績測定尺度が相手の成績測定尺度に影響を与えていると考えられるかどうかという点。

その影響の与え方にもいくつかのパターンがある。
チェスのように利害が対立する場合は競合的competitiveな複数エージェント環境であり、全自動タクシーのように交通ルールを守ることが自分にも相手にもプラスになるような場合は協力的cooperativeな複数エージェント環境。
ただし全自動タクシーの例では、駐車場スペースの取り合いみたいな状況を考えると競合的と見ることもできたりして、そう単純ではない。
複数エージェント環境のエージェント設計は、エージェント間のやり取りが発生したりして、単一エージェント環境のエージェント設計とはしばしば大きくことなるものになる。
競合的な複数エージェント環境では、ランダムに行動するのが合理的である場合もある。

決定論的deterministic 対 確率論的stochastic
時間の経過やエージェントの行動によってその環境がどう変化するかが確実に定まる場合は決定論的であり、そうでない場合は確率論的。
決定論的かつ完全に観測可能な場合は原則的に不確定性は存在しないことになるが(複数エージェント環境での他のエージェントの行動はこちらから見ると不確定だったりするが、それは除く)、完全に観測可能でない場合は、実際は決定論的であっても確率論的であるように見えうる。
多くの環境では全体を全て観測することは非現実的なので、確率論的な環境として扱う必要がある。
環境が完全に観測可能でない、または決定論的でない場合、不確定的uncetainであるという。
確率論的という場合は通常、複数の帰結がそれぞれの確率と結び付けて考えられるが、非決定論的nondeterministicという場合は特に確率を意識せず、どういう帰結があり得るのかということのみに焦点が当たる。

個別的episodic 対 順次的sequential
個々の出来事episodeが、それぞれ独立しておりその他の出来事に影響を与えない場合を個別的、そうでない場合を順次的という。

静的static 対 動的dynamic
エージェントが行動を起こしていないのに(単に時間が経ってしまっただけで)環境が変化してしまう場合、その環境はそのエージェントにとって動的、そうでない場合は静的であるという。
また、環境自体は変化しなくても、時間の経過によってエージェントの成績測定尺度に影響が出る場合は、半動的semidynamicであるという。

離散的discrete 対 連続的continuous
その環境で時間や知覚や行動がどう扱われるのか。
チェスの駒の動かし方や状態は離散的だが、タクシーのスピードや位置は連続的。

既知known 対 未知unknown
エージェント(またはその設計者)が環境内の物理法則あるいはルールについて予め知っているかどうか(これは厳密には環境自体の特性ではないが)。
観測可能性と紛らわしいが、別の概念。
たとえば、ソリティアのルールは知っている(既知)がめくられていないカードの内容は知らない(部分的に観測可能)とか、テレビゲームで画面上に全ての情報が表示されている(完全に観測可能)がどのボタンがどういう効果を生むのか知らない(未知)ということがあり得る。


いくつかの課題環境についての分析例

Figure 2.6


課題環境の設定や視点によって細かい部分は変わったりするので、上の表は飽くまでも例。
既知/未知は、環境そのものの特性ではないので個々には載せられていない。

2.4 エージェントの構造The Structure of Agents

2.4.0 (冒頭)

エージェントは、物理的なセンサーと作動装置を備えた構造architectureと、その裏のプログラムから構成される。
つまり、
\(agent = architecture + program\)

2.4.1 エージェント・プログラムAgent programs

この本で考えていくエージェント・プログラムは全て、その時点での知覚を入力としてセンサーから受けとって動作を作動装置に返すという共通の骨組みを持つ。

ちなみに、エージェント関数が受けとるのは知覚シーケンスなのに対して、エージェント・プログラムが受けとるのはその時点での知覚のみであることに注意。
過去の知覚も含めて判断したい場合は、エージェント・プログラムは必要に応じて内部で記憶しておくというわけ。


ところで、以下のようなエージェント・プログラムを考えてみよう。
function Table-Driven-Agent(percept) returns an action // テーブル駆動エージェント。引数として知覚percept受けとって、なすべき行動actionを返す関数function
persistent: // 関数内の永続変数宣言部
percepts, a sequence, initially empty // 知覚シーケンス。初期状態では空
table, a table of actions, indexed by percept sequences, initially fully specified // 知覚シーケンスと行動を対応させるテーブル。最初から完全に用意されている

append percept to the end of percepts // 知覚シーケンスの末尾に受けとった知覚を追加する
actionLookup(percepts, table) // その時点の知覚シーケンスに対応する行動を対応テーブルから探し出す
return action

予め知覚シーケンスと行動の対応テーブルを用意しておいて、単純にそれに当てはめて適切な行動を決めるというプログラムなのだが、一応これでもエージェント関数としては全く問題ない。
しかし、これだととんでもなく巨大なテーブルを用意する必要が出てきて現実的ではない。
AIを駆使してこれをもっとスマートに実装したい。

2.4.2 単純反射エージェントSimple reflex agents

エージェント・プログラムの基本4類型の一つであり、最も単純な類型。
過去の知覚に関する情報を記憶せず、その都度与えられた知覚に対して反応する。
たとえば、前述の掃除機エージェントであれば次のような感じになる。
function Reflex-Vacuum-Agent([location, status]) returns an action
if status = Dirty then return Suck
else if location = A then return Right
else if location = B then return Left

これは下図のような2マスの世界の中で動く掃除機のプログラム。単に現在のマスの位置と状態だけを見て行動を決めている。

Figure 2.2



このような、ある条件の場合は常にある行動につながるという規則を、条件-行動規則condition-action ruleという。
たとえば、目の前の車がブレーキをかけた場合に自分もブレーキをかけるという条件-行動規則は次のように表現される。
\({\bf if} \ carInFrontIsBreaking \ {\bf then} \ initiateBreaking\)
現実の人間であっても、熱いものに手が触れたら急いで手を引っ込める等の反射はこれに近い。

もう少し一般的な単純反射エージェントの概略図は下図のようになる。

Figure 2.9



白い長方形はエージェントの内部的な判断プロセス内の状態を示し、白い楕円形?はその判断プロセスで使用される裏の情報を示す。
擬似コードは次のようになる。
function Simple-Reflex-Agent(percept) returns an action
persistent:
rules, a set of condition-action rules // 条件-行動規則の集合

stateInterpret-Input(percept) // 受けとった知覚を解釈し、状態を取得する
ruleRule-Match(state, rules) // 状態から、対応する条件-行動規則を取得する
actionrule.Action // 得られた規則から、それに対応する行動を取得する
return action

予め条件-行動規則の集合を用意しておいて、与えられた知覚(過去の知覚は記憶しない)から条件を抽出し、それに対応する行動を返すというプログラム。
この類型は単純でいいのだが、過去の知覚を記憶せずその時点の知覚だけに反応するため環境が完全に観測可能ではない場合は適切な判断ができない。
場合によっては無限ループに陥ってしまうこともあるが、ランダムに行動することで一応それは避けることはできる(たとえば前述掃除機エージェントが現在位置を知覚できないような場合)。

2.4.3 モデルベース型反射エージェントModel-based reflex agents

エージェント・プログラムの基本4類型の一つ。
エージェントの内部に現在までの知覚シーケンスに基づいた世界の状態(の推測値)を保持しておくことで、環境が完全に観測可能でない場合にも有効に振舞うことができる。
それと同時に、環境が自エージェントと独立に時間の経過によってどう変化するのかという知識と、エージェント自らの行動によって環境がどう変化するのかという知識を持っておく必要がある。これをその世界のモデルmodelという。
これらを備えた反射エージェントを、モデルベース型反射エージェントという。

モデルベース型反射エージェントの概略図は下図のようになる。

Figure 2.11


擬似コードは次のようになる。
function Model-Based-Reflex-Agent(percept) returns an action
persistent:
state, the agent's current conception of the world state // エージェントが推測する環境の状態
model, a description of how the next state depends on current state and action // 環境の現状とそれに対する行動によって環境がどう変化するのかについての知識
rules, a set of condition-action rules // 条件-行動規則の集合
action, the most recent action, initially none // 直近の自エージェントの行動。初期状態では空
stateUpdate-State(state, action, percept, model) // 単純反射エージェントはそのときの知覚だけでゼロからstateを求めていた
ruleRule-Match(state, rules)
actionrule.Action
return action

実際は、環境の状態を完璧に推測できるということは稀で、基本的には最も妥当な推測値に過ぎない。// "world"と"environment"の使い分けはどうなっている?
なお、内部に保持する世界の状態は、(タクシーの行き先のように)知覚ではない純粋なエージェントの内部状態は反映されない。

2.4.4 目標ベース型エージェントGoal-based agents

エージェント・プログラムの基本4類型の一つ。
前述の類型(反射エージェント)では単純に条件-行動規則にしたがって行動を決定していたが、この類型では予め設定された目標(複数可)に基づいて行動を決定する。
わざわざ条件-行動規則を書き換えなくても目標を設定しなおすだけで方針変更できるので、柔軟性が高い。

モデルベースと組み合わせた場合の概略図は下図のようになる。

Figure 2.13


モデルベース型反射エージェントの場合は環境の現状を推測したらあとは条件-行動規則からすぐに行動を決定できたが、この図の類型では環境が行動によってどう変化するのかも予測した上でそれが目標にどれだけ近づいているのかということを基に行動を決定する。

2.4.5 効用ベース型エージェントUtility-based agents

エージェント・プログラムの基本4類型の一つ。
単純に目標との関係だけで判断しようとすると、より望ましい目標よりもあまり望ましくないが手近な目標に引き寄せられたり、目標達成に伴うコストを度外視してしまったりといった問題が生じるので、もっと一般的な幸福度(つまり効用)を考えてこれを最大化するように行動しようというもの。
完全に観測可能でない環境や確率論的な環境の場合は、期待される効用が最大になる行動を選択することになる。

概略図は下図のようになる。

Figure 2.14


行動に伴う環境の変化を予測し、その効用が最大になる行動を選択する。

2.4.6 学習型エージェントLearning agents

Figure 2.15


学習型エージェントは図のように4つの(概念的な)構成要素によって成る。
評価器criticは、センサーからの入力を、与えられた成績評価基準performance standardに照らして評価を行い、結果を学習要素learning elementに伝える。
学習要素は、行動要素performance elementの起こした行動とそれに対する評価器による評価から学習し、行動要素に改良を加える。
学習要素はさらにFigure 2.9、2.11、2.13、2.14内に示されている全ての内部知識に関わる要素を更新する。
行動要素は、センサーからの入力を受けとって作動装置に対して行動の指示を出す。これまで「エージェント」として論じてきたのは、この部分。
学習要素と行動要素の区別が最も重要。
問題発生器problem generatorは、学習に役立てるための行動を提案する。
短期的には非効率な行動に見えるかもしれないが、より多くのパターンを学習することで長期的な視点ではとても効率的な行動となることが見込まれる。

成績評価基準はエージェントが書き換えられないようにしなければならない。
しかし効用ベース型エージェントに効用情報について学習させたいと望む場合は少しややこしい状況になる。
たとえば、全自動タクシーのエージェントはお客さんからのチップの額という知覚を直接(評価器の介在なしに)自身の成績に結びつけることもできる。 // ?

2.4.7 エージェント・プログラムの構成要素はどのように機能するかHow the components of agent programs work

要素の状態を表すのには、下図のような方法がある

Figure 2.16


左から右に行くにつれて複雑さと表現力expressivenessが増大している。

原子的表現atomic representationでは、内部的な構造を持たず、要素の状態は単に「B」とか「C」みたいに言い表わされる。
各状態間でどのように異なっているかは認識できず、単に同じ状態か否かということしか分からない。
探索searchやゲーム行為game-playing(→3~5章)、隠れマルコフモデルHidden Markov models(→15章)、マルコフ決定過程Markov decision processes(→17章)等は全てこの原子的表現を前提としている。

因子的表現factored representationでは、要素の内部状態として値valueを持ちうる複数の変数variablesや属性attributesを持つ。
各状態間でどの因子がどのように異なっているのかまで認識できる。
値を空にしておくことで、不確定な状況も表現できる。
制約充足constraint satisfactionアルゴリズム(→6章)、命題論理propositional logic(→7章)、計画立案planning(→10,11章)、ベイジアン・ネットワークBayesian networks(→13~16章)、機械学習machine learningアルゴリズム(→18,20,21章)等の分野でこの因子的表現が使われている。

構造的表現structured representationでは、内部状態として様々な対象を表すオブジェクトとそれらの相互関係を持つ。
たとえば、「前方にあるトラックが酪農場に向かう私道にバックで入ろうとしているが牛が1頭脱走していてその道を塞いでいる」という状況は因子的表現だと \(TruckAheadBackingIntoDairyFarmDrivewayBlockedByLooseCow\) という真偽値項目があれば表現できるが、現実的ではない。
リレーショナル・データベースrelational databasesや一階述語論理first-order logic(→8,9,12章)、一階確率モデルfirst-order probability models(→14章)、知識ベース学習knowledge-based learning(→19章)、そして多くの自然言語理解natural language understanding分野(→22,23章)でこの構造的表現が使われている。

一般に、表現力が増すと同じ事柄を簡潔に表現できるようになるが、その反面、推論や学習は複雑になる。