読者です 読者をやめる 読者になる 読者になる

simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

演繹的思考をするAIについて考えてみる

タイトル、どんだけ考えるんだよと突っ込みたいですが

どうも我々はひとり残らずどんなときも推論を続けながら生きているみたいなのですよ。
その推論には大きく2つに分類する見方があって、今日はそれをさらっと紹介して
その発展について考えてみたいと思います。

どんな推論であれ、抽象的、具体的分類について言及しているとのことで
例えば、「人は死ぬ」「ソクラテスは死ぬ」だと「人」と「ソクラテス」どちらが抽象的でどちらが具体的な分類をしているかというと
人の方が抽象的で、ソクラテスの方が具体的な分類になります。(ごめん、流石にこれできない人とは会話できないわ)


抽象的なことを理由に具体的なことを推理するのが演繹的な思考で
具体的なことを理由に抽象的なことを推理するのが帰納的な思考だそうです。
(思考です。)

演繹的思考:人は死ぬ、ソクラテスは人、ゆえに、ソクラテスは死ぬ
帰納的思考:ソクラテスは死ぬ、ソクラテスは人、ゆえに、人は死ぬ

演繹的思考で証明できないことは、前提となっている「人は死ぬ」という事象
帰納的思考で証明できないことは、結論として導いた「人は死ぬ」という事象

証明できない事象は同じ
前提と結論とあべこべなのが演繹と帰納の違いということで
演繹は抽象度の高い事象を使って、具体的な事象の推理を行うことで
帰納は具体的な事象をつかって、抽象度の高い事象を推理することです。

さて、ここで演繹的思考をするAIを作るとしたら、何から始めるかを考えていきたいと思います。

ある事象を分類する方法が2つ以上あるとき、比較して抽象的分類なのか具体的分類なのか
白黒はっきりつけることがまず、求められることがわかっています。

例えば、カラス、と、鳥
今そこにいるカラス、とカラス
比較する分類により、時に具体的な分類として認識したものは、次の瞬間、抽象的な分類となったりする。
これを判断するにはどうしたら良いのでしょうか?

考えている途中でAIについて詳しそうな人にアドバイスを求めたところ
フレーゲの言語記号論とLogic Theoristを調べてみたらどうかとのことだった。

フレーゲの言語記号論について調べてみました。
世の中の事象をすべて記号で表そうとする試みだったかな、人の心の中の「なんとなく」を遠ざけるやり方。

しかし、世界はすべてつながっていて、境界を設定すると矛盾が生じるため、記号で表すことには失敗するらしい。
知能は世界を理解するために、もっともらしい境界を設定して記号を与えているにすぎず、正しく切り分けている記号など一つもなかったという話。
そんなはずはない!と思うのですが、例えば自分(我)という記号はいったいどこからどこまでなのかを、はっきりくっきり切り分けようとすると、簡単に矛盾した表現ができます。
例えばこのブログの文章が自分と言えたり、言えなかったりで議論に決着が着くことはありません。
いったいどこからどこまでが自分なのでしょうか?
ということで、思考や説明するときに都合が良いから世界を切り分けて記号を与えている、ということだそうです。

Logic Theorist の方はオペレータと呼ぶ操作を限定して、初期状態と目標状態を設定し
目標状態のひとつ前の状態を、目標に設定し
そのひとつ前の状態のひとつ前の状態を目標に設定し
と繰り返していき、初期状態から次の状態へどう動かせば良いのかを当てるというものです。
これは世界を人間が与えることで、オペレータの範囲内では矛盾の生じない記号で世界を切り分けることが可能となっているので
ある仕事が成功する条件は、それ、それを実行する条件はこれ、今すぐある仕事もそれも出来ないけど、これならできる
じゃあ、これを行うという論理思考で目標を達成するというものです。

と勝手に「フレーゲの言語記号論」と「Logic Theorist」という記号から、それらしい説明ができるような状態に私の知能は変化したわけです。

アドバイスの調査はこれくらいにして
哲学に話が振れたので、有名なアリストテレスの手法で、観測できる事象を何でもかんでもカテゴライズしていくことを考えてみました。

鳥とカラスとすぐそこにいる動物であるカラスを例に考えてみます。

あらかじめ、鳥を動物というカテゴリーに入れます。(知っている人が教える)
次に、カラスを鳥というカテゴリーに入れます。(知っている人が教える)
このとき、カラスは動物というカテゴリーに入ります。(教わった方が勝手に)
目の前の何かを動物とカラスというカテゴリーに入れます。(知っている人が教える)
このとき、目の前の何かは動物であり、カラスであり、鳥であり、動物であると認識されます。(教わった方が勝手に)

教わった方は気づきます。そして問います。
目の前の何かは動物であるとのことだが、カラスは動物であるし、この2つの「動物」は同じなのか?と
同じ動物を指していると、知っている人が教えます。
(このフェーズは、無くても良いかも)

さて、教わった側に質問をします。
鳥とカラス、どちらが具体的かと

教わった側は鳥とカラスのカテゴリを調べ、カラスが鳥に属していることに気づきます。
比較するに妥当な2つであると判断します。
そこで回答します。
カラスは鳥の一種だから、カラスの方が具体的であり、残った鳥の方が抽象的であると

続いて、目の前にいる動物とカラスはどちらが具体的かと問います。
どちらもカラスなので比較は妥当と判断します。
目の前にいる動物はカラスのカテゴリーに属しています。
そして回答します。
目の前の動物の方が具体的で、カラスの方が抽象的であると

比較対象が自分のカテゴリーにある場合、カテゴリー側が抽象的と判断するロジックです。

知識をカテゴリー分けしながら、各カテゴリーの属性を学んでいくことで
鳥は飛ぶと学んだときに
カラスは飛ぶと推理できれば
これは演繹的思考です。

こんな感じで知識を構築するプログラムを書けば
ある学習レベルに到達すれば、「右手にバラを持った人がいる」という文を与えた時に
「何その文章?バラの棘が手に刺さって、怪我しませんか?」
と返すAIが作れる気がします。

ふと、ここに書いたことがひらめいたのでこんな記事を書いてみました。
ということで、作ってみたくなったので作ってみましょう。