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

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

AIが「意味が分かる」とはどういうことか。弱いAIに欠けているもの

 今回もポエム色が強いので、ひとりごと扱いにしようかと思ったが、思ったより固い話ができたので、普通のエントリとする。
 完全に余談だが、カタカナで3文字以上の技術用語の最後は延ばさないのがJISで決まっているそうな。エントリーでは無くエントリで良い。リレーは、リレでなくリレー。

 本ブログの基本的な主張である、強いAIを作るには外界、身体、脳モデルが必要である、それはソフトウェアで実現すれば良いというところは揺らがないが、外界、身体モデルの構想はある程度進められるとしても、残る一つの脳モデルを考えようとすると進まない。
 これは当然でもあり、1950年代から延々と天才たちが考えてきて成果が出ていないのだから、欲求をいれれば良いのではないかぐらいの思いつきで解決するはずがないのである。
 自分のオリジナリティは、「構成論的アプローチ」に取り組むのに実世界でロボットを動かす必要は無いというところ、外界を言語の枠組みで構築すれば良い、すなわち脳では無く外界、身体の記号化を進めよ、というところにあるので、次回以降、基本に立ち返り、基本原理を整理するとともに、簡易なモデルにおいて原理の有効性を示す、という形で作業を再開させようと思う。

 今回はその前に、脳モデルの構想を考える最後のあがきとして、意味が分かるとはどういうことか、について、分かりやすく整理を試みた。これは実は、メイン記事の1に相当する内容だが、メイン記事1が出来ていない。

 弱いAIと強いAIの間のギャップの一つに、弱いAIには意味が分からないという指摘があり、シンギュラリティ否定派の根拠の一つとして取り上げられることもある。
 バナナの写真を見せて、これはなんだと聞くと「バナナである」と出力するAIは、機械学習の進展により実現できるようになった。汎用的な画像識別すら出来るようになったのは、一昔前の画像処理技術からすると驚異的である。

 しかし、実際には以下のことが起きている。

  • AIに、バナナが写った画像データを入力する
  • AIは、「バナナ」と出力する
  • 人間が、AIに入力した画像データと、AIの出力結果を見比べ、「AIがバナナを識別した」と解釈する。

 すなわち、バナナの意味を扱っているのは人間であり、AIでは無い。AIは、機械学習によりプログラムされた結果を出力しているのみである。ここを理解せず、AIがバナナを理解した、というような記事も見かけるので注意されたい。AIが意味を扱うには、まずバナナを食べる身体と、外界においてバナナ自体が必要であるというのが、本ブログのスタートになっている。

 また、古い話だが、IBMのワトソンがクイズ番組でクイズ王を破ったという例も同じであり、ワトソンの出力が正解であること、クイズ王より正解率が高いというのは人間の観測結果であり、こちらでもワトソンはプログラムされた通りに入力に対し出力を行い、その出力がクイズの正解だった等の、意味を扱っているのは人間である。ワトソンは、クイズに正解したいとか、クイズ王になりたいとかは全く考えていない。

 このように、弱いAIはプログラムされた通りに動作するプログラムであり、意味を扱っていない。弱いAIプログラムの強化によりチューリングテストに受かるようなAIが出来たとしても、意味を扱うことが出来ない以上、一応意味を扱っているように見える人間の知性には及ばず、強いAIにもならないのである。

 繰り返しになるが、本ブログでの主張は、意味は外界にあるので、意味を扱うには外界、身体、脳の相互作用を扱わなくてはならず、そのためにはAI本体以外に外界、身体が必要である、ということだ。また、外界、身体をロボットや実世界に求めても上手くいかないので、全てソフトウェアでやるべきであり、人間は意味を扱うのに記号を用いているから、外界、身体も記号で表現すれば良い。

 では、外界、身体のモデルがソフトウェアで用意できたとして、脳モデルがどのように動作すれば、人間と同じように意味を扱えたと言えるのか。本エントリの最初に書いたように、簡単にこうすればよいと言える問題では無いのだが、整理を試みる。
 以下は、バナナと人間の関係を、バナナとエージェントで実現するには、どのようなことが出来なくてはならないかのリストである。

  • エージェントがバナナを見たら、「バナナ」と出力する
    →脳モデルでプログラム出来る。ただし、あらゆる見たものを出力するのかというと、いわゆるフレーム問題が頭をもたげてくるであろう。しかしこの問題は、エージェントをプログラミングする際に意識をすれば、解決できるように思う。

  • エージェントには身体があり、バナナなど食べ物を食べないと死んでしまう
    →そのようなモデルを組むことは出来る

 問題は以下である。

  • エージェントは、食べ物を食べたら空腹が改善されることを知っている
  • エージェントは、空腹時に食べ物を食べたいと思う
  • エージェントは、空腹時に食べ物を探しに行こうと思う
  • エージェントは、空腹時に食べ物を見つけたら、食べる

 特に、「食べ物を食べたら空腹が改善されることを知っている」、すなわち食べ物と空腹の因果関係を知る、というところが難しい。ここが分かれば、他も出来るのではないか。
 食べた時の空腹の改善具合を強化学習で学習する、という案はあるが、強化学習は基本的に動作に対する報酬を学習する。すなわち、空腹になった時に食べ物を食べて空腹が改善されたことを学習すれば、空腹になった時にまた食べ物を食べるであろう。しかし、それは「改善されることを知っている」とは違う事象である。

 強化学習による行動最適化と「改善されることを知っている」の隙間にあるのが、自意識というものなのだろうか。思えば、空腹の時に食べ物を食べるのは動物でも出来る行為であるが、人間と動物の間にある違いは何か。言語能力なのか。例えば実際の動作の前にシミュレーションをして、その結果を見て「空腹が改善されることを予測する」のであろうか。あるいは、動物と人間の間にそれほど違いは無いのかもしれない。いずれにせよ、この「隙間」を埋める脳モデルを実現できるかが、肝心な部分であろう。

 「~ということではないだろうか」という終わり方は、特に結論を出しておらず、AIで心を実現するには…というようなタイトルで良く出てくるフレーズであり、ブログ筆者も全く好きではないのだが、今回は仕方がない。もともと、外界と身体モデルを構築し、あとは強いAIを実現するには脳モデルをいろいろ試していけば良いという立場からスタートしており、結論が出るにはシミュレーションによる試行錯誤が必要である。

 脳モデルを作るには入力層を定義しなくてはならず、どのような脳モデルを作りたいかを考えなくてはならないというのを以前述べており、ここで足踏みをしているのだが、冒頭でも書いたように、次回以降、

・強いAIを実現するための基本原理を整理する
・簡易なモデルにおいて原理の有効性を示す


という形で話を進めていく。

「哲学入門」を読んだ(前編) 戸田山和久 著

哲学入門
戸田山和久著 2014年 ちくま新書

 GW10連休等もあり、しばらく更新できませんでしたが、落ち着いたので再開します。といいつつ、書評の記事ですが…

 本書は、amazonで自動でお勧めされたので買ってみました。著者は名古屋大学情報科学研究科教授、専攻が科学哲学、ということで、本書の中でも、唯物論から哲学を科学していく、というスタンスを取られており、多少なりとも人工知能に親和性のある哲学書なのではないかと思います。文章は口語体で、ユーモアもあり、難解な内容が分かりやすく解説されています。イラストも面白い。ワンタンを買いに行く中国の部屋ロボットとか…

 全体は序と8章に分かれ、1章意味、2章機能、3章情報、まで読み進めた。以降、表象、目的、自由、道徳、人生の意味、と続く。

 1章「意味」について、以下の文章がまず目をひく。
 「意味とは何かを考えるにあたり、もうちょい小さくて具体的な問いから始めよう。意味を理解するロボットあるいはコンピュータを作るにはどうすれば良いか」
 そうすると、このブログで扱っているのは、小さくて具体的な問いなのか…ということで読み進めた。

 チューリングテストの話について有名な精神科医プログラムのイライザの例が挙げられており(「母が私を叩くことをどう思うか→家族の話をもっと聞かせて下さい」)、一見会話しているようだが、実際には母というキーワードが出たら家族の質問をする等の形式的記号操作であり、イライザは意味を理解していないっぽいが、これは本当に意味を理解していないのか、理解するとはどういうことか、ということで、中国語の部屋の話題になる。ちなみに、イライザはロジャース派という、出来るだけ相槌などで患者の語りを引き出し、患者自身の気づきを促すという精神分析の流派に属しているそうだ。イライザで効果があったという話も聞いたりする…

 中国語の部屋については、著者はサールには否定的な立場であった。中にいてマニュアル操作をしているジョンは意味を理解していないが、部屋を見ている人からは意味を理解しているように見える、という立場である(ブルックスも著書でそう言っていた)。ただ、そこから一歩話を進め、部屋だけでも駄目であるという指摘もあった。すなわち、ワンタンの話題になって、部屋として「ワンタンは美味しいですね~」と回答をしていても、それは会話だけであり、実体を伴ってない。中国語の部屋を搭載したロボットがあり、実際にワンタンを食べることが必要なのではないか、ということでロボットの絵が出てくる。

 さらに、ワンタンと言われてワンタンを食べることで意味を理解していると言われると、掃除機ロボットは一応掃除をしたりするので、掃除機ロボットも意味を理解しているロボットになってしまうかもしれない、ということで、「ロボットに心をもたせる」ことを「意味を分かるロボット」のゴールにするとのこと。そして、著者としての「ロボットに心をもたせる」ための要件は以下の通り。

  • 環境の中で適切な行動をとらなければ自己を存続させられない仕組みになっていること(バッテリーが切れると壊れるとか…)
  • 自分のプログラムを書き換え、変化する環境に適した行動の幅を広げることが出来る
  • うまく自己を存続させたときにだけ、自己を複製できる

 また、この見解はブルックスの見解と重なる、とのこと(そうかな…)

 

 1章の後半は、意味を人間が扱うため、言語が意味を表彰している、という思考の言語仮説にたいし、ミリカンという哲学者の「目的論的意味論」を紹介している。意味は、その「本来の機能」による、というものらしい。著者にならい分かりやすく口語で書くと、「はさみは紙を切るのが本来の機能であり、背中を掻くとかははさみの意味では無い」というようなことだ。思考の言語仮説だと、人間の脳内の処理がコンピュータと同じ統語論的処理になり、表象を記号的に取り扱うことで、人間ですら意味の理解を持ちえない、ということが問題だそうで、さらに、因果意味論という反論では不十分で、目的論的意味論が必要だという議論が繰り広げられている。


 さて、意味とは何か、心を持つロボットを作るにはどうすれば良いかということで、ブログ筆者の根本は「ロボットの心 7つの哲学的物語」が元になっている。すなわち、意味は外界にある、意味を扱うには外界と脳を結ぶ身体が必要、ということである。本書でもバナナがよく出てくるが、バナナの意味はバナナ本体にあり、それ以上でもそれ以下でもないという立場。
 実は、戸田山教授が言う心の要件「自己を存続させられない仕組み」というのは、人間が死すべき定めにある以上、人間と同じような意味理解をするためには必要であるが、死なないエージェントでも外界と身体があれば意味を扱うことは可能であり、「自己を存続させられない仕組み」は必要条件では無い。外界と身体が必要ということの方が、広義でかつ明快、コンパクトな定義だと思う。
 中国語の部屋を装備したロボットというのは、「意味を扱うには身体が必要」ということを言っており、中国語の部屋の議論から発展した結論としては同じような方向ではあるが、ブログ筆者としては「ロボットの心 7つの哲学的物語」を推したい。

 また、ブログ筆者の主張のもう一つの柱である、意味とは言語で定義されるというソシュールの見解が本書には入っていない。思考の言語仮説(脳内で意味は表象として言語処理される)というより、ソシュールによれば、表象と言語、意味と言語は一体なのである。
 そのため、ブログ筆者としては、外界、身体モデルを作るに当たり、それらを言語をベースに生成することで、脳内で扱う表象と、身体を通じた外界モデルの一致が保証された状態を作るのが良いと思う。
 ただ、脳内で表象を記号的に扱えば良いかどうかは分からない。どうしても扱いたくなるが、ブルックスの「表象無き知性」が知能の元であるという主張に反してしまう。


 ここまで1章「意味」の話に終始してしまったが、2章は「機能」について「目的論的意味論」の解説が展開される。3章の「情報」では、シャノンの情報定理を始めとして、工学的な勉強になった。世界は情報であるとか…

 本書を読んで、脳内では世界は表象になっているということを意識する必要性はあらためて感じた。外界を記号で構築するとして、表象無き知性を貫くか、脳内で表象を扱ってみるか、どちらが良いのかは、やってみないと分からない。

脳モデルの構造について(その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