前向き推論と後ろ向き推論(詳細)

このページは、生成規則モデルにおける前向き推論と後ろ向き推論を、入力、処理、出力の観点で詳しく整理するノートです。

ざっくり比較

  • 前向き推論: 手元の事実から結論を増やしていく(data-driven)
  • 後ろ向き推論: 検証したい目標から必要条件を逆算する(goal-driven)

どちらもルール集合を使いますが、探索の始点が違います。

前向き推論(Forward Chaining)

ざっくりいうと

すでに分かっている事実を起点に、適用可能なルールを順に発火し、新しい事実を増やしていく方式です。

入力

  • ルール集合(if-then 規則)
  • 初期事実(作業記憶に入っている既知情報)
  • 停止条件(任意。目標到達、反復上限、時間上限など)

処理の流れ

  1. 現在の事実に一致するルール候補を集める(マッチ)
  2. 複数候補の実行順を決める(競合解決)
  3. ルールを発火し、事実を追加・更新する(実行)
  4. 停止条件を満たすまで繰り返す

出力

  • 追加後の事実集合(到達した結論)
  • ルール発火履歴(説明可能性のための証跡)
  • 目標が設定されていれば到達可否

向いている場面

  • 監視、アラート、イベント処理
  • 業務規程の自動適用
  • 事実が継続的に流入する処理

注意点

ルール数が多いと、毎サイクルの照合コストと競合解決コストが増えます。停止条件を明示しないと、無限ループや不要な発火の温床になります。

後ろ向き推論(Backward Chaining)

ざっくりいうと

「この結論は成り立つか」を出発点に、必要な前提を逆向きにたどって証明を試みる方式です。

入力

  • ルール集合
  • 既知事実
  • 問い合わせ/目標(必須)

処理の流れ

  1. 目標を結論にもつルールを探す
  2. その条件部を下位目標に展開する
  3. 下位目標を既知事実または別ルールで検証する
  4. すべて成立すれば目標成立、どこかで失敗すれば不成立

出力

  • 目標命題の成否(真/偽)
  • 証明経路(どのルール連鎖で成立したか)
  • 問い合わせ変数の束縛結果(ロジックプログラミング文脈)

向いている場面

  • 診断支援(仮説検証)
  • 問い合わせ応答(この条件で成立するか)
  • ルール根拠の提示が重要な場面

注意点

目標が曖昧だと探索枝が増え、証明効率が落ちます。循環規則や深い依存がある場合は、再訪問管理や深さ制限が必要です。

入出力の最小セット

  • 前向き推論の最小入力: ルール集合 + 初期事実
  • 後ろ向き推論の最小入力: ルール集合 + 既知事実 + 問い合わせ/目標

比較しやすくするために三項目で並べることがありますが、前向き推論では目標は必須ではありません。

小さな例

ルール:

  • R1: IF 発熱 AND THEN 呼吸器疑い
  • R2: IF 呼吸器疑い THEN 胸部検査推奨

初期事実:

  • 発熱 = あり
  • 咳 = あり

前向き推論では R1, R2 の順に発火し、胸部検査推奨 が新事実として得られます。
後ろ向き推論では目標 胸部検査推奨 から逆算し、R2, R1 をたどって 発熱 が事実なら成立と判定します。

関連