一つのFPGAで4000ニューロンからなる意識する機械をデザインしてみましょう。まずは、学習機能なしで、単純にニューロンとシナプス接続を再現するだけのものを。この話、ちょっと長くなりますので、本日は、規模の見積もりをしておきましょう。
アルテラ社の、一番安価なサイクロンと言うチップは、3000ロジックエレメント入ってます。これに、独立した16のニューロンを組み込み、256時分割で動かすようにしましょう。
外部RAMは、データ幅64ビットのものを必要な数接続します。
まず、入力側の係数と刺激ですけど、一つのニューロンにつき8ビット(4+4)のデータが、4千のシナプス、256の時分割分必要ですから、512000バイト必要です。これは、64ビットデータ幅で128000、つまり、17ビットのアドレスでアクセスできますね。チップには16ニューロンありますので、同じものが16個必要になります。チップの入出力ピンには限りがありますので、RAMのアクセスは同じピンを使いましょう。
今回は一つのチップだけで設計しますけど、同じチップを接続することで40億のニューロンからなるニューラルネットワークが実現できるようにデザインします。接続は、一辺16のニューロンからなる8次元接続とし、内3次元はチップ内、残りの5次元が外部チップとの接続になります。
それぞれの次元は、異なる相手と接続されますので、最低でも5つの入出力が必要です。チップ内部には16の独立したニューロンがありますので、できれば60の入出力を準備しましょう。
ニューロンは、いずれか一つの次元のみが異なる相手先とのみ接続されるものとします。この場合、接続先のアドレスは、8つの次元を表す3ビットと、そこにつながる16ニューロンを識別するための4ビット、計7ビットがニューロンを決めるために、そのニューロンの4000のシナプスを指定するために12ビット、合計19ビットが必要になります。
それぞれのニューロンは4000の出力先を持ち、256時分割されますので、必要な容量は2.4MB、64ビットデータ幅で800000、20ビットのアドレス線で表すことが出来ますね。結局のところ、必要なRAMは16のニューロンの入力に16MB、出力に40MBとなり、データ幅64ビットの場合のアドレスは24ビットと言うことになります。
チップの動作は非常に単純です。まず、入力信号と係数を8組づつ、RAMより取り込み、乗算して累積します。これを4000入力分、512回繰り返した後、シグモイド演算をして出力4ビットを求めます。今度は出力先アドレス19ビットを3個づつ取り込んでそこに結果を出力します。ステップ数は合計で1800と少々、200MHz(5ns周期)で動作するとすると、9μs少々で一つの動作が終わり、256の時分割処理に要する時間は2.5ms程度、これは、ヒトの脳の動作速度とほぼ同じになります。