自然非言語処理第２０日目：コミュニケーションにおける思考とは

![thought.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/13733126-abb9-ef86-fff1-510e1ede34c6.jpeg)


「思考」と言われると、何を思いつきますか？

囲碁や将棋ですか？
テストの問題を解くことですか？
パズルを解いているときですか？
レイトン教授シリーズですか？

*僕はレイトン教授よりも助手の声優、堀北真希が大好きです*

**はい**

我々は日々重大な問題や些細な問題に直面するとき、
その問題を解決しようと思考します。

たとえば、その問題は人生の選択肢であったり、
その問題は囲碁の次の一手であったり、
その問題はビジネスプランを企画することもあるでしょう。

しつこいようですが、広辞苑によると、コミュニケーションとは、

>社会生活を営む人間の間で行われる知覚・感情・思考の伝達

ということらしいので、今回はコミュニケーションにおける思考について考えて行きましょう。

# そもそも思考とは何か
そもそも思考とは何かを制限しないと議論が発散しそうなカンジがするので、この記事では思考とは何かを決めておきましょう。
というのも

>「思考」は従来論理学の研究分野であり、 「定義はさまざまで、すべての人が合意するような定義は見当たらない (『ブリタニカ国際大百科事典. 第2版改訂』) とも解説されるように、多様な側面を持っています。

ということらしいのです[1]。

みんなが納得しそうな思考といえば、問題解決だと思います。そこで今回はこの問題解決のみに絞ります。
問題解決とは、問題を設定し、その答えを導くことと定義します。問題を解決することの例には、読む、書く、計算する、ゲームをする、他人と交渉するなどがあります。
この問題解決に役立つ手段としては推論があります。推論には多くの方法がありますが、論理学においては主に演繹、帰納、アブダクションの3種類があるとされています。
そこで、本記事では思考を**「問題解決における演繹による推論」**としてさらに絞って議論を深めていきます。

#問題解決における演繹による推論とは
論理学による演繹はソクラテスの時代から研究が行われてきました。
最もシンプルな論理学による思考はif-thenルールです。
もし、真偽がわからない命題Bがあったとして、命題AならばBであることことが正しく、Aが正しいのであれば、Bは正しいと推論することができます（ちなみにモーダス・ポーネンスという立派な名前がついています）。
わざわざ数学っぽく書くと以下の通りとなります。

```math
\begin{eqnarray*}
A \rightarrow  B &=& True \\
A=True&を&代入 \\
True \rightarrow  B &=& True \\
\therefore B&=&True
\end{eqnarray*}
```

では、有名な命題「ソクラテスは死ぬ」の導出はどうしたらいいのでしょうか。*実は情報系の論理回路で使う命題論理学では厳密に言うと解けません*
そこで「すべて（∀、Allの逆さ文字）」や「ある（∃、Existの逆さ文字）」といった量を取り扱える数理論理学を導入します。また、数理論理学の導入に伴い、述語記号、関数記号なるものも導入します。述語記号とは「f(a)をaさんは生きていると定義する」のように質を取り扱える記号のことです。一方、関数記号とは「f(1,1)は1+1と定義する」のような量を取り扱える記号のことです。
では、数理論理学で「ソクラテスは死ぬ」を導出しましょう。（なお、紀元前3世紀頃に生きていたガレノスは特殊な論理学を作って解きました）

まず、$Human(x)$を「xは人間である」、$Mortal(x)$を「xは死ぬ存在である」、$s$を「ソクラテスという存在」と定義します。
次にモーダス・ポーネンスを使うことを考え、次の論理式を作ります。（ちなみに$\to$と$\models$は論理的には同じで、単に$\models$の右側が論理的帰結ですよという意味になるだけである）

```math
(∀x.(Human(x) \to Mortal(x)) \to Human(s)) \models Mortal(s)
```

ここで、今のところすべての人間は死んでいるという事実から$∀x.(Human(x) \rightarrow Mortal(x))$は真であると考えられます。
次にソクラテスは実在した人間だということがいろいろな書籍からわかるため、$Human(s)$は真であると考えられます。
すると、最初の議論と同じように「$Human(s) \to Mortal(s)=True \to Mortal(s)=True$」となることが分かります。
よって、ソクラテスは死ぬ（存在である）＝「$Mortal(s)$」ことが真であることが導かれます。
（モーダス・ポーネンスを使って、一気に解いてもいいんですけどね）

#人間における演繹による推論の脳内のメカニズム
それでは人間の脳内ではこの推論をどのように処理しているのでしょうか。
**神経科学を調べる限り、ぶっちゃけかなり謎のままになっています。**
神経科学においてわかっていることは、思考中は前頭前野が一時的な記憶を管理しているらしいということです。この思考中に使われる一時的な記憶をワーキングメモリといいます。統合失調症患者は、ワードサラダなどの現象が見られる通り、思考することが困難になっているとされます。そこで神経科学では統合失調症の患者と健常者の患者の脳を比較して思考について研究しているようです。統合失調症患者はワーキングメモリの管理場所が健常者と異なっていたり、神経細胞の形がトゲトゲでなかったりするそうです[2]。それぐらいしかわかっていません。

#機械における思考
機械に思考させることははるか昔から行われてきました。現代のコンピュータでは命題論理学が基盤となっています。このため、論理学ととても相性が良いです。すべての演算はNANDという演算のみで記述することが可能です。

## 論理学による記号的思考
機械も人間と同じように数理論理学による推論が行なえます。この数理論理学（厳密には一階述語論理学）で記述された命題を導出するソフトウェアが*SATソルバー*です。他にも**Prolog**と呼ばれるプログラミング言語を使うことも（まれに）あります。ちなみにパズルの一種、数独は数理論理学で表現できるため、どんな初期条件でもSATソルバーにより一瞬でとけます。逆にSATソルバーで解けない場合はそもそも解がないという結論になります。~~そのせいか数独を解いている人は「SATソルバー使えばいいのに何が楽しいのだろう。時間の無駄じゃないか」とか思ってしまいます~~

## 論理学が持つ問題
しかし、演繹は万能ではなく、さまざまな問題を持っています。記号が多くなれば多くなるほど、計算量が多くなってきます（c.f. 組合せ爆発）。また、記号を覚えれば覚えるほど、問題に関係ある記号と関係ない記号を区別するだけで無限の演算が必要となります（c.f. フレーム問題）。これらを回避するには、たとえば、論理式を厳密に演繹するのではなく、推論方法をグラフ理論による探索に置き換え、乱数を利用して探索するなどの処置が取られます（c.f. モンテカルロ木探索）。

実は演繹そのものではなく、論理学そのものにも問題はあります。論理学はきっちりしているように思えますし、論理学で証明することができれば、たしかに命題を正しいといえる気がします。しかし、*そもそも証明することができない命題*が論理学に存在することが*論理学自身により*わかっています（c.f. ゲーデルの不完全性定理）。また、論理学でないにしろ、現代のコンピュータの原理では任意のプログラムが無限ループしないことを保証することができないとしています。（c.f. 停止性問題）。いずれも同じ推論方法を用いて証明されています（c.f. 対角線論法）。

# 実装:アルミ缶の上にあるみかん
さて、思考とPrologの関係がわかったところで、今日はとてもくだらないことをしようと思います。
一般物体認識の結果と位置の関係をもとに画像から事実関係を読み取り、私達が考えた事実関係は機械も同じように考えているのかを確認するプログラムを作成します。

# 実装するアプローチ
Prologのプログラムを構成する要素は３つ[4]です。
>- 事実：物事の事実を宣言すること
>- 規則：物事との関係に関しての規則を定義すること
>- 質問：物事との関係について質問すること

まず、今回の事実は「写真内にある物体は機械にとっても人間にとっても存在する」としましょう。
たとえば、写真内にみかんが写っていた場合、exists(orrange)=Trueとなります。
つぎに、規則は物体の位置関係を**（中略）**

最後に質問とは、存在する物体の位置関係について聞くようにしましょう。
?- position(exists(X),exist(Y),Z).

# 動作確認
**（時間があったらね）**
　
#感想
我々が与えた写真から、機械がどうでもいい推論を披露してくれるようになりました。
こうやってコミュニケーションにおいて思考が使われると思うと、なんだか書いていて*くだらなくなってきました*。

# まとめ
本記事ではコミュニケーションにおける思考の例として、問題解決における演繹による推論を題材に思考の中身を説明してきました。
推論にはまだ帰納やアブダクションがあり、それぞれについてもまた実装があります。さらにいうと、グラフ理論による探索などもあります。
ですが、話が長くなるので、今回は範囲外とさせていただきます。

# 参考文献
[1] http://www2.aasa.ac.jp/org/lib/j/netresource_j/pf/pf_thinking_j.html
[2] カンデル神経科学
[3] http://www2.yukawa.kyoto-u.ac.jp/~kanehisa.takasaki/edu/logic/logic5.html
[4] https://qiita.com/ShunIchikawa/items/6449f492dc38a7201162
[5] http://fuchino.ddo.jp/kobe/predicate-logic-ss11.pdf