強いAIの実現方法 ~深層人工生命の研究~

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

深層人工生命 -自己組織型深層サブサンプションアーキテクチャ

 本エントリーでは「深層人工生命」なる概念を提案する。詳しくは「自己組織型深層サブサンプションアーキテクチャ」である。
 「深層人工生命」は、ありがちな名称であるようにも思うが、検索した限り「深層人工生命」「DeepALife」は引っ掛からなかった。ドワンゴが過去に「超人工生命」というワードを使用しているが、深層強化学習を搭載した人工生命であり、本エントリーで目指す深層ネットワークを使用した学習は強化学習では無いため、関係ない。
 今後世の中でこの「深層人工生命」なるワードが目に触れるようになったら、検索した限り、本エントリーが最初である。

 強いAIを構築するための提案アプローチで、特に重要なものは以下の3つである。

  • 知能は、外界、身体、脳の相互作用で構成される
  • 探知→行動を原理とする
  • 十分に複雑であること

 このアプローチにおいて、外界モデル、身体モデルの構築は実作業として実行可能であるが、脳モデルについては、今までは解に至るようなアイデアが無かった。
 そもそも、「構成論的アプローチを、ロボットを使わずソフトウェア上でやるべき」というのが新規性でありモチベーションであったので、脳モデルについては、外界モデル、身体モデルを作った上でいろいろやってみる、というのが当初の考えであった。

 このエントリーにおいては、新しく、脳モデルについても提案を示す。人工生命において、脳部分に深層ネットワークを導入し、特に、コホーネンネットワークのような自己組織型教師無し学習によるサブサンプションアーキテクチャの構築、というものを目指す。

 

 以前のエントリーで、原理検証プログラムでは、食べ物と外敵がいる外界モデル、空腹、移動等を再現する身体モデルで脳モデルを動かしてみると書いた。そのような環境で強いAIの萌芽を見出すには、お腹が空いたら食事を探しに行くだけではなく、蓄えがあるから明日取りに行けばいいやみたいなことを、事前のプログラム無しに自分で思いつくべきである(リスは冬に備え、秋に木の実を蓄えるらしいですが)

 これは、強化学習では成立しない。強化学習は、やってみて評価するという枠組みであり、過去の経験をもとに最適解で行動する、のは、「思いつく」ということとは別であろう。

 では、どうすれば良いのか。

 考えているうちに浮かんだのは、イメージではあるが、無数の選択肢の中を深く沈んでいき、その中でこうしよう(例えば「明日取りに行こう」)と決めることである。選択肢は、RNNように短い時間のループ、長い時間のループ、長短のループが積み重なっている。その中で、重要な決断をして、それに従って行動していく。人間は基本的にシングルタスクだし(歩きながら考えたりも出来ますが)。

 この、長短のループが積み重なっているというのは、実は他で聞いたことがある。そう、サブサンプションアーキテクチャ(SA)だ。

 SAでは、反射的な動作を積み重ね、より長期的、高度な判断を行うアルゴリズムは上の方に重なっているというイメージであった。ただし、SAでは高度な知性を実現することは出来なかった。なぜか?

 その答えは、今なら分かる。ループをプログラミングしていたからである。

 SAは、探知→行動というループにこだわり、間に入る「判断」(人間にプログラムされる)をループから外すことで、プログラミングされた動作をするだけのロボットとは異なり、環境に応じた豊かな動作を得ることが出来た。ただし、肝心のループの積層構造はプログラミングに依っており、結局、判断ループを持ち込むという、古典AIの罠に陥っていたのではないか。弱いAIはプログラミングされたことしか出来ないので、それを打破するためのSAだったが、カナメとなる上層のループがプログラミングされているのである。

 ここで、今まで本ブログで書いてきた以下の概念を網羅するように考えていくと、やるべきことが見えてくる。

  • 探知→行動が生物の原理である
  • 生物が複雑な行動をするのは、環境が複雑だから
  • 十分に複雑になることで、シンギュラリティを越える(例は人間)
  • 判断ループを与えてはならない
  • 脳はとにかく全てを学習する(時系列も含め)
  • 脳は、学習により複雑になっていくべきである
  • 知性が宿ったように見えるためには、選択肢の積層構造を深くもぐり決断をするべき
  • 大脳皮質のコホーネンネットワークは、ヘッブ学習(教師無し学習)により、勝利ニューロン以外を抑制する


 すなわち、求める脳モデルは、

  • 探知→行動により学習する。
  • サブサンプションアーキテクチャのようなループの階層構造を、教師無しで構築する(→自己組織化)
  • 階層構造はRNNの塊であり、教師無し学習により、短期的なループも長期的なループも構築する。深層ネットワークの可能性に賭ける。
  • 不要なループは抑制されていく
  • 十分に複雑であること。脳モデルは人間並みかそれ以上のニューロンを要するのが理想

 一言で表すと、自己組織型深層サブサンプションアーキテクチャ(Self Organized Deep Subsumption Architecture)とでもなろうか。頭文字をとると、SODeSsA(そーでっさ)が良いかな…

 巨大(深層)なRNNが、学習によりサブサンプションアーキテクチャをほぼ無限に自己組織化で構築していくなら、いつか複雑さがシンギュラリティの境界を越えるということは有り得るのではないかと思える。というか、人間とはこういうものかもしれない。

 学習が発散しないよう、実際の脳にあるコホーネンネットワークのような抑制メカニズムが重要になり、深層学習における既存の収束テクニックも活用できるであろう。


 これを積んだエージェントを、外界モデル、身体モデルと組み合わせて動かすことになるので、深層人工生命というもうちょっと広い概念も合わせて提唱する。深層ネットワークを組み込んだ人工生命に取り組むと面白いことが出来そうであり、検索した限りでは試みられていない。
 なんといっても、深層ネットワークはそれまでの常識を越えた性能を示すことがあり、人工生命の脳モデルに入れたら思いもよらない機能性能が得られることは十分期待できる。上記のSODeSsAは、その脳モデルの一例である。

AlphaZero 人工知能プログラミング実践入門を読んだ(その2) 第6章 AlphaZeroの仕組み

AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
布留川英一著 2019年 ボーンデジタル

 第6章では、3目並べを題材に、実際にAlphaZeroを実装する。AlphaZeroは「二人零和有限確定完全情報ゲーム」においては、どんなに新しいゲームだったり、ルールが変更されても、人間を越え無敵になってしまう、言ってみれば魔王のようなアルゴリズムであるということが理解出来た。

 サンプルプログラムは8つのソースファイルに分かれており、メインのtrain_cycle.pyをJupyterNotebookのterminalでPythonコマンドから実行すると、GoogleColab上からではなくても動いた。ただし、非常に時間がかかる。1回の学習に際し、500回の自己対戦を行うところを200回に数を減らして、1時間程度を要した。CPUが、Corei5-2410M、メモリ4G、GPU無しという非力な環境であることも影響している。また、学習サイクルが4周目ぐらいに達したところでpythonがエラーを起こし止まってしまう。それまでの学習成果は、学習の結果より強いモデルになればモデルが上書きされるので、無駄にはならない。

 プログラムの構造は以下の通り。

  • game.py→ゲーム部分の実装
  • dual_network.py→学習を行うネットワーク本体の定義
  • pv_mcts.py→モンテカルロ木探索。自己対戦の時に手を探索する
  • self_play.py→自己対戦を行い、学習データを蓄積する。一手毎にpv_mcts.pyのサブルーチンを呼び出し、次の手の確率分布を計算する
  • train_network.py→自己対戦が終わったら、蓄積した学習データで学習を行う
  • evaluate_network.py→学習した結果、前より強くなったかを判定
  • evaluate_best_player.py→強くなったら、他の方法と対戦して勝率を算出
  • train_cycle.py→上記プログラムを呼び出す。

 上記を動かし、強くなったかどうかなどの結果をおいかけることは普通に出来るであろう。作ったモデルの勝率例が以下の通りで、最強のAlphaBetaと互角、モンテカルロ(MCTS)より勝率が上回っているので、ちょっと強くなっている。

Evaluate 10/10
VS_Random 0.85
Evaluate 10/10
VS_AlphaBeta 0.5
Evaluate 10/10
VS_MCTS 0.6

 

 ここで、実際にAlphaZeroの中身に迫ろうとすると、なんども読み返し、何が行われているのかを読み取らなくてはならないと思う。以前読んだ「直感DeepLearning」等も引っ張り出した。特に、モデル(ネットワーク本体)の説明があっさりしていると感じた。自分なりの理解を以下に書いていく。

 モデルは、ある局面を入力されると、その時の取るべき方策と価値を出力する。方策とは、次の手の確率分布である。価値は、分かりにくいがその局面から進んだ時に先手が勝ったか後手が勝ったかである。方策と価値の二つを出力するので、デュアルネットワークと読んでいる。AlphaZeroの前身のAlphaGoでは、別のネットワークだったのが、AlphaZeroで一つにまとまったとのこと。なぜデュアルネットワークになっているのかの明確な説明は無い。

 モデルの構造は、最初に畳み込み層があってから、残差ブロックと呼ばれる畳み込み等の組み合わせモデルが16回繰り返される長大なものである。ブログ筆者は理解するのに時間がかかったが、このモデルは、一つのネットワークで、どんな局面がinputされてもその局面での最適解を出力するように学習する(局面ごとに最適化されたネットワークがある訳では無いんですね…)。
 また、「二人零和有限確定完全情報ゲーム」であるため、ゲームの経緯は関係なく、とある局面での最適解を出力するように学習すれば良い。そのため、学習データは、自己対戦での一局面とその時の方策(取るべき次の手の確率分布)、またゲームが終わった時に勝ったか負けたかというデータになる。一ゲームで8局面ぐらいあるとして、自己対戦で決着がついた時の勝敗をその8局面全部に「価値」として付与するのか、明記されていないが、そうなっていると思われる。

 すなわち、自己対戦を500回やって、局面データ(局面+次の手の確率分布+勝ち負け)を集め、それをネットワークに学習させる、自己対戦の時にはモンテカルロ法で解空間を探索し次の手の確率分布を更新する、というのがAlphaZeroの全体像であろう。

 まだ本質に迫れていない部分もあり、なぜデュアルネットワークにするのかを始め、もう少し詳しい説明があると良かったように思う。最初の畳み込みでKernelが128個あるのも、入力の次元(3×3×2)と比べると多いなぁという気がするが、128個の理由は記載が無い。kerasのConv2dルーチンが使われているので、それがどういうものなのか、本家をあたりたい。

 おまけとして、ソースにTensorboardを呼び出すコールバックを追加して、ネットワーク構造を可視化したものを載せておく。残差ブロックが16個あると縦長すぎるので、途中は省略した。最初に3個、後半に1個残差ブロックが載っており、途中の12個が省略となっている。

f:id:tomotomo47:20200104220951p:plain

デュアルネットワーク構造先頭部分

f:id:tomotomo47:20200104221042p:plain

デュアルネットワーク構造最後尾部分


  最後に、つまらない誤記の指摘。正誤表に載っていなかった。

P213 本文下から4行目のDN_WIDTHは、DN_FILTERS
P213 同、DN_HEIGHTは、DN_RESIDUAL_NUM

がそれぞれ正しいであろう。プログラムコード、サンプルプログラムとも直っているので、実害は無い。

 

AlphaZero 人工知能プログラミング実践入門を読んだ(その1) 第5章 探索

AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
布留川英一著 2019年 ボーンデジタル

 仕事が忙しすぎて時間が取れなかったので、年末年始休暇で、以前買ったこの本に取り組もうと思う。

 1章がまえがき、2章がPythonの紹介で、3章が深層学習、4章が強化学習、5章が探索という、AlphaZeroを構築する3つの概念を独立して学ぶ構成となっている。この3つの章は並列の関係にある。最初に載っていたロードマップの図が大変わかりやすい。6章でAlphaZero、7章でユーザーと対戦できるようグラフィカルインタフェースについて学ぶ。

 本書では、GoogleColabという、クラウド上で実行する方法を推奨しているが、アナコンダをインストールしたノートPCで、JupyterNotebook上で試すことにした。結論から言えば、問題なく動く模様である。

 5-1ミニマックス法の最初のサンプルプログラムを手打ちで打ってみる。ブログ筆者はC言語が染みついているので、インデントによる構造管理に慣れない。また、パワポ作業の癖でShift+Returnを押すと実行されてしまうのにイライラ。

 JupyterNotebookで新しいipynbファイルを作り、テキスト通りに打っていくと問題なく動いた。他の教科書では、その通りにやっても動かない場合もあるので、大変良いと思う。
 5章の最初のプログラムを手打ちして実行すると、自分のタイプミスで止まるのはすぐエラーになって分かったのだが、tabによるインテンドの数が1つ多い場所があり、それで誤動作していたのは見つけるのにとても時間がかかった。ダウンロードしたサンプルプログラムは正常に動いたので、一行一行見比べて、3周目ぐらいで見つけることが出来た。こういう時に悩んでいろいろ考えると、それこそいろいろ身につく。

 逆に、ダウンロードしたサンプルプログラムを実行するのは簡単すぎる。適当にShift+Returnを押しているとそれっぽい結果が打ち出されてくるのだが、その結果を眺めていても、なにも身につかないと思われる。

 実行結果はこんな感じ。本書で言う3目並べは、小学校の頃にやっていたいわゆる○×である。本文と逆で、先手が○でランダム、×が後手で全探索を行い最適解をうつミニマックス法。actionというのが×を置けるところのリストで、左上から横に0、1…8まで、その場所においた時の評価がscoreで、scoreの高いところに置くようになっている。scoreは1か0か-1しかないので、1が複数あったらその中の番号が若いところに置いているのかな(良く分かっていない(^^))
 ミニマックス法で後手が考えている時だけ、actionとかが表示される。

--o
---
---


action: 0, 1, 3, 4, 5, 6, 7, 8,
score: -1,-1,-1, 0,-1,-1,-1,-1,

--o
-x-
---


--o
-x-
--o


action: 0, 1, 3, 5, 6, 7,
score: -1,-1,-1, 0,-1,-1,

--o
-xx
--o


-oo
-xx
--o


action: 0, 3, 6, 7,
score: 0, 1,-1,-1,

-oo
xxx
--o


 この手法は総当たりなので強いが、○×程度ならともかく、ちょっと規模が大きいゲームでは実行に時間がかかり過ぎる。5章の後半では、大規模なゲームでも通用するような解の探索方法として、Alpha-Beta法、モンテカルロ法が紹介されている。

 かなり簡単な紹介だが、この本のプログラムはしっかりと動くと思われるので、初心者の勉強にとても良いのではないか。ネットでも、分かりやすいとの評判を良く読む。

 6章のAlphaZero、7章のグラフィックはこの年末年始にクリアしておきたい。7章のPython上で画面描写することを学ぶのが一番の目的だったりする。

プログラマ募集

 強いAIを実現するソフトウェア構築にあたり、助言、協力、作業頂けるプログラマを募集します。強いAIの構築にトライする、ということに興味がある方にご連絡を頂ければ嬉しいです。私は東海地方住みですが、居留地は不問です。

 ブログ内ではいろいろ書いていますが、基本的には、

  • 強い人工知能には身体が必要である
    ブルックスファイファーの著作より。身体性は松尾豊先生も推しています)

  • ただし、身体をロボットで代行してもうまくいかないので、ソフトウェア上で、環境、身体、脳のモデルの組み合わせで構成論的アプローチに取り組む


 という、それなりにまっとう(^^)なことをやろうとしています。提案手法と他の人工知能アプローチとの比較表を参照下さい。

f:id:tomotomo47:20191202021957p:plain

提案手法と他の人工知能アプローチとの比較

※外界、身体モデルは十分に複雑であること。記号的に構築すれば良い(辞書レベル)

 私は、中規模のシステム的ハードウェア(ロボット、ドローン等)のシステムシミュレーションをC言語で自力で開発することは出来ます。PC上で動くレベル。大規模環境には慣れていなくて、ROSやOpenDynamicsEngineは経験ありますが、Gazeboは無いな…
 それなので、いまやろうとしていることも、C言語で始めることは出来るのですが、効率が悪く、才能、労力にも限界があるため、有識者として協力して頂ける方を必要としています。

 以下について作業を手伝って頂きたいですが、こうすれば良いのでは等のコメントでもありがたいです。

  • 開発言語の選定。
    必要とされるライブラリが充実しているか等から。既存の開発環境を活用できる場合は、その推薦。

  • ハードウェアプラットフォームの選定・整備(クラウドの場合)
    スタンドアローンかクラウドベースか。Azureを使ってみるといいよとか。いずれにせよ、ハードウェアの調達資金は自分がもちます。

  • 脳モデルに適用するネットワークライブラリの選定、環境整備
    Kerasはさわったけど、もっと強化学習に向いているものがあるか。

  • 脳モデルに適用する学習スキームの検討、実装(強化学習等)

  • GITHUB等の環境整備
  • プログラム構想の具体化
  • グラフィック出力系のプログラミング
  • 各モデルのプログラミング


 法人化、資金調達、営業等の事業化について協力頂ける方も、声をかけて頂ければと思います。
 ようは、興味ある方、ということですね(^^)


 連絡先は以下のメールアドレスでお願いします。

t-mori@na.rim.or.jp


 相談により報酬も可能です。ただ、まだ法人格ではないため、現状では雇用関係は難しいというか、無理です。自己資金では限界があるので、法人化を進め資金調達が出来てから、となるでしょう。
 報酬の場合、拘束時間は無し、目安として月10万程度の手当は可能。前金と成果報酬等という感じになるかと思います。税務がややこしくならない程度にしたい(^^)

ARTILIFEとナウシカとたまごっち

 人工生命のプログラムと言えば、最近の意欲的な取り組みはドワンゴのARTILIFEであろう。
 キャラクターがいくつももぞもぞ動いている動画しか見たことが無いが、プレゼン資料を見ると、生命の目的をいくつかブレンドし、ブレンドの割合が異なるのが個性、個性に応じて各々の目的の達成度を強化学習していく、という仕組みのようだ。

 残念ながら9か月でサービスは終了してしまった。ドワンゴ自身がプレゼンしているように、エンターテイメントとして成立しなかったということだったと思われる。ドワンゴは人工知能へ意欲的に取り組んでいただけに、各エージェントが身体をもって進化させることで、汎用人工知能へ近づくことを夢見たのかもしれない。しかし、人々の心をつかむような生物らしい魅力に辿り着かなった。AIBOの方が、個性があると思った飼い主が多かったという点で、生物らしさという意味ではむしろ成功したと言えそうである。

 

 ARTILIFEに絡んで有名なエピソードが、もぞもぞ動いている生物らしき動画を見て、宮崎駿が「生命への侮辱だ」と怒ったという件だ。これはある意味、本当に生命が作られるかもしれないと宮崎駿が思う程、ドワンゴが創ったクリーチャーが生命らしく振舞っていたのだろう。

 「生命への侮辱」と聞いて、宮崎駿に絡み「ナウシカ」単行本7巻の発売当時を思い出した。まだインターネットが企業と大学でしか使われておらず、ブラウザではなくてメールとニュースシステムでネットを楽しんでいた時代、1994年、ブログ筆者が大学4年の時である。単行本を大学生協で購入したのを覚えている。

 発売と同時に「ナウシカ」の結末が科学の否定であるという批判がニュースシステムを駆け巡った。もともと「ナウシカ」はアニメージュの連載だったが、7巻は描き下ろしであり、読者は単行本で初めて結末を知ったのだ。ナウシカは、ラスボスである墓所の、腐海を浄化し、既に腐海無しでは生きられなくなっていた人類の体質改善を請け負うという提案を「命への侮辱だ」として一蹴し、墓所を破壊するとともに、腐海と共に生きていくことを選択する。ARTILIFEの一件でその宮崎駿の生命への思いがまだ続いているんだなぁと思い起こした。


 さて、エンターテイメントとして成功した人工生命と言えば、たまごっちである。自分はPC用のソフトでしかやっていなかったが、頑張って育てたくなってしまう魅力を持っていた。死んでしまうと復活しないという「生命らしさ」もポイントだったかもしれない。当時のことだから、当然学習機能があるはずもなく、適当にエサをやって面倒をみると成長していく、ということで、第一期だけで4000万個も売れたというから驚きである。AIBOしかりたまごっちしかり、ペット感覚というのが人工生命でエンターテイメントを成功させるこつなのかも。

 

 自分もこれから人工生命プログラムに手をかけることになるが、おなかがすいた等のパラメータを最適化するよう強化学習するだけでは駄目であろうということは分かった。

 


<参考>ARTILIFEにおける生命の目的の例
以下のような生命の目的の組合せの割合を変えることで、エージェントの個性とする。
各エージェントは、自分の目的達成度が向上するよう強化学習する。
フード食べたがり屋とか、ぼっちになりたいとか…

  • たくさんフードを獲得する
  • ぼっちになりたい
  • 一族で群れたい
  • オブジェクトで遊びたい


    以下のリンクはドワンゴ社のページで、上記はこのリンク先から引用しました。

機械学習自体はエンターテインメントたりうるか -ARTILIFEの例から- - Speaker Deck

AIが意味を学習するスキームについて 過去記事「意味が分かるとはどういうことか」補足

 過去記事を読み直していて、少し考えが進んだなぁと思ったために追記する。


 その記事は、バナナの意味を分かるAI(エージェント)とは何かという記事であった。
(ちなみに弱いAIや普通の汎用画像処理では、バナナが映った写真データを入力された時に「バナナ」と出力することは出来るが、AIがバナナを認識したぞと意味を与えているのは人間なので、AIがバナナの意味が分かったとは言えない)

 その記事では、下記をどう実装するかについて、特に結論が出ていなかった。

  • エージェントは、バナナを食べたら空腹が改善されることを知っている

 今回は少し考えを進めてみる。

 

 エージェントにとってのバナナの意味自体は、身体モデル、外界モデルにより相互作用は実装できる。すなわち、「バナナを食べたら空腹が改善される」までは実装できる。
 しかし、三位一体のモデルのうち、残された脳モデルでは、「バナナの意味」をどう扱えば良いのか?

 本ブログの立ち上げ初期は、具体的なアイデアは無いけど、身体モデルと外界モデルを用意していろいろやってみれば良いというスタンスだった。しかし、まもなく実装を開始するため、何かしらスキームを考えておきたい。

 

 一般に学習は3種類、教師あり学習、教師無し学習、強化学習に分類されており、教師有り学習、教師無し学習は、基本的には分類方法の学習になる。

 教師無し学習機能であるヘブの法則あるいはコホーネン・ネットワークは実際に大脳皮質にあり、教師無し学習が大脳皮質で行われているのは事実であろう。従って、バナナを見てバナナと分類するまでは出来るだろう。しかし、それでは、バナナを食べると空腹度が改善されることと結びつかない。

 強化学習の場合、バナナを食べておなかがふくれることで、その行動の評価値をあげていくと、おなかが空いている時にバナナを見るとバナナを食べるという行動は学習できる。しかしこれは、「バナナを食べたら空腹が改善されることを知っている」とは別である。その時の評価値が高い行動をとることで、結果としてバナナを食べる戦略を採用することはできるが、それだけであり、バナナの意味を理解しているとは言えない。

 

 一つのアイデアは、教師無し学習において、バナナを入力とするのではなく、「バナナを食べる」ことを入力として学習するということがある。あるいは「バナナを食べると空腹度が減る」ということを入力にする。
 いっそのこと、「バナナ」「バナナを食べる」「バナナを食べると空腹度が減る」の全てを入力にしてしまい学習させ、結果として空腹度が減ることを記憶しておくと、バナナを見た時にその記憶を思い出すことで「バナナを食べたら空腹が改善されることを知っている」ことになるかもしれない。

 これは、脳はとにかく全てを学習してしまうということを意味しているが、正解に近いかもしれない。また、あらゆる食べ物について同じ学習をするのではなく、食べ物として一括りにするようなことも行われているであろう。すなわち、学習と汎化である。全てを学習しつつ、どんどん汎化していくネットワークを組むということだ。汎化は、コホーネンネットワークで行われていることにイメージが近い。

 さらに、バナナを見た時に、見ただけでバナナに伴う過去の学習結果を呼び起こすシステムになっていると良いであろう。また、入力は行動結果だけではなく、言語による入力でも良いのだろう。バナナを踏むと滑ると言われたら、実際に滑ったことがなくても、滑ることを知る、のである。

 

 あるいは、学習にこだわらず、過去の行動の記憶を呼び戻す構造さえあれば、「知っている」ということになるとも考えられる。すなわち、自我とは記憶である、ということだ。

 

 このように、脳モデルにおいて試してみたいことはいくつかあげられる。何が正解なのかはやってみないと分からない。その意味で、身体と外界を用意していろいろやってみる、という当初構想は、間違っていないと思われる。

強いAI プログラム構想 まとめ

 海外出張等もあり、また1ヶ月ほど更新が出来ていなかった。ただし、あらかた準備は整ったと思われるため、強いAIを構築するための基本原理の有効性を示すためのプログラムの構想をまとめる。

 基本原理として、前回提示した内容は以下の通りである。

・外界モデル、身体モデル、脳モデルの3つが相互作用すること

・探知→行動を原理とすること

・エージェントは言語能力を有すること

・アーキテクチャは十分に複雑であること

 なぜ言語能力を有する必要があるのか、言語とは何か、については、まとめて別項目にて示すこととする。

 第2の、探知→行動を原理とする、ということは、前回の「回路の中の精神」に従えば、脳が並列計算機でありほぼリアルタイムに演算結果が出てくることと関係する。そして、この原理が言いたいことは、古典的AIのように判断をプログラムするなということである。すなわち、強いAIの目指すところはプログラムされていないことを出来るというところにあり、判断モジュールを加えるとすぐさま弱いAIと化してしまうのだ。

 この第2の原理と、第4の原理である十分に複雑であることは、まさしく脳モデルが有すべき特長になる。脳には判断モジュールは無いが、脳の動作としては複雑になる必要がある。従って、脳モデルは学習によってのみ複雑になるべきである。これを第4の原理に付記する。

 第4の原理であるアーキテクチャは十分複雑であること、は、脳、身体、外界全てに当てはまる内容である。ただし、今作ろうとしているシミュレーションは、まずは原理の有効性を示すという段階に留まるため、最終的に必要とされるまでの複雑さは当初は確保できないであろう。ある程度の複雑な状況の中でのエージェントの成長度合いから、これを複雑にすればすごいことになりそうだ、ということが示せれば成功である。

 さらに、第5の原理として、エージェントは欲求を持つ、ということを追加しておく。意思を持つということだ。弱いAIはプログラムされたことしか出来ないので意思を持たない。欲求に伴い、報酬系も有することになるであろう。

 上記をまとめると、白紙であり学習により複雑化していくことが出来る脳モデルに、学習をドライブする欲求を結び付け、複雑な環境下で人工生命として活動させていくという、従来から行われていておかしくない内容を進めようということである。

 従来との違いは、エージェントに言語能力を持たせること、外界、身体も言語的に構築すること、ロボット工学における構成論的アプローチの手法を取り入れ、強いAIには身体と環境が必要であるという確信を持っていること、になる。
 身体と環境があることで、弱いAIの弱点である、意味を扱うことが出来る。ここを理解しておくことで、漠然と身体や環境を作るのではなく、強いAIの出現に必要な身体モデル、外界モデルを作ることが出来る。

 最後に、信念を再掲しておく。

  • 生物が複雑な行動をするのは、環境が複雑だからであり、人間もその延長上にある。
  • 大容量の脳と複雑な環境の相互作用により、生物のアーキテクチャがシンギュラリティを越えたのが人間の知性といえる。
  • 従来のように脳を言語化するのでは無く、外界及び身体を言語化すべき。 

 白紙だった脳モデルは、環境に身をおくことで複雑になっていき、十分に複雑になることで強いAIとなる。そういう意味では、広義の機械学習と言えるかもしれない。また、環境は、言語レベルで複雑であれば良い。


 さて、原理の再整理に紙面を要したが、以上をもとにプログラム構想をまとめる。 機能ブロック図は、以前示した通りである。

f:id:tomotomo47:20190808220242j:plain

機能ブロック図

 

  1. 原理検証プログラムの目指す範囲
     理想的には、外界モデル、身体モデルは辞書レベルの内容は全て反映するようにすべきだが、原理検証の段階ではそこまでは全く到達できない。
     食べ物、敵、昼夜、地形、上下関係等がある世界として、これでは猿山程度の世界かもしれないが、人類史で言えば狩猟時代もこの程度であり、言語活動があることで、何らかの創発が観測できると期待する。

  2. 外界モデル
     食べ物、敵、時間の経過と昼夜、地形等、外界にあるものをモデル化する。エージェントが活動する環境である。オンラインRPGの舞台のようなイメージである。ただし、既存のツール、例えばUNITYを使ってしまうと、必要なモデルにならないように思える。外界モデルは全て身体モデルとリンクし、食べ物であれば、身体モデルにおける複数のセンサ(味覚、視覚、消化器)と連動しなくてはならない。食べ物はいくつか種類があるが、センサへの反応が違うことで違う種類の食べ物として定義される。意味とは差異である。

  3. 身体モデル
     外界モデルにリンクした身体(センサ、アクチュエータ、ボディ本体)とする。意味とは、外界モデルが身体モデルにもたらす作用であり、従来の弱いAIでは扱うことが出来ない。本ブログの提唱モデルのように、意味を扱うには外界と身体が必要なのだ。

  4. 脳モデル
     外界、及び内部状態からセンサ群への入力を受け、学習結果と欲求に基づき行動する。学習によってのみ複雑となり、十分に複雑になる容量をもつこと。ただし、原理検証段階では複雑さは限界があるものとする。
     学習モデルへの入力は、身体モデルにおけるセンサが担っており、センサは外界の状態、及びボディの状態を脳モデルへ入力できなくてはならない。


 以上をスタートラインとして、次回以降、具体的なプログラムの構築にかかっていく。ただしその前に、プログラマを募集しなくてはならない。次回、プログラマの募集要項を示す予定である。

「脳 回路網の中の精神」を読んだ

脳 回路網の中の精神 M・シュピッツァー著 2001年 新曜社

「科学とは、しっかりとしたモデルをつくるところにその本質がある」

 本書を読み進めていたため、1ヶ月以上更新が出来なかった。もともとは、脳の構造、メカニズムについておさらいしようと「メカ屋のための脳科学入門」を読んでみたのだが、その中で本書が紹介されていた。

 読んでみると、実際の中身よりもまず、著者の教養の高さを感じた。知識人が書いたと思わせる文章で格調高い。そして、著者には哲学があり、そこがぶれていないので一貫した体系になっている。

 基本的には、ヘブの法則、そしていくつかのネットワークが紹介されており、主な論点は以下の通りと思う。

  • 脳のメカニズムは、基本的回路原理の元に、学習をすることで成立している。脳の容量は少なく見積もっても125万MByteだが、遺伝子の容量は750Mbyte程度であり、ほとんどの回路は学習により形成される
  • 脳は超並列であり、解はほぼリアルタイムに出力される
  • 脳は可塑性を持つ
  • 脳の自己組織化の仕組みはコホーネン・ネットワークと呼ばれ、釣鐘状の強度分布で学習が進む。中心の勝利ニューロンから離れると、抑制が働く
  • 自己組織化により、大脳皮質にマップが形成され、身体上で近いものはマップ上も近い。
  • 一般的構造を学習するには、教師つき学習はゆっくり進めるべきである(汎化のことか)
  • ニューラルネットのうち中間層が、概念を代表する役割をもつ(DeepLearningの時代にはちょっと古い話か)
  • 全てのニューロンが他のニューロンとつながってフィードバックがある回路は、ホップフィールドネットワークと呼ばれる
  • 中間層に付随するコンテクスト層を持つネットワークはエルマンネットワークと呼ばれ、時間の概念をもたらす
  • 脳が意味を扱う場合も、自己組織化により意味ネットワークが形成される
  • 例えば分裂症の症状は、適切なネットワークシミュレーションにより説明でき、精神医療の分野でも有効なツールである。

 上記のような各論とともに、モデルによるネットワークのシミュレーションにより、生理学的、心理学的に脳の理解を進めることができる、というのが大きなテーマである。

  • モデルとは常に現実の単純化である。単純さにより、脳を観察していたのでは得られなかった洞察が得られる。
  • 科学とは、しっかりとしたモデルをつくるところにその本質がある
  • 良いモデルは、複雑な事象・事態の本質的な側面を写し取る
  • モデルとは真でもなければ偽でもなく、応用可能か、多くに事柄に当てはまるか、よりよくあてはまるかが問われる
  • 良いモデルを手にすれば、「一般的な原理」を見抜くことが出来る

 これが著者シュッピッツァ―の哲学だが、ニュートンの力学の法則等、科学の偉大な原理を思い起こさせる。

 

 原著は1996年発行であり、ディープラーニングがまだ無かった頃、ニューラルネットがバックプロパゲーションの発明により2回目のブームを迎え、これで強いAIが出来るとの楽観的な見方が一部にあった頃だ。20年が経過した今、この本の最新バージョンを書いて欲しいと切に願う。そのためには、科学の本質を理解した著者が待たれるのであろう。

 この本に述べられている内容では、残念ながら強いAIを作ることは出来ない。そこまで議論が至っていない。
 しかし、脳の仕組みは本来シンプルであり、学習により複雑になっていること、その一般的原理を見出せば良いということが良く分かる。ブルックスもその著書で、まだ強いAIの原理が見いだせていないということを述べていた。

 当ブログでは、強いAIにとって、外界、身体、脳の相互作用が本質であることを再三述べている。それを一般的原理に昇華させ、原理の有効性を示せるシミュレーションをやるべきであり、それは、モデルのあるべき姿を通しシュッピッツァ―が示した道でもある。

 それにしても偉大な本であり、何度か読み返し理解を深めたい。

「岩波講座ロボット学6 ロボットフロンティア」を読んだ(前編)

ロボットフロンティア 岩波講座ロボット学6 2005年 岩波書店

 2000年代初め、ホンダのP2、アシモの衝撃から10年ほどたち、アイボが販売されてまもなく、日本のロボット工学が世界一流の勢いだった頃、岩波書店がロボット学という7巻もののシリーズを刊行した。本書はその6巻目である。
 余談だが、3巻目のタイトルが、画像処理で日本にとどまらず世界を代表する金出武雄先生の「コンピュータビジョン」となっていて、筆者も大いに期待して楽しみにしていたのだが、結局出版されていないと思う。

 本書は、当時のロボット工学の最先端を紹介する内容であり、MEMS、マイクロナノロボット、メディカルロボット、ヒューマノイド等が取り上げられているが、本ブログでは、人工知能に関係する2つの章について紹介する。

 第2章 脳科学とロボティクス

 柴田智広先生による、計算論的神経科学の紹介である。15年前の記事であり、現在柴田教授は介護ロボティクスを中心に活動されている模様だ。

 計算論的神経科学とは、デビット・マーという研究者が1969年に提案した、小脳の計算モデルに端を発する、脳及び身体で行われていることを計算理論にしていきましょう、という分野である。人間を情報処理装置としてとらえたとき、計算目的を理解し、アルゴリズムを理解し、ハードウェアで実現するというマーの3レベルというものがあるそうだ。

 本章は3つの項に分かれ、まず、アシモフ、ウィーナー等に始まる脳科学とロボット工学の歴史を振り返る。1949年のヘブの法則(2つのシナプスが発火することで報酬があがるというもの)、1950年代のペンフィールドの体性感覚マップ(ホムンクルス)、ミンスキーの「パーセプトロン」等が紹介されている。「パーセプトロン」でニューラルネットの限界が示されてしまい、誤差逆伝搬法が発明されるまでニューラルネット(というか人工知能)は下火になったとか。

 次項では、脳科学がロボティクスに与えた影響が紹介されている。
 ロボット研究者が脳に期待することの代表は学習機能だが、教師有り学習、強化学習、教師無し学習の3種類が、脳では順に小脳、大脳基底核、大脳皮質が担当しているという、大胆な仮説もあるらしい(銅谷)。
 ヘブの法則に基づくヘブ学習は、教師無し学習の代表格だそうだ。すなわち、教師有り学習ではなく教師無し学習が、脳モデルにも必要になってくるということである。確かに、教師無し学習の例として自己組織化マップは良く聞く名前である。

 次に、教師有り学習の例としてフィードバック誤差学習が紹介される。探知してからでは遅れが大きいので、フィードフォワード制御が脳内で行われているという説をもとに、ロボット制御等へも応用される制御則となっている。「頭の動きを前庭系が検知すると、その動きを眼球へフィードフォワードして、網膜像のずれを防ぐように眼球が動く」とのこと。
※個人的には、「脳と視覚、グレゴリーの視覚心理学」という本に載っていた、頭を動かす指令が出ると、同時に画像処理部分に対しこれから頭が動くよというお知らせが行って、頭が動いても像がずれないようになっている、という説が好きだ。確かに、頭を動かしても世界は止まっている。

 強化学習については、銅谷先生の説が紹介されており、強化学習の3つのパラメータ(学習速度係数α、行動選択の逆温度β、報酬評価の割引率γ)を、それぞれ脳内ではアセチルコリン、アドレナリン、セロトニンが担っており、TD誤差にドーパミンが対応しているとのことである。うーん。

 各種学習に対応した脳内部の機能の紹介のあと、ブルックスの名前が出る。ブルックスは(本ブログでも随所で述べているが)「古典的AIが直面したフレーム問題や記号接地問題に対し、反射的なモジュールの組み合わせによりそんなことに悩まずロボットがいきいきと活動できることを示した」。
 ところで、脳は階層構造になっており、除脳という動物実験により、猫の脳をどこまで切除したらどこまでの機能が残るのか、ということを調べた学者がいる(もちろん日本では無い)。その結果、以下が判明しているとのことである。私は除脳ネコの実験は聞いていたが、段階的に切断されていったということは本書で初めて認識した。

  • 脊髄のみにする→屈曲反射等の基礎反射が残る
  • 前庭核と網様体まで→直立姿勢を保つような反射の協調が残る
  • 小脳まで→歩行や転回等の一連の協調運動が出来る
  • 大脳皮質以外を残す→摂食/闘争/性行動などが出来る
  • 全て→複雑な仕事、長々とした作業が出来る

 階層構造であるという話を聞いて、自分が脳モデルの原理の一つとした「反射の積み重ね」だけで知能にたどり着くのか、正直なところ自信が少し無くなった。ブルックスの理論が、制御の多層化であり上層ほど高度なことをやっている、と理解されているのもむべなるかな。しかし、それでは結局のところ上位階層が古典的AIになってしまい、強いAIには行きつかないと思う。

 また、階層構造になっているのは、進化の過程も影響しているであろう。ポール・マクリーンが、脳幹は爬虫類の脳、辺縁系が旧哺乳類の脳、大脳皮質が新哺乳類の脳と唱えたのが有名だそうだ。
 ここで、他の哺乳類のように大脳皮質があるだけでは駄目で、人間のように大脳皮質が極端に大型にならないと、知能のブレークスルーが起きないのであろうと思う。強いAIでは、人間並みの知能を実現したいのだ。それは、プログラムとして与えられていなくても、問題が与えられれば問題を理解し、こうすれば良いのだと思いつくようなAIであり、新哺乳類でも人間にしか出来ない。その大脳皮質の仕組みが、自分の仮説通り探知→反応の積み重ねなのか、教師無し学習が出来るヘブ学習回路なのかなど、今後いろいろ試すことになるであろう。

 

 3つの項のうち最終項では、ロボティクスが脳科学へ与えた影響が述べられている。その中で、谷先生のRNNによる認知の研究については次回詳しく述べる。その他阪大の石黒先生のアンドロイド、ブレインマシーンインタフェース(BMI)の先駆けみたいな話が紹介されているが、本ブログでは省略する。

 

 前々回、探知→行動の反射的動作を強いAIの原理とすると書いたが、本書を読んで、見直しが必要かもしれないと思った(そうではないと信じたいが…)。本書で紹介された脳の階層構造は分かりやすかったが、脳の機能について別の本でおさらいをする。

 また、ロボットフロンティア後編では、谷先生のRNNによる環境と一体化した認知、記号接地問題は無かったという宣言等を詳しく紹介する。


 久々に必読書にした。
 本書が書かれたのが日本のロボット工学の黄金時代の最後の方であり、当時世界最先端の研究が紹介されているということもある。また、自分がもともとはロボット屋であり、強いAIには身体が必要であることがロボットとAIの出会いであり、記号論と組み合わせると、ロボットが無くてソフトウェアだけで構成論的アプローチを進めていいのだ、ということが主張の根本である。本書はロボット屋の視点で書かれており、親しみを感じた。

強いAI プログラム構想 モデル相関図

 プログラムの構想を進める。今回はメモ書きだがモデル相関図を示す。文末に、プログラミングに詳しい方への助言の依頼あり。

 

 (1)身体モデル&脳モデル

 探知→行動を原則とするため、身体モデルは大きくセンサ群とアクチュエータ群に分割。アクチュエータ群の行動結果がボディ群へ反映される。疲れたとか、位置とか、おなかが空いたとか。

 センサ群とアクチュエータ群の間に、脳モデルが入る。プログラム上は、身体モデルと脳モデルはエージェントとして一つの単位にした方が良さそう。

f:id:tomotomo47:20190808220242j:plain

モデル相関図


 脳モデルは大規模なプログラムになり、学習を進める場合、エージェント毎に学習を進めるか、学習規模が大きくなると、一つの脳モデルで全エージェント分の学習をすることも考えられる。しかし、初期のプログラムにおいては、それほど大きな脳モデルの導入は出来ないので、エージェント毎に学習をすることになろう。

 エージェント毎の学習結果を効果的に次世代に受け渡すことが、遺伝の仕組みなのかもしれない。
 人間には遺伝する特性と遺伝しない特性があるので、脳モデルの全てを遺伝できる仕組みにする必要があるとも限らないが、遺伝できるようにしておいた方が面白そう。


 センサとアクチュエータの間に脳モデルが入ると、「判断」ブロックのようだ。これでは、探知→行動の原則から外れるように見える。しかし、考えることも実は、喋ったことを聞いて反応することの繰り返しと考えれば、原則から外れていないと解釈できる。会話をしている時に、判断をしながら喋っているだろうか?流れるように口から言葉が出てこないだろうか?

 まずは、脳モデルは、探知結果に反応して行動させる回路が複雑化していったものとして考える。

 個々のセンサとアクチュエータが、対になって回路を形成することもあるかもしれない。そうすると、エージェントは探知→行動の回路の集合体になるかもしれない。しかし、人間の意識は一つだと考えると、この方向は、とりあえずは追及しない。

 (2)外界モデル

 エージェントが存在する空間or平面、エージェントに対し複雑さを提供する種々のオブジェクトが存在する場である。当初は、食べ物、外敵、障害物、気候等を表現していき、エージェントが知的に振る舞うに至るまで複雑さを増していく。これは普通にプログラミングできるであろう。

 もっとも、エージェントに対し一番複雑さを提供できるのは、別のエージェントだと思う。集団行動が必要である。

 2013年のICRA(@カールスルーエ)での東大中村仁彦先生の講演だったと思うが、the Body Shapes Brainという言葉がある。これは、人工知能にとって身体が必要だということを表現しているが、人工知能にはいわゆる環境も必要であり、身体は脳と環境のインタフェースであろうというのがブログ筆者の考え方である。

 

 原理をまとめることで、プログラム構想が進めやすくなったと思う。
 しかし、だんだんと具体的なプログラムの領域に入っていくので、以下について、詳しい方の助言を切に頂きたい。自分が自由に操れるのはC言語なので、このままだとC言語でオフラインで構築していくことになるけど、いまいちだなぁと思うので。

  • 複数のエージェントを外界モデル内で動かすのは、オンラインRPGのようなプログラムが必要となるが、どのような動作環境で動いているものなのか。
  • 時間刻みを設定し一個一個のエージェントを回していくしかないのだろうか。
  • AWSのようなクラウドサービスを使うべきか、デスクトップでも出来るのか。
  • お勧めの言語。将来脳モデルを高度化していくと、pythonの方が良いのか。C言語のプログラムとpythonはつながるのか