(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.
【発明の概要】
【発明が解決しようとする課題】
【００２４】
生体の脳内では日常的に、ニューロンの軸索が伸長して、ターゲットとなるニューロンの樹状突起や細胞体との間に新しいシナプス結合を作ったり、情報伝達に使われなくなったシナプス結合が分解されて消滅したりしている。このように情報処理に有効な神経回路網が形成される過程を、「自己組織化」と呼ぶ。
【００２５】
また、神経回路網で信号が頻繁に通る経路は更に信号が良く通るようになり、そうでない経路は信号が通り難くなることを「学習」と呼ぶ。脳を模倣するニューラルネットを電子回路として実現するには、自己組織化と学習の機構を如何にして実装するかが、重要な技術的課題となっている。
【００２６】
自己組織化問題を単純化して言えば、ニューロン間の配線問題である。ニューラルネットには元々、そこに内蔵されるニューロン数が増えると、ニューロン間の配線量が膨大になり、大規模なニューラルネットを実現するのが困難になるという問題がある。そのため、これまで、自己組織化機能を持つ大規模ニューラルネットを、電子回路として実装する方法は示されていなかった。
【００２７】
そこで本発明は、上記問題に鑑みてなされたものであり、多数のニューロン間を接続するのに必要な配線の数を削減すると同時に、自己組織化機能を持つニューラルネットを実現する電子回路を提供することを課題とする。
【課題を解決するための手段】
【００２８】
上記の課題を解決するために、請求項１に記載した発明は、複数の層と、前記層に存在する複数の人工ニューロンと、前記人工ニューロンと他の層の人工ニューロンとを結びつけるシナプス結合とを有し、前記複数の層のうち第１の層の人工ニューロンの出力データに前記シナプス結合の重み情報を乗じて第２の層の人工ニューロンに出力し、第２の人工ニューロンにおいて情報処理するニューラルネットを実現する電子回路であって、二次元以上の仮想空間において、当該仮想空間に任意の数の任意のポリトープ（例えば、実施形態におけるセルＣＮ）を配置し、前記ポリトープ毎に配置される回路ユニット（例えば、実施形態における回路ユニット１０）と、互いに隣接するポリトープに配置された前記回路ユニット間で信号を伝送する配線と、を備え、前記回路ユニットは、第１の層の人工ニューロンの出力データを同一回路ユニット内の第２の層の人工ニューロンと、自身のポリトープに隣接するポリトープに配置された回路ユニットの第２の層の人工ニューロンへ出力する第１の出力部（例えば、実施形態における第１の出力部１）と、
自身のポリトープに配置された回路ユニットと、自身のポリトープに隣接するポリトープに配置された回路ユニットと、から前記第１の層の人工ニューロンの出力データを受け取る入力部（例えば、実施形態における入力部２）と、第１の層の人工ニューロンから第２の層の人工ニューロンへ情報を伝達する割合を決めるためのシナプス結合の重み情報を保持する重み記憶部（例えば、実施形態における重み記憶部３）と、前記第１の層の人工ニューロンの出力データと前記シナプス結合の重み情報との積を算出する乗算部（例えば、実施形態における乗算部４）と、前記積の総和を算出する加算部（例えば、実施形態における加算部５）と、前記積の総和と所定の閾値との比較結果に基づいて、第２の層の人工ニューロンの出力データを決定する比較決定部（例えば、実施形態における比較決定部６）と、前記第２の層の人工ニューロンの出力データを出力する出力部（例えば、実施形態における第２の出力部７）と、前記第１の層の人工ニューロンの出力データと前記第２の層の人工ニューロンの出力データとに基づいて、前記シナプス結合の重み情報を変更する重み変更部（例えば、実施形態における重み変更部８）と、を備えることを特徴とする電子回路である。
【００２９】
これにより、隣接するポリトープに出力するデータを時分割多重化することができるので、隣接するポリトープへの出力信号線を１本にすることができる。また、第１のニューロンの出力データと、第２のニューロンの出力データとに基づいて、シナプス結合の重み情報を変更することができる。
【００３０】
請求項２に記載した発明は、請求項１に記載の発明において、前記加算部は、前記ポリトープに配置された回路ユニット毎に前記第２の層の人工ニューロンの全てのシナプス結合の重み情報の総和を算出し、前記重み変更部は、更に前記シナプス結合の重み情報の総和が第１の所定の値と第２の所定の値の範囲に入るよう、前記シナプス結合の重み情報を変更することを特徴とする。
これにより、シナプス結合の重み情報が所定の範囲で変化するように制御することができる。
【００３１】
請求項３に記載した発明は、請求項２に記載の発明において、前記シナプス結合毎に疑似乱数を生成する疑似乱数生成部（例えば、実施形態における疑似乱数生成部７０）と、前記重み情報の増減を決定する学習信号生成部（例えば、実施形態における学習信号生成部１２）と、を備え、前記学習信号生成部は、前記シナプス結合の重み情報を増加させるか否かの判定基準となる第１の基準値を記憶する第１の記憶部（例えば、実施形態における確率イネーブル信号発生器７１のアップダウンカウンター２０２）と、前記シナプス結合の重み情報を減少させるか否かの判定基準となる第２の基準値を記憶する第２の記憶部（例えば、実施形態における確率イネーブル信号発生器７２のアップダウンカウンター２０２）と、前記重み情報の総和が、前記第１の所定の値以下のときに前記第１の基準値を増加させ、前記重み情報の総和が前記第１の所定の値よりも大きいときに前記第１の基準値を減少させる第１の基準値変更部（例えば、実施形態における確率イネーブル信号発生器７１の大小比較器２０１）と、前記重み情報の総和が前記第２の所定の値以上のときに前記第２の基準値を増加させ、前記重み情報の総和が前記第２の所定の値よりも小さいときに前記第２の基準値を減少させる第２の基準値変更部（例えば、実施形態における確率イネーブル信号発生器７２の大小比較器２０１）と、前記第１の基準値と前記疑似乱数の大小比較結果に基づいて前記シナプス結合の重みの増加を許可する第１の制御信号を生成する第１の大小比較部（例えば、実施形態における確率イネーブル信号発生器７１の８ビット大小比較器２０３）と、前記第２の基準値と前記疑似乱数の大小比較結果に基づいて前記シナプス結合の重みの減少を許可する第２の制御信号を生成する第２の大小比較部（例えば、実施形態における確率イネーブル信号発生器７２の８ビット大小比較器２０３）と、を備え前記学習信号生成部は、前記第１の層の人工ニューロンの出力データと、前記第２の層の人工ニューロンの出力データと、前記第１の制御信号と、前記第２の制御信号と、に基づいて、前記シナプス結合の重み情報の増減を決定することを特徴とする。
これにより、シナプス結合の重み情報の総和が所定の範囲に入るように、確率的にシナプス結合の重み情報を変更することができる。
【００３２】
請求項４に記載した発明は、請求項１から請求項３のいずれかに記載の発明において、前記重み変更部は、前記シナプス結合の重み情報の値が０のとき、前記シナプス結合の重み情報の値を０から所定の値に変更することを特徴とする。
これにより、前記シナプス結合の重み情報を０から所定の値に変更することができるので、新規にシナプス結合を生成することができる。
【００３３】
請求項５に記載した発明は、請求項４に記載の発明において、前記重み変更部は、前記ポリトープに配置された回路ユニット毎に前記シナプス結合の重み情報のうちその値が０であるものの個数を計数し、該０の個数が所定の範囲に入るように、前記シナプス結合の重み情報の値を０から所定の値に変更することを特徴とする。
これにより、シナプス結合の重み情報が０である個数を算出し、当該０の個数が所定の範囲に入るように、新規に作成するシナプス結合の数を調節することができる。
【００３４】
請求項６に記載した発明は、請求項５に記載の発明において、前記重み変更部は、前記シナプス結合の重み情報を０から所定の値に変更するか否かの判定基準となる第３の基準値を記憶する第３の記憶部（例えば、実施形態における確率イネーブル信号発生器７３内のアップダウンカウンター２０２）と、疑似乱数を生成する疑似乱数生成部（例えば、実施形態における乱数生成部１１）と、を備え、前記重み変更部は、前記シナプス結合の重みが０の個数が、第３の所定の値以下のときに前記第３の基準値を増加させ、前記個数が第３の所定の値よりも大きいときに前記第３の基準値を減少させ、前記疑似乱数発生部は、前記シナプス結合毎に疑似乱数を発生する。前記重み変更部は、前記第３の基準値と前記疑似乱数の大小比較結果に基づいて、前記シナプス結合の値を０から所定の値に変更することを許可する第３の制御信号を生成する。
前記重み変更部は、前記シナプス結合の重み情報が０のときに、前記第３の制御信号に基づいて、前記シナプス結合の重み情報を０から所定の値に変更することを特徴とする。
これにより、新規に作成するシナプス結合の数を確率的に調節でき、その確率はシナプス結合の重み情報の０の個数に応じて増減するので、シナプス結合の重み情報の０の個数が第３の所定の値付近になるように調節することができる。
【００３５】
請求項７に記載した発明は、請求項４に記載の発明において、前記重み変更部は、疑似乱数を生成する疑似乱数生成部（例えば、実施形態における疑似乱数生成部１１）を備え、前記重み変更部は、前記ポリトープに配置された回路ユニット毎に前記シナプス結合の重み情報のうちその値が０であるものの個数を計数し、前記０の個数と前記疑似乱数との比較に基づいて、前記シナプス結合の重み情報を０から所定の値に変更することを特徴とする
これにより、シナプス結合の重み情報の値に含まれる０の個数が所定の個数と疑似乱数との比較に基づいてシナプス結合の重み情報を０から所定の値に変更するので、新規に作成するシナプス結合の数を確率的に調節することができる。
【００３６】
請求項８に記載した発明は、請求項１から請求項７のいずれかに記載の発明において、前記回路ユニットは、前記第２の層の人工ニューロンのシナプス結合において、前記第１の層の人工ニューロンの出力データの入力が不要なシナプス結合の重み情報を０にすることを特徴とする。
これにより、第１の層の人工ニューロンから第２の層の人工ニューロンへの情報伝達が不要なシナプス結合についても、そのシナプス結合に対応する配線を無くすことなく、当該第１の層の人工ニューロンから第２の層の人工ニューロンへの情報伝達を遮断することができる。
【発明の効果】
【００３７】
請求項１に記載した発明によれば、ポリトープから出力する信号用の配線を１本にしたまま、隣接するポリトープの人工ニューロンから出力されたデータを受け取ることができることにより、ニューロン間の配線数を少なくすることができる。また、第２のメモリが保持するシナプス結合の重み情報を変更することができるので、ニューラルネットに学習機能と、自己組織化機能を持たせることができる。
【００３８】
請求項２に記載した発明によれば、所定の領域毎のシナプス結合の重み情報の総和  が所定の範囲に入るように、各シナプス結合の重み情報の変化を制御することができるので、生体の脳にあるニューロンのシナプス結合の重みの変化を模倣することができる。
【００３９】
請求項３に記載した発明によれば、シナプス結合の重み情報の総和が所定の範囲に入るように、確率的にシナプス結合の重み情報を変更することができるので、生体の脳にあるニューロンのシナプス結合の重みの変化の揺らぎを模倣することができる。
【００４０】
請求項４に記載した発明によれば、新規に作成するシナプス結合の数を自律的に調節することができるので、回路ユニットは、外部制御装置によらずにシナプス結合の数を調節することができる。
【００４１】
請求項５に記載した発明によれば、所定の領域内でシナプス結合が形成される割合を自律的に調節することができるので、回路ユニットは、外部制御装置によらずにシナプス結合の数を調節することができる。
【００４２】
請求項に記載した発明によれば、所定の領域内でシナプス結合が形成される割合を、適当な確率条件の下で自律的に調節することができるので、回路ユニットは、外部制御装置によらずにシナプス結合の数を調節することができる。
【００４３】
請求項７に記載した発明によれば、シナプス結合の重み情報を変更でき、新規に作成するシナプス結合の数を確率的に調節することができるので、回路ユニットは、外部制御装置によらずにシナプス結合の数を調節することができる。
【００４４】
請求項８に記載した発明によれば、シナプス結合がなくなった部分の配線を物理的に無くす必要性がないので、最初に所定の領域内のＬ１層の全てのニューロンとＬ２層の全てのニューロンとの組み合わせのシナプス結合に相当する配線を用意しておけば、後で回路を入れ替えるなどのメンテナンスをしなくてよい。
【図面の簡単な説明】
【００４５】
【図１】本発明の一実施形態によるニューラルネットの模式図と、Ｌ１層のニューロンの出力を時分割多重化した信号を説明するための図である。
【図２】本発明の一実施形態による回路ユニット間の配線を説明するための図である。
【図３】本発明の一実施形態による仮想平面を分割して、回路ユニット間の配線を説明するための図である。
【図４】本発明の一実施形態による仮想空間を立方体で分割して、回路ユニット間の配線を説明するための図である。
【図５】本発明の一実施形態による回路ユニット１のブロック構成図である。
【図６】本発明の一実施形態による重み変更部８のブロック構成図である。
【図７】本発明の一実施形態による回路ユニット１を、パルスニューラルネットを用いたニューロン群で模擬した回路ユニット１０の回路図である。
【図８】データ変換用メモリが保持するデータ変換テーブルを説明するための図である。
【図９】１増減回路６６の回路図である。
【図１０】８ビット疑似乱数発生器（ガロアＬＦＳＲ）の回路図である。
【図１１】Ｌ１層のニューロン２０ｉが興奮性ニューロンのときの、学習信号生成部１２の回路図である。
【図１２】確率イネーブル信号発生回路の回路図である。
【図１３】Ｌ１層のニューロン２０ｉが抑制性ニューロンのときの、学習信号生成部１２の回路図である。
【図１４】Ｌ１層のニューロン２０ｉが興奮性ニューロンまたは抑制性ニューロンであるときの、学習信号生成部１２の回路図である。
【図１５】ニューラルネットの一部を表した模式図である。
【図１６】ＡＥＲにおいてニューロン間のデータ転送に使うデータフォーマットを示した図である。
【発明を実施するための形態】
【００４６】
以下、本発明の実施形態について、図面を参照して詳細に説明する。まず、本発明のニューラルネットの構成について説明する。図１（ａ）は、ニューラルネットの構成を表した図である。ニューラルネットは、Ｌ１層およびＬ２層の２つの層から構成されている。
【００４７】
本発明のニューラルネットは、第１の層（Ｌ１層）のニューロン２０ｉ（ｉは０から４，８６３の整数）と、第２の層（Ｌ２層）のニューロン２２ｊ（ｊは０から４，８６３の整数）と、Ｌ１層のニューロン２０ｉからＬ２層のニューロン２２ｊへの配線２１ｉと、Ｌ１層のニューロン２０ｉの出力がＬ２層のニューロン２２ｊに作るシナプス結合２３ｉ，ｊと、Ｌ２層のニューロン２２ｊの出力端子２４ｊを有する。
【００４８】
シナプス結合には、Ｌ１層のニューロンの出力情報を、Ｌ２層のニューロンへどの程度の割合で伝えるかというシナプス結合の重み情報ｗｉ，ｊがある。Ｌ１層のニューロンとＬ２層のニューロンとの間では、シナプス結合が一様に形成されるが、Ｌ１層の特定ニューロンからＬ２層の特定ニューロンへの情報伝達が不要なシナプス結合については、そのシナプス結合の重み情報ｗｉ，ｊを０にすることで、実質的に無効化できる。
【００４９】
Ｌ１層のニューロン２０ｉを１９個のまとまり（以下、セルと称する）に等分する。そうすると、１つのセルあたりに存在するＬ１層のニューロン２０ｉは２５６個になる。各セルにおいて、ニューロン２０ｉの番号ｉを振り直し、０から２５５の整数にする。同様にして、Ｌ２層のニューロン２２ｊを１９個のセルに等分する。そうすると、１つのセルあたりに存在するＬ２層のニューロン２２ｊは２５６個になる。各セルにおいて、ニューロン２２ｊの番号ｊを振り直し、０から２５５の整数にする。上記の操作によって、図１（ａ）のニューラルネットは、１９個のセルＣＮ（Ｎは０から１８の整数）で分割される。
【００５０】
図１（ｂ）は、セルＣＮのＬ１層のニューロンの出力データを、時分割多重化した信号を説明するための図である。セルＣＮの回路は、自セルのＬ１層の２５６個のニューロンの出力データを、図１（ｂ）に示すように時分割多重化して、信号ｘｉ，ｔとしてＰ０端子から出力する。
【００５１】
信号ｘｉ，ｔ（ｉは０から２５５の整数）は、ｉ番目のニューロンのｔ番目（ｔは０以上の整数）ラウンドの出力である。すなわち、ｘ０，ｔはニューロン２００の出力、ｘ１，ｔはニューロン２０１の出力、…，ｘ２５５，ｔはニューロン２０２５５の出力である。ここで、ラウンドとはＬ１層の２５６個のニューロンの出力データを１回処理する処理単位のことである。１ラウンドの処理時間を４［ｍｓ］とすると、２５６個のデータｘｉ，ｔを４［ｍｓ］で伝送するので、この信号線のデータ伝送速度は６４（＝２５６［ｂｉｔ］÷４［ｍｓ］）［ｋｂｐｓ］である。
【００５２】
図２は、本発明の一実施形態による、回路ユニット間の配線を説明するための図である。脳内の神経細胞は基本的に、物理的に近くの神経細胞とだけシナプス結合を作っている。この特徴を参考にしてニューロン間の配線問題を解決する。
図２（ａ）は、仮想平面に複数のセルを配置した図である。図２（ａ）では、各セルは、正六角形の形状を有する。図２（ｂ）は、セル間の配線を示した図である。各セルには１つの回路ユニットが存在する。
【００５３】
図２（ａ）ではセルが１９個在るので、Ｌ１層とＬ２層にそれぞれ４，８６４（＝２５６×１９）個のニューロン２０ｉと２２ｊが入っていることになる。各セルには１個の出力端子Ｐ０と、６個の入力端子Ｐ１〜Ｐ６とがある（図２（ｂ））。
【００５４】
図２（ｂ）に示すように、或るセルＣＮの回路ユニットの出力端子Ｐ０は、隣接するセル（以下、隣接セルと称する）の回路ユニットの入力端子とだけ接続される。また、或る回路ユニットの入力端子と、その入力端子に接続される回路ユニットの位置とには、一定の規則がある。ここでは、セルＣ０を例に説明する。図２（ｂ）に示すように、セルＣ０の入力端子Ｐ１は、セルＣ０の真上の隣接セルＣ１の出力端子Ｐ０と接続される。
【００５５】
同様にして、セルＣ０の入力端子Ｐ２は、セルＣ０の右上の隣接セルＣ２の出力端子Ｐ０と接続される。セルＣ０の入力端子Ｐ３は、セルＣ０の右下の隣接セルＣ３の出力端子Ｐ０と接続される。セルＣ０の入力端子Ｐ４は、セルＣ０の真下の隣接セルＣ４の出力端子Ｐ０と接続される。セルＣ０の入力端子Ｐ５は、セルＣ０の左下の隣接セルＣ５の出力端子Ｐ０と接続される。セルＣ０の入力端子Ｐ６は、セルＣ０の左上の隣接セルＣ６の出力端子Ｐ０と接続される。
【００５６】
すなわち、或る回路ユニットの入力端子Ｐ１が受け取るデータは、真上に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。同様にして、或る回路ユニットの入力端子Ｐ２が受け取るデータは、右上に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。或る回路ユニットの入力端子Ｐ３が受け取るデータは、右下に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。或る回路ユニットの入力端子Ｐ４が受け取るデータは、真下に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。或る回路ユニットの入力端子Ｐ５が受け取るデータは、左下に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。或る回路ユニットの入力端子Ｐ６端子が受け取るデータは、左上に隣接する回路ユニットの出力端子Ｐ０から出力されたデータである。
【００５７】
或るセルのＬ２層では、当該セルのＬ１層から入力される信号と、隣接セルから入力端子Ｐ１〜Ｐ６に入力される６本の信号とを使って、当該セル及び隣接セルのＬ１層の全てのニューロンとシナプス結合を作る。つまり、例えば図２（ａ）のセルＣ０のＬ２層の各ニューロンは、セルＣ０及び隣接する６個のセルＣ１〜Ｃ６のＬ１層の１，７９２（＝２５６×７）個のニューロンと、シナプス結合を作る。
【００５８】
同様に、例えばセルＣ１のＬ２層の各ニューロンは、セルＣ１及び隣接する６個のセルＣ８、Ｃ９、Ｃ２、Ｃ０、Ｃ６、Ｃ７のＬ１層の全てのニューロンとシナプス結合を作る。このようにセルＣＮのＬ２層の各ニューロンは、自セル及び隣接セルのＬ１層の１，７９２個のニューロンとシナプス結合を作れるが、その中には不要なものも含まれる。
【００５９】
Ｌ２層の各ニューロンは仮想平面内で、自セル及び隣接セルのＬ１層のニューロン、即ちＬ２層の近傍のニューロンとシナプス結合を作るので、不要なシナプス結合は少なく、従ってシナプス結合の重み情報ｗｉ，ｊを０にする箇所は少ないと考えられる。
【００６０】
図１の実施例では、１つのセルに含まれるＬ１層及びＬ２層のニューロン数を２５６としたが、本発明はこれに制限されるものではなく、一般的に２以上の任意の数でも適用できる。また、Ｌ１層とＬ２層のニューロン数が同数である必要は無い。本実施例では、図１（ａ）に示すように、ニューラルネットの階層数を２とする。なお、本発明はこれに制限されるものではなく、３層以上に拡張することも可能である。
【００６１】
本実施例では、ニューロンを並べる仮想平面に、正六角形のセルを配置したが、本発明はこれに制限されるものではない。図３は、本発明の一実施形態による、仮想平面に正六角形以外のセルを配置して、回路ユニット間の配線を説明するための図である。例えば、図３（ａ）に示すように正方形を配置することも可能であるし、正三角形を配置することも可能である。
【００６２】
また、同一の多角形を並べるのではなく、図３（ｂ）に示すように、複数種類の多角形を並べることも可能である。更に、仮想平面は仮想的なものなので、多角形同士にオーバーラップが生じたり、或いは多角形間に隙間が生じたりしても特に問題はない。信号が入力されない入力端子はグランドに接続する。
【００６３】
多角形の形状は、Ｌ２層の１個のニューロンが形成できるシナプス結合の最大数に関係している。例えば、正六角形の場合は隣接セルの個数が６なので、１個のセルのＬ１層に２５６個のニューロンが含まれるとすると、Ｌ２層のニューロンでは最大２５６×７個のシナプス結合が形成される。
【００６４】
一方、図３（ａ）の場合は隣接セルの個数が８なので、最大２５６×９個のシナプス結合が形成される。図３（ｂ）の場合は、最大シナプス結合数が異なる３種類のセルが混在していると解釈することもできるし、正五角形以外の隙間を無視することもできる。更に言えば、仮想平面に正多角形ではなく、任意形状の図形を配置しても、本発明を同様に適用できる。
【００６５】
本実施例の説明では、仮想二次元平面を考えて、そこにニューロンを分散配置するとして説明したが、本発明はこれに制限されるものではない。人間の脳を模倣する場合は二次元平面で十分だが、これを超える構造として三次元空間でも同様に本発明を適用できる。
【００６６】
図４は、本発明の一実施形態による仮想空間に立方体を配置して、回路ユニット間の配線を説明するための図である。例えば、図４に示すように、仮想三次元空間に立方体を配置し、任意の立方体のＬ１層のニューロンは、当該立方体及びその立方体に隣接する立方体内の、Ｌ２層のニューロンとシナプス結合を作ることにする。
【００６７】
図４に示すように、セル毎に出力端子が立方体の上部に１個、入力端子が各面に１個存在する。或るセルに隣接するセルは、前後上下左右方向に面で隣接する合計６個のセルである。或るセルの前後上下左右の面に１個ずつ存在する入力端子が、隣接するセルの出力端子と接続されている。
【００６８】
他の実施例としては、セル毎に出力端子が立方体の上部に１個、入力端子が各面に１個（合計６個）、各辺に１個（合計１２個）、各角に１個（合計８個）すなわち合計２６個存在する。或るセルに隣接するセルは面、辺、角で隣接する合計２６個のセルである。或るセルに存在する２６個の入力端子が、それぞれ隣接する２６個のセルの出力端子と接続されている。
【００６９】
また、立方体ではなく、三次元空間に任意の多面体を配置することもできる。このように、本発明は一般的に、二次元以上の任意の次数の空間に、任意のポリトープを配置する場合に適用可能である。なお、ポリトープとは、二次元の場合は多角形を表し、三次元の場合は多面体を表し、四次元以上の場合はポリトープを表す。ポリトープとは、二次元の多角形、三次元の多面体を、一般次元へ一般化した図形である。但し、四次元以上の空間の場合に関しては、図示することができないので図を省略する。
【００７０】
＜回路ユニットの実施例１の説明＞
生体の脳のように常に学習や自己組織化が起こる状況を、ニューラルネットで実現する為には、ニューラルネットの動作中にシナプス結合の重みｗｉ，ｊを、適切な規則の下で変化させ続けなければならない。この操作を例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を追加してソフトウェアで行うのは、ニューラルネットの規模が大きくなるとデータ処理時間が著しく長くなり、ニューラルネットを動作させながら学習させることが非常に困難になる。また、高速なＣＰＵを追加すると、消費電力が多大になってしまうという問題が有った。
【００７１】
本発明は、適切な規則の下でシナプス結合の重みｗｉ，ｊを、変化させるハードウェア技術を提供することで、消費電力の増大を抑えながら、実時間で学習や自己組織化を行うニューラルネットを実現することを目的としている。
【００７２】
次に、本発明の回路ユニットの実施例について説明する。図５は、本発明の一実施形態による、回路ユニット１０のブロック構成図である。回路ユニット１０全体が、図１に示す１個のセルＣＮに対応する。
回路ユニット１０は、第１の出力部１と、入力部２と、重み記憶部３と、乗算部４と、加算部５と、比較決定部６と、第２の出力部７と、重み変更部８と、を用いて構成されている。
【００７３】
第１の出力部１は、Ｌ１層のニューロン２０ｉの入力データを保持する。ここで、当該入力データは、Ｌ１層のニューロン２０ｉの発火頻度を表すデータである。例えば、入力データは４ビットで表され、その値が小さいほどＬ１層のニューロン２０ｉの発火頻度が低く、その値が大きいほどＬ１層のニューロン２０ｉの発火頻度が高いことを示す。
【００７４】
第１の出力部１は、Ｌ１層のニューロン２０ｉの入力データを、当該発火頻度を表すデータから、発火状態の時系列を表すパルス列へ変換し、当該パルス列を順次出力する。例えば、発火状態の時系列を表すデータとは、１ビットデータが１５個並んだ１５ビットのデータで表され、当該１ビットデータがＬ１層のニューロン２０ｉの発火状態を表す。即ち、１ビットデータが０ならばＬ１層のニューロン２０ｉは発火しておらず、１ビットデータが１ならばＬ１層のニューロン２０ｉが発火していることを示す。
【００７５】
第１の出力部１は、Ｌ１層のニューロン２０ｉが順番に出力するように、各ニューロン２０ｉの前記変換したデータから、１ビットずつ選択して入力部２へ出力する。例えば、第１の出力部１は、Ｌ１層のニューロン２０ｉの前記１５ビットデータの特定ビット位置の２５６個のデータを、順次入力部２へ出力する。そして、前記２５６個のデータを出力し終わると、前記１５ビットデータの特定ビット位置を変更し、異なる２５６個のデータを入力部２へ出力する、という動作を繰り返す。
入力部２は、第１の出力部１が出力した変換後の出力データを受け取る。入力部２は、当該受け取った出力データを、乗算部４と重み変更部８へ出力する。また、入力部２は、前記出力データの代わりに、常に１のデータを乗算部４へ出力する。
【００７６】
重み記憶部３は、Ｌ１層のニューロン２０ｉからＬ２層のニューロン２２ｊへのシナプス結合の重み情報を保持する。重み記憶部３は、図示されていない外部装置からクロック信号を受け取る。重み記憶部３は、当該クロック信号からカウント値を算出し、当該カウント値の番地に保持されているシナプス結合の重み情報を読み出す。重み記憶部３は、当該シナプス結合の重み情報を、乗算部４と重み変更部８へ出力する。
【００７７】
また、重み記憶部３は、重み変更部８が出力する新たなシナプス結合の重み情報を受け取る。重み記憶部３は、前記カウント値の番地に保持されているシナプス結合の重み情報を、当該新たなシナプス結合の重み情報に変更する。
【００７８】
乗算部４は、入力部２が出力した第１の出力部の出力データまたは常に１のデータと、重み記憶部３が出力したシナプス結合の重み情報と、を受け取る。乗算部４は、前記出力データまたは常に１のデータと、前記シナプス結合の重み情報とを乗じて、それらの積を算出する。乗算部４は、当該積を加算部５へ出力する。
【００７９】
加算部５は、乗算部４が出力した前記積を受け取る。加算部５は、入力部２が前記第１の出力部の出力データを出力した場合は、Ｌ２層のニューロン２２ｊ毎に当該積を加算して総和を算出し、当該総和を比較決定部６へ出力する。加算部５は、入力部２が常に１のデータを出力した場合は、当該積の全データについて加算して総和を算出し、当該総和を重み変更部８へ出力する。
比較決定部６は、加算部５が出力した前記総和と、図示されていない外部装置から入力された閾値θと、を受け取る。ここで、発火データを、Ｌ２層のニューロン２２ｊが発火したことを示すデータ（例えば、１ビットデータで１）またはＬ２層のニューロン２２ｊが発火しなかったことを示すデータ（例えば、１ビットデータで０）と定義する。
【００８０】
比較決定部６は、当該総和が閾値θよりも大きい場合は、Ｌ２層のニューロン２２ｊが発火したことを示すデータとして１を、第２の出力部７へ出力する。一方、比較決定部６は、当該総和が閾値θ以下の場合、Ｌ２層のニューロン２２ｊが発火しなかったことを示すデータとして０を、出力部７へ出力する。
【００８１】
第２の出力部７は、比較決定部６が出力した発火データを受け取る。第２の出力部７は、当該発火データを保持する。第２の出力部７は、当該発火データをＬ２層のニューロン２２ｊの出力データとして、図示されていない外部装置と重み変更部８へ出力する。
【００８２】
重み変更部８は、図示されていない外部装置から入力されたクロック信号と、入力部２が出力した出力データと、重み記憶部３が出力した重みデータと、加算部５が出力した総和と、第２の出力部７が出力した発火データと、を受け取る。
重み変更部８は、前記重みデータから重み記憶部３に記憶されている重みが０のデータ数を係数し、当該係数結果から、重みが０のデータを０以外に変更する確率を増減する。また、重み変更部８は、当該総和に応じて重みデータを増加する確率を増減する。また、重み変更部８は、当該総和に応じてその重みデータを減少する確率を増減する。
重み変更部８は、クロック信号を受信する毎に、当該重みデータが０の場合は、前記重みデータを０以外に変更する確率に従って新たなシナプス結合の重み情報を０以外にする。重み変更部８は、クロック信号を受信する毎に、当該重みデータが０以外の場合は、当該出力データと当該発火データと前記重みデータを増加する確率と前記重みデータを減少する確率と、に基づいて、新たなシナプス結合の重み情報を生成する。重み変更部８は、当該新たなシナプス結合の重み情報を重み記憶部３へ出力する。
【００８３】
重み変更部８は、重み記憶部３が現在保持しているシナプス結合の重み情報を当該新たなシナプス結合の重み情報に変更するよう制御することにより、重み記憶部３に保持されたシナプス結合の重み情報を変更することができる。即ち、ニューラルネットの学習と自己組織化ができる。
【００８４】
図６は、本発明の一実施形態による重み変更部８のブロック構成図である。重み変更部８は、疑似乱数生成部１１と、学習信号生成部１２と、重み増減部１３と、シナプス作成指令部１４と、切替部１５と、を用いて構成されている。
【００８５】
疑似乱数生成部１１は、図示されていない外部装置からクロック信号を受け取る。疑似乱数生成部１１は、当該クロック信号に基づいて疑似乱数を生成し、当該疑似乱数を学習信号生成部１２と、シナプス作成指令部１４と、へ出力する。なお、疑似乱数生成部１１が生成する疑似乱数は、予め決められた所定の範囲の数のうち、それぞれの数の出現頻度が同一確率でなくてもよい。
学習信号生成部１２は、入力部２が出力した出力データと、加算部５が出力した総和と、第２の出力部７が出力した発火データと、疑似乱数生成部１１が出力した疑似乱数と、を受け取る。
【００８６】
学習信号生成部１２は、当該総和が第１の所定の範囲内にあるか否かを判定し、当該判定結果に応じてシナプス結合の重み増加用カウント値を変更する。学習信号生成部１２は、当該増加用カウント値と当該疑似乱数との比較結果に基づいて、シナプス結合の重み増加可否信号を出力する。学習信号生成部１２は、当該増加可否信号と、前記出力データと、前記発火データと、に基づいて、シナプス結合の重み増加指示信号を生成する。学習信号生成部１２は、当該重み増加指示信号を重み増減部１３へ出力する。
【００８７】
同様にして、学習信号生成部１２は、当該総和が第２の所定の範囲内にあるか否かを判定し、当該判定結果に応じてシナプス結合の重み減少用カウント値を変更する。学習信号生成部１２は、当該減少用カウント値と当該疑似乱数との比較結果に基づいて、シナプス結合の重み減少可否信号を出力する。学習信号生成部１２は、当該減少可否信号と、前記出力データと、前記発火データと、に基づいて、シナプス結合の重み減少指示信号を生成する。学習信号生成部１２は、当該重み減少指示信号を重み増減部１３へ出力する。
【００８８】
重み増減部１３は、学習信号生成部１２が出力した当該重み増加指示信号と、当該重み減少指示信号と、重み記憶部３が出力した当該重み情報と、を受け取る。重み増減部１３は、当該重み増加指示信号と当該重み減少指示信号とに基づいて、当該重み情報から変更したシナプス結合の重み情報を生成する。
【００８９】
具体的には、重み増減部１３は、当該重み増加指示信号が１のときに、当該シナプス結合の重み情報を一定量増加し、変更したシナプス結合の重み情報とする。重み増減部１３は、当該重み減少指示信号が１のときに、当該シナプス結合の重み情報を一定量減少し、変更したシナプス結合の重み情報とする。重み増減部１３は、当該重み増加指示信号と当該重み減少指示信号がともに０のときは、当該シナプス結合の重み情報を、そのまま変更したシナプス結合の重み情報とする。重み増減部１３は、前記変更したシナプス結合の重み情報を切替部１５へ出力する。
【００９０】
シナプス作成指令部１４は、前記重み記憶部３が出力したシナプス結合の重み情報と、前記疑似乱数生成部１１が出力した疑似乱数と、を受け取る。シナプス作成指令部１４は、当該シナプス結合の重み情報と、当該疑似乱数と、に基づいて、シナプス作成指示信号を生成する。
具体的には、シナプス作成指令部１４は、シナプス結合の重み情報を検査し、その値が０のときにゼロ判定信号を１にする。シナプス作成指令部１４は、前記ゼロ判定信号が１になる回数をカウントする。シナプス作成指令部１４は、当該カウント値が第３の所定の範囲内にあるか否かを判定し、当該判定結果に応じて、シナプス作成指示用カウント値を変更する。シナプス作成指令部１４、当該シナプス作成指示用カウント値と、当該疑似乱数との比較結果に基づいて、シナプス作成可否信号を出力する。
【００９１】
シナプス作成指令部１４は、当該作成可否信号と、前記ゼロ判定信号とに基づいて、シナプス作成指示信号を生成する。例えば、シナプス作成指令部１４は、作成可否信号が１で、ゼロ判定信号が１のときに、シナプス作成指示信号を１とする。シナプス作成指令部１４は、当該シナプス作成指示信号を切替部１５へ出力する。
【００９２】
切替部１５は、重み増減部１３が出力した変更したシナプス結合の重み情報と、シナプス作成指令部１４が出力したシナプス作成指示信号と、を受け取る。切替部１５は、当該シナプス作成指示信号に基づいて、所定の固定値データか、または前記変更したシナプス結合の重み情報か、のいずれかを選択する。
【００９３】
具体的には、例えば、シナプス作成指示信号が１のときは、切替部１５は、前記所定の固定値データを選択する。一方、シナプス作成指示信号が０のときは、切替部１５は、前記変更したシナプス結合の重み情報を選択する。切替部１５は、前記選択した情報を重み記憶部３へ出力する。
【００９４】
図７は、本発明の一実施形態による回路ユニットを、パルスニューラルネットで用いるニューロン群で模擬した回路図である。図７の回路ユニット１０全体が、図２（ａ）で示す１つの正六角形に対応している。本実施例では各ニューロンは個別の電子回路ではなく、仮想の興奮性ニューロンとして、各層毎に２５６個のニューロンが纏めて実装されている。
【００９５】
各層に２５６個のニューロンを実装する方法は、以下の通りである。Ｌ１層の２５６個のニューロンの入力データ（４［ｂｉｔ］データ）は、メモリ２１に格納されている。Ｌ１層のニューロンからＬ２層のニューロンへのシナプス結合の重みのデータ（８［ｂｉｔ］データ）は、メモリ６５に保存されている。一方、端子４６に出力されるＬ２層の２５６個のニューロンの出力データは、０か１の１［ｂｉｔ］信号として表される。
【００９６】
回路ユニット１０は、図７に示すように、第１の出力部１と、入力部２と、重み記憶部３と、乗算部４と、加算部５と、比較決定部６と、第２の出力部７と、重み変更部８と、を用いて構成されている。
第１の出力部１は、８ビットカウンター２０と、メモリ２１と、パルス列変調回路２２と、を用いて構成されている。
【００９７】
入力部２は、出力端子Ｐ０と、入力端子Ｐｑ（ｑは１から６の整数）と、８ビットカウンター２３Ａと、８ビットカウンター２３Ｂと、メモリ２４Ａと、メモリ２４Ｂと、ＯＲゲート６０と、を用いて構成されている。
重み記憶部３は、１９ビットカウンター６４と、メモリ６５と、を用いて構成されている。
【００９８】
乗算部４は、ＡＮＤゲート２６を用いて構成されている。
加算部５は、加算器２７と、ＡＮＤゲート２８と、を用いて構成されている。
比較決定部６は、大小比較器２９を用いて構成されている。
第２の出力部７は、８ビットカウンター６１と、メモリ６２と、を用いて構成されている。
【００９９】
重み変更部８は、疑似乱数生成部１１と、学習信号生成部１２と、重み増減部１３と、シナプス作成指令部１４と、切替部１５と、を用いて構成されている。
疑似乱数生成部１１は、疑似乱数発生器７０を用いて構成されている。
重み増減部１３は、１増減回路６６を用いて構成されている。
シナプス作成指令部１４は、ゼロ検出器６８と、１９ビットカウンター６９と、確率イネーブル信号発生器７３と、を用いて構成されている。
切替部１５は、３入力セレクター６３を用いて構成されている。
【０１００】
８ビットカウンター２０は、入力端子４１にカウントアップ信号が入力される毎に、カウント値である端子Ｑの値を１ずつ増加させ、当該カウント値をメモリ２１に出力する。８ビットカウンター２０は、前記カウント値を２５５までカウントアップすると、次のカウントアップ信号が入力されたときに、前記カウント値を０に戻す。
８ビットカウンター２０は、図示しないリセット信号が入力されると、前記カウント値を０にする。
【０１０１】
メモリ２１は、Ｌ１層のニューロンの入力データを記憶する。メモリ２１に格納されているＬ１層のニューロンのデータは、０から１５までの数である。Ｌ１層のニューロン数が２５６なので、メモリ２１は１，０２４（＝４［ｂｉｔ］×２５６）［ｂｉｔ］の容量を持つ。Ｌ１層のｉ番目のニューロンの入力データは、メモリ２１のｉ番地に格納されている。
【０１０２】
メモリ２１は、８ビットカウンター２０が出力したカウント値が示す番地の４ビットデータを読み出して、当該データをパルス列変調回路２２に出力する。例えば、メモリ２１は、入力されたカウント値が０のとき、メモリ２１の０番地のデータを読み出して、当該データをパルス列変調回路２２に出力する。
【０１０３】
パルス列変調回路２２は、メモリ２１が出力した当該４ビットデータを１５ビットのパルス列に変換する。パルス列変調回路２２は、データ変換用メモリを備え、データ変換テーブルを前記データ変換用メモリに保持する。図８は、データ変換用メモリが保持するデータ変換テーブルを説明するための図である。図８において、４ビットデータとは、データ変換用メモリが受け取るデータである。１５ビットデータとは、データ変換用メモリが出力するデータである。１６種類の４ビットデータそれぞれに、１５ビットデータが１つ対応付けられている。パルス列変調回路２２は、図８に示すデータ変換テーブルを格納するデータ変換用メモリを用いて、メモリ２１が出力した当該４ビットデータを、対応している１５ビットデータに変換する。
【０１０４】
パルス列変調回路２２は、前記１５ビットのデータ列のＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｉｎｉｆｉｃａｎｔ  ｂｉｔ）だけを、自セルのメモリ２４Ａとメモリ２４Ｂに出力する。前述の操作を、カウンター２０のカウント値が２５５になるまで繰り返す。この一連の処理をラウンドと呼ぶ。
前述のように、パルス列変調回路２２の出力データ速度が６４［ｋｂｐｓ］なので、カウンター２０のカウントアップ信号は６４［ｋＨｚ］である。
【０１０５】
また、パルス列変調回路２２は、出力端子Ｐ０を介して、隣接セルの入力端子Ｐｑに、前記データを出力する。その後、隣接セルにおいて、当該データは、端子Ｐｑからメモリ２４Ａと２４Ｂに出力される。
【０１０６】
パルス列変調回路２２は、ラウンド数が増える毎に、前記１５ビットのデータ列から取り出すデータのビット位置を１ずつ増やし、当該ビット位置のデータｘｉを出力する。
ラウンド１４で、パルス列変調回路２２は、前記１５ビットデータの最上位ビットのデータを、自セルのメモリ２４Ａとメモリ２４Ｂと隣接セルの入力端子Ｐｑに出力し終わると、メモリ２１に入っているデータの転送処理が終わる。
【０１０７】
なお、本実施例では、前記１５ビットデータの最下位ビットから昇順にデータを出力したが、最上位ビットから降順に出力してもよい。また、任意のビット位置からランダムに出力してもよい。或いは、最下位ビットから昇順に出力するとしたままで、図８に示すテーブルデータを適当に変更しても良い。Ｌ１層のニューロンの出力情報は、前記１５ビットのデータ列中に存在する１の頻度で表されるので、データが出力される順番は関係ないからである。
【０１０８】
Ｌ２層に属する８ビットカウンター２３Ａは、メモリ２４Ａにデータを書き込むときは、端子４２Ａに端子４１に入力されるカウントアップ信号と同一のカウントアップ信号（６４［ｋＨｚ］）が入力される。カウンター２３Ａは、当該カウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２４Ａに出力する。カウンター２３Ａは、２５５までカウントアップすると、次のカウントアップ信号で、そのカウント値を０に戻す。
カウンター２３Ａは、図示しないリセット信号が入力されると、カウント値を０にする。
同様に、カウンター２３Ｂは、メモリ２４Ｂにデータを書き込むときは、端子４２Ｂに端子４１に入力されるカウントアップ信号と同一のカウントアップ信号が入力される。カウンター２３Ｂは、当該カウントアップ信号が入力される毎に、カウント値を１ずつ増加させ、当該カウント値をメモリ２４Ｂに出力する。カウンター２３Ｂは、２５５までカウントアップすると、次のカウントアップ信号で、そのカウント値を０に戻す。
カウンター２３Ｂは、図示しないリセット信号が入力されると、カウント値を０にする。
【０１０９】
メモリ２４Ａとメモリ２４Ｂ（それぞれ７［ｂｉｔ］×２５６の容量）は、７本の信号線で伝送されてきた端子Ｐ０から端子Ｐ６が出力したデータを、ラウンド毎に交互に格納する。ここで、端子Ｐ０が出力したデータとは、自セルのパルス列変調回路２２が出力したデータである。また、端子Ｐｑが出力したデータとは、６個の隣接セルのパルス列変調回路２２が出力したデータである。
【０１１０】
Ｌ２層側では、１ラウンドの時間である４［ｍｓ］を２等分し、前半の２［ｍｓ］でＬ２層のニューロンの出力データを算出し、後半の２［ｍｓ］でＬ２層のニューロンの学習と自己組織化を行う。
８ビットカウンター２３Ａは、メモリ２４Ａからデータを読み出すときは、端子４２Ａに端子４１に入力されるカウントアップ信号の５１２倍即ち、３２．７６８（＝６４［ｋＨｚ］×５１２）［ＭＨｚ］のカウントアップ信号が入力される。
メモリ２４Ａは、カウンター２３Ａが出力するカウント値が３２．７６８［ＭＨｚ］で増加するので、格納した７ビットのデータを３２．７６８［ＭＨｚ］の速度で読み出す。メモリ２４Ａは、当該読み出したデータを並直変換して７倍の２２９．４［Ｍｂｐｓ］の１ビットデータｓｉにする。ここで、添え字ｉは０から１，７９２（＝２５６×７−１）までの整数である。
同様にして、８ビットカウンター２３Ｂは、メモリ２４Ｂからデータを読み出すときは、端子４２Ｂに３２．７６８［ＭＨｚ］のカウントアップ信号が入力される。
メモリ２４Ｂは、カウンター２３Ｂが出力するカウント値が３２．７６８［ＭＨｚ］で増加するので、格納した７ビットのデータを３２．７６８［ＭＨｚ］で読み出す。メモリ２４Ｂは、当該読み出したデータを並直変換して７倍の２２９．４［Ｍｂｐｓ］の１ビットデータｓｉにする。
メモリ２４Ａとメモリ２４Ｂは、ラウンド毎にデータの書き込み動作と、読み出し動作を交互に行う。例えば、或るラウンドでメモリ２４Ａが書き込み動作を行っているときは、メモリ２４Ｂは読み出し動作を行っている。メモリ２４Ａとメモリ２４Ｂは、前記読み出したデータｓｉをＯＲゲート６０と学習信号生成部１２に出力する。
【０１１１】
ＯＲゲート６０は、メモリ２４Ａまたはメモリ２４Ｂが出力した前記データｓｉと、端子８０に制御信号と、を受け取る。ラウンドの前半では、端子８０に０が入力されるので、ＯＲゲート６０は前記データｓｉを出力する。ラウンドの後半では、端子８０に１が入力されるので、ＯＲゲート６０は常に１をＡＮＤゲート２６に出力する。
【０１１２】
１９ビットカウンター６４は、その端子８４に２２９．４［ＭＨｚ］のカウントアップ信号が入力される。カウンター６４は、前記カウントアップ信号が入力されると、カウント値を１増加する。カウンター６４は、前記カウント値をメモリ６５に出力する。
カウンター６４は、そのカウント値が４５８，７５１（＝２５６×７×２５６−１）のときにカウントアップ信号が入力されると、カウント値を０に戻す。カウンター６４は、図示しないリセット信号が入力されると、カウント値を０にする。
【０１１３】
メモリ６５は、前記カウンター６４が出力したカウント値を受け取る。前記カウント値が２２９．４［ＭＨｚ］で増加するので、メモリ６５は、シナプス結合の重みデータｗｉ，ｊを２２９．４［ＭＨｚ］で読み出す。メモリ６５は、当該読み出した重みデータｗｉ，ｊを、ＡＮＤゲート２６と重み増減部１３とシナプス作成司令部１４と、に出力する。
ＡＮＤゲート２６は、ＯＲゲート６０が出力したデータと、メモリ６５が出力したシナプス結合の重みデータｗｉ，ｊとを受け取る。
ラウンドの前半では、ＡＮＤゲート２６は、ＯＲゲート６０が出力した前記データｓｉと、それに対応するシナプス結合の重みデータｗｉ，ｊとの積をとり、当該積ｙｉ，ｊ（＝ｓｉ×ｗｉ，ｊ）を加算器２７に出力する。
ラウンドの後半では、ＡＮＤゲート２６は、ＯＲゲート６０が出力した前記データ１と、シナプス結合の重みデータｗｉ，ｊとの積をとり、当該積ｗｉ，ｊを加算器２７に出力する。
【０１１４】
ラウンドの前半では、加算器２７は、ＡＮＤゲート２６が出力した前記ｙｉ，ｊを受け取り、Ｌ２層のｊ番目のニューロンに毎にΣｙｉ，ｊのｉに対する総和を計算する。この場合の総和記号Σは２５６×７回の計算を表している。
ＡＮＤゲート２６がデータｙ０，ｊを加算器２７に出力すると同時に、ＡＮＤゲート２８の端子４４に入力される信号が０になるので、ＡＮＤゲート２８は、加算器２７の片側の入力端子に０を出力する。これによってΣｙｉ，ｊの総和計算の初期値が０になる。ＡＮＤゲート２６がデータｙ０，ｊを加算器２７に出力するとき以外は、端子４４に入力される信号が１になるので、加算器２７において、Ｌ２層のｊ番目のニューロンに毎に、Σｙｉ，ｊのｉについての総和Ｙｊ（＝Σｙｉ，ｊ）が計算される。加算器２７は、総和Ｙｊを計算し終わると、当該総和Ｙｊを大小比較器２９に出力する。
【０１１５】
ラウンドの後半では、加算器２７は、ＡＮＤゲート２６が出力した前記ｗｉ，ｊを受け取り、全てのｉと全てのｊに対する総和Σｗｉ，ｊを計算する。この場合の総和記号Σは２５６×７×２５６回の計算を表している。つまり、Σｗｉ，ｊは、Ｌ２層の全ニューロンの全シナプス結合の重みデータの和である。
ＡＮＤゲート２６がデータｙ０，０を加算器２７に出力すると同時に、ＡＮＤゲート２８の端子４４に入力される信号が０になるので、ＡＮＤゲート２８は、加算器２７の片側の入力端子に０を出力する。これによってΣｗｉ，ｊの総和計算の初期値が０になる。ＡＮＤゲート２６がデータｙ０，０を加算器２７に出力するとき以外は、端子４４に入力される信号は１になる。加算器２７は、総和Σｗｉ，ｊを計算し終わると、当該総和Σｗｉ，ｊを学習信号生成部１２に出力する。
【０１１６】
大小比較器２９は、加算器２７が出力した前記総和Ｙｊを受け取り、当該総和Ｙｊを、図示しないレジスタまたは外部から端子４３に供給される閾値データθと比較し、前記閾値データθよりも当該総和Ｙｊが大きい場合に、１をメモリ６２に出力する。大小比較器２９は、それ以外の場合は、０をメモリ６２に出力する。
【０１１７】
８ビットカウンター６１は、端子８２に１２８［ｋＨｚ］のカウントアップ信号が入力されると、カウント値を１増加させる。８ビットカウンター６１は、カウント値が２５５のときに端子８２にカウントアップ信号が入力されると、カウント値を０に戻す。８ビットカウンター６１は、前記カウント値をメモリ６２に出力する。
８ビットカウンター６１は、図示しないリセット信号が入力されると、カウント値を０にする。
【０１１８】
メモリ６２は、ラウンドの前半では、大小比較器２９が出力した前記１ビットデータと、８ビットカウンター６１が出力した前記カウント値とを受け取る。メモリ６２は、前記１ビットデータを、前記カウント値の番地に格納する。これによって、メモリ６２は、Ｌ２層のニューロンの出力（合計２５６［ｂｉｔ］＝１［ｂｉｔ］×２５６）を記憶する。
メモリ６２は、ラウンドの後半では、８ビットカウンター６１が出力したカウント値を受け取る。メモリ６２は、前記カウント値のアドレスから１ビットデータｂｊを読み出し、当該１ビットデータｂｊを端子４６と学習信号生成部に出力する。
【０１１９】
３入力セレクター６３は、ニューラルネットでの計算処理を始める前に、端子８３に入力される信号が１になると、入力Ｉ２を選択する。当該選択後、３入力セレクター６３は、ＤＢバスから供給されるデータを選択し、当該データをメモリ６５に出力する。これによって、シナプス結合の重みデータの初期値を、図示しない外部回路がＤＢバスを通して、メモリ６５に予め書き込むことができる。
【０１２０】
３入力セレクター６３は、ＡＮＤゲート６７が出力した信号Ｃｏｎを受け取る。また、３入力セレクター６３は、１増減回路６６の出力信号を受け取る。
３入力セレクター６３は、前記信号Ｃｏｎが０のとき、入力Ｉ０を選択する。当該選択後、３入力セレクター６３は、１増減回路６６の出力であるシナプス結合の重みデータの更新値を選択し、当該更新値をメモリ６５に出力する。
【０１２１】
３入力セレクター６３は、前記信号Ｃｏｎが１のとき、入力Ｉ１を選択する。当該選択後、３入力セレクター６３は、図示しないレジスタ又は外部から供給される固定値’Ｄ０’を選択し、当該固定値’Ｄ０’をメモリ６５に出力する。
【０１２２】
メモリ６５は、１９ビットカウンター６４が出力したカウント値と、３入力セレクター６３が出力したデータとを受け取る。
ラウンドの前半では、メモリ６５は、当該カウント値のアドレスのデータを読み出して、当該データをＡＮＤゲート２６とゼロ検出器６８とに出力する。
【０１２３】
ラウンドの後半では、メモリ６５は、当該カウント値のアドレスのデータを読み出して、当該データをＡＮＤゲート２６と１増減回路６６とゼロ検出器６８とに出力する。更に、メモリ６５は、３入力セレクター６３が出力した前記更新値を、新たなシナプス結合の重みとして、前記カウント値のアドレスに格納する。
【０１２４】
続いて、１増減回路６６について説明する。１増減回路６６は、入力端子Ｉが１のときは、入力端子Ａの値を１増やし、当該増やした値を出力端子Ｙから出力する。但し、入力端子Ａの値が２５５の場合は、１増加させると０になってしまうので、２５５のまま出力する。また、入力端子Ａの値が０の場合は、１増加させると１となり、新たにシナプス結合が生成されてしまうので、０のまま出力する。
１増減回路６６は、入力端子Ｄが１のときは、入力端子Ａの値を１減らし、当該減らした値を出力端子Ｙから出力する。但し、入力端子Ａの値が０の場合は、１減少させると２５５になってしまうので、０のまま出力する。
１増減回路６６は、入力端子Ｉと入力端子Ｄの両方が０のときは、入力端子Ａの値を、そのまま出力端子Ｙから出力する。
【０１２５】
図９は、１増減回路６６の回路図である。図９において、１増減回路６６は、ｘ’ＦＦ’検出器１０１と、ｘ’００’検出器１０２と、３入力ＡＮＤゲート１０３と、ＡＮＤゲート１０４と、ＯＲゲート１０５と、８ビット加減算器１０６と、を用いて構成される。
【０１２６】
ｘ’ＦＦ’検出器１０１は、例えば８入力ＮＡＮＤゲートである。ｘ’ＦＦ’検出器１０１は、端子Ａの信号を受け取り、端子Ｉｎの入力とする。ｘ’ＦＦ’検出器１０１は、端子Ｉｎの信号の全ビットが１の場合に、端子Ｆの信号を０とし、当該信号０を３入力ＡＮＤゲート１０３に出力する。ｘ’ＦＦ’検出器１０１は、端子Ｉｎの信号の少なくとも１ビットが０の場合は、端子Ｆの信号を１にする。
【０１２７】
ｘ’００’検出器１０２は、例えば８入力ＯＲゲートである。ｘ’００’検出器１０２は、端子Ａの信号を受け取り、端子Ｉｎの入力とする。ｘ’００’検出器１０２は、端子Ｉｎの信号の全ビットが０の場合に、端子Ｚの信号を０とし、当該信号０を３入力ＡＮＤゲート１０３とＡＮＤゲート１０４に出力する。ｘ’００’検出器１０２は、端子Ｉｎの信号の少なくとも１ビットが１の場合は、端子Ｚの信号を１にする。
【０１２８】
３入力ＡＮＤゲート１０３は、ｘ’ＦＦ’検出器１０１が出力した端子Ｆの信号と、ｘ’００’検出器１０２が出力した端子Ｚの信号と、端子Ｉの信号とを受け取る。３入力ＡＮＤゲート１０３は、前記端子Ｆの信号と、前記端子Ｚの信号と、前記端子Ｉの信号が全て１のとき、１をＯＲゲート１０５に出力する。３入力ＡＮＤゲート１０３は、他の場合には、０をＯＲゲート１０５に出力する。
【０１２９】
換言すると、３入力ＡＮＤゲート１０３は、端子Ａのデータが０でも２５５でもなく、かつ端子Ｉの信号が１の場合に、１をＯＲゲート１０５に出力する。
【０１３０】
ＡＮＤゲート１０４は、前記端子Ｚの信号と、端子Ｄの信号とを受け取る。ＡＮＤゲート１０４は、前記端子Ｚの信号と、前記端子Ｄの信号がともに１のとき、１をＯＲゲート１０５と加減算器１０６に出力する。ＡＮＤゲート１０４は、他の場合には、０をＯＲゲート１０５と加減算器１０６に出力する。
ＯＲゲート１０５は、ＡＮＤゲート１０３が出力した信号と、ＡＮＤゲート１０４が出力した信号とを受け取る。ＯＲゲート１０５は、前記２つの信号の論理和をとり、当該論理和を加減算器１０６へ出力する。
【０１３１】
加減算器１０６は、ＡＮＤゲート１０４が出力した信号を、端子ｍの入力信号として受け取る。また、加減算器１０６は、端子Ａのデータを、自身の端子Ａの入力データとして受け取る。また、加減算器１０６は、ＯＲゲート１０５が出力したデータを、端子Ｂの入力データとして受け取る。
【０１３２】
加減算器１０６は、端子ｍの入力信号が０の場合、端子Ａのデータと端子Ｂのデータとを加算する。また、加減算器１０６は、端子ｍの入力信号が１の場合、端子Ａのデータから端子Ｂのデータを減算する。加減算器１０６は、前記加算値または前記減算値を端子Ｓのデータとして出力する。前記端子Ｓのデータは、１増減回路６６の端子Ｙの出力データになる。
【０１３３】
１増減回路６６は、メモリ６５が出力した前記シナプス結合の重みデータｗｉ，ｊを、入力端子Ａで受け取る。１増減回路６６は、学習信号生成部１２が出力した信号Ｉｎｃを入力端子Ｉで受け取る。また、１増減回路６６は、学習信号生成部１２が出力した信号Ｄｅｃを入力端子Ｄで受け取る。
【０１３４】
次に、１増減回路６６の動作について説明する。後で説明するように、端子Ｉと端子Ｄの信号が、両方同時に１になることはない。そこで、端子Ｉの信号が０で端子Ｄの信号が１の場合と、端子Ｉの信号が１で端子Ｄの信号が０の場合と、端子Ｉの信号が０で端子Ｄの信号が０の場合、の３通りの場合について説明する。
【０１３５】
端子Ｉの信号が０で端子Ｄの信号が１の場合、について説明する。端子Ａのデータｗｉ，ｊが０以外の場合、ｘ’００’検出器１０２の出力Ｚは１である。ｘ’００’検出器１０２の出力Ｚが１であり、端子Ｄの信号が１なので、ＡＮＤゲート１０４の出力が１になる。ＡＮＤゲート１０４の出力が１になると、ＯＲゲート１０５の出力が１になる。従って、加減算器１０６の端子ｍが１に、端子Ｂが１になるので、加減算器１０６は、端子Ａのデータｗｉ，ｊから１を引いた値を端子Ｓに出力する。
【０１３６】
端子Ａのデータｗｉ，ｊが０の場合、ｘ’００’検出器１０２の出力Ｚは０である。ｘ’００’検出器１０２の出力Ｚが０なので、ＡＮＤゲート１０３とＡＮＤゲート１０４の出力はともに０になり、ＯＲゲート１０５の出力も０になる。従って、加減算器１０６の端子ｍが０、端子Ｂが０になるので、加減算器１０６は、端子Ａのデータｗｉ，ｊに０を足した値、即ち端子Ａの入力値０を（そのまま）端子Ｓに出力する。
【０１３７】
端子Ｉの信号が１で端子Ｄの信号が０の場合、について説明する。端子Ａのデータｗｉ，ｊがｘ’ＦＦ’以外かつｘ’００’以外の場合、ｘ’ＦＦ’検出器１０１の出力Ｆと、ｘ’００’検出器１０２の出力Ｚはともに１になるので、ＡＮＤゲート１０３の出力が１になる。ＡＮＤゲート１０３の出力が１になるので、ＯＲゲート１０５の出力が１になる。一方、端子Ｄの信号が０なので、ＡＮＤゲート１０４の出力は０になる。従って、加減算器１０６の端子ｍが０、端子Ｂが１になるので、加減算器１０６は、端子Ａのデータｗｉ，ｊに１を足した値を端子Ｓに出力する。
端子Ａのデータｗｉ，ｊがｘ’ＦＦ’またはｘ’００’の場合、ｘ’ＦＦ’検出器１０１の出力Ｆまたはｘ’００’検出器１０２の出力Ｚが０になるので、ＡＮＤゲート１０３の出力は０になる。ＡＮＤゲート１０３の出力が０なので、ＯＲゲート１０５の出力も０になる。従って、加減算器１０６の端子ｍが０、端子Ｂが０になるので、加減算器１０６は、端子Ａのデータｗｉ，ｊに０を足した値、即ち端子Ａの入力値ｘ’ＦＦ’または０を（そのまま）端子Ｓに出力する。
【０１３８】
次に、端子Ｉの信号が０で端子Ｄの信号が０の場合、について説明する。端子Ｉの信号が０なので、ＡＮＤゲート１０３の出力は０になる。端子Ｄの信号が０なので、ＡＮＤゲート１０４の出力は０になる。ＡＮＤゲート１０３の出力と、ＡＮＤゲート１０４の出力がともに０なので、ＯＲゲート１０５の出力は０になる。従って、加減算器１０６の端子ｍが０、端子Ｂが０になるので、加減算器１０６は、端子Ａのデータｗｉ，ｊに０を足した値、即ち端子Ａの入力値ｗｉ，ｊを、そのまま端子Ｓに出力する。
【０１３９】
ゼロ検出器６８は、入力端子Ｉｎのデータが０か否かを検出する検出器であり、例えば、８入力ＮＯＲゲートで構成されている。ゼロ検出器６８は、メモリ６５が出力したシナプス結合の重みデータｗｉ，ｊを受け取る。ゼロ検出器６８は、前記ｗｉ，ｊが０のときに、端子Ｚの信号を１にし、ＡＮＤゲート６７と１９ビットカウンター６９に１を出力する。
ゼロ検出器６８は、前記ｗｉ，ｊが０以外のときは、端子Ｚの信号を０にし、ＡＮＤゲート６７と１９ビットカウンター６９に０を出力する。
【０１４０】
１９ビットカウンター６９は、ラウンドの初めに図示しないリセット信号が入力されて、０に初期化される。１９ビットカウンター６９は、ラウンドの前半で、ゼロ検出器６８が出力する信号Ｚｅｒｏを受け取る。１９ビットカウンター６９は、当該信号Ｚｅｒｏが１のときに、端子Ｑの値を１増やし、当該信号Ｚｅｒｏが０のときに、端子Ｑの値を変化させない。つまり、１９ビットカウンター６９は、ラウンドの前半で、シナプス結合の重みデータｗｉ，ｊが０の個数を計数する。
１９ビットカウンター６９は、シナプス結合の重みデータｗｉ，ｊが０の個数を計数し終えると、当該計数値を確率イネーブル信号発生器７３へ出力する。
【０１４１】
疑似乱数発生器７０は、端子８４に入力されるクロック信号を、端子ｃｋで受け取る。疑似乱数発生器７０は、前記クロック信号が入力される度に新たな疑似乱数を発生し、当該疑似乱数を確率イネーブル信号発生器７１と、確率イネーブル信号発生器７２と、確率イネーブル信号発生器７３とへ出力する。すなわち、疑似乱数発生器７０は、メモリ６５が新たなｗｉ，ｊを出力する毎に、新しい疑似乱数を発生して出力する。
【０１４２】
図１０は、疑似乱数発生器７０を構成する、８ビットガロアＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）の回路図である。８ビットガロアＬＦＳＲは、０以外の初期値から出発すると、２５４回のｃｋ入力の立ち上がりで、１〜２５５の値が各１回だけ疑似乱数的に発生し、前記発生した値を端子Ｒｎから出力する。８ビットガロアＬＦＳＲは、２５５回目のｃｋ入力の立ち上がりで、端子Ｒｎの値を初期値に戻す。つまり、初期状態を０回目と数えると、２５５回目の値は初期値と同じになる。
【０１４３】
図１０において、疑似乱数発生器７０は、リセット入力Ｒがアクティブになった時に、最上位ビット７を１とする。これは初期状態として、全てのビットが０になるのを避ける為であるので、ビット７以外の任意のビットを１にしても良い。
或いは、回路設計時の便宜を考えて、ビット７以外のフリップフロップにセット入力、又はリセット入力を付加し、リセット入力Ｒがアクティブになった時に、全てのビットが適当な固定値に初期化されるようにしても良い。
【０１４４】
いずれにしても、初期値そのものは本発明の効果に何ら影響を与えない。ここで重要なことは、この疑似乱数発生器が２５５回のｃｋ入力で一巡することであるが、これについては後述する。この回路は疑似乱数を発生する目的で、従来から使われているものなので、詳細な説明は省略する。
【０１４５】
確率イネーブル信号発生器７３は、カウンター６９が出力した前記計数値と、疑似乱数発生器７０が出力した前記疑似乱数と、図示しないレジスタ又は外部から供給されるγ（第３の所定の値）と、端子８５のクロックと、を受け取る。確率イネーブル信号発生器７３の回路構成については、後で説明する。
確率イネーブル信号発生器７３は、前記計数値と前記γ（第３の所定の値）とを比較し、前記端子８５がアクティブになった時に、前記比較結果に基づいて内部状態変数を１増加又は１減少する。確率イネーブル信号発生器７３は、ラウンドの後半において、前記内部変数の値と前記疑似乱数とを比較し、その比較結果に基づいて、その第３の制御信号Ｅｎを１または０にする。確率イネーブル信号発生器７３は、第３の制御信号ＥｎをＡＮＤゲート６７に出力する。
【０１４６】
ＡＮＤゲート６７は、ゼロ検出器６８の出力信号Ｚｅｒｏと、確率イネーブル信号発生器７３の第３の制御信号Ｅｎとを受け取る。ＡＮＤゲート６７は、前記信号Ｚｅｒｏと前記第３の制御信号Ｅｎとの論理積Ｃｏｎを算出し、当該論理積Ｃｏｎを３入力セレクター６３に出力する。
具体的には、ＡＮＤゲート６７は、メモリ６５が出力した前記ｗｉ，ｊが０の場合に、確率イネーブル信号発生器７３が発生する確率で、Ｃｏｎ信号として１を３入力セレクター６３に出力する。これによって、３入力セレクター６３は、前記確率で入力Ｉ１を選択し、前記Ｉ１を選択した場合は、固定値‘Ｄ０’をメモリ６５へ出力する。つまり、メモリ６５が出力した前記ｗｉ，ｊが０の場合は、前記確率で０以外の値にメモリ６５の内容が更新され、新たなシナプス結合が生成される。
ＡＮＤゲート６７の出力が０の場合は、３入力セレクター６３は、１増減回路６６が出力した値をメモリ６５へ出力する。
【０１４７】
図１１は、興奮性ニューロンの学習信号生成部の回路図である。学習信号生成部１２は、Ｌ１層のニューロン２０ｉが興奮性ニューロンの場合は、図１１の学習信号生成回路７７Ａで表される。学習信号生成回路７７Ａは、確率イネーブル信号発生器７１と、確率イネーブル信号発生器７２と、３入力ＡＮＤゲート７４と、３入力ＡＮＤゲート７５と、インバーター７６と、を用いて構成されている。
【０１４８】
確率イネーブル信号発生器７１と、確率イネーブル信号発生器７２と、確率イネーブル信号発生器７３は、回路構成が同じであり、図１２を用いて回路構成を説明する。
図１２は、確率イネーブル信号発生回路の回路図である。図１２において、確率イネーブル信号発生回路は、大小比較器２０１と、８ビットアップダウンカウンター２０２と、８ビット大小比較器２０３と、を用いて構成されている。
【０１４９】
大小比較器２０１は、端子Ａのデータと端子Ｂのデータとを受け取る。大小比較器２０１は、端子Ｂのデータが端子Ａのデータ以上の場合には、１をアップダウンカウンター２０２へ出力する。大小比較器２０１は、端子Ｂのデータが端子Ａのデータよりも小さい場合には、０をアップダウンカウンター２０２へ出力する。
【０１５０】
ここで、大小比較器２０１のビット幅は比較対象と、そこに必要な分解能に応じて適当に決定する。例えば、図１１の確率イネーブル信号発生器７１では、端子Ａに入力されるデータΣｗｉ，ｊと、端子Ｂに入力されるデータα（第1の所定の値）とを比較する。Σｗｉ，ｊは、メモリ６５に格納されているシナプス結合の全ての重みデータｗｉ，ｊの総和である。シナプス結合の重みｗｉ，ｊが８ビットであり、重みデータの個数が２５６×７×２５６個なので、Σｗｉ，ｊを正確に表すには２７（＝８＋８＋３＋８）ビット必要である。
【０１５１】
しかし、そこまでの分解能は不要なので、ここではΣｗｉ，ｊの上位１２ビットだけを使うことにし、確率イネーブル信号発生器７１と７２の大小比較器２０１を１２ビット幅とする。従って、確率イネーブル信号発生器７１に入力されるα（第1の所定の値）と確率イネーブル信号発生器７２に入力されるβ（第２の所定の値）は、本来の値を右に１５ビットシフト即ち、１／３２，７６８にした値にする。
【０１５２】
一方、確率イネーブル信号発生器７３では、シナプス結合の重みｗｉ，ｊが０の個数をγ（第３の所定の値）と比較している。シナプス結合の重みデータの個数は２５６×７×２５６個なので、ここには本来１９（＝８＋３＋８）ビット必要であるが、ここも上位１２ビットだけを使うことにし、大小比較器２０１を１２ビット幅とする。従って、γ（第３の所定の値）は本来の値を右に７ビットシフト即ち、１／１２８にした値にする。
【０１５３】
８ビットアップダウンカウンター２０２は、図示しないリセット信号を受け取ると、端子Ｑの値即ち、カウント値を適当な値、例えば半値のｘ’７Ｆ’にする。
アップダウンカウンター２０２は、大小比較器２０１の出力が１の場合は、クロック入力Ｎｅが１になると、端子Ｑの値を１増加させて、当該端子Ｑの値を出力データｐとして大小比較器２０３に出力する。但し、アップダウンカウンター２０２の端子Ｑの値がｘ’ＦＦ’の場合は、それを超えては増加させない。
【０１５４】
アップダウンカウンター２０２は、大小比較器２０１の出力が０の場合は、クロック入力Ｎｅが１になると、端子Ｑの値を１減少させ、当該端子Ｑの値を出力データｐとして大小比較器２０３に出力する。但し、アップダウンカウンター２０２の端子Ｑの値が０の場合は、それよりも減少させない。
【０１５５】
大小比較器２０３は、アップダウンカウンター２０２が出力した前記データｐと、疑似乱数発生器７０が出力した擬似乱数Ｒｎを受け取る。大小比較器２０３は、前記データｐが前記疑似乱数Ｒｎ以上の場合は、１を出力信号Ｅｎとして出力する。大小比較器２０３は、前記データｐが前記疑似乱数Ｒｎよりも小さい場合には、０を出力信号Ｅｎとして出力する。
【０１５６】
ここで、データｐは０〜２５５の整数値を取り、疑似乱数Ｒｎは１〜２５５の整数値を取り得る。従って、データｐが一定の条件下で端子Ｒｎのデータが変化すると、出力信号Ｅｎの値はｐ／２５５の確率で１になる。つまり、データｐが増加すると、出力信号Ｅｎの値が１になる確率が増大し、データｐが減少すると、出力信号Ｅｎの値が１になる確率が減少する。
以上で、確率イネーブル信号発生回路の説明を終了する。
【０１５７】
確率イネーブル信号発生器７１は、ラウンドの後半の最後に、加算器２７が出力するΣｗｉ，ｊと、入力データα（第1の所定の値）を受け取る。そして、端子８５の信号がアクティブになると、前記Σｗｉ，ｊと前記α（第1の所定の値）との大小関係に応じて、確率イネーブル信号発生器７１の確率変数ｐの値を更新する。
確率イネーブル信号発生器７１は、ラウンドの後半で、疑似乱数発生器７０が出力する疑似乱数を受け取り、前記確率変数ｐと比較し、前記確率変数ｐの値に応じた確率で、第１の制御信号Ｅｎを１にし、当該第１の制御信号ＥｎをＡＮＤゲート７４に出力する。
【０１５８】
確率イネーブル信号発生器７２は、ラウンドの後半の最後に、加算器２７が出力したΣｗｉ，ｊと、入力データβ（第２の所定の値）を受け取る。そして、端子８５の信号がアクティブになると、前記Σｗｉ，ｊと前記β（第２の所定の値）との大小関係に応じて、確率イネーブル信号発生器７２の確率変数ｐの値を更新する。
確率イネーブル信号発生器７２は、ラウンドの後半で、疑似乱数発生器７０が出力する疑似乱数を受け取り、前記確率変数ｐと比較し、前記確率変数ｐの値に応じた確率で、第２の制御信号Ｅｎを１にし、当該第２の制御信号ＥｎをＡＮＤゲート７５に出力する。
【０１５９】
確率イネーブル信号発生器７３は、ラウンドの後半の最後に、カウンター６９が出力した計数値と、入力データγ（第３の所定の値）を受け取る。そして、端子８５の信号がアクティブになると、前記計数値と前記γ（第３の所定の値）との大小関係に応じて、確率イネーブル信号発生器７３内の確率変数ｐの値を更新する。
確率イネーブル信号発生器７３は、ラウンドの後半で、疑似乱数発生器７０が出力する疑似乱数を受け取り、前記確率変数ｐと比較し、前記確率変数ｐの値に応じた確率で、第３の制御信号Ｅｎを１にし、当該第３の制御信号ＥｎをＡＮＤゲート６７に出力する。
【０１６０】
ＡＮＤゲート７４は、確率イネーブル信号発生器７１が出力した第１の制御信号Ｅｎと、メモリ２４Ａまたは２４Ｂが出力したＬ１層のニューロンの出力ｓｉと、メモリ６２が出力したＬ２層のニューロンの出力ｂｊとを受け取る。
ＡＮＤゲート７４は、前記第１の制御信号Ｅｎと前記ｓｉと前記ｂｊの全てが１の場合に、Ｉｎｃ信号として１を１増減回路６６へ出力する。それ以外の場合は、ＡＮＤゲート７４は、Ｉｎｃ信号として０を１増減回路６６へ出力する。
【０１６１】
インバーター７６は、メモリ６２が出力したＬ２層のニューロンの出力ｂｊを受け取る。インバーター７６は、当該ｂｊを反転させた信号ｂ´ｊを生成する。インバーター７６は、前記信号ｂ´ｊをＡＮＤゲート７５へ出力する。
【０１６２】
ＡＮＤゲート７５は、確率イネーブル信号発生器７２が出力した第２の制御信号Ｅｎと、メモリ２４Ａまたは２４Ｂが出力したＬ１層のニューロンの出力ｓｉと、インバーター７６が出力した信号ｂ´ｊとを受け取る。
ＡＮＤゲート７５は、前記第２の制御信号Ｅｎと前記ｓｉと前記ｂ´ｊの全てが１の場合に、Ｄｅｃ信号として１を１増減回路６６へ出力する。それ以外の場合は、ＡＮＤゲート７５は、Ｄｅｃ信号として０を１増減回路６６へ出力する。
【０１６３】
＜実施例の学習則の説明＞
図７はＬ１層のニューロン２０ｉが、興奮性ニューロンだけである場合の実施例である。本発明の技術を用いて、抑制性ニューロンも同様に実装でき、両者を混在できる。Ｌ１層のニューロン２０ｉに抑制性ニューロンがある場合については、後で説明する。
【０１６４】
本発明では、学習即ちシナプス結合の重みの変化に、ニューラルネットの学習則として有名なＨｅｂｂのアルゴリズムを変形して用いる。Ｈｅｂｂのアルゴリズムでは、或るニューロンのシナプス結合に、前段のニューロンが発火したとの入力があり、且つそのニューロンが発火した場合に、そのシナプス結合の重みを増し、逆に前段のニューロンが発火したとの入力があったにも拘わらず、そのニューロンが発火しなかった場合は、そのシナプス結合の重みを減らす、という操作により学習を進める。
【０１６５】
このアルゴリズムでは、学習初期にたまたま重みが増したシナプス結合の重みが増え易くなるので、初めに覚えさせたことの学習は速く進むが、次第に他のことの学習が困難になるという欠点がある。また、学習が進み過ぎると、初期に学習したことを過剰に学習してしまい、類似のことを同一と判定する汎化性能が劣化してしまうという欠点がある。
そこで、重みを増減する過程に確率を導入し、その確率を、一定領域内に存在するシナプス結合の重みの総和Ｗによって増減するようにする。
【０１６６】
具体的には、図２（ａ）の１個のセル内に存在する全てのＬ２層のニューロン２２ｊの、全てのシナプス結合の重みの総和Ｗに、或る目標値α（第1の所定の値）とβ（第２の所定の値）を設定する。確率イネーブル信号発生器７１は、総和Ｗがα（第1の所定の値）よりも小さい状態では、Ｈｅｂｂの学習則によってシナプス結合の重みが増える確率を、徐々に増大させる。一方、確率イネーブル信号発生器７１は、総和Ｗがα（第1の所定の値）よりも大きい状態では、シナプス結合の重みが増える確率を徐々に減少させる。
【０１６７】
また、確率イネーブル信号発生器７２は、総和Ｗがβ（第２の所定の値）よりも小さい状態では、Ｈｅｂｂの学習則によってシナプス結合の重みが減る確率を徐々に減少させる。一方、総和Ｗがβ（第２の所定の値）よりも大きい状態では、Ｈｅｂｂの学習則によってシナプス結合の重みが減る確率を徐々に増大させる。
【０１６８】
つまり、確率イネーブル信号発生器７１は、総和Ｗがα（第1の所定の値）よりも小さいと重みが増える確率を徐々に増大させ、確率イネーブル信号発生器７２は、総和Ｗがβ（第２の所定の値）よりも大きいと重みが減る確率を徐々に増大させる。
図示されていない外部装置またはレジスタは、α（第1の所定の値）とβ（第２の所定の値）の値がα＞βとなるように、確率イネーブル信号発生器７１の端子Ｂにα（第1の所定の値）を出力し、確率イネーブル信号発生器７２の端子Ａにβ（第２の所定の値）を出力する。
これにより、総和Ｗはα（第1の所定の値）とβ（第２の所定の値）の間の適当な値の近傍で揺らぐ。この揺らぎが生体の脳を模倣する。
【０１６９】
次に、本発明の自己組織化のアルゴリズムについて説明する。自己組織化は、それまでシナプス結合が存在しなかった箇所に新しくシナプス結合を作り、逆に、それまで存在していたシナプス結合を削除することで行われる。シナプス結合の新規作成には、学習と同様に確率を導入する。
【０１７０】
図２（ａ）の１個のセル内に在るＬ２層の全てのニューロンの、シナプス結合の重みが０の個数、即ち未接続のシナプス結合の個数に或る目標値γ（第３の所定の値）を設定し、未接続シナプス数がγ（第３の所定の値）よりも小さい状態では、新規接続を行う確率を徐々に減少させ、未接続シナプス数がγ（第３の所定の値）よりも大きい状態では、新規接続を行う確率を徐々に増大させる。
【０１７１】
新規接続を作る場合は、適当な０以外の固定値‘Ｄ０’を重みメモリ６５に書き込む。
一方、シナプス結合の削除は学習に任せる。つまり、ランダムに新規シナプス結合が生成されるが、一旦生成されても使われないと、その結合の重みが徐々に減少し、最後は消滅する。このアルゴリズムにより、情報処理に使われるシナプス結合が徐々に増え、情報処理に使われないシナプス結合は徐々に消滅して、有用なニューラルネットが自律的に構築される。
【０１７２】
＜回路ユニット１０の動作＞
続いて、本実施例の回路ユニット１０の動作を説明する。図７に示すニューラルネットの回路ユニット１０の処理が始まる前に、図示しない任意の方法によって、Ｌ１層の入力データを予めメモリ２１に書き込んでおく。また、端子８３への入力信号を１にして、セレクター６３が入力Ｉ２を選択するようにする。その後、図示しない所定の装置が、ＤＢバスを通して、シナプス結合の重みデータの初期値をメモリ６５に予め書き込む。
【０１７３】
更に、図示しないリセット信号が入力されると、確率イネーブル信号発生器７１、７２、７３内のアップダウンカウンター２０２は、例えばｘ’７Ｆ’に初期化される。８ビットカウンター２０、２３Ａ、２３Ｂ，６１及び１９ビットカウンター６４は、そのカウント値を全て０にする。
【０１７４】
計算が始まると、カウンター２０は、そのカウント値０をメモリ２１に出力する。メモリ２１は０番地から４ビットデータを読み出し、パルス列変調器２２に出力する。パルス列変調器２２は、当該４ビットデータを１５ビットのデータ列に変換する。
この変換は、例えばメモリ２１から送られて来るデータをアドレス情報として、図８に示すデータが書き込まれているメモリからデータを読み出すことで実現する。
【０１７５】
パルス列変調器２２は、最初のラウンド０では、図８に示すデータのうちＬＳＢだけをメモリ２４Ａに出力する。その動作とともに、パルス列変調器２２は、当該データを出力端子Ｐ０から隣接セルへ出力する。
【０１７６】
隣接セルのメモリ２４Ａは、端子Ｐ０が出力したデータを受信する。回路は対称なので、それとともに、自セルのメモリ２４Ａは、入力端子Ｐ１〜Ｐ６を介して、隣接セルが出力したデータを受信する。メモリ２４Ａは、自セルのパルス列変調器２２の出力データと、端子Ｐ１〜Ｐ６から入力されたデータとを７ビットのデータに変換し、当該７ビットデータをメモリ２４Ａの０番地に格納する。
【０１７７】
その後、カウンター２０とカウンター２３Ａのカウント値が２５５になるまで、以下の処理を繰り返す。
端子４１に入力されるクロック信号が１になると、カウンター２０はカウント値を１つ増加させ、当該カウント値をメモリ２１に出力する。メモリ２１は、当該カウント値の番地のデータを読み出し、当該データをパルス列変調器２２に出力する。パルス列変調器２２は、当該データを１５ビットデータに変換し、そのＬＳＢを端子Ｐ０へ出力する。
【０１７８】
そして、端子４２Ａに入力されるクロック信号が１になると、カウンター２３Ａはカウント値を１つ増加させ、当該カウント値をメモリ２４Ａに出力する。メモリ２４Ａは、自セルのパルス列変調器２２からのデータと端子Ｐ１〜Ｐ６からのデータとを７ビットデータに変換し、当該７ビットデータをメモリ２４Ａの前記カウント値の番地に格納する。
このようにして、カウンター２０とカウンター２３Ａのカウント値が２５５を超えて０に戻るまで処理を行うと、ラウンド０が終了する。
【０１７９】
次のラウンド１では、パルス列変調器２２は、１５ビットデータの中のビット位置１のデータをメモリ２４Ｂに出力する。
【０１８０】
この様にして、データ格納器２４Ａと２４Ｂは、交互にデータを受信し、ラウンド１４でビット１４の転送が終わると、メモリ２１に入っているデータの転送処理が終わる。回路ユニット１０の処理を継続する場合は、図示しない外部装置がメモリ２１に新たなデータを書き込むか、又はメモリ２１をダブルバッファ構造にし、ニューラルネットでの処理と並行して、前記外部装置が次のデータをメモリ２１へ書き込む。
以上で、Ｌ１層のニューロン２０ｉの処理の説明を終了する。
【０１８１】
次に、Ｌ２層のニューロン２２ｊの処理について説明する。ラウンド０で、メモリ２４Ａにデータが用意できると、次のラウンド１からＬ２層での処理が始まる。Ｌ２層では１ラウンドの期間４［ｍｓ］を２分割し、前半の２［ｍｓ］でＬ２層のニューロンの演算を実行し、後半の２［ｍｓ］で学習と自己組織化を行う。
ラウンドの前半では、ＯＲゲート６０は、端子８０に入力される信号が０なので、メモリ２４Ａ又はメモリ２４Ｂが出力したデータｓｉを、ＡＮＤゲート２６に出力する。
【０１８２】
データｓｉの添え字ｉは本来２つ必要である。１つはＬ１層のニューロンの個数が２５６なので０〜２５５の値をとり、もう１つは自セルと隣接セルの合計セル数が７なので０〜６の値をとる。しかし、それでは表記が煩雑になるので、ここでは１つにして０〜１，７９１の値をとることにする。
【０１８３】
Ｌ２層のｊ番目のニューロンでは、Σ（ｓｉ×ｗｉ，ｊ）を計算する。ここでΣはｉについての総和を表している。Ｌ２層では１ニューロン当たり最大１，７９２（＝２５６×７）個のシナプス結合が形成されるので、１，７９２回の積和計算を行う。
【０１８４】
また、Ｌ２層には２５６個のニューロンが存在する。従って、Ｌ２層のニューロン全体では、４５８，７５２（＝１，７９２×２５６）回の積和計算を行うことになる。これらの計算を２［ｍｓ］で実行するので、加算器２７等は２２９．４［ＭＨｚ］で動作する。
【０１８５】
ラウンド１の前半では、メモリ２４Ａはデータ読み出しモードになっている。端子４２Ａに３２．７６８［ＭＨｚ］のクロック信号が入力すると、カウンター２３Ａはカウント値をカウントアップし、当該カウント値をメモリ２４Ａに出力する。これによって、メモリ２４Ａは３２．７６８［ＭＨｚ］で７ビットのデータを読み出す。メモリ２４Ａは当該データを並直変換して７倍の２２９．４［Ｍｂｐｓ］の１ビット信号ｓｉに変換する。
【０１８６】
その処理と共に、端子８４に２２９．４［ＭＨｚ］でクロック信号が入力すると、１９ビットカウンター６４はカウント値をカウントアップし、当該カウント値をメモリ６５に出力する。これによって、メモリ６５は、シナプス結合の重みデータｗｉ，ｊを２２９．４［ＭＨｚ］で読み出し、ＡＮＤゲート２６に出力する。
【０１８７】
ＡＮＤゲート２６は、前記ｓｉと前記ｗｉ，ｊを乗算して、乗算結果の８ビットの０又はｗｉ，ｊを加算器２７に出力する。加算器２７は、Ｌ２層のｊ番目のニューロン毎に、Σ（ｓｉ×ｗｉ，ｊ）のｉに対する総和を計算する。総和計算の最初に信号４４が０になり、加算器２７の出力から加算器２７の片側入力に戻るデータが０になる。ｉについての１，７９２回の総和計算が終わると、加算器２７は、当該総和計算結果を大小比較器２９に出力する。
大小比較器２９は、当該総和計算結果が閾値θよりも大きければ、１をメモリ６２へ出力し、当該総和計算結果が閾値θ以下であれば  ０をメモリ６２へ出力する。
端子８２に入力されるカウントアップ信号は１２８［ｋＨｚ］であるので、カウンター６１は１２８［ｋＨｚ］でそのカウント値をカウントアップし、前記カウント値をメモリ６２に出力する。従って、ラウンドの前半では、メモリ６２は、前記大小比較器２９が出力したデータを受け取り、順次、当該データを前記カウント値の番地に格納する。
【０１８８】
ラウンドの後半では、メモリ６２は読み出しモードになる。カウンター６１が１２８［ｋＨｚ］でカウントアップするので、メモリ６２は、前記格納したデータを１２８［ｋＨｚ］で読み出し、当該読み出したデータを端子４６に出力する。従って、Ｌ２層のニューロンの２５６個の出力データは、ラウンドの後半に１２８［ｋｂｐｓ］で出力される。
【０１８９】
＜自己組織化の処理の説明＞
次に、ラウンド後半の２［ｍｓ］で行う自己組織化の処理（以下、自己組織化モードと称する）について説明する。ここで、自己組織化とは、シナプス結合の重みｗｉ，ｊを０から固定値‘Ｄ０’に変更する処理と、シナプス結合の重みｗｉ，ｊを０以外の値から０にすることである。シナプス結合の重みｗｉ，ｊを、０以外の値から０にする過程は、後で説明する学習で行う。ここでは、シナプス結合の重みｗｉ，ｊを、０から固定値‘Ｄ０’に変更する処理について説明する。
自己組織化モードにおいて、メモリ６５はデータの読み出し動作と書き込み動作を同時に行う２ポートモードになっている。端子８４から２２９．４［ＭＨｚ］でクロック信号が入力されると、１９ビットカウンター６４は、そのカウント値をカウントアップする。１９ビットカウンター６４は、当該カウント値をメモリ６５へ出力する。
メモリ６５は、２２９．４［ＭＨｚ］でシナプス結合の重みｗｉ，ｊを１つ読み出し、当該重みｗｉ，ｊをゼロ検出器６８に出力する。
【０１９０】
ゼロ検出器６８は、受け取った重みｗｉ，ｊが０かどうかを判別する。当該重みｗｉ，ｊが０以外の場合は、ゼロ検出器６８は、０（信号Ｚｅｒｏが０）をＡＮＤゲート６７に出力するので、ＡＮＤゲート６７は、０を３入力セレクター６３に出力する。
３入力セレクター６３は、Ｓ０が０になると、入力信号として入力Ｉ０を選択する。これによって、３入力セレクター６３は、１増減回路６６が出力したデータを、メモリ６５に出力して、メモリ６５に格納されたｗｉ，ｊを変更するよう制御する。
【０１９１】
前記重みｗｉ，ｊが０の場合は、ゼロ検出器６８は、１をＡＮＤゲート６７に出力する。疑似乱数発生器７０は、端子８４に入力される２２９．４［ＭＨｚ］のクロック信号を受け取る。疑似乱数発生器７０は、シナプス結合の重みｗｉ，ｊ毎に新しい疑似乱数を発生し、当該擬似乱数を確率イネーブル信号発生器７３に出力する。
【０１９２】
確率イネーブル信号発生器７３は、内部のカウンター２０２の状態に応じた確率で第３の制御信号Ｅｎを１にし、当該信号をＡＮＤゲート６７に出力する。第３の制御信号Ｅｎが０の場合、ＡＮＤゲート６７は、出力信号Ｃｏｎを０とし、当該０を３入力セレクター６３へ出力する。
３入力セレクター６３は、当該０を受け取り、１増減回路６６が出力したデータを選択する。既に説明した様に、１増減回路６６は、その入力Ａに０が入力された場合、その出力Ｙは常に０である。従って、この場合は、３入力セレクター６３は、０をメモリ６５に出力し、メモリ６５は当該０を書き込むので、重みｗｉ，ｊは０のままで変化しない。
【０１９３】
ゼロ検出器６８が１を出力し、かつ確率イネーブル信号発生器７３から出力された第３の制御信号Ｅｎが１の場合は、ＡＮＤゲート６７は、出力Ｃｏｎを１とし、３入力セレクター６３へ出力する。３入力セレクター６３は、入力Ｓ０が１になるので入力Ｉ１を選択し、固定値‘Ｄ０’をメモリ６５に出力する。メモリ６５は受け取った当該固定値‘Ｄ０’を書き込む。
【０１９４】
結局、ジナプス結合の重みｗｉ，ｊが０の場合は、信号発生器７３のアップダウンカウンター２０２の状態に応じた確率で、メモリ６５に格納されている重みｗｉ，ｊが固定値‘Ｄ０’に書き替えられる。これによって、重みｗｉ，ｊの値が０から固定値‘Ｄ０’となり、新たなシナプス結合が形成されたことになる。
【０１９５】
１９ビットカウンター６９は、自己組織化モードの最初に、図示しないリセット信号によりカウント値が０になる。１９ビットカウンター６９は、信号Ｚｅｒｏが１になる度にカウントアップする。従って、自己組織化モードが終わり、メモリ６５から全てのデータを読み出し終えた時に、１９ビットカウンター６９は、メモリ６５に格納されていた重みｗｉ，ｊが０の個数を保持している。
【０１９６】
１９ビットカウンター６９は、当該カウント値を確率イネーブル信号発生器７３へ出力する。確率イネーブル信号発生器７３は、１９ビットカウンター６９からカウント値を受け取り、当該カウント値を端子Ａの信号とする。
図示しないレジスタ又は外部装置が、固定値γ（第３の所定の値）を確率イネーブル信号発生器７３へ出力する。確率イネーブル信号発生器７３は、レジスタ又は外部装置から固定値γ（第３の所定の値）を受け取り、当該固定値γ（第３の所定の値）を端子Ｂの信号とする。
【０１９７】
自己組織化モードの終わりに、確率イネーブル信号発生器７３は、図示しない外部装置が出力するデータ更新信号を端子８５で受け取り、当該更新信号を入力Ｎｅとする。確率イネーブル信号発生器７３内のアップダウンカウンター２０２は、当該入力Ｎｅを受け取る。
【０１９８】
前記アップダウンカウンター２０２は、前記入力Ｎｅを受け取ったときに、大小比較器２０１から受け取る信号が１の場合は、端子Ｑの信号を１増加させて、当該端子Ｑの信号を大小比較器２０３に出力する。
一方、前記アップダウンカウンター２０２は、前記入力Ｎｅを受け取ったときに、大小比較器２０１から受け取る信号が０の場合は、端子Ｑの信号を１減少させて、当該端子Ｑの信号を大小比較器２０３に出力する。
以上で、ラウンドの後半で行う自己組織化モードについての説明を終了する。
【０１９９】
＜シナプス結合の重みの変更＞
次に、ラウンドの後半で行う、シナプス結合の重みの変更（すなわちニューラルネットにおける学習）の処理（以下、学習モードと称する）について説明する。学習モードでは、Ｌ２層の２５６個のニューロンの出力ｂｊと、Ｌ１層の１，７９２個のニューロンの出力ｓｉとの関係を、網羅的に調べる。
【０２００】
学習モードでは、カウンター６１は、図示されていない外部装置が出力する１２８［ｋＨｚ］のカウントアップ信号を端子８２で受け取る。カウンター６１は、端子８２から前記信号を受け取るたびに、カウント値を１増加させる。カウンター６１は、当該カウント値をメモリ６２に出力する。メモリ６２は、カウンター６１から当該カウント値を受け取り、カウント値の番地に格納されたＬ２層のニューロンの出力ｂｊを、１２８［ｋＨｚ］で読み出す。
【０２０１】
メモリ６２は、前記読み出した出力ｂｊを、ＡＮＤゲート７４とインバーター７６に出力する。
インバーター７６は、前記出力ｂｊを受け取り、当該出力ｂｊを反転させｂ´ｊとする。インバーター７６は、当該ｂ´ｊをＡＮＤゲート７５に出力する。
【０２０２】
一方、メモリ２４Ａ又はメモリ２４Ｂは、格納しているＬ１層の出力データを３２．７６８［ＭＨｚ］で読み出し、当該出力データを並直変換して７倍の２２９．４［Ｍｂｐｓ］の１ビットデータｓｉに変換する。メモリ２４Ａ又はメモリ２４Ｂは、当該ｓｉをＡＮＤゲート７４と７５に出力する。
【０２０３】
端子８４から疑似乱数発生器７０のｃｋ入力に入力される信号は、メモリ２４Ａ又はメモリ２４Ｂが出力するデータｓｉのデータ転送レートと同じ２２９．４［ＭＨｚ］である。従って、確率イネーブル信号発生器７１は、データｓｉがＡＮＤゲート７４に入力される毎に、新たな第１の制御信号ＥｎをＡＮＤゲート７４へ出力する。また、確率イネーブル信号発生器７２は、データｓｉがＡＮＤゲート７５に入力される毎に、新たな第２の制御信号ＥｎをＡＮＤゲート７５とへ出力する。
【０２０４】
ここで、確率イネーブル信号発生器７１と、確率イネーブル信号発生器７２のそれぞれから出力される第１の制御信号と第２の制御信号とは、それぞれの信号発生器の内部にあるアップダウンカウンター２０２の状態に応じた確率で１になる。
【０２０５】
ＡＮＤゲート７４は、前記データｓｉと、前記データｂｊと、確率イネーブル信号発生器７１が出力した第１の制御信号Ｅｎと、を受け取る。ＡＮＤゲート７４は、前記データｓｉが１で、前記データｂｊが１で、前記第１の制御信号Ｅｎが１の場合に、Ｉｎｃ信号を１とし、当該Ｉｎｃ信号を１増減回路６６へ出力する。
【０２０６】
ＡＮＤゲート７５は、前記データｓｉと、前記データｂ´ｊと、確率イネーブル信号発生器７２が出力した第２の制御信号Ｅｎと、を受け取る。ＡＮＤゲート７５は、前記データｓｉが１で、前記データｂ´ｊが１（つまり前記データｂｊが０）で、前記第２の制御信号Ｅｎが１の場合に、Ｄｅｃ信号を１とし、当該Ｄｅｃ信号を１増減回路６６へ出力する。
アンドゲート７５が受け取るデータｂ´ｊは、アンドゲート７４が受け取るデータｂｊの反転データなので、Ｉｎｃ信号とＤｅｃ信号が同時に１になることはない。
【０２０７】
１増減回路６６は、前記Ｉｎｃ信号と前記Ｄｅｃ信号を受け取る。前記Ｉｎｃ信号が１の場合、１増減回路６６は、メモリ６５から受け取ったｗｉ，ｊの値を１増やし、当該１増やした値を３入力セレクター６３へ出力する。
１増減回路６６は、前記Ｄｅｃ信号が１の場合、メモリ６５から受け取ったｗｉ，ｊの値を１減らし、当該１減らした値を３入力セレクター６３へ出力する。
【０２０８】
３入力セレクター６３は、１増減回路６６が出力した変更後のｗｉ，ｊを受け取る。３入力セレクター６３は、当該変更後のｗｉ，ｊを選択し、メモリ６５に出力する。メモリ６５は、当該変更後のｗｉ，ｊを書き込む。
このようにして、Ｈｅｂｂの学習則に確率を組み合わせて、シナプス結合の重みｗｉ，ｊを変更することができる。これによって、回路ユニット１０で、ニューラルネットの、いわゆる学習を実現できる。
【０２０９】
ここで、学習モードでは、端子８０に入力される信号が１なので、ＯＲゲート６０が出力する信号は常に１となり、ＡＮＤゲート２６は常にメモリ６５が出力したデータｗｉ，ｊを出力する。
また、端子４４に入力される信号は、学習モードに入った最初に一度だけ０になる。これによって、加算器２７の出力は、学習モードに入った最初に、０に初期化される。
【０２１０】
学習モードの間に、加算器２７はΣｗｉ，ｊを算出する。ここで、Σは４５８，７５２個の全てのシナプス結合の重みについての総和を表している。加算器２７は、当該総和計算結果を、確率型イネーブル信号発生器７１の端子Ａと、確率型イネーブル信号発生器７２の端子Ｂに出力する。
【０２１１】
確率イネーブル信号発生器７１は、図示しないレジスタ又は外部装置からα（第1の所定の値）を受け取り、端子Ｂの信号とする。同様に、確率イネーブル信号発生器７２は、図示しないレジスタ又は外部装置からβ（第２の所定の値）を受け取り、端子Ａの信号とする。
【０２１２】
学習モードの終わりに、図示しないレジスタ又は外部装置から、端子８５にデータ更新信号を出力する。確率イネーブル信号発生器７１及び確率イネーブル信号発生器７２は、前記データ更新信号を受け取り、それぞれ端子Ｎｅの信号とする。
確率イネーブル信号発生器７１及び確率イネーブル信号発生器７２は、前記データ更新信号がアクティブになると、それぞれの内部にあるアップダウンカウンター２０２のカウント値を更新する。
【０２１３】
以上説明したように、図７に示す回路ユニット１０では、ニューラルネットに自己組織化と、変形したＨｅｂｂ則を用いた学習を行わせることができる。
【０２１４】
Ｌ２層の処理では、メモリ６５からのデータ読み出し速度や、加算器２７の演算速度が  ２２９．４［ＭＨｚ］と高速である。この動作速度を達成するのが難しい場合は、メモリ６５を１個の８［ｂｉｔ］×２５６×７×２５６のメモリではなく、例えば７個の８［ｂｉｔ］×２５６×２５６のメモリに分割してもよい。その場合、加算器２７等も７個並列にして、その動作速度を３２．８［ＭＨｚ］にすればよい。
【０２１５】
図１０に示す８ビット疑似乱数発生器は、そのｃｋ入力にクロック信号が２５５回入力されると値が一巡する。一方、シナプス結合の重みメモリに格納されているデータの個数は、２５６×７×２５６である。従って、１回のラウンドが終わって次のラウンドに入ると、最初のシナプス結合のデータについて観測すると、疑似乱数の順番が７ずれる。
【０２１６】
２５５と７の最小公倍数は２５５×７であるから、７ずつずれていくと元の値に戻るのに２５５ラウンドかかる。つまり、最初のシナプス結合のデータについて、そのシナプス結合に対応して発生する疑似乱数を観測すると、２５５ラウンドで１〜２５５の値が１回ずつ現れることになる。
同じことが全てのシナプス結合のデータについても言えるので、全てのシナプス結合の重みが同じ確率で増減されることになる。また、シナプス結合の重みが０の場合は、どのシナプス結合の重みも同じ確率で、新たな固定値‘Ｄ０’が設定される。
【０２１７】
ここで、同じ確率というのは、確率イネーブル信号発生器内のアップダウンカウンター２０２の値が、もしも一定であれば等しい確率になるという意味である。実際には、ラウンド毎に、前記アップダウンカウンター２０２の値は、更新されていく。
本発明の実施例では、疑似乱数発生器に８ビットガロアＬＦＳＲを用いたが、本発明はこれに制限されるものではなく、フィボナッチＬＦＳＲなど、他の方式の疑似乱数発生器を用いることもできる。また、本発明の実施例では、疑似乱数発生器が８ビットなので、確率の分解能は１／２５５である。本発明はこれに制限されるものではなく、ガロアＬＦＳＲを例えば９ビットにして、確率の分解能を上げることもできる。
【０２１８】
但し、疑似乱数が一巡する回数と、シナプス結合の重みデータの個数との関係には注意が必要であり、全てのシナプス結合の重みデータが、同じ確率で変更されるようにすることが望ましい。
【０２１９】
＜実施例２の説明＞
次に、Ｌ１層のニューロン２０ｉに抑制性ニューロンが存在する場合において、抑制性ニューロンの学習信号を生成する学習信号生成回路７７Ｂについて説明する。
まず、Ｌ１層に抑制性ニューロンのみが存在する場合について、説明する。
【０２２０】
図１３は、Ｌ１層のニューロン２０ｉが抑制性ニューロンのときの、学習信号生成部１２の回路図である。
抑制性ニューロンの学習信号生成回路７７Ｂは、確率イネーブル信号発生器７１Ｂと、確率イネーブル信号発生器７２Ｂと、ＡＮＤゲート７４Ｂと、ＡＮＤゲート７５Ｂと、インバーター７６Ｂと、を用いて構成されている。
【０２２１】
Ｌ１層の抑制性ニューロン２０ｉが出力する信号を受け取るＬ２層のニューロンのシナプス結合では、Ｌ１層のニューロンが発火し、Ｌ２層のニューロンが発火しなかった場合に、そのシナプス結合の重みを増やす。
従って、図１３に示すように、メモリ６２が出力したデータｂｊをＡＮＤゲート７４Ｂに入力する前に、当該データｂｊを反転させる。
【０２２２】
インバーター７６Ｂは、メモリ６２が出力した信号ｂｊを受け取り、当該データｂｊを反転させ、反転させたデータｂ´ｊをＡＮＤゲート７４Ｂへ出力する。
【０２２３】
逆に、Ｌ１層の抑制性ニューロン２０ｉが発火し、Ｌ２層のニューロン２２ｊが発火した場合に、そのシナプス結合の重みを減らす。
従って、図１３に示すように、メモリ６２が出力したデータｂｊを、ＡＮＤゲート７５Ｂへそのまま入力する。
【０２２４】
興奮性ニューロンが出力した信号を受け取るシナプス結合の学習速度と、抑制性ニューロンが出力した信号を受け取るシナプス結合の学習速度とは異なるので、シナプス結合の重みｗｉ，ｊが変化する確率を別にしなければならない。
【０２２５】
従って、図１３において、確率イネーブル信号発生器７１Ｂは、図示しない外部回路またはレジスタから供給される値δを、端子Ｂで受け取る。確率イネーブル信号発生器７１Ｂは、第１の制御信号に相当する信号ＥｎをＡＮＤゲート７４Ｂへ出力する。信号確率イネーブル信号発生器７１Ｂの内部の処理は、確率イネーブル信号発生器７１の内部の処理と同じなので、説明は省略する。
【０２２６】
同様に、確率イネーブル信号発生器７２Ｂは、図示しない外部回路またはレジスタから供給される値εを、端子Ｂで受け取る。確率イネーブル信号発生器７２Ｂは、第２の制御信号に相当する信号ＥｎをＡＮＤゲート７５Ｂへ出力する。信号確率イネーブル信号発生器７２Ｂの内部の処理は、確率イネーブル信号発生器７２の内部の処理と同じなので、説明は省略する。
【０２２７】
ＡＮＤゲート７４Ｂは、前記データｂ´ｊと、前記データｓｉと、信号確率イネーブル信号発生器７１Ｂが出力した第１の制御信号に相当する信号Ｅｎを受け取る。ＡＮＤゲート７４Ｂは、前記データｂ´ｊと前記データｓｉと前記第１の制御信号に相当する信号Ｅｎの論理積を算出する。ＡＮＤゲート７４Ｂは、当該論理積を信号Ｉｎｃとして、１増減回路の端子Ｉに出力する。
【０２２８】
ＡＮＤゲート７５Ｂは、前記データｂｊと、前記データｓｉと、信号確率イネーブル信号発生器７２Ｂが出力した第２の制御信号に相当する信号Ｅｎを受け取る。ＡＮＤゲート７５Ｂは、前記データｂｊと前記データｓｉと前記信号発生器７２Ｂが出力した第２の制御信号に相当する信号Ｅｎの論理積を算出する。ＡＮＤゲート７５Ｂは、当該論理積を信号Ｄｅｃとして、１増減回路の端子Ｄに出力する。
【０２２９】
以上により、Ｌ１層に抑制性ニューロンのみが存在していても、Ｌ１層のニューロン２０ｉからＬ２層へのニューロン２２ｊへのシナプス結合の重みを、変形したＨｅｂｂの学習則を用いて変化させることができる。
【０２３０】
＜実施例３の説明＞
次に、Ｌ１層のニューロン２０ｉの中に、興奮性ニューロンと抑制性ニューロンの両方が含まれる場合について説明する。図１４は、Ｌ１層のニューロン２０ｉの中に、興奮性ニューロンと抑制性ニューロンの両方が含まれる場合の、学習信号生成部１２の回路図である。
【０２３１】
混在型学習信号生成回路７８は、興奮性ニューロンの学習信号生成回路７７Ａと、抑制性ニューロンの学習信号生成回路７７Ｂと、セレクター７９Ａと、セレクター７９Ｂと、を用いて構成されている。
【０２３２】
セレクター７９Ａは、興奮性ニューロンの学習信号生成回路７７ＡのＡＮＤゲート７４の出力信号ＩｎｃＡと、抑制性ニューロンの学習信号生成回路７７ＢのＡＮＤゲート７４Ｂの出力信号ＩｎｃＢと、図示しない回路から供給される抑制性ニューロン識別信号ＩＮＨｉとを受け取る。抑制性ニューロン識別信号ＩＮＨｉは、Ｌ１層のニューロン２０ｉが興奮性の場合に０、抑制性の場合に１になる。
セレクター７９Ａは、前記識別信号ＩＮＨｉが０の場合に、前記信号ＩｎｃＡをＩｎｃ信号として１増減回路の端子Ｉに出力する。セレクター７９Ａは、前記識別信号ＩＮＨｉが１の場合は、前記信号ＩｎｃＢをＩｎｃ信号として１増減回路の端子Ｉに出力する。
【０２３３】
セレクター７９Ｂは、興奮性ニューロンの学習信号生成回路７７ＡのＡＮＤゲート７５の出力信号ＤｅｃＡと、抑制性ニューロンの学習信号生成回路７７ＢのＡＮＤゲート７５Ｂの出力信号ＤｅｃＢと、前記識別信号ＩＮＨｉとを受け取る。
セレクター７９Ｂは、前記識別信号ＩＮＨｉが０の場合に、前記信号ＤｅｃＡをＤｅｃ信号として１増減回路の端子Ｄに出力する。セレクター７９Ｂは、前記識別信号ＩＮＨｉが１の場合は、前記信号ＤｅｃＢをＤｅｃ信号として１増減回路の端子Ｄに出力する。
【０２３４】
以上により、Ｌ１層に興奮性ニューロンと抑制性ニューロンとが混在していても、Ｌ１層のニューロン２０ｉからＬ２層へのニューロン２２ｊへのシナプス結合の重みｗｉ，ｊを、変形したＨｅｂｂの学習則を用いて変化させることができる。
【０２３５】
本実施例では、Ｌ１層からＬ２層へパルス列によって情報が伝わる、所謂パルスニューラルネットについて説明したが、本発明はこれに制限されるものではなく、情報を複数ビットによって伝えるニューラルネットでも同様に適用できる。
本発明の実施例では、確率イネーブル信号発生回路内のコンパレータ２０１のビット幅を１２としたが、本発明はこれに制限されるものではなく、必用な分解能に応じて任意のビット幅のコンパレータを使用できる。
【０２３６】
本発明の実施例では、確率イネーブル信号発生回路内のアップダウンカウンター２０２の初期値をｘ’７Ｆ’としたが、本発明はこれに制限されるものではなく、任意の初期値を設定できる。
本発明の実施例では、１個のセルに含まれるニューロン数をＬ１層、Ｌ２層ともに２５６としたが、本発明はこれに制限されるものではなく、各層に１個以上のニューロンが存在すれば同様に適用できる。また、Ｌ１層とＬ２層のニューロン数が同数である必要はない。
【０２３７】
本発明の実施例では、フィードフォーワード型のニューラルネットで説明したが、フィードバックループの有るニューラルネットでも同様に本発明を適用できる。
本発明の実施例では、ニューラルネットが２層の層構造を持つとしたが、本発明はこれに制限されるものではなく、３層以上に拡張しても、各層毎に適用できる。
【０２３８】
本発明の実施例では、仮想空間を考え、そこに正六角形を配置し、その中に各層のニューロンを分割して配置する構成で説明したが、本発明はこれに制限されるものではなく、  ２次元以上の多次元空間を考え、そこに任意の多面体を配置し、その中に各層のニューロンを分割して配置する構成であっても、同様に適用できる。
【０２３９】
本発明の実施例では、α（第1の所定の値）、β（第２の所定の値）、γ（第３の所定の値）（抑制性ニューロンが混在する場合はδ、εも含む）などの値は、図示されないレジスタ又は外部から供給される固定値として説明したが、  本発明はこれに制限されるものではなく、これらの値を、学習や自己組織化の時定数よりも大きな時定数で変動する変数としても良い。
【０２４０】
例えば、非常に遅い周波数（例えば０．０００１Ｈｚ）でカウントダウンする１２ビットカウンターを用意し、その出力をγとする。このカウンターの初期値をｘ‘ＦＦＦ’に近い値として、殆ど全部のシナプス結合が直ぐに有効になる状態を作り出し、その後、γを少しずつ小さくしながら学習を進めることで、有効な信号伝達経路だけが残る自己組織化を早く進めることができる。
【０２４１】
＜本発明の効果＞
本発明の技術を使うと、大規模なニューラルネットを構築でき、それに自己組織化と変形したＨｅｂｂ則を用いた学習を、生体の神経回路網の動作速度と同等の速度で行わせることができる。自己組織化に於ける新規シナプス結合の生成は、確率によって制御される。この確率は未接続シナプス結合の数が或る設定値γよりも多い場合は増大し、未接続シナプス結合の数が或る設定値γよりも少ない場合は減少する。従って、未接続シナプス結合の数は、設定値γの周りで揺らぎ、生体の脳に近い構造が得られる。
【０２４２】
また、変形したＨｅｂｂ則を用いた学習では、一定領域（実施例では１個のセル）内のシナプス結合の重みの総和を計算し、この値を設定値α（第1の所定の値）及びβ（第２の所定の値）と比較し、その大小関係に応じてシナプス結合の重みを増やす確率や、減らす確率を増減するので、ニューラルネットの安定性が増し、更に過剰な学習による汎化能力の低下を防ぐ効果がある。
【０２４３】
本発明の技術では、α（第1の所定の値）、β（第２の所定の値）、γ（抑制性ニューロンが混在する場合はδ、εも含む）などの値は、全てのセルに共通に供給される情報である。また、自己組織化や学習に必要な情報は、全て一定領域内（セル内）で完結している。つまり、セル間で情報をやりとりする必要が無いので、セルの数を増やしてニューラルネットの規模を増大しても、セル間の情報通信が問題になることは無い。
【０２４４】
従って、図２（ｂ）で示したセル間の配線と組み合わせることにより、原理的に幾らでも大きなニューラルネットを構築でき、そのニューラルネットに実際の神経回路網の動作速度と同等の速度で、自己組織化と学習をする機能を持たせることができる。
【０２４５】
以上、本発明の実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０２４６】
ＣＮ  セル（ポリトープ）
１  第１の出力部
２  入力部
３  重み記憶部
４  乗算部
５  加算部
６  比較決定部
７  第２の出力部
８  重み変更部
１０  回路ユニット
１１  疑似乱数生成部
１２  学習信号生成部
１３  重み増減部
１４  シナプス作成指令部
１５  切替部
２０  ８ビットカウンター
２１  メモリ
２２  パルス列変調回路
２３Ａ  ８ビットカウンター
２３Ｂ  ８ビットカウンター
２４Ａ  メモリ
２４Ｂ  メモリ
２６  ＡＮＤゲート
２７  加算器
２８  ＡＮＤゲート
２９  大小比較器
６０  ＯＲゲート
６１  カウンター
６２  メモリ
６３  ３入力セレクター
６４  １９ビットカウンター
６５  メモリ
６６  １増減回路
６７  ＡＮＤゲート
６８  検出器
６９  １９ビットカウンター
７０  疑似乱数発生器
７１  確率イネーブル信号発生器
７２  確率イネーブル信号発生器
７３  確率イネーブル信号発生器
７４  ＡＮＤゲート
７４Ｂ  ＡＮＤゲート
７５  ＡＮＤゲート
７５Ｂ  ＡＮＤゲート
７６  インバーター
７６Ｂ  インバーター
７７Ａ  興奮性ニューロンの学習信号生成回路
７７Ｂ  抑制性ニューロンの学習信号生成回路
７８  混在型学習信号生成回路
７９Ａ  セレクター
７９Ｂ  セレクター
１０１  ｘ’ＦＦ’検出器
１０２  ｘ’００’検出器
１０３  ３入力ＡＮＤゲート
１０４  ＡＮＤゲート
１０５  ＯＲゲート
１０６  ８ビット加減算器
２０１  大小比較器
２０２  アップダウンカウンター
２０３  ８ビット大小比較器
【図１】
0005393589.tif 000002
【図２】
0005393589.tif 000003
【図３】
0005393589.tif 000004
【図４】
0005393589.tif 000005
【図５】
0005393589.tif 000006
【図６】
0005393589.tif 000007
【図７】
0005393589.tif 000008
【図８】
0005393589.tif 000009
【図９】
0005393589.tif 000010
【図１０】
0005393589.tif 000011
【図１１】
0005393589.tif 000012
【図１２】
0005393589.tif 000013
【図１３】
0005393589.tif 000014
【図１４】
0005393589.tif 000015
【図１５】
0005393589.tif 000016
【図１６】
0005393589.tif 000017