強いAIの実現方法 ~実践的な作り方~

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

直感 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

 

提案のまとめ 詳しくは右側のメイン記事で

・構成論的アプローチを実践するのに、実ロボットを実環境で動かすのではなく、外界モデルと身体モデルの中でAIを走らせ、ソフトウェアのみで行うことを提案。
・意味は外界ー身体ー脳の相互作用であり、人間は意味を記号で理解する。脳ではなく外界と身体をソフトウェア上で記号化し、その世界でAIを動かすことで、意味が理解できない弱いAIの欠点を克服し、強いAIへの突破口とする。

身体モデルの構想

 本ブログでやろうとしていることは、外界-身体-AIの相互作用により、AIが意味を取り扱えるようにして、強いAI実現の突破口とする、外界-身体は、辞書レベルでモデル化したソフトウェアで良い。

 今回は、身体モデルについて、要件と作成方針を具体的に整理していく。言うなれば、意味を扱うことを目的とした人工生命モデルであり、そのために必要な要件を、大きな構成要素ごとに整理していく。 

  • 身体モデルの要件
    ①AIモデルに対し、外界とのインタフェースを担い、双方向の作用を及ぼすこと
    ②(意味とは差異だから)作用は差異として定義できれば良い
    ③人が単語として識別している(辞書に載っている)身体に関するものが存在すること。外界モデルで定義されたモデルに対応した、AIモデルとのインタフェースを有すること。

  • 実体に関係する身体モデルの作成方針
     より具体化していく。まずは、物理的に存在するものの取り扱いについて。
     AIが、リンゴを認識することを考える。外界モデルでリストアップした、リンゴの意味(差異)は以下の通り。
    ・食べ物である
    ・表面は赤であり、中は白い
    ・芳香がする
    ・甘い味がする
    ・固い歯ごたえがある
    ・手のひらに乗る程度の大きさであり、口に入る大きさである

     上記に対応し、身体が具備すべき機能は以下の通り。
    ・食べ物を摂取するIFがあること
    ・食べ物を食べる必要があること(食べないと死んでしまうこと)
    ・視覚があること
     視覚の実装方法としては、以下の二つが考えられる。
    ①リンゴを見たらAIが「リンゴ」と分かる。
    ②色、大きさ、外形等からAIがリンゴと識別する。
     ①の場合、AIは、名前を知っているものだけを識別できる。名前を知らないものを見た時に、人に名前を聞く等の学習プロセスがない。ただし、その学習プロセスが知能形成に必須ということがない限り、①でも良いと考える。実際に、人間は名前を知っているものしか識別できないのだ。また、外界も記号化されているので、名前を知っているものしか存在しない世界にエージェントは生きることになる。
     視覚については、時間が1ステップ進むごとに毎回視界内にある物体のリストアップをすることになる。単純にプログラムすると、地球の裏側にあるようなものまで常に視界内にあるかのチェックを行う必要があり、エージェントの数、対象の数により演算量が増えすぎるので、あらゆる物体の位置について、自分の属するセルにいるものだけチェックする等、プログラム的な工夫が必要。

    ・匂い、味が分かること(嗅覚、味覚)
     AIはリンゴの嗅いと味を知っていることになる。食べ物の好き嫌いはエージェントごとに変えられるので、エージェントの個性になり、世界が多様化していく要素になるが、好き嫌いを、AIモデルに入れるのか、身体モデルにいれるのか、というのが問題になる。
     ここでは、動物が実現しているような機能(好き嫌い、欲求、報酬系等)については、身体側とする。例えばリンゴを食べてまずいと感じるまでは身体モデル側ということだ。
    ・リンゴを手に取れること(アクチュエータ)
     物理的に模擬せず、1m以内に近づけば取るか取らないかを選ぶ感じで良いと思う。

     以上は、リンゴに関係する身体モデルだが、実際には移動、疲れ、気温センサ、睡眠等、その他の実体に関する内容を盛り込んでいく。洗い出し方法は、辞書による。オントロジーという話もあるが、人間が見て意味が分かるように整理されただけでは意味が無い。やりたいことは、外界―身体が連接したオントロジーを定義し、その中で人工生命シミュレーションを行うということかもしれない。

  • 実体の無い外界に関係する身体モデル?
     辞書を見ていくと、当然ながらリンゴとかとは異なり、実体の無い単語が多く出てくる。友情、努力、勝利、戦争等、社会に伴う概念が多い。友人と親友とかどうやって区別するのだろう。このような概念もモデルに入れ込まなくてはならない。信頼という言葉を考えると、獲物を取りに行く時に誰と一緒に行くかみたいな用途で、かなり原始的な社会でも出てくる概念に見えるため、初期段階からAI側にしろ身体側にしろ実装をしていくべきと考える。
     食欲を身体モデル側にいれるという方針の下では、友情も身体モデルで良いように見える。あるいは、前項で整理したように、動物で実現しているような機能は身体モデルとすると、友情はAIでも良いのかもしれない。
     やりたいことのゴールは、外界と複数のエージェントの存在により複雑になった人工生命プログラムで、欲求と報酬系でドライブされ言語能力を有する大規模深層学習系が、創発的に言語をしゃべることで知能を獲得する、ということであり、「友情」をAIモデルに入れる場合、深層学習系が自発的に友情という概念を獲得することになると考えるので、まずは身体モデル側で良いのではないかと思う。やりながら考えていく。

  • 身体モデルのプログラム構造について
     以下のような構造の構造体を定義していくことになろう。「→」は物理的な状態に対応した感覚出力。リンゴを認識するだけでは済まないので、拡張していくことを前提に考える必要がある。
    名前
    位置(X,Y)
    性別(男女)
    年齢?
    体力→満足感~空腹感→食欲
    摂食インタフェース(口のこと)
    視覚センサ→視界内の物体を認識。視界内の物体のリスト型構造体かな…。
    味覚センサ→味の好み
    聴覚→人の発言の認識(感覚出力では無いですが)
    気温センサ→快不快
    疲労疲労感(不快感)
    睡眠→睡眠欲(不快感)

     上記のようなリストが、人間の特性がある分だけ続くことになる。また、快不快→解決しようとする欲求、の組み合わせで、エージェントが行動していくことになるのであろう。欲求も(長い進化の中で)強化学習で身につけたものかもしれないが、当面は、欲求までは取得済みと考える。

     自分の状態に対応した欲求→何らかの行動の結果の報酬という系で、報酬を最大化する強化学習を施すことで賢いエージェントは育つだろうが、別の項で述べたように、新たな状況下で「こうすれば良い」と思いつけるようにはならないと思われる。また、脳内に報酬系があると言われるが、気温が低い時に火にあたって暖かくなり、不快状態がなくなるだけで良いのか、不快状態がなくなることで報酬系に出力があるのか等、人間のメカニズムに近づけた実装にしていきたい

  • 欲求などが身体モデルに属するのかAIモデルに属するのか、について
     本来、欲求などは脳内でおきていることであり、AIモデルに組み込むものかもしれないが、動物にもある機能、本能に関するもの、は、身体モデル側にしておく、という考えで行く。
     言語能力は本能なのか、というのは、生成文法等の理解が出来ていないため発言するのもおこがましいが、母国語は教えられた環境で変わること(日本人でも英語が母国語になる)から、少なくとも文法等は後天的である。また、一切言語を習わないし周囲で誰も言語を使っていない場合、言語の習得はしないだろうし、ソシュールが正しければ、虹が何色かの認識も出来ないであろう。AIモデルにおいて、言語能力を付与していく。

ごはんが3個現れた

 少し気軽に、思いついたことを書くこともしてみようと思いました。

 結局やろうとしていることは、

  • 外界ー身体ーAIの相互作用によりAIが意味を扱えるように外界ー身体モデルを構築し、人工生命の実験をしていきましょう
  • AIには身体が必要だ派の構成論的アプローチも、ソフトウェアでやればいいのです

 ということなので、強いAIを構築するためのデバック環境の方法論、とも言える。強いAI自体について、こうすれば良い、という明確な方法論がある訳では無い。ただし、実ロボットを動かしたりするより、よっぽど効率的に検討が出来るであろう。

 さて、

・外界のある場所に1日1回、ごはんが1個現れる。エージェントはそれを食べれば生きていける。

 という環境で、

・エージェントが毎日そこにごはんを取りに行く

 というのをAIが自発的に思いつくのは、強化学習等で実現出来そうである。ただし、強いAIでもなんでもないであろう。
 ここで、ある日突然、

・ごはんが3個現れた

 という時にどうなるのか。

 ごはんを3個回収するということをAIが思いつけば、ちょっと賢い。エージェントが3個持ち帰って3日間それを食べ、3日後に次のごはんを取りに来るのか、毎日取りに行って在庫を増やすのかは分かりませんが。
 在庫を増やすまでならリスでも出来るが、リスは冬の前にドングリを貯めこむように、本能にプログラミングされている。上記の例において、ごはんが3個現れた時に、強化学習で繰り返し学習して、最終的に3個回収すべきという最適解を学習した結果がリスなのだと思われる。
 従って、AIが知的(強いAI)ということは、ごはんが3個現れた時に、強化学習での繰り返し学習の果てに解決方法を見出すのではなく、3個現れた時点で、「ラッキー、3個とも持ち帰ろう」と思いつくべきなのだと思う。

 恐らく普通の人なら3個持ち帰ろうと思いつくであろうが、どうして人間がそれを思いつけるのかが分からない。

・実は過去に強化学習済み
・3個持ち帰ることによる効果を内部モデルで評価しているのか?その場合、2個持ち帰るとかも全部評価するのか?フレーム問題にならないか?
・人間は、心の中を含め、発言しなくても3個持ち帰ることを思いつけるのか?
(私は、考えるということは、心の内部で発声してそれを耳が聞くことだとも思います)

 人間が、3個持ち帰ると思いつける仕組みをご存知の方がいたらコメント下さい。

 これを思いつけるようなAIプログラムを作るべく、いろいろ試すソフトウェア環境を用意するのが、本プロジェクトの意義の一つです。ただし、環境を複雑にして、欲求、報酬系ミラーニューロン等を身体とAIにコーディングしていけば、自然と出来るようになることも期待しています。

 目の前にごはんがあれば全部持ち帰ること、というように強化学習済みなら、3個ごはんが現れたら3個持ち帰るかもな…人間がそういうアルゴリズムになっているとも思えませんが。
 あと、1度に1個しか持ち帰れない場合に、その日のうちにもう1回ごはんを取りに戻ろうとAIが思いつけるかとかも分かりやすい。人間なら思いつきそう。この問題も、強化学習で最終的に解にたどり着いても意味が無い。強化学習は、強いAI実現のための答えでは無いのかもしれない。

「人工知能の哲学」を読んだ 松田雄馬 著

人工知能の哲学 ~生命から紐解く知能の謎~
松田雄馬著 2017年 東海大学出版部

  前回ネット記事の感想を書いたが、そこで呼ばれていた松田氏の著書2冊を読んでみることとした。まずは1冊目の感想。良書を読むことができ、感謝している。

 5章構成で、それぞれ特徴ある内容である。
 第1章「人工知能」とは何か
 現在が第3次人工知能ブームにあること、ダートマス会議等から始まる人工知能の歴史を振り返る。ブログ筆者が好感を持ったのは、AIの歴史の一部としてロボット研究を取り上げ、ブルックスが開発した、身体を持ち反射で行動するロボットについてAIの可能性を見ているところにある。サブタイトルにも「生命」とあるように、著者は、生命のメカニズムからAIを俯瞰しようとしており、身体性にも注目している。
 なお、そもそもの執筆動機は、現在の第3次人工知能ブームにおいて、今度こそ人工知能が何でも出来るという風潮に対する警鐘にあるようだ。歴史が繰り返されることのないよう、賢者は歴史に学べ、とのこと。

 第2章「知能」とは何かを探る視点
 個人的にお気に入りの章である。錯覚を例として、物理的な感覚に対し騙されるようにして脳内に内部モデルを構築することで、人間は周囲を認識しているとのことである。また、先天的白内障の患者が手術で視覚を取り戻した時の反応などから、感覚だけではなく自ら動くことも重要で、環境との相互作用を通し自己を構築し、外界との調和的な関係を構築することだそうだ。
 この章で感銘を受けたのは、「赤ん坊がぼんやりとした内部モデル」で認識しているということである。人工知能の問題の一つに「フレーム問題」があり、人間が非常に上手く認識を取捨選択している仕組みが分からないのであるが、この「ぼんやりとした内部モデル」は、フレーム問題を解くカギになるかもしれないと思った。松田氏はその点にはふれていなかったが。

 なお、錯覚については、グレゴリー著「脳と視覚」が詳しい。その本を読んだ限り、錯覚という現象は、脳が騙されているというよりは、脳が両眼の画像データから3次元空間を再構築しようとしているために、実際には同じ長さの矢印を片一方は短く感じたりする、ということであった。内部モデルとは若干異なる気もする。

 第3章「脳」から紐解く「知能」の仕組み
 脳の解剖学的見地から、知能の仕組みにせまる。哺乳類には反射脳と情動脳からなる生存脳と、社会脳とも呼ばれる理性能があること、ミラーニューロンは他者の行為理解であり、そこからコミュニケーションが生まれる可能性、歌の能力が鳥、クジラ類、人間に限られること等、解剖学的見地から示唆に富む提言を行っている。
 
 第4章「生命」から紐解く「知能」の仕組み
 ホタルの群れがシンクロして点滅すること等から、生命においてリズムが重要な役割を担っているとしている。リズムといえば、ファイファーも「知能の原理」の中で、CPGによるリズム運動のアトラクタ収束について言及していた。人間はリズム運動が得意であり、階段を考えずに降りられるのも、CPGにより脊髄からリズミカルな筋肉収縮指令が出ており、ニューロンでアトラクタ状態へ収束されるからである。

 第5章「人工知能」が乗り越えるべき課題
 ここまで、AIにとって生命及び身体が重要であること、環境との相互作用が重要であることについて語ってきた著者だが、実はシンギュラリティ懐疑派であり、強いAIも懐疑派であることが本章で分かった。すなわち、現在の第3次人工知能ブームにおいては、結局は弱いAIであり、このままでは強いAIには到達しないであろうとのこと。その例として、AIが椅子を認識することの難しさを取り上げている。椅子については、次の著書のタイトルにもなっている。

 ここからはブログ筆者の見解だが、ロボットが椅子に座るには、椅子の前に立ち、関節の力を抜いて椅子に体を任せる方法がある。椅子の形状を3次元計測し、全ての関節の角度を計算して、全部の関節の角度がそうなるような軌道を計算して実行する、ということをやるから座れないのだ。力を抜き、椅子にもたれれば、重量を支えられる限り椅子が自然な姿勢をロボットに提供するであろう。これは、ファイファーが「知能の原理」で主張していることであり、知能に身体が必要であることの証左である。
 また、椅子の役割は体を休めることである。立っていると疲れる身体をもったエージェントであれば椅子の意味を理解できるであろうし、逆に、立ってても疲れないなら椅子の意味は理解できない、というのが本ブログにおける主張であり、意味とは外界ー身体ー脳の相互作用である、ということである。本ブログで取り組もうとしているプログラムでは、椅子の意味を理解するためには、身体モデルに疲れを導入することになる。

 松田氏の著書に戻ると、椅子の意味をAIが理解することの難しさを記載しながら、ではどうすれば良いのかについては、「椅子とAIとの「関係」、それによりAIが「物語」に生きること」が重要だが、それを解決する研究は着手されていない、ということになっている。
 椅子についてはブログ筆者も上記のように一家言あり、次の著書において松田氏がどのような解決に至っているか、楽しみである。

 なお、松田氏は本来なら一介のブログ筆者が言及して良いような方では無いと思いますし、この文章に変なところがあれば、それはブログ筆者が松田氏の主張を理解できていないためであろうと思うので、原著をあたられたい。特に、松田氏の文献読破量には圧倒される思いである。ソシュールについて言及が無かったが「意味とは差異である」「認識は言語に依存し、名前を知らないものは認識できない」という思想について、松田氏がどう考えるかも大変興味がある。
 ブログ筆者は、脳メカニズムについて疎いため、本書の3章を足掛かりに、参考文献等で勉強しようと思う。その意味でも、広い分野に渡ってAIに関する知識が俯瞰されている本書は、良書だと思います。