後ろ向き推論と前向き推論

機械学習技術 人工知能技術 自然言語処理技術 セマンティックウェブ技術 オントロジー技術 デジタルトランスフォーメーション技術   アルゴリズム  推論技術

前述のprologcore.logicでの推論は、後ろ向き推論と呼ばれるものとなる。後ろ向き推論とは、目標から副目標を導く推論となる。前提A=Bから目標A=Cを導く時「A=Cを証明するためには、A-BであるからB=Cを示せば良い」と副目標(B=C)を導くものとなる。

この後ろ向き推論は、理系の研究現場で頻繁に使われる手法となる、たとえば医者が病気の診断をする時に、その症状を起こす可能性のある理由を可能な限り考えて、その中で適合するものを選んだり、何らかの装置のトラブルがあった時にその原因の可能性をすべてあげてその中から真の原因を見つけたり、何らかの仮説の法則(因果)を見つけて整理する作業(理論化)となっていく。

ここでもう少し具体的な例として機器のトラブルが起きた場合への、後ろ向き推論の適用を考える。これまで正常に動作していた機器が動かなくなった場合には、後ろ向き推論では、原因として単一ではない複数の可能性がまず挙げられる。たとえば
(1)器機に接続したケーブルが抜けていないか
(2)ケーブルが断線していないか
(3)本体のヒューズかブレーカーが落ちていないか
(4)機器の故障ではないか
(5)部屋の空調がついていないか  
(6)部屋のドアが開いていないか
(7)人知が届かない力が作用している
のようなものが考えられる。

(1)〜(4)は、装置が動かない直接の原因として容易に考えられる。(5)(6)に関しては、一見トラブルとは直接結びつかないように見えるが、空調の故障で部屋の温度が上がって装置が停止している可能性や、ドアの開閉についてはその建物に特異な事象として関係がある可能性が考えられる。また網羅的な観点では(7)の可能性も考える必要がある。このように後ろ向き推論の場合は、その課題に対応した深い知識が必要とされる。

ある特定のドメインに限定し知識がある程度集められるケースでは、この後ろ向き推論のアルゴリズムが有効に働く。例えば製造の現場でよく用いられるFTA(Fault Tree Analysis:故障木解析)やFMEA (Failure Mode and Effects Analysis:故障モードと影響解析)は、故障やトラブルに対する知識を網羅的に抽出/分析するフレームワークであり、そこで抽出された知識をprolog等の後ろ向き推論エンジンに用いる事で有効に活用する事ができる。

これに対して、未知の世界を対象とした推論では、事前に十分な知識を蓄える事ができない。これらに対しては、何らかの方法(例えば確率的な手法や機械学習等)で生成された知識を活用する仮説推論(abduction)のアプローチが研究されているが、未だ十分な成果を得られていない。

これら後ろ向き推論に対するものとして前向き推論がある。これは、前提A=Bから目標A=Cを導くとき,「A=Bである。ところがB=Cであるから,したがって,A=C」と導く推論で、先程の故障解析の例でいうと、「電源ケーブルが入っていない→その機器のスイッチを入れても動かない」というように前提条件から繋げる推論の形となる。

ここで前向き推論についてもう少し具体的に述べる。たとえば、動物園の中に猿がいて以下のような事実があったとする。

(1)扉の先にりんごがある
(2)扉には紐がついて開けられるが手の届くところにない
(3)猿は紐に手が届けば引ける
(4)猿はりんごを握れる
(5)檻の中には台があり十分低い
(6)猿には愛嬌がある

これに対して推論規則(ルール)として以下のようなものがあるとする。

(a)台が十分低いならば猿は台に登れる
(b)紐が引けるかつ台に登れるなら猿は扉を開けれる
(c)りんごを握れるなら猿はりんごを食べられる

これらのルールを用いて当初あった事実に推論結果を加えていく

(7)猿は台に登れる  (事実(5)にルール(a)適用)
(8)扉が開く(事実(3),(7)にルール(b)を適用)
(9)猿はりんごを食べられる((8),(1),(4)にルール(c)を適用)

こうして(1)〜(6)の前提条件とルール(a)(b)(c)より(7)(8)(9)の推論結果が生成され、それらを用いて「猿はりんごを食べられる」という事実が推論される。この前向き推論の原理をツールとして落とし込んだものにCLIPSに代表されるproduction systemがある。このツールの推論のポイントはルールを適用して新しい事実を生成し、それらを用いて次の推論を組み立てていく状態管理の機構が内蔵されているところにある。

この例を見てもわかる通り、前向き推論ではルールの選択方法が鍵となる。方向性の選択を間違えると推論は成功しない。推論が成功するための方策としては、新しく積み上げられた事実がゴールに向かって進んでいる事を評価する評価関数を定義し、それらがなるべく高くなるようにルールを選択していくことが考えられる。

実際に、囲碁や将棋をAI化したものでは、後ろ向き推論は不可能で、前向き推論の評価関数を上述のように工夫することにより実現している。それらについても機会があれば述べてみたい。

エキスパートシステムの実装例としてはJavaによるCLIPSがある。またそれらをベースとしたClojureでの実装と活用に関しても別途述べる。

コメント

  1. […] 前述の前向き推論に用いるツールとして有名なものにCLIPSがある。CLIPSとはwikiによると「CLIPSとは、ソフトウェアの名称でありエキスパートシステムの一種である。C Language Integrated Production System(C言語統合型プロダクションシステム)の略。..CLIPSの最初のバージョンは1984年にNASAのジョンソン宇宙センターで(既存のシステム ART*Inference の後継として)開発された。…CLIPSは高速で効率がよく無料であるため、最も広く使われているエキスパートシステム・ツールと言えるだろう。現在はパブリックドメインだが、それでもオリジナルの作者ゲーリー・ライリーがアップデートとサポートを続けている。」とある。先述のprologでも構成可能なエキスパートシステムの専用ツールとなる。 […]

  2. […] expart systemのClojureでの導入を考えた場合、まず基本の前向き推論の動作を理解し、次にそれらの実装形態としてのCLIPSの動作を理解し、更にそれらを基本的に再現したClojureライブラリであるrete4framesの動作を理解した上で、よりフレキシビリティのあるCralaに進むのが妥当であると考える。 […]

  3. […] この問題を解決するために、知識ベースモデル構築(KBMC)と呼ばれるベイジアンネットの自動生成の研究がおこなわれた。KBMCは述語論理が用いられ、prolog的な宣言的なプログラミング言語等を用いて、知識ベースを参照しつつ後ろ向き推論を行い、質問に回答する為のベイジアンネット動的に生成して、それを使って確率を計算して質問に答えるしくみが用いられた。これによりすべての可能性のある質問に対する巨大なベイジアンネットを作成するという問題が回避できた。 […]

  4. […] またこれらの推論を計算機を使って実行するアプローチもある。 […]

  5. […] それらを見つけるアルゴリズムとして、古典的なアプローチとしては、前向き推論と後ろ向き推論がある。また機械学習的なものとしては、関係性を求める関係学習、決定木を用いたルール推論、シーケンシャルパターンマイニング、あるいは確率的生成手法等様々なアプローチがある。 […]

  6. […] この問題を解決するために、知識ベースモデル構築(KBMC)と呼ばれるベイジアンネットの自動生成の研究がおこなわれた。KBMCは述語論理が用いられ、prolog的な宣言的なプログラミング言語等を用いて、知識ベースを参照しつつ後ろ向き推論を行い、質問に回答する為のベイジアンネット動的に生成して、それを使って確率を計算して質問に答えるしくみが用いられた。これによりすべての可能性のある質問に対する巨大なベイジアンネットを作成するという問題が回避できた。 […]

  7. […] それらを見つけるアルゴリズムとして、古典的なアプローチとしては、前向き推論と後ろ向き推論がある。また機械学習的なものとしては、関係性を求める関係学習、決定木を用いたルール推論、シーケンシャルパターンマイニング、あるいは確率的生成手法等様々なアプローチがある。 […]

  8. […] STRIPSアルゴリズム: STRIPSアルゴリズムは、人工知能の分野で広く使用される自動計画アルゴリズムの1つとなる。このアルゴリズムでは、計画を実現するために必要な前提条件とアクションのリストを考慮するものとなる。STRIPSアルゴリズムは、計算時間が比較的短く、シンプルな問題に適している。推論系のアルゴリズムに関しては”エキスパートシステムとCLIPSについて“や”後ろ向き推論と前向き推論“等を参照のこと。 […]

タイトルとURLをコピーしました