日別アーカイブ: 2016年10月14日

知能とは何か?:甘利俊一 — 脳・心・人工知能

数理を用いて脳の研究を進めてきたパイオニア、甘利先生のブルーバックス本が出た。

「はじめに」には

数理で脳の秘密を解き明かすことができないかと生意気にも考えた。それから50年以上が過ぎた。

脳は未だに解明されたとは言えないが、それでも多くのことがわかってきた。道はまだ遠いかもしれないが、風雲は急を告げている。このあたりで私の考えてきたことを振り返り、脳の誕生、その働き、さらに心や文明、人工知能について、私の考えを世に問う時期が来たように思える。

一数理工学者が考える脳の世界を、ここに披露したい。

とある。甘利先生が今まで関わってきた数理脳科学の流れを、パイオニアの視点で概観できる本になっている。これは自分にとってベストタイミングで良い本がでたな、と思った。

ちょうど今、自分の研究の興味と流れに、脳の研究がぶつかってきている。また、世の中を見てみると人工知能一色にみえる。Google, IBM, ヤフー等々、猫も杓子もこの新しい産業になるかもしれない分野に投資し始めている。今年の春、韓国の囲碁の世界的トップ棋士イ・セドルが、ディープラーニングを取り入れた人工知能に負けたことは記憶に新しい。

この本では、脳の誕生からはじまり、現在わかっている脳の仕組み、今までのその理論的な取り扱いへと進む。その後、脳のニューロンのネットワークを模した数理モデルであるニューラルネットの説明、ニューラルネットを用いた学習の初期モデルであるパーセプトロンの説明、そして、最新のディープラーニングの説明へと発展する。実は脳機能の数理的研究は最新の人工知能研究につながるのだ。

さて、全部詳しく説明すると、とてもではないが書ききれない。そこで触りの部分の脳内の情報伝達を担うニューロンとニューロンのネットワーク、さらには、伝達される情報とは何かについて簡単に紹介し、その情報伝達を数理的に表してみよう。そして、なんとかディープラーニングとは何かについて、概念的に理解したい。

脳は1000億個のニューロンと呼ばれる神経細胞でできている。大雑把に言ってニューロンは、細胞を維持するために必要な核・細胞体と、情報の入出力を担う樹状突起と軸索から構成されている。脳内のニューロンの大きさは数マイクロメートル程度と小さい。ニューロン細胞は単独で存在するのではなく、結合したネットワーク構造を形成している。ニューロンの役目は単純だ。刺激という情報の伝達である。他のニューロンの軸索で生じる刺激を樹状突起部分で受けて、その刺激を細胞内で処理し、軸索部分を通して他のニューロンの樹状突起へと刺激が伝達される。軸索と樹状突起の連結部をシナプスと呼ぶ。一つのニューロンの軸索は最後に枝分かれして、何千個もの他のニューロンの樹状突起部分と結合しているため、脳内のシナプスの数は1000億x1000=100兆個(10^14)もの膨大な数になる。

人間はこんな複雑なニューロンのネットワークつまり、ニューラルネットを利用して情報処理しているのである。しかし、こんな複雑なネットワークを漠然と眺めていても何が起こっているか理解できない。

そこで、その理解のためまず初めに考える常套手段が、一つのニューロンではどんな刺激が来てそれをどのように処理するかということを調べることだ。有名な西洋伝統の分割して統治せよの精神である。しかし、一つのニューロンに注目しても、まだ分からないことだらけ。ニューロン内には多数の細胞内組織があり、多数の化学物質が刺激の伝達に関与している。また、そもそも刺激と言っているものは何なのだろうか。

この答えは生物学の研究により明らかにされている。ニューロン間の刺激伝達は化学的なものだ。各シナプスにおいて、刺激の出し手のニューロンの軸索部分から化学物質が放出され、それが受け手のニューロンの樹状突起に結合すると、受け手のニューロン内の細胞内電位が上がる。これが刺激の正体である。

細胞には膜があり外部と別れているため、電位を変化させることができる(細胞内の電荷をかき出す仕組みが電位を維持するのだ)。一般に、たくさんの化学物質が結合すれば、より大きな電位変化が起きる。さらに、この化学結合による電位変化に対して、ニューロン自体がさらに自分でも変化を加える。簡単に言えば、電位がある値を超えるとさらに大きな電位になるように調節するメカニズムがあるのだ。これをニューロンの発火と呼ぶ。発火したニューロンは軸索から神経伝達物質を放出し、他のニューロンの電圧を変化させる。こうやって、刺激がニューロン間を伝わっていくのである。

ドーパミンやセロトニンといった物質を聞いたことはないだろうか。これらはシナプスで授受されている化学物質、つまり神経伝達物質と呼ばれるものの幾つかである。神経伝達物質はこれら以外にも非常に多数あるし、役割も違う。各ニューロンも厳密に言えば複数の種類があって、放出or結合できる神経伝達物質はニューロンの種類によって異なる。

さて、これを一つ一つ調べることも重要なことだが、それではいつまでたってもニューラルネットによる情報処理の全体像にたどり着けない。具体的な細胞の細かい部分に注目してしまうと、抽象的な情報処理の本質が分からなってしまうのである。そこで、ここはえいやと単純化して、本質(と考えるもの)を取り出し議論する必要がある。これは西洋伝統のプラトンのイデア論的発想である。

そこで、全ての神経伝達物質を無視して、ニューロン内の電位にのみ注目し、刺激伝達を抽象化しよう。今までの話を単純化すれば、ニューロンAの軸索とニューロンBの樹状突起が結合しシナプスを構成している時、Aが発火したらBに電位変化を引き起こし、さらにB自身で電位を変化させるということだ。こうやって考えると、伝わっているのは電位変化であることがわかる。

これをさらに抽象化して、一つのニューロンを一種の関数として見てみよう。

x=f(x’-h)

ニューロンが受けとる電位変化は関数の変数 x’ だ。ニューロンが出す電位変化 x は関数 f(x’) の返り値として表される。h は発火に必要な閾値である。すなわち、この関数 f(x’) は x’=0 を境にして、急激に変化する関数ということである。

さて、ニューロンが受けとる電位変化 x’ は他のニューロンの出す電位変化と関連しているはずである。しかし、この時、受け取る電位変化は他のニューロンが出した電位変化そのままではない。なぜなら、ニューロン間ではシナプスの結合の仕方が異なるからである。これはシナプスでの軸索と樹状突起間の距離や、神経伝達物質の種類に依存して決まる。そこで、この結合の強さを抽象的に表したパラメータを導入しよう。

ニューロンAとニューロンBがあって、Bの軸索がAの樹状突起につながっているとする。これを B->A のような記号で表す。ニューロンBが x_B の電位変化を出したとする。この時、BがAに与える電位変化を

w_AB * x_B

と表す。ここで w_AB はAB間の結合の強さを表すパラメータである。これによって、Aが出す電位変化 x_A は

x_A=f(w_AB * x_B – h)

となる。
実際に刺激が伝わるのには、有限の時間がかかるはずなので、x_A, x_B は時間の関数である。仮にちょうど1秒後に伝わる場合は

x_A(t)=f(w_AB * x_B(t-1) – h)

と表すことができる。もっと一般的に、伝達にかかる時間が分布していて、1秒前2秒前…の影響もg(1), g(2)の重みで受けているとすると、

x_A(t)=g(1) * f(w_AB * x_B(t-1) – h)+g(2) * f(w_AB * x_B(t-2) – h)+…

x_A(t)=∑_s g(s) f(w_AB * x_B(t-s) – h)

となる。これは連続時間系で表すと積分になる

x_A(t)=∫_0^∞ g(s) f(w_AB * x_B(t-s) – h) ds

実際には、AはBだけでなく、他の多くのニューロンとつながっている。そこで、すべてのニューロンの出力電圧変化をベクトル量 X:= (x^A, x^B, …)^T とし、各ニューロンが構成するシナプスの結合強度を行列 W で表すことにする。
この時、このベクトルの変化量は

X(t)=∫_0^∞ g(s) f(WX(t-s)-h) ds

となる。

この積分方程式に従うベクトル量Xのダイナミクスを調べることで、脳内で起こる情報伝達を抽象的に理解することができるはずである。しかし、これは非常にむずかしい問題だ。ニューロンの数が1000億もあるので、ベクトルの要素数 n も1000億必要になる。計算できるわけがない。そこで、その平均的な挙動を考えるのがまず簡単である。

E[X]=1/n * ∑_{i=A,B,…} x_i

こうすれば積分方程式は以下のようになる。

E[X(t)]=∫_0^∞ g(s) E[f(WX(t-s)-h)] ds

ここで、右辺の平均値をE[X]で展開すると、

E[f(WX(t-s)-h)]=F(E[W]E[X(t-s)+S])

とかける、、、らしい(キーワード:統計神経力学)。よって

E[X(t)]=∫_0^∞ g(s) F(E[W]E[X(t-s)]+S) ds

を得る。

なんにセヨ、これでダイナミクスを記述する方程式ができたので、これを解析して何が起こるか決めるのがよろしい。F(x)をシグモイド関数と仮定する。まず考えたいのは、時間変化しない定常状態である。この時方程式は

E[X]=F(E[W]E[X]+S) ∫_0^∞ g(s) ds = F(E[W]E[X]+S)

となるので、非常に単純である。これは、E[W] が大きい時3つの解を持つことが知られており、そのうち1つが不安定、残りの二つは安定である。つまり双安定系である。これは時間が経っても無くならないので、記憶の最も単純な模型となる。

今はすべてのニューロンの平均値を考えたが、実はニューロンのネットワークは互いに関係の強いニューロンの集合が複数あり、それが弱く連結したクラスター構造を取っている。したがって、各クラスターの平均値を変数に取り直して、方程式を立て直した方が良い。この時、ニューロンのネットワークは全体として、多数の安定状態を持つ。安定な状態がたくさんあると、ダイナミクスの履歴に依存して、十分時間が経った時の安定な状態が変化する。したがって、逆に言えばその安定な状態を観察できれば、それまでのダイナミクスを大まかに予測できることを意味する。これは、過去に起こったことを予測できることに対応し、つまり、これこそが記憶となるのである。

さて、安定な状態はもちろんネットワークの結合の強さによって変化する。結合の強さが固定されたネットワークがあるとして、ある初期刺激がある特定のニューロンクラスターに生じるとする。そうすると時間が経つにつれて、ある一つの安定な状態に移行する。別の初期刺激を与えれば、安定な状態は変化する。これは言い換えれば、初期刺激により、違う記憶が同じネットワークから呼び起こされることを意味する。

これこそが、脳の面白い点だ。すべての記憶はニューロンのネットワーク上に、その結合の強さを通して重ねて記憶されているのである。これを脳の連想記憶模型と呼ぶ。ある種の刺激が加わり、その刺激によって安定状態が想起される。これは刺激により記憶が連想されることに近い。また安定状態はより一般的には、時間的に変化するアトラクターでも良いので、時系列順の記憶も保持できる。

記憶とは判断のもとになるものだ。過去にAという状況に合って、その時に良い行動はBであったとして、それが記憶されたネットワークがあるとする。このネットワークを使えば、状況Aを意味する刺激を入力するとBという行動を示す安定な状態がネットワーク上に現れる。したがって、状況Aに対応して何をすれば良いかは、実際にネットワークにAを入力してみればわかることになる。

ネットワークの安定状態はその結合の強さのパターンに依存して決まるのであった。そこで、もし、結合の強さが時間的に変化しないとすると、状況Aに対応する最適解はいつでもわかるが、しかし、他の状況には対応できなくなる。そこで、実際に生じた安定状態をもとに行動した結果を、再びネットワークの結合の強さを変化させることに利用してみよう。こうすることで、ネットワークが学習をして、最適な行動を自分で選択できるようになるのではないかという期待が湧く。

連想記憶模型で学習過程を理解するには、閉じたネットワークの結合を情報のフィードバックに依存して変化させて、最終的に生じる安定状態がどのように変化するか解析する必要がある。しかし、これは一般的にとても難しい問題である。ネットワーク内のループ構造のみならず、外部からの刺激への学習がもたらす情報の高次フィードバックがあるために、結合の強さの微小変化に対して安定状態が非線形な影響を受けるから、最終的にどんな影響が出るか全く予想がつかない。

そこで、その代わりに、もっと単純な開いたネットワークを考えてみよう。外界からの刺激が入力されるニューロンは一部のニューロンに限り、その刺激がループ無しのニューラルネットを通って、一部の外部への出力を受け持つニューロンに一筆書きで到達することを考える。この場合、ニューラルネットは閉じていないため非自明な安定状態を持たない。つまり安定状態は、唯一すべてのニューロンが発火していない自明な状態のみである。

これでは安定状態と最適な行動を結び付けられないし、学習模型も作れないのではないかと思うかもしれない。そこで、入力に対する行動の選択は単に、単に外部からの入力がニューラルネットを通ってどのように外部へ出力されるかで決まるとする。つまり、最適な行動の定義を変えるのである。もちろんこれは脳の模型とは言えないが、ネットワークの結合変化と学習を対応させる最も単純な模型の一つにはなる。しかもここのニューロンの興奮状態の時間変化を調べる必要はなく、単にどのように興奮が伝わるかを表す関数の性質を調べるだけで良い。つまりダイナミクスではなく、代数的な問題として考えれば十分だ。一般的に行って、ループのない開いたネットワーク上の興奮伝達を記述する関数は、結合の強さの微小変化に対して出力が線形に変化するので解析が容易なのだ。

これは、脳内の情報処理にインスパイアされた人工的な情報処理方法を生む。これが、現在騒がれているディープラーニングを用いた人工知能の基礎になる部分である。

開いたニューラルネットを用いた学習の模型は、1950年代に考案され、パーセプトロンと呼ばれた。パーセプトロンは内部で互いに独立したニューロンが存在する層が複数あり、層間では一方向性の結合があるような開いたニューラルネットを用いて構成される。最も単純なパーセプトロンは3層からなり、第一層は外部からの入力を受け取るニューロンの層、第三層は外部へ出力を担うニューロンの層であり、第二層が中間に挟まっていて、各層を連結させている。この時ニューロンの興奮は第一層から第二、第三層へと順繰り移行し、戻ってこないことを仮定する。

この時の学習とは、つまり入力に対して、最適な出力を得られるように、ニューロンの各層間の間の結合の強さを変化させることを意味する。どのように変化させれば良いだろうか?それは、単純で、まず正解を知っているとすると、ある入力を入れた時の出力が、合っているか間違っているか判断できる。間違っているにしてもどれくらい違うかも誤差として数値にできる。そこで、その誤差が減るように結合の強さを変化させるのである。どれくらい結合の強さを変化させれば良いかは数学的に簡単な方針を与えることができる(結合の微小変化が出力に線形の変化を与えるから)。具体的な数式はここでは示さない、本の132ページを確認してほしい。

さてしかし、この方法を繰り返しても正解に近づかず学習が進まなくなる時がある。これは結合の強さを表すパラメータ空間上の異なる2点が同じ状態(答え)を出す場合があるからである。つまり、ネットワークの冗長性が学習の進行を妨げるのだ。これを回避するために、評価関数をパラメータを変数とする素朴に直行したユークリッド空間で定義するのではなく、曲がったリーマン空間で定義すれば良いということがわかっているらしい。この定式化には情報幾何が使われる。

似たような問題は物理でもある。ある試行関数があるとして、最適な状態を決めるパラメータを探すという問題だ。これは変分原理に基づいていて、同様に状態空間は曲がっているのである。従って、素朴に評価しても、学習が進まなくなる場合があるはずだ。これを回避するために、情報幾何が使えそうだ。例えば変分モンテカルロやテンソルネットワークの問題があげられる。

今考えているのは正解が分かっている場合の学習である。これを教師付き学習と呼ぶ。しかし、答えがわからない問題でなんとか判断することにこそ価値が有る。一番最初に挙げた囲碁の問題がそうである。囲碁はまだ解が分かっていない。そこで解がわからない問題に対して、どうやってネットワークの結合の強さを最適化するような学習方法をどのように構築すれば良いのだろうか。

それには、現在の状況を評価する評価関数を導入すれば良い。そして評価関数も学習により更新していくのである。これには事前に予測して評価した次の結果の評価と、実際の評価の差がなくなるように学習を進める。

評価関数を使わない教師なし学習もある、自己組織化と呼ばれるヘブ学習である。これは単純で、ニューロンが発火したら、そのニューロンへ情報を伝えるための結合の重みを増やすのである。つまり、発火したら発火しやすくなるのだ。これはパラメータ空間の次元をある程度減らして学習しやすくする作用があり、自己組織化と呼ばれる。

そして、ディープラーニングとは、中間層が1層ではなく多層である、つまり中間層がディープであるようなパーセプトロンを用いた学習のことである。中間層がディープになるほど、抽象的な物事を取り扱いやすくなる。さらに、自己組織化を最初に導入し、多量のニューロンがあっても学習を進めやすくする。また、ループ構造を中間層に導入する。これにより、非自明な安定状態が出現可能になる。ディープなネットワークの学習にかかる計算コストは莫大になるが、最近のコンピュータの計算能力向上で、それが可能になったのだ。

最後に、本は心の問題について突入する。心の問題は難しい。どこに意識があるのか。意識とは何か。これは大問題だが、ここにまとめて書くのは難しい。

甘利先生の研究は1970年代というニューロサイエンスからすれば暗黒期に飛躍している。その時に、統計神経力学、神経場の理論、情報幾何等々の理論が発達した。その時代に自分の研究プログラムを作って、それに則って研究を進めたらしい。これはとても重要な考え方だ。無視されている暗黒期こそ自由だということだ。自分も研究プログラムを作って研究を進めてみよう。こんな時代でも、社会の要請ではなく、自分の興味で長期的な研究を進めることができるかもしれない。