ラベル AIMA の投稿を表示しています。 すべての投稿を表示
ラベル AIMA の投稿を表示しています。 すべての投稿を表示

2009年7月14日火曜日

【AIMAメモ】Agentアプローチ <=> Domain指向 の間違い

------
Agent in Environment.

なんですがこれは、

Domain in World.

と同型であり、ここでDomain指向との対応がとれる、と。
------

違う! これは同型ではない。同型なのは、

------
an Agent in an Environment in the World
an IT system in a Domain in the World
------

だ。

こんなんじゃ、駄目だ。。。

2009年7月13日月曜日

【AIMAメモ】PrologとLisp

論理プログラミングをやろうと思ったら、Prologはひとつの選択肢だろう。

Prologの処理系を使うというのもあるが、別の言語をメインで使っていて、一部論理プログラミングを使いたいとする。

そうするとそのホスト言語でProlog的なものを実装するわけだが、そのとき、

  • 実装が楽であり、
  • 実装したものを使う際にホスト言語と似ていて使いやすい

ということが大事だろう。すると例えばCとCommon LispをくらべるとCommon Lispの方が適していると思う。

ではRubyだとどうだろう?
結構いけそうな気がする。しかし、記号(Symbol)の取扱いがCommon Lispの方が統一的かつ簡易なので、Common Lispの方が楽だろう。(Rubyはあまりくわしくないので間違いかも)

PrologとLispのつながりというのはこの程度じゃないかなぁ。

もしかしたら、もっとあるのかもしれないが、今のイメージはこんな感じ。


とりあえず、これにて、今回の「AIMAかじり」は終了しよう。
AIMAは別の機会にがっつりやりたい。

次は、今回習得したPrologとAIMAの知識を利用して、PAIPのProlog実装とその利用をちゃんと理解するステップに入ろう。

【AIMAメモ】Algorithm = Logic + Control の周辺

Algorithm = Logic + Control.

なわけですが、一方で、より有名なので、

Programs = Data structures + Algorithms.

があるわけです。

ちなみにAIMAがエージェントアプローチと呼ばれるのは、AIMAで取扱うものは、機械だろうが生物だろうが、ソフトウエアだろうがハードウエアだろうが、Common Lispが採用言語だろうがJavaがそうだろうが、エージェントという統一的な観点で整理しているからです。

そこで、Logicが知識表現である、というのが私にとっては大きな気づきでした。AIMAの中では他の知識表現として統計的なものを含めてLogic以外のものも取り上げられています。ベイズとか隠れマルコフとか。それらがどちらかというと現代的なAIのお話になっている。

さて、日頃プログラムを書くときにデータというのはよく使うわけですが、これもエージェント的な観点でみると何かしらの知識表現とも見做せてきます。そうすると、

Algorithm = Logic + Control.

ではなく、

Algorithm = Knowledge Base + Control.

の方がいいように思えてきます。Knowledge Baseの構築方法の一つとして知識表現にLogicを使うこともあるよ、ということで。Knowledge Baseを拡大解釈すれば、あながち間違いではないかと。

するとデータベースってなんじゃないな、ということが気になるわけです。

これはこれで、Prologと、SQL(というか関係代数)との関係含めて先々確認しなければいけないのですが、ある種のデータベースはKnowledge Baseとみなすのがよいと思うし、ある種のデータベースは、外界としてしまってデータベースとのやりとりは、エージェントのセンサを介して情報を得るという、外部入出力とみなすのがよいように思います。直感ですが。



まとめると、Environmentの中で、

Agent = Sensor + Actuator + Intelligence.

なんですが、Intelligence というのはいろいろありえてSoftwareの場合もあり、
Sensor,Actuator,Intelligenceの全部がSoftwareの場合がよくあるプログラミングでやっていることで、
だからそれをProgramと呼んで、
その場合は全部Softwareなので、どこでインターフェイスを切りますかということが整理の入口になりそれがアーキテクチャであり、
同じ対象領域でも何がSensorで何がActuatorでとかは違うわけで、
SensorとActuatorは外部インターフェイスというか入出力と考える部分にあたり、
するとIntelligenceの部分が入出力以外ということになり、いわゆるProgramの本体部分なので、

Intelligence = Data structures + Algorithm

なんですが、Data structuresを知識表現とみれば、

Algorithm = Knowledge Base + Control

のKBに吸収されてしまうので、

Intelligence = Knowledge Base + Control

となるなか、

データベースはEnvironmentに属すのかIntelligenceに属するのかという判断があるので、
その判断によって、EnvironmentにいったりKBにいったりするという。

さて、大本にもどると、

Agent in Environment.

なんですがこれは、

Domain in World.

と同型であり、ここでDomain指向との対応がとれる、と。
そちらの言葉で言えば、DomainとWorldの境界線がSystem Boundaryにてシステム思考が出てくる、と。

また、Common Lispのhomoiconicというのは、

Algorithm = Knowledge Base + Control.

ここのKBとControlの境目を柔軟にして探検的にプログラミングできますよ、ということで、それだけじゃなくて、リストまたはS式というのは知識表現言語として柔軟ですよ、というつながり。

つながった?

【AIMAメモ】FOPLの確定節(definite clauses)

まず、訳語の揺れについて。
第七章の命題論理では、definite clausesを確定節としているが、一階述語論理の第九章では限定詞節としている。よくわかんなくなっちゃったので、原書を確認した。ま、このくらいはしょうがないのかな。

で、一階述語論理(FOPL:FOPLはFOLとほぼ同義)にもホーン節的なものは存在しているのだ(AIMAではFOPLの方はホーン節と呼ばない)。
ここではホーン節と呼んじゃおう。

ホーン節は正リテラルをゼロ個または一つ含む。一つ含む方をdefinite clausesと呼ぶ。またFOPLの場合の違いは、全称限量子が略記されていると見做す。これがPrologの文だ。

hoge(X) :- piyo(X),poyo(X).

というわけで、PrologのKBはホーン節の選言文となる。すなわちFOPLよりは記述力が弱い。そのかわりに、推論のスピードを確保している。ホーン節も記述力はナカナカなので、落としどころ、という感じか。

詳細はまだつかめていないが、FOPL(FOL)とPrologの関係はイメージできるようになった。

【AIMAメモ】融合規則からホーン節へ

で、融合規則(resolution rule)なる推論規則が注目される。これは、命題論理においては、この推論規則たったひとつで完全である。すなわち、KBから伴意される任意の文を導出できる。モーダスポーネンスもなんもかんもいらないのだ。

ここで、命題論理における任意の文がk-CNFの形で書けることが重要な役割をもっていることになる。するとKBも、任意の文αもk-CNFだから、融合法を適用できる。

この文脈でホーン節、登場。

融合法(= 融合規則+探索)は強力だが、そのままで使うのではなく、文に含まれる節の形を多少制限するといろいろメリットがある。それがホーン節。

ホーン節は正リテラルを高々ひとつ含む選言節である。

(¬A∨¬B∨C)はホーン節だが、(¬A∨B∨C)はホーン節ではない。ホーン節は含意に変形できる。例えば、

(¬A∨¬B∨C) は (A∧B)⇒C、

とか。ここで(A∧B)の部分を体部(body)と呼び、Cの部分を頭部(head)と呼ぶ。

ここでPrologと繼がった! Prologの記法だと、

C := A,B.

であり、左右が逆だが意味は同じ。

head := body.

なので用語も同じ。

ただしここでの話は命題論理なので、FOLとの関係はどうなっているのというのはわからない。まだ関連が見えただけ。

【AIMAメモ】推論規則(推論パターン)

命題論理のお話。

統語論を決める。
意味論にて、モデルの考え方を決める。ここでは、命題記号に直接真偽を割り当てるのがモデルとし、結合子の意味論は真理値表にて定義することにし、定義する。

すると、伴意の考え、および論理的同値の考えから、命題論理の複合文についての論理的同値関係がいろいろでてくる。ドモルガンの法則と呼ばれるものだとか、なんやかんや。

ここまでは命題論理の定義(= 統語論 + 意味論)からストレートな感じである。

で、推論規則(推論パターン)。

ここ、AIMAではヒューリスティックな流れだ。モーダスポーネンスとかAnd除去とかをどうやって導出するのか、もしくは何を推論規則と認定するかは曖昧である。例えば、And除去は論理的同値だが、モーダスポーネンスは違う。

ただ、何を推論規則とするかには何か法則性があるんだろうな、と感じる。

推論規則は証明に使えてナンボだと思うので、おそらくその観点での判断になるのかな。

また、推論規則を定めるまでは統語論と意味論が混ざっているが、推論規則を定めると、それは文の変形(書換え)のみになり、統語論だけで処理が進む。

伴意による推論アルゴリズムはモデルチェックであり、意味論ごりごりなわけだが、推論規則による証明という推論アルゴリズムは、統語論ごりごりであるという対比があるように思う。

【AIMAメモ】論理(logic)の誤解の誤解

http://aka-cs-blog.blogspot.com/2009/07/aimalogic.html
で書いた、
---
これでは計算機科学的には間違っていて、

知識(論理による表現) <-(推論規則)- アプリケーション(探索実装)

なのだ。
---
というのはちょっとどうかと思えてきました。融合法(resolution)のみを考えているわけではないので。

---
知識(論理による表現) <-(推論アルゴリズム)- アプリケーション(実装)
---

の方がいいかも。

これも気づき。

2009年7月12日日曜日

【AIMAメモ】数理論理学の三階層 (または論理という言葉の曖昧さについて)

論理(logic)という言葉が、一般的にも、論理学においてもかなり曖昧に運用されていることが理解できてきた。

これから書くことはAIMAに書かれていることではなく、AIMAに書かれていることを起点にして自分なりに考えたことだ。

まず数理論理学とはどんなものなのか多少探ってみよう。

  • 論理学と数理論理学との関係はどうなのだろう。
  • 考えてみると、そしていくつか調べてみると、大体次のようなイメージでよいのではないか。
  • 論理学の方が広い概念である。
  • 数理論理学は論理学の一分野である。
  • 数理論理学では、記号を用いる。別名、記号論理学とも呼ばれる。
  • 記号は、音、物理形状、文字などいろいろな形を取りえるが、記号論理学で扱うのは文字と考えてよいだろう。
  • これは、計算理論における情報の定義に関わるが、あらゆる情報は文字で表現できる、もしくは文字で表現できることが情報の定義である、ということを背景としている。

さて、次にもともと論理学とは何だったのだろう。


  • もともとでいうと自然言語と知性に関する知的探求である。
  • 自然言語をつかってわれわれは情報を伝達したり、考えたり、意見を戦わせたりするのだが、どうやらそこには何か法則性というか何か構造があるようだ。
  • 自然言語の文について、その何か構造がありそうに思える部分に着目しよう。逆に言うと、それ以外の部分を除去して考えていこう。
  • その何か構造と思えるものを論理(logic)と呼ぼう。
  • 論理と名前つけたものは、どうやら人間における事実の言明や仮定や推論などの知的活動や知的能力の重要な部分ではあるまいか。
  • 言葉という「外部表現」から、人間の思考という「内部表現+推論」を探っていこう。

というようなものが論理学の原始的モチベーションなのではないか。もちろん学問分野の定義は曖昧なので、進めば進む程、定義や対象領域も変化していくのですが。

で、数理論理学というのは、次のとおり。

  • 別に自然言語に限らなくてもいいじゃん。
  • ひとつには自然言語って難しいよ。論理としておぼろげながら捉えられた構造の研究に集中したい。
  • 自然言語じゃなくて、論理研究用のミニ言語みたいなのをつくっちゃうのがいいじゃん。(形式言語)
  • その言語は文法(=統語論)もきっちり決めちゃおう。


ここまでは前置きです。で、数理論理学というのは、ある意味、どうやら概念として次の三階層をとっているように思えてきたというお話です。


  • 1. 数理論理学自体の枠組み
    2の数理論理フレームワークを俯瞰してみたときに共通していると考えられる概念。逆にいうと2のフレームワークを新しく考えるときに満たさなければいけない条件や、使わないければいけない語彙。
  • 2. 数理論理フレームワーク
    3の具体的な論理を作る際のフレームワーク。いろいろなものがあり、問題領域に対してどれを使って論理をつくろうか選択したりする。
  • 3. 具体的な問題解決のための数理論理
    例えば、算数(小学校で習う形態は数理論理フレームワークを使っていないが)であったりWumpus Worldのエージェントを構成する論理(命題論理という数理論理フレームワークを使用)だったり。


そして、数理論理学の諸概念は、この3つの階層に分かれている。代表的なものを列記しよう。


  • 1. 数理論理学自体の枠組み
    数理論理学で扱う「論理」は必ずこれらの概念下で構築されている。

    • 数理論理学は形式言語を対象とする。
    • 形式言語では統語論と意味論が定義されている。
    • 統語論はconstantsとvariablesを含む。
    • モデル:ある文について、それが含むvariablesがそれぞれconstantsに特定化されたものをモデル(別名、可能世界)と呼ぶ。
    • 真理値:文は、個々のモデルについて真または偽となる値をもつ。その値を真理値と呼ぶ(ファジ論理はここでは除外する)。文αがモデルmで真となることを、mはαを充足する、とも言う。
    • 伴意:2つの文αとβについて、αの真理値が真であるあらゆるモデルにおいてβの真理値が真となるとき、文αから文βが伴意される、という。α |= β と書く。
    • 知識ベース:文の集まりを知識ベースと呼ぶ。KBと略記する。
    • 推論:あるKBと伴意関係にある文αは存在するかもしれないし存在しないかもしれない。そんなαを推論アルゴリズムiがKBをもとに見付けることができる場合、「αはiによってKBから導出された」と言い、KB |-i αと書く。
    • 推論規則:個々の数理論理フレームワークにおいて、その統語論と意味論とから発生する文から文への変換ルールを推論規則という。
    • 証明:ある導出をするための推論規則の適用系列を証明と呼ぶ。
    • 融合法:完全な探索アルゴリズムと単一の推論規則とによって完全な推論アルゴリズムを生み出す方法。
    • 健全性:ある推論アルゴリズムが、それが導き出す文はKBと必ず伴意関係があることが保証されている場合、その推論アルゴリズムは健全である、という。また、真理値を保存する、という言い方もある。
    • 完全性:ある推論アルゴリズムが、KBと伴意関係があるαを全て導出可能なことが保証されている場合、その推論アルゴリズムは完全である、と言う。
    • 論理的同値性:二つの文αとβについて、各々が真となるモデルの集合が一致するとき、αとβは論理的に同値であるという。α <=> βと書く。(伴意を用いた別の定義もある点に注意)
    • 妥当性:ある文がすべてのモデルに対して真となるとき、その文は妥当であると言う。妥当な文のことをトートロジと呼ぶ。
    • 充足可能性:文αが真となるモデルmが存在するとき、文αは充足可能であると言う。
    • 単調性:非形式的に言うと、センサにあやまりがないことが保証されている場合で新しい知識たる文βが得られたとしても、KB |= αならばKB^β |= αである。すなわち、βを知る前に導出されていた文αがβの出現によってくつがえされることはない、ということ。

    などなど。
  • 2. 数理論理フレームワーク
    1の各種概念を用いているが具体的な問題領域には適用してはいないフレームワーク。例えば、命題論理、一階述語論理、高階述語論理などがこれにあたる。基本的には、それぞれの「論理」にて統語論や意味論やそれらを表現する語彙は異なる。もちろんそれぞれ発展していったものなので、その関連性から同じような用語が現れることもあるが、それは上の1の意味で共通な用語ではないことが要注意である。以下は命題論理の場合の語彙を示す。

    • 統語論の語彙:原子文、命題記号、複合文、論理結合子、リテラル、選言、連言、含意文、前提、結論、双条件文、ホーン節
    • 意味論の語彙:真理値表
    • 推論の語彙:モーダスポーネンス(三段論法)、And除去、演繹定理、背理法、連言標準形、前向き推論、後ろ向き推論、Davis-Patnumアルゴリズム

    などなど。
    もちろん1の概念や性質や観点は、どの数理論理フレームワークでも有効であり、それに基づいて個々の数理論理フレームワークも研究されるし、相互の特性の比較も為される。
  • 3. 具体的な問題解決のための数理論理
    これは例えばwumbus worldのエージェントを「論理」によって判断させる場合にあたる。

    • どの数理論理フレームワークを採用するかをきめる。
    • その数理論理フレームワークにおいて、環境や知識をどのように表現するかをきめる。
    • あとは数理論理フレームワークにて研究済みであるツールを用いて実行する。すなわちKBを構築し、推論し、行動し、あたらしい情報を知覚し、KBにそれを投入し、また推論し、と繰り返す。

    wumbus world以外の例としては、例えば、自然言語で考えられ構築されてきた数学の集合論の知識を一階述語論理という数理論理フレームワークを用いて表現し推論するというものがある。


この3つの階層に概念がわかれており、数理論理学で何かを語るときに、この階層を縦横無尽に行き来するということを理解していなかったから、今まで数理論理学がもやもやしていたのだ。

また「論理」という言葉の定義がかなり曖昧であり、文脈によって特定される機会がかなり多いこともその原因だったと思う。

「論理」が何を指しているかを理解するには、文脈がどうであるかを理解する必要があり、個別の文章の文脈を理解するには、数理論理学が概念や対象の階層構造を成していることを理解する必要があったということ。

これも大きな気づきだ。

2009年7月11日土曜日

【AIMAメモ】論理言語の意味論(Semantics)

意味論という言葉も厄介じゃないかなぁ。

まず、意味論として国語辞典、Semanticsとして英和辞書、英英辞書をみてももやもやしてわからない。これは例えば数学(Math)を国語辞典や英英辞典で見てもそれを理解できないのと同じことなのかな、と理解しておけばいいのだろうか。

でも、言葉としてのスケールが違うような?とも思う。

* この文のセマンティクスはどう決まっていますか?

というのが意味がありそうだと思えても、

* この文の数学はどう決まっていますか?

というのは無意味な質問に思える。数学と比してセマンティクスという言葉がスケールが小さいものにも適用できる言葉であるならば、辞書や辞典にもっと分かりやすい説明があってよいと思うのだが。。。

と考えていた。で、AIMAを読むとわかるのかわからないのか。


これが、わかるのだ。


x + y = 4 という文でAIMAは論理言語の意味論を説明している。それを私なりに咀嚼して書いてみよう。


  • まず、x + y = 4という文をみて我々はこの文を頭の中に入れることができる。ただしそれは+ x y 4 =であっても同じである。それらに比してx + y = 4というのは特別である。何故特別かというとそれはこの文に対する統語論を我々は学校で「算数」という名のもとに教えてもらっているからである。逆に言うと、+ x y 4 =は、「算数」という統語論では規則違反である。
  • 「算数」という統語論の中には、+ = 1 2 3 4などのconstantsとx yなどのvariablesが定義されており、文の構成素材として使用することができることも教えてもらっている。
  • xとyはvariablesなので、このx + y = 4という文に対してモデル(別名で可能世界)を考えることができる。例えば、「xが1、yが2であるようなモデル(世界)」「xが2、yが2であるようなモデル(世界)」などなど。これは「算数」ではconstansが無限にあることによって、モデルの数も無限になる。ここで大事なのは、ここでモデル云々の考え方は、「算数」の中で定義されているのではなく、論理言語一般の考え方ということだ。別の言葉でいうと、「算数」というものを論理言語の考え方で捉えて語っているのがこの文章であるということ。
  • さて、我々は x + y = 4という文において、「xが1、yが2であるモデル」ではこれが偽であり、「xが2、yが2であるモデル」ではこれが真であると言われると、それは合点がいくような気持になる。それはひとつの観点では、+ = 1 2 3 4などのconstansの意味を知っているからそれと照し合わせてそういう気持になるとも言えるが、そうすると意味って何よ?ということになってここが曖昧である。
  • そこを考えると我々がここで「意味」と認識しているものは、結局、
    x + y = 4 という文は、
    「xが1、yが1であるモデル」にて偽、
    「xが1、yが2であるモデル」にて偽、
    「xが1、yが3であるモデル」にて真、
    「xが2、yが1であるモデル」にて偽、
    「xが2、yが2であるモデル」にて真、
    ...
    ということ自体が展開された形での「意味」そのものではないか、ということになる。
  • すなわち、我々が「算数」という名称で教わったものは、「算数」としての文の書き方と、「算数」としてそれら文がどのようなモデルにて真偽値を取るかという対応であるということになる。この前者が「算数」の統語論(Syntax)であり、「後者」が意味論(Semantics)である。


スタートレックは異文化に対するイマジネーションに満ちているのでスタートレックのアナロジーを再度やってみよう。


  • Mr.スポック曰く、バルカン星では子供のころに「バルカニーナ」を教わる。
  • バルカニーナの統語論は、constansとして+ = 1 2 3 4であり、variablesとしてxとyがある。もちろん文の構造を決める他の文法規則もある。それら規則によると、x + y = 4は文とみなせるが、+ x y 4 = は違反であり文とみなせない。
  • バルカン星人は、 x + y = 4という文において、「xが2、yが2であるモデル」ではこれが偽であり、「xが1、yが1であるモデル」ではこれが真であると言われると、それは合点がいくような気持になる。それはひとつの観点では、+ = 1 2 3 4などのconstansの意味を知っているからそれと照し合わせてそういう気持になるとも言えるが、そうすると意味って何よ?ということになってここが曖昧である。
  • そこを考えるとバルカン星人がここで「意味」と認識しているものは、結局、
    x + y = 4 という文は、
    「xが1、yが1であるモデル」にて真、
    「xが1、yが2であるモデル」にて偽、
    「xが1、yが3であるモデル」にて偽、
    「xが2、yが1であるモデル」にて真、
    「xが2、yが2であるモデル」にて偽、
    ...
    ということ自体が展開された形での「意味」そのものではないか、ということになる。
  • すなわち、バルカン星人が「バルカニーナ」という名称で教わったものは、「バルカニーナ」としての文の書き方と、「バルカニーナ」としてそれら文がどのようなモデルにて真偽値を取るかという対応であるということになる。この前者が「バルカニーナ」の統語論(Syntax)であり、「後者」が意味論(Semantics)である。


これで明確になったと思うけど駄目おしを。

Dr.マッコイ:「x + y = 4」という暗号通信をクリンゴンの偵察挺が送信していたらしい。これはどういう意味だろう。

Mr.スポック:それは意味論により異なりますね。地球人はそれを算数の意味論に従っていると盲目的に解釈しがちですが、それは理性的ではありません。

Dr.マッコイ:「x + y = 4」に理性もへったくれもあるか!

Mr.スポック:感情的にならないでください。実際にバルカン星人にとっては、その文が適格である統語論でもっとも最初に習うのは「バルカニーナ」であり、「バルカニーナ」の意味論は地球人の「算数」の意味論とは違います。さらにバルカン星人の知識の中にある別の12の統語論においても「x + y = 4」を適格と見做すことができますがね。統語論と意味論をごちゃごちゃにして初等教育を行う地球人とは、バルカン星人は大きく異なるのです。バルカン星人は常に統語論と意味論を分けて学習します。

Dr.マッコイ:君だって地球人の血が半分流れてるじゃないか!



閑話休題。

x + y = 4 の意味論を算数とする

という表現がAIMAでもあるのですが、これはちょっとリスキーなんですね。私は今までこれがわからなかった。より混乱が少いのは、

x + y = 4 の意味論を、算数という名称で君や私が習った意味論にする。(統語論が算数と一致しているということは前提としている)

という表現である。

ああ、すっきりした。

【AIMAメモ】論理と物理

AIMAを読んでいて合点がいく部分が多いのは、物理との接続に言及しているところが大きいと思う。

たとえば、知識ベース(Knowledge Base,KB)のことを、物理的な構造にすぎないとズバリ言っている。ここでの物理的な構造は、電気的であったり有機化学的であったりするわけですが、この視座に立つとき、人間の知能というものと、計算機による知能(人工知能)というものを統一的に考えることができるようになる。これは気づき。

すなわち、(+ x 2)のようなものはこれが計算機のメモリ(電気的信号の状態)なのか、私の頭の中のこれを記憶している何らかの状態(電気的信号の状態 or 有機化学的な結合状態)なのか、いずれにしても物理的な状態を指している。

統語論(Syntax)が何かということも、それも物理的な構造としての文の形を規程するものとしている。

以下、以上の文脈にて。

KBは文の集まりである。文の統語論を命題論理としたとき、KB全体を単一の文(別の言い方をすると言明)とみなすことができる。これは、KBに含まれる文(論理)がS1,...,Snだったとすると、KB = S1^...^Sn (ここで^は連言)にすぎない、ということだ。言われてみれば当然なのだが、言われるとはっとする。

そしてそもそもこの単一の言明であるKBがそもそも現実世界において真であるかということをどうやって知るかということをグラウンディング(grounding)と言う。グラウンディングは哲学的論争になっているが、ひとつの立場は、センサという機器にて解釈する、ということだ。そもそも文の生成(すなわちKBの構築)にもセンサによる知覚が用いられる。そのことにより現実世界とKBはつながりをもちつづける。

実は、このような物理との接続がない状態で今まで人工知能の書籍を読んできたのですが(例えばPAIP)、どうも、どこがどういう観点で「知能」なのかということの座りがわるかった。例えば、macsymaが人の代わりに代数演算をするということも、確かに計算機という機械が人がやっていたことをやってくれるという観点では何かしらの人の知能的な側面を実現しているということでは人工知能だよねと自分を納得させていたのだが、腑に落ちないところもあった。

そういう意味では、このエントリは大きな気づき。

# センサと知るということになると量子論との接続はどうなのよ、と思ってしまうが、今は考えない。
# 日常的なオーダーの中での知覚と知能と行動については、まずはそのオーダーで良好な物理法則をベースに考えてもよいとは思う。
# それによって人間のKBも構築されてきたのだと思うから。

【AIMAメモ】論理のモデルと設計のモデル

これは、気づきではなくて、改めて確認したこと。

論理におけるモデルと設計におけるモデルとは随分違う。

文章にしてみて、より理解を堅牢にしてみたい。

まず、論理におけるモデルは、より具体的には、論理言語のモデルのことを指す。
次に、設計におけるモデルは、対象領域の記述のためのモデルのことを指す。

順番は逆になるが、それぞれさらに詳しくいうと。

対象領域の記述のためのモデルとは、例えばMVCにおけるモデルであり、それはドメインを分析した結果、そのドメインにおいてエクステントが比較的に長い概念や語彙のことである。

論理言語におけるモデルとは、今、ある論理言語にて書かれた文αがあるとして、そのαの真偽を考えるにあたって想像しうる(存在しうる)可能世界(possible world)のことである。

ということ。

ここでまず違うのが、

設計におけるモデルは現実に対する「何らかの抽象」と位置付けられているのに対して、
論理におけるモデルは論理文αに対する「何らかの(想像しうる)具象」と位置付けられている、

ということである。ただし、これら2つのモデルという言葉の用法がunification可能かどうか考えてみると、これはできそうだ。

設計におけるモデルというのは抽象ではあるが、それはいろいろ考えうる抽象のうちの一つであり、その中から設計の選択として実装に使用するモデルを選択しているということである。これって可能世界としてありうるものの一つという感覚と似てなくもない。

こう書いてみると、抽象と具象というのはN:Mな関係であることに気づいた。ある抽象を決めれば、それを満たす具象がいろいろあると考えられる(具象群)。OOにおけるクラスとオブジェクトの関係。具象群からある抽象をつくるとは、その具象群の抽象の形というのはいろいろありえるわけで(抽象群)、その中から選択をする行為とも考えられる。まあ、実際に設計をするということは、この双方をいったりきたりして、フィードバックをかけてチェックしつつうまい抽象化というのを探索している行為と考えられるのですが。


ちなみにSPINなどのModel checkerのモデルとは、論理の方のモデルのことですね。

【AIMAメモ】論理(logic)の誤解

誤解していた。これは大きな気づきだ。

論理(logic)というのを、日常の「あの人、論理的だよねー」とかそういう言い回しが三段論法的な話し方を指したりすることに引っ張られて、何か手法であったり知識を使うために運用するものだと今まで暗黙に思っていた。違うのだ。論理は知識の表現そのものなのだ。それを運用するのは推論規則なのだ。

Mr.スポック的にいうと、

知識 <-(論理的思考法)- Mr.スポック

なんだけど、これでは計算機科学的には間違っていて、

知識(論理による表現) <-(推論規則)- アプリケーション(探索実装)

なのだ。だから、

logic <- control

によって計算機から具体的な結果が得られ、これが

Algorithm = logic + control.

そしてこのlogicの部分が宣言的プログラミング、
このcontrolの部分が手続き的プログラミング。

2009年7月10日金曜日

【AIMAメモ】知識工学とDSL

そうか、知識工学って今でいうDSLとかなりクロスオーバーしているものなんだ!

DSL : システム分析 -> ドメイン分析 -> ドメインモデル -> 手続き/永続化実装 -> 基本的なデータの投入 -> DSLとして利用
知識工学 : システム分析 -> ドメイン分析 -> 語彙と知識表現の決定 -> 知識を表現 -> 推論エンジンを介して利用

前半戦に類似がある。

【AIMAメモ】ブログエントリの考え方

さて、途中から読んでみると、頭から読むのとやり方が違うのがすぐにわかった。ゲリラ的というかなんというか。のっけから自分なりの理解を組み立てるしかないので、読み方も縦横無尽になる。わかっているところから切り崩していく感じ。これはこれでおもしろい。もしかしたら、この方がよい読書方法なのかもしれないなぁ。でも著者と膝を突き合わせる感じでじっくり最初から読んでいくのが好きなんだけどね。

さて、そんなこんなで、今回のAIMAアタックにおいては、気づきがあったところなどを散発的にメモとしてエントリに上げようと思う。なので小さなエントリがちょこちょこ出ると思う。

AIMAをかじる

せっかく得たPrologの理解(イロハのイだが)もたぶんすぐに消えてしまう。今はまだ、日々ごりごりプログラムを書く状態じゃないから。

そうするとこれが消えないうちに、PrologとFOLとLispとをもうすこし繋いでおきたい。どうしたもんかなぁ、FOLを数理論理学の本できっちりやるのは、それはそれで時間がかかるしなぁ、と思案してたんだけど、これAIMA(Artificial Inteligence a Modern Approach)をやればいいじゃん!ということに気付いた。AIMAにはFOLについて簡潔にまとめた部分があるのです。PAIPやってて、Prologやったところだから、Norvigつながりもあって結構よい組み合わせではないか。

AIMAのFOLは8章と9章なんで、頭から読んでいるとPrologを忘れちゃう。そこで、思い切って7章からやろうと思う。7章から論理エージェントが初まる。

本を途中から読むということに慣れていないので、うまくいかないかもしれない。うまくいくかもしれない。チャレンジしてみよう。

こつこつ。