進化するコンピュータは可能か
1.ハードウェアの進化とはして欲しいことを伝えるだけで、あとはコンピュータが自分でうまい方法を探してやってくれる。あるいは、仕事の状況が突然変った時でもコンピュータが条件の変化に柔軟に対応して、今までとは別の方法で同じように仕事をこなしてくれる。
プログラミングをしたことのある人なら、現実のコンピュータがそんな夢とかけ離れていることを知っているでしょう。コンピュータに仕事をさせるには、仕事の目的を伝えるのではなく仕事の手順をこまかくしかも完全に正確にプログラムしなければなりません。仕事の目的を知りませんから、コンピュータはプログラムが間違っている場合でも間違った通りに実行しますし、状況が変っても今までと同じ手順を繰り返すだけです。
しかし、もしコンピュータが生物のように進化することができたら、初めに書いたようなことができるのではないか。さらに、目的を達成するのに手持ちの機能で不足していれば、足りない機能を新たに創り出す、仕事のこなし方が遅ければ、遅い部分を自分で強化してもっと速くできるようにする、そんな夢のコンピュータをつくる。それが進化するハードウェアの研究の目的です。
2.たくさんつくってはこわすことで進化させる
生物でないものを進化させるといってもちょっとピンとこないかもしれません。そこで、この研究で使う進化のしくみをおおまかに説明しましょう。
図1の(a)を見てください。○が10個あります。その一個一個が何かのハードウェアであると思ってください。進化を考えているので、生物の言葉を借りて各ハードウェアを固体と呼ぶことにします。次にそれぞれの固体にどれだけ目的にあっているかに応じて点数を付けます(評価)(b)。そして点数の低い固体は捨ててしまいます(選択)(c)。図1の場合4個を捨てて6個だけ残しています。もちろんハードウェアを本当に捨てることはしません。とりあえず無いものと考えるということで、ハードウェアそのものは変化させた上で再び使います。さて、残った点数の高い6個の固体を元に、いくつかの固体から部品を持ち寄って新たに10個の固体をつくります(交叉)(d)。さらに、いくつかの固体(図の場合は2個)の一部を適当に変えます。(突然変異)(a)。こうして最初の10個の状態にもどりました。このサイクルを何回も繰り返します。評価、選択、交叉、突然変異の各操作のパラメータをうまく調節すると、サイクルを回すごとに次第に固体達の評価値が上がって来るということが起こります。これを進化と考えるわけです。
3.固いハードウェアを柔らかく使う
さて、進化のしくみはよいとしても、対象は「固い」ハードウェアです。普通に考えれば、固いものは進化どころか変化だってしそうにありません。
この問題は次のように解決することができます。つまりハードウェアのおおもとの構造は変えずに実質上の機能だけを進化させるようにするのです。私たちが使った2つの方法を次に紹介しましょう。
(1)論理回路とプログラム言語を使う
図2(b)の回路を見てください。この回路でメモリAが0の時はNOR(B,
C)が、またAが1の時はAND(B, C)が0に出力されます。こういう種類の回路を1つのブロックとし、多数のブロックを格子状の配線のなかに、配置・接続します。また同じようにメモリで制御されるスイッチで配線達を各交点において接続すると、FPGA(Field
Programmable Gate Array)と呼ばれる回路ができます(図2(a))。この回路は各ブロックやスイッチのメモリに適当な値(アーキテクチャ・ビット)をロードすることにより、任意の論理機能にプログラムすることができます。
論理回路の機能は、HDL(Hardware Description Language)と呼ばれるC言語に似たプログラム言語で記述することもできます。HDLプログラムはソフトウェアと同等の柔軟性を持ち、またコンパイルすることでFPGAのアーキテクチャ・ビットの列へと変換することができます。
そこで私たちの研究では、一つの方法としてHDLプログラムを進化させ、それにより対応するFPGA上の論理回路の進化を実現することにしました。
(2)セルラオートマタの上の模様を使う
もう一つの方法として、セルラオートマタを使う研究も行なっています(表紙)。セルラオートマタ(CA)は例えば正方形の形をした「セル」を2次元に、あるいは立方体の形をしたセルを3次元に敷き詰めた空間です。各セルはいくつかの状態を取ることができ、またすぐとなりにあるセル達とだけ情報をやりとりして一定時間ごとに一斉にその状態を更新します。この状態の更新のルールによりCAはその上にいろいろな変化する模様を作ることができます。表紙の写真は2次元CAを動作させて、その上にニューラルネットを模様としてつくらせたものです。赤・緑・黄の線に見えるのはその色(状態)を持つセルが連なって並んでいるためで、それぞれニューラルネットの興奮性軸索、抑制性軸索、樹状突起に相当する信号線です。そして、その線の中心をセルからセルへバケツリレーのように情報(状態)が流れていくようになっています。
こうすることでCAそのものは不変でもその上の信号線としての模様を変えることによりニューラルネットの構造・機能を変化させることができるわけです。
4.発生・成長により矛盾のない形をつくる
交叉・突然変異などで固体を変化させるときにはもう一つ問題があります。例えば表紙のようなCA上のニューラルネットを2つ持ってきてそれらを「親」とする「子供」のニューラルネットをつくることにします。そのとき片方の親の上半分の平面と、もう片方の親の下半分の平面をつなぎあわせたらどうなるでしょう。大抵の場合、信号線となる模様はつなぎ目で切れてしまうでしょう。そうなると信号の伝達がうまくできないので、模様はニューラルネットとして機能しなくなります。
この事情はHDLプログラムを使った場合も同じです。1つのプログラムの前半分と別のプログラムの後半分をつないだ場合、大抵の場合文法エラーになってしまいます。
私たちは、ここでも生物の真似をすることで問題を解決しました。実は表紙の写真のニューラルネットは各ニューロンの信号がその中を流れる成長情報をもとに自分自身を伸ばしながらできあがったものなのです。子供が親から受け継ぐのは完成した信号線ではなく、成長情報とします。こうすると両親から情報を半分ずつもらっても、成長がそれに応じて変るだけで信号線が切れ切れになる心配はありません。
ここでは詳しく説明できませんが、HDLプログラムの固体も発生という過程を通してつくられて、文法エラーを回避することができます。
5.超高速の進化をめざして
進化するハードウェアといっても、今まではソフトウェアでシミュレーション実験をしていました。しかしこれまでの研究でどうやら論理回路やCAニューラルネットを進化させるめどがつきました。これからは、実際に電子回路を使って研究を進めようとしています。そうすることにより進化の速度が飛躍的に大きくなります。うまく行けば目の前でコンピュータが進化するようすを見れるようになるかもしれません。私たちは近いうちにそんな日がやってくると考えています。
Copyright(c)2002(株)国際電気通信基礎技術研究所