強いAIの実現方法 ~実用化に向けた実践的な作り方~

強いAIの実践的な作り方を検討しています。メイン記事に主張をまとめています。人工知能関係の書評もあり。なお、今後、任意団体として活動してみたいと考えており、手伝ってみたいという方は是非ご連絡下さい。詳しくは、メイン記事の7を参照下さい。

脳モデルの構造について(その2)

 最近pythonネタが続いてしまったので、原点に立ち戻り、考えを進めたい。

 もともとのブログの趣旨は、外界及び身体モデルを作って、あとは脳モデルをいろいろ試していけば良いということだった。しかし、身体モデルを作る場合でも、直結する脳モデルの構想が無いと、脳モデルへの出力の形をどうすれば良いのか分からないので、具体的な実装が進まない。

 身体モデルの構成要素は、大まかにはセンサ、アクチュエータ、ステータスに分ける。狩猟時代の人間レベルを目指すものとして、

  • センサ
    視覚、聴覚、味覚、気温…
  • アクチュエータ
    摂食、移動、発声、攻撃、生殖活動…
  • ステータス
    性別、年齢、体力、疲労、空腹感、睡眠…

 等を作るのは、オンラインRPGのエージェントを作るのと似たような形になるが、出来るであろう。

 これらの「身体」と「外界」があるとして、問題は、
「未知の状況において、知性に基づいた行動をとるにはどのような脳モデルが必要か」
ということに集約される。いくつかのパターンに分けて考える。

  1. 強化学習
     人間は一見考えて行動できるようにみえるが、全て学習の結果であるとして、DQN以降の高度な強化学習で実現できるのでは、という説。ただし、強化学習が汎用人工知能を実現したという話は出て来ておらず、汎用人工知能実現のためにDeepMind社を立ち上げた天才Demis Hassabisでさえまだ辿り着いていない。
     本質的に、プログラムされたことの中から何かをやってみる、やってみて報酬で学習していくという手法であり、未知の状況においてどうすれば良いか考える、ということは、少なくとも強化学習だけではできないであろう。

  2. 世界モデル系
     なにかの行動をとる前に、こうしたらどうなるかを脳内でシミュレーションして、その結果をみて判断するということが行われているのかもしれない。一部で行われている、世界モデルを脳に構築する、ことで、このような手法が取れるであろう。ただし、フレーム問題の最後にひっかかると思う。すなわち、選択可能なあらゆる行動についてシミュレーションをする必要が出てくる、ということだ。
     あるいは、そのシミュレーションを強化学習でやっておけば、いつもあらゆる選択肢を試すということは必要ないのかもしれない。ただし、行動の選択肢がプログラミング済みであるという話は残る。
     
  3. リアクティブ+言語型
     
    センサ入力に対する反射的行動が生物の基本原理であり、人間も同じ原理にて動いているという原則を元に、言語能力も反射的行動であるとして、あらゆるセンサ入力に対しなにかをしゃべり、及びそれを自分が耳にしてまたしゃべるような形での行動を行わせてみる。会話で人間が喋る内容は実は反射的であり、口から自然と言葉が出てきているはずだ。
     誰かがものを投げているのを見ると、自分が投げる動作をする時に反応するニューロンが同じように反応すると言われているが、「Bがボールを投げた」とAに発声させることで、AがBの動作を理解したことになるのかもしれない。ここには、ソシュールが提言した言語の魔力が潜んでいる。すなわち、人は言語で認識する、ということだ。

     自分がしゃべり、それを聞いてまた自分がしゃべるのは、2台の対話エージェントが機械的に話を続けるのと似ている。ただし、普通の対話エージェントは、膨大な会話事例を元にこういう入力に対しては統計的にこう喋るのが良いという出力をしているので、身体と外界に対話が結びついておらず、会話に意味が無い。本ブログで提唱しているように、身体と外界モデルを用意した上であれば、意味を伴う会話に近づく。従来とは違った試みにはなるであろう。

     ただ、対話エージェントのように機械的にしゃべるのと、意味を分かってしゃべるのと間を埋めるには、まだ何かが足りていないと思われる。

     少なくとも、言語能力が無いのに知性があるという状況が想像できないので、言語能力自体は必要だ。言語能力“だけ”で知性が生まれるというものではなさそうであるが。

     
  4. 欲求ドライブ型
     いわゆる弱いAIは、プログラムされたことしか出来ない。ディープラーニング等の機械学習は、人間には手におえない複雑なプログラムを実現できる、いわば弱いAIの強力なプログラミング手法である。強化学習は、環境に対し、"予め用意された"行動選択肢から行動を選択し、報酬を評価することで自律的にプログラミングが進むが、学習のためにまず行動をしなくてはならず、やってみた結果を使ってプログラミングをしていく手法である。それらの既存スキームから離れ、プログラムされていないことをAIプログラムがやるにはどうすれば良いか(自己矛盾しているさまが面白い)。
     人間でも、どうしようかと考えこんだ時に、こうすれば良いんだとひらめくことがある。仕事をしていて良いアイデアが出た時に、なぜ自分はこれをひらめいたのだろうと考えると、必死に考えているからなのだが、解決したい、という欲求が裏にあるのではないかと思う時がある。すなわち、知性とは欲求であると。
     脳内には欲求以外にも報酬系があり、報酬系の報酬が高くなるように人間は行動しているだろうが、その報酬を高くするように行動を促すのが欲求であると思われる。欲求自体は動物にもあるので、欲求だけだけでは駄目であろうが、今まで上げてきた項(強化学習、脳内シミュレーション、言語能力)等と比べ、脳が自ら行動を起こす要素となっており、強いAIの実現にあたって、大きな役割を出来るのではないかと期待する。

  5. 意識型
     そもそも、強いAIの提唱者であるサール自身による強いAIの定義が「意識がある」ことなので、「意識」を再現した脳モデルにするべきなのかもしれない。ただ、意識ってなんだ?という話がまず出てくる。入力に対し反応する回路が動いているのか動いていないかの違いなのであれば、プログラムが動いている時点で意識がある、と言えるのかもしれない。別の定義で考えられるのは、自分が喋って自分で聞いてというループがずーっと成立している時かもしれない。
     逆に、サールが言いたかったことは、ブログ筆者上に書いた「プログラムされていないことが出来るプログラム」程度のことかもしれない。私自身は「意識」を意識してプログラミングしなくても良いと思っている。ただ、意識が有るがゆえなのか、人間がシングルタスクである、ということは活用していきたい。

  6. 全部のせ
     今まであげてきたもの全てを何らかの形で導入した脳モデルを持ったエージェントを作るべきなのだろうと思う。特に、欲求、言語能力、ミラーニューロン、強化学習。
     欲求は、強化学習にあたり行動の選択を絞る役割があるのではないか、等、創造の幅が広がる。あるいは、強化学習で評価を上げる、ということ自体が欲求なのかもしれないが。
     世界モデルを作って脳内でシミュレーションをすることは、「こうすればいいんだ」と喋ることと同じかもしれないので、積極的には取り入れない。

  7. 感情、クオリア
     良く、AIには感情があるのか、という話が出る。感情は、人間にとっては次に取る行動を左右するとともに、現状のステータスを(外からも)分かりやすくしたり、怒りの感情によって行動力を強化する、哀しみによって精神的に楽になる?等、人間の行動のなかで大きなウェイトを占めてはいるだろうが、知性、との結びつきがあるとは思えない。身体モデルを構築していくなかで、究極には辞書に載っている要素は全て実装していきたいので、何らかの形で導入することにはなると思う。
     クオリアは、そもそも定義が良く分からない。美しいという質をクオリアと呼んだりするようではあるが…。なにかを見て美しいと思うこと自体は、辞書にも載っており実装していきたい内容ではあるので、実プログラミング段階で実装方法を考えていけば良いと思う。


 まとめると、欲求、言語能力、ミラーニューロン等を意識して強化学習型のエージェントを作ってみるということになる。欲求と報酬系がある時点で、強化学習ではなくても良いのかもしれない。
 まだ根幹が整理しきれていないが、次回で、プログラム全体の構造が整理できるような気がする。

直感 Deep Learning を読んだ(その3)4章GAN

直感DeepLearning Python×Kerasでアイデアを形にするレシピ
Antonio Gulli 著 2018年 オライリー・ジャパン

 前回に引き続き、今回は4章のGANのうち手書き文字生成。GAN(generative adversarial network)は、本物そっくりの画像をAIが学習して作れるようになるというもので、ブログ筆者が最終的にやりたいことからは離れているがやってみた。GANの応用で、最新では実在しない人物画像等を作れてしまう。もはや写真があってもそれが本物なのか分からない時代になりつつある。
 サンプルプログラムはこちらも正常に動いた。テキスト記載通り、GITでkeras-adversarialというライブラリを追加する。また、こちらも訳注通り、kerasバージョンを2.1.2にしないと動かなかった。インストールしていたのは2.2.4だったので、pipで2.1.2に落とした。anacondaを使っているが、kerasは
condaでは駄目でpipでした。この本は、内容が高度だがちゃんと確実に動くところが素晴らしい。

 デフォルトでは100エポックだが、1エポックに私の環境では3時間かかる。手違いで途中で終わってしまったが、数エポックから先はあまり違いがみられないようだ。

 本書ではCIPHERでカラー画像を学習するものも紹介されているが、こちらはそれこそ90エポックぐらいしないと駄目らしいので諦める。

f:id:tomotomo47:20190331201629p:plain

0エポック

f:id:tomotomo47:20190331201651p:plain

2エポック

f:id:tomotomo47:20190331201712p:plain

4エポック目

f:id:tomotomo47:20190331201806p:plain

6エポック目

f:id:tomotomo47:20190331201827p:plain

8エポック目

 

直感 Deep Learning を読んだ(その2)3章CNN

直感DeepLearning Python×Kerasでアイデアを形にするレシピ
Antonio Gulli 著 2018年 オライリー・ジャパン

 前回に引き続き、今回は3章の畳み込みニューラルネットワーク。サンプルプログラムは、windows7、JupyterNotebookで正常に動いた。

 前回のニューラルネットワーク基礎でも対象にした手書き数字認識に対し、以下の構造のLeNetを試す。
 入力:28×28の手書き数字画像48000枚
 畳み込み:5×5のフィルターで20層に畳み込み→28×28×20
  ※28なのはsame指定のため
 プーリング:2×2を1→14×14×20
 畳み込み:5×5のフィルターで50層に畳み込み→14×14×50
 プーリング:2×2を1→7×7×50
 全結合:500個のニューロン
 出力:10個の出力層(0~9の数字なので) 

 

  細かい結果は異なるが、概ねテキストと同じ結果になった(識別率0.9915)。
 ただし、全結合ニューラルネットワークと比べ非常に時間がかかるようになった。1エポック(48000枚学習)に210秒程度を要する。10エポックで30分ぐらいかかる。corei5でGPUも無いノートPCでやっている訳ですが…

 時間を減らすために、畳み込みの層を、20→10、50→20にしてみる。時間は1エポックで110秒程度と半分になった。かつ、10エポック経過後の識別率は、学習データとは別の12000毎に対し、0.9915→0.9901とほとんど変わらない。層は多くなくても、CNNの効果は得られるのかもしれない。全結合のニューラルネットより識別率は明らかに高い。

 全結合の500個を250個にしてみたが時間は全く変わらない、識別率も0.9903で有意な差は無さそうだった。

 3つの方法について、TenorBoardで識別率グラフを出力した。グラフがオートスケールなので比べづらいが、最初の設定(全結合20、50)の方がほんの少し識別率は高くなっている。

f:id:tomotomo47:20190324184103p:plain

畳み込み20、50

f:id:tomotomo47:20190324184133p:plain

畳み込み10、20

f:id:tomotomo47:20190324184442p:plain

全結合250

 

 畳み込み層の数だけではなくて、畳み込みの形についても、大きさを変える、形を長方形にする等でも結果は変わるかもしれず、いろいろパラメータがありますね。

 

 手書き文字でなくて、10種類の対象が写っている60000枚のデータを分類する有名なCIFARにもチャレンジできる。こちらも正常に動き、おおよそテキスト通りの結果が得られた。ネットワークは、LeNetにドロップアウトを追加したもの、さらに畳み込みを1段増やしたものがある。ネットワークの図だけ載せておく。ドロップアウトを追加しただけでは、あと細かい設定が異なっているが、実行時間はLeNetとあまり変わらなかった。さらに畳み込みを追加した場合、さらに時間がかかった。

 

f:id:tomotomo47:20190324185248p:plain

LeNet

f:id:tomotomo47:20190324185356p:plain

CIFAR用(ドロップアウト追加)

f:id:tomotomo47:20190324185438p:plain

畳み込みを追加

シンギュラリティの夢

 プログラミング、人工知能関連の話題を書くブログといえば、Qiitaという選択もある。他の人も悩むようで、はてな、Qiita等で検索すると、どちらに書くべきかという記事がいくつかあった。それらを読むと、Qiitaのガイドラインは、

  • Qiitaには再利用性、汎用性の高い情報を集める

 なのだから、ポエム系は自分のブログで書こう、という記事があり、なるほどと了解した。ということで、当面はてなブログに書き続けることになります(^^)。

 今回は特にポエム系なので、「ひとりごと」カテゴリー。

 

 強いAIを作るというのは、人間の知性を工学的に実現することを目指すことだ。

 その人間の知性は、自己複製をするタンパク質が、複製を繰り返しているうちにシンギュラリティを突破したものだと言える。従って、コンピュータにシンギュラリティを越えさせようというのであれば、タンパク質が(利己的な遺伝子が命じるがまま?)どのようにシンギュラリティ越えを実現したのかというのを考えたくなる。
 人類が直立二足歩行を始めた境界はミッシングリングであり、直立二足歩行で重い脳を支えられるようになったということ以外、未だに良く分かっていないようだ。アーサーCクラークはシンギュラリティの訪れをモノリスで表現していた(と言えると思った。今となってではあるが。2001年宇宙の旅は古い小説・映画なので…)。

 他に知的な振る舞いをする生物の例として、蟻はマルチエージェントシステムであり、単機能のエージェントが多数集まることで高機能を実現している。自己複製をすれば良いという観点からでは、人間でも蟻でもゾウリムシでもタンパク質的にはなんでも良いのかもいれない。しかし、蟻塚程度の生成物では人工物とは比べ物にならず、シンギュラリティを越えたのは唯一人類である。

 なお、人間においても狩猟時代、農耕時代、工業時代、情報時代と段階がいろいろあるが、これは人間が使いこなせる道具が進歩したのであって、人間の知性の質はあまり変わっていないであろう。そのため、外界モデル、身体モデルを作る際にも、まずは狩猟時代を想定するので良いと思う。ちなみに、道具の進歩は加速度的であるが、ようはシステムの進化は加速度的であるというのがカーツワイルの著書の本質である。

tomotomo47.hatenablog.com

 

 別項で、具体的に脳モデルのニューラルネット入力層をどうするべきかについて考え始めているが、視覚についてはCNN、言語認識ではRNN?、エージェントアプローチ等種々のアルゴリズムがあり、それらを複合したニューラルネットを作るなど、どうするべきか良く分からない。特に、以下に迷いがある。

 作ろうALifeに載っていたエサの量や方向を探知して行動を決めるニューラルネットエージェントは、知性には遠く及ばないが、実は私の信じる「探知→行動」アルゴリズムに則っている。やっぱり「探知→行動」では駄目なのではないか。あるいはこれに視覚センサのCNNを通した認識結果を入力するべきなのか。しかし、ニューラルネットエージェントへの入力は1ニューロンに対するスカラー量であり、CNNでの認識結果など入力できないであろう。やはり、認識結果を判断するユニットが必要なのかもしれない。等。

 そこで、自分の立ち位置を今一度明確にしておこうと思った。

  • 生物は探知→行動のループで動作する(探知→判断→行動ではない)byブルックス
  • 生物が複雑な動作をするのは環境が複雑だからだ byブルックス

  この2つの原理が正しいことは譲らない。
 環境が複雑になっていけばエージェントはより複雑な動作をするようになり、いずれシンギュラリティを越えるであろう(脳の容量の担保があれば)。従って、外界モデル、身体モデルを通し脳モデルに複雑さを味あわせることが基本であることに変わりはない。


 環境には別個体のエージェントも含む。それらと会話することが環境の複雑さを大いに増すであろう。会話をすることも、探知→行動のループであり、「判断」は入らないのではないか。実世界で会話していても、実は自分の発言は自然に反射的に出てきて、考えていないことがある。また、そもそも人が何かを考えるということは、自分の発言を自分が聞くことではないか。
 ようは、判断という機能を脳モデルにはいれず、他エージェントや自分の発言も入力として、判断という機能が介入せずに会話を含む行動をとっていくことを目指したい。(End-to-Endと似たような形になっていくのかもしれない。自動運転で言われるEnd-to-Endは、あくまで判断をやらせようというものではあるが)

 なお、外界と身体を記号化する、というのがブログ筆者の主張の一つであるが、エージェントに会話機能を持たせるには、記号化された外界と身体に基づいた独自言語を導入するのが良いと思う。独自言語とは、トールキンのようであるが。

 結論としては、複雑な環境に応じ(会話を含む)複雑な行動をさせていく、それが十分複雑になれば、シンギュラリティを越えていけるのではないか、ということです。

 

 それにしても、おなかがすいたと誰かが発言したのを聞いたら、あいつはおなかがすいたんだなぁと理解するにはミラーニューロン系の仕組みが必要になる可能性が高い。エージェント内部に外部モデルみたいのが必要になってくると、ブルックスの言う「表象無き知性」に反するのであまり良いとは思えないのだが…。 

直感 Deep Learning を読んだ(その1)

直感DeepLearning Python×Kerasでアイデアを形にするレシピ
Antonio Gulli 著 2018年 オライリー・ジャパン

 作って動かすAlifeに続き、Pythonでのネットワーク実装のために参考とする。
 アナコンダをインストールしたWindows7で、正常に動いた。プログラムの苦労として、つまらないことで動かないのの解決に時間を要するので、わりとあっさり動いたのに感謝。

 表題にもKerasとあり、tensorflowのさらに上位のKerasを使うことで簡単にニューラルネットワークが組める。第1回として、1章「ニューラルネットの基礎」にて手書き数字認識を一通りこなした。たったの70行で28×28=784の入力があるニューラルネットを組めてしまい、Kerasのコンパクトさは異常。1章はまだディープラーニングでは無いが、3章のCNNでも100行しかない。

 1章の内容にしたがい、中間層が1層、隠れ層を2層追加(5行で追加出来る)、さらにドロップアウト層の追加をして、それぞれテキスト通りの結果を得た。また、学習回数を変える等で、自分で効果のほどを確認できる。手書き数字識別で95%程度の識別率になった。まぁ、数字なので10種類しかないし。CNNだと99%を越えてくる。

 TensorBoardの使い方が分かると、学習結果のグラフ化、ネットワークの視覚化が出来る。以下に3種類のネットワークの視覚化したものを載せる。これがネットワーク構造と言ってよいのかはちょっと自信が無い。

f:id:tomotomo47:20190321223929j:plain

中間層1層 Dense(全結合)

f:id:tomotomo47:20190321224009j:plain

隠れ層2層追加

f:id:tomotomo47:20190321224046j:plain

ドロップアウト追加

 

 なお、本書は、他のオライリーの「ゼロから作るDeepLearning」とかに比べやや敷居が高そうだが、取りあえず1章で行き詰ったのは2か所。

  1. アナコンダをインストールした状態で、JupyterNotebookで保存先のフォルダにいき、terminalからソースを実行したところ、以下のエラーが出た。
    ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
    これは、pipで一度tensorflowをアンインストールし、condaで再インストールしたら解決。こちらのページを参考にしました。

    qiita.com

  2. TensorBoardの使い方。
     起動時に指定しなくてはならないディレクトリ位置の指定が良く分からず。ターミナルで打ち込むコマンドが、最後のでないと駄目なのだが、これにたどり着くまでに1時間ぐらいかかったかも。こういうところで時間を取られる。
     ログディレクトリの名前が長いのは、本書がログファイルの保管場所を毎回時間で変えている設定のためで、ディレクトリがどんどん出来てしまうのでいまいち。TensorBoardも、ログファイルの場所をエクスプローラー風に探せるようにすれば良いのに。
    × tensorboard --logdir=./keras_MINST_V2_Thu_21_Mar_2019_08_27_18
    × tensorboard --logdir=./keras_MINST_V2_Thu_21_Mar_2019_08_27_18/
    ○ tensorboard --logdir=keras_MINST_V2_Thu_21_Mar_2019_08_27_18

身体モデルから脳モデルへの入力層の構造について(その1)

 脳モデルへは何らかの深層学習系を導入しなくてはならないので、各種のニューラルネットワークにおける入力層の構造から、採用すべき入力層の構造を検討する。
 この構造を決定するには、身体モデルにおいてどのようなセンサ入力があるか、また、脳モデルにどのようなニューラルネットを持たせるべきか、という2つの観点から決心しなくてはならない。

(1)身体モデルにおいてどのようなセンサ入力があるか

 こちらは、前回にざくっと書いたものがある。その中から、脳への入力に関連することのみとすると、

性別(男女)
体力→満足感~空腹感
摂食インタフェース→食べ物を食べる
視覚センサ→視界内の物体を認識
味覚センサ→味の好み
聴覚→人の発言の認識
気温センサ→快不快
疲労→疲労感(不快感)

 狩猟時代レベルの複雑さが再現出来れば良いと考えれば、まずは案外この程度かもしれない。
 ただし、身体モデルを複雑にしていくことを見据えると、当然拡張性を持たせなくてはならない。

 

(2)脳モデルにどのようなニューラルネットを持たせるべきか

 (1)のセンサ入力に対応してどのようなニューラルネットを持たせるべきか、全く分からない。そもそもブログ筆者の当初意見は、もし強いAIを作りたいなら、外界モデル/身体モデルをシミュレーション環境として充実させるべきであり、あとは脳モデルはいろいろ試せばよいだろうというものだった。いろいろ試せるところが、ロボットへAIモデルを実装して現実世界で動かし、なかなか上手くいかない従来の構成論的アプローチと比べた時の利点である。
 ただし、身体モデルを作る場合、脳モデルへの出力(=ニューラルネットワークの入力層)をどうするべきか、という議論がついて回るため、世にあるニューラルネットの入力層の構造を整理し、今回の目的に沿うためにどのような入力層構造が考えられるかの議論を進めていく。1回では絶対終わらない。

 

(3)ニューラルネットにおける入力層の事例

  1. 「作って動かすALife」より、エサ取りエージェントの入力構造
     別項で紹介した。
     入力層にはニューロンが9つあり、そのうち7つがエサのセンサになっている。センサの詳細な機能は明記されておらず、プログラムを追っても良く分からないところがあるが、エサの量、方向、距離が入力になっているであろう。
     これは、エージェントに対する外界入力がエサという1種類しかないから出来る構造である。もしこの方法にならうとすると、食べ物の種類が増えるたびに一連のセンサのセットを用意することになる。また、エサ以外の外界にある対象すべてについてセンサのセットを用意することにもなる。
     実装が簡単というメリットはありそう。

  2. オライリージャパン「直感DeepLearning」より、手書き数字認識CNN
     一般的な画像処理用のディープラーニングの場合、入力層は画素数だけのニューロンがある。本書の例では28×28=784個であった。以下、畳み込み→プーリングを繰り返していく。VGG16で16層等。
     ディープラーニングのすごいところは、畳み込み等によって、従来収束しなかった多数の中間層のニューラルネットが収束するようになったことだと思っていたが、畳み込みにより空間特徴を活かすことが出来る点であると、本書で再認識した。畳み込みは1次元でも使えるので、音声生成技術等にも応用されている。

  3. オライリージャパン「直感DeepLearning」より、RNN
     リカレントネットワークは、ブログ著者の原点の一つであるチャーチランド著「認知哲学」1995年、において、もう人工知能は実現出来たも同然だという中で紹介されており、人間の脳にも搭載されているため必須のアーキテクチャになるであろうと考えている。現状では、時系列データの処理に使われることが多く、本書の事例でも、文字列からの次の文字の予測等に使われていた。


 他の例も逐次リストアップしていくとして、身体モデルの視覚センサにCNNを用いることは無いであろう。やりたいことは、CNNを通してエージェントが何かを認識したとして、その認識結果を入力として、行動するエージェントである。すなわち、CNNの先のニューラルネットをどうするかを考えなくてはならない。人工生命というだけあって、1.の方がやりたいことに近いのである。1.の入力ニューロンに、CNNから出力される認識結果がつながっているというか。

 今回取り上げた、入力層の構造をどうするのかというのは、根本的な問題と思われるので、引き続き検討していく。マルチモーダルにすれば良い、というだけでは片付かないであろう。

作って動かすALifeを読んだ(後編)

作って動かすALife 実装を通した人工生命モデル理論入門(後編)

岡 瑞起、池上 高志、ドミニク・チェン、青木 竜太、丸山 典宏 著
2018年07月 オライリージャパン

 前編中編の続き。
 第7章は「ダンスとしての相互作用」というタイトルで、人工生命ならではの特長として、環境や人との相互作用の学習から生命性が立ち上がるということを述べている

 例として、現状の自動運転で行われているセンサー情報を元に運動出力を学習するEnd-to-End Learningは、「神からの視点」であり、認識したものとの相互作用という最も大事な部分が考慮されていない、としている。自動運転でも、個体と個体のやりとりから生まれるダイナミクスを学習しようという視点が無いとのこと。

 次に、本書の中核著者と思われる池上高志の研究で、相互の内部モデルをRNNで学習するエージェント群の研究が紹介されている。お互いのモデルをRNNで学習し、相手の行動を予測するとのこと。ただし、囚人のジレンマゲームにおいては、実際には有効と思われるしっぺがいし戦略が不安定になってしまい、良い結果は得られていないようだ。
 相手の内部モデルを推定するというのは、いわゆるミラーニューロンの動作を連想させ、人間も同様の機能を持っているのではないかと思えるだけに、さらなる研究成果を期待したい。「おにごっこ」では有意義な成果が出ている模様。

 続いて「トレヴァーセンの実験」が紹介される。赤ちゃんに対し、カメラ越しにリアルタイムに親が表情を変えてコミュニケーションをする場合は赤ちゃんは盛り上がるが、その時の親の様子をビデオに撮って流しても赤ちゃんは飽きてしまうというもので、人間の基本的な動作として相互作用があることが良く分かるエピソードである。

 本章の最後に、エージェントが相互作用するシミュレーションが紹介されるが、前章のエサ探しエージェントに、フェロモン分泌機能を付けたもので、正直物足りない。これは1970年代からある話ですし。マルチエージェントは、単機能のロボットが群れることで高機能を実現しようという概念で1970年代から研究されており、蟻の動作は、まさしくそのころからシミュレーションしている。一応、フェロモンを自分が出す場合と相手が出す場合で、相手が出す場合の方が相互作用っぽい効果は得られている。

 いずれにせよ、相互作用により環境が複雑化することは、ブログ筆者の構想する人工生命プログラムでも当然やることになる。メッセージのやり取りが必要になるであろう。

 最終の第8章は「意識の未来」というタイトルである。哲学者サールの定義した強いAIの要件が「意識」があることであり、意識のあるエージェントというのは目指すべきところである。本章にてそれが実現出来たということではない。
 前半は、デジャブとか、脳の物理反応と人間の意識の時間ずれの話であった。本書とは関係ないが、人間は首を動かそうとする時、視界を逆にする指令を脳から一次視野?に予め出しているため、世界がぐらぐらしない、という話をグレゴリーの「脳と視覚」という本で読んだ。いずれ必読書として紹介する。

 本章の後半は主観的な時間をロボットへ実装する必要があるのか、というテーマで、象徴的な話が語られているが、筆者の言いたいことは恐らくは、進化というプロセスで生み出されたエージェントは、シンプル最適なものだけではなく無駄や冗長性も残っており、その冗長性こそが創造性や意識の元になっているということだと思う。そして、人工生命(Alife)の意義は最適化のツールではなく、むしろ創造性を生成し、理解することにあるのだ。
 続いて、意識を持っていたり賢くものを知覚するようにふるまうロボットの例がいくつか紹介されたあと、最後、意識と生命性の議論に戻る。各エージェントが内部モデルを持つだけでは恐らく駄目で、現実世界とコミットすることも必要であり、そこにロボットから生命への跳躍がある、と書かれている(と思う)。「意識とは、未来を予測することではなくて、現実を生きるために否応なく力学系にはなれない、その時に生まれる心の形だと言えるかもしれません」とのことだ。
 ブログ筆者なりに最後のまとめを解釈すると、Alifeの研究は力学系(ルールに基づき状態が時間とともに変化していくシステム全般?)から始まっているが、進化のプロセスは多様性、無駄なところも残すようになっており、非力学的なところに意識の生まれる源があるかもしれない、ということかと思う。ALifeは進化を直接扱える分野なので、やはりALifeの黎明期からの目標である、エージェントを進化させることで知能を実現させるという方向で頑張って欲しい。

作って動かすALifeを読んだ(前編) 補足

作って動かすALife 実装を通した人工生命モデル理論入門

岡 瑞起、池上 高志、ドミニク・チェン、青木 竜太、丸山 典宏 著
2018年07月 オライリージャパン

 本書に載っていたプログラムが、OpenGL関係で自分の環境では動かなったので、第2章のgray_scott.pyについて、強制的にBMP画像を作って動画にしてみた。プログラムの本質的な部分はしっかり動いていて、記載通りの結果が得られている。今後本書のプログラムを動かす際は、見える化のところだけ改造が必要かなぁ。自分の環境がWin7かつ、米国で2012年に買ったPCそのままなので、固有の問題ではないかと思う。

 なお、はてなブログでは動画がUPできない、画像を連続して投稿できないというのを始めて認識した。不便である。ファイル容量が増えすぎないようにしているのだとは思いますが。仕方がないので、画像だけ1個1個UPした。動画がうねうねしていると気持ち悪くて面白いのですが。

 

f:id:tomotomo47:20190310195005p:plain

amorphous

f:id:tomotomo47:20190310195019p:plain

bubbles

f:id:tomotomo47:20190310195037p:plain

spots

f:id:tomotomo47:20190310195051p:plain

stripe

 

作って動かすALifeを読んだ(中編)

作って動かすALife 実装を通した人工生命モデル理論入門(中編)

岡 瑞起、池上 高志、ドミニク・チェン、青木 竜太、丸山 典宏 著
2018年07月 オライリージャパン

 前編の続き。第5章までは、自己複製を扱っていた。しかし、人工生命(Alife)の意義は、進化により機能を発達させることにあるため、第6章「個体の動きが進化する」では、自己複製が可能なモデルを前提として、進化の概念を導入する。思えば、人工生命が最初にメジャーになった時、進化をさせれば人間まで辿り着くのではないかという期待もあった。しかし、著者が5章で述べているように、1994年のシムズの研究「Evolving Virtual Creatures(進化する仮想生物)」以降、目立った仮想動物の出現には至っていないというのが現状である、とのこと。

 適応度地形なる概念が紹介される。適応度は、より高い適応度の動物が数を増やし、低い動物は数を減らすというもの。環境に応じ各生物が適応度が高くなる方向に進化することで、縦軸が適応度で、いくつも山があるような等高線がかけるようである。進化に従い複製の成功率が高くなったり個体数が増えることを「適応度の山を登る」と言う。人工生命の世界では重要な概念らしいが、結局は後付で生物の進化の方向を説明するものであり、本書の著者は否定的であった。むしろ、進化は高機能化とともに多様性を生み出す装置である、という考え方を述べており、ブログ筆者も共感する。

 また、OEE(Open-Ended Evolution)という概念があり、ある戦略が優位になっても必ずそれを凌駕する戦略が生まれ、進化は終わらないというものである。

 これらを背景に、実際にエージェントをGA(遺伝的アルゴリズム)で進化させるのが6章の中心である。GAは、15年ぐらい前に流行ったものですね。

 入力層に9つ、出力層に4つのニューロンを持つエージェントで、中間層(隠れ層)はニューロン4個1層のシンプルなニューラルネットワーク。隠れ層と出力層にはバイアスも入力できる。Kerasで実装。
 入力層のうち、実際のセンサ入力は7層、出力層のうち2つをコンテキストニューロンということで入力層にフィードバックさせ、入力層を7+2で9層としている。(コンテキストニューロンというのは、RNNの簡単なものと考えていいのかしら)
 実際の出力層は、速度と進行方向角度の2つを出力する。センサ情報を元に、エサが分布している空間において、エサをたくさん集められるエージェントをGAで作り出す。遺伝子数がニューロン間の重み係数で60個。
 紹介されているプログラムでは、個体数は50個、ランダムに1/3はそのまま残し、1/3は交叉、残り1/3は突然変異で進化させる。

 この実装内容はシンプルであるが、ごはんを知的に集めるというエージェントの目指すべき基本的な姿は自分がやりたいことと同じで、実装例として参考になる。
 最初この本を手にした時、実は、自分がやりたいことをこの本のプログラムベースで改造していこうとちょっと思っていた。しかし、入力層の数をもっと多く、中間層を多層にしたぐらいでは全く追いつかないであろうということも良く分かった。身体モデルにおいてセンサ入力の設計、出力の設計を固めることで、AI部分の実装をどうしていけば良いのかが見えてくると思われる。身体を複雑にしていくと出力層の数も増えていくのだろうけど、幸い意識はシングルタスクであり、上手く一つの行動をとるようにしていくことになるだろう。

 自分の環境ではグラフィックに問題があり、走らせるにしても魔改造をしなくてはならないので、実施例はまた機会があれば。

 また、本章ではTierraが少し言及されているが、インターネットで見る限り、活動は15年ぐらいまでに終わっているようだ。生物学者だったTom Rayの作ったAlifeの初期の代表的な研究成果であり、CPUの占有時間、メモリ占有量等を争うプログラムを生物の進化に見立てた。
 シムズにしてもレイ博士にしても、誰かが立ち上げた人工生命プログラムは、天才が残した成果から、その後が続いていないようにみえる。必要なのはオリジナリティと才能なのかもしれない。
 独自性という意味では、外界と身体を記号化すべきという自分の主張は、まだオリジナリティを失っていないように見える。

 なお、人工生命のプログラムとして、ARTILIFEというドワンゴの人工生命ゲームプロジェクトがあるようなので、ちらっと見てみたが、動きが気持ち悪かった…別記事にしよう。

作って動かすALifeを読んだ(前編)

作って動かすALife 実装を通した人工生命モデル理論入門

岡 瑞起、池上 高志、ドミニク・チェン、青木 竜太、丸山 典宏 著
2018年07月 オライリージャパン

 オライリージャパンの宣伝が目に入り、最近買ってないなぁと思って最近の新刊リストを眺めていたら、タイトルを見て、目次に身体性とブルックスのサブサンプションアーキテクチャのことが書いてあり、慌てて購入した。Amazonお急ぎ便をキャンセルし、本屋に出向きました。

 東大池上研究室を中心として、人工生命の最先端の状況を実践的に示してくれる。人工生命の本は、かなり古いものしか持っておらず、助かった。というか、自分がやりたいことが人工生命でもあるので、どきどきしながら読んでいる。

 第1編はチューリングサイバネティクス等の人工生命へつながる歴史。第2編はオートマトンライフゲームチューリングの業績の一つである、生物の印象的な縞模様、まだら模様を生成するメカニズム等。ライフゲームと言えば、emacsに入っている隠しコマンドで知っていた。アルゴリズムとプログラムの詳細な説明があり、実践的で分かりやすい。

 第3編は個の形成と自己複製について。厳密な自己複製では無く、緩い自己複製を行うことで逆に環境に対しロバスト性を有することが出来るとのこと。細胞膜を受動的に生成する仕組みが単細胞生物としての個を確立しているという指摘が面白かった。

 第4編は群知能。実はブログ筆者の20年以上前の卒論も、マルチエージェントシステムでの強化学習による最適パターンの自己創発というもので、群知能は昔から関心がある。本書では、ボイドモデルの紹介に多くのページをさいている。また、群知能が大型化することでイノベーションが生まれやすいという見解が述べられている。人間の創造性が集団知にあることを示唆しており興味深いとのこと。

 第5編が、身体性とサブサンプションアーキテクチャである。なんとなく、サブサンプションアーキテクチャで高層ほど高度な判断を行うみたいな記述があり、ブログ筆者とは見解が異なる。身体性について、ブルックスが述べていること以外のことで述べられているのは、脳と身体が共に進化する共進化という概念である。ブログ筆者としては、ブルックスの意見から導きかれることは別のページではっきり述べているので、ここでは繰り返さない。付属のpyプログラムで、サブサンプションアーキテクチャを実装して試せるのが大変ありがたい。

 前半はここまで。第6編以降に進化等も含めた複雑なALifeの最新状況が語られるので期待したい。

 なお、本書のpyを動かそうと思って、初めてpyにふれた。ブログ筆者はC言語の使い手なので、行列の扱いが簡単になり便利と思いきやファイルの書き出しに苦労するなど、さすがに慣れないと違和感がある。pythonに慣れるべきなのだろう。
 また、Windows7で使ってみたが、本書のプログラムではVisual関係でエラーが出て、結果のビジュアル表示が出来ない。救援を求む。以下がエラー内容。

f:id:tomotomo47:20190303021323p:plain