よくある質問
FAQ (Frequently Asked Question)


Q: ヒューリスティックな探索のアルゴリズムを考える 手間と盲目的な探索手法を使うのではどちらの方が早いのでしょうか?

A:探索の効率を考える場合に,ヒューリスティック関数を考案するためにかか る時間というのは考慮しません.ヒューリスティック関数が与えられたとして, その効率はどうかという議論をします.

実際には,新しい問題にヒューリスティック探索を適用しようと考えた場合, 誰かがヒューリスティック関数を考えなければいけないわけで,もしもその問 題を一度しか解かないのだとしたら,ヒューリスティック関数を考えるための 時間が無視できない場合はあると思います.

ただ,もしも問題のサイズがかなり大きく,盲目的な探索を行ったとすると, 高速の計算機をつかっても,解をえるまでに何年もかかってしまう場合があり えます.そういう場合は,ヒューリスティック探索の方が有効でしょうね.

このあたりの話は,第三回目の講義でします.


Q: ∀k ∃n0 という記号の意味がわかりま せん.

A:∀ や ∃ は数学の論理記号で ∀ は全称記号とよび「任意の」という意味 です.∃ は存在記号とよび「存在する」という意味です.よって∀k ∃ n0 は,「任意の k に対してある n が存在して」という意味にな ります.

例えば an = 1/n (n は自然数) という数列を考えてみましょう. この数列に対して,以下のことが言えます.

∀r (> 0)∃n0 [n ≧ n0 ⇒ an < r]

この数学の式(論理式)は「任意の r (r は正数) に対して,ある n0が存在し,n が n0 以上なら an は r より小さくなる」という意味です. 実際に,r としてどんなに小さな正の数を持ってきても, n0 を適当に(数学でいう適当とは,適切にの意味)に選べば, n0 より大きな n に対して an < r とできます. 本当にそうかどうかは考えてみて下さい.

これらの記号に関しては,「人工知能II」の講義の述語論理というパートで詳 しく紹介します.


Q: 第二回目の講義で用いた格子世界の問題で,もしも 目標(goal)格子が障害物格子(黒の格子)で囲まれていて,開始(start)格子が その外側にあったら幅優先探索で探しても目標格子は見つからないと思います が,それは「完全性が失われた」のですか? それとも「解がもともとない」と 考えるのでしょうか?

A:解がもともとないということです.講義で話したように,探索は初期状態か らはじめて目標状態までの動作の系列(もしくは状態の系列)をもとめることで すが,質問のような状況では,そういった系列はないことになります.よって 解がないわけです.


Q: 初期状態から目標に至る行為の系列が一通りしかな いのが全順序プランで,複数通り考えらるのが半順序プランということですか?

A:まさにそうです.
半順序プランには,順番が規定されない行為が含まれます.実際にその半順序 プランを実行する場合は,実行順序が規定されてない行為にも便宜的に順番を つけることになります.これを線形化というわけですが,線形化は複数通り ありえます.


Q: 意味ネットワークなどの知識表現と推論/連想メカ ニズムは具体的にどのよう(何に?)に使うのでしょうか?

A:答えになっているかどうかわかりませんが,例えば以下の Q&A を参考にし てみてください.

意味ネットワークに限定すると不明ですが,一般的に知識表現と考えれば,他 にも応用例や具体例はいろいろあります.後に講義する知識ベースシステムな どはその有用な一つの応用です.自然言語理解といった応用もありますね.


Q: 英語翻訳ソフトなどにも推論メカニズムは使われて いるのですか?

A:使われている物もあるし,使われていない物もあります.これはいくつかの レベルにわけて考えられます.

まず,語彙のレベルです.翻訳ソフトウェアを試してみるとわかると思います が,どうみても単語の訳などが適切とは思えない場合があると思います. 例えば,英語の "take" には様々な意味がありますね.主に「取る」というよ うな意味で使われますが,"I took a medicine" と言ったら,「私は薬を飲ん だ」と訳すのが適切でしょう.このレベルで適切な訳を生成できないような翻 訳ソフトウェアは,内部でたいした知識処理はしてないだろうと推察できます.

このように,一つの英単語をとってみてもいろいろな意味があり,日本語に訳 す場合は適切な語彙を選ばなければいけません.これを可能にするためには, (1)十分で詳細な辞書をもち,かつ(2)文脈を理解する必要があるでしょう.

辞書の内容は知識と言えるわけですし,その膨大な知識を適切に使い分けるた めには推論メカニズムが必要になります.また,文脈を正しく理解するた めには,特定の専門領域の知識が必要であったり世界知識(常識も含む)が必 要になったりしてます.

人間の翻訳者をみていてもわかりますが,いくら英語と日本語の語学的な知識 があっても,特定の領域に関する十分な知識がないと,その領域に関しては適 切な翻訳が出来ない場合があります.つまり,専門知識を持っている人は,そ の領域の知識を用いて,足りない情報などは推論により補って適切な翻訳を行 うことができるわけです.

そういう意味でも,優れた機械翻訳システムを構築するためには十分な知識と 強力で柔軟な推論メカニズムは必須だろうと思われます.


Q: αβ枝刈り法で,親ノードおよび親ノードの祖先の 兄弟ノードの値と比較する部分がありますが,この場合,親ノード自身および 親ノードの祖先自身の値は比較の対象になるのですか?

A:なりません.
比較の対象は,親ノードの兄弟ノード,そして親ノードの祖先の兄弟ノードだ けです.実際に,ノードを展開する場合に,展開されたノードには仮の値とし て最小化ノードであれば+∞, 最大化ノードであれば-∞を割り付けますが,そ れを比較の対象にしてしまうとαカットやβカットがうまくいかないことがわ かると思います.


Q: 探索アルゴリズムのところに出てくる「各子供に初 期ノードからの経路を対応付ける」というのはどういう意味ですか?

A:探索アルゴリズムでは次に検査するノード,もしくは展開するノードをオー プンリスト(アルゴリズム中で "L" と表記されている)に保持しています.こ のリスト L の中の各ノードには,探索木のどのノードをたどってそのノード に至ったのかという情報がありません.最終的に解ノードにたどり着いた場合, 解経路を出力するためには探索途中のノードにおいて,そこまでの経路情報が 必要であり,質問の内容はそのための処理です.


Q: 探索アルゴリズムのところに出てくる "P(n)" とい うのは何を意味しているのでしょうか?

A: n はノードを表していて,P(n) は n が解状態であるかどうかを判定する 述語です.この述語 P は,n が解ノードの場合は真 (True)を返し,n が解で ないときは偽 (False)を返します.


Q: 特徴付けとはどのようなことですか?

A: 学問分野により違いはあるでしょうが,計算機科学の領域で特徴付けと言っ た場合は,様々な方法論や手法に関して,学術的に興味がある特性(一般には 複数ある)について考察し,それらの特性の違いにより他と区別したり比較し て優劣を付けたりすることです.

例えば,AとBの二つの方法論があり,その両方の方法論に共通した二つの特性 XとYがあったとします.その場合,「方法論Aは特性Xに関してはBより優れて いるが,特性Yに関してはBに劣っている」などと言うわけです.

この講義における具体例は「探索戦略の特徴 付け」などです.


Q: アルゴリズムの説明になぜC言語を使わないのです か?

A: この講義ではアルゴリズムの説明に疑似コード を使っています.これにはいくつかの理由があります.

  1. C言語は必ずしもAIプログラミングには向いていないし,AIのアルゴリズ ムを記述するのに特に便利ではないからです.

  2. この疑似コードはPASCAL風ですが,PASCAL言語はもともと教育目的に開発 された言語で,アルゴリズムを表現するのに分かりやすい単純な構造をもって います.裏を返せばあまり実用的ではないかも知れませんが,少なくともアル ゴリズムを説明するのには便利です.他のプログラミング言語に慣れている人 なら,疑似コードを特定のプログラミング言語に書き直すことはそれほど困難 なことではないでしょう.

  3. 特定のプログラミング言語を使うことで,その言語に不慣れな学生が困る ことがないようにという配慮もあります.実際にC言語のプログラムを使うと なると,C言語の細かいテクニックを使うでしょうし,また一般にプログラム が大きくなります.疑似コードでは,コード的に複雑な部分は自然言語で記述 することで,アルゴリズムの明瞭性を向上させているわけです.

Q: なぜ説明に英語を多様するのですか?

A: 講義では,英語の概念には可能な限り日本語の対応する言葉を対応付ける ようにしています.英語を多様することにはいくつかの理由があります.以下 の理由は人工知能だけでなく計算機科学/計算機工学一般に言えることです.

  1. 人工知能はもともとアメリカ合衆国で生まれた学問です.様々な概念や 手法に名前が付けられていますが,多くの場合,名前はその特徴を表していま す.例えば "breadth-first search" のようにです.これは日本語では「幅優 先探索」と訳すのが最も適切ですが,教科書によっては他の日本語を使うこと で概念の説明が少し曖昧になっているかも知れません.
    元の英語に厳密に対応する日本語の言葉や概念があればそれを使いますが,日 本語での用語が怪しい場合は原語の英語を使う方がよっぽど良いのです.
    学術の世界ではよく見られるのですが,まったく意味不明な日本語訳をわざわ ざ使っている場合があります.こういったことは「百害あって一利なし」だと 私は思います.

  2. 人工知能の過去の主要研究成果は,必ずと言ってよいほど英語の文献になっ ています.また,最先端の研究や技術は,ほとんどの場合,英語の論文で最初 に発表さる傾向にあります.将来,人工知能の論文を読もうと思ったり,最先 端の技術に触れようとした場合に,人工知能の概念や手法を英語で理解してな いと,とても困ったことになるでしょう.

  3. 将来,人工知能を含めた計算機科学の先端的な分野で活躍しようと思った ら,英語圏の人々と交流することは避けられないでしょう.これらの領域にお いては,日本の研究/技術レベルはかなり高いですが,世界的に活躍できなけ れば,自分のやったことの真価を本当に問うことは難しいと思います.そのた めの基礎的な知識付けだと思ってください.

  4. 講義でも触れたように,人工知能研究の一つの目標には「知的なシステム を作る」ということがあります.ほとんどの場合,ソフトウェアを必要としま す.プログラムは日本語では書かないので,例えば何かの関数名を決める場合 など,英語を使った方がコンパクトで分かりやすいでしょう.
    自分の作ったプログラムを他人に公開して自分の作品を広く知ってもらおうと 思った場合,仮にasciiで書かれていたとしても日本語の用語が用いられてい たら意味を理解出来るのは日本人だけです.世界中にプログラミングを理解出 来る人がいるのに,それは大きな損失ではないかと思います.

...Return