(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.
【発明の概要】
【発明が解決しようとする課題】
【００２４】
ニューラルネットにはニューロン数が多くなると、ニューロン間の配線が膨大になるという基本的な問題が有る為に、従来技術では数万ニューロン程度を実現するのが限界であり、人間の脳並みの規模（１００億から１０００億ニューロン）を実現する見通しは全く立っていない。
【００２５】
人間の脳には１００億から１，０００億のニューロンがあるが、実際に使われているのはその数％と言われているので、人工ニューロンの個数が１億以上あれば、少なくとも脳機能の一部（図形認識や言語認識など）をかなり正確に模倣できると思われる。
【００２６】
しかしながら、次に述べる問題により、特許文献１の技術を用いて脳を模倣する１億ニューロン規模のニューラルネットを構築することは困難である。
第１の問題点は、Ｌ１層とＬ２層の結合形式が、全てのニューロン対全てのニューロンに固定されている点である。シナプス結合を作りたくないところは、シナプス結合の重みを０にすることで、実質的に結合をなくすことができるとされているが、このままでは非常に無駄が多い。
【００２７】
１億ニューロンのニューラルネットを例えば、大脳皮質のモデルとして用いられる６層構造で実現し、各層に同数のニューロンを割り振るとすると、１層当たり約１，７００万ニューロンになる。このデータを受け取るＬ２層中の１個のニューロンにとっては、約１，７００万個中の１万個以下のデータにだけ意味があり、残りの約１，６９９万個のデータを無視しなければならない。無視すべきデータはＬ２層のニューロン毎に異なるので、この為に膨大な回路及び、Ｌ２層だけで８［ｂｉｔ］×１，６９９万×１，７００万＝２８９［ＴＢ］ものメモリが必要になる。
【００２８】
第２の問題点は、共通信号線のファンイン（入力数）とファンアウト（出力数）が膨大になる点である。第１の問題点と同様に１億ニューロンのニューラルネットを６層構造で実現したとすると１層当たり約１，７００万ニューロンになる。つまり、共通バスのファンインは約１，７００万であり、ファンアウトも約１，７００万ということである。これを電子回路で実現するのは非常に難しい。
【００２９】
また、約１，７００万個のデータを作りだす回路部は物理的にかなり大きくなるので、無理に１本に纏めようとすると数段階に分けて纏め処理をしなければならず、その回路が膨大になる。共通信号線を１本ではなく数本にすることも考えられるが、そうすると共通線毎にどのニューロンを属させるかが問題となる。また異なる共通線を跨ぐ通信をどうするかも大きな問題になり、それを解決するのは困難である。
【００３０】
これらの問題から特許文献１の技術は、数十から数百ニューロン程度の小規模ニューラルネットには適しているが、数千ニューロン以上のニューラルネットへの適用は難しい。
【００３１】
一方、ＡＥＲ法ではニューロン間の接続に大量のデータ伝送が必要であり、更に送信元に宛先アドレスを記憶するメモリが必要になる。中規模ニューラルネットでは、伝送すべきデータ量がニューロン数のほぼ２乗に比例し、またアドレスのビット数も増える。
【００３２】
例えばＬ１層とＬ２層がそれぞれ１０，０００ニューロンになると、アドレスが１４ビット以上必要になるので通信速度は、（１４［ｂｉｔ］＋８［ｂｉｔ］）×５，０００×１０，０００÷４［ｍｓ］＝３４．４［ＧＢ／ｓ］必要になる。また、Ｌ１層には（１４［ｂｉｔ］＋８［ｂｉｔ］）×５，０００×１０，０００＝１３８［ＭＢ］のメモリが必要になる。
このような事情から、ＡＥＲ法は数万ニューロン程度かつ、各ニューロンが数百個程度のシナプス結合を持つニューラルネットまでしか適用できなかった。
【００３３】
そこで本発明は、上記問題に鑑みてなされたものであり、ニューロン間の配線数を少なくする電子回路及び配線方式を提供することを課題とする。
【課題を解決するための手段】
【００３４】
上記の課題を解決するために、請求項１に記載した発明は、複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層に存在する人工ニューロンとを結びつけるシナプス結合とを有し、前記複数の層のうち第１の層の人工ニューロンの出力データと前記シナプス結合の重み情報との積を計算し、前記積を累積した結果に応じた出力を第２の層の人工ニューロンが出力するニューラルネットワークを実現する電子回路であって、二次元以上の仮想空間において当該仮想空間を任意の数の任意のポリトープ（例えば、実施形態における正六角形のセルＣＮ）で分割し、前記ポリトープ毎に配置される回路ユニット（例えば、実施形態における回路ユニット１０）と、隣接するポリトープに配置された前記回路ユニット間で、前記第１の層の人工ニューロンの出力データを送信する配線と、を備え、
前記回路ユニットは、第１の層に属する複数の人工ニューロンと第２の層に属する複数の人工ニューロンとを実装し、第１の層の人工ニューロンは、自身の出力データを時分割多重化し、該時分割多重化したデータを同一回路ユニット内の第２の層の人工ニューロンと、自身のポリトープに隣接するポリトープに配置された回路ユニットの第２の層の人工ニューロンとへ出力し、前記同一回路ユニット内の第２の層の人工ニューロンは、同一回路ユニット内の第１の層の人工ニューロンが出力した出力データと、自身のポリトープに隣接するポリトープに配置された回路ユニットの第１の層の人工ニューロンが出力した出力データとを入力データとして処理することを特徴とする電子回路である。
これにより、前記ニューロン間の配線に必要な信号線を、１つのポリトープ当り自身のポリトープに隣接するポリトープへの出力信号線１本にすることができる。
【００３５】
請求項２に記載した発明は、請求項１に記載の発明において、前記回路ユニットは、前記第１の層の人工ニューロンの出力データを入力する必要がないシナプス結合では、その重み情報を０にすることを特徴とする。
これにより、第１の層の人工ニューロンの出力データを受けとる必要性の有無に拘わらず、第２の層の人工ニューロンに共通に前記第１の人工ニューロンからの出力データを与えることができ、前記第１の層の人工ニューロンからの情報が不要な前記第２の層の人工ニューロンへの配線をなくすことなく、当該第１の層の人工ニューロンから第２の層の人工ニューロンへの入力を遮断することができる。
【００３６】
請求項３に記載した発明は、請求項１または請求項２に記載の発明において、前記仮想空間は仮想二次元平面で構成し、前記ポリトープは正六角形で構成し、前記仮想二次元平面を任意の個数の前記正六角形で分割することを特徴とする。
これにより、仮想二次元平面を正六角形で隙間なく埋めることができる。また、仮想二次元平面内で各人工ニューロンは、ほぼ等距離内の人工ニューロンとの間でシナプス結合を作ることができる。
【００３７】
請求項４に記載した発明は、請求項１から請求項３のいずれかに記載の発明において、前記回路ユニットは、第２の層の人工ニューロンの出力データを第２の層または第１の層の人工ニューロンへの入力データとすることを特徴とする。
これにより、或る層のニューロンの出力データを同じ層または該層より前の層のニューロンへフィードバックすることができる。
【００３８】
請求項５に記載した発明は、請求項１から請求項４のいずれかに記載の発明において、前記回路ユニットは、第１の層の人工ニューロンの入力データを保持する第１の記憶部（例えば、実施形態におけるメモリ２１）と、前記シナプス結合の重み情報を保持する第２の記憶部（例えば、実施形態におけるメモリ２５）と、前記第１の層の人工ニューロンが前記入力データを時分割多重化して出力データとして同一回路ユニット内の第２の層の人工ニューロンに出力し、前記出力データを隣接するポリトープに配置された回路ユニット内の第２の層の人工ニューロンに出力する出力回路（例えば、実施形態におけるパルス列変調回路２２）と、前記出力データと前記重み情報との積を算出する乗算回路（例えば、実施形態における乗算器５０）と、前記積を一方の入力信号としてその総和を算出する加算器（例えば、実施形態における加算器２７）と、前記総和と所定の閾値との比較結果に基づいて、第２の層の人工ニューロンの出力データを決定する大小比較器（例えば、実施形態における大小比較器２９）と、を備えることを特徴とする。
これにより、第１の層に入力された情報に基づくデータ処理を、高速に実行することができる。
【００３９】
請求項６に記載した発明は、請求項１から請求項５のいずれかに記載の発明において、前記回路ユニットは、第１の層の人工ニューロンの入力データを保持する第１の記憶部（例えば、実施形態におけるメモリ２１）と、前記シナプス結合の重み情報を保持する第２の記憶部（例えば、実施形態におけるメモリ２５）と、前記第１の層の人工ニューロンの出力データと前記重み情報との積を算出する乗算回路（例えば、実施形態におけるアンドゲート２６）と、前記乗算回路が算出した積のうち所定の第１の層の人工ニューロンに対応する積を定数倍した値を算出する演算回路（例えば、実施形態における１ビット左シフタ３６）と、前記定数倍した値を一方の入力信号としてその総和を算出する加算器（例えば、実施形態における加算器２７）と、前記総和と所定の閾値との比較結果に基づいて、第２の層の人工ニューロン群の出力データを決定する大小比較器（例えば、実施形態における大小比較器２９）と、を備えることを特徴とする。
これにより、通常のニューロンと通常のニューロンの２のべき乗倍の影響力を持つパワーニューロンとが混在するニューラルネットを実現するに際し、シナプス結合の重みの分解能を落とすことなく、シナプス結合の重み格納メモリに必要な容量を大幅に削減できる。
【００４０】
請求項７に記載した発明は、請求項５または請求項６のいずれかに記載の発明において、前記回路ユニットは、前記総和に所定の減衰量を乗算する乗算器（例えば、実施形態における乗算器５２）と、前記乗算された乗算結果を保持する第３の記憶部（例えば、実施形態におけるメモリ５３）とを更に備え、前記加算器は、前記第３の記憶部に保持した前記乗算結果を他方の入力信号とすることを特徴とする。
これにより、所定の時間までに加算器が出力した総和を所定の時定数で減衰させながら、当該加算器が総和計算を行う際の初期入力データとすることができる。
【００４１】
請求項８に記載した発明は、請求項１から請求項７のいずれかに記載の発明において、前記回路ユニットは、第１の層の人工ニューロンの入力データを保持する第１の記憶部（例えば、実施形態におけるメモリ２１）と、シナプス結合の重みの絶対値を保持する第２の記憶部（例えば、実施形態におけるメモリ２５）と、前記第１の層の人工ニューロンの出力データと前記重みの絶対値との積を算出する乗算回路（例えば、実施形態におけるアンドゲート２６）と、第１の層のニューロンが興奮性か抑制性かを表す前記シナプス結合の重みの符号情報を出力する符号情報出力回路（例えば、実施形態における符号格納器３３、大小比較器３４またはアンドゲート３４Ｂ）と、前記符号情報に基づいて、前記積の値または前記積の負の値を一方の入力信号としてその総和を算出する加算器（例えば、実施形態における加減算器３２）と、前記算出した総和と所定の閾値との比較結果に基づいて、第２の層の人工ニューロンの出力データを決定する大小比較器（例えば、実施形態における大小比較器２９）と、を備えることを特徴とする。
これにより、興奮性と抑制性のニューロンが混在するニューラルネットを実現するに際し、シナプス結合の符合情報を格納するメモリに必要な容量を大幅に削減できる。
【００４２】
請求項９に記載した発明は、請求項１から請求項８のいずれかに記載の発明において、第２の層の人工ニューロン毎に予め定められた所定の値を保持し、更に前記人工ニューロン毎に疑似乱数を算出し、前記第２の層の人工ニューロンに共通に定められた所定の閾値に前記所定の値と前記疑似乱数を加算する閾値算出回路（例えば、実施形態における閾値算出回路３８）を更に備えることを特徴とする。
これにより、前記人工ニューロンの閾値に、前記人工ニューロン毎に予め定められた所定の値を加算できるので、前記人工ニューロン毎に閾値を変更することができる。また、前記人工ニューロンの閾値に、前記人工ニューロン毎に算出した前記疑似乱数を加算できるので、前記人工ニューロン毎に閾値を疑似ランダムに変化させることができる。
【００４３】
請求項１０に記載した発明は、上記の課題を解決するために、複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層に存在する人工ニューロンとを結びつけるシナプス結合を有し、前記複数の層のうち第１の層の人工ニューロンの出力データと前記シナプス結合の重み情報との積を計算し、前記積を累積した結果に応じた出力を第２の層の人工ニューロンが出力するニューラルネットワークを実現する配線方式であって、二次元以上の仮想空間において当該仮想空間を任意の数の任意のポリトープで分割し、前記ポリトープ毎に回路ユニットを配置し、隣接するポリトープに配置された前記回路ユニット間で前記第１の層の出力データを含む信号を送信するよう配置された第１の配線と、第１の層に属する複数の人工ニューロンと第２の層に属する複数の人工ニューロンとを実装し、第１の層の人工ニューロンは、自身の出力データを時分割多重化し、該時分割多重化したデータを、同一回路ユニットの第２の層の人工ニューロンと、自身のポリトープに隣接するポリトープに配置された回路ユニットの第２の層の人工ニューロンとへ出力し、前記同一回路ユニットの第２の層の人工ニューロンは、自身のポリトープに隣接するポリトープに配置された回路ユニットの第１の層の人工ニューロンが出力した出力データを入力するよう配線された第２の配線と、を有することを特徴とする配線方式である。
これにより、ニューラルネットを構成する人工ニューロン間の配線を、ポリトープ毎に１本のデータ出力線を用いて隣接するポリトープと接続できるので、ポリトープを追加しても既存のポリトープ間の通信は影響を受けない。したがって、人工ニューロン間のデータ通信速度を一定に保ったまま、任意の数の人工ニューロン間を配線できる。
【発明の効果】
【００４４】
請求項１に記載した発明によれば、ニューロン間の配線を低速で少ない数の配線で行う電子回路を実現できる。
【００４５】
請求項２に記載した発明によれば、実質的にシナプス結合を無効にできるので、後からシナプス結合が無くなった部分の配線を物理的に無くす必要性がない。また、シナプス結合の重みが０の箇所は、必要に応じて新たにシナプス結合を発生することができる。
【００４６】
請求項３に記載した発明によれば、仮想二次元平面を正六角形で分割するので、各回路ユニットに含まれる各ニューロンは、仮想平面内でほぼ等距離内のニューロンとシナプス結合を作ることができる。
【００４７】
請求項４に記載した発明によれば、第２の層の人工ニューロンの出力データを第２の層または第１の層へフィードバックできるので、信号の帰還回路が在るニューラルネットワークを電子回路で実装できる。
【００４８】
請求項５に記載した発明によれば、第１の層が興奮性ニューロンである大規模ニューラルネットワークを電子回路で実装できる。
【００４９】
請求項６に記載した発明によれば、通常の影響力を次層のニューロンに与える通常ニューロンと、通常ニューロンよりも大きな影響力を次層のニューロンに与えるパワーニューロンが混在するニューラルネットを電子回路で実装するに際し、シナプス結合の重み格納メモリに必要な容量を大幅に削減することができる。
【００５０】
請求項７に記載した発明によれば、シナプス結合から受け取るデータの総和計算を行い、その結果ニューロンが発火しなかった場合に、前記総和計算結果を所定の時定数で減衰させて、次回の総和計算の初期値とするので、時間履歴を扱えるニューラルネットを電子回路で実装できる。
【００５１】
請求項８に記載した発明によれば、符号情報を格納するメモリ手段を使うことにより、ニューラルネットワークを実装する電子回路は、興奮性人工ニューロンと抑制性人工ニューロンを模擬することができる。また、シナプス結合毎ではなくニューロン毎に符号情報をメモリに格納することにより、メモリ容量を削減することができる。
【００５２】
請求項９に記載した発明によれば、第２の層の人工ニューロン毎に閾値の値を変更することができるので、第２の層の人工ニューロン毎に異なる閾値をもつニューラルネットワークを電子回路に実装できる。また、第２の層の人工ニューロン毎に閾値を疑似ランダムに変化させることができるので、ニューラルネットに学習させる際に、ローカルミニマムの状態に落ち込むのを防ぐことができる。
【００５３】
請求項１０に記載した発明によれば、ニューロン間のデータ転送速度を一定に保ったまま、任意の数のニューロン間を配線できる。
【図面の簡単な説明】
【００５４】
【図１】本発明の実施例１におけるニューラルネットワークの模式図と、Ｌ１層の出力を時分割多重化した信号を説明するための図である。
【図２】本発明の一実施形態による回路ユニット間の配線を説明するための図である。
【図３】本発明の一実施形態による仮想平面を分割して、回路ユニット間の配線を説明するための図である。
【図４】本発明の一実施形態による仮想空間を立方体で分割して、回路ユニット間の配線を説明するための図である。
【図５】本発明の一実施形態による回路ユニットをパルスニューラルネットワークで用いるニューロン群を模擬した回路図である。
【図６】パルス列変調用メモリが保持するデータ変換テーブルを説明するための図である。
【図７】図５に示す回路の動作を説明するためのタイミングチャートである。
【図８】本発明の一実施形態による回路ユニットを、情報が複数ビットで表されるニューラルネットワークで用いるニューロン群を模擬した回路図である。
【図９】シナプス結合が受け取った情報が、所定の時定数で減衰するニューロンを実現するための回路図である。
【図１０】本発明の一実施形態による回路ユニットを、パルスニューラルネットワークで用いるニューロン群を模擬した別の回路図である。
【図１１】本発明の第２の実施例である興奮性ニューロン群と抑制性ニューロン群の混在した回路ユニットの回路図である。
【図１２】本発明の第２の実施例の変形例である回路ユニットの回路図である。
【図１３】興奮性ニューロン群と抑制性ニューロン群の混在したニューラルネットを、パルスニューラルネット以外で模擬した回路ユニットの回路図である。
【図１４】本発明の第３の実施例である通常ニューロン群とパワーニューロン群が混在した回路ユニットの回路図である。
【図１５】本発明の第３の実施例の変形例である回路ユニットの回路図である。
【図１６】本発明の第４の実施例である、閾値にオフセットと揺らぎを持たせたニューロン群を模擬した回路ユニットの回路図である。
【図１７】８ビット疑似乱数発生器（ガロアＬＦＳＲ）の回路図である。
【図１８】本発明の実施例５におけるニューラルネットワークの模式図と、層間を流れる信号のフォーマットを説明するための図である。
【図１９】本発明の第５の実施例である、Ｌ２層のニューロン群の出力をＬ２層のニューロン群へフィードバックするニューラルネットの回路ユニットの回路図である。
【図２０】本発明の実施例５の変形例である、Ｌ３層のニューロン群の出力をＬ２層のニューロン群へフィードバックするニューラルネットの回路ユニットの回路図である。
【図２１】ニューラルネットの一部を表した模式図である。
【図２２】ＡＥＲにおいてニューロン間のデータ転送に使うデータフォーマットである。
【図２３】フィードバックループを持つ３層構造のニューラルネットを表した模式図である。
【発明を実施するための形態】
【００５５】
以下、本発明の実施形態について、図面を参照して詳細に説明する。まず、本発明のニューラルネットワークの構成について説明する。図１（ａ）は、ニューラルネットワークの構成を表した図である。ニューラルネットワークは、Ｌ１層およびＬ２層の２つの層から構成されている。
【００５６】
ニューラルネットワークは、第１の層（Ｌ１層）のニューロン２０ｉ（ｉは０から４，８６３の整数）と、第２の層（Ｌ２層）のニューロン２２ｊ（ｊは０から４，８６３の整数）と、Ｌ１層のニューロン２０ｉからＬ２層のニューロン２２ｊへの配線２１ｉと、配線２１ｉに対応したＬ２層のニューロン２２ｊのシナプス結合２３ｉ，ｊと、Ｌ２層のニューロン２２ｊの出力端子２４ｊとを有する。
【００５７】
シナプス結合には、Ｌ１層のニューロンの出力をＬ２層のニューロンへどの程度の割合で伝えるかというシナプス結合の重みｗｉ，ｊがある。不要な結合についてはシナプス結合の重みｗｉ，ｊを０にすることで、実質的にシナプス結合を無効にできる。
【００５８】
Ｌ１層のニューロン２０ｉを同数ずつ１９個のまとまり（以下、セルと称する）に分ける。そうすると、１つのセルあたりに存在するＬ１層のニューロン２０ｉは２５６個である。同様にして、Ｌ２層のニューロン２２ｊを１９個のセルに分ける。そうすると、１つのセルあたりに存在するＬ２層のニューロン２２ｊは２５６個である。従って、図１（ａ）のニューラルネットワークは、１９個のセルＣＮ（Ｎは０から１８までの整数）で分割される。
【００５９】
図１（ｂ）は、Ｌ１層の出力を時分割多重化した信号を説明するための図である。セルＣＮのＬ１層内の２５６個のニューロンの出力データは、図１（ｂ）に示すように時分割多重化して、信号ｘｉ，ｔとしてＰ０端子から出力する。
【００６０】
ｘｉ，ｔはＬ１層のｉ番目（ｉは０から２５５の整数）のニューロンの、ｔ番目（ｔは０以上の整数）ラウンドの出力である。すなわち、ｘ０，ｔはニューロン２００の出力、ｘ１，ｔはニューロン２０１の出力，…，ｘ２５５，ｔはニューロン２０２５５の出力である。ここで、ラウンドとは２５６個のニューロンのデータを１回処理する処理単位のことである。
【００６１】
図２は、本発明の一実施形態による回路ユニット間の配線を説明するための図である。脳内の神経細胞は基本的に、物理的に近くの神経細胞とシナプス結合を作っている。この特徴を参考にしてニューロン間の配線問題を解決する。
【００６２】
図２（ａ）は、仮想平面を複数のセルに分割した図である。図２（ａ）では、各セルは、正六角形の形状を有する。図２（ｂ）は、セル間の配線を示した図である。各セル内に１つの回路ユニットが存在する。
【００６３】
図１ではセルが１９個在るので、Ｌ１層とＬ２層にそれぞれ２５６×１９＝４，８６４個のニューロン２０ｉ、２２ｊが入っていることになる。各セルには１個の出力端子Ｐ０と、６個の入力端子Ｐ１〜Ｐ６とがある（図２（ｂ））。セルの配置と入力端子への配線とには一定の規則がある。
【００６４】
図２（ｂ）に示すように、或るセルの出力端子Ｐ０は隣接するセルとだけ接続する。また、各入力端子と、その入力端子に接続する信号を出力するセルの配置に一定の規則がある。ここでは、セルＣ０を例に説明する。図２（ｂ）に示すように、セルＣ０の入力端子Ｐ１は、セルＣ０の真上に隣接するセルＣ１の出力端子Ｐ０と接続する。
【００６５】
同様にして、セルＣ０の入力端子Ｐ２は、セルＣ０の右上に隣接するセルＣ２の出力端子Ｐ０と接続する。セルＣ０の入力端子Ｐ３は、セルＣ０の右下に隣接するセルＣ３の出力端子Ｐ０と接続する。セルＣ０の入力端子Ｐ４は、セルＣ０の真下に隣接するセルＣ４の出力端子Ｐ０と接続する。セルＣ０の入力端子Ｐ５は、セルＣ０の左下に隣接するセルＣ５の出力端子Ｐ０と接続する。セルＣ０の入力端子Ｐ６は、セルＣ０の左上に隣接するセルＣ６の出力端子Ｐ０と接続する。
【００６６】
すなわち、或る回路ユニットの入力端子Ｐ１が受けとる入力データは、真上に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。同様にして、或る回路ユニットの入力端子Ｐ２が受けとる入力データは、右上に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。或る回路ユニットの入力端子Ｐ３が受けとる入力データは、右下に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。或る回路ユニットの入力端子Ｐ４が受けとる入力データは、真下に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。或る回路ユニットの入力端子Ｐ５が受けとる入力データは、左下に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。或る回路ユニットの入力端子Ｐ６端子が受けとる入力データは、左上に隣接する回路ユニットの出力端子Ｐ０が出力したデータである。
【００６７】
あるセルのＬ２層では、当該セルのＬ１層から入力される信号と、隣接セルから入力端子Ｐ１〜Ｐ６に入力される６本の信号とを使って、当該セル及び隣接セル内のＬ１層の全てのニューロンとシナプス結合を作る。つまり、図２（ａ）のセルＣ０のＬ２層の各ニューロンは、セルＣ０及び隣接する６個のセルＣ１〜Ｃ６内のＬ１層の２５６×７＝１，７９２個のニューロンとシナプス結合を作る。
【００６８】
同様に、例えばセルＣ１内のＬ２層の各ニューロンは、セルＣ１及び隣接する６個のセルＣ８、Ｃ９、Ｃ２、Ｃ０、Ｃ６、Ｃ７内のＬ１層の全ニューロンとシナプス結合を作る。Ｌ２層の各ニューロンは、Ｌ１層の１，７９２個のニューロンとシナプス結合を作れるが、その中には不要なものも含まれる。
【００６９】
一般的に、Ｌ１層の各ニューロンは自セル及び仮想平面内で隣接するセル内のＬ２層のニューロンとのみ結合されているので、シナプス結合が不要な箇所は少なく、シナプス結合の重みＷを０にする箇所は少ないと考えられる。
【００７０】
図１の実施例ではＬ１層及びＬ２層に含まれるニューロン数を２５６としたが、本発明はこれに制限されるものではなく、一般的に２以上の任意の数でも適用できる。また、Ｌ１層とＬ２層のニューロン数が同数である必要は無い。本実施例では、図１（ａ）に示すように、ニューラルネットの階層数を２とする。なお、本発明はこれに制限されるものではなく、３層以上に拡張することも可能である。
【００７１】
本実施例ではニューロンを並べる仮想平面を正六角形で分割したが、本発明はこれに制限されるものではない。図３は、本発明の一実施形態による仮想平面を分割して、回路ユニット間の配線を説明するための図である。例えば、図３（ａ）に示すように正方形で分割することも可能であるし、正三角形で分割することも可能である。
【００７２】
また、同一の多角形を並べるのではなく、図３（ｂ）に示すように複数種類（３種類）の多角形で分割することも可能である。更に、仮想平面は仮想的なものなので多角形間にオーバーラップが生じたり、或いは多角形間に隙間が生じたりしても特に問題はない。信号が入力されない入力端子はグランド電位に接続する。
【００７３】
多角形の形状は１つのニューロンが形成できるシナプス結合の最大数に関係している。例えば正六角形の場合は隣接セルが６個なので、１個のセルのＬ１層に２５６個のニューロン含まれるとすると、Ｌ２層のニューロンでは最大２５６×７＝１，７９２個のシナプス結合を形成する。
【００７４】
一方、図３（ａ）の場合は隣接セルが８個になるので、最大２５６×９＝２，３０４個のシナプス結合を形成する。図３（ｂ）の場合は、最大シナプス結合数が異なる３種類の回路ユニットが混在していると解釈することもできるし、正五角形以外の隙間を無視することもできる。更に言えば、仮想平面を正多角形ではなく、任意形状の図形で分割しても、本発明を同様に適用できる。
【００７５】
本実施例の説明では、仮想二次元平面を考えて、そこにニューロンを分散配置するとして説明したが、本発明はこれに制限されるものではない。人間の脳を模倣する場合は二次元平面で十分だが、これを超える構造として三次元空間でも同様に本発明を適用できる。
【００７６】
図４は、本発明の一実施形態による仮想空間を立方体で分割して、回路ユニット間の配線を説明するための図である。例えば、図４に示すように、仮想三次元空間を立方体で分割し、任意の立方体のＬ１層のニューロンは、その立方体に隣接する立方体内のＬ２層のニューロンとシナプス結合を作る。
【００７７】
図４に示すように、１つのセル毎に出力端子は上部に１個、入力端子は各面に１個存在する。あるセルに隣接するセルは前後上下左右方向に面で隣接する合計６個のセルである。或るセルの前後上下左右の面に１個ずつ存在する入力端子は、隣接するセルの出力端子と接続する。
【００７８】
他の実施例としては、１つのセル毎に出力端子を上部に１個、入力端子は各面に１個（合計６個）、各辺に１個（合計１２個）、各角に１個（合計８個）すなわち合計２６個存在する。セルに隣接するセルは面、辺、角で隣接する合計２６個のセルである。あるセルに存在する２６個の入力端子は、それぞれ隣接する２６個のセルの出力端子と接続する。
【００７９】
また、三次元空間を立方体ではなく、一般的に任意の多面体で分割することもできる。このように、本発明は一般的に、二次元以上の任意の次数の空間を、任意のポリトープで分割する場合に適用可能である。なお、ポリトープとは、二次元の場合は多角形を表し、三次元の場合は多面体を表し、四次元以上の場合はポリトープを表す。一般的には、ポリトープは、二次元の多角形、三次元の多面体を一般次元へ一般化した図形である。但し、四次元以上の空間の場合に関しては、図示することができないので図を省略する。
【００８０】
＜回路ユニットの実施例１の説明＞
次に、本発明の回路ユニットの第１の実施例について説明する。図５は、本発明の一実施形態による回路ユニットをパルスニューラルネットワークで用いるニューロン群を模擬した回路図である。図５の回路ユニット１０全体が、図２（ａ）で示す１つのセルに存在する回路ユニット対応している。本実施例では各ニューロンは個別の電子回路ではなく、仮想の興奮性ニューロンとして層毎に２５６個のニューロンを纏めて実装している。
【００８１】
各層に２５６個のニューロンを実装する方法は、以下の通りである。Ｌ１層の２５６個のニューロンの入力データ（４［ｂｉｔ］データ）は、メモリ２１に格納されている。Ｌ２層のニューロンのシナプス結合の重み（８［ｂｉｔ］データ）は、メモリ２５に保存されている。一方、Ｌ２層の２５６個のニューロンの出力データは、０か１の１［ｂｉｔ］信号で表される。
【００８２】
回路ユニット１０は、Ｌ１層に属する８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、Ｌ２層に属する８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、メモリ２５と、アンドゲート２６と、加算器２７と、アンドゲート２８と、大小比較器２９と、ラッチ３０と、カウンター３１とを用いて構成されている。
【００８３】
８ビットカウンター２０は入力端子４１にカウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２１に出力する。８ビットカウンター２０は図示しないリセット信号によって予め０になっており、２５５までカウントアップすると、次のカウントアップタイミングで０に戻る。
【００８４】
メモリ２１はＬ１層のニューロン２０ｉの入力データを記憶している。Ｌ１層からは１ビット信号としてＬ２層へデータを送るので、４ビット幅のデータを１５ビットのビット列に変換し、１５ラウンドかけて転送する。ここで、値１は、ニューロンが発火することに相当する。１つの回路ユニットに含まれるＬ１層のニューロン２０ｉの個数は２５６個なので、メモリ２１は４［ｂｉｔ］×２５６＝１，０２４［ｂｉｔ］の容量を持つ。Ｌ１層のｉ番目のニューロンの入力データは、メモリ２１のｉ番地に格納されている。
【００８５】
メモリ２１は、８ビットカウンター２０のカウント値が示す番地から４ビットデータを読み出して、当該データをパルス列変調回路２２に送る。
【００８６】
パルス列変調回路２２は、メモリ２１が読みだした４ビットデータを１５ビットのパルス列に変換する。パルス列変調回路２２は、データ変換テーブルを格納しているデータ変換用メモリを備えている。図６は、データ変換テーブルを説明するための図である。図６において、左側の４ビットデータとは、パルス列変調回路２２が受け取るデータであり、データ変換用メモリへのアドレス信号になる。上部の１５ビットデータとは、データ変換用メモリが記憶しているデータである。
【００８７】
パルス列変調回路２２は、当該１５ビットのデータ列のうちＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｉｎｉｆｉｃａｎｔ  ｂｉｔ）から順に、自セルのメモリ２４Ａと２４Ｂに後述するラウンド毎に出力する。また、パルス列変調回路２２は、Ｐ０端子を介して、当該データを隣接するセルの入力端子Ｐ１からＰ６に出力する。その後、自セル及び隣接セルにおいて、メモリ２４Ａと２４Ｂを後述するラウンド毎に切り替えて、当該データを格納する。
【００８８】
パルス列変調回路２２は、ラウンド数が増えるごとに、送信するビット位置を１ずつ増やし、当該ビット位置のデータを出力する。
ラウンド１４で、前記１５ビットデータのうち最上位ビットのデータを自セルのメモリ２４Ａと隣接するセルのメモリ２４Ａに転送が終わると、メモリ２１に入っているデータのパルス列への変換と、その転送処理が終わる。
【００８９】
なお、本実施例では、最下位ビットから順にデータを出力したが、任意のビット位置から始めてもよい。また、出力するビット位置の順序も適当に決めてよい。Ｌ１層のニューロンの出力情報は、パルス列中に１が現れる頻度で表されるので、データが出力される順番は関係ないからである。
【００９０】
Ｌ２層に属する８ビットカウンター２３Ａの端子４２Ａと、８ビットカウンター２３Ｂの端子４２Ｂには、メモリ２４Ａまたはメモリ２４Ｂにデータを書き込む際は、８ビットカウンター２０の端子４１に入力されるカウントアップ信号と、同一周波数のカウントアップ信号が入力される。８ビットカウンター２３Ａと８ビットカウンター２３Ｂは、当該カウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２４Ａまたはメモリ２４Ｂに出力する。８ビットカウンター２３Ａと８ビットカウンター２３Ｂは図示しない８ビットカウンター２０のリセット信号と同一のリセット信号によって予め０になっており、２５５までカウントアップすると、次のカウントアップタイミングで０に戻る。
【００９１】
メモリ２４Ａとメモリ２４Ｂ（それぞれ７［ｂｉｔ］×２５６［個］の容量）は、７本の信号線で伝送されてきたデータを、ラウンド毎に交互に格納する。ここで、端子Ｐ０に入力されたデータは、自セルのパルス列変調回路２２が出力したデータである。また、端子Ｐ１からＰ６までに入力されたデータは、隣接セルのパルス列変調回路２２が出力したデータである。
【００９２】
８ビットカウンター２３Ａと８ビットカウンター２３Ｂは、メモリ２４Ａまたはメモリ２４Ｂからデータを読み出す際は、６４［ｋＨｚ］×２５６＝１６．３８４［ＭＨｚ］の周波数でカウントアップする。メモリ２４Ａとメモリ２４Ｂは、記憶している７ビット幅のデータを１６．３８４［ＭＨｚ］で読み出し、更に当該データを並直変換して７倍の１１４．７［ＭＨｚ］の１ビット信号ａ´ｉ，ｐ，ｑにする。ここで、ｉは０から２５５までの整数、ｐはビット位置を表す０から１４までの整数、ｑは入（出）力端子番号を表す０から６までの整数である。但し、１ラウンド中にｉとｑは変化するが、ｐは一定である。ｐはラウンドが変わる度に変化（本実施例では０から始まり１ずつ増加）する。当該１ビット信号ａ´ｉ，ｐ，ｑは１本の信号線により、アンドゲート２６に送られる。
【００９３】
カウンター３１は、端子４７に８ビットカウンター２０の端子４１に入力されるカウントアップ信号の７×２５６＝１，７９２倍（１１４．７［ＭＨｚ］）のカウントアップ信号が入力する毎に、カウント値を１ずつ増加する。カウンター３１のカウント値は、メモリ２５のアドレス入力Ａに入る。メモリ２５は、当該カウント値に応じた番地から、シナプス結合の重みｗ´ｉ，ｑ，ｊを読みだす。ｊは０から２５５までの整数でＬ２層のニューロン番号を表す。添え字はｉとｑが先に変化し、１，７９２個のｗ´ｉ，ｑ，ｊを読みだす度に、ｊが１ずつ増加する。
カウンター３１は、図示しない８ビットカウンター２０のリセット信号と同一のリセット信号によって予め０になっている。
【００９４】
メモリ２５の記憶容量は、８［ｂｉｔ］×２５６×７×２５６＝４５９［ＫＢ］である。Ｌ１層のｉ番目のニューロンからＬ２層のｊ番目のニューロンへのシナプス結合の重み
ｗ´ｉ，ｑ，ｊは、図示しない回路によって、メモリ２５の端子Ｉを通して予め格納されている。
【００９５】
メモリ２５は、後述するＣＬＫ１の周波数である１１４．７［ＭＨｚ］でシナプス結合の重みｗ´ｉ，ｑ，ｊを読みだし、アンドゲート２６に送る。
【００９６】
アンドゲート２６は、メモリ２４Ａまたはメモリ２４Ｂが読み出した１ビット信号ａ´ｉ，ｐ，ｑと、メモリ２５が読み出した８ビット信号ｗ´ｉ，ｑ，ｊとの乗算を行う。アンドゲート２６は、乗算結果ｙｉ，ｐ，ｑ，ｊ＝ａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊを加算器２７に送る。
【００９７】
加算器２７は、アンドゲート２６の出力データｙｉ，ｐ，ｑ，ｊを受け取り、Ｌ２層のｊ番目のニューロン毎に、ｉとｑに関する総和を計算する。総和計算を行う際に、加算器２７は、後述するＣＬＫ１の周波数である１１４．７［ＭＨｚ］で順次、ｙｉ，ｐ，ｑ，ｊをその前のＣＬＫ１までに計算された部分和に加算する。部分和は、アンドゲート２８が供給する。
加算器２７は、Ｌ２層のｊ番目のニューロンの、ｙｉ，ｐ，ｑ，ｊのｉとｑに関する総和Ｙｐ，ｊを計算し終えると、当該和Ｙｐ，ｊを大小比較器２９に送る。
【００９８】
アンドゲート２８は、Ｌ２層のｊ番目のニューロンの総和計算の最初に端子４４に制御信号０が入力されると、０を加算器２７の片側入力へ出力し、部分和が０の状態から総和計算が始まるように制御する。
【００９９】
大小比較器２９は、加算器２７で計算された前記総和Ｙｐ，ｊを受け取り、端子４３から図示しないレジスタまたは外部から供給される閾値データθよりも当該総和Ｙｐ，ｊが大きい場合に、１を出力する。大小比較器２９は、それ以外の場合は、０を出力する。
【０１００】
ラッチ３０は大小比較器２９が出力した信号を受け取り、端子４５から入力されたタイミング信号が０から１に変化したときに、当該出力信号を記憶する。ラッチ３０は記憶した当該信号を端子４６から出力し、当該出力信号は、Ｌ２層のニューロンの出力信号となる。
【０１０１】
なお、シナプス結合の重みには正負があるが、本発明の効果に影響しないので、本実施例では正のデータだけとして説明する。
【０１０２】
続いて、本実施例の動作を説明する。図５のニューラルネットでの処理が始まる前に、図示しない任意の方法によって、予めＬ１層のニューロンの入力データがメモリ２１に格納されており、シナプス結合の重みデータもメモリ２５に格納されている。また、カウンター２０とカウンター２３Ａとカウンター２３Ｂとカウンター３１は図示しないリセット信号によって予め０になっている。
【０１０３】
初めに、カウンター２０のカウント値が０なので、メモリ２１のアドレス入力が０になる。メモリ２１はアドレス入力が０なので、０番地から（Ｌ１層の０番目のニューロンの）４ビットデータを読み出し、パルス列変調回路２２に送る。
【０１０４】
パルス列変調回路２２は、メモリ２１から受け取った当該４ビットデータを１５ビットデータに変換する。パルス列変調回路２２は、当該１５ビットデータの適当なビット位置のデータを選択し、自セルのメモリ２４Ａまたは２４Ｂに出力する。同時に、Ｐ０端子を介して、当該選択したデータを隣接セルのメモリ２４Ａまたは２４Ｂに出力する。
【０１０５】
次にデータの処理方法について、説明する。加算器２７でａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊの総和を計算するに際して、データのビット位置ｐと、Ｌ２層のニューロンの番号であるｊを固定し、Ｌ１層の番号ｉと入力端子の番号ｑについての総和を計算する。そのために、Ｌ２層に於いて端子Ｐ０〜Ｐ６から入力されるデータを一旦、メモリ２４Ａ又はメモリ２４Ｂに格納し、最初のラウンド（ラウンド０）が終了した時点からＬ２層での処理に用いる。
ここで、ラウンドとは、Ｌ１層の０番から２５５番までのニューロンの各１つのデータ（１［ｂｉｔ］データ）をメモリ２４Ａまたは２４Ｂに格納する一連の処理の単位である。
【０１０６】
続いて、データフローを説明する。図７は、図５に示す回路の動作を説明するためのタイミングチャートである。図７（ａ）において、一番上段は、６４［ｋＨｚ］で動作するクロックＣＬＫ０であり、４［ｍｓ］間のラウンド内に、２５６回オン、オフする。
【０１０７】
２段目は、出力端子Ｐ０に出力される信号ｘｉ，ｋ（ｉは０から２５５までの整数であり、Ｌ１層のニューロンの番号を表す。ｋは整数であり、ラウンド番号を表す）であり、ラウンドｋにおける、ｉ番目のニューロンの出力信号を表している。例えば、ラウンド０のクロック番号２では、端子Ｐ０から出力される信号はｘ２，０である。
【０１０８】
３段目は、メモリ２４Ａに格納されたデータを表す。「Ｖａｌｉｄ」は、１，７９２個の有効な値がメモリ２４Ａ中に揃ったことを表している。つまり、ラウンドが偶数番目の１番目のＣＬＫ０から次のラウンドにおける１番目のＣＬＫ０がオンになるまでに、入（出）力端子Ｐ０〜Ｐ６から入力されて、メモリ２４Ａに書き込まれたデータである。
【０１０９】
４段目は、メモリ２４Ｂに格納されたデータを表す。「Ｖａｌｉｄ」は、１，７９２個の有効な値がメモリ２４Ｂ中に揃ったことを表している。つまり、ラウンドが奇数番目の１番目のＣＬＫ０から次のラウンドにおける１番目のＣＬＫ０がオンになるまでに、入（出）力端子Ｐ０〜Ｐ６から入力されて、メモリ２４Ｂに書き込まれたデータである。
【０１１０】
図７（ａ）のタイミングチャートにおいて、ラウンド０では、パルス列変調回路２２は、図６に示す１５ビットデータのＬＳＢ、すなわちビット０を出力するよう制御する。パルス列変調回路２２は、当該ＬＳＢを出力端子Ｐ０から隣接するセルに出力するとともに、当該パルス列変調回路２２が属するセルのメモリ２４Ａに出力する。
【０１１１】
なお、本実施例では、ラウンド０ではパルス列変調回路２２は、毎ＣＬＫ０の立ち上がりで、Ｌ１層の各ニューロンのデータを変換した１５ビットデータのＬＳＢを出力する。
【０１１２】
隣接セルのメモリ２４Ａでは、前記端子Ｐ０から出力されたデータを受信する。自セルのメモリ２４Ａでは、セルの配置が対称なので、入力端子Ｐ１〜Ｐ６から隣接セルのパルス列変調回路２２が出力したデータを受信する。ここで、自セルのパルス列変調回路２２の出力データと端子Ｐ１〜Ｐ６から入力されるデータとを合わせて７ビットのデータとし、メモリ２４Ａは、当該７ビットデータを０番地に格納する。
【０１１３】
図７（ｂ）のタイミングチャートは、ラウンド１においてＣＬＫ０の１番目のクロックの時間幅を拡大したものである。図７（ｂ）において、一番上段は、１１４．７［ＭＨｚ］で動作するクロックＣＬＫ１であり、１５．６［μｓ］（＝４［ｍｓ］÷２５６）中に、１，７９２回オン、オフする。
【０１１４】
２段目は、端子４２Ａに入力されるカウントアップ信号である。１５．６［μｓ］中に、２５６回オン、オフする。
３段目は、カウンター２３Ａが出力するデータＱ−２３Ａである。端子４２Ａに入力されるカウント信号が立ち上がる度に１ずつ増加する。
【０１１５】
４段目は、メモリ２４Ａまたはメモリ２４Ｂが出力する信号ａ´ｉ，ｐ，ｑである。
【０１１６】
５段目は、メモリ２５が出力するシナプス結合の重みｗ´ｉ，ｑ，ｊである。
【０１１７】
６段目は、加算器２７の出力である。Σｙｉ，ｑはｙｉ，ｑのｉとｑに関する和である。ここで、ｙｉ，ｑは、あるＣＬＫ１の直前のクロックで出力されたａ´ｉ，ｐ，ｑとｗ’ｉ，ｑ，ｊの積である。任意のＬ２層のニューロン２２ｊについての総和計算を行う間はｐとｊが一定なので、タイミングチャートを見やすくする為に、添え字ｐと添え字ｊの表示を省略している。
【０１１８】
加算器２７は、アンドゲート２６が出力したｙｉ，ｑを受け取り、直前のクロックまでに算出したｙｉ，ｑの部分和に、当該ｙｉ，ｑを加算する。従って、加算器２７は、ＣＬＫ１が１,７９２回オンすると、Ｌ２層のｊ番目のニューロンに入力される信号であるｙｉ，ｑのｉとｑに関する和Ｙｊを算出する。ここで、添え字ｐの表示を省略している。
７段目は、ラッチ３０が出力する端子４６の信号を表している。「Ｖａｌｉｄ」は、有効な値を表している。端子４６の信号は、Ｌ２層のｊ番目のニューロンの出力を表している。ラッチ３０は、Ｌ２層のｊ番目のニューロンの出力を端子４６に１５．６［μｓ］間出力する。
【０１１９】
端子４１に入力される信号と端子４２Ａに入力される信号が立ち上がり、８ビットカウンター２０と８ビットカウンター２３Ａのカウント値がｕ（ｕは整数）になると、メモリ２１は、ｕ番地のデータを読みだし、パルス列変調回路２２に出力する。
パルス列変調回路２２は、メモリ２１が出力した当該データを受け取り、１５ビットデータに変換する。
【０１２０】
そして、パルス列変調回路２２は、当該１５ビットデータのうち、ＬＳＢだけをメモリ２４Ａに出力するとともに、端子Ｐ０を介して隣接するセルのメモリ２４Ａへ出力する。そして、メモリ２４Ａは、端子Ｐ０から出力されるデータと端子Ｐ１〜Ｐ６から入力されるデータとを合わせた７ビットのデータを、ｕ番地に格納する。
このようにして、カウンター２０とカウンター２３Ａが２５５を超えて０に戻るまで、データの転送が行われるとラウンド０が終了する。
【０１２１】
Ｌ１層からＬ２層へ２５６個（２５６ビット）のデータを４［ｍｓ］で転送するので、一連の処理速度は６４［ｋＨｚ］である。次のラウンド１では、パルス列変調回路２２は１５ビットデータのうち、最下位ビットから１ビット上位のデータをメモリ２４Ｂに出力する。
【０１２２】
メモリ２４Ｂは、自セルのパルス列変調回路２２が出力したデータと隣接したセルのパルス列変調回路２２が出力したデータとを受け取り、当該データを格納する。
この様にして、ラウンドが切り替わるごとに、メモリ２４Ａと２４Ｂが交互に使われる。
【０１２３】
ラウンド１４で、パルス列変調回路２２が、前記１５ビットデータのうち最上位ビットのデータを自セルのメモリ２４Ａと隣接するセルのメモリ２４Ａに転送し終わると、メモリ２１に入っているデータの処理が終わる。更に、ニューラルネットでの処理を継続する場合は、図示していない外部回路により、メモリ２１に新たなデータを書き込むか、又はメモリ２１をダブルバッファ構造にして、ニューラルネットでの処理と並行して、外部回路により次のデータを書き込んでおく。ここまでで、Ｌ１層のニューロンの動作についての説明を終了する。
【０１２４】
次に、Ｌ２層のニューロンの動作について説明する。図７（ａ）において、ラウンド０が終わり、メモリ２４Ａに１，７９２（＝２５６［ニューロン］×７［セル］）個のａｉが揃うと、ラウンド１における１番目のＣＬＫ０の立ち上がりから、Ｌ２層のニューロンにおける処理が始まる。
【０１２５】
Ｌ２層側では１個のニューロン当たり、１，７９２回の積和演算をしなければならないので、図７（ｂ）に示すようにＬ１層側の１，７９２倍のスピード即ち、１１４．７［ＭＨｚ］で処理する。
【０１２６】
メモリ２４Ａは、６４［ｋＨｚ］の２５６倍の１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、当該７ビットデータを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ａ´ｉ，ｐ，ｑにする（図７（ｂ）４段目）。この動作とともに、メモリ２５は、対応する８ビットのシナプス結合の重みデータｗ´ｉ，ｑ，ｊを１１４．７［ＭＨｚ］で読み出し、アンドゲート２６に出力する（図７（ｂ）５段目）。
【０１２７】
アンドゲート２６は、入力されたａ´ｉ，ｐ，ｑとｗ´ｉ，ｑ，ｊが揃うと、当該入力同士を乗算して、８ビットのｙｉ，ｑ（＝ａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊ）を算出する。ここで、Ｌ２層の１個のニューロンについての総和計算の間はｐとｊは一定なので、これらの表記を省略している。アンドゲート２６は、算出したｙｉ，ｑを加算器２７に出力する。
【０１２８】
加算器２７は、順次ｙｉ，ｑを、前のＣＬＫ１までに算出された部分和に加算して、次のＣＬＫ１の立ち上がりでｉとｑに関するｙｉ，ｑの次の部分和を算出する（図７（ｂ）６段目）。総和計算の最初に、端子４４に０が入力され、加算器２７の片側に入力されるデータが０になることによって、部分和が初期化される。
【０１２９】
総和計算が終わると、大小比較器２９は、当該総和Ｙｊを閾値θと比較し、総和Ｙｊが閾値θよりも大きければ出力を１にし、小さければ出力を０にする。この出力は１１４．７［ＭＨｚ］のパルス状に出る。しかし、そのままの出力ではその後の処理の際に扱いづらい。
【０１３０】
そこで、ラッチ３０は、端子４５から入力されるタイミング信号によって、大小比較器２９が出力したデータを保持し、６４［Ｋｂｐｓ］の信号にして出力する。
例えば、Ｈｅｂｂの学習則によってメモリ２５の内容を変化させる場合は、ラッチ３０をメモリに置き換えて、Ｌ２層の出力データを当該メモリに記録する。
【０１３１】
なお、シナプス結合の重みｗｉ，ｊを格納するメモリ２５は、自セルのＬ１層のニューロンについての重み情報と、隣接セルのニューロンについての重み情報とを混在して格納している。これが不便な場合は、端子Ｐ０〜Ｐ６毎にメモリ２５を７個に分割することも可能である。そして、アンドゲート２６と、加算器２７と、アンドゲート２８をそれぞれ７回路分用意すれば、メモリ２５の内容が扱い易くなるだけでなく、加算器２７の計算速度を１／７の１６．４［ＭＨｚ］にできる。
【０１３２】
本実施例では、Ｌ１層からＬ２層へはパルス列によって情報が伝わる、所謂パルスニューラルネットについて説明したが、本発明はこれに制限されるものではなく、情報を複数ビットによって伝えるニューラルネットでも同様に適用できる。その適用例を図８に示す。
【０１３３】
図８は、本発明の一実施形態による回路ユニットを信号が複数ビットで表されるニューラルネットワークで用いるニューロン群を模擬した回路図である。図８の回路は、Ｌ１層からＬ２層へ伝える信号ａ´ｉ，ｑを１ビットから４ビットに変更した回路である。それに伴い、図８の回路では、図５のアンドゲート２６を乗算器５０に置換し、端子Ｐ０〜Ｐ６からメモリ２４Ａまたはメモリ２４Ｂへの配線を７本から２８本に増加させ、メモリ２４Ａまたはメモリ２４Ｂから乗算器５０への配線を１本から４本に増加させたものである。
【０１３４】
図８の回路のうち、図５の回路と異なる点についてのみ、以下で説明する。
本実施例ではパルス列変調回路が不要なので、メモリ２１から読み出したデータをそのまま、メモリ２４Ａ、メモリ２４Ｂ及び出力端子Ｐ０に出力する。
【０１３５】
メモリ２４Ａとメモリ２４Ｂは、２８本の信号線を介して、４ビット幅の端子Ｐ０と入力端子Ｐ１〜Ｐ６から入力されるデータとを合わせて２８ビット幅のデータとし、それらを順次格納する。従って、メモリ２４Ａとメモリ２４Ｂの記憶容量はそれぞれ４倍（２８［ｂｉｔ］×２５６）必要になる。
乗算器５０は、メモリ２４Ａまたはメモリ２４Ｂが読みだしたａ´ｉ，ｑと、メモリ２５が読みだしたシナプス結合の重みｗ´ｉ，ｑ，ｊを乗算し、加算器２７に出力する。このように、パルスニューラルネット以外でも、本発明は適用できる。
【０１３６】
上記例の場合、端子Ｐ０から出力される情報は６４［ｋｂｐｓ］という低速な４本の信号線で送られることになり、それを受け取るＰ１〜Ｐ６の入力端子はそれぞれ４ビット幅になる。一般的に、ＬＳＩの端子やＰＣＢ上の配線などを増設することはコストを高めるので、これでは無駄である。
【０１３７】
そこで、メモリ２１の出力部に並直変換器を入れてデータ伝送速度が４倍の１本の信号線にすれば、隣接セル間を１本の信号線で接続できる。並直変換された信号を受け取る側では、それをそのまま７ビットの信号として４倍の速度でメモリ２４Ａまたはメモリ２４Ｂに書き込むこともできるし、或いは直並変換し直して、２８ビット幅のデータとして書き込むこともできる。
【０１３８】
また、図５および図８の本発明の実施例では、Ｌ２層の仮想ニューロンは前のラウンドでの処理結果を無視するものとして説明したが、時間履歴を考慮した処理をしてもよい。
図９は、総和計算結果の時間履歴を考慮するニューロンを実現するための回路図である。例えば、図８の回路の乗算器５０から大小比較器２９までの回路を図９の回路で置換した回路によって、加算器２７が算出した総和が適当に減衰されて、次のラウンドでの総和計算の初期値になる。
【０１３９】
図９に示す総和計算結果の時間履歴を考慮する回路は、乗算器５０と、加算器２７と、大小比較器２９と、乗算器５２と、メモリ５３と、累積加算の最初にメモリ５３のデータを加える為のセレクタ５１とを用いて構成されている。乗算器５０と、大小比較器２９とは図８と同じであるため、説明を省略する。
【０１４０】
メモリ５３は、図示しない回路によって、初めに全てのアドレスに０が格納されている。メモリ５３は、Ｌ２層のｊ番目のニューロンの総和計算の最初に、そのｊ番地に格納されている前回のラウンドでの総和計算結果が減衰されて格納されたデータを読みだして、セレクタ５１のＡ入力へ送る。
セレクタ５１は、Ｌ２層のｊ番目のニューロンの総和計算の最初に、端子４８から入る信号が０になり、メモリ５３から受けとった当該データを、端子Ｙに出力する。その後は、端子４８から入る信号が１になり、加算器２７が出力する部分和を端子Ｙに出力する。
加算器２７は、Ｌ２層のｊ番目のニューロンの総和計算の最初にセレクタ５１を介して、メモリ５３に格納されている前回のラウンドでの総和計算結果が減衰されたデータを受け取り、別の入力から入るａ´０，０×ｗ´０，０，ｊとの部分和を計算する。その後セレクタ５１は加算器２７が算出する部分和を出力するので、順次ａ´ｉ，ｑ×ｗ´ｉ，ｑ，ｊを累積加算する
乗算器５２は、加算器２７が計算した総和に、端子４９から入力される図示しないレジスタ又は外部から供給される一定時間後の減衰率を与える信号を乗算し、当該乗算結果をメモリ５３に出力する。但し、大小比較器２９の出力が１になる場合は、即ちニューロンが発火したので、次回の総和計算を０から始める為に、乗算器５２は、図示しない回路によってその出力を０にし、当該０をメモリ５３へ送る。
【０１４１】
メモリ５３は、乗算器５２が出力した減衰された総和計算結果を受け取り、当該データをｊ番地に書き込む。
【０１４２】
セレクタ５１は、端子４８に入力された信号Ｓによって、メモリ５３から入力された信号Ａと加算器２７から入力された信号を切り替え、当該切り替えた信号を端子Ｙから加算器２７に出力する。
【０１４３】
図９に示す出力の時間履歴を考慮する回路を用いると、前のラウンドで計算された総和に減衰率を掛けたデータを加算器２７の片方の入力端子に入力させることができる。これによって、時間履歴を考慮した処理をさせることができる。
【０１４４】
図５の実施例では、Ｌ２層に於いて、端子Ｐ０〜Ｐ６から入力されたデータを一旦、メモリ２４Ａ又はメモリ２４Ｂに格納し、１回目のラウンドが終了した時点からＬ２層での処理に用いていた。これはＬ２層のｊ番目のニューロンに対するΣ（ａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊ）の計算を行うに際して、Ｌ２層のニューロンの番号であるｊを固定し、Ｌ１層の番号ｉと端子番号ｑについての総和を一度に計算する為である。ところで、ａ´ｉ，ｐ，ｑが７個（ａ´ｉ，ｐ，０〜ａ´ｉ，ｐ，６）到着する度にａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊを全てのｊについて計算し、それを前回のａ´ｉ―１，ｐ，ｑが到着した時点までに計算した、Ｌ２層のニューロン毎の部分和に加算して新たな部分和とし、当該部分和を一旦メモリに格納し、次の、ａ´ｉ＋１，ｐ，ｑが到着した時に前記メモリから当該部分和を読み出して新たな部分和の計算に用いる、という手順によって総和を計算することも可能である。
【０１４５】
その回路例を図１０に示す。図１０は、本発明の一実施形態による回路ユニットをパルスニューラルネットワークで用いるニューロン群を模擬した別の回路図である。図５の回路と比較して、メモリ２４Ａとメモリ２４Ｂの代わりに、端子Ｐ０〜Ｐ６とアンドゲート２６の間に並直変換回路５４が挿入されており、アンドゲート２８の代わりに、セレクタ５１とメモリ５５が挿入されている。図５の回路と異なる点についてのみ以下で説明する。
【０１４６】
並直変換回路５４は端子Ｐ０〜Ｐ６から入力された７ビットのデータを並直変換し、１ビット信号ａ´ｉ，ｐ，ｑとしてアンドゲート２６に出力する。
加算器２７は、アンドゲート２６が出力したデータとセレクタ５１が出力したデータを受け取り、当該２つのデータを加算し、当該加算したデータをセレクタ５１とメモリ５５と大小比較器２９に出力する。
【０１４７】
メモリ５５は、加算器２７が出力したｊ番目のニューロンの総和計算途中の部分和を受け取り、それを一時的にｊ番地に格納する。また、メモリ５５は、図示されていない回路から端子Ａに入力された信号に応じて、データを読み出してセレクタ５１に出力する。
セレクタ５１は、その入力端子４８が０の場合は０を加算器２７に送り、入力端子４８が１の場合はメモリ５５が出力したデータを加算器２７に送り、入力端子４８が２の場合は加算器２７が出力したデータを加算器２７に送る。
【０１４８】
続いて、図１０の回路の処理の流れを説明する。まず、Ｌ１層から０番目のニューロンのデータａ´０，０，ｑ（ｑは０〜６の整数）が７個到着すると、メモリ２５はＬ２層のニューロン番号０の、端子Ｐ０からの信号に対応するシナプス結合の重みデータｗ´０，０，０から端子Ｐ６からの信号に対応するシナプス結合の重みデータデータｗ´０，６，０を順に読み出す。
【０１４９】
次に、アンドゲート２６は、並直変換器５４が出力したａ´０，０，ｑとメモリ２５が出力した重みデータｗ´０，ｑ，０を乗算し、加算器２７に出力するという処理を、ｑが０から６まで繰り返す。
セレクタ５１の入力端子４８は、ｑが０のタイミング即ち、ａ´０，０，０×ｗ´０，０，０が加算器２７に入る時に０になり、総和計算の初期値を０にする。その後、ｑが１から６のタイミングでは２になり、加算器２７の出力ａ´０，０，ｑ×ｗ´０，ｑ，０の累算を行う。
加算器２７が、ａ´０，０，６×ｗ´０，６，０までの累算を行うと、その計算結果（部分和）を、メモリ５５が０番地に格納する。
以下同様にして、Ｌ２層のニューロン番号２５５まで同様の計算を行い、メモリ５５が２５５番地に部分和を格納するまで、処理を繰り返す。
【０１５０】
次に、Ｌ１層から１番目のニューロンのデータａ´１，０，ｑが７個到着すると、同様に計算するが、前回の処理でセレクタ５１の端子４８が０になったタイミングで、端子４８に入る信号は１になる。同時にメモリ５５が、格納している部分和を読み出してセレクタ５１に送る。そして、Ｌ１層の０番目のニューロンからの出力に応じて計算した部分和に、新たにＬ１層の１番目のニューロンからの出力に応じて計算したデータ（ａ´１，０，ｑ×ｗ´１，ｑ，ｊ）を加算し、その結果をメモリ５５のｊ番地に記憶する。
以下、同様の操作をＬ１層の２５５番目のニューロンまで繰り返す。
【０１５１】
このように処理することで、Ｌ１層から２５５番目のデータが到着した時点で、Ｌ２層の全ての処理が終了する。なお、並直変換回路５４は後段のアンドゲート２６や加算器２７などを７回路分用意すれば省略可能である。また、メモリ５５は図９の実施例に於けるメモリ５３と共用できる。また、Ｌ１層の２５５番目のデータまでの部分和は、即ち総和になる。当該総和が計算された時点で、コンパレータ２９は当該総和と閾値θを比較し、当該比較結果をラッチ３０に出力する。ラッチ３０は、当該比較結果を図示しない回路から端子４５に供給されるタイミング信号によってラッチし、当該ラッチした信号を端子４６から出力する。従って、Ｌ２層の出力となる端子４６の出力信号は、Ｌ１層の出力信号の２５６倍の速度でバースト的に出ることになる。ラッチ３０を１［ｂｉｔ］×２５６のメモリに置き換え、大小比較器２９のデータを前記メモリに一旦格納し、Ｌ１層の出力データと同じ速度で前記メモリからデータを読み出して出力することで、Ｌ１層と同じ速度でＬ２層から出力データを出力することもできる。
【０１５２】
以上、説明したように本発明の別の実施例では、Ｌ１層からのデータを一時的に格納するメモリ２４Ａと２４Ｂを省略できるが、計算途中のデータを格納するメモリ５５が必要になる。加算器２７がオーバーフローしない為には１６ビット以上必要であるから、メモリ５５の容量は１６［ｂｉｔ］×２５６になる。
【０１５３】
一方、メモリ２４Ａと２４Ｂの容量はそれぞれ７［ｂｉｔ］×２５６である。メモリ２４Ａと２４Ｂのワード数はＬ１層のニューロン数に比例し、メモリ５５のワード数はＬ２層のニューロン数に比例する。Ｌ１層とＬ２層のニューロン数に応じて、図５の実施例か図１０の実施例の、必要なメモリ量が少ない方を選ぶことができる。
【０１５４】
＜実施例１の効果＞
本実施例１の方法によれば、或るセルのＬ１層のニューロンが出力する出力データを、その出力信号が供給されるＬ２層の全てのニューロンが共有するので、データを受け取るＬ２層のニューロンを識別する必要がない。従って、出力データと一緒に、ＡＥＲ法で必要であった宛先アドレス情報を送る必要がなくなる。また、Ｌ１層とＬ２層間で同期してデータ転送を行い、Ｌ２層ではデータを受け取った時刻からＬ１層のニューロンの番号を識別するので、ＡＥＲ法でＰａｙｌｏａｄとして送っていた送信元アドレス情報も不要になる。Ｌ１層からＬ２層へ２５６［ｂｉｔ］のデータを４［ｍｓ］で送るとすると、データ転送速度は２５６［ｂｉｔ］÷４［ｍｓ］＝６４［Ｋｂｐｓ］と非常に低速であるので、実装が容易である。
【０１５５】
また、Ｌ１層に必要であった宛先アドレス情報を記憶する為のメモリも不要になる。図２（ｂ）から明らかなように、セル間の配線は隣接セルとの間のローカル配線であり、セルが配置されていない外周部に新たにセルを追加しても、既存の配線には全く影響を与えない。つまり、必要に応じてセルが追加可能であり、隣接するセル間でのみ配線するので、セル数を増加しても、既存のセル間に配線が増加することはない。ゆえに、セル間の通信速度及びセル内にある各ニューロンの演算速度は一定に保たれる。
【０１５６】
以上説明したように、本実施例の技術を使うと、１つのセル当たりＬ１層とＬ２層の間を１本の低速でローカルな信号線で接続することにより、Ｌ２層の１ニューロン当たり最大１，７９２個のシナプス結合を持つニューラルネットを容易に構成できる。１ニューロン当たりの最大シナプス結合数を増減したい場合には、セルの各層に存在するニューロン数を増減すれば良い。
【０１５７】
例えば、１個のセルのＬ１層とＬ２層にそれぞれ１，０２４個のニューロンを含めれば、Ｌ２層の１ニューロン当たり最大７，１６８（＝１、０２４×７）個のシナプス結合が作れる。但し、Ｌ１層とＬ２層を接続する信号に必要なデータ転送速度は、Ｌ１層に含まれるニューロンの数に比例するので４倍の２５６［Ｋｂｐｓ］になり、シナプス結合の重みを格納するメモリ２５はＬ１層に含まれるニューロンの数と、Ｌ２層に含まれるニューロンの数の両方に比例するので、１６倍の７［ＭＢ］（＝８［ｂｉｔ］×１，０２４×７×１，０２４）になる。
【０１５８】
また、メモリ２５や加算器２７等は１６倍で動作させなければならないが、既に述べたようにメモリを分割し、加算器２７等を複数個用意することで、回路の動作速度を低下させることができる。
【０１５９】
本実施例では一回のデータ転送時間（若しくは計算時間）を４［ｍｓ］としたが、本発明はこれに制限されるものではなく、任意の時間を設定できる。セル間を結ぶ信号線におけるデータ転送速度は低速であるので、当該速度を上げることにより、システム全体を更に高速化することが可能である。
【０１６０】
ニューロンを仮想的な平面に並べ、その平面を正六角形（セル）で分割し、各セルに入るニューロンの個数を、例えば２５６（入力層Ｌ１）＋２５６（中間層Ｌ２）とする。或るセルのＬ１層の出力は、そのセル及びそのセルに隣接する６個のセルのＬ２層のニューロンとだけ、且つＬ２層の全てのニューロンとシナプス結合を作る。
【０１６１】
このように決めることで、Ｌ１層の１個のニューロンからは１ビットのデータをＬ２層に転送すればよい。Ｌ２層では７［ｂｉｔ］×２５６のメモリを２個用意し、Ｌ１層のニューロンからのデータ出力に同期して、このメモリに格納する。このアーキテクチャにより、従来のＡＥＲ技術で必要であったアドレス情報を送る必要がなくなり、Ｌ１層の２５６個のニューロンから２５６ビットのデータを伝送するだけでよい。
【０１６２】
１億ニューロンを持つニューラルネットを構築するには、例えば、Ｌ１層（５１２個）、Ｌ２層（５１２個）、Ｌ３層（５１２個）、Ｌ４（６４個）の４階層のニューラルネットを用意し、Ｌ１層はニューロン数に数えないとすると、１セル当たり１，０８８ニューロンとなるので、約９万個のセルを連結すればよい。この場合、セル間を接続する信号線はＬ１層、Ｌ２層、Ｌ３層からの出力データを時分割多重化し、１，５３６（＝５１２［ｂｉｔ］×３）ビットのデータを転送する。
【０１６３】
図５の実施例から明らかなように、Ｌ２層の出力信号はＬ１層の出力信号と同じデータレートなので、時分割多重化は容易である。これを４［ｍｓ］で行う場合は、データ転送速度を３８４［Ｋｂｐｓ］にする。つまり、この場合も１本の低速な信号線だけでセル間を接続でき、仮想ニューロン回路自体も少数の加算器とメモリで実現できるので、実時間で並列動作する大規模ニューラルネットを実現することができる。
【０１６４】
本発明の技術ではシナプス結合の重みデータを格納するメモリの、数％から数１０％に０を格納することになりメモリを多用することになるが、メモリを多用する代わりに演算部やデータ通信部を低速にすることができる。これまで、半導体のプロセス技術の進歩により、トランジスタの幅が一定ならば、ゲート長が短くなるのにほぼ反比例して、電流駆動能力が上昇してきた。そして、トランジスタの電流駆動能力の上昇にほぼ比例して、トランジスタのスイッチング速度が上がり、その結果、回路の動作速度も向上した。
【０１６５】
しかし、最近ではトランジスタの電流駆動能力に比べて配線容量が相対的に大きくなり、プロセス技術が進歩しても回路の動作速度は向上し難くなっている。一方、トランジスタのサイズはゲート長の２乗にほぼ反比例するので、今後も使用できるメモリ量の増大が期待できる。従って、本発明のアーキテクチャは、これからの半導体の進歩による恩恵を受けられると考える。
【０１６６】
なお、特許第３５８６４６４号には、或るセルから近接するセルと同心円状に接続する方法が記されているが、この特許でいうセルは１個のニューロンに相当しているので、本発明で説明したセルとは全く異なる。この特許ではニューロン間を直接接続しているので、大規模なニューラルネットを構築することは困難である。
【０１６７】
＜回路ユニットの実施例２の課題＞
次に、本発明の回路ユニットの第２の実施例について、興奮性ニューロン群と抑制性ニューロン群の混在を実現する回路ユニット（セル）について説明する。図５に示す実施例１の回路では、メモリ２５に格納されているシナプス結合の重みの値ｗ´ｉ，ｑ，ｊは、アンドゲート２６によってＬ１層からの信号ａ´ｉ，ｐ，ｑと乗算されてａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊとなり加算器２７に入力される。この従来技術のままで抑制性ニューロンを実現するには、重みデータメモリ２５に格納されている値ｗ´ｉ，ｑ，ｊに符号情報を持たせる方法が一般的である。
【０１６８】
しかし、その方法ではメモリ２５に必要な記憶容量が増大し、製造コストが上がってしまうという欠点がある。例えばメモリ２５のビット幅を８とし、興奮性ニューロンとのシナプス結合の重みを表す正又は０の数に限定すれば、この８ビットデータを０〜２５５と解釈できるのでデータの分解能は１／２５５になる。
【０１６９】
一方、重み情報が正負の値を持ち、負の数が２の補数で表されるとすると、この８ビットデータは−１２８〜１２７と解釈される。従って、興奮性ニューロンとのシナプス結合の重みを表す正又は０の値は０〜１２７となり、分解能が半分になってしまう。メモリ２５のビット幅を８のままとすれば製造コストは増大しないが、シナプス結合の重みの分解能が半分になり、ニューラルネットとしての計算精度や記憶精度が低下してしまう。
【０１７０】
そこで、シナプス結合の重みデータの分解能を１／２５５に維持しようとすると、メモリ２５のビット幅を９にしなければならず、９［ｂｉｔ］×２５６×７×２５６のメモリが必要になり、必要な記憶容量が４５８，７５２ビット分（１２．５％分）増加してしまう。
【０１７１】
本実施例２の回路は、ニューラルネットの計算精度や記憶精度の低下を抑えるとともに、製造コストの増加も極力抑えながら、抑制性ニューロンやパワーニューロンを実現する方法を提供するものである。ここでパワーニューロンとは、通常のニューロンに比べて２倍、４倍と大きな影響を、次段のニューロンに与えるニューロンのことである。
【０１７２】
或るニューロンが興奮性であるか抑制性であるかは、ニューラルネットの構造を決定した時点で決まる。また、或るニューロンがパワーニューロンであるか通常のニューロンであるかは、ニューラルネットの構造を決定した時点で決めることとする。これらはニューラルネットの学習や自己組織化によって変化することはない。この事実を利用して、抑制性ニューロンやパワーニューロンを実現する際に必要なトランジスタ数の増加を抑えることとする。
【０１７３】
＜回路ユニットの実施例２の説明＞
図１１は、本発明の第２の実施例である興奮性ニューロン群と抑制性ニューロン群の混在した回路ユニットの回路図である。図５の興奮性ニューロンだけを模擬した回路と同じ個所には同じ番号が振られている。図５の回路と比較すると、図１１の回路は、図５の回路に８ビットカウンター２３Ｃと符号格納器３３とが追加され、図５の加算器２７が加減算器３２に置き換えられている。
【０１７４】
符号格納器３３は、Ｌ１層の各ニューロンに対応した符号情報（１［ｂｉｔ］×２５６のデータ）を記憶する。Ｌ１層の或る抑制性ニューロンがＬ２層のニューロン上に作るシナプス結合は、全て抑制性のシナプス結合になる。Ｌ１層の１個の抑制性ニューロンが、Ｌ２層の１，７９２個のニューロンと抑制性シナプス結合を作るとし、その重みデータ毎に符合ビットを持たせると、１，７９２ビットのデータが必要になる。一方、Ｌ１層の当該ニューロンが抑制性であるという情報を記憶すれば、１ニューロン当り１ビット記憶すれば良い。符号格納器３３は、カウンター２３Ｃが出力したデータに基づいて、そのデータに対応するアドレスにあるニューロンの符号情報を加減算器３２へ出力する。
加減算器３２は、符号格納器３３が出力したニューロンの符号情報を受け取る。当該符号情報が０の場合、Ｌ１層のニューロンを興奮性ニューロンとみなして、加算器として動作し、アンドゲート２６から受け取ったデータとアンドゲート２８から受け取ったデータを加算し、加算後のデータをアンドゲート２８と大小比較器２９へ出力する。
【０１７５】
当該符号情報が１の場合、抑制性ニューロンとみなして、減算器として処理し、アンドゲート２８から受け取ったデータから、アンドゲート２６から受け取ったデータを減算し、減算後の値をアンドゲート２８と大小比較器２９へ出力する。
【０１７６】
続いて、図１１の回路の動作について説明する。Ｌ１層のニューロンは仮想的に２５６個のニューロン分が纏めて実現されており、ニューロン番号毎に興奮性か抑制性かが決まっている。そこで、ニューラルネットでの処理が始まる前に、ニューロン番号ｉに応じて興奮性の場合はｓｉを０に、抑制性の場合はｓｉを１に、図示しない任意の方法によって予め符号格納器３３に書き込んでおく。全てのセルのニューロンは同一構造をとるとしているので、隣接セルのＬ１層の情報を別途持つ必要はない。
【０１７７】
Ｌ１層のニューロンの入力データがメモリ２１に、シナプス結合の重みデータがメモリ２５に、それぞれ図示しない任意の方法によって予め格納されている。カウンター２０とカウンター２３Ａとカウンター２３Ｂとカウンター２３Ｃとは、図示しないリセット信号によって予め０になっている。なお、メモリ２５に格納されているのは重みデータの絶対値｜ｗ´ｉ，ｑ，ｊ｜である。
【０１７８】
計算が始まると、まずカウンター２０がカウント値０をメモリ２１に出力する。次に、メモリ２１は、カウンター２０から０のデータを受け取ると、０番地から４ビットデータを読み出してパルス列変調回路２２へ出力する。
【０１７９】
パルス列変調回路２２は、メモリ２１から４ビットデータを受け取り、当該４ビットデータを１５ビットデータに変換し、当該１５ビットデータをラウンド毎にＬＳＢから順次、出力端子Ｐ０経由で、メモリ２４Ａまたはメモリ２４Ｂに出力する。
【０１８０】
最初のラウンド０では、図６に示すデータのＬＳＢだけを転送する。このデータは出力端子Ｐ０から外部に出力されると同時に、メモリ２４Ａに送られる。端子Ｐ０から出たデータは隣接セルで受信される。回路は対称なので、自分自身のセルは、入力端子Ｐ１〜Ｐ６で隣接セルが出力するデータを受信する。
【０１８１】
そこで、パルス列変調回路２２の出力データと端子Ｐ１〜Ｐ６からのデータとを束ねて７ビットのデータとし、当該データをメモリ２４Ａの０番地に格納する。その後、端子４１に入力される信号と端子４２Ａに入力される信号がアクティブになりカウンター２０とカウンター２３Ａが１になると、メモリ２１は１番地のデータを読み出し、パルス列変調回路２２に出力する。
【０１８２】
パルス列変調回路２２は、メモリ２１から１番地のデータを受け取り、当該データを１５ビットデータに変換する。そして、パルス列変調回路２２は、当該１５ビットデータのうち、ＬＳＢをメモリ２４Ａへ出力する。また、その動作とともに、出力端子Ｐ０を介して、隣接するセルのメモリ２４Ａへ当該ＬＳＢを出力する。
【０１８３】
そして、メモリ２４Ａは、パルス列変調回路２２からのデータと端子Ｐ１〜Ｐ６からのデータとを束ねて７ビットのデータとして、メモリ２４Ａの１番地に格納する。このようにして、カウンター２０とカウンター２３Ａのカウント値が２５５を超えて０に戻るまでデータの転送が行われると、ラウンド０が終了する。
【０１８４】
Ｌ１層からＬ２層へ２５６個（２５６［ｂｉｔ］）のデータを４［ｍｓ］で転送するので、一連の処理速度は６４［ｋＨｚ］である。次のラウンド１では、パルス列変調回路２２はビット１のデータを送出し、転送されたデータはメモリ２４Ｂに書き込まれる。この様にして、メモリ２４Ａとメモリ２４Ｂを交互に使いながら処理を行う。ラウンド１４でビット１４の転送が終わると、メモリ２１に入っているデータの処理が終わる。
【０１８５】
更に、ニューラルネットでの処理を継続する場合は、図示していない外部回路により、メモリ２１に新たなデータを書き込むか、又はメモリ２１をダブルバッファ構造にして、ニューラルネットでの処理と並行して、外部回路が次のデータを書き込んでおく。ここまでで、Ｌ１層のニューロンの動作についての説明を終了する。
【０１８６】
次に、Ｌ２層のニューロンの動作について説明する。ラウンド０が終わりメモリ２４Ａに１，７９２個のａ´ｉ，ｐ，ｑが揃うとＬ２層で計算が始まる。Ｌ２層側では１個のニューロン当たり１，７９２回の積和演算をしなければならないので、Ｌ１層側の１，７９２倍の速度即ち、１１４．７［ＭＨｚ］で処理する。Ｌ２層のｊ番目の仮想ニューロンではΣ（ａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊ）を計算することとする。ここでΣはｉとｑについての総和を表している。
【０１８７】
メモリ２４Ａは、６４［ｋＨｚ］の２５６倍の１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ａ´ｉ，ｐ，ｑにし、当該信号ａ´ｉ，ｐ，ｑをアンドゲート２６に出力する。またそれと同じタイミングでメモリ２５は、シナプス結合の８ビットの重みデータ｜ｗ´ｉ，ｑ，ｊ｜を１１４．７［ＭＨｚ］で読み出し、アンドゲート２６に出力する。
【０１８８】
アンドゲート２６は、メモリ２４Ａが出力した信号ａ´ｉ，ｐ，ｑとメモリ２５が出力した重みデータ｜ｗ´ｉ，ｑ，ｊ｜を受け取り、これらを乗算して、８ビットの０又は｜ｗ´ｉ，ｑ，ｊ｜し、加減算器３２へ出力する。
更に、符号格納器３３は、１６．３８４［ＭＨｚ］で１ビットの符号データ符号ｓｉを読み出し、それを加減算器３２へ出力する。ｓｉはｉが同一でｑが０から６の７個のデータ｜ｗ´ｉ，ｑ，ｊ｜に対して共通に使う。
【０１８９】
符号ｓｉが０の場合は、加減算器３２は、それまでに計算された部分和（アンドゲート２８の出力）に当該ａ´ｉ，ｐ，ｑ×｜ｗ´ｉ，ｑ，ｊ｜を足す。一方、符号ｓｉが１の場合は、それまで計算された部分和から当該ａ´ｉ，ｐ，ｑ×｜ｗ´ｉ，ｑ，ｊ｜を引く。このようにして、ｊを固定して、ｉとｑに対するａ´ｉ，ｐ，ｑ×ｗ´ｉ，ｑ，ｊの和が計算される。
【０１９０】
総和計算の最初にはアンドゲート２８の端子４４に入力される信号が０になり、加減算器３２の片側入力端子に入力されるデータが０になる。ｉとｑについての１，７９２回の総和計算が終わると、加減算器３２は、当該総和を大小比較器２９に出力する。
【０１９１】
大小比較器２９は、加減算器３２が出力した総和を受け取り、当該総和を閾値θと比較し、総和が閾値θよりも大きければ出力を１にし、小さければ出力を０にする。この出力は１１４．７［ＭＨｚ］の周波数で、２５６クロック毎に１クロック幅のパルス状に出るので、そのままでは使い難い。そこで、ラッチ３０の端子４５に６４［ｋＨｚ］立ち上がりパルスを印加し、ラッチ３０に大小比較器２９が出力した当該比較結果を保持し、６４［Ｋｂｐｓ］の信号にして端子４６に出力する。
【０１９２】
以上説明したように、本発明の第２の実施例を用いると、シナプス結合の重みデータを格納するメモリ２５の容量を増やさずに、興奮性ニューロンと抑制性ニューロンが混在するニューラルネットを実現できる。但し、Ｌ１層のニューロンの符号情報を格納するメモリ３３が新たに必要になる。
【０１９３】
メモリ３３は２５６（＝１［ｂｉｔ］×２５６）ビットなので、シナプス結合の重みを符号情報まで含めてメモリ２５に格納する場合に比べて、増加するメモリの容量は１／１，７９２である。また、加算器２７を加減算器３２にする必要があるが、ここに必要なのは８ビット分のイクシクルーシブＯＲ回路であり、増加するトランジスタ数はニューラルネット全体に必要なトランジスタ数に比べて極めて僅かである。
【０１９４】
図１２（ａ）に本発明の第２の実施例の変形例１である回路ユニットの回路図を示す。図１１の回路で示した第２の実施例と同じ素子には、同じ番号が振ってある。図１１の回路と比較すると、図１２の回路は、符号格納器３３の代わりに、大小比較器３４を挿入したものである。
【０１９５】
大小比較器３４は、カウンター２３Ｃが出力するＬ１層のニューロン番号ｉ（８ビット）を受け取り、図示しないレジスタ又は外部から供給される値α（８ビット）を端子４７ｂで受けとる。大小比較器３４は、ｉとαを比較し、ｉがαよりも小さい場合に、出力ｓを１にして加減算器３２に出力し、ｉがαより大きいか等しい場合に、出力ｓを０にして加減算器３２に出力する。これによって、ニューロン番号ｉがαよりも小さい場合に、当該ニューロン番号を付されたニューロンは抑制性ニューロンとなる。
【０１９６】
本発明の第２の実施例では、Ｌ１層の任意の番号のニューロンを抑制性ニューロンに設定できる。しかし、ニューロンの番号は仮想的なものなので、それ自体に意味はない。そこで、Ｌ１層のニューロンの番号がαより小さいものは全て抑制性のニューロンであるとしても、ニューラルネットの動作として不都合を生じない。大小比較器３４の出力信号ｓは、カウンター２３Ｃの値即ちＬ１層のニューロンの番号がαより小さい場合に１になり、加減算器３２で減算が行われる。回路の詳細な動作説明は省略する。
【０１９７】
図１２（ｂ）には、本発明の第２の実施例の変形例２である回路ユニットの回路の一部を示す。図１２（ｂ）の回路は、図１２（ａ）の大小比較器３４の代わりに、アンドゲート３４Ｂを挿入することとする。この例では、アンドゲート３４Ｂは、カウンター２３Ｃが出力する８ビットデータの最下位ビット（第０ビット）と最下位から１つ左に行ったビット（第１ビット）とを受け取り、アンドを取って、その結果を符号ｓとして、加減算器３２に出力する。従って、番号が３、７、１１、、、と、飛び飛びの番号のニューロンが抑制性になる。
【０１９８】
なお、このアンドゲート３４Ｂは必要に応じて、３入力や４入力にもできるし、アンドを取るビット位置を変更することもできる。或いは、Ｌ１層の半数を抑制性にする場合はアンドゲート３４Ｂを省略し、カウンター２３の出力の任意の１ビットを符号ｓとすることもできる。
カウンター２３Ｃの使われないビットは実装する必要がない。具体的には、図１２（ｂ）に示す例では、８ビットカウンター２３Ｃのビット２〜ビット７は使われないので、これらを実装する必要はなく、２ビットカウンターとして実装すれば十分である。
【０１９９】
本発明の実施例２、実施例２の変形例１および実施例２の変形例２では、Ｌ１層からＬ２層へはパルス列によって情報が伝わる、所謂パルスニューラルネットについて説明したが、本発明はこれに制限されるものではなく、情報を複数ビットによって伝えるニューラルネットでも同様に適用できる。
【０２００】
パルスニューラルネット以外で、抑制性ニューロン群を実現する回路例を図１３に示す。Ｌ１層の各ニューロンの４ビットデータは４［ｂｉｔ］×２５６のメモリ２１に蓄えられており、順次メモリ２１から読みだされて４ビット幅の出力端子Ｐ０から出力される。その動作とともに、４ビット幅の入力端子Ｐ１〜Ｐ６から入力されるデータと合わせて２８ビット幅のデータとし、２８［ｂｉｔ］×２５６のメモリ２４Ａまたはメモリ２４Ｂに格納する。
【０２０１】
メモリ２４Ａまたはメモリ２４Ｂから読みだしたａ´ｉ，ｑと、シナプス結合の重みメモリ２５から読みだした｜ｗ´ｉ，ｑ，ｊ｜を乗算器５０によって乗算し、当該乗算結果を加減算器３２によって累積する。このように、パルスニューラルネット以外でも本発明は適用できる。
【０２０２】
＜回路ユニットの実施例２の効果＞
従来技術では、興奮性か抑制性かに拘わらず、ニューロンからの信号を受け取るシナプス結合の重み情報は、全てシナプス結合の重みデータを記憶するメモリに格納されていた。１個のニューロンの出力は１，０００〜１０，０００個のシナプス結合を作り、これらのシナプス結合の重みは基本的に異なるので、１，０００〜１０，０００個の重み情報を格納するメモリが必要である。
【０２０３】
ところが、興奮性ニューロンから出る軸索は全て興奮性のシナプス結合を作り、抑制性ニューロンから出る軸索は全て抑制性のシナプス結合を作るので、１，０００〜１０，０００個の重み情報の符号は全て同じである。従って、シナプス結合の重み情報を「符号」と「絶対値」に分けることで、符号情報を格納するメモリの容量を大幅に削減できる。本発明の第２の実施例では、この考えの下に符号情報を格納するメモリの容量を１／１，７９２に削減している。
【０２０４】
本発明では、ニューロンを仮想ニューロンとして実装している。従って、個々のニューロンの番号に物理的な意味はない。従って、ニューラルネット全体の何割が抑制性ニューロンであるかという情報だけを使って、シナプス結合の符号情報を決定できる。本発明の実施例２の変形例１、実施例２の変形例２では、この考えの下に符号情報を格納するメモリそのものを省略することができる。これによって、回路面積を小さくすることができる。
【０２０５】
＜回路ユニットの実施例３固有の課題＞
次に、Ｌ１層の特定ニューロン（パワーニューロンと呼ぶ）が通常のニューロンに比べて、例えば２倍の影響力をＬ２層のニューロンに与える場合について考える。影響力を別の言い方をすれば、Ｌ１層の通常のニューロンがＬ２層のニューロンと作るシナプス結合の重みは０〜２５５であるが、  Ｌ１層のパワーニューロンがＬ２層のニューロンと作るシナプス結合の重みは、０から５１１まで取り得るということである。これを単純に実現する方法は、シナプス結合の重みデータメモリ２５のビット幅を９にし、通常のニューロンが作るシナプス結合では、その重みの最大値を２５５に制限すれば良い。
【０２０６】
しかし、それでは抑制性ニューロンの場合と同様に、必要なメモリ容量が増大してニューラルネットの製造コストが増大してしまう。パワーニューロンの個数は全体の１０％程度で十分であるので、この為にシナプス結合の重みメモリ全体が肥大化するのは不都合である。逆に、メモリ２５のビット幅を８ビットに保ち、パワーニューロンについてのシナプス結合の重みを０〜２５５にすることもできるが、そうすると通常のニューロンの重みデータが０〜１２７となり、ニューラルネットとしての計算精度や記憶精度が低下してしまう。
【０２０７】
＜回路ユニットの実施例３の説明＞
図１４は、本発明の第３の実施例であるパワーニューロン群を模擬した回路ユニットの回路図である。図５と同じ素子には同じ番号が振られている。図５の通常ニューロン群だけを模擬した回路に比べ、図１４の回路では、８ビットカウンター２３Ｃとメモリ３５と、１ビット左シフタ３６が追加されている。第３の実施例では、入力信号を定数倍した値を算出する演算回路として、１ビット左シフタ３６を用いる。なお、その演算回路は、１ビット左シフタ３６に限らず、入力信号を定数倍して出力する回路であればよい。
【０２０８】
カウンター２３Ｃは、Ｌ１層のニューロン番号ｉ（８ビットデータ）を生成し、メモリ３５に出力する。
メモリ３５は、Ｌ１層のニューロン毎のシフト情報（１［ｂｉｔ］×２５６）を記憶する。また、メモリ３５は、カウンター２３Ｃが出力するＬ１層のニューロン番号ｉを受け取り、ｉ番地からシフトデータｓｆｔｉ（１ビットデータ）を読み出して、１ビット左シフタ３６に出力する。
【０２０９】
１ビット左シフタ３６は、アンドゲート２６が出力するデータと、メモリ３５が出力するシフトデータｓｆｔｉとを受け取る。１ビット左シフタ３６は、前記シフトデータが０ならば、アンドゲート２６が出力するデータをそのまま加算器２７に出力する。また、１ビット左シフタ３６は、前記シフトデータがならば、アンドゲート２６が出力するデータを１ビット左にシフトして、当該シフトしたデータを加算器２７に出力する。
【０２１０】
Ｌ２層での計算が始まると、メモリ２４Ａは１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ａ’ｉ，ｐ，ｑにし、アンドゲート２６へ出力する。その動作とともに、シナプス結合の重みメモリ２５は、対応する８ビットの重みデータｗ’ｉ，ｑ，ｊを１１４．７［ＭＨｚ］で読み出し、アンドゲート２６へ出力する。アンドゲート２６は、当該１ビット信号ａ’ｉ，ｐ，ｑと当該８ビットの重みデータｗ’ｉ，ｑ，ｊを乗算して８ビットの０又はｗ’ｉ，ｑ，ｊにし、当該８ビットデータを左シフタ３６に出力する。
【０２１１】
更に、メモリ３５から１６．３８４［ＭＨｚ］で１ビットのシフトデータｓｆｔｉを読み出し、左シフタ３６に出力する。左シフタ３６に入ったアンドゲート２６の出力データは、シフトデータｓｆｔｉが１であると１ビット左シフト、即ち２倍にされ、シフトデータｓｆｔｉが０であるとそのままで、加算器２７に出力される。このようにして、通常のニューロンの２倍の影響力をもつニューロンを実現できる。なお、各セルの回路は同一なので、シフトデータｓｆｔｉはａ’ｉ，ｐ，０〜ａ’ｉ，ｐ，６に共通である。
【０２１２】
以上説明したように、本発明の第３の実施例を用いると、シナプス結合の重みデータを格納するメモリ２５の容量を増やさずに、パワーニューロンと通常ニューロンが混在するニューラルネットを作製できる。シフト情報を格納するメモリ３５が新たに必要になるが、これは２５６（＝１［ｂｉｔ］×２５６）ビットなので、重みデータメモリ２５を９ビット幅にする場合に比べて、必要なメモリのサイズは１／１，７９２である。また、８ビットカウンター２３Ｃと、左シフタ３６が必要になるが、これらによって増加するトランジスタ数はニューラルネット全体に必要なトランジスタ数に比べて極めて僅かである。
【０２１３】
なお、ここではパワーニューロンは通常のニューロンの最大２倍の影響力を持つとしたので、シフト情報は１ビットであり、シフタも１ビット左シフタを用いた。しかし、例えばシフト情報を２ビットにし、シフタを２ビット左バレルシフタにすれば、通常の１倍、２倍、４倍、８倍の影響力を持つニューロンを混在させることが可能である。
【０２１４】
図１５は、本発明の第３の実施例の変形例である回路ユニットの回路図である。図１５（ａ）に本発明の実施例３の変形例１である回路ユニットの回路図を示す。図１４に示す実施例３の回路と同じ素子には、同じ番号が振ってある。図１４の回路と比べて、図１５（ａ）の回路では、メモリ３５に代わりに、大小比較器３７が挿入されている。
【０２１５】
大小比較器３７は、カウンター２３Ｃが出力するＬ１層のニューロン番号を示すデータｉと、図示しないレジスタ又は外部から供給される値αとを受け取る。さらに、大小比較器３７は、前記データｉと前記αとを比較し、ｉがαよりも小さい場合に、その出力ｓｆｔを１にし、当該ｓｆｔを１ビット左シフタ３６に出力する。
【０２１６】
本発明の実施例３の変形例１では、Ｌ１層の任意の番号のニューロンをパワーニューロンに設定できる。しかし、ニューロンの番号は仮想的なものなので、それ自体に意味はない。つまり、Ｌ１層のニューロンの番号がαより小さいものは全てパワーニューロンであるとしても、ニューラルネットの動作として不都合は生じない。大小比較器３７の出力ｓｆｔは、カウンター２３Ｃの値即ちニューロンの番号ｉがαより小さい場合に１になる。左シフタ３６は、そのｓｆｔ入力に１が入力されると、アンドゲート２６が出力したデータの値を２倍にし、当該２倍にしたデータを加算器２７に出力する。回路の詳細な動作説明は省略する。
【０２１７】
図１５（ｂ）には、本発明の実施例３の変形例２である回路ユニットの回路の一部を示す。図１５（ｂ）の回路は、図１５（ａ）の大小比較器３７の代わりに、アンドゲート３７Ｂが挿入されたものである。この例では、アンドゲート３７Ｂは、カウンター２３Ｃの出力の第０ビットと第１ビットのアンドをとって、当該アンドを取った値をシフトデータｓｆｔとして、１ビット左シフタ３６に出力する。
【０２１８】
従って、番号が３、７、１１、、、と、飛び飛びの番号のニューロンがパワーニューロンになる。アンドゲート３７Ｂは必要に応じて、３入力や４入力にもできる。或いは、Ｌ１層の半数を抑制性にする場合は、アンドゲートを省略し、カウンター２３Ｃの出力の任意の１ビットを符号ｓｆｔにしても良い。
カウンター２３Ｃの使われないビットは実装する必要がない。具体的には、図１２（ｂ）に示す例では、８ビットカウンター２３Ｃのビット２〜ビット７は使われないので、これらを実装する必要はなく、２ビットカウンターとして実装すれば十分である。
【０２１９】
＜回路ユニットの実施例３の効果＞
パワーニューロンであるか否かという情報を、シナプス結合の重みデータを記憶するメモリに格納するのではなく、別のメモリに格納することで必要なメモリ量の増加を抑えることができる。本発明の実施例３の変形例１では、この考えの下にパワーニューロン情報を格納するメモリの容量を、シナプス結合の重みメモリに格納する場合の１／１，７９２に削減している。
【０２２０】
また、実施例３では個々のニューロン毎にパワーニューロンであるか否かを設定しているが、単に割合だけで設定しても問題ない場合は、本発明の実施例３の変形例１、実施例３の変形例２に示すように、パワーニューロン情報を格納するメモリそのものを省略し、大小比較器又はアンドゲートで代用できる。
【０２２１】
本発明の実施例２と実施例３では、抑制性ニューロンとパワーニューロンを別々に実装しているが、これらを混在させて実現することもできる。また、抑制性で且つパワーニューロンというニューロンも容易に実現できる。
【０２２２】
本発明の実施例では、実施例１を元に隣接セルとだけ結合を作る、フィードフォーワード型のニューラルネットを元に説明したが、後述する実施例５に示すフィードバックループを有するニューラルネットにも適用できる。
【０２２３】
＜回路ユニットの実施例４固有の課題＞
脳内のニューロンは、シナプス結合で受け取った情報をシナプス近傍の細胞膜の電位変化に変換し、多数のシナプス結合によるローカルな電位変化を細胞膜全体で加算し、その結果として軸索小丘付近の膜電位が閾値を超えると発火する。この過程は細胞膜に埋め込まれているイオンチャネル蛋白質やイオンポンプ蛋白質と、そこを通過するイオンの量と細胞膜内外のイオン濃度差などによって支配されている。
【０２２４】
従って、この過程には本質的に揺らぎがあり、全く同じ情報をシナプス結合で受け取ったとしても、シナプス近傍の膜電位変化や、多数の膜電位変化の合成である軸索小丘付近の膜電位、及び発火の閾値などが揺らいでいるため、発火するかどうかは一定ではない。また、脳のごく狭い領域内に存在する同一機能のニューロンでも、軸索小丘の形状や、そこに存在するイオンチャネル蛋白質等の数や分布などが異なるので、閾値も多様である。
【０２２５】
ところが、従来のニューラルネットのハードウェアでは、これらの状態を模倣することができず、閾値は全てのニューロンで同一の固定値であった。その為、ニューラルネットの規模（ニューロン数とシナプス結合の数）を大きくしていくと、学習の過程でローカルミニマムに落ち込み易くなり、学習が進み難くなるという問題があった。
【０２２６】
本発明の実施例４では、ニューロン毎にその閾値に適当なオフセット値を与えられるようにし、且つニューロン毎に閾値が揺らぐようにすることで、学習途中でローカルミニマムに落ち込むことが少ない、１億ニューロン程度の大規模ニューラルネットを実現できるようにすることを課題とする。
【０２２７】
実施例１の図５で示した回路ユニットを使った場合、ニューロン間の配線問題を解決でき、大規模なニューラルネットを構築できるが、閾値θが一定であり、しかもＬ２層の全てのニューロンについて閾値θが同一になってしまうという問題がある。
【０２２８】
そこで、本発明の実施例４では、Ｌ２層のｊ番目のニューロンの閾値θｊが、θｊ＝θ０＋δｊ＋ｒｊ，ｖと表せるようになるハードウェア技術を提供する。ここで、θ０は閾値のベース値、δｊはｊ番目のニューロン毎のオフセット量、ｒｊ，ｖはｊ番目のニューロン毎の揺らぎであり、適当な周期Ｖ（ｖ＝［０：Ｖ−１］）で疑似ランダムに変化する量である。
【０２２９】
＜回路ユニットの実施例４の説明＞
図１６は、本発明の第４の実施例である、閾値にオフセットと揺らぎを持たせたニューロン群を模擬した回路ユニットの回路図である。図５と同じ素子には、図５と同じ番号が振られている。
【０２３０】
閾値に揺らぎを持たせたニューロン群を模擬した回路ユニットは、８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、メモリ２５と、アンドゲート２６と、１９ビット加算器２７と、アンドゲート２８と、大小比較器２９と、大小比較器２９の結果を保持するラッチ３０と、１９ビットカウンター３１と、閾値算出回路３８とを用いて構成されている。
【０２３１】
従って、閾値にオフセットと揺らぎを持たせたニューロン群を模擬した回路ユニットは、図５の回路に、閾値算出回路３８が追加されたものである。
閾値算出回路３８は、８ビットカウンター５６と、閾値のオフセット量を記憶する８［ｂｉｔ］×２５６のメモリ５７と、１２ビット加算器５８と、１３ビット加算器５９と、８ビット疑似乱数発生器６０とを用いて構成されている。
【０２３２】
８ビットカウンター５６は、端子４８ｂでカウントアップ信号を受け取るごとに、カウント値ｊを１ずつ増加させ、当該カウント値ｊをメモリ５７へ出力する。
メモリ５７は、Ｌ２層のニューロン毎の閾値のオフセット量を保持する。メモリ５７は、カウンター５６が出力するカウント値ｊを受け取り、当該カウント値ｊに対応する番地から、Ｌ２層のニューロンの閾値のオフセット量δｊを読み出し、当該オフセット量δｊを１２ビット加算器５８に出力する。
【０２３３】
１２ビット加算器５８は、メモリ５７が出力したｊ番目のニューロンのオフセット量δｊを受け取り、当該オフセット量δｊと片側に入力された閾値のベース値θｂとを加算し、当該加算後のデータ（１２ビットデータ）を１３ビット加算器５９へ出力する。
１３ビット加算器５９は、１２ビット加算器５８が出力したデータと、８ビット疑似乱数発生器が出力した疑似乱数ｒｊ，ｖとを受け取り、当該データと当該疑似乱数ｒｊ，ｖを加算し、加算後のデータを閾値θｊとして、大小比較器２９に出力する。
【０２３４】
８ビット疑似乱数発生器６０は、端子４８ｂでカウント信号を受け取り、信号ｃｋとして用いる。また、８ビット疑似乱数発生器６０は、端子４９ｂで固定化信号を受け取り、信号ｆｉｘとして用いる。８ビット疑似乱数発生器６０は、前記ｃｋとｆｉｘとを用いて、擬似乱数ｒｊ，ｖを発生させ、当該擬似乱数ｒｊ，ｖを１３ビット加算器５９へ出力する。
【０２３５】
８ビット疑似乱数発生器６０の内部回路の例として、図１７にガロア型ＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）を示す。この回路は０以外の初期値から出発すると、２５５回のｃｋ入力の立ち上がりで、１〜２５５の値が各１回だけ疑似乱数的に発生して初期値に戻る。
【０２３６】
図１７の回路例では信号ｆｉｘが１になると最上位ビットはリセットされ、他のビットはセットされるのでｘ’７Ｆ’に初期化される。信号ｆｉｘは２通りの目的で１になる。１つは、０以外の初期値を設定する為である。もう１つは、閾値を変動させたくない場合に、ｒｊ，ｖを変動幅のほぼ中間値であるｘ’７Ｆ’に固定する為である。後者については後で説明する。この疑似乱数発生器が２５５回で一巡することも重要であるが、それについても後で説明する。この回路自体は疑似乱数発生用に従来から使われているものなので、ここでは詳細な説明を省略する。
【０２３７】
本発明の動作を実施例に沿って説明する。計算が始まる前に図示しないリセット信号によって、カウンター２０、カウンター２３Ａ、カウンター２３Ｂ、カウンター３１、及びカウンター５６は０になっており、信号ｆｉｘも一旦１になり疑似乱数発生器６０の出力値がｘ’７Ｆ’に初期化されている。また、図示しない任意の手段によって、メモリ２１にＬ１層の入力データが、メモリ２５にシナプス結合の重みデータが、メモリ５７にＬ２層のニューロンの閾値のオフセット量が、それぞれ格納されているものとする。
【０２３８】
計算が始まるとカウンター２０が０なので、メモリ２１の０番地（Ｌ１層の０番のニューロン）から４ビットデータを読み出し、パルス列変調回路２２に送り、１５ビットデータに変換する。この変換は、例えばメモリ２１から送られて来たデータをアドレスとして、図６に示すデータが書き込まれているメモリから、１５ビットのデータを読み出して行う。
【０２３９】
最初のラウンド０では、１５ビットデータ中のビット０を転送する。このデータを出力端子Ｐ０から外部へ出力すると、その動作とともに、メモリ２４Ａに送る。
【０２４０】
端子Ｐ０から出力されたデータは隣接セルで受信されるが、回路は対称なので、その動作とともに、入力端子Ｐ１〜Ｐ６から隣接セルのデータを受信できる。そこで、パルス列変調回路２２からのデータと端子Ｐ１〜Ｐ６からのデータとを束ねて７ビットデータとし、メモリ２４Ａの０番地に格納する。
【０２４１】
その後、端子４１に入力される信号がアクティブになると、カウンター２０は１をメモリ２１に出力する。メモリ２１は、１番地のデータを読み出して、当該データをパルス列変調回路２２に出力する。パルス列変調回路２２は、メモリ２１が出力したデータを１５ビットデータに変換し、当該１５ビットデータのビット０を端子Ｐ０へ送る。
【０２４２】
端子４１に入力される信号がアクティブになると同時に、端子４２Ａに入力される信号がアクティブになると、カウンター２３Ａは１をメモリ２４Ａに出力する。メモリ２４Ａは、パルス列変調回路２２が出力したデータと端子Ｐ１〜Ｐ６から入力されたデータとを束ねて７ビットデータにし、当該７ビットデータを１番地に格納する。
【０２４３】
この様に、カウンター２０と２３Ａが２５５を超えて０に戻るまでデータ転送を行うと、ラウンド０が終了する。Ｌ１層からＬ２層へ２５６個のデータを４［ｍｓ］で転送するので、一連の処理速度は６４［ｋＨｚ］であり、Ｐ０端子から出る信号（１ビット）のデータレートは６４［Ｋｂｐｓ］である。
次のラウンド１では、パルス列変調回路２２は１５ビットデータ中のビット１を送出し、転送したデータはメモリ２４Ｂに書き込む。
【０２４４】
メモリ２４Ａと２４Ｂをラウンド毎に交互に使ってデータ転送を続け、ラウンド１４でビット１４の転送が終わると、メモリ２１に入っているデータの転送が終わる。ニューラルネットでの処理を継続したい場合は、メモリ２１に新たなデータを書き込むか、又はメモリ２１をダブルバッファ構造にしてニューラルネットでの処理と並行して次のデータを用意しておく。
【０２４５】
次に、Ｌ２層のニューロンの動作について説明する。ラウンド０が終わり、メモリ２４Ａに１，７９２個のａ´ｉ，０，ｑが揃うと、ラウンド１からＬ２層での処理が始まる。Ｌ２層のｊ番目のニューロンは、Σ（ａ´ｉ，０，ｑ×ｗ´ｉ，ｑ，ｊ）を計算する。ここでΣはｉとｑについての１，７９２回の総和計算を表している。
【０２４６】
Ｌ２層には２５６個のニューロンが存在するので、結局４５８，７５２（＝１，７９２×２５６）回の積和演算を４［ｍｓ］間でしなければならない。従って、この部分の回路は１１４．７［ＭＨｚ］で動作させる。
【０２４７】
ラウンド１になりＬ２層で計算が始まると、端子４２Ａに入力する信号を１６．３８４［ＭＨｚ］でアクティブにしてカウンター２３Ａをカウントアップし、メモリ２４Ａから１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の速度の１１４．７［Ｍｂｐｓ］の１ビット信号ａ´ｉ，０，ｑにする。
【０２４８】
その動作とともに、端子４７に入力する信号を１１４．７［ＭＨｚ］でアクティブにしてカウンター３１を１１４．７［ＭＨｚ］でカウントアップし、メモリ２５から８ビットのシナプス結合の重みデータｗ´ｉ，ｑ，ｊを出力するよう制御する。アンドゲート２６は入力されたａ´ｉ，０，ｑとｗ´ｉ，ｑ，ｊとを乗算して８ビットのデータ（０又はｗ´ｉ，ｑ，ｊ）を算出し、当該データを加算器２７へ出力する。
【０２４９】
加算器２７は、アンドゲート２８からデータを受け取り、当該データにアンドゲート２６が出力した当該８ビットデータを加算してΣ（ａ´ｉ，０，ｑ×ｗ´ｉ，ｑ，ｊ）を算出する。総和計算の最初にアンドゲート２８の端子４４を０にし、加算器２７が出力してその片側入力に戻す部分和を０にする。ｉとｑについての１，７９２回の総和計算が終わると、当該総和を大小比較器２９に出力する。
【０２５０】
大小比較器２９は、当該総和を閾値θｊと比較し、総和が閾値θｊよりも大きければ比較結果を１にし、小さければ比較結果を０にする。大小比較器２９は、比較結果を１１４．７［ＭＨｚ］のパルス状に出力するので、そのままでは後段で使い難い。そこで、大小比較器２９の出力が出るタイミングでラッチ３０の端子４５に入力する信号を１にし、ラッチ３０に比較結果を保持する。この結果、Ｌ２層の出力は６４［Ｋｂｐｓ］の信号になる。
【０２５１】
最後に、閾値θｊの生成部について説明する。ラウンド１の初めに、カウンター５６がカウント値０をメモリ５７に出力する。メモリ５７は、当該カウント値０を受け取り、０番地のデータ即ち、Ｌ２層の０番のニューロンの閾値のオフセット量δ０を読み出す。メモリ５７は、当該オフセット量δ０を、加算器５８に出力する。
加算器５８は、前記メモリ５７が出力したオフセット量δ０と、図示されないレジスタ又は外部から供給された閾値のベース値θｂとを受け取る。
【０２５２】
加算器５８は、前記オフセット量δ０と前記ベース値θｂとを加算し、当該加算した値を加算器５９に出力する。ここで、ベース値θｂは１２ビット幅であり、オフセット値δ０は８ビット幅としている。両者のビット幅の差を４にする理由は、ベース値の１／１６程度までのオフセット量を与えられるようにする為である。
【０２５３】
一方、疑似乱数発生器６０は疑似乱数ｒ０，ｖ（ｖはラウンド数）を生成し、当該疑似乱数ｒ０，ｖを加算器５９に出力する。
加算器５９は、疑似乱数発生器６０が出力した疑似乱数ｒ０，ｖと、加算器５８が出力したベース値θｂとオフセット量δ０との和を受け取る。
【０２５４】
加算器５９は、前記疑似乱数ｒ０，ｖとベース値θｂとオフセット量δ０との和を加算し、加算した値θ０を大小比較器２９に出力する。
大小比較器２９で比較が終わるタイミング即ち、６４［ｋＨｚ］で図示しない回路から端子４８ｂに入力する信号が立ち上がり、疑似乱数発生器６０が新たな疑似乱数ｒ１，ｖを生成する。
【０２５５】
その動作とともに、カウンター５６がカウントアップし、閾値のオフセット量格納メモリ５７が新しいオフセット量δ１を読み出す。このようにして、Ｌ２層のニューロン毎にオフセット量δｊと疑似乱数ｒｊ，ｖを更新する。
【０２５６】
ここで、疑似乱数ｒｊ，ｖの添え字ｖについて説明する。既に説明したように、図１７の疑似乱数発生回路はｃｋ入力が２５５回アクティブになると、１〜２５５の値を各１回だけ疑似ランダムに生成し、２５６回目に初期値に戻る。この疑似乱数列をＲ０、Ｒ１、Ｒ２、Ｒ３、、、、Ｒ２５４とする。
【０２５７】
ラウンド１でＬ２層の０番のニューロンの閾値に、最初に加算される値は初期値Ｒ０である。Ｌ２層には２５６個のニューロンが在るので、端子４８ｂに入力される信号は２５６回アクティブになり、ラウンド１の最後に２５５番のニューロンの閾値に加算される値もＲ０になる。
【０２５８】
従って、次のラウンド２で０番のニューロンの閾値に加算される値はＲ１である。結局、０番のニューロンの閾値に加算される疑似乱数を観察すると、２５５ラウンドでＲ０〜Ｒ２５４の値が一巡する。
【０２５９】
他のニューロンの閾値に加算される疑似乱数についても同様である。１回のラウンドについてみると、０番と２５５番のニューロンでは同じ値が使われるが、その他では重複しない１〜２５５の値が各１回だけ使われ、１個のニューロンについてみると、２５５ラウンドで１〜２５５の値が疑似乱数的に使われることになる。
【０２６０】
このようにして、各ニューロンの閾値にほぼ重複しない（０番と２５５番のニューロンでは重複する）、疑似ランダムな揺らぎを与えることができる。０番と２５５番のニューロンで疑似乱数が重複しないようにするには、疑似乱数発生器に９ビット以上のガロアＬＦＳＲを用いるか、或いはＬ２層に含まれるニューロンの数を２５４個以下にするなどして、疑似乱数発生器が一巡する周期よりもＬ２層のニューロンの個数を少なくし、かつ両者の間のずれ量が、疑似乱数発生器が一巡する周期の約数にならないように設定すればよい。
【０２６１】
閾値に揺らぎを与える主な目的は、学習過程においてシナプス結合の重みを変化させる際に、ローカルミニマムの状態に落ち込むのを防ぐ為である。また、学習を終了した後に、閾値に揺らぎを持ったままニューラルネットを使用することもできるが、そうすると全く同じ入力データに対して出力が同じにならない可能性がある。この現象を避けるには信号ｆｉｘを１に固定し、閾値の揺らぎをほぼ平均値のｘ’７Ｆ’に固定すれば良い。
【０２６２】
また、閾値のオフセット量δｊを全てのニューロンで同じにしたい場合は、メモリ５７に書き込むデータを全て同じにするか、或いは端子４８ｂに入力する信号をノンアクティブのまま保持すれば良い。
【０２６３】
次に、加算器５８、加算器５９、オフセットメモリ５７及び、大小比較器２９のビット幅について説明する。既に説明したように本実施例では、疑似乱数発生器のビット幅は８以上が望ましい。閾値θｊに与える揺らぎの割合を例えば最大１０％程度とすると、θｂのビット幅を疑似乱数発生器のビット幅よりも、３〜４ビット多くする必要がある。そこで、本実施例４ではθｂを１２ビット幅とした。
【０２６４】
次に、閾値θｊに最大１０％程度のオフセットを与えるとして、メモリ５７のビット幅を８とした。以上のような仮定により、本実施例では加算器５８のビット幅を１２、加算器５９のビット幅は１３、大小比較器２９のビット幅は１３とした。一方、加算器２７の出力は１９ビット幅なので、その上位１３ビットか又は、総和として現れる最大の数を表せる最小のビット幅の、上位１３ビットを大小比較器２９のＡ入力に入れることとする。
【０２６５】
或いは、大小比較器２９で必用とされる分解能を先に決め、それを基に疑似乱数発生器６０のビット幅などを決めることもできる。その場合、疑似乱数発生器６０に８ビット幅よりも小さいものを使うことができるが、例えば７ビットのものを使うとＬ２層のニューロンの約半分ずつが、同じ揺らぎを持つことになる。
【０２６６】
本発明の実施例４では、閾値のオフセット量を暗黙の内に正又は０としたが、本発明はこれに制限されるものではなく、オフセットデータメモリ５７のデータを２の補数表現として解釈し、加算器５８を加減算器に変更すれば、閾値に正負のオフセット量を与えることができる。
本発明の実施例４では、閾値のオフセット量をＬ２層のニューロン毎に設定できるとしたが、本発明はこれに制限されるものではなく、オフセット量が同じ幾つかのグループでＬ２層のニューロンを分類すれば、メモリ５７に必要なデータ数を前記グループの数分まで減らすことができる。
【０２６７】
本発明の実施例４では、大小比較器２９で総和と閾値θｊを比較する度に端子４８ｂに入力する信号をアクティブにするとしたが、本発明はこれに制限されるものではなく、端子４８ｂに入力する信号を一定値に保つことにより、全てのニューロンのオフセット量と揺らぎ量を同一にすることができる。
【０２６８】
本発明の実施例４では、疑似乱数の値を暗黙の内に正又は０としたが、本発明はこれに制限されるものではなく、疑似乱数を２の補数表現として解釈し、加算器５９を加減算器に変更すれば、閾値に正負の揺らぎを与えることができる。
【０２６９】
本発明の実施例４では、ｆｉｘ信号が１になった時に疑似乱数発生器６０の値がｘ’７Ｆ’になるとしたが、本発明はこれに制限されるものではなく、０以外の任意の値を初期値として設定できる。或いは、リセット信号入力を追加して、リセット信号がアクティブになった際に０以外の初期値になるようにすれば、ｆｉｘ信号が１になる際には０を含めた任意の値に固定することができる。また、疑似乱数の値を２の補数として解釈する場合は、揺らぎの中心が０に近い値になるので、ｆｉｘ信号が１になった時の初期値をｘ‘０１’など、０に近い値にすることができる。
【０２７０】
本発明の実施例４では、疑似乱数発生器６０として８ビットガロアＬＦＳＲを用いたが、本発明はこれに制限されるものではなく、任意のビット幅の任意の方式の疑似乱数発生器を用いても、同様に閾値に揺らぎを与えることができる。
【０２７１】
本発明の実施例４では、暗黙の内にＬ１層のニューロンが全て興奮性ニューロンであるとして説明したが、本発明はこれに制限されるものではなく、例えばシナプス結合の重みデータメモリ２５のデータを２の補数表現として解釈し、加算器２７を加減算器に置き換えれば、興奮性ニューロンと抑制性ニューロンが混在するニューラルネットに対しても、同様に閾値にオフセットと揺らぎを与えることができる。
【０２７２】
また、本発明の実施例３で説明したパワーニューロンに対しても、同様に閾値にオフセットと揺らぎを与えることができる。例えば、図１４のパワーニューロンを模擬した回路ユニットにおいて、大小比較器２９の入力端子４３に、図１６の閾値算出回路３８の加算器５９の出力端子を接続すれば、実現できる。
【０２７３】
本発明の実施例４では、１個のセルに含まれるニューロン数をＬ１層、Ｌ２層ともに２５６としたが、本発明はこれに制限されるものではなく、各層に２個以上のニューロンが存在すれば同様に適用できる。また、Ｌ１層とＬ２層のニューロン数が同数である必要はない。
【０２７４】
本発明の実施例では、ニューラルネットが２層の層構造を持つとしたが、本発明はこれに制限されるものではなく、３層以上のニューラルネットに対しても、第２層以降の各層に同様に適用できる。
本発明の実施例では、Ｌ１層のニューロンの入力データを４ビット幅としたが、本発明はこれに制限されるものではなく、任意のビット幅を持つニューラルネットに適用できる。
【０２７５】
本発明の実施例では、１ラウンドが４［ｍｓ］であるとして説明したが、本発明はこれに制限されるものではなく、任意の時間を設定できる。
本発明の実施例では、パルスニューラルネットであるとして説明したが、本発明はこれに制限されるものではなく、パルスニューラルネット以外のニューラルネットにも同様に適用できる。
【０２７６】
＜回路ユニットの実施例４の効果＞
本発明の実施例４の技術を使うと、大規模なニューラルネット内の各ニューロンの閾値に、個別に任意のオフセット量と疑似ランダムな揺らぎを与えることができ、ニューロンに多様性を持たせられるとともに、学習時にローカルミニマムに落ち込んで学習が進み難くなるのを防止する効果が有る。
【０２７７】
また、全く同じ入力データに対して、一定範囲内で揺らぎの有る反応を返すニューラルネットを実現できる。或いは、この揺らぎを無くして常に同じ反応を返すニューラルネットを実現することもできる。
【０２７８】
＜回路ユニットの実施例５固有の課題＞
本発明の実施例５では、ニューロン数が１億以上で、信号経路にフィードバックループが存在し、しかも実時間動作するニューラルネットを実現する為の回路ユニットを提供することを課題とする。
【０２７９】
例として、フィードバックループを持つ３層構造のパルスニューラルネットを、図２３を用いて説明する。図２３は、フィードバックループを持つニューラルネットの一部を表した模式図である。Ｌ１層はデータ入力層であり、ここには例えば４ビット幅の入力データを、例えば４［ｍｓ］周期のパルス列に変換するニューロン２３０ｉ（ｉは１から１，０００までの整数）が、例えば１，０００個存在する。Ｌ２層は中間データ処理層であり、データを演算処理するニューロン２３２ｊ（ｊは１から９００までの整数）が、例えば９００個存在する。
【０２８０】
Ｌ３層はデータ出力層であり、データを演算処理するニューロン２３６ｍ（ｍは１から２００までの整数）が、例えば２００個存在する。Ｌ１層の各ニューロン２３０ｉからは１本の出力信号線２３１ｉ（神経細胞の軸索に相当）が出ている。出力信号線２３１ｉは多数箇所（ニューロン２３２ｊの個数が９００なので最大９００）に分岐して、シナプス結合２３３ｉ，ｊを介してＬ２層のｊ番目のニューロン２３２ｊに接続する。
【０２８１】
Ｌ２層のｋ番目のニューロン２３２ｋからは１本の出力信号線２３５ｋが出ており、その先は分岐してＬ２層のニューロン２３２ｊへのフィードバック信号と、Ｌ３層のニューロン２３６ｍへの入力信号となる。出力信号線２３５ｋは、シナプス結合２３４ｋ，ｊを介してＬ２層のｊ番目のニューロン２３２ｊと接続する。また、出力信号線２３５ｋは、シナプス結合２３７ｋ，ｍを介してＬ３層のｍ番目のニューロン２３６ｍと接続する。従って、Ｌ２層のニューロン２３２ｊのシナプス結合の数はニューロン毎に最大１，９００（＝１，０００＋９００）個存在する。
【０２８２】
信号線２３１ｉで伝送されるデータａｉは１ビット信号である。シナプス結合２３３ｉ，ｊは、例えば８ビット幅の重みデータｗｉ，ｊを保持しており、ａｉとの積ａｉ×ｗｉ，ｊを計算する。
【０２８３】
信号線２３５ｋで伝送されるデータｂｋは１ビット信号である。シナプス結合２３４ｋ，ｊは８ビット幅の重みデータｗｋ，ｊを保持しており、ｂｋとの積ｂｋ×ｗｋ，ｊを計算する。
【０２８４】
ニューロン２３２ｊは、そこに付属する全てのシナプス結合で計算した最大１，０００個のａｉ×ｗｉ，ｊと最大９００個のｂｋ×ｗｋ，ｊとの総和を計算する。そして、ニューロン２３２ｊは、総和の値が予め決められている閾値θを超えると、その出力信号線２３５ｊに１を出力し、閾値θを超えない場合は、出力信号線２３５ｊに０を出力する。
【０２８５】
Ｌ２層の各ニューロン２３２ｋからＬ３層に向かう信号線２３５ｋは、多数箇所（ニューロン２３６ｍの個数が２００なので最大２００）に分岐する。信号線２３５ｋは、シナプス結合２３７ｋｍを介してニューロン２３６ｍと接続する。従って、シナプス結合２３７ｋ，ｍはニューロン２３６ｍひとつ当たり最大９００個存在する。
【０２８６】
シナプス結合２３７ｋ，ｍは、例えば８ビット幅の重みデータｗｋ，ｍを保持しており、ｂｋとの積ｂｋ×ｗｋ，ｍを計算する。各ニューロン２３６ｍでは、そこに付属するシナプスで計算された最大９００個のｂｋ×ｗｋ，ｍのｋについての総和を計算する。
【０２８７】
そして、総和の値が予め決められている閾値θを超えると、ニューロン２３６ｍは、その出力信号線２３８ｍに１を出力し、閾値θを超えない場合は、出力信号線２３８ｍに０を出力する。これら一連の演算は４［ｍｓ］以内で終了する。
【０２８８】
以上の説明から明らかなように、Ｌ１層の１，０００個のニューロンはＬ２層の９００個のニューロンと基本的に総当たりで結合し、Ｌ２層の９００個のニューロンもＬ２層の９００個のニューロンと基本的に総当たりで結合するので、これらの結合に使われるシナプス結合の総数は最大１７１万個（＝１，９００  ×９００）に達し、これらのシナプス結合へ行く配線の総数も最大１７１万本に達する。
【０２８９】
同様に、Ｌ２層の９００個のニューロンはＬ３層の２００個のニューロンと基本的に総当たりで結合するので、これらの結合に使われるシナプス結合の総数は最大１８万個（＝９００×２００）に達し、これらのシナプス結合へ行く配線の総数も最大１８万本に達する。実際のニューラルネットではその用途や、学習結果によって不要なシナプス結合が取り除かれるので、各ニューロン２３０ｉやニューロン２３２ｋの出力が、どのニューロン２３２ｊやニューロン２３６ｍとシナプス結合を作るかは多様である。
【０２９０】
つまり、ニューロン２３０ｉが選択的にニューロン２３２ｊとシナプス結合を作れ、ニューロン２３２ｋも選択的にニューロン２３６ｍとシナプス結合を作れ、更にニューロン２３２ｋの出力を選択的にニューロン２３２ｊヘフィードバックできる機構が技術的に可能でなければならない。
【０２９１】
高々ニューロン数２，１００（＝１，０００＋９００＋２００）のニューラルネットでさえ、必要な配線の数が最大１８９万本（＝１７１万＋１８万）に達し、しかもそれらを選択的に行う必要がある。人間の脳には１００億から１０００億のニューロンが存在し、各ニューロンは１，０００個〜１０，０００個のシナプス結合を持つと言われている。人間の脳並みの１億程度のニューロン数を持ち、それらのニューロン間にフィードバックループが在るニューラルネットを構築するには膨大な配線が必要であり、この技術的課題を解決できなければ脳並みの規模と機能を持つニューラルネットを実現することはできない。
【０２９２】
この配線問題を解決する為に、図５で実施例１の回路ユニットを説明した。しかし、実施例１では所謂フィードフォーワード型のニューラルネットは実現できるが、本実施例５が対象としているフィードバックループを含むニューラルネットは実現できないという問題がある。そこで、本実施例５は、前述の実施例１を拡張することにより、フィードバックループを持つ超大規模ニューラルネットを構築できるようにするための回路ユニットを提供する。
【０２９３】
＜回路ユニットの実施例５の説明＞
前述の実施例１の回路ユニット（図５）は、例えばＬ１層からＬ２層への配線に関するものであるが、Ｌ２層からＬ３層への配線にも適用可能なことは容易に推測できる。この場合にＬ１層からＬ２層への配線と、Ｌ２層からＬ３層への配線とを別々の出力端子に出すことも可能であるが、そうすると出力端子が２個、入力端子も２倍の１２個必要になる。
【０２９４】
近年の半導体技術の発展により、論理素子（トランジスタ）は安価に作れるが、素子間を接続する配線は相対的に素子よりも高価になる場合が多い。ここで対象としている回路では、２つの出力端子から出る信号が６４［Ｋｂｐｓ］と低速であるので、２つの信号を時分割多重化して、１本の信号線で伝送することにしても技術的な問題は生じない。信号の時分割多重化と、それを元に戻すためには余計なトランジスタが必要になるが、信号の時分割多重化によって配線数を減らす方がコスト的に有利である。
【０２９５】
図１８（ａ）は、或るセルにおける本発明の実施例５におけるニューラルネットワークの模式図である。１つのセルは、Ｌ１層に属する２５６個のニューロン１８０ｉ（ｉは０から２５５の整数）と、Ｌ２層に属する２５６個のニューロン１８２ｊ（ｊは０から２５５の整数）と、Ｌ３層に属する３２個のニューロン１８６ｍ（ｍは０から３１の整数）とを有する。
【０２９６】
更に、前記セルは、Ｌ１層のニューロン１８０ｉからＬ２層のニューロン１８２ｊへの配線１８１ｉと、Ｌ１層のニューロン１８０ｉからＬ２層のニューロン１８２ｊへのシナプス結合１８３ｉ，ｊと、Ｌ２層のニューロン１８２ｋ（ｋは０から２５５の整数）からＬ２層のニューロン１８２ｊへの配線１８５ｋと、Ｌ２層のニューロン１８２ｋからＬ２層のニューロン１８２ｊへのシナプス結合１８４ｋ，ｊと、Ｌ２層のニューロン１８２ｋからＬ３層のニューロン１８６ｍへのシナプス結合１８７ｋ，ｍと、Ｌ３層のニューロン１８６ｍの出力端子１８８ｍとを有する。
【０２９７】
図１８（ｂ）と図１８（ｃ）は、層間を流れる信号のフォーマットを説明するための図である。図１８（ｂ）に示すようにＬ１層からＬ２層へのデータｚｉ，ｔ（ｉは０から２５５までの整数）と、Ｌ２層からＬ３層へのデータｙｋ，ｔ（ｋは０から２５５までの整数）を時分割多重化した信号Ｓとして、出力端子Ｐ０から出力することにする。
ここで、ｚｉ，ｔはＬ１層のｉ番目のニューロンのｔ番目（ｔは０以上の整数）のラウンドの出力である。ｙｋ，ｔはＬ２層のｋ番目のニューロンのｔ番目のラウンドの出力である。
【０２９８】
或いは、Ｌ２層の出力データを一旦メモリに格納しておき、図１８（ｃ）に示すようにＬ１層のデータを２［ｍｓ］で出力し終えた後で、Ｌ２層のデータを纏めて出力することもできる。いずれにしても信号Ｓのデータ転送速度は（２５６［ｂｉｔ］＋２５６［ｂｉｔ］）÷４［ｍｓ］＝１２８［Ｋｂｐｓ］と２倍になるが、これでもかなり低速なので通常の銅配線で接続可能である。
【０２９９】
本発明は、Ｌ１層からＬ２層へ送られるデータと、Ｌ２層からＬ３層へ送られるデータとを時分割多重化して１本の信号線で伝送し、Ｌ２層からＬ３層へ送られるデータを、Ｌ２層からＬ２層へのフィードバックデータとしても利用することを特徴とする、ニューロン間の配線方式である。
なお、今後の説明では図１８（ｂ）の信号フォーマットを念頭に置くが、図１８（ｃ）の信号フォーマットでも同様に本発明を適用できる。
【０３００】
図１９は、本発明の第５の実施例である、Ｌ２層のニューロン群の出力をＬ２層のニューロン群へフィードバックするニューラルネットの回路ユニットの回路図である。図１９の回路全体が、図２（ａ）中の１個の正六角形（セル）に対応している。本実施例では各ニューロンは個別の電子回路ではなく、仮想ニューロンとしてＬ１層（２５６個のニューロン）、Ｌ２層（２５６個のニューロン）、Ｌ３層（３２個のニューロン）を、それぞれ纏めて実装している。
【０３０１】
図１９の回路ユニットは、Ｌ１層に属する８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、メモリ２５と、アンドゲート２６と、加算器２７と、アンドゲート２８と、メモリ６９Ａと、メモリ６９Ｂと、メモリ７０と、アンドゲート７１と、加算器７２と、アンドゲート７３と、加算器７４と、大小比較器７５と、ラッチ７６と、マルチプレクサ７７と、メモリ７８と、アンドゲート７９と、加算器８０と、アンドゲート８１と、大小比較器８２と、ラッチ８３と、アンドゲート８４と、を用いて構成されている。
【０３０２】
８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、メモリ２５と、アンドゲート２６と、加算器２７と、アンドゲート２８は、図５の回路と同じであるので、説明を省略する。なお、メモリ２５にアドレスを供給するカウンター３１は表示を省略している。
【０３０３】
メモリ６９Ａとメモリ６９Ｂは、端子Ｐ０〜Ｐ６を介して伝送されて来たＬ２層の出力データｂ´ｋ，ｑ（７［ｂｉｔ］×２５６）を格納する。ここで、ｑは入（出）力端子番号を表す０から６までの整数である。メモリ６９Ａと６９Ｂは交互に使われる。
メモリ７０はＬ２層からのフィードバック信号を受けるシナプス結合の重みｗ´ｋ，ｑ，ｊ（８［ｂｉｔ］×２５６×７×２５６）を格納する。
【０３０４】
アンドゲート７１はアンドゲート８４が出力したｂ´ｋ，ｑと、メモリ７０が出力したｗ´ｋ，ｑ，ｊを受け取り、当該ｂ´ｋ，ｑとｗ´ｋ，ｑ，ｊを乗算し、乗算後の値ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｊを加算器７２に出力する。
【０３０５】
加算器７２は、Ｌ２層のニューロンｊ毎に、アンドゲート７１が出力したｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｊのｋとｑに関する総和を算出し、当該総和を加算器７４に出力する。総和計算の途中では、加算器７２は、部分和をアンドゲート７３に出力する。
アンドゲート７３は、Ｌ２層の１個分のニューロンの総和計算の最初に、加算器７２に入る部分和を０にする。
【０３０６】
加算器７４は、Ｌ２層のニューロンｊ毎に、加算器２７が出力したＬ１層からのデータを基にした総和と、加算器７２が出力したＬ２層からのフィードバックデータを基にした総和とを受け取り、当該Ｌ１層からのデータの総和と当該Ｌ２層からのフィードバックデータの総和とを加算し、加算後のデータを大小比較器７５に出力する。
【０３０７】
大小比較器７５は、加算器７４が出力したデータを受け取り、当該データが端子６４から入力された閾値θよりも大きい場合に、１をラッチ７６に出力する。一方、大小比較器７５は、前記加算器７４が出力したデータが、前記閾値θ以下の場合に、０をラッチ７６に出力する。
【０３０８】
ラッチ７６は、大小比較器７５が出力したデータを受け取り、端子６５に入力された信号が立ち上がるときに前記データを保持する。
マルチプレクサ７７はＬ１層の出力データａ´ｉ，ｐとＬ２層の出力データｂ´ｊとを交互に選択し、図１８（ｂ）に示すように時分割多重化する。
【０３０９】
メモリ７８はＬ２層からの信号を受け取るＬ３層のニューロンのシナプス結合の重みｗ´ｋ，ｑ，ｍ（８［ｂｉｔ］×２５６×７×３２）を格納する。また、メモリ７８は、図示されていないカウンターからの信号を受け取ると、当該信号に対応したシナプス結合の重みｗ´ｋ，ｑ，ｍを読み出して、当該重みをアンドゲート７９に出力する。
【０３１０】
アンドゲート７９は、アンドゲート８４が出力したデータｂ´ｋ，ｑと、メモリ７８が出力したシナプス結合の重みｗ´ｋ，ｑ，ｍとを受け取り、当該ｂ´ｋ，ｑとｗ´ｋ，ｑ，ｍを乗算し、乗算後の値ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍを加算器８０へ出力する。
【０３１１】
加算器８０は、アンドゲート７９が出力したｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍを、それまでのステップで計算した部分和に加算することで、Σ（ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍ）のｋとｑに関する総和を算出し、当該総和を大小比較器８２に出力する。また、加算器８０は、計算途中の部分和をアンドゲート８１に出力する。
アンドゲート８１は、Ｌ３層の１個分のニューロンの総和計算の最初に加算器８０の片側入力を０にする。
【０３１２】
大小比較器８２は、加算器８０が出力した総和と、端子６４から入力される閾値θを受け取り、前記総和が閾値θよりも大きい場合に、１をラッチ８３に出力する。一方、大小比較器８２は、前記総和が閾値θ以下の場合に、０をラッチ８３に出力する。
ラッチ８３は大小比較器８２が出力したデータを受け取り、端子６５に入力される信号が立ち上がるときに前記データを保持し、その値を端子６７に出力する。
【０３１３】
なお、シナプス結合の重みには正負があるが、本発明の効果に影響しないので、本実施例では正のデータだけとして説明する。また、ニューロン間の接続が無い箇所については、そこに対応するシナプス結合の重みｗ´ｉ，ｑ，ｊ、ｗ´ｋ，ｑ，ｊ及びｗ´ｋ，ｑ，ｍは０になっているとする。
【０３１４】
次に、本実施例の動作について説明する。図１９のニューラルネットでの処理が始まる前に、図示しない任意の方法によって、予めＬ１層のニューロンの入力データがメモリ２１に格納されており、シナプス結合の重みデータがメモリ２５、メモリ７０及び、メモリ７８に格納されているとする。また、カウンター２０とカウンター２３Ａとカウンター２３Ｂは図示しないリセット信号によって予め０になっている。
【０３１５】
計算が始まるとカウンター２０が０なので、メモリ２１は、０番地の４ビットデータを読み出してパルス列変調回路２２に送り、パルス列変調回路２２は当該データを１５ビットデータに変換する。この変換は、例えばメモリ２１から送られて来るデータをアドレス情報として、図６に示すデータが書き込まれたメモリからデータを読み出すことで実現できる。
【０３１６】
最初のラウンド０では、図６に示す１５ビットデータのＬＳＢだけを転送する。このデータａ´０，０をＬ２層の出力データｂ´０と時分割多重し、図１８（ｂ）に示すフォーマットで出力端子Ｐ０から出力するが、ラウンド０ではＬ２層の出力データｂ´０は不定である。
【０３１７】
端子Ｐ０から出るデータは隣接セルで受信されるが、図２（ｂ）に示すように回路は対称なので、その動作とともに、入力端子Ｐ１〜Ｐ６から隣接セルのデータを受信できる。メモリ２４Ａは、端子Ｐ０〜Ｐ６から入力されたＬ１層からのデータａ´０，０，ｑをメモリ２４Ａの０番地に格納する。メモリ６９Ａは、Ｌ２層からのデータｂ´０、ｑをメモリ６９Ａの０番地に格納するが、ラウンド０では前記ｂ´０、ｑは不定である。
【０３１８】
その後、端子４１に入力される信号と端子４２Ａに入力される信号がアクティブになりカウンター２０とカウンター２３Ａが１になると、メモリ２１の１番地のデータが読み出されてパルス列変調回路２２に送られて１５ビットデータに変換され、そのＬＳＢだけが端子Ｐ０へ送られる。
【０３１９】
そして、端子Ｐ０〜Ｐ６からのデータが束ねられて７ビット幅のデータになり、Ｌ１層からのデータａ´１，０，ｑがメモリ２４Ａの１番地に、Ｌ２層からのデータｂ´１、ｑがメモリ６９Ａの１番地に、それぞれ格納される。このようにして、カウンター２０と２３Ａが２５５を超えて０に戻るまで、データの転送が行われるとラウンド０が終了する。
【０３２０】
次のラウンド１では、パルス列変調回路２２は１５ビットデータのビット１のデータを送出し、転送されたデータはＬ１層のデータはメモリ２４Ｂに書き込まれ、Ｌ２層の出力データはメモリ６９Ｂに書き込まれる。この様にメモリ２４Ａと２４Ｂ、及びメモリ６９Ａと６９Ｂをそれぞれ交互に使ってデータ転送を行う。
【０３２１】
ラウンド１４でビット１４の転送が終わるとメモリ２１に入っているデータの処理が終わる。ニューラルネットでの処理を継続したい場合は、メモリ２１に新たなデータを書き込むか、メモリ２１をダブルバッファ構造にしてニューラルネットでの処理と並行して次のデータを用意しておくか、或いはメモリ２１の同じデータを使って処理を繰り返す。
【０３２２】
次に、Ｌ２層のニューロンの動作について説明する。ラウンド０ではメモリ２４Ａのデータが不定なので、このデータを使って演算したＬ２層の出力は不定である。ラウンド０が終わりメモリ２４Ａに１，７９２個のａ´ｉ，０，ｑが揃うと、次のラウンド１でＬ２層のデータ処理を行う。
【０３２３】
しかし、ラウンド０でＬ２層の出力が不定であったので、これを格納したメモリ６９Ａの内容は不定である。従って、この状態でＬ２層の演算を行うと、Ｌ２層の出力が再び不定になってしまう。これを防ぐためにラウンド１の間、端子６８を０にして、アンドゲート８４の出力を０に固定し、Ｌ２層からのフィードバック情報を無視する。Ｌ１層からのデータに関してＬ２層では１ニューロン当たり１，７９２回の積和演算をしなければならないので、Ｌ１層側の１，７９２倍のスピード即ち、１１４．７［ＭＨｚ］で計算する。Ｌ２層のｊ番目の仮想ニューロンではΣ（ａ´ｉ，０，ｑ×ｗ´ｉ，ｑ，ｊ）を計算する。ここでΣはｉとｑに関する総和を表している。
【０３２４】
メモリ２４Ａは、６４［ｋＨｚ］の２５６倍の１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ａ´ｉ，０，ｑにする。その動作とともに、シナプス結合の重みメモリ２５から、対応する８ビットの重みデータｗ´ｉ，ｑ，ｊを１１４．７［ＭＨｚ］で読み出し、アンドゲート２６でａ´ｉ，０，ｑと乗算して８ビットの０又はｗ´ｉ，ｑ，ｊにする。
【０３２５】
こうして得られたａ´ｉ，０，ｑ×ｗ´ｉ，ｑ，ｊを加算器２７に入力し、Σ（ａ´ｉ，０，ｑ×ｗ´ｉ，ｑ，ｊ）を計算する。総和計算の最初に端子６３に入力される信号が０になり、加算器２７の片側入力は０になる。ｉとｑについての１，７９２回の総和計算が終わると、加算器７４を介して当該総和を大小比較器７５へ送り、そこで閾値θと比較し、総和が閾値θよりも大きければ出力を１にし、小さければ出力を０にする。
【０３２６】
この出力は１１４．７［ＭＨｚ］のパルス状に出るので、そのままでは使い難い。そこで、これを適当なタイミング信号６５によってラッチ７６に保持し６４［Ｋｂｐｓ］の信号ｂ´ｊにする。つまり、ラウンド１では６４［Ｋｂｐｓ］のスピードでＬ２層のデータが生成され、Ｐ０端子から出力されてメモリ６９Ｂに保存される。
【０３２７】
ラウンド２ではメモリ６９Ｂに格納されているＬ２層の出力データが有効である。そこで、端子６８に入力する信号を１にし、Ｌ２層からのフィードバック情報を有効にする。メモリ６９Ｂは、６４［ｋＨｚ］の２５６倍の１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ｂ´ｋ，ｑにする。
【０３２８】
その動作とともに、フィードバックループを形成するシナプス結合の重みメモリ７０から、対応する８ビットの重みデータｗ´ｋ，ｑ，ｊを１１４．７［ＭＨｚ］で読み出し、アンドゲート７１でｂ´ｋ，ｑと乗算して８ビットの０又はｗ´ｋ，ｑ，ｊにする。アンドゲート７１は、算出したｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｊを加算器７２に出力する。
【０３２９】
加算器７２は、アンドゲート７１から当該ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｊを受け取り、ｋとｑに関する総和Σ（ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｊ）を計算する。ここで、総和計算の最初に端子６３に入力される信号が０になり、アンドゲート７３の出力が０になり、その結果、加算器７２の片側入力データは０になる。加算器７２は、ｋとｑについての１，７９２回の総和計算が終わると、当該総和を加算器７４へ出力する。
【０３３０】
加算器７４は、Ｌ２層からのフィードバック情報である加算器７２の出力と、Ｌ１層からのデータの総和計算をした加算器２７の出力とを加算し、加算後の和を大小比較器７５へ出力する。
【０３３１】
大小比較器７５は、加算器７４から前記和を受け取り、当該和を閾値θと比較し、和が閾値θよりも大きければ出力を１にし、小さければ出力を０にする。大小比較器７５の出力は、端子６５に入力されるタイミング信号によりラッチ７６に保持され、６４［Ｋｂｐｓ］の信号ｂ´ｊとして、セレクタ７７に出力する。
ラウンド３以降は、メモリ２４Ａとメモリ２４Ｂ、及びメモリ６９Ａとメモリ６９Ｂをそれぞれ交互に使いながら、ラウンド２と同様の動作をする。
【０３３２】
次に、Ｌ３層のニューロンの動作について説明する。ラウンド０及びラウンド１ではメモリ６９Ａ、６９Ｂとも値が不定なので、Ｌ３層では演算処理ができない。ラウンド１でＬ２層のニューロンの出力ｂ´ｊが確定し、それがメモリ６９Ｂに格納されるので、ラウンド２からＬ３層でのデータ処理が可能になる。
【０３３３】
Ｌ２層からのデータに関してＬ３層では１ニューロン当たり１，７９２回の積和演算をしなければならないが、Ｌ３層のニューロン数はＬ２層の１／８（＝  ３２／２５６）なので、Ｌ２層のデータ出力速度の２２４倍（＝  １，７９２／８）の１４．４ＭＨｚで積和演算をすれば良い。
【０３３４】
しかし、メモリ６９Ａ、６９ＢのデータはＬ２層へのフィードバック信号として１１４．７［ＭＨｚ］でアンドゲート７１に供給されるので、それと異なる速度でデータを読み出すのは不都合である。そこで、Ｌ３層の処理も１１４．７［ＭＨｚ］で行うことにする。
【０３３５】
ラウンド２になると、メモリ６９Ｂは、６４［ｋＨｚ］の２５６倍の１６．３８４［ＭＨｚ］で７ビットのデータを読み出し、それを並直変換して７倍の１１４．７［Ｍｂｐｓ］の１ビット信号ｂ´ｋ，ｑにし、アンドゲート７９に出力する。この信号はＬ２層へフィードバック信号として供給されるものと同じである。その動作とともに、Ｌ３層のシナプス結合の重みメモリ７８は、対応するシナプス結合の重みデータｗ´ｋ，ｑ，ｍを１１４．７［ＭＨｚ］で読み出し、アンドゲート７９に出力する。アンドゲート７９はＬ２層の出力データｂ´ｋ，ｑとシナプス結合の重みデータｗ´ｋ，ｑ，ｍを乗算して８ビットの０又はｗ´ｋ，ｑ，ｍにする。
【０３３６】
アンドゲート７９は、こうして得られたｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍを加算器８０に出力する。加算器８０は受け取ったデータｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍのｋとｑに関する総和Σ（ｂ´ｋ，ｑ×ｗ´ｋ，ｑ，ｍ）を計算する。総和計算の最初に端子６３に入力される信号が０になり、アンドゲート８１の出力が０になり、加算器８０の片側入力データが０になる。ｋとｑについての１，７９２回の総和計算が終わると、加算器８０は、当該総和を大小比較器８２へ出力する。
【０３３７】
大小比較器８２は、加算器８０から当該総和を受け取り、当該総和と閾値θと比較する。大小比較器８２は、前記総和が閾値θよりも大きければ、ラッチ８３に１を出力し、前記総和が閾値θよりも小さければ、ラッチ８３に０を出力する。
【０３３８】
ラッチ８３は、大小比較器８２が出力した値を、端子６５に入力されるタイミング信号により保持し、６４［Ｋｂｐｓ］でＬ３層のｍ番目のニューロンの出力信号を端子６７に出力する。但し、Ｌ３層のニューロン数は３２なので、ラウンドの初めから３２ビット目までのデータが有効である。ラウンド３以降はラウンド２と同様の動作になる。
【０３３９】
以上説明したように、Ｌ１層の出力データとＬ２層の出力データを時分割多重化し、１本の信号線を用いて隣接するセル間でデータ転送することにより、フィードバックループを持つ３層構造の大規模ニューラルネットを実現できる。その際に、Ｌ２層からＬ３層へ送るデータと、Ｌ２層からＬ２層へのフィードバックデータとを共通化できる。
【０３４０】
本実施例ではニューラルネットが３層構造であるとしたが、本発明はこれに制限されるものではなく、一般的に２層以上のニューラルネットに適用できる。その場合は図１８（ｂ）又は図１８（ｃ）に示すように、信号線Ｓに中間層又は出力層のニューロンからの出力データを時分割多重化すれば良い。
【０３４１】
また、本実施例ではＬ２層からの出力データを同じＬ２層へフィードバックするとして説明したが、本発明はこれに制限されるものではない。一般的に或る層Ａからの出力データが次段の層Ｂの入力になるとともに、層Ｃへのフィードバックデータとなる場合でも同様に適用できる。
【０３４２】
更に、本実施例ではフィードバックループが、一系統だけ（Ｌ２層からＬ２層へ）存在するとして説明したが、本発明はこれに制限されるものではない。一般的に複数系統のフィードバックループ（例えばＬ２層からＬ２層へと、Ｌ４層からＬ３層へ）を持つニューラルネット、或いは一つの層に複数の層からのフィードバックループ（例えばＬ２層とＬ３層からＬ２層へ）が有るニューラルネット、或いは１つの層から複数の層へのフィードバックループ（例えばＬ３層からＬ２層とＬ３層へ）が有るニューラルネットにも適用できる。
【０３４３】
また、本発明の実施例ではパルスニューラルネットについて説明したが、本発明はこれに制限されるものではない。
なお、図１９では、Ｌ１層からの信号の総和計算結果と、Ｌ２層からのフィードバックの総和計算結果を加えるために加算器７４を用いているが、例えば加算器２７と加算器７２の動作速度を１１４．７［ＭＨｚ］ではなく、その１，７９３／１，７９２倍以上とすれば、加算器７４を省略して加算器２７で代行できる。
【０３４４】
＜回路ユニットの実施例５の変形例＞
図２０は、本発明の実施例５の変形例である、Ｌ３層のニューロン群の出力をＬ２層のニューロン群へフィードバックするニューラルネットの回路ユニットの回路図である。図１９の回路と同じ素子には同じ番号が振ってある。図１９の２入力セレクタ７７を３入力セレクタ９０に置き換え、出力端子Ｐ０からＬ１層の出力ａ´ｉ，ｐとＬ２層の出力ｂ´ｊとＬ３層の出力ｃ´ｍを時分割多重化して出力する。また、７［ｂｉｔ］×３２のメモリ９１Ａとメモリ９２Ｂとアンドゲート９２とを追加し、Ｌ２層へフィードバックするＬ３層の出力データｃ´ｍ，ｑと、Ｌ３層への入力となるＬ２層の出力データｂ´ｋ，ｑとを分離する。動作の詳細な説明については省略する。
【０３４５】
＜回路ユニットの実施例５の効果＞
ニューラルネット内の各人工ニューロンは、仮想空間内で近傍のニューロンとだけシナプス結合を作ると仮定することで、ニューロン間の配線がローカルな少数の信号線だけで行えるようになり、人間の脳のような超大規模なニューラルネットを実現する際の配線問題を解決できる。
【０３４６】
更に、そのニューラルネットが多層構造と、異なる層間又は同一層へのフィードバックループ持つ場合でも、中間層の出力データを前述のローカルな信号線に時分割多重化することで、容易に配線問題を解決できる。
中間層ニューロンからの出力データは、次の層への入力データになるとともに、自分自身と同じ層又は他の層へのフィードバックデータになるが、これらを別々に伝送する必要はなく、伝送したデータは共通に利用可能である。
【０３４７】
また、シナプス結合の重みデータとの乗算回路に入るフィードバック信号は１ビット幅のデータなので、幾つかの層からの信号をセレクタによって容易に切り替えられる。例えば、Ｌ１層、Ｌ２層、Ｌ３層、Ｌ４層の４層構造のニューラルネットにおいて、或る用途ではＬ２層からＬ２層へのフィードバックが必要であり、別の用途ではＬ３層からＬ２層へのフィードバックが必要であるとする。
【０３４８】
この層構造を実現する為にはＬ１層、Ｌ２層、Ｌ３層の出力データを、図１８（ｂ）の信号Ｓを拡張する形で時分割多重化して１本の信号線として隣接セル間の配線に用いる。すると自分自身のセル及び、隣接セル内のＬ１層、Ｌ２層、Ｌ３層のデータが全て自セルのメモリに揃い、これらは１ビット幅の信号としてメモリから読み出される。
【０３４９】
そこで、Ｌ２層からのデータとＬ３層からのデータを切り替える１ビットセレクタを一つ用意し、これをニューラルネット内のレジスタ又は外部信号で制御すれば、フィードバック経路を容易に切り替えることができる。Ｌ４層が無い３層構造の場合でも、出力層Ｌ３のデータを隣接セル間の信号線に時分割多重化して出力し、その信号を受け取るメモリを用意すれば、同様にフィードバックループを切り替えることができる。
【０３５０】
なお、前述のセレクタを静的に制御してＬ２層からのフィードバックか、或いはＬ３層からのフィードバックかを二者択一で決定することもできるが、これを動的に制御し、Ｌ２層からフィードバックとＬ３層からのフィードバックを例えば半分ずつにする、ということも容易に実現できる。
【０３５１】
また、本発明の実施例５のＬ２層のニューロンまたはＬ３層のニューロンの閾値にオフセットと揺らぎを与えることができる。例えば、図１９の回路ユニットにおいて、大小比較器７５の入力端子６４に、図１６の閾値算出回路３８の加算器５９の出力端子を接続すれば、Ｌ２層のニューロンの閾値にオフセットと揺らぎを与えることができる。
【０３５２】
＜全実施例共通の変形例＞
なお、本発明の実施例２から実施例５でも、図９に示す時間履歴を考慮する回路を挿入して、時間履歴を考慮したニューラルネットを実現することができる。
【０３５３】
なお、本発明の実施例では、シナプス結合の重みデータを８ビット幅としたが、本発明はこれに制限されるものではなく、任意のビット幅の重みデータを持つニューラルネットに適用できる。
本発明の実施例では、Ｌ１層のニューロンの入力データを４ビット幅としたが、本発明はこれに制限されるものではなく、任意のビット幅の入力データを扱うニューラルネットに適用できる。
【０３５４】
本発明の実施例では、１個のセルに含まれるＬ１層のニューロン数とＬ２層のニューロン数をともに２５６としたが、本発明はこれに制限されるものではなく、Ｌ１層、Ｌ２層とも２以上の任意の数のニューロンを含むニューラルネットに適用できる。
【０３５５】
以上、本発明の実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０３５６】
ＣＮ  セル（ポリトープ）
１０  回路ユニット
２０  ８ビットカウンター
２１  メモリ（第１の記憶部）
２２  パルス列変調回路（出力回路）
２３Ａ  ８ビットカウンター
２３Ｂ  ８ビットカウンター
２３Ｃ  ８ビットカウンター
２４Ａ  メモリ
２４Ｂ  メモリ
２５  メモリ（第２の記憶部）
２６  アンドゲート（乗算回路）
２７  加算器（加算器）
２８  アンドゲート
２９  大小比較器
３０  ラッチ
３１  カウンター
３２  加減算器（加算器）
３３  符号格納器（符号情報出力回路）
３４  大小比較器（符号情報出力回路）
３４Ｂ  アンドゲート（符号情報出力回路）
３５  メモリ（パワーニューロン情報出力回路）
３６  １ビット左シフタ（演算回路）
３７  大小比較器（パワーニューロン情報出力回路）
３７Ｂ  アンドゲート（パワーニューロン情報出力回路）
３８  閾値算出回路
５０  乗算器（乗算回路）
５１  セレクタ
５２  乗算器
５３  メモリ（第３の記憶部）
５４  並直変換回路
５５  メモリ（第４の記憶部）
５６  ８ビットカウンター
５７  メモリ（閾値オフセット量記憶部）
５８  １２ビット加算器
５９  １３ビット加算器
６０  ８ビット疑似乱数発生器
６９Ａ  メモリ
６９Ｂ  メモリ
７０  メモリ（第５の記憶部）
７１  アンドゲート（乗算回路）
７２  加算器
７３  アンドゲート
７４  加算器
７５  大小比較器
７６  ラッチ
７７  ２入力マルチプレクサ
７８  メモリ（第６の記憶部）
７９  アンドゲート（乗算回路）
８０  加算器
８１  アンドゲート
８２  大小比較器
８３  ラッチ
８４  アンドゲート
９０  ３入力マルチプレクサ
９１Ａ  メモリ
９１Ｂ  メモリ
９２  アンドゲート
【図１】
0005436327.tif 000002
【図２】
0005436327.tif 000003
【図３】
0005436327.tif 000004
【図４】
0005436327.tif 000005
【図５】
0005436327.tif 000006
【図６】
0005436327.tif 000007
【図７】
0005436327.tif 000008
【図８】
0005436327.tif 000009
【図９】
0005436327.tif 000010
【図１０】
0005436327.tif 000011
【図１１】
0005436327.tif 000012
【図１２】
0005436327.tif 000013
【図１３】
0005436327.tif 000014
【図１４】
0005436327.tif 000015
【図１５】
0005436327.tif 000016
【図１６】
0005436327.tif 000017
【図１７】
0005436327.tif 000018
【図１８】
0005436327.tif 000019
【図１９】
0005436327.tif 000020
【図２０】
0005436327.tif 000021
【図２１】
0005436327.tif 000022
【図２２】
0005436327.tif 000023
【図２３】
0005436327.tif 000024