人工知能に(擬似的な)感情を持たすことが出来ないだろうか?そんなことを考えて見ました。人工知能愛好家(Artificial Intelligence Hobbyist)ポンダッドです。

脳の色のはなし

かれこれ3年ほど前になりますが、こんなブログ記事を書いたことがありました。

脳の色のはなし

以前勤めていた会社で受けた研修が非常に印象深かったので感想をまとめたものです。その後、折を見て調べていたのですが、どうもこの感情モデルはハーマンモデルと呼ばれる脳の感情モデルが元になっているようです。

その後、ピクサーの映画インサイド・ヘッドでもそのモデルが使われていました。まとめてみるとこんな感じです。

映画で言うところの「Disgust(ムカムカ)」がちょっと異なりますが、概ね4色(ないし5色)で脳の感情モデルを表すとこんな感じになると思います。

大脳辺縁系は身体に直結してより具体的な反応になり、大脳新皮質はヒトが進化する中で大きく発達した部分になるのでより抽象的な反応を示します。

日本古来の言葉でも「喜怒哀楽」と言う言葉がありますのでそれに当てはめて見ました。ポイントになるのはその感情推移の順番です。

「哀→喜」や「怒→楽」の様に対極にある感情へダイレクトに変化することは出来ません。図で表すとこんな感じです。

これは脳の構造上左脳と右脳を繋ぐ「脳梁」を経由するためだと思われます。

感情の推移としては「喜怒哀楽」は自然な変化に思えますが、逆の「楽哀怒」へと向かう感情は外部からのストレスなどが原因の様に思います。

さて、この様な感情推移をさらにわかりやすくまとめた感情モデルがあります。それが「プルチックの感情の輪」です。

プルチックの感情の輪

以前人工無脳を作った時に参考にさせてもらったサイト人工無脳は考えるの中で紹介されていたのを見て知りました。

上の図では緑の感情を「Calm(安定・楽・オダヤカ)」で示しましたが、この状態から「哀(不安定・哀・カナシミ)」経由で「Angry(怒・イカリ)」に向かう際は大きなストレスが掛かっているため、「Fear(怖・ビビリ)」や「Disgust(ムカムカ)」などの感情を経由して変化します。

ハーマンモデルを更に細分化したしたものと見ることも出来ますね。

さて、ではこれらの感情の変化は何故起きるのでしょうか。現在では内分泌ホルモンによりその変化が起きることが分かっています。

深層学習を利用した感情認識エンジンの開発も進んできている様です。以下はPepperの感情認識エンジンを開発された東京大学大学院特任講師の光吉俊二氏の論文です。

心を定量計測する技術 - AGI

複雑なモデルを自作するのは難しいため、まずは人工無脳プログラムを参考にPythonで感情モデルを作ってみることにします。

恋するプログラム—Rubyでつくる人工無脳

こちらの書籍を参考にします。

感情モデルを考える

人工無脳「ノビィ」の感情モデルを参考に、こんなモデルを考えてみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import time
def action(input):
MOOD_DOPAMINE = 5
MOOD_NORADRENALIN = -5
if input == "joy":
return MOOD_DOPAMINE
elif input == "fear":
return MOOD_NORADRENALIN
else:
return 0
def main():
MOOD = 0
MOOD_MIN = -15
MOOD_MAX = 15
MOOD_SEROTONIN = 0.5
EMOTION = ["LIKE","DISLIKE"]
while True:
inputs = input('> ')
if MOOD >= 0:
MOOD = MOOD + action(inputs)
MOOD -= MOOD_SEROTONIN
if MOOD > MOOD_MAX:
MOOD = MOOD_MAX
print(EMOTION[0], MOOD)
elif MOOD < 0:
MOOD = MOOD + action(inputs)
MOOD += MOOD_SEROTONIN
if MOOD < MOOD_MIN:
MOOD = MOOD_MIN
print(EMOTION[1], MOOD)
if __name__ == '__main__':
main()

擬似的に「ドーパミン」「ノルアドレナリン」「セロトニン」を分泌させることで感情を変化させます。

試しに「擬似ドーパミン」joyを分泌させてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ python app.py
> joy
LIKE 4.5
>
LIKE 4.0
>
LIKE 3.5
> joy
LIKE 8.0
> joy
LIKE 12.5
> joy
LIKE 15
>
LIKE 14.5
>
LIKE 14.0
>
LIKE 13.5
>

joyコマンドを実行することで、感情がプラスに変化します。ここではjoyが一つ与えられるたびに擬似ドーパミンが+5分泌されます。

感情が必要以上に活性化しすぎない様に、活性化を抑える働きをする分泌ホルモンにセロトニンがあります。ここでは時間経過に合わせて擬似セロトニンが-0.5分泌されて、過剰な興奮を抑えます。

ここでは感情の上限を15に設定しました。本当は擬似ドーパミンの分泌量に合わせて擬似セロトニンの分泌量を増やす方が処理的には正しいかもしれません。

さて、続いて「擬似ノルアドレナリン」fearを分泌させてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ python app.py
> fear
LIKE -5.5
>
DISLIKE -5.0
>
DISLIKE -4.5
>
DISLIKE -4.0
>
DISLIKE -3.5
> fear
DISLIKE -8.0
> fear
DISLIKE -12.5
> fear
DISLIKE -15
>
DISLIKE -14.5
>
DISLIKE -14.0
>
DISLIKE -13.5
>

「擬似ドーパミン」joyとは真逆の反応になります。感情は「LIKE(ハーマンモデルで言うところの緑-Calm)」から「DISLIKE(同じく赤-Angry)」へと変化します。

「擬似セロトニン」の分泌により時間経過とともに平常に戻ります。

まとめ

極々簡単なものですが感情モデルが出来ました。次回はこれを自作ロボットに組み込んでみようと思います。(つづく)

追記(2017/04/09)

ロボットに上記の感情モデルを組み込んでみました。

Raspberry Pi 人工無脳ロボットに感情モデルを持たせる - Qiita