(57)【特許請求の範囲】
【請求項１】
複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層の人工ニューロンとを結びつけるシナプス結合と、を有し、前記複数の層のうち第１の層の人工ニューロンの出力データに前記シナプス結合の重み情報を乗じて第２の層の人工ニューロンにおいてデータ処理するニューラルネットを実現する電子回路であって、
二次元以上の仮想空間において当該仮想空間を任意の数の任意のポリトープで分割し、前記ポリトープ毎に配置された回路ユニットと、隣接するポリトープに配置された前記回路ユニット間で前記出力データを含む信号を伝送する配線と、を備え、
前記回路ユニットは、第１の層に属する複数の人工ニューロンと、第２の層に属する複数の人工ニューロンと、を実装し、
自身が属するポリトープに隣接するポリトープに配置された他の回路ユニットから、前記第１の層に属する人工ニューロンの出力データを受け取る入力手段と、自身が属するポリトープに隣接するポリトープに配置された回路ユニットへ、自身の回路ユニットの前記第１の層に属する人工ニューロンの出力データを出力する出力手段と、を備え、
前記出力手段は、前記入力手段によって受け取った前記自身が属するポリトープに隣接するポリトープに配置された他の回路ユニットの前記第１の層に属する人工ニューロンが出力した出力データを、自身が属するポリトープに隣接するポリトープに配置された回路ユニットへ、更に出力することを特徴とする電子回路。
【請求項２】
前記入力手段は、自身が属するポリトープに隣接するポリトープに、更に隣接するポリトープに属する回路ユニットが出力したデータを受け取り、
前記出力手段は、自身が属するポリトープに隣接するポリトープに属する回路ユニットへ、更に前記出力したデータを出力することを特徴とする請求項１に記載の電子回路。
【請求項３】
前記回路ユニットにおいて、自身が属するポリトープに隣接するポリトープに配置された回路ユニットが出力したデータのうち、自身が属するポリトープに隣接するポリトープに更に隣接する所定のポリトープに配置された回路ユニットが出力した出力データのみを選択して受け取ることを特徴とする請求項１または請求項２に記載の電子回路。
【請求項４】
前記ニューラルネットは、自身が属するポリトープの第１の層に属する人工ニューロンと、自身が属するポリトープの第２の層に属する人工ニューロンと、前記第１の層の人工ニューロンが前記第２の層の人工ニューロンに作るシナプス結合と、自身が属するポリトープの前記第１の層に属する人工ニューロンが、自身が属するポリトープに隣接するポリトープの第２の層に属する人工ニューロンに作るシナプス結合と、を含む第１のシナプス結合と、
前記第１の層に属する人工ニューロンの出力が、自身が属するポリトープに隣接するポリトープに更に隣接するポリトープの第２の層に属する人工ニューロンに作る第２のシナプス結合と、を有し、
前記回路ユニットは、前記第１の層に属する人工ニューロンの入力データを保持する第１の記憶部と、前記入力データから前記第１の層に属する人工ニューロンの出力データを生成するデータ生成部と、前記第１のシナプス結合の重み情報を保持する第２の記憶部と、前記出力データと前記第１の重み情報との第１の積を算出する第１の乗算回路と、自身が属するポリトープに隣接するポリトープに配置された回路ユニットが出力した前記出力データから所定の数のデータを選別して前記出力手段に出力するデータ選別部と、自身が属するポリトープに隣接するポリトープに配置された回路ユニットの前記データ選別部が出力したデータを選択する選択回路と、前記選択回路が選択したデータに対応する前記第２のシナプス結合の重み情報を保持する第３の記憶部と、前記選択回路が選択したデータと前記第２の重み情報との第２の積を算出する第２の乗算回路と、前記第１の積と前記第２の積の総和を算出する加算回路と、前記総和と所定の閾値との比較結果に基づいて、第２の層に属する人工ニューロンの出力データを決定する大小比較器と、を備えることを特徴とする請求項１から請求項３のいずれかに記載の電子回路。
【請求項５】
前記入力手段と前記出力手段は並列に動作し、自身が属するポリトープに隣接するポリトープの前記出力手段が出力した出力データを前記入力手段で受け取り、前記受け取ったデータを記憶部に記憶し、所定の遅延時間の後に、前記出力手段は、自身が属するポリトープに隣接するポリトープに配置された回路ユニットへ自身の回路ユニットの第１の層に属する人工ニューロンの出力データを出力し、その後に、前記記憶部が記憶している前記受け取ったデータを出力することを特徴とする請求項４に記載の電子回路。
【請求項６】
前記回路ユニットは、前記第１の層に属する人工ニューロンと前記第２の層の人工ニューロンとが作るシナプス結合の中で、不要なシナプス結合の重み情報を０にすることを特徴とする請求項１から請求項５のいずれかに記載の電子回路。
【請求項７】
複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層の人工ニューロンとを結びつけるシナプス結合と、を有し、前記複数の層のうち第１の層の人工ニューロンの出力データに前記シナプス結合の重み情報を乗じて第２の層の人工ニューロンにおいて情報処理するニューラルネットを実現する配線方式であって、
二次元以上の仮想空間において、当該空間を任意の数の任意のポリトープで分割し、前記ポリトープ毎に回路ユニットを配置し、隣接するポリトープに配置された前記回路ユニット間で、前記出力データを含む信号を伝送するよう配置された第１の配線と、
第１の層に属する複数の人工ニューロンと第２の層に属する複数の人工ニューロンとを実装し、第１の層の人工ニューロンは、自身の出力データを時分割多重化し、該時分割多重化したデータと自身のポリトープに隣接するポリトープが出力したデータとを合わせたデータを、同一回路ユニット内の第２の層に属する人工ニューロンと、自身のポリトープに隣接するポリトープに配置された回路ユニットの第２層に属する人工ニューロンと、へ出力し、
前記同一回路ユニット内の第２の層に属する人工ニューロンは、自身のポリトープに隣接するポリトープに配置された回路ユニットの第１の層に属する人工ニューロンが出力した出力データを入力するよう配線する第２の配線と、を有することを特徴とする配線方式。
【請求項８】
前記第２の配線は、自身が属するポリトープに隣接するポリトープに更に隣接するポリトープに属する回路ユニットが出力したデータを、自身が属するポリトープに隣接するポリトープの所定の層の人工ニューロンへ出力するよう配線することを特徴とする請求項７に記載の配線方式。
【請求項９】
前記第２の配線は、自身が属するポリトープに隣接するポリトープが出力したデータのうち、自身が属するポリトープに隣接するポリトープに更に隣接する所定のポリトープが出力した出力データのみを受け取るよう配線することを特徴とする請求項７または請求項８に記載の配線方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子回路及び配線方式に関する。
【背景技術】
【０００２】
脳の構造や機能を模倣した電子回路はニューラルネット又はニューロコンピュータと呼ばれ、演算素子である人工ニューロン（以後、混乱する恐れが有る場合を除き、ニューロンと称する）が、多数個同時並列に動作する計算機である。以下、脳の構造や機能を模倣した電子回路またはソフトウェアによるシミュレータをニューラルネットと称する。
【０００３】
ノイマン型計算機は、固定アルゴリズムによる逐次処理に適している。一方、ニューラルネットは脳が持つ特徴を模倣できることから、金属の溶接制御や大規模プラントの運転制御などのように、その制御アルゴリズムを正確に記述することが難しい用途に利用できると考えられている。また、大量かつ曖昧で、欠落や変動幅が大きいデータの並列処理（例えば、画像認識や音声認識など）にも利用できると考えられている。人間の脳並みの規模と機能を持つニューラルネットを実現できれば、ロボットや自動車を大幅に高機能化できるだけでなく、あらゆる機械に人との親和性が高いインターフェース機能を付加したり、過去のデータから未来を予測したりすることもできるようになると期待されている。
【０００４】
ニューラルネットの実現方法は主に２種類ある。１つは、通常のノイマン型コンピュータ上に、ソフトウェアでシミュレータを構築する方法である。この方法では脳研究から得られる知見を生かした精密なモデルを作り、ニューロン及びニューラルネットの内部状態を観察又は制御しながら、ニューラルネットを動作させることができる。しかし、通常のコンピュータを用いたシミュレーション法である為、大規模（１０，０００ニューロン以上）なニューラルネットを、実時間（全ニューロンが４［ｍｓ］程度の時間で演算する）で動かすのは困難である。また、ニューラルネットの特長である、小型／低消費電力というメリットを享受することができない。よって、この方法は小規模なニューラルネットを、主に研究目的で使う場合に適している。
【０００５】
もう１つの実現方法は、ニューロンを電子回路でモデル化し、それを多数個実装したハードウェアとして実現する方法である。この方法では、多数（１０，０００個程度）のニューロンを並列に実時間動作させられる可能性が有る。
【０００６】
ニューラルネットの例を、図１５を用いて説明する。図１５は、ニューラルネットの一部を表した模式図である。Ｌ１層はデータ入力層であり、ここには、例えば４ビット幅の入力データを、４［ｍｓ］周期のパルス列に変換するニューロン２１０ｉ（ｉは１から１，０００までの整数）が、１，０００個存在する。Ｌ２層はデータ処理層であり、Ｌ１層から入力されるデータを演算処理するニューロン２１２ｊ（ｊは１から９００までの整数）が、例えば９００個存在する。
【０００７】
各ニューロン２１０ｉからは１本の出力信号線２１１ｉが出ている。出力信号線２１１ｉは、ニューロン２１２ｊの個数が９００なので最大９００に分岐し、シナプス結合２１３ｉ，ｊを介してニューロン２１２ｊと接続される。つまり、シナプス結合２１３ｉ，ｊは、各ニューロン２１２ｊに最大１，０００個存在する。各信号線２１１ｉで伝送されるデータａｉ（Ｌ１層のｉ番目のニューロン２１０ｉの出力）は１ビット信号である。
【０００８】
各シナプス結合２１３ｉ，ｊは、例えば８ビット幅の重みデータｗｉ，ｊ（Ｌ１層のニューロン２１０ｉからの信号を受け取るＬ２層のｊ番目のニューロン２１２ｊのシナプス結合の重み）を保持しており、ａｉとの積ａｉ×ｗｉ，ｊを計算する。各ニューロン２１２ｊでは、それぞれに付属するシナプス結合が計算した最大１，０００個の積ａｉ×ｗｉ，ｊの和を計算する。つまり、積ａｉ×ｗｉ，ｊのｉについて総和計算をする。
【０００９】
そして、総和の値が予め決められている閾値θを超えると、その出力信号線２１４ｊを１にし、閾値θを超えない場合は、その出力信号線２１４ｊを０にする。これら一連の演算は４［ｍｓ］以内で終了することが理想である。図１５に例示するニューラルネットはニューロン数が１，９００と少ないので、当該ニューラルネットをソフトウェアでシミュレートしても、或いは、当該ニューラルネットを電子回路で実装しても、４［ｍｓ］以内で動作させることは可能である。
【００１０】
以上の説明から明らかなように、Ｌ１層の１，０００個のニューロン２１０ｉは、Ｌ２層の９００個のニューロン２１２ｊと総当たりでシナプス結合を生成するので、シナプス結合２１３ｉ，ｊの個数は最大９０万に達し、配線２１１ｉが配線される箇所の総数も最大９０万に達する。
【００１１】
実際のニューラルネットでは使われる用途や、学習の結果などによって不要なシナプス結合が取り除かれるので、各ニューロン２１０ｉの出力がどのニューロン２１２ｊとシナプス結合２１３ｉ，ｊを作るかは多様である。つまり、ニューロン２１０ｉが選択的にニューロン２１２ｊとシナプス結合２１３ｉ，ｊを作れる機構が必要であり、これがニューロン間の配線問題をより困難にしている。
【００１２】
人間の脳では１個のニューロンが１，０００〜１０，０００個のシナプス結合を持つと言われているので、人工ニューロンの数が増加した時に必要になる配線の数は、ニューロン数が１，０００以下では、ほぼ２乗に比例し、１０，０００以上ではほぼ１乗に比例すると考えられる。従って、脳並みの１億ニューロン規模のニューラルネットを実現しようとすると、１，０００億〜１兆本程度の配線が必要になると推測できる。こうした膨大な配線を適当なルール、又は環境の下で適切に行う必要がある。
【００１３】
大規模ニューラルネットを実現するには、ニューロン間の配線が課題であるという事情から、ニューロン間の配線を減らす方法が既に幾つか考案されている。例えば、特許文献１がある。この技術ではＬ１層内の全ニューロンの出力データを時分割多重化して１本の共通信号線に送出し、それをＬ２層内の全ニューロンが受け取って演算に使用している。この方法を用いると、２つの層を結ぶ信号線が１本で済むという顕著な効果がある。
【００１４】
一方、中規模（１０，０００ニューロン程度）のニューラルネットは、回路の安定性や計算精度の観点からデジタル回路で作られることが多い。この規模のニューラルネットではニューロン間のデータ転送に、カリフォルニア工科大学のＭｅａｄ教授のグループが考案したＡＥＲ（Ａｄｄｒｅｓｓ  Ｅｖｅｎｔ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）が使われることが多い（例えば、非特許文献１）。
【００１５】
図１６を用いて、ＡＥＲのフォーマットを説明する。図１６は、ＡＥＲにおいてニューロン間のデータ転送に使うデータフォーマットである。ＡＥＲではニューロンに番号（Ｌｏｃａｌ  ａｄｄｒｅｓｓ）を割り当て、そのニューロンが実装されているＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）、ＰＣＢ（Ｐｒｉｎｔｅｄ―Ｃｉｒｃｕｉｔ  Ｂｏａｒｄ）又は機器等にも番号（Ｎｏｄｅ  ａｄｄｒｅｓｓ）を割り当てる。
【００１６】
例えば、Ｌ１層として２５６個のニューロンを内蔵するＬＳＩを４個搭載したＰＣＢを仮定すると、以下の方法で１，０２４個のニューロンを識別できる。それは、４個のＬＳＩを区別する為の２ビットのＮｏｄｅ  ａｄｄｒｅｓｓと、各ＬＳＩ内の２５６個のニューロンを区別する８ビットのＬｏｃａｌ  ａｄｄｒｅｓｓとを組み合わせて、１０ビットで１，０２４個のニューロンを識別するというものである。
【００１７】
Ｌ２層についても同様に、２５６個のニューロンを内蔵するＬＳＩを４個搭載したＰＣＢを仮定すると、Ｌ２層のニューロンは１０ビットのアドレス情報で識別できる。
Ｌ１層の或るニューロン２１０ｉから、Ｌ２層の或るニューロン２１２ｊにデータを送る場合を考えると、ニューロン２１２ｊのアドレス指定に１０ビット必要である。Ｐａｙｌｏａｄは２通りの使い方ができる。
【００１８】
第１の方法は、ニューロン２１０ｉの識別番号ＩＤｉ（１０［ｂｉｔ］）をＰａｙｌｏａｄとして送信する方法である。ニューロン２１２ｊでは、受け取った識別番号ＩＤｉをインデックス情報として用いてシナプス結合の重みを格納するメモリにアクセスし、シナプス結合の重みｕｉ，ｊを決定できる。この方法では、一度のデータ伝送にアドレス情報を２つ送ることになるので、１つのデータ量は２０［ｂｉｔ］（＝１０［ｂｉｔ］＋１０［ｂｉｔ］）になる。
【００１９】
平均してＬ１層からＬ２層の半分のニューロンにデータを送るとすると、全体では  ２０［ｂｉｔ］×（１，０２４÷２）×１，０２４＝１０，４８５，７６０［ｂｉｔ］＝１．３［ＭＢ］のデータ伝送が必要になる。これを４［ｍｓ］で実行するには１．３［ＭＢ］÷４［ｍｓ］＝３２８［ＭＢｐｓ］のデータ転送速度が必要である。
【００２０】
また、Ｌ１層ではＬ２層のどのニューロンにデータを転送するかを記憶していなければならないので、１０［ｂｉｔ］×（１，０２４÷２）×１，０２４＝５，２４２，８８０［ｂｉｔ］＝６５５［ＫＢ］のメモリが必要になる。
【００２１】
第２の方法は、Ｐａｙｌｏａｄとしてａｉ×ｕｉ，ｊを計算して送る方法である。ａｉが１ビットでｕｉ，ｊが８ビットの場合、ａｉ×ｕｉ，ｊは８ビットになるので、１つのデータ量は１８［ｂｉｔ］（＝１０［ｂｉｔ］＋８［ｂｉｔ］）である。
従って、全体のデータ転送量は、１８［ｂｉｔ］×（１，０２４÷２）×１，０２４＝９，４３７，１８４［ｂｉｔ］＝１．２［ＭＢ］である。全体のデータ転送量は、前記第１の方法の転送量よりも若干少なくなる。しかし、Ｌ１層に６５５［ＫＢ］のメモリが必要なことは変わらない。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特公平５−４７８７０号公報
【非特許文献】
【００２３】
【非特許文献１】Serrano-Gotarredona R, Oster M, Lichtsteiner P, Linares-Barranco A, Paz-Vicente R, Gomez-Rodriguez F, Camunas-Mesa L, Berner R, Rivas-Perez M, Delbruck T, Liu SC, Douglas R, Hafliger P, Jimenez-Moreno G, Civit Ballcels A, Serrano-Gotarredona T, Acosta-Jimenez AJ, Linares-Barranco B, "CAVIAR: a 45k neuron, 5M synapse, 12G connects/s AER hardware sensory-processing- learning-actuating system for high-speed visual object recognition and tracking." , IEEE Transactions on Neural Networks, Vol. 20, No.9, September, pp.1417-38, 2009.
【発明の概要】
【発明が解決しようとする課題】
【００２４】
ニューラルネットには内蔵するニューロン数が多くなると、ニューロン間の配線が膨大になるという基本的な問題が有る為に、従来技術では数万ニューロン程度を実現するのが限界であり、人間の脳並みの規模（１００億から１，０００億ニューロン）を実現する見通しは全く立っていない。
【００２５】
人間の脳には１００億から１，０００億のニューロンがあるが、実際に使われているのはその数％と言われているので、人工ニューロンの数が１億以上あれば、少なくとも脳機能の一部（図形認識や言語認識など）をかなり正確に模倣できると思われる。
【００２６】
しかしながら、次に述べる問題により、特許文献１の技術を用いて脳を模倣する１億ニューロン規模のニューラルネットを構築することは困難である。
第１の問題は、Ｌ１層とＬ２層の結合形式が、全てのニューロン対全てのニューロンに固定されている点である。シナプス結合を作る必要がないところは、シナプス結合の重みを０にすることで、実質的に結合をなくすことができるとされているが、このままでは非常に無駄が多い。
【００２７】
１億ニューロンのニューラルネットを例えば、大脳皮質のモデルとして用いられる６層構造で実現し、各層に同数のニューロンを割り振るとすると、１層当たり約１，７００万ニューロンになる。Ｌ１層の約１，７００万個のニューロンが出力するデータを受け取るＬ２層中の１個のニューロンにとっては、約１，７００万個中の１万個以下のデータにだけ意味があり、残り１，６９９万個のデータを無視しなければならない。無視すべきデータはＬ２層のニューロン毎に異なるので、この為に膨大な回路及び、Ｌ２層だけで８［ｂｉｔ］×１，７００万×１，７００万＝２８９［ＴＢ］ものメモリが必要になる。つまり、約２８９ＴＢ中の０．０６％（＝１万÷１，７００万）未満にだけ有効なデータが格納され、残りの領域には全て０が格納されることになる。
【００２８】
第２の問題は、共通信号線のファンイン（入力数）とファンアウト（出力数）が膨大になる点である。第１の問題と同様に１億ニューロンのニューラルネットを６層構造で実現したとすると１層当たり約１，７００万ニューロンになる。つまり、共通バスのファンインは約１，７００万であり、ファンアウトも約１，７００万ということである。これを電子回路で実現するのは非常に難しい。
【００２９】
また、約１，７００万個のデータを作りだす回路部は物理的にかなり大きくなるので、無理に１本に纏めようとすると数段階に分けて纏め処理をしなければならず、その回路が膨大になる。共通信号線を１本ではなく数本にすることも考えられるが、そうすると共通信号線毎にどのニューロンを属させるかが問題となる。また異なる共通信号線を跨ぐ通信をどうするかも大きな問題になり、それを解決するのは困難である。
【００３０】
これらの問題から特許文献１の技術は、数十から数百ニューロン程度の小規模ニューラルネットには適しているが、数千ニューロン以上のニューラルネットへの適用は難しい。
【００３１】
一方、ＡＥＲ法ではニューロン間の接続に大量のデータ伝送が必要であり、更に送信元に宛先アドレスを記憶するメモリが必要になる。中規模ニューラルネットでは、伝送すべきデータ量がニューロン数のほぼ２乗に比例し、またアドレスのビット数も増える。
【００３２】
例えばＬ１層とＬ２層がそれぞれ１０，０００ニューロンになると、アドレスが１４ビット以上必要になるので通信速度は、（１４［ｂｉｔ］＋８［ｂｉｔ］）×５，０００×１０，０００÷４［ｍｓ］＝３４．４［ＧＢ／ｓ］と、非常に高速なものが必要になる。また、Ｌ１層には（１４［ｂｉｔ］＋８［ｂｉｔ］）×５，０００×１０，０００＝１３８［ＭＢ］のメモリが必要になる。
このような事情から、ＡＥＲ法は数万ニューロン程度かつ、各ニューロンが数百個程度のシナプス結合を持つニューラルネットまでしか適用できなかった。
【００３３】
そこで本発明は、上記問題に鑑みてなされたものであり、ニューロン間の配線数を少なくする電子回路及び配線方式を提供することを課題とする。
【課題を解決するための手段】
【００３４】
上記の課題を解決するために、請求項１に記載した発明は、複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層の人工ニューロンとを結びつけるシナプス結合と、を有し、前記複数の層のうち第１の層の人工ニューロン（例えば、実施形態におけるＬ１層のニューロン２０ｉ）の出力データに、前記シナプス結合の重み情報を乗じて、第２の層の人工ニューロン（例えば、実施形態におけるＬ２層のニューロン２２ｊ）にて情報処理するニューラルネットを実現する電子回路であって、二次元以上の仮想空間において、当該仮想空間を任意の数の任意のポリトープ（例えば、実施形態におけるセルＣＮ）で分割し、前記ポリトープ毎に配置された回路ユニット（例えば、実施形態における回路ユニット１０）と、隣接するポリトープに配置された前記回路ユニット間で、前記出力データを含む信号を伝送する配線と、を備え、前記回路ユニットは、第１の層に属する複数の人工ニューロンと、第２の層に属する複数の人工ニューロンと、を実装し、自身が属するポリトープに隣接するポリトープ（以下、隣接ポリトープと称する）に配置された他の回路ユニットから、前記第１の層に属する人工ニューロンの出力データを受け取る入力手段（例えば、実施形態における入力部４５）と、隣接ポリトープに配置された回路ユニットへ、自身の回路ユニットの前記第１の層に属する人工ニューロンの出力データを出力する出力手段（例えば、実施形態における出力部４６）と、を備え、前記出力手段は、前記入力手段によって受け取った前記隣接ポリトープに配置された回路ユニットが出力した前記第１の層に属する人工ニューロンの出力データを、隣接ポリトープに配置された回路ユニットへ、更に出力することを特徴とする電子回路である。
【００３５】
これにより、隣接ポリトープに出力するデータを時分割多重化できるので、ポリトープ間の信号伝送用の線を１本にすることができる。また、信号伝送用の線を１本にしたまま、隣接ポリトープに隣接するポリトープ（以下、１つ先のポリトープと称する）に属する前記第１の層の人工ニューロンが出力したデータを、自身が属するポリトープの入力手段により受け取ることができる。
【００３６】
請求項２に記載した発明は、請求項１に記載の発明において、前記入力手段は、１つ先のポリトープに属する回路ユニットが出力したデータを受け取り、前記出力手段は、隣接ポリトープに属する回路ユニットへ、更に前記出力データを出力することを特徴とする電子回路である。
これにより、信号伝送用の線を１本にしたまま、１つ先のポリトープに隣接するポリトープ（以下、２つ先のポリトープと称する）に属する前記第１の層の人工ニューロンが出力したデータを、自身が属するポリトープの入力手段により受け取ることができる。
【００３７】
請求項３に記載した発明は、請求項１または請求項２に記載の発明において、前記回路ユニットにおいて、隣接ポリトープに配置された回路ユニットが出力したデータのうち、所定の１つ先のポリトープに配置された回路ユニットが出力した出力データのみを受け取ることを特徴とする電子回路である。
これにより、信号伝送用の線を１本にしたまま、特定のポリトープの人工ニューロンが出力したデータのみを、自身が属するポリトープの入力手段により受け取ることができる。
【００３８】
請求項４に記載した発明は、請求項１から請求項３のいずれかに記載の発明において、前記ニューラルネットは、自身が属するポリトープの第１の層に属する人工ニューロンと、自身が属するポリトープの第２の層に属する人工ニューロンと、前記第１の層の人工ニューロンの出力が前記第２の層の人工ニューロンに作るシナプス結合と、前記第１の層に属する人工ニューロンの出力が隣接ポリトープの第２の層に属する人工ニューロンに作るシナプス結合と、を含む第１のシナプス結合と、前記第１の層に属する人工ニューロンの出力が１つ先のポリトープの第２の層に属する人工ニューロンに作る第２のシナプス結合と、を有し、前記回路ユニットは、前記第１の層に属する人工ニューロンの入力データを保持する第１の記憶部（例えば、実施形態におけるメモリ２１）と、前記入力データから前記第１の層に属する人工ニューロンの出力データを生成するデータ生成部（例えば実施形態におけるパルス列変調回路２２）と、前記第１のシナプス結合の重み情報を保持する第２の記憶部（例えば、実施形態におけるメモリ２５）と、前記出力データと前記第１の重み情報との第１の積を算出する第１の乗算回路（例えば、実施形態におけるアンドゲート２６）と、隣接ポリトープに配置された回路ユニットが出力した前記出力データから所定のデータを選別して前記出力手段に出力するデータ選別部（例えば、実施形態におけるセレクター３４）と、隣接ポリトープに配置された回路ユニットの前記データ選別部が出力したデータを選択する選択回路（例えば、実施形態における選択回路３６）と、前記選択回路が選択したデータに対応する前記第２のシナプス結合の重み情報を保持する第３の記憶部（例えば、実施形態におけるメモリ３９）と、前記選択回路が選択したデータと前記第２の重み情報との第２の積を算出する第２の乗算回路（例えば、実施形態におけるアンドゲート４０）と、前記第１の積と前記第２の積との総和を算出する加算回路（例えば、実施形態における加算回路４３）と、前記総和と所定の閾値との比較結果に基づいて、第２の層に属する人工ニューロンの出力データを決定する大小比較器（例えば、実施形態における大小比較器２９）と、を備えることを特徴とする電子回路である。
【００３９】
これにより、１つ先のポリトープの第１の層の人工ニューロン群が出力したデータを、自身が属するポリトープの第２の層の人工ニューロンの入力として用いることができる。
【００４０】
請求項５に記載した発明は、請求項４に記載の発明において、前記入力手段と前記出力手段は並列に動作し、隣接ポリトープの前記出力手段が出力した出力データを前記入力手段により受け取り、前記受け取ったデータを記憶部（例えば、実施形態における遅延回路４４）に記憶し、所定の遅延時間の後に、前記出力手段は、隣接ポリトープに配置された回路ユニットへ自身の回路ユニットの第１の層に属する人工ニューロンの出力データを出力し、その後に、前記記憶部が記憶している前記受け取ったデータを出力することを特徴とする電子回路である。
これにより、１つ先のポリトープ又は２つ先のポリトープに属する人工ニューロンに出力するデータに、遅延を設けることができる。
【００４１】
請求項６に記載した発明は、請求項１から請求項５のいずれかに記載の発明において、前記回路ユニットは、前記第１の層に属する人工ニューロンと前記第２の層の人工ニューロンとが作るシナプス結合の中で、不要なシナプス結合の重み情報を０にすることを特徴とする電子回路である。
【００４２】
これにより、第１の層の特定人工ニューロンから第２の層の特定人工ニューロンへ伝わる情報を０にすることができるので、第１の層の当該特定人工ニューロンから第２の層の当該特定人工ニューロンへの信号伝達経路をなくすことなく、第１の層の当該特定人工ニューロンから第２の層の当該特定人工ニューロンへの入力を遮断することができる。
また、前記ニューラルネットの学習過程において、適当な条件が成立した時にシナプス結合の重み情報が０の箇所を０以外の値にすることにより、新たなシナプス結合を発生させることができる。
【００４３】
請求項７に記載した発明は、複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層の人工ニューロンとを結びつけるシナプス結合と、を有し、前記複数の層のうち第１の層の人工ニューロンの出力データに前記シナプス結合の重み情報を乗じて第２の層の人工ニューロンにおいて情報処理するニューラルネットを実現する配線方式であって、
二次元以上の仮想空間において当該空間を任意の数の任意のポリトープで分割し、前記ポリトープ毎に回路ユニットを配置し、隣接するポリトープに配置された前記回路ユニット間で前記出力データを含む信号を伝送するよう配置された第１の配線と、第１の層に属する複数の人工ニューロンと第２の層に属する複数の人工ニューロンとを実装し、
第１の層の人工ニューロンは、自身の出力データを時分割多重化し、該時分割多重化したデータと隣接ポリトープが出力したデータとを合わせたデータを、同一回路ユニット内の第２の層の人工ニューロンと、隣接ポリトープに配置された回路ユニットの第２層の人工ニューロンとへ出力し、前記同一回路ユニット内の第２の層の人工ニューロンは、隣接ポリトープに配置された回路ユニットの第１の層の人工ニューロンが出力した出力データを入力するよう配線する第２の配線と、を有することを特徴とする配線方式である。
【００４４】
これにより、隣接ポリトープに出力するデータを時分割多重化できるので、ポリトープ間の信号伝送用の線を１本にすることができる。また、信号伝送用の線を１本にしたまま、１つ先のポリトープの第１層の人工ニューロンが出力したデータを、自身のポリトープの第２層の人工ニューロンで受け取ることができる。
【００４５】
請求項８に記載した発明は、請求項７に記載の発明において、前記第２の配線は、１つ先のポリトープに属する回路ユニットが出力したデータを、隣接ポリトープの所定の層の人工ニューロンへ出力するよう配線することを特徴とする配線方式である。
これにより、２つ先のポリトープの第１層の人工ニューロンが出力したデータを、自身のポリトープの第２層の人工ニューロンで受け取ることができる。
【００４６】
請求項９に記載した発明は、請求項７または請求項８に記載の発明において、前記第２の配線は、隣接ポリトープが出力したデータのうち、所定の１つ先のポリトープまたは特定の２つ先のポリトープが出力した出力データのみを受け取るよう配線することを特徴とする配線方式である。
これにより、隣接ポリトープが出力したデータのうち、特定のポリトープの第１層の人工ニューロンが出力した出力データのみを、自身のポリトープの第２層の人工ニューロンで受け取ることができる。
【発明の効果】
【００４７】
請求項１に記載した発明によれば、ニューロン間の配線数を少なくすることができるので、ニューロンが配置されているポリトープ間の、信号伝送用の線を１本にすることができる。この結果、ポリトープを多数個接続した大規模ニューラルネットを実現できる。
また、信号伝送用の線を１本にしたまま、１つ先のポリトープに属するニューロンが出力したデータを受け取ることができるので、配線数を増加させることなく、遠方まで信号を伝えるニューロンが混在するニューラルネットを電子回路上に実装できる。
【００４８】
請求項２に記載した発明によれば、信号伝送用の線を１本にしたまま、２つ先のポリトープに属するニューロンが出力したデータを受け取ることができるので、配線数を増加させることなく、遠方まで信号を伝えるニューロンが混在するニューラルネットを電子回路上に実現できる。
【００４９】
請求項３に記載した発明によれば、信号伝送用の線を１本にしたまま、特定のポリトープのニューロンが出力したデータのみを受け取ることができるので、ニューロン間の結合即ち、シナプス結合が存在する領域に、方向性を持たせたニューラルネットを電子回路上に実現できる。
【００５０】
請求項４に記載した発明によれば、隣接ポリトープの第１のニューロン群が出力したデータを受け取り、前記データを隣接ポリトープへ再出力すると共に、前記データに対応するシナプス結合の重みを掛けたものを、第２のニューロン群で情報処理することにより、隣接ポリトープよりも遠方のポリトープのニューロンが出力した信号を、第２のニューロン群への入力信号として用いるニューラルネットを電子回路上に実現できる。
【００５１】
請求項５に記載した発明によれば、遠方のポリトープに属するニューロンへデータを伝送する経路に遅延手段を設けることにより、同一のニューロンから同一の時刻に出された信号であっても、当該信号が遠方のニューロンへ到達する時刻が、近傍のニューロンへ到達する時刻よりも遅れるニューラルネットを電子回路上に実現できる。
【００５２】
請求項６に記載した発明によれば、第１の層の特定ニューロンと第２の層の特定ニューロンとの間のシナプス結合が不要な箇所について、そのシナプス結合を実質的に無効にできるので、そのシナプス結合を特別扱いすることなく、第１の層のニューロン群と第２の層のニューロン群との間で一様にシナプス結合を作れるので、ニューロン間の配線が単純で簡単になる。
【００５３】
請求項７に記載した発明によれば、ニューロン間の配線数を少なくすることができるので、ニューロンが配置されているポリトープ間の、信号伝送用の線を１本にすることができる。
また、信号伝送用の線を１本にしたまま、１つ先のポリトープに属するニューロンが出力したデータを受け取ることができるので、配線数を増加させることなく、遠方まで信号を伝えるニューロンが混在するニューラルネットの配線を行うことができる。
【００５４】
請求項８に記載した発明によれば、信号伝送用の線を１本にしたまま、２つ先のポリトープに属するニューロンが出力したデータを受け取ることができるので、配線数を増加させることなく、遠方まで信号を伝えるニューロンが混在するニューラルネットの配線を行うことができる。
【００５５】
請求項９に記載した発明によれば、信号伝送用の線を１本にしたまま、特定のポリトープのニューロンが出力したデータのみを受け取ることができるので、シナプス結合が存在する領域に、特定の方向性を持たせたニューラルネットの配線を行うことができる。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施例１におけるニューラルネットの模式図と、Ｌ１層の出力を時分割多重化した信号を説明するための図である。
【図２】本発明の一実施形態による回路ユニット間の配線を説明するための図である。
【図３】任意のセルＣＮの出力信号と入力信号を時系列で表した図である。
【図４】本発明の一実施形態による仮想平面を分割して、回路ユニット間の配線を説明するための図である。
【図５】本発明の一実施形態による仮想空間を立方体で分割して、回路ユニット間の配線を説明するための図である。
【図６】本発明の一実施形態による回路ユニットを、パルスニューラルネットを用いたニューロン群で模擬した回路ユニットの回路図である。
【図７】パルス列変調回路内のデータ変換用メモリが保持するデータ変換テーブルを説明するための図である。
【図８】出力端子Ｐ０から出力されるデータのフォーマットを説明するための図である。
【図９】入力端子Ｐ１からＰ６で受け取った入力データを、順番に出力端子Ｐ０から出力するときの出力データを時間順に並べた図である。
【図１０】２つ先のセルとシナプス結合を作る場合における、セルの配置を説明するための図である。
【図１１】２つ先のセルとシナプス結合を作る場合における、セルＣ０からの出力信号と入力信号を説明するための図である。
【図１２】方向性を持ったシナプス結合を作る場合における、セルの配置を説明するための図である。
【図１３】方向性を持ったシナプス結合を作る場合における、セルＣＮからの出力信号と入力信号を説明するための図である。
【図１４】１つ先のセルへ出力する信号を遅延させる場合における回路ユニットの回路図である。
【図１５】ニューラルネットの一部を表した模式図である。
【図１６】ＡＥＲにおいてニューロン間のデータ転送に使うデータフォーマットである。
【発明を実施するための形態】
【００５７】
以下、本発明の実施形態について、図面を参照して詳細に説明する。まず、本発明のニューラルネットの構成について説明する。図１（ａ）は、本発明のニューラルネットの構成を表した図である。ニューラルネットは、第１の層（Ｌ１層）および第２の層（Ｌ２層）の２つの層から構成されている。
【００５８】
ニューラルネットは、Ｌ１層のニューロン２０ｉ（ｉは０から４，８６３の整数）と、Ｌ２層のニューロン２２ｊ（ｊは０から４，８６３の整数）と、Ｌ１層のニューロン２０ｉからＬ２層のニューロン２２ｊへの配線２１ｉと、配線２１ｉに対応したＬ２層のニューロン２２ｊのシナプス結合２３ｉ，ｊと、Ｌ２層のニューロン２２ｊの出力信号線２４ｊを有する。
【００５９】
各シナプス結合は、Ｌ１層のニューロンの出力情報をＬ２層のニューロンへどの程度の割合で伝えるかというシナプス結合の重みｗｉ，ｊを保持している。情報伝達が不要なシナプス結合についてはシナプス結合の重みｗｉ，ｊを０にすることで、実質的にシナプス結合を無効にできる。
【００６０】
Ｌ１層のニューロン２０ｉを１９等分して１９個のまとまり（以下、セルと称する）に分ける。すると、１つのセルあたりに存在するＬ１層のニューロン２０ｉは２５６個になる。次いで、セル毎にニューロン２０ｉの番号を振り直してｉを０から２５５までの整数にする。同様にして、Ｌ２層のニューロン２２ｊを１９等分して１９個のセルに分ける。すると、１つのセルあたりに存在するＬ２層のニューロン２２ｊは２５６個になる。次いで、セル毎にニューロン２２ｊの番号を振り直してｊを０から２５５までの整数にする。このようにして、図１（ａ）のニューラルネットを、１９個のセルＣＮ（Ｎは０から１８までの整数）で分割する。
【００６１】
図１（ｂ）は、Ｌ１層の出力データを時分割多重化した信号を説明するための図である。或るセルＣＮのＬ１層内の２５６個のニューロンの出力データは、図１（ｂ）に示すように時分割多重化され、信号ｘｉ，ｔ（ｉは０から２５５の整数、ｔは０以上の整数）として出力端子Ｐ０から出力される。
【００６２】
ｘｉ，ｔはセルＣＮのＬ１層のｉ番目のニューロンの、ｔ番目ラウンドの出力である。すなわち、ｘ０，ｔはニューロン２００の出力、ｘ１，ｔはニューロン２０１の出力，…，ｘ２５５，ｔはニューロン２０２５５の出力である。ここで、ラウンドとはＬ１層の２５６個のニューロンのデータを１回処理する処理単位のことである。
【００６３】
図２は、本発明の一実施形態による回路ユニット間の配線を説明するための図である。脳内の神経細胞は基本的に、物理的に近くの神経細胞とシナプス結合を作っている。この特徴を参考にしてニューロン間の配線問題を解決する。
図２（ａ）は、仮想平面を１９個のセルで分割した図である。図２（ａ）では、各セルは、正六角形の形状を有する。図２（ｂ）は、セル間の配線を示した図である。各セルに１つの回路ユニットが存在する。
【００６４】
図２（ａ）ではセルが１９個在るので、Ｌ１層とＬ２層にそれぞれ２５６×１９＝４，８６４個のニューロン２０ｉと２２ｊが入っていることになる。各セルには１個の出力端子Ｐ０と、６個の入力端子Ｐ１〜Ｐ６とがある（図２（ｂ））。セルの配置と、セル間の配線とには一定の規則がある。
【００６５】
図２（ｂ）に示すように、セルは７本の配線を用いて、隣接するセルと接続する。そして、入力端子と、その入力端子に入力される信号を出力するセルの位置とには一定の規則がある。入力端子ＰＱ（Ｑは１から６までの整数）には、相対位置ｑ（ｑは１から６までの整数）のセルが出力する信号を、Ｑとｑが等しくなるようにして入力する。
【００６６】
ここで、相対位置ｑとは、ｑの値１が自セルから見て真上の位置を、ｑの値２が自セルから見て右上の位置を、ｑの値３が自セルから見て右下の位置を、ｑの値４が自セルから見て真下の位置を、ｑの値５が自セルから見て左下の位置を、ｑの値６が自セルから見て左上の位置を、それぞれ表している。
【００６７】
すなわち、或るセルＣＮの入力端子Ｐ１は、ｑの値が１の真上に隣接するセルの出力端子Ｐ０と接続する。或るセルＣＮの入力端子Ｐ２は、ｑの値が２の右上に隣接するセルの出力端子Ｐ０と接続する。或るセルＣＮの入力端子Ｐ３は、ｑの値が３の右下に隣接するセルの出力端子Ｐ０と接続する。
【００６８】
或るセルＣＮの入力端子Ｐ４は、ｑの値が４の真下に隣接するセルの出力端子Ｐ０と接続する。或るセルＣＮの入力端子Ｐ５は、ｑの値が５の左下に隣接するセルの出力端子Ｐ０と接続する。或るセルＣＮの入力端子Ｐ６は、ｑの値が６の左上に隣接するセルの出力端子Ｐ０と接続する。
【００６９】
上記接続方法の具体例を、セルＣ０を例に説明する。図２（ｂ）に示すように、
セルＣ０の端子Ｐ１は、セルＣ０の真上に隣接するセルＣ１の出力端子Ｐ０と接続する。セルＣ０の端子Ｐ２は、セルＣ０の右上に隣接するセルＣ２の出力端子Ｐ０と接続する。セルＣ０の端子Ｐ３は、セルＣ０の右下に隣接するセルＣ３の出力端子Ｐ０と接続する。セルＣ０の端子Ｐ４は、セルＣ０の真下に隣接するセルＣ４の出力端子Ｐ０と接続する。セルＣ０の端子Ｐ５は、セルＣ０の左下に隣接するセルＣ５の出力端子Ｐ０と接続する。セルＣ０の端子Ｐ６は、セルＣ０の左上に隣接するセルＣ６の出力端子Ｐ０と接続する。
【００７０】
セルＣＮのＬ２層では、当該セルのＬ１層から入力される信号と、隣接セルから入力端子Ｐ１〜Ｐ６に入力される６本の信号とを使って、当該セル及び隣接セル内のＬ１層の全てのニューロン２０ｉとシナプス結合を作る。例えば、図２（ａ）のセルＣ０のＬ２層内の各ニューロン２２ｊは、セルＣ０及び隣接する６個のセルＣ１〜Ｃ６内のＬ１層の１，７９２（＝２５６×７）個のニューロン２０ｉとシナプス結合を作る。
【００７１】
同様に、例えばセルＣ１内のＬ２層内の各ニューロン２２ｊは、セルＣ１及び隣接する６個のセルＣ７、Ｃ８、Ｃ２、Ｃ０、Ｃ６、Ｃ１８内のＬ１層の全ニューロン２０ｉとシナプス結合を作る。Ｌ２層の各ニューロン２２ｊは、Ｌ１層の１，７９２個のニューロン２０ｉとシナプス結合を作るが、その中には不要なものが含まれる可能性が有る。
【００７２】
シナプス結合には、Ｌ１層のニューロン２０ｉの出力情報をＬ２層のニューロン２２ｊへどの程度の割合で伝えるかという重みｗｉ，ｊがある。情報伝達が不要な結合についてはシナプス結合の重みｗｉ，ｊを０にすることで、実質的にシナプス結合を無効にできる。
【００７３】
Ｌ１層の各ニューロン２０ｉは仮想平面内で自セル及び隣接セルのＬ２層のニューロン２２ｊとのみ結合されているので、シナプス結合が不要な箇所は少なく、従って重みｗｉ，ｊを０にする箇所は少ないと考えられる。
以上のように、ニューロン間の配線を物理的に近くのものとだけに制限することで、配線を少なくすることができる。この方法はＬ１層のニューロン２０ｉが、近接するＬ２層のニューロン２２ｊとの間にだけ、密な結合を作るニューラルネットに適している。
【００７４】
しかし、例えばセルＣ０のＬ１層の８分の１に相当する３２個のニューロンが、隣接するセル内のＬ２層のニューロン２２ｊとだけではなく、隣接するセルに更に隣接するセルのうち、自セルが隣接しないセル（以下、１つ先のセルと称する）であるセルＣ７〜Ｃ１８のＬ２層のニューロン２２ｊともシナプス結合を作るようなニューラルネットには、適用するのが困難である。以下、その理由を、具体例を挙げて説明する。
【００７５】
例として、図２（ａ）に示すようにニューラルネットを正六角形で分割し、各セルのＬ１層に２５６個のニューロン２０ｉが含まれ、Ｌ２層にも２５６個のニューロン２２ｊが含まれる場合を仮定する。そうすると、Ｌ２層の１個のニューロン２２ｊには１，７９２（＝２５６×７）個のシナプス結合ができる。
【００７６】
セルＣ０のＬ２層のニューロン２２ｊが、セルＣ７〜Ｃ１８のＬ１層のニューロン２０ｉともシナプス結合を作ることを仮定する。前述の実施例のままではセルＣ０のＬ２層のニューロンは隣接セルＣ０〜Ｃ６のＬ１層のニューロンとしかシナプス結合をつくれないので、前記の仮定を実現するには、セルＣ０〜Ｃ１８のＬ１層の４，８６４（＝２５６×１９）個のニューロン２０ｉを、セルＣ０〜Ｃ６の７個のセルに納めなければならない。
【００７７】
つまり、１つのセルのＬ１層に、６９５（＝４，８６４÷７）個のニューロンが含まれるように、ニューラルネットを分割し直す必要がある。そうすると、Ｌ２層の１個のニューロン２２ｊには４，８６５（＝６９５×７）個のシナプス結合ができるので、１つのセルのＬ１層に２５６個のニューロンが含まれていた場合と比べて、シナプス結合の数が３，０７３（＝４，８６５―１，７９２）個増加する。
セルＣ０のＬ２層のニューロン２２ｊが、一つ先のセルＣ７〜Ｃ１８のＬ１層の１/８のニューロンとだけシナプス結合を作ることができれば、増加するシナプス結合の数は３８４（＝（２５６÷８）×１２）個である。つまり、前述の実施例を使った場合に増加する３，０７３個のシナプス結合のうち、必要なのは３８４個であり、残り２、６８９（＝３，０７３―３８４）個のシナプス結合は無効であり、その重みデータは０になる。２、６８９個の０データを記憶するメモリの容量は、全体の５５．３％（＝２、６８９÷４，８６５）にもなる。これはニューラルネットの動作に寄与しないので無駄である。
【００７８】
また、セルの数が１９個から７個に減るので、Ｌ２層のニューロン２２ｊの数も６９５個になる。したがって、１つのセルのＬ２層のニューロン２２ｊが作るシナプス結合の総数は３，３８１，１７５（＝６９５×６９５×７）個と、１つのセルにＬ１層ニューロンが２５６個、Ｌ２層のニューロンも２５６個属していた場合に比べて約７．４倍になる。
この結果、Ｌ２層のニューロン２２ｊのシナプス結合の重みデータを記憶するメモリの容量が約７．４倍必要になる。また、Ｌ２層で処理するデータ量が７．４倍になるので、１ラウンドにかかる処理時間を一定（本実施例では４［ｍｓ］）に保つには、Ｌ２層のニューロン２２ｊでの処理速度を７．４倍に高速化しなければならない。
【００７９】
以上のように、前述の実施例を、自セルから遠方のセルのニューロンともシナプス結合を作るようなニューラルネットに適用するには無駄が多く、ハードウェアコストが上昇してしまうという問題がある。
そこで、前述の実施例を拡張することにより、あるセルのニューロンが遠方のセルのニューロンへ信号を効率良く伝達できるようにする方法について説明する。
【００８０】
図２（ａ）において、セルＣ０のＬ１層のニューロン２０ｉの一部、例えば０番から３１番までの３２個のニューロンが、自セルＣ０及び隣接セルＣ１〜Ｃ６だけでなく、１つ先のセルＣ７〜Ｃ１８内のＬ２層のニューロン２２ｊともシナプス結合を作るとする。セルＣ０のＬ１層のニューロン２０ｉが、セルＣ７〜Ｃ１８内のＬ２層のニューロン２２ｊとシナプス結合を作るということは、逆に考えると、セルＣ０のＬ２層のニューロ２２ｊが、セルＣ７〜Ｃ１８内のＬ１層のニューロン２０ｉの０番から３１番までの３２個のニューロンからの信号を受け取って、シナプス結合を作るということと等価である。
【００８１】
或るセルＣＮの回路ユニットは、隣接セルのＬ１層のニューロン２０ｉの出力データを、端子Ｐ１〜Ｐ６を介して受け取る。前記回路ユニットは、端子Ｐ１〜Ｐ６で受け取った前記データの中から、それぞれ最初の３２個（３２ビット）のデータを、自セルのＬ１層のニューロンの出力データに続けて、出力端子Ｐ０から出力することにする。
【００８２】
図３（ａ）は、或るセルＣＮの出力データと入力データを時系列で表した図である。Ｄ＿ＣＱ（Ｑはデータを入出力する端子の番号を表す０〜６の整数）は、セルＣＮがその端子ＰＱから入出力する、自セル及び隣接セルのＬ１層のニューロン２０ｉの２５６ビットの出力データである。
セルＣＮの出力端子Ｐ０から出力されるＤ＿Ｃ０は、セルＣＮに属するＬ１層のニューロン２０ｉの出力データである。入力端子Ｐ１から入力されるＤ＿Ｃ１は、端子Ｐ１に接続された相対位置１（真上）のセルに属するＬ１層のニューロン２０ｉの出力データである。ここで、当該入力データＤ＿Ｃ１は、前記相対位置１のセルに於いては、端子Ｐ０から出力されるのでＤ＿Ｃ０と表記されることに注意する。
入力端子Ｐ２から入力されるＤ＿Ｃ２は、端子Ｐ２に接続された相対位置２（右上）のセルに属するＬ１層のニューロン２０ｉの出力データである。入力端子Ｐ３から入力されるＤ＿Ｃ３は、端子Ｐ３に接続された相対位置３（右下）のセルに属するＬ１層のニューロン２０ｉの出力データである。入力端子Ｐ４から入力されるＤ＿Ｃ４は、端子Ｐ４に接続された相対位置４（真下）のセルに属するＬ１層のニューロン２０ｉの出力データである。入力端子Ｐ５から入力されるＤ＿Ｃ５は、端子Ｐ５に接続された相対位置５（左下）のセルに属するＬ１層のニューロン２０ｉの出力データである。入力端子Ｐ６から入力されるＤ＿Ｃ６は、端子Ｐ６に接続された相対位置６（左上）のセルに属するＬ１層のニューロン２０ｉの出力データである。
【００８３】
図３（ａ）の上段の出力端子Ｐ０から出力される信号について、説明する。出力端子Ｐ０からＤ＿Ｃ０に続いて出力されるｒ０ｓ（ｓは１から６の整数）は、セルＣＮがその入力端子Ｐｓから受けとった２５６ビットのデータＤ＿Ｃｓから、最初の３２ビットのデータを選択し、当該３２ビットデータを端子Ｐ０から再送したものである。
つまり、ｒ０１はセルＣＮが、端子Ｐ１から受けとったＤ＿Ｃ１の最初の３２ビットを端子Ｐ０から出力したものである。ｒ０２はセルＣＮが、端子Ｐ２から受けとったＤ＿Ｃ２の最初の３２ビットを端子Ｐ０から出力したものである。ｒ０３はセルＣＮが、端子Ｐ３から受けとったＤ＿Ｃ３の最初の３２ビットを端子Ｐ０から出力したものである。ｒ０４はセルＣＮが、端子Ｐ４から受けとったＤ＿Ｃ４の最初の３２ビットを端子Ｐ０から出力したものである。ｒ０５はセルＣＮが、端子Ｐ５から受けとったＤ＿Ｃ５の最初の３２ビットを端子Ｐ０から出力したものである。ｒ０６はセルＣＮが、端子Ｐ６から受けとったＤ＿Ｃ６の最初の３２ビットを端子Ｐ０から出力したものである。
即ち、セルＣＮは、自セルのＬ１層のニューロン２０ｉの出力データＤ＿Ｃ０を出力し終えた後に続けて、入力端子Ｐ１〜Ｐ６から入力されたデータのうち、それぞれ先頭の３２ビットのデータを、ｒ０１〜ｒ０６として順次、出力端子Ｐ０から自身に隣接するセルに出力する。
【００８４】
図３（ａ）の２段目以降の入力端子ＰＱから入力される信号について、説明する。全てのセルの回路ユニットは全く同じ動作をするので、３２ビットデータｒＱｓは、セルＣＮに対して相対位置ｑ（但し、Ｑ＝ｑ）に在るセルが、前記セルの出力端子Ｐ０から出力したデータ（前記セル内ではｒ０ｓと表記される）を、セルＣＮが端子ＰＱで受け取ったデータである。
つまり、ｒ１１は、相対位置１に在るセルが前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。ここで、当該３２ビットデータは、前記セルに於いてはｒ０１と表記されることに注意する。
ｒ２１は、相対位置２に在るセルが、前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。ｒ３１は、相対位置３に在るセルが、前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。
【００８５】
ｒ４１は、相対位置４に在るセルが、前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。ｒ５１は、相対位置５に在るセルが、前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。ｒ６１は、相対位置６に在るセルが、前記セルの入力端子Ｐ１で受け取った入力データの先頭の３２ビットのデータを再送したものである。
【００８６】
同様にして、ｒ１２は、相対位置１のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。ｒ２２は、相対位置２のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。ｒ３２は、相対位置３のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。
【００８７】
ｒ４２は、相対位置４のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。ｒ５２は、相対位置５のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。ｒ６２は、相対位置６のセルが入力端子Ｐ２で受け取った入力データの先頭の３２ビットを再送したものである。
【００８８】
ｒ１３は、相対位置１のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。ｒ２３は、相対位置２のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。ｒ３３は、相対位置３のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。
【００８９】
ｒ４３は、相対位置４のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。ｒ５３は、相対位置５のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。ｒ６３は、相対位置６のセルが入力端子Ｐ３で受け取った入力データの先頭の３２ビットを再送したものである。
【００９０】
ｒ１４は、相対位置１のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。ｒ２４は、相対位置２のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。ｒ３４は、相対位置３のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。
【００９１】
ｒ４４は、相対位置４のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。ｒ５４は、相対位置５のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。ｒ６４は、相対位置６のセルが入力端子Ｐ４で受け取った入力データの先頭の３２ビットを再送したものである。
【００９２】
ｒ１５は、相対位置１のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。ｒ２５は、相対位置２のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。ｒ３５は、相対位置３のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。
【００９３】
ｒ４５は、相対位置４のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。ｒ５５は、相対位置５のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。ｒ６５は、相対位置６のセルが入力端子Ｐ５で受け取った入力データの先頭の３２ビットを再送したものである。
【００９４】
ｒ１６は、相対位置１のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。ｒ２６は、相対位置２のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。ｒ３６は、相対位置３のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。
【００９５】
ｒ４６は、相対位置４のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。ｒ５６は、相対位置５のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。ｒ６６は、相対位置６のセルが入力端子Ｐ６で受け取った入力データの先頭の３２ビットを再送したものである。
【００９６】
図３（ｂ）は、図３（ａ）の点線で囲んだ時間帯を拡大して見たときの、セルＣＮの出力信号と入力信号を時系列で表した図である。図３（ａ）に示す各データｒＱｓは、３２個の１ビットデータｒＱｓｋ（ｋはデータの順番を表す０から３１までの整数）から構成されている。
【００９７】
具体的には、出力端子Ｐ０から出力される出力データｒ０１は、ｒ０１０からｒ０１３１までの３２個のデータから構成されている。また、入力端子Ｐ１から入力される入力データｒ１１は、ｒ１１０からｒ１１３１までの３２個のデータから構成されている。また、入力端子Ｐ２から入力される入力データｒ２１は、ｒ２１０からｒ２１３１までの３２個のデータから構成されている。また、入力端子Ｐ３から入力される入力データｒ３１は、ｒ３１０からｒ３１３１までの３２個のデータから構成されている。
【００９８】
また、入力端子Ｐ４から入力される入力データｒ４１は、ｒ４１０からｒ４１３１までの３２個のデータから構成されている。また、入力端子Ｐ５から入力される入力データｒ５１は、ｒ５１０からｒ５１３１までの３２個のデータから構成されている。また、入力端子Ｐ６から入力される入力データｒ６１は、ｒ６１０からｒ６１３１までの３２個のデータから構成されている。
【００９９】
ここで、具体的にセルＣ０を例に説明する。セルＣ０は、その入力端子Ｐ１から、真上に隣接するセルＣ１のＬ１層のニューロン２０ｉの出力データをＤ＿Ｃ１として受け取った後に、セルＣ１の真上に隣接するセルＣ７からセルＣ１に出力されたデータのうち先頭の３２ビットデータであるｒ１１を受け取る。つまり、ｒ１１はセルＣ０の、一つ先に隣接するセルＣ７のＬ１層のニューロン２０ｉの最初の３２個の出力データである。次に、セルＣ０は、その入力端子Ｐ１から、セルＣ１の右上に隣接するセルＣ８からセルＣ１に出力されたデータのうち先頭のデータであるｒ１２を受け取る。つまり、ｒ１２はセルＣ０の、一つ先に隣接するセルＣ８のＬ１層のニューロン２０ｉの最初の３２個の出力データである。次に、セルＣ０は、その入力端子Ｐ１から、セルＣ１の右下に隣接するセルＣ２からセルＣ１に出力されたデータのうち先頭のデータであるｒ１３を受け取る。
【０１００】
次に、セルＣ０は、その入力端子Ｐ１から、セルＣ１の真下に隣接するセルＣ０からセルＣ１に出力されたデータのうち先頭のデータであるｒ１４を受け取る。次に、セルＣ０は、その入力端子Ｐ１から、セルＣ１の左下に隣接するセルＣ６からセルＣ１に出力されたデータのうち先頭のデータであるｒ１５を受け取る。最後に、セルＣ０は、その入力端子Ｐ１から、セルＣ１の左上に隣接するセルＣ１８からセルＣ１に出力されたデータのうち先頭のデータであるｒ１６を受け取る。
【０１０１】
同様にして、セルＣ０は、入力端子Ｐ２から、セルＣ９のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ２２として受け取る。また、セルＣ０は、入力端子Ｐ２から、セルＣ１０のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ２３として受け取る。また、セルＣ０は、入力端子Ｐ３から、セルＣ１１のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ３３として受け取る。
【０１０２】
また、セルＣ０は、入力端子Ｐ３から、セルＣ１２のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ３４として受け取る。また、セルＣ０は、入力端子Ｐ４から、セルＣ１３のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ４４として受け取る。また、セルＣ０は、入力端子Ｐ４から、セルＣ１４のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ４５として受け取る。
【０１０３】
また、セルＣ０は、入力端子Ｐ５から、セルＣ１５のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ５５として受け取る。また、セルＣ０は、入力端子Ｐ５から、セルＣ１６のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ５６として受け取る。また、セルＣ０は、入力端子Ｐ６から、セルＣ１７のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ６６として受け取る。また、セルＣ０は、入力端子Ｐ６から、セルＣ１８のＬ１層のニューロン２０ｉの最初の３２個の出力データをｒ６１として受け取る。
【０１０４】
結局、或るセルＣＮにおいて、自セルに隣接するセルから受け取ったデータの一部を、自セルのＬ１層のニューロン２０ｉの出力データを出力した後に付け加えることで、１つ先のセルの出力データを受け取れることになる。当該セルＣＮは、当該一つ先のセルのデータを当該セルＣＮのＬ２層のニューロン２２ｊへの入力データとして利用できる。
なお、端子Ｐ０からは４４８（＝２５６［ｂｉｔ］＋３２［ｂｉｔ］×６）ビットのデータを４［ｍｓ］で出力することになるので、データ伝送速度は１１２［ｋｂｐｓ］である。
【０１０５】
図１の実施例ではＬ１層及びＬ２層に含まれるニューロン数を２５６としたが、本発明はこれに制限されるものではなく、一般的に２以上の任意の数でも適用できる。また、Ｌ１層とＬ２層のニューロンの数が同数である必要は無い。本実施例では、図１（ａ）に示すように、ニューラルネットの階層数を２としたが、本発明はこれに制限されるものではなく、３層以上に拡張することも可能である。
【０１０６】
本実施例ではニューロンを並べる仮想平面を正六角形で分割したが、本発明はこれに制限されるものではない。図４は、本発明の一実施形態による仮想平面を分割して、回路ユニット間の配線を説明するための図である。例えば、図４（ａ）に示すように正方形で分割することも可能であるし、正三角形で分割することも可能である。
【０１０７】
また、同一の多角形を並べるのではなく、図４（ｂ）に示すように複数種類の多角形で分割することも可能である。更に、仮想平面は仮想的なものなので、多角形間にオーバーラップが生じたり、或いは多角形間に隙間が生じたりしても特に問題はない。信号が入力されない入力端子はグランドに接続する。
【０１０８】
多角形の形状は１つのニューロンが形成できるシナプス結合の最大数に関係している。例えば正六角形の場合は隣接セルが６個なので、１個のセルのＬ１層に２５６個のニューロン含まれるとすると、Ｌ２層のニューロン２２ｊでは最大２５６×７個のシナプス結合が形成される。
【０１０９】
一方、図４（ａ）の場合は隣接セルが８個になるので、最大２５６×９個のシナプス結合が形成される。図４（ｂ）の場合は、最大シナプス結合数が異なる３種類の回路ユニットが混在していると解釈することもできるし、正五角形以外の隙間を無視することもできる。更に言えば、仮想平面を正多角形ではなく、任意形状の図形で分割しても、本発明を同様に適用できる。
【０１１０】
本実施例の説明では、仮想二次元平面を考えて、そこにニューロンを分散配置するとして説明したが、本発明はこれに制限されるものではない。人間の脳を模倣する場合は仮想二次元平面で十分だが、これを超える構造として仮想三次元空間でも同様に本発明を適用できる。
【０１１１】
図５は、本発明の一実施形態による仮想三次元空間を立方体で分割して、回路ユニット間の配線を説明するための図である。例えば、図５に示すように、仮想三次元空間を立方体で分割し、任意の立方体のＬ１層のニューロン２０ｉは、その立方体に隣接する立方体内のＬ２層のニューロン２２ｊとシナプス結合を作る。また、一部のＬ１層のニューロン２０ｉは、隣接する立方体に更に隣接する立方体内のＬ２層のニューロン２２ｊとシナプス結合を作る。
【０１１２】
図５に示すように、１つのセル毎に出力端子は上部に１個、入力端子は各面に１個存在する。あるセルに隣接するセルは前後上下左右方向に面で隣接する合計６個のセルである。あるセルの前後上下左右の面に１個ずつ存在する入力端子が隣接するセルの出力端子と接続されている。
【０１１３】
他の実施例としては、図５において１つのセル毎に出力端子を上部に１個、入力端子は各面に１個（合計６個）、各辺に１個（合計１２個）、各角に１個（合計８個）すなわち合計２６個存在する。或るセルに隣接するセルは面、辺、角で隣接する合計２６個のセルである。或るセルに存在する２６個の入力端子が、それぞれ隣接する２６個のセルの出力端子と接続されている。
【０１１４】
また、仮想三次元空間を立方体ではなく、一般的に任意のポリトープで分割することもできる。このように、本発明は一般的に、二次元以上の任意の次数の空間を、任意の多面体で分割する場合に適用可能である。但し、４次元以上の空間の場合に関しては、図示することができないので図を省略する。
【０１１５】
＜回路ユニットの実施例１の説明＞
次に、本発明の回路ユニットの実施例について説明する。図６は、本発明の一実施形態による回路ユニットを、パルスニューラルネットで用いるニューロン群で模擬した回路図である。図６の回路ユニット１０全体が、図２（ａ）で示す１つの正六角形に対応している。本実施例では各ニューロンは個別の電子回路ではなく、仮想の興奮性ニューロンとして各層毎に２５６個のニューロンを纏めて実装している。
【０１１６】
各層に２５６個のニューロンを実装する方法は、以下の通りである。Ｌ１層の２５６個のニューロン２０ｉの入力データ（４ビットデータ）は、メモリ２１に格納されている。Ｌ１層のニューロン２０ｉからＬ２層のニューロン２２ｊへ伝わる信号の強度を決めるシナプス結合の重みデータ（８ビットデータ）は、メモリ２５に保存されている。一方、出力信号線５５に出力されるＬ２層の２５６個のニューロン２２ｊの出力データは、０か１の１ビットデータである。
【０１１７】
回路ユニット１０は、８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、メモリ２５と、アンドゲート２６と、加算回路４３と、大小比較器２９と、ラッチ３０と、セレクター３３と、セレクター３４と、８ビットカウンター３５Ａと、８ビットカウンター３５Ｂと、選択回路３６と、メモリ３７Ａと、メモリ３７Ｂと、セレクター３８と、メモリ３９と、アンドゲート４０と、入力部４５と、出力部４６と、を用いて構成されている。
【０１１８】
加算回路４３は、加算器２７と、アンドゲート２８と、セレクター３２と、を用いて構成されている。
加算回路４３は、アンドゲート２６が出力する自セル及び隣接セルのＬ１層の出力データにシナプス結合の重みを掛けたデータと、アンドゲート４０が出力する１つ先のセルのＬ１層の出力データにシナプス結合の重みを掛けたデータの、総和を算出する。加算回路４３は、当該総和を大小比較器２９へ出力する。
【０１１９】
８ビットカウンター２０は、入力端子５０にカウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２１に出力する。８ビットカウンター２０は、前記カウント値を２５５までカウントアップすると、次にカウントアップ信号が入力された時に、前記カウント値を０に戻す。８ビットカウンター２０は、図示しないリセット信号が入力されると、そのカウント値を０にする。
【０１２０】
メモリ２１はＬ１層のニューロン２０ｉの入力データを、そのｉ番地に格納している。メモリ２１に格納されているＬ１層のニューロン２０ｉのデータは４ビット幅である。
Ｌ１層のニューロン数が２５６個なので、メモリ２１は１，０２４（＝４［ｂｉｔ］×２５６［個］）ビットの容量を持つ。
【０１２１】
メモリ２１は、８ビットカウンター２０が出力したカウント値が示す番地の４ビットデータを読み出して、当該データをパルス列変調回路２２に出力する。例えば、メモリ２１は、入力されたカウント値が０の時、メモリ２１の０番地のデータを読み出して、当該データをパルス列変調回路２２に出力する。
パルス列変調回路２２は、メモリ２１が出力した４ビットのデータを１５ビットのデータに変換し、更に、その時のラウンド数に応じて、当該１５ビットデータから適当なビット位置の１ビットデータを選択し、それを出力部４６に出力する。
【０１２２】
出力部４６は、セレクター３１と、出力端子Ｐ０と、を用いて構成されている。
セレクター３１は、パルス列変調回路２２が出力した自セルのＬ１層のニューロン２０ｉの出力データと、セレクター３４が出力した隣接セルのＬ１層のニューロン２０ｉの出力データとを受け取る。セレクター３１は、当該受け取った自セルのＬ１層のニューロン２０ｉの出力データと、当該受け取った隣接セルのＬ１層のニューロン２０ｉの出力データとを選択する。セレクター３１は、当該選択した出力データを出力端子Ｐ０に出力する。
【０１２３】
パルス列変調回路２２は、メモリ２１が出力した４ビットのデータを、パルス列変調回路２２内のデータ変換用メモリを用いて１５ビットのデータに変換する。
図７は、データ変換用メモリが保存するデータを説明するためのテーブルである。図７において、４ビットデータとは、データ変換用メモリが受け取るデータである。１５ビットデータとは、データ変換用メモリが出力するデータである。パルス列変調回路２２は、メモリ２１が出力した４ビットデータをアドレス情報として、図７に示すテーブルデータが書き込まれているデータ変換用メモリから１５ビットデータを読み出す。これによって、４ビットデータを１５ビットデータに変換する。
【０１２４】
図６において、Ｌ１層のニューロンの出力情報は、その出力信号に一定時間内に１が存在する頻度でコーディング（変調）される。例えば、Ｌ１層のニューロンの４ビットデータの値が２という情報は、コーディングされた後では、１５個のビットのうち任意の２個のビットを１にすることにより、Ｌ２層のニューロンに当該情報を伝える。パルス列変調回路２２は、このコーディングを行い、コーディングした１５ビットのデータを時間的に分散し、１５ラウンドかけてＬ２層に伝送する。
【０１２５】
パルス列変調回路２２は、後述するラウンド毎に、前記１５ビットのデータのうちＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｉｎｉｆｉｃａｎｔ  Ｂｉｔ）から順に、当該出力データをセレクター３１に出力する。
出力回路４６は、セレクター３１に入力された当該データをＰ０端子に出力する。
ここで、ラウンドとは図３（ａ）において、端子Ｐ０からＤ＿Ｃ０とｒ０１からｒ０６の一連のデータが出力される処理単位を意味する。
【０１２６】
パルス列変調回路２２は、ラウンド数が増えるごとに、前記１５ビットデータから１ビットデータ取り出すビット位置を１ずつ増やし、当該ビット位置のデータｘｉ，ｔを出力する。
ラウンド１４で、前記１５ビットデータの最上位ビット（ビット１４）のデータをセレクター３１に出力すると、メモリ２１に入っているデータの転送処理が終わる。
【０１２７】
なお、本実施例では、１５ビットデータをＬＳＢから昇順に出力したが、最上位ビットから降順に出力してもよい。また、任意のビット位置から昇順または降順に出力してもよい。或いは、ランダムにビット位置を選択して出力してもよい。
【０１２８】
セレクター３１は、パルス列変調回路２２が出力したデータｘｉ，ｔとセレクター３４が出力したデータｒ０ｓｋとを受け取る。セレクター３１は、前記受け取ったデータｘｉ，ｔとｒ０ｓｋとから、どちらか有効なデータを選択する。但し、後で説明するように、当該データｘｉ，ｔと当該データｒ０ｓｋとが、同時に有効になることはない。
【０１２９】
Ｌ２層に属する８ビットカウンター２３Ａは、入力部４５が出力するデータをメモリ２４Ａに書き込む時は、端子５１Ａに、８ビットカウンター２０の端子５０に入力されるカウントアップ信号と同一のカウントアップ信号が入力される。８ビットカウンター２３Ａは、当該カウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２４Ａに出力する。８ビットカウンター２３Ａは、図示しないリセット信号入力されると、そのカウント値を０にする。
【０１３０】
同様に、Ｌ２層に属する８ビットカウンター２３Ｂは、入力部４５が出力するデータをメモリ２４Ｂに書き込む時は、端子５１Ｂに、８ビットカウンター２０の端子５０に入力されるカウントアップ信号と同一のカウントアップ信号が入力される。８ビットカウンター２３Ｂは、当該カウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２４Ｂに出力する。８ビットカウンター２３Ｂは、図示しないリセット信号入力されると、そのカウント値を０にする。
【０１３１】
入力部４５は、入（出）力端子Ｐ０と、入力端子Ｐ１と、入力端子Ｐ２と、入力端子Ｐ３と、入力端子Ｐ４と、入力端子Ｐ５と、入力端子Ｐ６と、を用いて構成されている。
入（出）力端子Ｐ０は、セレクター３１が出力したＬ１層のニューロンの出力データを受け取る。入（出）力端子Ｐ０は、当該受け取った出力データを、自身の回路ユニットのメモリ２４Ａまたはメモリ２５Ｂへ出力する。
【０１３２】
入力端子ＰＱ（Ｑは１〜６の整数）は、隣接セルに配置された回路ユニットの端子Ｐ０が出力したＬ１層のニューロンの出力データを受け取る。入力端子ＰＱは、当該受け取った出力データを、自身の回路ユニットのメモリ２４Ａまたはメモリ２５Ｂと、自身の回路ユニットの選択回路３６へ出力する。
【０１３３】
メモリ２４Ａとメモリ２４Ｂは、入力部４５から、７本の信号線で伝送されて来るＤ＿Ｃ０からＤ＿Ｃ６のデータを、ラウンド毎に交互に格納する。
或るラウンドでメモリ２４Ａが、Ｌ１層のニューロンの７ビット×２５６個のデータを格納し終わると、カウンター２３Ａのカウント値は０に戻り、続けてメモリ２４Ａは、その０番地から３１番地までのデータを読み出して、当該読み出した７ビットデータからＤ＿Ｃ０由来のデータを除いた６ビット×３２個のデータをセレクター３４に出力する。
【０１３４】
続けて、図示しないリセット信号がアクティブになりカウンター２３Ａのカウント値が０になり、メモリ２４Ａは、再びその０番地から３１番地までのデータを読み出して、当該読み出したデータをセレクター３４に出力する。カウンター２３Ａがリセットされる動作と、メモリ２４Ａがその０番地から３１番地までのデータを読み出して、当該読み出したデータをセレクター３４に出力する動作を５回繰り返す。
【０１３５】
同様にして、或るラウンドでメモリ２４Ｂは、Ｌ１層のニューロンの７ビット×２５６個のデータを格納し終わると、続けてメモリ２４Ｂは、その０番地から３１番地までの７ビット×３２個のデータを読み出して、当該読み出した７ビットデータからＤ＿Ｃ０由来のデータを除いた６ビット×３２個のデータをセレクター３４に出力することを、６回繰り返す。
【０１３６】
セレクター３４は、メモリ２４Ａまたはメモリ２４Ｂが出力した６ビット×３２のデータから、適当なビット位置のデータを選択し、当該選択したデータｒ０ｓｋをセレクター３１に送る。
【０１３７】
ここで、Ｌ１層とＬ２層のデータ処理速度について説明する。
Ｌ１層からは、既に説明したように、自セルのニューロンの２５６ビットの出力データに続いて、隣接セルのニューロンの出力データから選択した１９２ビットのデータをＬ２層へ転送する。この処理を４［ｍｓ］で行うとすると、データを処理して出力する処理速度は１１２ｋＨｚになる。つまり、カウンター２０のカウントアップ信号は、１１２［ｋＨｚ］でアクティブになる。
【０１３８】
Ｌ２層では、１つのニューロン当り、自セル及び隣接セルのＬ１層のニューロンが出力した１，７９２個のデータと、一つ先のセルのＬ１層のニューロンが出力した３８４個のデータとの合計２，１７６個のデータについて積和演算を行う。Ｌ２層には２５６個のニューロンがあるので、合計５５７，０５６（＝２，１７６×２５６）回の積和演算を行うことになる。これを４［ｍｓ］で行うとすると、Ｌ２層でのデータ処理速度は１３９，３［ＭＨｚ］になる。
【０１３９】
或るラウンドでメモリ２４Ａに７ビット×２５６個のデータが格納されると、次のラウンドでメモリ２４Ａは、当該データを１９．８９５［ＭＨｚ］で読み出し、当該データを並直変換して７倍の１３９．３［ＭＨｚ］の１ビット信号ｓｉに変換する。ここでは、ｉを再定義し、０から１，７９１（＝２５６×７−１）までの整数とする。メモリ２４Ａは、当該変換した１ビット信号ｓｉをセレクター３３に出力する。また、メモリ２４Ａが１９．８９５［ＭＨｚ］でデータを読み出すように、カウンター２３Ａは１９．８９５［ＭＨｚ］でカウントアップする。
【０１４０】
同様にして、メモリ２４Ｂは、格納した７ビット×２５６個のデータを、次のラウンドで１９．８９５［ＭＨｚ］で読み出し、当該データを並直変換して７倍の１３９．３［ＭＨｚ］の１ビット信号ｓｉに変換する。メモリ２４Ｂは、当該変換した１ビット信号ｓｉをセレクター３３に出力する。また、カウンター２３Ｂは１９．８９５［ＭＨｚ］でカウントアップする。
【０１４１】
セレクター３３は、メモリ２４Ａまたはメモリ２４Ｂからデータを受け取る。前記データのうち、ラウンドに応じて有効なデータを選択し、当該選択したデータをｓｉとして、アンドゲート２６に出力する。
【０１４２】
メモリ２５（８［ｂｉｔ］×２５６×７×２５６の容量）は、Ｌ１層のｉ番目のニューロンからＬ２層のｊ番目のニューロンへのシナプス結合の重みｗｉ，ｊを格納する。ここで、ｉは０から１，７９１までの整数であり、ｊは０から２５５までの整数である。
また、メモリ２５は、図示されていないカウンターから１３９．３［ＭＨｚ］でカウントアップするアドレス情報を受け取ると、そのアドレスのシナプス結合の重みｗｉ，ｊを読み出して、当該重みｗｉ，ｊをアンドゲート２６に出力する。
【０１４３】
アンドゲート２６は、セレクター３３が出力したデータｓｉと、メモリ２５が出力したシナプス結合の重みｗｉ，ｊを受け取る。そして、アンドゲート２６は、信号ｓｉとシナプス結合の重みｗｉ，ｊの積であるｙｉ，ｊを算出する。アンドゲート２６は、当該算出した積ｙｉ，ｊをセレクター３２に出力する。
セレクター３２は、当該データｙｉ，ｊを加算器２７に出力する。
【０１４４】
加算器２７は、セレクター３２が出力した積ｙｉ，ｊを受け取り、Ｌ２層のｊ番目のニューロン毎に、自セル及び隣接セルのＬ１層の全ニューロンから受け取る情報の総和であるｙｉ，ｊのｉに関する総和を計算する。その際、加算器２７は、順次、ｙｉ，ｊをその前のクロックＣＬＫ１までに計算されたｙｉ−１，ｊのｉに関する部分和に加算する。
【０１４５】
アンドゲート２８は、Ｌ２層のニューロン毎の総和計算をする際に、アンドゲート２６がＬ２層のニューロン毎の最初のデータｙ０，ｊを出力するのに同期して端子５２に制御信号として０が入力されるので、０を加算器２７の片側入力端子へ出力し、初期値０から加算器２７が総和計算を始めるように制御する。
セレクター３２は、加算器２７がＬ２層のｊ番目のニューロンについて、ｙｉ，ｊのｉに関する総和Ｙｊを計算し終わると、アンドゲート４０が出力するデータを選択するように切り替わる。
【０１４６】
Ｌ２層に属する８ビットカウンター３５Ａは、端子５６Ａに入力されるカウントアップ信号がアクティブになるたびに、カウント値を１つずつ増やし、当該カウント値をメモリ３７Ａに出力する。
８ビットカウンター３５Ａは、図示しないリセット信号が入力されると、前記カウント値を０にする。
同様にして、Ｌ２層に属する８ビットカウンター３５Ｂは、端子５６Ｂに入力されるカウントアップ信号がアクティブになるたびに、カウント値を１つずつ増やし、当該カウント値をメモリ３７Ｂに出力する。
８ビットカウンター３５Ｂは、図示しないリセット信号が入力されると、前記カウント値を０にする。
【０１４７】
後で詳しく説明するように、入力回路４５は、隣接セルが当該セルに隣接するセルから受け取ったデータを再出力したデータを受け取るので、それを選択回路３６に出力する。
選択回路３６は、前記データの中から後述する必要なデータを選択する。選択回路３６は、前記選択したデータをメモリ３７Ａまたはメモリ３７Ｂに出力する。
【０１４８】
図２（ａ）において、例えばセルＣ０にとって前記必要なデータとは、１つ先のセルが出力するデータである。具体的には、セルＣ７〜Ｃ１８（合計１２個）が出力するＬ１層の最初の３２個のニューロンの出力データである。
【０１４９】
図２（ａ）において、セルＣ７は、そのＬ１層のニューロンの２５６個の出力データをセルＣ１へ出力し、セルＣ１は当該データをその端子Ｐ１で受信し、セルＣ１のメモリ２４Ａまたはメモリ２４Ｂに格納する。同時に、セルＣ８は、そのＬ１層のニューロンの２５６個の出力データをセルＣ１へ出力し、セルＣ１は当該データをその端子Ｐ２で受信し、セルＣ１のメモリ２４Ａまたはメモリ２４Ｂに格納する。
【０１５０】
ここで、図３（ａ）がセルＣ０について記述されているとすると、その入力端子Ｐ１で受け取るＤ＿Ｃ１は、セルＣ１のＬ１層の２５６個のデータであり、ｒ１１はセルＣ１に対して相対位置１に在るセルＣ７から受信した２５６ビットのデータのうち最初の３２ビットのデータである。また、ｒ１２はセルＣ１が、セルＣ１に対して相対位置２に在るセルＣ８から受信した２５６ビットのデータのうち最初の３２ビットのデータである。
従って、図３（ａ）の上から２段目に示すように、セルＣ０の選択回路３６は、端子Ｐ１が出力するデータのうち、ｒ１１（セルＣ７からのデータ）と、ｒ１２（セルＣ８からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
【０１５１】
同様にして、図３（ａ）の上から３段目に示すように、選択回路３６は、端子Ｐ２が出力するデータのうち、ｒ２２（セルＣ９からのデータ）と、ｒ２３（セルＣ１０からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
同様にして、図３（ａ）の上から４段目に示すように、選択回路３６は、端子Ｐ３が出力するデータのうち、ｒ３３（セルＣ１１からのデータ）と、ｒ３４（セルＣ１２からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
【０１５２】
同様にして、図３（ａ）の上から５段目に示すように、選択回路３６は、端子Ｐ４が出力するデータのうち、ｒ４４（セルＣ１３からのデータ）と、ｒ４５（セルＣ１４からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
同様にして、図３（ａ）の上から６段目に示すように、選択回路３６は、端子Ｐ５が出力するデータのうち、ｒ５５（セルＣ１５からのデータ）と、ｒ５６（セルＣ１６からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
【０１５３】
同様にして、図３（ａ）の上から７段目に示すように、選択回路３６は、端子Ｐ６が出力するデータのうち、ｒ６６（セルＣ１７からのデータ）と、ｒ６１（セルＣ１８からのデータ）とを順に選択し、メモリ３７Ａとメモリ３７Ｂに出力する。
選択回路３６は、ｒ１１とｒ６１を同時に選択し、ｒ１２とｒ２２を同時に選択し、ｒ２３とｒ３３を同時に選択し、ｒ３４とｒ４４を同時に選択し、ｒ４５とｒ５５を同時に選択し、ｒ５６とｒ６６を同時に選択するので、これらの組のデータを２ビット幅のデータとしてメモリ３７Ａとメモリ３７Ｂに出力する。
【０１５４】
メモリ３７Ａは、８ビットカウンター３５Ａが出力したカウント値を受け取る。メモリ３７Ａは、データ書き込みの（偶数）ラウンドでは、選択回路３６が出力したデータを受け取り、当該データを前記カウント値の番地に格納する。メモリ３７Ａは、データ読み出しの（奇数）ラウンドでは、前記受け取ったカウント値のアドレスのデータを読み出し、当該データをセレクター３８に出力する。
【０１５５】
同様に、メモリ３７Ｂは、８ビットカウンター３５Ｂが出力したカウント値を受け取る。メモリ３７Ｂは、データ書き込みの（奇数）ラウンドでは、選択回路３６が出力したデータを受け取り、当該データを前記カウント値の番地に格納する。メモリ３７Ｂは、データ読み出しの（偶数）ラウンドでは、前記受け取ったカウント値のアドレスのデータを読み出し、当該データをセレクター３８に出力する。
【０１５６】
セレクター３８は、メモリ３７Ａまたはメモリ３７Ｂが出力したデータを受け取る。セレクター３８は、前記２つのデータのうちラウンド毎に有効ないずれかを選択し、当該選択したデータをデータｐｍ（ｍは０から３８３（＝３２×１２−１）の整数）として、アンドゲート４０に出力する。
【０１５７】
メモリ３９は、隣接セルから受け取ったデータｒ１１と、ｒ１２と、ｒ２２と、ｒ２３と、ｒ３３と、ｒ３４と、ｒ４４と、ｒ４５と、ｒ５５と、ｒ５６と、ｒ６６と、ｒ６１と、に対応するシナプス結合の重みデータｖｍ，ｊ（ｊは０から２５５の整数）を保持する。メモリ３９は図示されていないカウンターからアドレス情報を受け取ると、そのアドレスのシナプス結合の重みデータｖｍ，ｊを読み出して、アンドゲート４０に出力する。
【０１５８】
アンドゲート４０は、セレクター３８が出力したデータｐｍと、メモリ３９が出力したシナプス結合の重みデータｖｍ，ｊとを受け取る。アンドゲート４０は、前記データｐｍと前記重みデータｖｍ，ｊの（算術）積ｚｍ，ｊを算出し、当該積をセレクター３２へ出力する。
【０１５９】
セレクター３２は、アンドゲート４０が出力した積ｚｍ，ｊを受け取り、当該積ｚｍ，ｊを加算器２７に送る。
【０１６０】
加算器２７は、Ｌ２層のｊ番目のニューロンについて、自セル及び隣接セルのＬ１層からの情報の総和Ｙｊの計算に続けて、アンドゲート４０が出力した積ｚｍ，ｊを順次加算する。つまり、総和Ｙｊを初期値として、Σｚｍ，ｊのｍについての総和計算を行う。
【０１６１】
加算器２７は、Σｙｉ，ｊの総和計算に続けて、当該総和計算の結果Ｙｊを初期値としてΣｚｍ，ｊの総和計算を行い、当該Σｚｍ，ｊの総和計算が終わると、当該総和計算結果（Ｙｊ＋Ｚｊ）を大小比較器２９に出力する。
【０１６２】
大小比較器２９は、加算器２７が出力した前記計算結果（Ｙｊ＋Ｚｊ）を受け取り、当該計算結果（Ｙｊ＋Ｚｊ）と端子５３から図示しないレジスタまたは外部から供給される閾値データθとを比較し、前記閾値データθよりも当該計算結果（Ｙｊ＋Ｚｊ）が大きい場合に、１を出力する。大小比較器２９は、それ以外の場合は、０を出力する。
【０１６３】
ラッチ３０は大小比較器２９が出力した信号を受け取り、端子５４から入力されたタイミング信号が０から１に変化したときに、大小比較器２９の出力信号を記憶信号Ｑとして記憶する。ラッチ３０は、端子５４から入力された信号が０に戻っても、当該記憶信号Ｑを保持し続ける。ラッチ３０は、前記保持している記憶信号Ｑを端子５５に出力する。端子５５へ出力された当該記憶信号Ｑが、Ｌ２層のニューロン２２ｊの出力である。
【０１６４】
なお、ニューロンには興奮性と抑制性の２種類のニューロンがあるので、シナプス結合の重みには正負があるが、本発明の効果に影響しないので、本実施例では興奮性ニューロンを表す正のデータだけとして説明する。
【０１６５】
続いて、本実施例の動作を説明する。図６のニューラルネットでの処理が始まる前に、図示しない任意の方法によって、予めＬ１層のニューロン２０ｉの入力データがメモリ２１に格納されており、シナプス結合の重みデータもメモリ２５およびメモリ３９に格納されている。また、カウンター２０とカウンター２３Ａとカウンター２３Ｂとカウンター３５Ａとカウンター３５Ｂは、図示しないリセット信号によって予め０になっている。
【０１６６】
また、ニューロン間の接続が無い箇所については、そこに対応するシナプス結合の重みｗｉ，ｊおよびｖｍ，ｊが０になっている。
【０１６７】
まず、カウンター２０はメモリ２１のアドレスを指定するカウント値として０をメモリ２１に出力する。メモリ２１はカウンター２０から０を受け取ると、０番地から４ビットデータ（０番のニューロンの入力データ）を読み出して、当該４ビットデータをパルス列変調回路２２へ出力する。
【０１６８】
パルス列変調回路２２は、メモリ２１が出力した当該４ビットデータを１５ビットのパルス列データに変換する。パルス列変調回路２２は、データ変換用メモリを備え、そこにデータ変換テーブルを予め記憶している。図７は、データ変換用メモリが保持するデータ変換テーブルを説明するための図である。１６種類の４ビットデータそれぞれに１５ビットデータが１つ対応付けられている。パルス列変調回路２２は、図７に示すテーブルを用いて、メモリ２１が出力する４ビットデータに対応する１５ビットデータを読み出す。
【０１６９】
パルス列変調回路２２は、最初のラウンド０では、図７に示すデータのうちＬＳＢを、データｘ０，０としてセレクター３１に出力する。
【０１７０】
セレクター３１は、パルス列変調回路２２が出力した前記データｘ０，０を選択する。セレクター３１は、前記選択したデータｘ０，０を端子Ｐ０に出力する。
【０１７１】
隣接セルの端子Ｐ０が出力したデータは、自セルの端子Ｐ１〜Ｐ６に入力される。
入力部４５は、端子Ｐ０〜Ｐ６で受け取ったデータを、メモリ２４Ａに出力する。
メモリ２４Ａは、入力部４５が出力したデータを受け取る。メモリ２４Ａは、受け取った１ビットのデータ７個を１個の７ビットデータとし、当該７ビットデータを、カウンター２３Ａが出力するカウント値が０なので、メモリ２４Ａの０番地に格納する。換言すると、メモリ２４Ａは、自セル及び隣接セルのＬ１層の０番目のニューロンのデータを７個、０番地に格納する。
【０１７２】
その後、図示されていない制御回路が、端子５０と端子５１Ａに入力するカウントアップ信号をアクティブにすると、カウンター２０とカウンター２３Ａはカウント値を増加して１にする。カウンター２０は当該カウント値１をメモリ２１に出力する。
メモリ２１はカウンター２０から１を受け取ると、１番地から４ビットデータを読み出して、当該４ビットデータをパルス列変調回路２２へ出力する。
【０１７３】
パルス列変調回路２２は、メモリ２１が出力した当該４ビットデータを受け取ると、それを１５ビットデータに変換し、当該１５ビットデータのＬＳＢをデータｘ１，０としてセレクター３１に出力する。
セレクター３１は、パルス列変調回路２２が出力したデータｘ１，０を受け取る。セレクター３１は、前記データｘ１，０を選択し、当該データｘ１，０を端子Ｐ０に出力する。
【０１７４】
隣接セルの端子Ｐ０が出力したデータは、自セルの端子Ｐ１〜Ｐ６に入力される。
入力部４５は、端子Ｐ０〜Ｐ６で受け取ったデータを、メモリ２４Ａに出力する。
メモリ２４Ａは、入力部４５が出力したデータを受け取る。メモリ２４Ａは、受け取った７ビットのデータを、カウンター２３Ａが出力するカウント値が１なので、メモリ２４Ａの１番地に格納する。
【０１７５】
このようにして、メモリ２４Ａは、順次、Ｌ１層のｉ番目のニューロンのデータを格納する。その後、メモリ２４Ａが、Ｌ１層の２５５番目のニューロンのデータを格納すると、カウンター２０とカウンター２３Ａは、カウント値が０に戻る。
【０１７６】
図８は、或るセルＣＮの出力端子Ｐ０から出力される出力データのフォーマットを説明するための図である。当該出力データは、セルＣＮのＬ１層のニューロン２０ｉの出力データｘｉ，ｔと、隣接セルから受け取ったＬ１層のデータの中から選択したデータを再送出したデータｒＱｓｋとを用いて構成されている。本発明の実施例の説明では、隣接セルから受け取ったＬ１層のデータから、初めの３２個のデータを選択している。ここで、Ｑはデータが入出力される端子の番号なので、出力端子Ｐ０から出力されるデータでは常に０である。ｓは隣接セルが出力するデータを受け取ったセルＣＮの入力端子の番号なので、１から６までの整数である。ｋは当該データのビット位置を表す０から３１までの整数である。
【０１７７】
具体的には、ｒ０１ｋは、セルＣＮが入力端子Ｐ１で受け取った入力データから先頭の３２ビットのデータを選択し、当該選択したデータを端子Ｐ０から再送出したデータのｋ番目の１ビットデータである。以下同様にして、ｒ０６ｋは、セルＣＮが入力端子Ｐ６で受け取った入力データから先頭の３２ビットのデータを選択し、当該選択したデータを端子Ｐ０から再送出したデータのｋ番目の１ビットデータである。
【０１７８】
セレクター３１は、初めにパルス列変調回路２２が出力したＬ１層のニューロンの出力データｘｉ，ｔを選択し、ｘ０，ｔからｘ２５５，ｔまでの１ビットデータを順次、端子Ｐ０へ出力する。
【０１７９】
次に、図３（ａ）と図３（ｂ）とを用いて、セレクター３１とセレクター３４の動作について説明する。
或るセルＣＮの、端子ＰＱを介して入力されたＬ１層のデータＤ＿ＣＱは、当該セルＣＮのメモリ２４Ａに格納される。ここで、端子ＰＱから入力されたデータは、メモリ２４Ａのビット位置Ｑに格納されるものとする。
【０１８０】
７ビット×２５６個のデータがメモリ２４Ａに格納されると、図示しない制御回路がカウンター２３Ａにリセット信号を出力する。カウンター２３Ａは、前記リセット信号を受け取ると、そのカウント値を０にする。カウンター２３Ａは、当該カウント値０をメモリ２４Ａに出力する。
【０１８１】
メモリ２４Ａは、当該カウント値０を受け取ると、０番地から７ビットのデータを読み出し、当該７ビットデータ中のビット７から１の６ビットデータをセレクター３４に出力する。セレクター３４は、当該６ビットデータからビット１のデータを選択し、セレクター３１に出力する。当該１ビットデータは、端子Ｐ１から入力されたＤ＿Ｃ１から選択された最初のデータであるのでｒ０１０である。セレクター３１は、受け取ったデータｒ０１０を端子Ｐ０に出力する。
【０１８２】
次いで、カウンター２３Ａの端子５１Ａにカウントアップ信号が入ると、カウンター２３Ａは、そのカウント値を増加して１にする。カウンター２３Ａは、当該カウント値１をメモリ２４Ａに出力する。
【０１８３】
メモリ２４Ａは、当該カウント値１を受け取ると、１番地から７ビットのデータを読み出し、当該７ビットデータ中の６ビットデータをセレクター３４に出力する。セレクター３４は、当該６ビットデータからビット１のデータを選択し、セレクター３１に出力する。当該１ビットデータは、端子Ｐ１から入力されたＤ＿Ｃ１から選択された２番目のデータであるのでｒ０１１である。セレクター３１は、受け取ったデータｒ０１１を端子Ｐ０に出力する。
【０１８４】
以下同様にして、カウンター２３Ａのカウント値が３１になり、メモリ２４Ａが３１番地から７ビットのデータを読み出して、当該７ビットデータから選択したｒ０１３１を、セレクター３１が端子Ｐ０に出力するまで続ける。
ここで、カウンター２３Ａが、図示しない回路から供給されるリセット信号によりリセットされる。
【０１８５】
次に、メモリ２４Ａは０番地から７ビットデータを読み出し、セレクター３４は当該７ビットデータのビット２のデータを選択し、セレクター３１に出力する。当該１ビットデータは、端子Ｐ２から入力されたＤ＿Ｃ２から選択された最初のデータであるので、ｒ０２０である。セレクター３１は、当該データｒ０２０を端子Ｐ０に出力する。
【０１８６】
以下同様に、メモリ２４Ａが３１番地から７ビットのデータを読み出して、当該７ビットデータから選択したｒ０２３１を、セレクター３１が端子Ｐ０に出力するまで続ける。同様に、セレクター３１は、ｒ０３０〜ｒ０３３１を端子Ｐ０に出力する。同様に、セレクター３１は、ｒ０４０〜ｒ０４３１を端子Ｐ０に出力する。同様に、セレクター３１は、ｒ０５０〜ｒ０５３１を端子Ｐ０に出力する。同様に、セレクター３１は、ｒ０６０〜ｒ０６３１を端子Ｐ０に出力する。
【０１８７】
ここで、データｒＱｓｋの命名方法について注意する。或るセルＣＮが出力するデータは端子Ｐ０から出力されるので、そのセルに於いてはｒ０ｓｋという名称で呼ばれる。当該データｒ０ｓｋは、隣接する６個のセルで受け取られるが、セル毎に入力される端子番号Ｑが異なるので、セル毎に名称が変化する。例えば、当該データｒ０ｓｋが隣接セルの入力端子Ｐ２で受け取られると、そのセルに於いてはｒ２ｓｋという名称で呼ばれる
【０１８８】
次に、データ選択器３６、カウンター３５Ａ、カウンター３５Ｂ、メモリ３７Ａおよびメモリ３７Ｂの動作について説明する。データ選択器３６は、入力部４５が出力する６ビットデータから、端子Ｐ１から入力されるｒ１１とｒ１２、端子Ｐ２から入力されるｒ２２とｒ２３、端子Ｐ３から入力されるｒ３３とｒ３４、端子Ｐ４から入力されるｒ４４とｒ４５、端子Ｐ５から入力されるｒ５５とｒ５６、端子Ｐ６から入力されるｒ６６とｒ６１を選択し、メモリ３７Ａおよびメモリ３７Ｂに出力する。
【０１８９】
＜ｒ１１とｒ６１のデータ格納＞
データ選択器３６は、入力端子Ｐ１から入力されたｒ１１ｋと入力端子Ｐ６から入力されたｒ６１ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ１１ｋとｒ６１ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値ｋを増やして、当該カウント値ｋをメモリ３７Ａに出力する。
【０１９０】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと、カウンター３５Ａが出力した前記カウント値ｋとを受け取る。メモリ３７Ａは、カウント値ｋが示す番地に当該２ビットのデータを格納する。
以上の処理をｋが０から３１まで繰り返す。
【０１９１】
＜ｒ１２とｒ２２のデータ格納＞
次に、データ選択器３６は、入力端子Ｐ１から入力されたｒ１２ｋと入力端子Ｐ２から入力されたｒ２２ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ１２ｋとｒ２２ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値（ｋ＋３２）をメモリ３７Ａに出力する。
【０１９２】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータとカウンター３５Ａが出力したカウント値（ｋ＋３２）とを受け取る。メモリ３７Ａは、カウント値（ｋ＋３２）が示す番地に当該２ビットのデータを格納する。以上の処理をｋが０から３１まで繰り返す。
【０１９３】
＜ｒ２３とｒ３３のデータ格納＞
次に、データ選択器３６は、入力端子Ｐ２から入力されたｒ２３ｋと入力端子Ｐ３から入力されたｒ３３ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ２３ｋとｒ３３ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値（ｋ＋６４）をメモリ３７Ａに出力する。
【０１９４】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと、カウンター３５Ａが出力したカウント値（ｋ＋６４）とを受け取る。メモリ３７Ａは、カウント値（ｋ＋６４）が示す番地に当該２ビットのデータを格納する。以上の処理をｋが０から３１まで繰り返す。
【０１９５】
＜ｒ３４とｒ４４のデータ格納＞
次に、データ選択器３６は、入力端子Ｐ３から入力されたｒ３４ｋと入力端子Ｐ４から入力されたｒ４４ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ３４ｋとｒ４４ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値（ｋ＋９６）をメモリ３７Ａに出力する。
【０１９６】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと、カウンター３５Ａが出力したカウント値（ｋ＋９６）とを受け取る。メモリ３７Ａは、カウント値（ｋ＋９６）が示す番地に当該２ビットのデータを格納する。以上の処理をｋが０から３１まで繰り返す。
【０１９７】
＜ｒ４５とｒ５５のデータ格納＞
次に、データ選択器３６は、入力端子Ｐ４から入力されたｒ４５ｋと入力端子Ｐ５から入力されたｒ５５ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ４５ｋとｒ５５ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値（ｋ＋１２８）をメモリ３７Ａに出力する。
【０１９８】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと、カウンター３５Ａが出力したカウント値（ｋ＋１２８）とを受け取る。メモリ３７Ａは、カウント値（ｋ＋１２８）が示す番地に当該２ビットのデータを格納する。以上の処理をｋが０から３１まで繰り返す。
【０１９９】
＜ｒ５６とｒ６６のデータ格納＞
次に、データ選択器３６は、入力端子Ｐ５から入力されたｒ５６ｋと入力端子Ｐ６から入力されたｒ６６ｋを選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。ここで、ｒ５６ｋとｒ６６ｋのどちらを上位ビットとするかは任意である。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値（ｋ＋１６０）をメモリ３７Ａに出力する。
【０２００】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと、カウンター３５Ａが出力したカウント値（ｋ＋１６０）とを受け取る。メモリ３７Ａは、カウント値（ｋ＋１６０）が示す番地に当該２ビットのデータを格納する。以上の処理をｋが０から３０まで繰り返す。
【０２０１】
最後に、データ選択器３６が入力端子Ｐ５から入力されたｒ５６３１と、入力端子Ｐ６から入力されたｒ６６３１を選択し、当該選択したデータを２ビットのデータとしてメモリ３７Ａに出力する。
また、端子５６Ａにカウントアップ信号が入力されると、カウンター３５Ａはカウント値を増やして、当該カウント値１９１をメモリ３７Ａに出力する。
【０２０２】
メモリ３７Ａは、データ選択器３６が出力した前記２ビットのデータと，カウンター３５Ａが出力したカウント値１９１を受け取る。メモリ３７Ａは、カウント値の１９１番地に当該２ビットのデータを格納する。
これによって、ラウンド０のデータ転送が終了し、カウンター３５Ａには図示しないリセット信号が入力されて、カウント値が０に戻る。
【０２０３】
次のラウンド１では、パルス列変調回路２２は、１５ビットデータのビット位置１のデータをセレクター３１へ出力する。セレクター３１は、パルス列変調回路２２が出力した当該データを受け取り、出力端子Ｐ０に出力する。
データ入力部４５は、自セルのセレクター３１及び隣接セルの端子Ｐ０が出力したデータを受け取り、当該データをメモリ２４Ｂに出力する。また、カウンター２３Ｂは、そのカウント値をメモリ２４Ｂに出力する。メモリ２４Ｂは、前記データと前記カウント値を受け取り、当該データを、前記カウント値が示す番地に保存する。
【０２０４】
入力部４５は、隣接セルが出力した、隣接セルに更に隣接するセルが出力したデータから選択したデータを、データ選択器３６に出力する。データ選択器３６は、前記データから一つ先のセルのデータを選択し、当該データをメモリ３７Ｂに出力する。また、カウンター３５Ｂは、そのカウント値をメモリ３７Ｂに出力する。
メモリ３７Ｂは、データ選択器３６が出力した前記データを受け取り、当該データをカウンター３５Ｂが出力したカウント値の番地に保存する。この様にメモリ２４Ａと２４Ｂ、メモリ３７Ａと３７Ｂを交互に使用して、Ｌ１層のニューロン２０ｉの出力データをＬ２層に属するメモリに転送する。
【０２０５】
ラウンド１４で、１５ビットデータのビット位置１４のデータの転送が終わるとメモリ２１に入っているデータの処理が終わる。ニューラルネット全体の処理を継続する場合は、図示しない装置が、メモリ２１に新たな入力データを書き込む。または、メモリ２１をダブルバッファ構造にしておいて、ニューラルネットでの処理と並行して、図示しない装置が、次の入力データをメモリ２１に書き込んでおく。または、メモリ２１が現在保持している入力データと同じデータを使って処理を繰り返す。
以上で、Ｌ１層の処理が終了する。
【０２０６】
次に、Ｌ２層のニューロン２２ｊの動作について説明する。ラウンド０ではメモリ２４Ａとメモリ２４Ｂのデータが不定であり、このデータを使ってＬ２層の出力信号を計算するので、端子５５に出力される信号も不定である。但し、これは計算の最初だけである。Ｌ１層の入力データメモリ２１に次々と新しいデータを設定して連続して計算する場合は、ラウンド０でもメモリ２４Ａまたはメモリ２４Ｂの値は確定している。
【０２０７】
ラウンド０で自セル及び隣接セルのＬ１層のニューロン２０ｉが出力した１，７９２個の出力データｘｉ，０をメモリ２４Ａが格納し、一つ先のセルのＬ１層のニューロン２０ｉが出力したデータの一部である３８４個の出力データｒ１１、ｒ１２、ｒ２２、ｒ２３、ｒ３３、ｒ３４、ｒ４４、ｒ４５、ｒ５５、ｒ５６、ｒ６６、ｒ６１をメモリ３７Ａが格納すると、ラウンド１からＬ２層のデータ処理が行われる。
【０２０８】
自セル及び隣接セルのＬ１層のニューロン２０ｉの出力データに関して、Ｌ２層のニューロン２２ｊでは１ニューロン当たり１，７９２回の積和演算をしなければならない。また、一つ先のセルのＬ１層のニューロン２０ｉの出力データに関して、Ｌ２層のニューロン２２ｊでは１ニューロン当たり３８４回の積和演算をしなければならない。
従って、５５７，０５６（＝（１，７９２＋３８４）×２５６）回の積和演算を４［ｍｓ］で行わなければならないので、Ｌ２層では１３９．３［ＭＨｚ］で計算をする。
【０２０９】
Ｌ２層のｊ番目のニューロン２２ｊではΣ（ｓｉ×ｗｉ，ｊ）＋Σ（ｐｍ×ｖｍ，ｊ）を計算する。ここで最初のΣはｉについての総和を表しており、次のΣはｍについての総和を表している。
メモリ２４Ａは、１３９．３［ＭＨｚ］の１／７の１９．９［ＭＨｚ］で、７ビットのデータを読み出し、当該データを並直変換して７倍の１３９．３［Ｍｂｐｓ］の１ビット信号ｓｉに変換する。
【０２１０】
メモリ２４Ａは、前記変換した信号ｓｉをセレクター３３に出力する。セレクター３３は、メモリ２４Ａが出力した前記信号ｓｉを受け取り、当該信号ｓｉを選択する。セレクター３３は、選択した信号ｓｉをアンドゲート２６に出力する。
その動作とともに、メモリ２５は、ｓｉに対応するシナプスの重みデータｗｉ，ｊを１３９．３［ＭＨｚ］で読み出し、アンドゲート２６に出力する。
【０２１１】
アンドゲート２６は、セレクター３３が出力した信号ｓｉと、メモリ２５が出力した重みデータｗｉ，ｊを受け取る。アンドゲート２６は、前記信号ｓｉと重みデータｗｉ，ｊの積ｓｉ×ｗｉ，ｊ（８ビットの０又はｗｉ，ｊ）を算出し、当該積をセレクター３２に出力する。
セレクター３２は、アンドゲート２６が出力した前記信号ｓｉ×ｗｉ，ｊを加算器２７に出力する。
【０２１２】
セレクター３２が、Ｌ２層のｊ番目のニューロンについての最初のデータｓ０×ｗ０，ｊを加算器２７に出力すると同時に、端子５２に信号０が入力されるので、アンドゲート２８は、０を加算器２７の入力端子に出力する。これによって、加算器２７における総和計算の初期値が０になる。
次に、セレクター３２が、ｓ１×ｗ１，ｊを加算器２７に出力すると同時に、端子５２に１が入力され、それ以降、端子５２は１に保たれる。これによって、加算器２７が出力する部分和がアンドゲート２８を介して、加算器２７の入力にフィードバックされる。
【０２１３】
加算器２７は、セレクター３２が出力した前記積と、アンドゲート２８が出力した１クロック前の加算機２７の出力データを受け取る。加算器２７は、前記積と前記出力データを加算する処理を１，７９１回行う。
ここで、セレクター３２が、アンドゲート４０が出力するデータを選択するように切り替わる。
【０２１４】
メモリ２４Ａから１，７９２個のデータが読み出されると、次いでメモリ３７Ａからのデータ読み出しが始まる。メモリ３７Ａは、１３９．３［ＭＨｚ］の１／２の６９．６［ＭＨｚ］で、２ビットのデータを読み出し、当該データを並直変換して２倍の１３９．３［Ｍｂｐｓ］の１ビット信号ｐｍに変換する。
【０２１５】
メモリ３７Ａは、前記変換した信号ｐｍをセレクター３８に出力する。セレクター３８は、メモリ３７Ａが出力した前記信号ｐｍを受け取り、当該信号ｐｍを選択する。セレクター３７は、選択した信号ｐｍをアンドゲート４０に出力する。
それとともに、メモリ３９は、信号ｐｍに対応するシナプス結合の重みデータｖｍ，ｊを１３９．３［ＭＨｚ］で読み出し、アンドゲート４０に出力する。
【０２１６】
アンドゲート４０は、セレクター３８が出力した信号ｐｍと、メモリ３９が出力した重みデータｖｍ，ｊを受け取る。アンドゲート４０は、前記信号ｐｍと重みデータｖｍ，ｊの積ｐｍ×ｖｍ，ｊ（８ビットの０又はｖｍ，ｊ）を算出し、当該積をセレクター３２に出力する。
セレクター３２は、アンドゲート４０が出力した前記信号ｐｍ×ｖｍ，ｊを加算器２７に出力する。
【０２１７】
加算器２７は、セレクター３２が出力した前記積ｐ０×ｖ０，ｊを受け取ると、既に計算してある和Σ（ｓｉ×ｗｉ，ｊ）に加算する。加算器２７は、セレクター３２が出力した積ｐｍ×ｖｍ，ｊと、アンドゲート２８が出力した１クロック前の加算機２７の出力データを受け取る。加算器２７は、前記積と前記出力データを加算する処理を３８４回行い、当該加算結果を大小比較器２９に出力する。
【０２１８】
大小比較器２９は、加算器２７が出力した前記加算結果と、端子５３に入力される閾値θを受け取る。大小比較器２９は、前記加算結果が前記閾値θより大きければ、１をラッチ３０に出力する。また、大小比較器２９は、前記加算結果が前記閾値θ以下ならば、０をラッチ３０に出力する。
【０２１９】
ラッチ３０は、大小比較器２９が出力した信号を受け取る。大小比較器２９の出力は１３９．３［ＭＨｚ］のパルス状に出るので、そのままでは使い難い。そこで、ラッチ３０は所定のタイミング信号５４が入力されたときに、前記受け取った信号を保持し、６４［ｋｂｐｓ］の信号に変換する。ラッチ３０は、当該変換した信号を端子５５に出力する。当該変換した信号がＬ２層のニューロン２２ｊの出力である。
【０２２０】
次に、ラウンド２では、メモリ２４Ｂとメモリ３７Ｂのデータを使って、回路ユニット１０は、上記と同様の演算処理を行う。その間に、ラウンド０と同様のプロセスで、Ｌ１層のニューロン２０ｉの出力が、メモリ２４Ａと３７Ａに蓄積される。このように、メモリ２４Ａとメモリ２４Ｂ、メモリ３７Ａとメモリ３７Ｂがそれぞれ交互に使われて、ラウンド１４まで演算処理が進む。
【０２２１】
本実施例ではニューラルネットが２層構造であるとしたが、本発明はこれに制限されるものではなく、一般的に２層以上のニューラルネットに適用できる。その場合は図２（ａ）に示す信号線Ｘに、中間層又は出力層のニューロンからの出力データも時分割多重化すれば良い。
【０２２２】
本実施例ではＬ１層の入力データを４ビットとしたが、本発明はこれに制限されるものではなく、一般的に入力データがｍ１ビット（ｍ１は１以上の整数）としても同様に適用できる。
本実施例ではＬ２層のシナプスの重みデータを８ビットとしたが、本発明はこれに制限されるものではなく、一般的に重みデータがｎ１ビット（ｎ１は１以上の整数）としても同様に適用できる。
【０２２３】
本実施例では１ラウンドのデータ転送時間、及び各層での一連の処理時間を４［ｍｓ］としたが、本発明はこれに制限されるものではなく、システム全体の処理能力に応じた任意の時間に設定可能である。
本実施例では、１つのセルに含まれるニューロンの個数をＬ１層とＬ２層とも２５６個としたが、本発明はこれに制限されるものではなく、一般的にｋ１個（ｋ１は２以上の整数）としても同様に適用できる。また、Ｌ１層とＬ２層のニューロンの数が同じである必要はない。
【０２２４】
本実施例ではＬ１層の番号０〜３１のニューロン２０ｉが、１つ先のセルのＬ２層のニューロン２２ｊとシナプス結合を作るとしたが、本発明はこれに制限されるものではなく、任意の層の任意の番号の任意個のニューロンが、１つ先のセルの任意の層のニューロンとシナプス結合を作るとしても同様に適用できる。
【０２２５】
本実施例ではスパイクニューロンについて説明しているが、本発明はこれに制限されるものではなく、スパイクニューロン以外のニューラルネットにも同様に適用できる。
本実施例では、自セル及び隣接するセルからのデータに関しての総和計算を行う加算器２７を、１つ先のセルからのデータに関しての総和計算を行う加算器としても利用しているが、それぞれの総和計算用に加算器を用意し、加算器やメモリの動作速度を低くすることもできる。
【０２２６】
本実施例では、メモリ２４Ａ又はメモリ２４Ｂから読み出したデータのうち、端子Ｐ１から入力される３２個のデータを初めに端子Ｐ０から出力し、その後で端子Ｐ２から入力される３２個のデータというように端子番号順に出力したが、本発明はこれに制限されるものではない。例えば、セルＣ０は、端子Ｐ１からＰ６で受け取った入力データを、混在して端子Ｐ０から出力しても良い。
【０２２７】
図９は、入力端子Ｐ１からＰ６で受け取った入力データを順番に出力端子Ｐ０から出力するときの出力データを時間順に並べた図である。図９において、ラウンド０の２５６個の出力データｘｉ，０（ｉは０から２５５までの整数）と、３２個のｒ０１ｋ（ｋは０から３１までの整数）と、３２個のｒ０２ｋと、３２個のｒ０３ｋと、３２個のｒ０４ｋと、３２個のｒ０５ｋと、３２個のｒ０６ｋと、が出力端子Ｐ０から順番に出力されるデータである。
【０２２８】
端子Ｐ１〜Ｐ６で受け取った入力データを出力するために、メモリ２４Ａは０番地から７ビットのデータを読み出し、当該データをセレクター３４に出力する。セレクター３４は、当該データの中から、入力端子Ｐ１から入力されたデータｒ０１０、入力端子Ｐ２から入力されたデータｒ０２０、、、入力端子Ｐ６から入力されたデータｒ０６０と順に、セレクター３１に出力する。
【０２２９】
その後、端子５１Ａにカウントアップ信号が入力されると、カウンター２３Ａはカウント値を１にし、メモリ２４Ａへ当該カウント値１を出力する。メモリ２４Ａはカウンター２３Ａが出力したカウント値１を受け取る。メモリ２４Ａは、１番地から７ビットのデータを読み出し、セレクター３４に出力する。
セレクター３４は、メモリ２４Ａが出力した前記データを受け取り、ビット１から順にビット６までを選択し、当該選択したデータをセレクター３１に出力する。
以下同様にして、１ビットずつ端子Ｐ０から出力する。
【０２３０】
＜実施例２の説明＞
本発明の実施例１では、隣接するセルだけでなく１つ先のセル内のニューロンとシナプス結合を作れるとしたが、更に、１つ先のセルに隣接するセル（以下、２つ先のセルと称する）内のニューロンとシナプス結合を作れるようにもできる。
【０２３１】
図１０は、２つ先のセルとシナプス結合を作る場合におけるセルの配置を説明するための図である。例えば、図１０に示すセルＣ０内のＬ２層のニューロン２２ｊは、本発明の実施例１によれば、セルａ〜ｌ内のＬ１層内の８分の１の３８４（＝３２×１２）個のニューロンとシナプス結合を作れることは既に説明したとおりである。
【０２３２】
この実施例１では、セルＣ０が端子Ｐ１から受け取るデータの中のｒ１１（３２ビット）がセルａからのデータであった。つまり、セルＣ０はセルａ〜ｌからのデータを受け取っている。
図１１は、２つ先のセルとシナプス結合を作る場合における、セルＣＮからの出力信号と入力信号を説明するための図である。ここでは、説明を分かり易くする為に、セルＣＮの具体例として、セルＣ０について説明する。
【０２３３】
実施例１で説明したように、セルＣ０がその入力端子Ｐ１で受け取るデータｒ１１は、セルａからのデータである。その中から、例えば最初の１／４の８個のデータをａ０として、ｒ０６の後に続けて出力する。
同様に、セルｂからのデータｒ１２の最初の８個のデータをｂ０として、ａ０の後に続けて出力する。セルｃからのデータｒ２２の最初の８個のデータをｃ０として、ｂ０の後に続けて出力する。
【０２３４】
セルｄからのデータｒ２３の最初の８個のデータをｄ０として、ｃ０の後に続けて出力する。セルｅからのデータｒ３３の最初の８個のデータをｅ０として、ｄ０の後に続けて出力する。セルｆからのデータｒ３４の最初の８個のデータをｆ０として、ｅ０の後に続けて出力する。セルｇからのデータｒ４４の最初の８個のデータをｇ０として、ｆ０の後に続けて出力する。セルｈからのデータｒ４５の最初の８個のデータをｈ０として、ｇ０の後に続けて出力する。
【０２３５】
セルｉからのデータｒ５５の最初の８個のデータをｉ０として、ｈ０の後に続けて出力する。セルｊからのデータｒ５６の最初の８個のデータをｊ０として、ｉ０の後に続けて出力する。ｈ０の後に続けて出力する。セルｋからのデータｒ６６の最初の８個のデータをｋ０として、ｊ０の後に続けて出力する。セルｌからのデータｒ６１の最初の８個のデータをｌ０として、ｋ０の後に続けて出力する。
【０２３６】
すると回路は対称なので、図１１に示すように端子Ｐ１〜Ｐ６から、ａ１〜ｌ６のデータを受け取れるようになる。ここで、図１０から明らかなように、ａ１はセルＡからのデータ、ｂ１はセルＢからのデータ、ｃ１はセルＣからのデータ、ｃ２はセルＤからのデータ、ｄ２はセルＥからのデータ、ｅ２はセルＦからのデータ、ｅ３はセルＧからのデータ、  ｆ３はセルＨからのデータ、ｇ３はセルＩからのデータ、ｇ４はセルＪからのデータである。
【０２３７】
また、ｈ４はセルＫからのデータ、ｉ４はセルＬからのデータ、ｉ５はセルＭからのデータ、ｊ５はセルＮからのデータ、ｋ５はセルＯからのデータ、ｋ６はセルＰからのデータ、ｌ６はセルＱからのデータ、ａ６はセルＲからのデータである。
したがって、セルＣ０ではセルＡ〜Ｒ内のＬ１層内の１４４（＝８×１８）個のニューロンとシナプス結合を作ることができる。
【０２３８】
このように本発明の方法を順次適用することで、１つ先のセルだけでなく、幾つでも遠方のセル内のニューロンとシナプス結合を作ることができる。
なお、図６に相当する回路例については省略する。
【０２３９】
＜シナプスの重みデータメモリの小規模化＞
図２（ｂ）のような手法で大規模なニューラルネットを構成する場合、例えばセル単位で回路をＬＳＩ化し、それを多数個連結することが考えられる。１個のＬＳＩ中で最も大きなチップ面積を占めるのは、シナプス結合の重みデータを格納するメモリ２５である。
【０２４０】
この本発明の手法を用いて、例えば仮想平面を正六角形で分割すると、Ｌ２層のニューロン２２ｊが作れるシナプス結合の数は、セルに含まれるＬ１層のニューロン２０ｉの個数ｍの７倍になる。したがって、シナプスの個数を最大１０，０００にしようとすると、Ｌ１層のニューロン２０ｉの個数ｍは約１，４２９（＝１０，０００÷７）である。
【０２４１】
Ｌ２層にも同程度のｎ（＝１，４２９）個のニューロンが存在すると仮定すると、Ｌ２層のニューロン２２ｊに付属するシナプス結合の重みデータの個数は７×ｍ×ｎ  ＝  １４，２９４，２８７である。シナプス結合の重みデータが８ビットで保持されるとすると、シナプス結合の重みデータメモリの容量は約１３．６［ＭＢ］である。
【０２４２】
ニューラルネットが３層になり、追加された層でも同程度のニューロンが存在すると仮定すると、そのシナプス結合の重みデータのメモリにも約１３．６［ＭＢ］の容量が必要である。しかしながら、このように大容量のメモリを１個のＬＳＩに集積すると、製造コストが急激に高くなったり、場合によっては技術的に製造が困難になる。
【０２４３】
そこで、本発明で説明した技術を用いて、１個のＬＳＩに必要なメモリ量を削減する方法について述べる。その概略は、セル内でのＬ１層のニューロン２０ｉの数を少なくし、その代わりに遠方のセル内の全てのニューロンともシナプス結合を作れるようにすることである。例えば、１つ先のセル内のＬ１層の全ニューロンとシナプス結合を作るようにすると、シナプス結合を作るセルの数は７から１９に増える。
【０２４４】
したがって、Ｌ２層の１ニューロンあたりのシナプスの個数を最大１０，０００にしようとすると、Ｌ１層のニューロン２０ｉの数ｍは５２６（＝１０，０００÷１９）になる。Ｌ２層にも同程度のｎ（＝５２６）個のニューロンが存在すると仮定すると、Ｌ２層のニューロン２２ｊに付属するシナプス結合の重みデータの個数は１９×ｍ×ｎ＝５，２５６，８４４である。
【０２４５】
つまり、Ｌ２層の１ニューロンあたりのシナプス数を一定という条件下で、Ｌ１層のニューロン２０ｉが隣接するセルとのみシナプス結合を作る場合と比べると、メモリ容量を０．３７倍にすることができる。この結果、ＬＳＩの製造が容易になり、また製造コストを下げることができる。
但し、セル内でのＬ１層のニューロン２０ｉの数を少なくした分、同じニューロン数のニューラルネットを構築しようとすると、必要なセル（ＬＳＩ）の数が増える。従って、ニューラルネット全体で必要なメモリの容量が減る訳ではない。
【０２４６】
このように、本発明の実施例１では、隣接セルから受け取ったデータの一部を出力端子から送信することで、一つ先のセルのニューロンともシナプス結合を作れる効果があるとしたが、ここで説明したように隣接セルから受け取ったデータを全て出力端子から送信することで、１つのセル内のシナプス結合の重みデータ格納メモリの容量を削減するという使い方もできる。
【０２４７】
＜シナプスの重みデータメモリの削減＞
本発明の実施例１では、Ｌ１層に含まれる２５６個のニューロンのうち、８分の１の３２個のニューロンが１つ先のセルに含まれるＬ２層のニューロン２２ｊとシナプス結合を作れるとした。
【０２４８】
この点を詳細に述べると、選ばれた３２個のニューロンは、１つ先のセルに含まれるＬ２層の全て３，０７２（＝２５６×１２）個のニューロンとシナプス結合を作れるが、残りの２２４個のニューロンは、１つ先のセルに含まれるＬ２層のニューロン２２ｊとは全くシナプス結合を作れないということである。
【０２４９】
実際の脳の構造を考えると、これは少し極端であり、実際に１つ先のセル内のニューロンとの間で作られるシナプス結合は、かなり少ないと思われる。
そこで、１つ先のセルではＬ２層の全てのニューロンとシナプス結合を作れる訳ではなく、例えば１／４の初めの６４個のニューロンとだけシナプス結合を作れるとする。
【０２５０】
そうすると、この部分に必要なシナプス結合の重みデータ格納メモリの容量を１／４にできる。図６の実施例１に則して言えば、シナプス結合の重みデータが格納されているメモリ３９の容量が９６［ＫＢ］（＝８［ｂｉｔ］×３２×１２×２５６）から  ２４［ＫＢ］（＝８［ｂｉｔ］×３２×１２×６４）に削減できるので、ニューラルネットの製造コストを低減できる。
【０２５１】
ここで、実際にシナプス結合の数を削減するには、Ｌ２層のニューロン２２ｊ（ｊが０から６３）は一つ先のセルのＬ１層の３８４個のニューロンとシナプス結合を作る、とすれば良い。この場合に、アンドゲート４０に制御線を追加して２入力から３入力にし、シナプス結合が作られないＬ２層のニューロン２２ｊ（ｊが６４から２５５）について総和計算をする際は、前記制御線を０にして、アンドゲート４０の出力を強制的に０にする。
【０２５２】
或いは、ｒＱｓｋ（ｒ１１ｋ、ｒ１２ｋ、ｒ２２ｋ、、、、ｒ６６ｋ、ｒ６１ｋ）の中で、ｋの値が４の倍数のデータは、ｊの値が４の倍数となるＬ２層のニューロン２２ｊが使い、ｋの値が４の倍数＋１のデータは、ｊの値が４の倍数＋１となるＬ２層のニューロン２２ｊが使い、ｋの値が４の倍数＋２のデータは、ｊの値が４の倍数＋２となるＬ２層のニューロン２２ｊが使い、ｋの値が４の倍数＋３のデータは、ｊの値が４の倍数＋３となるＬ２層のニューロン２２ｊが使う、ということも可能である。
この場合にも、アンドゲート４０に制御線を追加して２入力から３入力にし、シナプス結合が作られないＬ２層のニューロン２２ｊとｒＱｓｋとの組み合わせについて総和計算をする際は、前記制御線を０にして、アンドゲート４０の出力を強制的に０にする。
このように、一つ先のＬ１層のニューロンとシナプス結合を作る自セルのＬ２層のニューロンの個数を削減することで、シナプス結合の重みデータを格納する為のメモリ３９の容量を削減できる。回路例は省略する。
【０２５３】
＜実施例３＞
本発明の実施例１では、Ｌ１層の１／８のニューロンが、１つ先の全てのセル内のＬ２層のニューロンとシナプス結合を作るとしたが、本発明はこれに制限されるものではない。１つ先の全てのセル内のニューロンとシナプス結合を作るということは、或るセルのニューロンが自分を中心とする、ほぼ同心円内に存在する他のニューロンとシナプス結合を作るということである。
【０２５４】
しかし、脳の中には樹状突起または軸索を、水平方向に特定の方向性を持った形で形成するニューロンがある。そうしたニューロンを模倣してニューラルネットを構築する場合、シナプス結合が作られる可能性が無い方向まで、シナプス結合を作れるようにするのは効率が悪い。
【０２５５】
図１２は、樹状突起または軸索の分岐に方向性を持つニューラルネットを模倣する場合における、セルの配置と信号伝達の方向を説明するための図である。
例えば、図１２に示すセルＣ０のＬ２層の全てのニューロンは、網掛けしたセルＣ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６のＬ１層の全てのニューロンと、シナプス結合を作る可能性が有り、更にセルＣ０のＬ２層の全てのニューロンが、網掛けしたセルＣ８、Ｃ９、Ｃ１０、Ｃ１４、Ｃ１５、Ｃ１６のＬ１層の一部のニューロンと、シナプス結合を作る可能性が有るとする。
【０２５６】
図１３は、方向性を持ったシナプス結合を作る場合における、セルＣＮからの出力信号と入力信号を説明するための図である。
上記の用途に本発明を適用するには、メモリ３７Ａ又は３７Ｂは、図１３に示すデータのうち、ｒ１２、ｒ２２、ｒ２３、ｒ４５、ｒ５５、ｒ５６のみを格納する。それに合わせて、メモリ３９もｒ１２、ｒ２２、ｒ２３、ｒ４５、ｒ５５、ｒ５６に対応するシナプス結合の重みデータのみを保持する。このようにすれば、メモリ３７Ａとメモリ３７Ｂとメモリ３９の容量を削減でき、更に演算するデータ量を減らすことができるので、加算器２７などの動作速度を遅くすることができる。
【０２５７】
本実施例では、１つ先のポリトープのうち、所定のポリトープから入力される信号のみを選択したが、これに限らず、２つ先のポリトープのうち、所定のポリトープから入力される信号のみを選択してもよい。これによって、シナプス結合の配線に方向性を持たせながら、２つ先のポリトープからの入力を受け取ることができる。
同様にして、シナプス結合の配線に方向性を持たせながら、３つ以上先のポリトープからの入力を受け取ることができる。
【０２５８】
＜実施例４＞
本発明の実施例１では、隣接するセルへ行く信号と、１つ先のセルへ行く信号は、仮想的に同じ時刻に到着している。しかし、遠方まで伸びる軸索を通して伝わる信号は、近隣への信号に比べて遅れる場合がある。そこで、１以上先のセルへ行く信号に遅延を入れられるようにする。
【０２５９】
図１４は、１つ先のセルへ出力する信号を遅延させる場合における回路ユニットの回路図である。
図６の回路ユニットとの違いは、２入力アンドゲート４０を３入力アンドゲート４１に置き換え、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）機能を持つ１９２ビットの遅延回路４４が、出力部４６の中の隣接セルのデータを出力する経路に挿入されていることである。
【０２６０】
遅延回路４４は、ラウンド０でセレクター３４が出力したデータを一旦記憶する。その後、遅延回路４４は、次のラウンド１で前記記憶済みのデータをセレクター３１に出力し、それと共に、セレクター３４が出力したデータを新たに記憶する。
このように動作させることで、１つ先のセルに行くデータを、１ラウンド分（例えば４［ｍｓ］）遅延させることができる。
１つ先のセルでは、遅延されたデータがラウンド１でメモリ３７Ｂに格納される。つまり、有効なデータを利用できるのはラウンド２からなので、ラウンド０とラウンド１ではアンドゲート４１の制御入力５７に０を入力し、アンドゲート４０の出力を０にする。
【０２６１】
本実施例４では、遅延回路４４のビット数を１９２としたが、本発明はこれに制限されるものではない。また、本実施例４では、遅延回路４４による遅延を１ラウンド分としたが、本発明はこれに制限されるものではなく、遅延回路４４の記憶容量を増やすことにより、複数のラウンド分の遅延を入れることが可能である。
【０２６２】
また、２つ以上先のセルまで信号を伝達する場合に、１つ先のセルへの遅延時間よりも、２つ先のセルへの遅延時間を大きくすることも可能である。
【０２６３】
＜効果＞
本発明の実施例における、Ｌ２層のニューロン２２ｊのシナプス結合の重みデータを記憶するメモリの容量について説明する。セルＣ０及び周辺セルＣ１〜Ｃ６のＬ１層中のニューロンの総数は１，７９２（＝２５６×７）個である。２つ先のセルＣ７〜Ｃ１８からはそれぞれ３２個のニューロンのデータを受け取るので、３８４（＝３２×１２）ビットのデータになる。
【０２６４】
したがって、Ｌ２層の１個のニューロンには最大２，１７６（＝１，７９２＋３８４）個のシナプス結合ができるので、セルＣ０のＬ２層にある２５６個のニューロン全体では５５７，０５６（＝２，１７６×２５６）個になる。この値は、２つ先のセルＣ７〜Ｃ１８とシナプス結合を作らないとした場合に比べて、２１．４％（＝３８４÷１，７９２）  の増加である。
【０２６５】
一方、従来技術を用いてセルを大きくした場合と比べると、０．１６５（５５７，０５６÷３，３８１，１７５＝）倍となり、シナプス結合の数は約１／６で済む。また、Ｌ２層で総和計算する加算器に必要とされる演算速度は、シナプス結合の重みデータの個数に比例するので、この加算器の動作速度も約１／６で済む。これらの効果により、ニューラルネットのコストを大幅に減らせるだけでなく、ニューラルネットの動作時、及び待機時の消費電力を大幅に削減できる。
【０２６６】
１つ又は複数のセルを１個のＬＳＩやＭＣＭ（Ｍｕｌｔｉ―Ｃｈｉｐ  Ｍｏｄｕｌｅ）などで製造し、それらを複数個並べて大規模なニューラルネットを構築する場合に、本発明を用いて、１個のＬＳＩやＭＣＭなどに内蔵するメモリの容量を小さくすることができる。ＬＳＩの製造コストはＬＳＩのチップ面積が増大すると急激に高くなるので、チップ面積を適当な大きさに抑えて、それを多数個並べることで、ニューラルネット全体のコストを低減できる。
【０２６７】
遠くのセルに伝送される信号は、Ｌ２層の全てのニューロンとシナプス結合を作るのではなく、まばらに結合することもできるようにしたことで、これらのシナプス結合に必要な重みデータメモリの容量を少なくできる。
また、方向性のある樹状突起や軸索を持つニューロンで構成されるニューラルネットを模倣する場合に、シナプス結合が作られる可能性が無いセルに対しては、初めからシナプス結合を作る能力を削除しておくことで、シナプス結合の重みメモリの容量を削減することができる。
【０２６８】
また、本発明の別の実施例では、遠くのセルに属するニューロンへ伝達される信号を、近くのセルに属するニューロンへ伝達される信号よりも遅延させることができる。スパイクニューロンでは時間軸方向に情報がコーディングされているので、このように信号に時間差を持たせられる機能は、情報表現をする上で重要である。
【０２６９】
以上、本発明の実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０２７０】
ＣＮ  セル（ポリトープ）
１０  回路ユニット
２０  ８ビットカウンター
２１  メモリ（第１の記憶部）
２２  パルス列変調回路（データ生成部）
２３Ａ  ８ビットカウンター
２３Ｂ  ８ビットカウンター
２４Ａ  メモリ
２４Ｂ  メモリ
２５  メモリ（第２の記憶部）
２６  アンドゲート（第１の乗算回路）
２７  加算器（第１の加算器）
２８  アンドゲート
２９  大小比較器
３０  ラッチ
３１  セレクター
３２  セレクター
３３  セレクター
３４  セレクター（データ選別部）
３５Ａ  カウンター
３５Ｂ  カウンター
３６  選択回路（選択回路）
３７Ａ  メモリ
３７Ｂ  メモリ
３８  セレクター
３９  メモリ（第３の記憶部）
４０  アンドゲート（第２の乗算回路）
４１  アンドゲート（第２の乗算回路）
４４  遅延回路
４５  入力部（入力手段）
４６  出力部（出力手段）
【図１】
0005393588.tif 000002
【図２】
0005393588.tif 000003
【図３】
0005393588.tif 000004
【図４】
0005393588.tif 000005
【図５】
0005393588.tif 000006
【図６】
0005393588.tif 000007
【図７】
0005393588.tif 000008
【図８】
0005393588.tif 000009
【図９】
0005393588.tif 000010
【図１０】
0005393588.tif 000011
【図１１】
0005393588.tif 000012
【図１２】
0005393588.tif 000013
【図１３】
0005393588.tif 000014
【図１４】
0005393588.tif 000015
【図１５】
0005393588.tif 000016
【図１６】
0005393588.tif 000017