(57)【特許請求の範囲】
【請求項１】
階層型ニューラルネットワークを演算する並列演算装置であって、
予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、
前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、
前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、
を有し、
前記ユニットが、
前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、
前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、
前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、
前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、
を有し、
前記共有重み記憶部には、
前記階層型ニューラルネットワークにおいて階層を識別する層情報と、
前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、
前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、
に関連付けて前記結合荷重が記憶されており、
前記共有重み記憶部は、
前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、
前記複数の記憶ユニットのそれぞれが、
前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、
前記ユニット演算部が、
前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、
ことを特徴とする並列演算装置。
【請求項２】
前記記憶ユニットには、
前記層情報の順に、前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とが交互となるように前記結合荷重が記憶されている、
ことを特徴とする請求項１に記載の並列演算装置。
【請求項３】
前記複数の記憶ユニットが、
前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報に基づいて、行方向と列方向とに格子状に配置されており、
前記共有重み記憶部が、
前記記憶ユニットを行方向で、前記２つのユニットのうち一方のユニットに接続させる行スイッチと、
前記記憶ユニットを列方向で、前記２つのユニットのうち他方のユニットに接続させる列スイッチと、
前記階層型ニューラルネットワークにおける演算に基づいて、前記行スイッチと前記列スイッチとを接続状態または非接続状態に制御するスイッチ制御部と、
を有することを特徴とする請求項２に記載の並列演算装置。
【請求項４】
前記スイッチ制御部が、
前記階層型ニューラルネットワークにおける演算に基づいて、
前記行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの行方向に配置されている複数の記憶ユニットが、前記階層に対応する前記結合荷重を出力するように制御するとともに、前記列スイッチを接続状態に制御し前記行スイッチを非接続状態に制御する行アクティブ状態と、
前記行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの列方向に配置されている複数の記憶ユニットが、前記階層に対応する前記結合荷重を出力するように制御するとともに、前記列スイッチを非接続状態に制御し前記行スイッチを接続状態に制御する列アクティブ状態と、
に制御する、
ことを特徴とする請求項３に記載の並列演算装置。
【請求項５】
前記階層型ニューラルネットワークにおける入力層を１層目とし、入力層から出力層へと順に層の番号が付してある場合に、
前記スイッチ制御部が、
前記階層型ニューラルネットワークの演算において、層の順序を示す値が奇数の層である奇数層が出力側であり、層の順序を示す値が偶数層の層である偶数層が入力側である場合には、前記行アクティブ状態に制御し、
前記偶数層が出力側であり前記奇数層が入力側である場合には、前記列アクティブ状態に制御する、
ことを特徴とする請求項４に記載の並列演算装置。
【請求項６】
前記スイッチ制御部が、
前記分配制御部から入力された制御データに基づいて制御する、
ことを特徴とする請求項３から請求項５に記載の並列演算装置。
【請求項７】
前記複数のユニットのうち、前記入力ノード情報の値と出力ノード情報の値とが同一である結合荷重が記憶されている記憶ユニットに対応するユニットは、
前記対応する記憶ユニットと接続されている、または、前記対応する記憶ユニットを内蔵している、
ことを特徴とする請求項２から請求項６に記載の並列演算装置。
【請求項８】
前記階層型ニューラルネットワークにおける入力層を１層目とし、入力層から出力層へと順に層の番号が付してある場合に、
前記共有重み記憶部が、
前記行方向または列方向のうちいずれか一方の方向における記憶ユニットとして、前記階層型ニューラルネットワークにおける偶数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有し、
前記行方向または列方向のうち他方の方向における記憶ユニットとして、前記階層型ニューラルネットワークにおける奇数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する、
ことを特徴とする請求項３から請求項７に記載の並列演算装置。
【請求項９】
前記複数のユニットの個数として、
前記階層型ニューラルネットワークにおける全ての層において、１つの層におけるノード数の最大値と、等しいユニットの個数を少なくとも有する、
ことを特徴とする請求項１から請求項８に記載の並列演算装置。
【請求項１０】
階層型ニューラルネットワークを演算する並列演算装置であって、
予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、
前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、
前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、
を有し、
前記ユニットが、
前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、
前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、
前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、
前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、
を有し、
前記共有重み記憶部には、
前記階層型ニューラルネットワークにおいて階層を識別する層情報と、
前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、
前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、
に関連付けて前記結合荷重が記憶されており、
前記共有重み記憶部は、
前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、
前記複数の記憶ユニットのうち、前記記憶されている結合荷重と関連付けられている前記入力ノード情報の値と前記出力ノード情報の値とが等しくない前記記憶ユニットは、前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、
前記複数の記憶ユニットのうち、前記記憶されている結合荷重と関連付けられている前記入力ノード情報の値と前記出力ノード情報の値とが等しい前記記憶ユニットは、前記複数のユニットのうちの１つのユニットに共有されており、
前記ユニット演算部が、
前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、
ことを特徴とする並列演算装置。
【請求項１１】
予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、
前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、
を有し、
前記ユニットが、
前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、
前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、
前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、
前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、
を有する階層型ニューラルネットワークを演算する並列演算装置において用いられる並列演算方法であって、
前記共有重み記憶部には、
前記階層型ニューラルネットワークにおいて階層を識別する層情報と、
前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、
前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、
に関連付けて前記結合荷重が記憶されており、
前記共有重み記憶部は、
前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、
前記複数の記憶ユニットのそれぞれが、
前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、
前記ユニット演算部が、
前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、
ことを特徴とする並列演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算ユニットを有する並列演算装置に関し、特に、複数の演算ユニット間の接続を簡易にすることを可能とする並列演算装置に関する。
【背景技術】
【０００２】
並列演算が性能を発揮するアプリケーションの１つとして、ニューラルネットワークが知られている。このニューラルネットワークは、脳機能に見られるいくつかの特性を表現することを目指した数学モデルである。このニューラルネットワークによる処理は、入力されたデータの情報量を削減することが可能であるため、画像や統計など多次元量のデータでかつ線形分離不可能な問題に対して、比較的小さい計算量で良好な解を得られることが多い。そのためニューラルネットワークは、パターン認識やデータマイニングをはじめ、さまざまな分野において応用されている。
【０００３】
ここで、大規模なニューラルネットワークを実現しようとすると、その計算量が膨大となるため、現実的な時間での処理が難しくなる。これを解決する方法として、（１）単体プロセッサ自体のコンピューティングパワーを上げる方法、（２）プロセッサを複数用いる並列コンピューティングの手法を用いる方法、（３）機能をＬＳＩ等によりハードウェアにより実装する方法、等が考えられる。上記（１）と（２）との方法は、プロセッサの能力を上げることで膨大な計算量に対処しようとするものであり、プログラムを変更することで様々なニューラルネットワークのアルゴリズムに対応することができる。
【０００４】
ここで（１）の方法においては、従来、単体プロセッサのクロック周波数を高速化することで単体プロセッサ自体のコンピューティングパワーを上げてきていた。しかし、近年、クロック周波数の高速化は発熱量を増加させ、また、微細加工寸法が物理的限界に達しつつあることからムーアの法則が破綻しつつあり、単体プロセッサ自体のコンピューティングパワーを上げることが難しくなってきている。そのため、（１）の方法から（２）の方法へと、プロセッサのコンピューティングパワーを上げる方法の開発がシフトしてきており、コンピューティングパワーを上げるという高性能化と、発熱を抑えることの両立をより進めるために、より大きなキャッシュと複数の計算コアを持つことに焦点が当てられている。また、このプロセッサの開発は、低いクロック周波数で動作し、低電力化で動作するようにも、進められている。
【０００５】
しかし、（２）の方法においては、膨大なプロセッサを効率的に動作させる方法、つまり並列度を上げることと、複数のプロセッサ間の膨大なデータ通信を可能とするネットワークの構成が難しいことが本質的な問題としてある。そのため、（２）の方法である、プロセッサを複数用いる並列コンピューティングの手法を用いる方法により、大規模なニューラルネットワークの並列演算効率を上げることは、難しい。
【０００６】
一方、（３）の方法であるハードウェア化に関しては、ハードウェアで実現可能なニューラルネットワークのアルゴリズムに制限があるが、特定な用途に対しては（１）または（２）の方法に比べ、低周波数での場合でも、桁違いな演算速度の性能を発揮することが可能である。このような、並列演算をハードウェア化する技術として、特許文献１および特許文献２が知られている。
【特許文献１】特開平６−１９５４５４号公報
【特許文献２】特開２００６−３９７９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、（３）の方法であるハードウェア化に関しての特許文献１および特許文献２の従来技術においては、配線の問題があり、配線のために回路規模が膨大となり、または、回路間の配線が出来ないという問題がある。例えば、多層型のニューラルネットワークにおいては、出力層のあるノードからの出力を、入力層の全てのノードの入力に入力することが必要となり、各層のノード数が増大すると、その配線量が急激に増大してしまう。
【０００８】
また、例えば、実際の脳のニューラルネットワークの場合、ニューロンは３次元空間に配置され配線されているのに対し、ＬＳＩのようなハードウェアによる構成では構成要素の配置は２次元が基本であるため、配線の問題を本質的には解決できない。積層構造などで構成要素を３次元化しようとしても配線の問題は残るので、応用は限られた配線（近傍のみとの結合）で事足りるような用途に限定される。
【０００９】
また、このような複数の演算ユニット間の配線の問題は、ニューラルネットワークに限られるものではなく、演算ユニットの出力を、一度に複数の演算ユニットに入力することが計算上必要な場合に、問題となる。階層型ニューラルネットワークや自己組織化マップのような一般のニューラルネットワーク以外にも、例えば、重力多体問題、電荷を持った多体粒子のシミュレーション、信号のフィルタリング、などがある。
【００１０】
本発明は、このような事情に鑑みてなされたもので、その目的の一つは、複数の演算ユニット間の配線を簡易にすることを可能とする並列演算装置および並列演算方法を提供することにある。
【課題を解決するための手段】
【００１１】
この発明は上述した課題を解決するためになされたもので、請求項１に記載の発明は、階層型ニューラルネットワークを演算する並列演算装置であって、予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、を有し、前記ユニットが、前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、を有し、前記共有重み記憶部には、前記階層型ニューラルネットワークにおいて階層を識別する層情報と、前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、に関連付けて前記結合荷重が記憶されており、前記共有重み記憶部は、前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、前記複数の記憶ユニットのそれぞれが、前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、前記ユニット演算部が、前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、ことを特徴とする並列演算装置である。
【００１２】
この発明によれば、並列演算装置が、複数のユニットに共有され、階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部を有し、この共有重み記憶部に記憶されている結合荷重に基づいて、階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、出力層から入力層へと向かう方向である逆方向における演算を実行し、結合荷重を更新して学習することにより、階層型ニューラルネットワークの演算が更に高速に実行できるという効果を奏する。
【００１３】
また、この発明は、前記記憶ユニットには、前記層情報の順に、前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とが交互となるように前記結合荷重が記憶されている、ことを特徴とする請求項１に記載の並列演算装置である。
【００１４】
この発明によれば、共有重み記憶部が結合荷重の記憶されている複数の記憶ユニットを有しているために、複数のユニットは、それぞれ対応する記憶ユニットから並列に結合荷重を読み出すまたは更新することが可能となり、並列演算装置において並列演算が可能となる効果を奏する。
また、この記憶ユニットは、対応する２つのユニットに共有されているため、共有されている記憶ユニットに記憶されている結合荷重の値を更新する場合においても、対応する２つのユニットに共有されている結合荷重の値の整合性を調整する処理が不要となり、全体の処理が高速になる効果を奏する。
【００１５】
また、この発明は、前記複数の記憶ユニットが、前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報に基づいて、行方向と列方向とに格子状に配置されており、前記共有重み記憶部が、前記記憶ユニットを行方向で、前記２つのユニットのうち一方のユニットに接続させる行スイッチと、前記記憶ユニットを列方向で、前記２つのユニットのうち他方のユニットに接続させる列スイッチと、前記階層型ニューラルネットワークにおける演算に基づいて、前記行スイッチと前記列スイッチとを接続状態または非接続状態に制御するスイッチ制御部と、を有することを特徴とする請求項２に記載の並列演算装置である。
【００１６】
この発明によれば、記憶ユニットが、行スイッチにより２つのユニットのうち一方のユニットに接続され、列スイッチにより２つのユニットのうち他方のユニットに接続され、この行スイッチと列スイッチとがスイッチ制御部により制御されることにより、記憶ユニットは２つのユニットのうち、多くてもいずれか一方のユニットに接続されるため、記憶ユニットとユニットとの間において、２つのユニットが衝突することなく、結合荷重の入出力が可能となる効果を奏する。
【００１７】
また、この発明は、前記スイッチ制御部が、前記階層型ニューラルネットワークにおける演算に基づいて、前記行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの行方向に配置されている複数の記憶ユニットが、前記階層に対応する前記結合荷重を出力するように制御するとともに、前記列スイッチを接続状態に制御し前記行スイッチを非接続状態に制御する行アクティブ状態と、前記行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの列方向に配置されている複数の記憶ユニットが、前記階層に対応する前記結合荷重を出力するように制御するとともに、前記列スイッチを非接続状態に制御し前記行スイッチを接続状態に制御する列アクティブ状態と、に制御する、ことを特徴とする請求項３に記載の並列演算装置である。
【００１８】
この発明によれば、スイッチ制御部が、行スイッチと列スイッチとを制御するとともに、記憶ユニットの出力も制御することにより、記憶ユニットとユニットとの間において、衝突することなく、結合荷重の入出力が可能となる効果を奏する。
【００１９】
また、この発明は、前記階層型ニューラルネットワークにおける入力層を１層目とし、入力層から出力層へと順に層の番号が付してある場合に、前記スイッチ制御部が、前記階層型ニューラルネットワークの演算において、層の順序を示す値が奇数の層である奇数層が出力側であり、層の順序を示す値が偶数層の層である偶数層が入力側である場合には、前記行アクティブ状態に制御し、前記偶数層が出力側であり前記奇数層が入力側である場合には、前記列アクティブ状態に制御する、ことを特徴とする請求項４に記載の並列演算装置である。
【００２０】
この発明によれば、スイッチ制御部が、階層型ニューラルネットワークでの演算を実行している層に応じて行スイッチと列スイッチと記憶ユニットとを制御することにより、
記憶ユニットとユニットとの間において、衝突することなく、階層型ニューラルネットワークの演算が実行できるという効果を奏する。
【００２１】
また、この発明は、前記スイッチ制御部が、前記分配制御部から入力された制御データに基づいて制御する、ことを特徴とする請求項３から請求項５に記載の並列演算装置である。
【００２２】
この発明によれば、分配制御部がユニットに出力する制御データによりスイッチ制御部が制御することができるという効果を奏する。
【００２３】
また、この発明は、前記複数のユニットのうち、前記入力ノード情報の値と出力ノード情報の値とが同一である結合荷重が記憶されている記憶ユニットに対応するユニットは、前記対応する記憶ユニットと接続されている、または、前記対応する記憶ユニットを内蔵している、ことを特徴とする請求項２から請求項６に記載の並列演算装置である。
【００２４】
この発明によれば、複数のユニットのうち、入力ノード情報の値と出力ノード情報の値とが同一である結合荷重が記憶されている記憶ユニットに対応するユニットは、対応する記憶ユニットと接続してもよいため、または、対応する記憶ユニットを内蔵してもよいため、行スイッチと列スイッチとの個数を減ずる効果、配線がしやすくなる効果、または、記憶ユニットの個数を減ずる効果を有する。
【００２７】
また、この発明は、前記階層型ニューラルネットワークにおける入力層を１層目とし、入力層から出力層へと順に層の番号が付してある場合に、前記共有重み記憶部が、前記行方向または列方向のうちいずれか一方の方向における記憶ユニットとして、前記階層型ニューラルネットワークにおける偶数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有し、前記行方向または列方向のうち他方の方向における記憶ユニットとして、前記階層型ニューラルネットワークにおける奇数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する、ことを特徴とする請求項３から請求項７に記載の並列演算装置である。
【００２８】
この発明によれば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、共有重み記憶部で必要となる記憶ユニットの個数を最小とすることにより、記憶ユニットの個数を減ずる効果を奏する。
【００２９】
また、この発明は、前記複数のユニットの個数として、前記階層型ニューラルネットワークにおける全ての層において、１つの層におけるノード数の最大値と、等しいユニットの個数を少なくとも有する、ことを特徴とする請求項１から請求項８に記載の並列演算装置である。
【００３０】
この発明によれば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、必要となるユニットの個数を最小とすることにより、ユニットの個数を減ずることができるという効果を奏する。
【００３１】
また、この発明は、階層型ニューラルネットワークを演算する並列演算装置であって、予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、を有し、前記ユニットが、前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、を有し、前記共有重み記憶部には、前記階層型ニューラルネットワークにおいて階層を識別する層情報と、前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、に関連付けて前記結合荷重が記憶されており、前記共有重み記憶部は、前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、前記複数の記憶ユニットのうち、前記記憶されている結合荷重と関連付けられている前記入力ノード情報の値と前記出力ノード情報の値とが等しくない前記記憶ユニットは、前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、前記複数の記憶ユニットのうち、前記記憶されている結合荷重と関連付けられている前記入力ノード情報の値と前記出力ノード情報の値とが等しい前記記憶ユニットは、前記複数のユニットのうちの１つのユニットに共有されており、前記ユニット演算部が、前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、ことを特徴とする並列演算装置である。
この発明によれば、記憶ユニットを共有している２つのユニットは、同一のユニットであるため、格子状に配置されている記憶ユニットにおいて、対角線上に配置されている記憶ユニットとユニットとを対応づけることが可能となり、配線がしやすくなる効果、または、行スイッチと列スイッチとの個数を減ずる効果を奏する。
また、この発明は、予め定められた識別番号である固有ユニット番号によりそれぞれが識別される複数のユニットと、前記複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バスを介して入力されたことに応じて、該入力された入力値と前記複数のユニットの中から選択したいずれか１つのユニットを選択する識別番号である選択ユニット番号とを含む制御データを、前記複数のユニットのそれぞれにユニット入力バスを介して出力する分配制御部と、前記複数のユニットに共有され、前記階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部と、を有し、前記ユニットが、前記ユニット入力バスを介して前記分配制御部からの制御データを入力するデータ入力部と、前記データ入力部に入力された制御データに含まれる選択ユニット番号と、前記固有ユニット番号とが一致するか否かを判定するユニット番号一致判定部と、前記データ入力部に入力された制御データに含まれる入力値に基づいて、前記ユニット毎に予め定められた演算方法により演算するユニット演算部と、前記ユニット番号一致判定部が判定した結果が一致である場合には、前記ユニット演算部が演算した結果である演算結果を前記出力値として、前記分配制御部に前記ユニット出力バスを介して出力するデータ出力部と、を有する階層型ニューラルネットワークを演算する並列演算装置において用いられる並列演算方法であって、前記共有重み記憶部には、前記階層型ニューラルネットワークにおいて階層を識別する層情報と、前記階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、前記階層型ニューラルネットワークにおいて前記出力値を入力しているノードを識別する入力ノード情報と、に関連付けて前記結合荷重が記憶されており、前記共有重み記憶部は、前記入力ノード情報の１つの値と前記出力ノード情報の１つの値とに対応する前記結合荷重が、前記層情報の異なる値毎に記憶されている複数の記憶ユニットを有し、前記複数の記憶ユニットのそれぞれが、前記記憶ユニットに記憶されている前記結合荷重と関連付けられている前記入力ノード情報および前記出力ノード情報と、前記ユニットが前記階層型ニューラルネットワークにおいて演算するノードとに基づいて、前記複数のユニットのうち２つのユニットに共有されており、前記ユニット演算部が、前記共有重み記憶部に記憶されている結合荷重に基づいて、前記階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、前記出力層から入力層へと向かう方向である逆方向における演算を実行し、前記結合荷重を更新する、ことを特徴とする並列演算方法である。
【発明を実施するための最良の形態】
【００３２】
＜第１の基本構成＞
以下、図面を参照して、本発明の実施の形態について説明する。図１は、この発明の一実施形態による並列演算装置の構成（第１の基本構成）を示す概略ブロック図である。ここでは、ユニットＵ１からＵ１０の、ユニットの個数が１０である場合について説明する。なお、このユニットの詳細については、後述する。
【００３３】
複数のユニットＵ１からＵ１０は、予め定められた順序であるデイジーチェーン順序で、デイジーチェーン制御バス１を介してデイジーチェーンされている。ここでは、このデイジーチェーン順序は、ユニットＵ１、ユニットＵ２、ユニットＵ３、・・・ユニットＵ１０の順と、予め定められているものとして説明する。また、デイジーチェーン制御バス１は、デイジーチェーン順序で隣接するユニット同士を接続している。例えば、デイジーチェーン制御バス１は、ユニットＵ１とユニットＵ２、ユニットＵ２とユニットＵ３、・・・ユニットＵ１０とユニットＵ１、を接続している。また、このデイジーチェーン制御バス１は、ユニットＵ１からＵ１０をデイジーチェーン順序で循環的に接続している。そのため、ユニットＵ１０とユニットＵ１とも、デイジーチェーン制御バス１を介して接続されている。
【００３４】
ユニットＵ１からＵ１０のそれぞれのユニットは、トークンをデイジーチェーン順序で、デイジーチェーン制御バス１を介してユニット間で送受信している。このトークンは、デイジーチェーンされたユニットＵ１からＵ１０の、いずれかの１つのユニットが有しており、このトークンを有しているユニットが、出力ユニットとなることを示す信号である。ユニットは、トークンを有しているユニットのみが出力ユニットとなり、また、全てのユニットが入力ユニットとなる。
【００３５】
この各ユニットは、ユニット出力バス２を介して入力される増幅器４からの入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、各ユニットは、トークンがデイジーチェーン順序で前のユニットからデイジーチェーン制御バス１を介して入力されたことに応じて、トークンをデイジーチェーン順序で次のユニットにデイジーチェーン制御バス１を介して出力すると共に、演算した結果を出力値として増幅器４にユニット出力バス２を介して出力する。
【００３６】
増幅器（中継器）４は、複数のユニットＵ１からＵ１０の内のいずれか１つが出力する出力値がユニット出力バス２を介して入力され、入力された出力値を複数のユニットＵ１からＵ１０のそれぞれに、ユニット入力バス３を介して入力値として出力する。また、増幅器４は、入力された出力値の信号を、電気的に増幅して、入力値として出力する。
【００３７】
また、ユニット出力バス２の一端が、並列演算装置の出力端子Ｐ１に接続されている。また、増幅器４の入力端子に、並列演算装置の入力端子Ｐ２に接続されている。また、ユニットＵ１は、トリガ入力線５を介して、トリガ入力端子Ｐ３と、接続されている。また、出力端子Ｐ１、入力端子Ｐ２、トリガ入力端子Ｐ３は、並列演算装置の外部にある制御装置に接続されている。制御装置は、出力端子Ｐ１、入力端子Ｐ２、トリガ入力端子Ｐ３を介して、並列演算装置にデータを入力し、並列演算装置から演算結果を取得し、また、並列演算装置を制御する。
【００３８】
次に、図２を用いて、各ユニットの構成について説明する。なお、ユニットＵ１からＵ１０は同一の構成を有するため、ここでは、ユニットＵ２の構成のみについて説明する。ユニットＵ２は、トークン入力部１２と、トークン出力部１３と、データ入力部１１と、データ出力部１４と、ユニット演算部１５と、ユニット出力記憶部１６と、を有する。
【００３９】
トークン入力部１２は、デイジーチェーン制御バス１を介してデイジーチェーンされている順序が１つ前のユニットからのトークンを入力する。例えば、ユニットＵ２のトークン入力部１２は、デイジーチェーン制御バス１を介してデイジーチェーンされている順序が１つ前のユニットであるユニットＵ１からのトークンを入力する。なお、ユニットＵ１のトークン入力部１２は、ユニットＵ１０からのトークンがトークンデイジーチェーン制御バス１を介して入力されるだけでなく、制御装置からのトークンがトリガ入力端子Ｐ３とトリガ入力線５とを介して入力される。
【００４０】
トークン出力部１３は、トークン入力部にトークンが入力されたことに応じて、トークンをデイジーチェーンされている順序が１つ後のユニットへデイジーチェーン制御バス１を介して出力する。例えば、ユニットＵ２のトークン出力部１３は、デイジーチェーン制御バス１を介してデイジーチェーンされている順序が１つ後のユニットであるユニットＵ３へトークンを出力する。
【００４１】
データ入力部１１は、ユニット出力バス２を介して増幅器４からの入力値を入力する。ユニット出力記憶部１６は、ユニット演算部１５が演算した結果である演算結果が記憶される。ユニット演算部１５は、データ入力部１１に入力された入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、ユニット演算部１５は、演算した結果である演算結果を、ユニット出力記憶部１６に記憶させる。
【００４２】
データ出力部１４は、トークン入力部１２にトークンが入力されたことに応じて、ユニット演算部１５が演算した結果である演算結果を出力値として、増幅器４にユニット出力バス２を介して出力する。また、データ出力部１４は、トークン入力部１２にトークンが入力されたことに応じて、ユニット出力記憶部１６から演算結果を読み出し、読み出した演算結果を出力値として、増幅器４にユニット出力バス２を介して出力する。
【００４３】
なお、後述するように、並列演算装置が、トリガであるトークンをユニットＵ１にトリガ入力端子Ｐ３を介して入力し、ユニットＵ１から順にトークンがユニット間で順次渡されていくことにより、並列演算装置の各ユニットでの処理が実行される。この並列演算装置の動作については、次に説明する並列演算装置を階層型ニューラルネットワークに適応した場合を例にして説明する。
【００４４】
＜第１の実施形態＞
＜階層型ニューラルネットワークに適応した場合のユニットの構成＞
次に、並列演算装置を、階層型ニューラルネットワークに適応した場合の構成について説明する。階層型ニューラルネットワークにおいても並列演算装置全体の構成は、図１の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図３を用いて、階層型ニューラルネットワークに適応した場合のユニットの構成を説明する。
【００４５】
ユニットは、データ入力部１０１と、トークン入力部１０２と、トークン出力部１０３と、データ出力部１０４とを有する。また、ユニットは、重み記憶部１３０と、層情報記憶部１３３と、ユニット数記憶部１３４と、積和計算一次値記憶部１３１と、関数記憶部１３２と、ユニット出力記憶部１３５と、データ出力フラグ記憶部１３６と、ユニット識別情報記憶部１３７とを有する。また、ユニットは、カウンタ１１４と、積和計算一次値算出部１１１と、層情報算出部１１３と、ユニット出力算出部１１２とを有する。
【００４６】
ここで、図３のデータ入力部１０１、トークン入力部１０２、トークン出力部１０３、データ出力部１０４は、図２のデータ入力部１１、トークン入力部１２、トークン出力部１３、データ出力部１４に、それぞれ対応する。また、図３のユニット出力記憶部１３５が、図２のユニット出力記憶部１６に対応する。これらの図２と図３とにおいて対応する構成について、共通の機能については、その説明を省略する。
【００４７】
また、図３の重み記憶部１３０と、層情報記憶部１３３と、ユニット数記憶部１３４と、積和計算一次値記憶部１３１と、関数記憶部１３２と、データ出力フラグ記憶部１３６と、ユニット識別情報記憶部１３７と、カウンタ１１４と、積和計算一次値算出部１１１と、層情報算出部１１３と、ユニット出力算出部１１２とが、図２のユニット演算部１５に対応する。
【００４８】
層情報記憶部１３３には、階層型ニューラルネットワークの階層のうち、アクティブな層（出力層）を識別する層情報が記憶されている。ユニット識別情報記憶部１３７には、アクティブな層に属しているユニットのうち、いずれのユニットが出力しているかを示すユニット識別情報が記憶されている。関数記憶部１３２には、ユニットの出力関数と層情報とが関連付けて予め記憶されている。この出力関数とは、例えば、シグモイド関数、ステップ関数、区分線形関数などの、予め定められた関数である。
【００４９】
重み記憶部１３０には、層情報で識別されるアクティブな層のユニットからの出力値に乗ずる予め定められた結合荷重と、層情報とが関連付けて記憶されている。また、重み記憶部１３０には、層情報とユニット識別情報とで識別される層のユニットからの出力値に乗ずる予め定められた結合荷重と、層情報とユニット識別情報とが、関連付けて記憶されている。
【００５０】
ユニット数記憶部１３４には、層情報と層情報で識別される階層に属する階層型ニューラルネットワークのユニット数とが関連付けて予め記憶されている。積和計算一次値記憶部１３１には、前段ユニットに相当するユニットからの入力値と結合荷重とを乗じた積和計算一次値情報が記憶される。データ出力フラグ記憶部１３６には、データ出力部１０４が出力値を出力済みであるか否かを示すデータ出力フラグが記憶されている。カウンタ１１４は、データ入力部１０１に入力値が入力される毎に、ユニット識別情報記憶部１３７に記憶されているユニット識別情報の値をインクリメントする。
【００５１】
ユニット数比較部１１５は、層情報記憶部１３３から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部１３４から読み出し、ユニット識別情報記憶部１３７からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力する。また、ユニット数比較部１１５は、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、ユニット識別情報記憶部１３７に記憶されているユニット識別情報の値をリセットする。
【００５２】
積和計算一次値算出部１１１は、層情報記憶部１３３から読み出した層情報に該当する結合荷重を重み記憶部１３０から読み出し、読み出した結合荷重と、データ入力部１０１に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる。
【００５３】
また、積和計算一次値算出部１１１は、ユニット識別情報記憶部１３７から読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出し、読み出した結合荷重と、データ入力部１０１に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる。
【００５４】
ユニット出力算出部１１２は、積和計算一次値記憶部１３１から積和計算一次値情報を読み出し、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部１３５に記憶させる。
【００５５】
また、ユニット出力算出部１１２は、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、積和計算一次値記憶部１３１から積和計算一次値情報を読み出し、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部１３５に記憶させる。
また、ユニット出力算出部１１２は、積和計算一次値記憶部１３１から積和計算一次値情報を読み出した後、積和計算一次値記憶部１３１に記憶されている積和計算一次値情報の値を０にリセットする。
【００５６】
層情報算出部１１３は、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、層情報記憶部１３３に記憶されている層情報の値をインクリメントする。データ出力部１０４は、トークン入力部１０２にトークンが入力されたことに応じて、データ出力フラグ記憶部１３６のデータ出力フラグを出力済みに設定する。
【００５７】
トークン出力部１０３は、データ入力部１０１に入力値が入力されたことに応じて、データ出力フラグ記憶部１３６からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力する（トークン出力手順）。また、トークン出力部１０３は、トークンを出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを未出力に設定する。
【００５８】
なお、トークン出力部１０３は、データ入力部１０１に入力値が入力されたことに応じて、データ出力フラグ記憶部１３６からデータ出力フラグを読み出し、読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力するという上記トークン出力手順の代わりに、積和計算一次値算出部１１１にデータ入力部１０１からの入力値が入力されたことに応じて、データ出力フラグ記憶部１３６からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力してもよい。
【００５９】
＜階層型ニューラルネットワークに適応した場合のユニットの動作＞
次に、図４と図５とを用いて、図３の階層型ニューラルネットワークに適応した場合のユニットの動作について説明する。まず、図４を用いて、ユニットに入力値が入力された場合の動作について説明する。
【００６０】
まず、データ入力部１０１に、増幅器４からユニット入力バス３を介して入力値が入力される（ステップＳ１００）。次に、ステップＳ１００で、データ入力部１０１に入力値が入力されたことに応じて、カウンタ１１４がユニット識別情報記憶部１３７に記憶されているユニット識別情報の値を、１つインクリメントする（ステップＳ１０１）。
【００６１】
また、ステップＳ１００で、データ入力部１０１に入力値が入力されたことに応じて、積和計算一次値算出部１１１が、ユニット識別情報記憶部１３７から読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出し、読み出した結合荷重と、データ入力部１０１に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる。
【００６２】
次に、ユニット数比較部１１５が、層情報記憶部１３３から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部１３４から読み出し、ユニット識別情報記憶部１３７からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力する（ステップＳ１０３）。また、このユニット数比較部１１５が、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、ユニット識別情報記憶部１３７に記憶されているユニット識別情報の値をリセットする。
【００６３】
次に、ステップＳ１０３にて比較した結果が一致した場合には、層情報算出部１１３が、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、層情報記憶部１３３に記憶されている層情報の値をインクリメントする（ステップＳ１０４）。
【００６４】
次に、ステップＳ１０３にて比較した結果が一致した場合には、ユニット出力算出部１１２は、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、積和計算一次値記憶部１３１から積和計算一次値情報を読み出し、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部１３５に記憶させる（ステップＳ１０５）。次に、このユニット出力算出部１１２は、積和計算一次値記憶部１３１から積和計算一次値情報を読み出した後、積和計算一次値記憶部１３１に記憶されている積和計算一次値情報の値を０にリセットする。
【００６５】
次に、または、ステップＳ１０３にて比較した結果が不一致であった場合には、トークン出力部１０３が、ステップＳ１００にてデータ入力部１０１に入力値が入力されたことに応じて、データ出力フラグ記憶部１３６からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みであるか否かを検出し（ステップＳ１０６）、データ出力フラグが出力済みに設定されている場合には、トークンを出力する（ステップＳ１０７）。
【００６６】
また、トークン出力部１０３は、ステップＳ１０７にてトークンを出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを未出力に設定し（ステップＳ１０８）、処理を終了する。一方、ステップＳ１０６にてデータ出力フラグが未出力に設定されている場合には、トークン出力部１０３は、処理を終了する。
【００６７】
次に、図５を用いて、ユニットにトークンが入力された場合の動作について説明する。まず、トークン入力部１０２に、デイジーチェーン制御バス１を介してデイジーチェーンされている順序が１つ前のユニットからのトークンが入力される（ステップＳ２００）。
【００６８】
次に、データ出力部１０４は、トークン入力部１０２にトークンが入力されたことに応じて、ユニット出力記憶部１３５から出力値（演算結果）を読み出し、読み出した出力値（演算結果）を出力値として、増幅器４にユニット出力バス２を介して出力する（ステップＳ２０１）。次に、データ出力部１０４は、トークン入力部１０２にトークンが入力されたことに応じて、データ出力フラグ記憶部１３６のデータ出力フラグを出力済みに設定して（ステップＳ２０２）、処理を終了する。
【００６９】
＜階層型ニューラルネットワークの全体の構成＞
次に、本実施形態による階層型ニューラルネットワークの全体の構成について、説明する。
ここでは、図６に示すように、階層型ニューラルネットワークとして、入力層Ｌ１、隠れ層Ｌ２、出力層Ｌ３の３層がある場合について説明する。各層は、層情報により識別されており、また、階層の層情報は、階層の順に層情報が１つずつ大きくなるようにして、識別されている。例えば、入力層Ｌ１の層情報が１、隠れ層Ｌ２の層情報が２、出力層Ｌ３の層情報が３として識別されている。
【００７０】
また、入力層Ｌ１には、Ｐ１０１、Ｐ１０２、Ｐ１０３の３個のノードがあり、隠れ層Ｌ２には、Ｐ２０１、Ｐ２０２、Ｐ２０３、Ｐ２０４、Ｐ２０５、Ｐ２０６、Ｐ２０７、Ｐ２０８、Ｐ２０９、Ｐ２１０の１０個のノードがあり、出力層Ｌ３には、Ｐ３０１、Ｐ３０２、Ｐ３０３の３個のノードがある場合について説明する。入力層Ｌ１の各ノードの出力は、隠れ層Ｌ２の各ノードの入力に入力され、また、隠れ層Ｌ２の各ノードの出力は、出力層Ｌ３の各ノードの入力に入力されている。
【００７１】
各層において、各ノードはユニット識別情報により識別されており、各ノードのユニット識別情報は、予め定められたノードの配置順に、ユニット識別情報が１つずつ大きくなるようにして設定されている。例えば、Ｐ１０１はユニット識別情報が１であり、Ｐ１０２はユニット識別情報が２であり、Ｐ１０３はユニット識別情報が３である。
【００７２】
本実施の形態においては、それぞれのユニットが、隠れ層Ｌ２、出力層Ｌ３のノードとして機能する。なお、この例においては、ユニットＵ１からユニットＵ３は、隠れ層Ｌ２、出力層Ｌ３のノードとして機能し、ユニットＵ４からユニットＵ１０は、隠れ層Ｌ２のノードとして機能する。ここで、制御装置が入力層Ｌ１として出力値を、増幅器４とユニット出力バス２とを介して、隠れ層Ｌ２としての各ユニットに、順次出力する。そのために、ここでは、各ユニットは、隠れ層Ｌ２と出力層Ｌ３として機能する。
例えば、ユニットＵ１は、隠れ層Ｌ２のノードＰ２０１と出力層Ｌ３のノードＰ３０１として機能する。また、ユニットＵ３は、隠れ層Ｌ２のノードＰ２０３と出力層Ｌ３のノードＰ３０３として機能する。また、ユニットＵ４は、隠れ層Ｌ２のノードＰ２０４として機能する。
【００７３】
ここで、あるユニットに値が入力された際、入力層Ｌ１、隠れ層Ｌ２、出力層Ｌ３のいずれの層からの入力であるかは、各ユニットにおいて、ユニットが有する層情報記憶部１３３に記憶してある層情報により判定される。
【００７４】
＜階層型ニューラルネットワークの全体の動作＞
次に、本実施形態による階層型ニューラルネットワークの、一例としての、全体の動作について説明する。ここでは、各ユニットが、出力層Ｌ３のノードとして機能し、トークンを入力されたいずれか１つのユニットが隠れ層Ｌ２のアクティブなノードとして機能する場合について説明する。この場合、各ユニットが出力層Ｌ３のノードとして機能し、アクティブな層が隠れ層Ｌ２であるため、各ユニットの層情報記憶部１３３には層情報の値として２が記憶されている。
【００７５】
まず、ノードＰ２０１であるユニットＵ１が、トークンが制御装置から入力されることにより、ユニット出力記憶部１３５から出力値を読み出し、出力値を出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを出力済みとして設定する（手順Ａ１００）。次に、ノードＰ２０１からの出力値が、ユニット出力バス２と増幅器４とユニット入力バス３とを介して、ユニットＵ１からＵ１０の各ユニットのデータ入力部１０１に入力される。
【００７６】
次に、ユニットＵ１からＵ１０の各ユニットは、ユニットＵ１からの入力値に基づいて、積和計算一次値算出部１１１が、ユニット識別情報記憶部１３７から読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出し、読み出した結合荷重と、データ入力部１０１に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる（手順Ａ１０１）。
ここで、各ユニットの積和計算一次値算出部１１１が、ユニット識別情報記憶部１３７から読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出すことにより、各ユニットは、層情報に基づいて出力層Ｌ３のノードとして機能し、また、層情報に基づいて、アクティブなユニットの属する層が隠れ層Ｌ２であると識別し、更に、ユニット識別情報に基づいてアクティブとなる隠れ層Ｌ２での各ノードを識別し、この隠れ層Ｌ２のアクティブとなるノードに対応する結合荷重を、このアクティブとなった隠れ層Ｌ２のノードからの出力値に乗ずることが可能となる。
【００７７】
ここで、ユニットＵ１のデータ出力フラグ記憶部１３６のデータ出力フラグは、出力済みとして設定されてあるため、ユニットＵ１のトークン出力部１０３は、データ入力部１０１に入力値が入力されたことに応じて、トークンを出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを未出力として設定する（手順Ａ１０２）。
【００７８】
次に、ユニットＵ１から出力されたトークンは、デイジーチェーン制御バス１を介して、デイジーチェーンされている順序が１つ後のユニットであるユニットＵ２のトークン入力部１２に入力される（手順Ａ１０３）。
【００７９】
ユニットＵ２はトークン入力部１２にトークンが入力されたことに応じて、上記に説明した手順Ａ１００でノードＰ１０１であるユニットＵ１が、トークンが入力された場合と同様に、ユニット出力記憶部１３５から出力値を読み出し、出力値を出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを出力済みとして設定する（手順Ａ１０４）。
【００８０】
以降、同様に、手順Ａ１０１から手順Ａ１０３を繰り返し、隠れ層Ｌ２のノードＰ２１０であるユニットＵ１０が、出力値を出力すると共に、データ出力フラグ記憶部１３６のデータ出力フラグを出力済みとして設定する。
【００８１】
次に、出力層Ｌ３のノードＰ３０１からＰ３０３に該当するユニットＵ１からＵ３の各ユニットは、手順Ａ１０１と同様に、ユニットＵ１０からの入力値に基づいて、各ユニットの積和計算一次値算出部１１１が、ユニット識別情報記憶部１３７から読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出し、読み出した結合荷重と、データ入力部１０１に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる（手順Ａ１０５）。
【００８２】
ここで、ユニットＵ１０からの入力値が、各ユニットのデータ入力部１０１に入力されたことに応じて、各ユニットのカウンタ１１４は、ユニット識別情報記憶部１３７に記憶されているユニット識別情報の値をインクリメントし、ユニット識別情報の値は３となる（手順Ａ１０６）。
なお、各ユニットのユニット数記憶部１３４には、層情報と層情報で識別される階層に属する階層型ニューラルネットワークのユニット数とが関連付けて予め記憶されている。例えば、図６の階層型ニューラルネットワークの場合には、入力層Ｌ１の層情報である値１と、階層型ニューラルネットワークのユニット数、つまり、入力層Ｌ１のノード数である３とが、関連付けて予め記憶されている。また、例えば、図６の階層型ニューラルネットワークの場合には、隠れ層Ｌ２の層情報である値２と、階層型ニューラルネットワークのユニット数、つまり、隠れ層Ｌ２のノード数である１０とが、関連付けて予め記憶されている。
【００８３】
次に、各ユニットのユニット数比較部１１５は、層情報記憶部１３３から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部１３４から読み出し、ユニット識別情報記憶部１３７からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致するために、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力すると共に、ユニット識別情報記憶部１３７に記憶されているユニット識別情報の値をリセットする（手順Ａ１０７）。
【００８４】
次に、各ユニットのユニット出力算出部１１２は、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、積和計算一次値記憶部１３１から積和計算一次値情報を読み出し、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部１３５に記憶させる（手順Ａ１０８）。
【００８５】
ここで、各ユニットのユニット出力算出部１１２は、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出すため、出力層Ｌ３に該当するユニット毎の出力関数により、ユニットの出力値を算出することが可能となる。また、各ユニットのユニット出力記憶部１３５に出力層Ｌ３のノードとして算出した出力値が記憶されるため、各ユニットはトークンが入力された場合に、各ユニットは出力層Ｌ３のアクティブなノードとして、出力値を出力することが可能となる。
【００８６】
また、各ユニットの層情報算出部１１３が、ユニット数比較部１１５から比較一致信号を入力されたことに応じて、層情報記憶部１３３に記憶されている層情報の値をインクリメントして、層情報の値を３とする。そのために、各ユニットは、以降、トークンが入力されたいずれか１つのユニットが、出力層Ｌ３のアクティブなノードとして出力値を出力する。
【００８７】
なお、上記において、出力層Ｌ３でユニットＵ３からユニットＵ４にトークンが出力され、次に、トークンを入力されたユニットＵ４が出力層Ｌ３のノードとして出力値を出力するが、この例における階層型ニューラルネットワークにおいて、出力層Ｌ３のノードとしてユニットＵ４に相当するノードは無いため、ユニットＵ４は、出力層Ｌ３のノードとして出力値を出力しないことが望ましい。または、ユニットＵ４は、出力層Ｌ３のノードとしては、出力値の値を０として出力してもよい。または、各ユニットにおいて、出力層Ｌ３としてのユニットＵ４からの出力値に乗じる結合荷重を０として、重み記憶部１３０に予め記憶しておいてもよい。
【００８８】
このようにユニットＵ４の出力値、または、ユニットＵ４からの出力値を受けた各ユニットの結合荷重を、予め階層型ニューラルネットワークの各層のノードの個数に合わせて設定しておくことにより、ユニットに対して、ある層でそのユニットに対応するノードが無い場合においても、本実施形態の並列演算装置は階層型ニューラルネットワークとして問題なく動作することが可能である。
【００８９】
以上説明したように、本実施形態を階層型ニューラルネットワークに適応した場合には、一度に発火すうニューロンの個数を１つに限定したことにより、つまり、出力層において出力値を出力するノードを、トークンが入力された１つのユニットに限定することにより、ユニット間の配線が増大することを減じる効果を奏する。
また、１つの出力層のノードであるユニットからの出力値が、ユニット入力バス３を介して、１度に全ての入力層となるノードであるユニットに分配して入力されるため、分配に要する時間を減じる効果を奏する。また、複数のユニットが、並列にユニット内演算を演算するため、全体としての演算が高速になるという効果を奏する。
【００９０】
例えば、階層型ニューラルネットワークを演算した場合、従来型のプロセッサを用いた場合には、その計算時間は概算として、計算時間＝（シナプス数×１回の演算に要するステップ数÷クロック周波数）として算出されるのに対して、本実形態による並列演算装置を用いた場合には、計算時間＝（ニューロン数×１ニューロンの発火周期）により算出される。ここで、シナプス数は、ニューロン数の２乗に比例するため、本実形態による並列演算装置を用いた階層型ニューラルネットワークの計算時間は、従来型のプロセッサを用いた場合に比較して、計算時間を大幅に減ずることが可能となる。
【００９１】
また、各ユニットが、階層型ニューラルネットワークの層を変更し、かつ、入力側の層のノードと出力側の層のノードとして機能するため、少ないユニット数で多層のノードの演算を実行することが可能となる効果を奏する。
【００９２】
なお、上記に説明した第１の実施形態においては、制御装置が入力層Ｌ１として出力値を順次出力し、そのために、各ユニットは隠れ層Ｌ２と出力層Ｌ３のノードとして機能するとして説明したが、各ユニットは、入力層Ｌ１のノードとして機能するようにしてもよい。例えば、制御装置が入力層Ｌ１のノードに対応する出力値を順次出力し、ユニットが入力層Ｌ１のノードとして、制御装置からの出力値をユニット出力記憶部１３５に順次記憶する。次に、トークンが入力されたユニットが、入力層Ｌ１のアクティブなユニットとして出力値を出力する。このようにして、各ユニットは、入力層Ｌ１と、隠れ層Ｌ２と、出力層Ｌ３とのユニットとして機能することも可能である。
【００９３】
なお、上記の第１の実施形態においては、階層型ニューラルネットワークとして、入力層Ｌ１、隠れ層Ｌ２、出力層Ｌ３の３層がある場合について説明したが、本実施形態は、階層型ニューラルネットワークの階層は３層に限られるものではなく、任意の階層に適応可能である。
【００９４】
＜第２の実施形態＞
＜自己組織化マップに適応した場合のユニットの構成＞
次に、本実施形態の並列演算装置を、自己組織化マップに適応した場合について説明する。自己組織化マップは、次のような処理を実行することにより、多変量からなるデータの統計的性質を学習し、 類似したデータが近接するように配列し、また、データの視覚化を可能とするものである。
【００９５】
各ユニットは、ユニットの結合重みベクトルを有している。まず、各ユニットに入力データベクトルが入力され、各ユニットは入力された入力データベクトルと結合重みベクトルの差であるノルムを算出する（手順Ａ２００）。次に、最もノルムの小さい出力ユニットを勝者ユニットとして選択する（手順Ａ２０１）。次に、選択した勝者ユニットとその近傍のユニットが、より入力データベクトルに近づくように結合重みベクトルの値を予め定められた関数により変更して、学習を行う（手順Ａ２０３）。この、手順Ａ２００から手順Ａ２０３を繰り返す。
【００９６】
本実施形態の並列演算装置を自己組織化マップに適応する場合、各ユニットに入力されるデータは、上記の手順Ａ２００と、手順Ａ２０１と、手順Ａ２０２とで異なるため、実施形態においては、ユニットに入力するデータに、上記の手順Ａ２００と、手順Ａ２０１と、手順Ａ２０２とを識別する識別情報を組とすることにより、識別する。
【００９７】
図９（ａ）に示すように、ユニット入力バス３からの入力値は、ノルム部とデータ部とを有する。また、図９（ｂ）に示すように、ノルム部の値が−２である場合、入力値のノルム部は「データ部の値が入力ベクトルである」ことを示す識別子であり、そのデータ部は入力ベクトルである。また、図９（ｃ）に示すように、ノルム部の値が−１である場合、ノルム部は「近傍判定識別情報」であり、そのデータ部は、ネットワーク座標である。また、図９（ｄ）に示すように、ノルム部の値が零または正の値である場合、ノルム部の値はノルムであり、また、データ部は、ネットワーク座標である。これらの詳細については、後述する。
【００９８】
次に、図７と図８とを用いて、自己組織化マップに適応した場合の並列演算装置のユニットの構成について説明する。ここで、複数のユニットのそれぞれは、ネットワーク座標により識別される座標で予め識別されている。なお、各ユニットは、第１の実施形態と同様に、同一の構成を有しているので、ここでは１つのユニットの構成のみについて説明する。
【００９９】
この図７または図８のユニットの構成において、データ入力部２０１はデータ入力部１１に対応し、データ出力部２０４はデータ出力部１４に対応し、トークン入力部２０２はトークン入力部１２に対応と、トークン出力部２０３はトークン出力部１３に対応する。また、ユニットノルム記憶部２３６と、入力ノルム記憶部２３７と、ユニットネットワーク座標記憶部２３４と、入力ネットワーク座標記憶部２３３とは、ユニット出力記憶部１６に対応する。また、他の構成は、ユニット演算部１５に対応する。
【０１００】
ユニットネットワーク座標記憶部２３４には、ユニットのネットワーク座標であるユニットネットワーク座標が予め記憶されている。入力ネットワーク座標記憶部２３３には、入力されたネットワーク座標である入力ネットワーク座標が記憶される。重み記憶部２３１には、ユニットの結合重みベクトルが予め記憶されている。入力データ記憶部２３０には、入力された入力データベクトルが記憶される。ユニットノルム記憶部２３６には、ユニットのノルムが記憶される。入力ノルム記憶部２３７には、入力されたノルムが記憶される。
【０１０１】
学習速度記憶部２３５には、学習速度を決める係数である学習速度係数が予め記憶されている。また、学習速度記憶部２３５には、学習した回数を示す学習ステップ数と、前記学習速度係数とが予め関連付けて記憶されている。距離記憶部２３２には、ネットワーク座標の間の距離が近傍であるか否かを判定する基準である基準距離が予め記憶されている。また、距離記憶部２３２には、学習ステップ数と基準距離とが予め関連付けて記憶されている。
【０１０２】
データ入力判定部２２２は、データ入力部２０１に入力された入力値が入力データベクトルであるか否かを判定し、入力データベクトルである場合には、データ抽出部２１０に入力値である入力データベクトルを出力し、入力データベクトルでない場合には、ネットワーク座標抽出部２１１とノルム抽出部２１２とに入力値を出力する。
このデータ入力判定部２２２は、入力値のノルムの値が、入力値が入力データベクトルであることを示す値である−２であるか否かを判定することにより、データ入力部２０１に入力された入力値が入力データベクトルであるか否かを判定する。
【０１０３】
データ抽出部２１０は、データ入力部２０１に入力された入力値が入力データベクトルである場合には、入力された入力データベクトルを入力データ記憶部２３０に記憶させる。また、データ抽出部２１０は、入力された入力データベクトルを、ノルム算出部２１４に出力する。また、データ抽出部２１０は、入力データベクトルが入力される毎に、カウンタ２１３がカウントアップ信号を出力する。
【０１０４】
カウンタ２１３は、ユニットに入力データベクトルが入力される毎に、ユニットに入力データベクトルが入力された回数であるステップ数をカウントアップする。また、カウンタ２１３は、データ抽出部２１０からカウントアップ信号を入力される毎に、ステップ数をカウントアップする。
【０１０５】
ノルム算出部２１４は、データ入力部２０１に入力された入力値が入力データベクトルである場合には、入力された入力データベクトルと、重み記憶部２３１から読み出した結合重みベクトルとのノルムを算出し、算出したノルムをユニットノルムとしてユニットノルム記憶部２３６に記憶させる。
【０１０６】
入力ノルム部２５０は、データ入力部２０１に入力された入力値が、ネットワーク座標とノルムとの組みである場合には、入力されたネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２３３に記憶させると共に、入力されたノルムを入力ノルムとして入力ノルム記憶部２３７に記憶させる。この入力ノルム部２５０は、ネットワーク座標抽出部２１１と、ノルム抽出部２１２と、入力ノルム判定部２１８とから構成されている。
【０１０７】
ネットワーク座標抽出部２１１は、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２３３に記憶させる。ノルム抽出部２１２は、入力された入力値から、ノルムを抽出し、抽出したノルムを入力ノルム判定部２１８に出力する。
【０１０８】
入力ノルム判定部２１８は、ノルム抽出部２１２から入力されたノルムの値により、入力されたノルムが、ノルムであるのか、または、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報であるのかを判定し、ノルムである場合には、入力されたノルムを入力ノルムとして入力ノルム記憶部２３７に記憶させる。逆に、入力されたノルムが近傍判定識別情報である場合には、入力ノルム判定部２１８は、近傍判定部２１５に、近傍判定識別情報を出力する。
例えば、この入力ノルム判定部２１８は、ノルム抽出部２１２から入力されたノルムの値が−１である場合には、入力されたノルムが近傍判定識別情報であるとして判定し、ノルム抽出部２１２から入力されたノルムの値が−１でない場合には、ノルムとして判定する。
【０１０９】
ノルム比較部２１７は、トークン入力部２０２を介してトークンが入力されたことに応じて、ユニットノルム記憶部２３６から読み出したユニットノルムと、入力ノルム記憶部２３７から読み出した入力ノルムとを比較する。
【０１１０】
選択出力部２５１は、ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットノルム記憶部２３６から読み出したユニットノルムとユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標とを組みとして、データ出力部２０４を介して出力し、読み出したユニットノルムが入力ノルム以上である場合には、入力ノルム記憶部２３７から読み出した入力ノルムと入力ネットワーク座標記憶部２３３から読み出した入力ネットワーク座標とを組みとして、データ出力部２０４を介して出力する。この選択出力部２５１は、ネットワーク座標選択部２１９と、ノルム選択部２２０と、データ合成出力部２２１とから構成されている。
【０１１１】
ノルム選択部２２０は、ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットノルム記憶部２３６からユニットノルムを読み出し、読み出したユニットノルムをデータ合成出力部２２１に出力する。また、ネットワーク座標選択部２１９は、ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には入力ノルム記憶部２３７から入力ノルムを読み出し、読み出した入力ノルムをデータ合成出力部２２１に出力する。
【０１１２】
ネットワーク座標選択部２１９は、ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットネットワーク座標記憶部２３４からユニットネットワーク座標を読み出し、読み出したユニットネットワーク座標をデータ合成出力部２２１に出力する。また、ネットワーク座標選択部２１９は、ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には、入力ネットワーク座標記憶部２３３から入力ネットワーク座標を読み出し、読み出した入力ネットワーク座標をデータ合成出力部２２１に出力する。
【０１１３】
データ合成出力部２２１は、ノルム選択部２２０から入力されたユニットノルムまたは入力ノルムであるノルムと、ネットワーク座標選択部２１９から入力されたユニットネットワーク座標または入力ネットワーク座標であるネットワーク座標とを組みとして合成し、組として合成したノルムとネットワーク座標とを、データ出力部２０４を介して出力する。
【０１１４】
近傍判定部２１５は、データ入力部２０１に入力された入力値が、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報との組みである場合には、ユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する。
【０１１５】
また、近傍判定部２１５は、近傍判定識別情報が入力ノルム部２５０または入力ノルム判定部２１８から入力されたことに応じて、ユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する。
【０１１６】
また、近傍判定部２１５は、データ入力部２０１に入力された入力値が、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報との組みである場合には、距離記憶部２３２から基準距離を読み出し、ユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標と入力されたネットワーク座標である入力ネットワーク座標との間の距離が、読み出した基準距離以下であるか否かを判定することにより、ユニットネットワーク座標が入力ネットワーク座標の近傍にあるか否かを判定する。
【０１１７】
また、近傍判定部２１５は、カウンタ２１３から読み出したステップ数に一致する学習ステップ数に関連付けられている基準距離を距離記憶部２３２から読み出し、該読み出した基準距離に基づいて前記ユニットネットワーク座標が前記入力ネットワーク座標の近傍にあるか否かを判定する。
【０１１８】
重み更新部２１６は、近傍判定部２１５の判定した結果が近傍である場合には、重み記憶部２３１に記憶されている結合重みベクトルの値を更新する。また、重み更新部２１６は、入力データ記憶部２３０から読み出した入力データベクトルと重み記憶部２３１から読み出した結合重みベクトルとの差を算出し、算出した差に、学習速度記憶部２３５から読み出した学習速度係数を乗じた値を、重み記憶部２３１に記憶されている結合重みベクトルに加算することにより、重み記憶部２３１に記憶されている結合重みベクトルの値を更新する。
【０１１９】
また、重み更新部２１６は、カウンタ２１３から読み出したステップ数と一致する学習ステップ数に関連付けられている学習速度係数を学習速度記憶部２３５から読み出し、読み出した学習速度係数に基づいて重み記憶部２３１に記憶されている結合重みベクトルの値を更新する。
【０１２０】
トークン出力フラグ記憶部２３８には、トークン出力部２０３がトークンを出力済みであるか否かを示すトークン出力フラグが記憶されている。トークン出力フラグ判定部２２３は、トークン入力部２０２にトークンが入力されたことに応じて、トークン出力フラグ記憶部２３８からトークン出力フラグを読み出し、読み出したトークン出力フラグがトークンを未出力である場合に、入力されたトークンをノルム比較部２１７に出力すると共に、入力されたトークンを、トークン出力部２０３を介して出力する。
【０１２１】
トークン出力部２０３は、トークン入力部２０２にトークンが入力されたことに応じて、トークンを出力する。また、トークン出力部２０３は、データ合成出力部２２１または選択出力部２５１が、ユニットノルム記憶部２３６から読み出したユニットノルムとユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標とを組みとしてデータ出力部２０４を介して出力したことに応じて、または、入力ノルム記憶部２３７から読み出した入力ノルムと入力ネットワーク座標記憶部２３３から読み出した入力ネットワーク座標とを組みとしてデータ出力部２０４を介して出力したことに応じて、トークンを出力する。また、トークン出力部２０３は、トークンを出力した後に、トークン出力フラグ記憶部２３８に記憶されているトークン出力フラグを出力済みに更新する。
【０１２２】
＜自己組織化マップに適応した場合のユニットの動作＞
次に、図１０と図１１とを用いて、自己組織化マップに適応した場合の並列演算装置のユニットの動作について説明する。最初に、図１０を用いて、ユニットのデータ入力部に入力値が入力された場合の動作について説明する。
【０１２３】
まず、データ入力部２０１に入力値であるデータが入力される（ステップＳ４００）。次に、データ入力判定部２２２は、入力値のノルムの値が、入力値が入力データベクトルであることを示す値である−２であるか否かを判定することにより、データ入力部２０１に入力された入力値が入力データベクトルであるか否かを判定する（ステップＳ４０１）。
【０１２４】
次に、ステップＳ４０１の判定結果が、ノルムの値が−２であり、入力データベクトルである場合には、データ抽出部２１０が、入力された入力データベクトルを入力データ記憶部２３０に記憶させる（ステップＳ４０２）と共に、カウントアップ信号をカウンタ２１３に出力する。次に、カウンタ２１３は、データ抽出部２１０からカウントアップ信号を入力されたことに応じて、ステップ数をカウントアップする（ステップＳ４０３）。
【０１２５】
次に、ノルム算出部２１４は、データ抽出部２１０を介して入力された入力データベクトルと、重み記憶部２３１から読み出した結合重みベクトルとのノルムを算出し、算出したノルムをユニットノルムとしてユニットノルム記憶部２３６に記憶させ（ステップＳ４０４）、処理を終了する。
【０１２６】
一方、ステップＳ４０１の判定結果が、ノルムの値が−２ではなく、入力データベクトルではない場合には、ネットワーク座標抽出部２１１が、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２３３に記憶させる（ステップＳ４０５）と共に、ノルム抽出部２１２は、入力された入力値から、ノルムを抽出し、抽出したノルムを入力ノルム判定部２１８に出力する。
【０１２７】
次に、入力ノルム判定部２１８は、ノルム抽出部２１２から入力されたノルムの値が−１であるか否かを判定し（ステップＳ４０６）、判定結果が、ノルム抽出部２１２から入力されたノルムの値が−１でない場合には、ノルムとして判定し、入力されたノルムを入力ノルムとして入力ノルム記憶部２３７に記憶させ（ステップＳ４０７）、処理を終了する。
【０１２８】
一方、ステップＳ４０６の判定結果が、ノルム抽出部２１２から入力されたノルムの値が−１である場合には、入力ノルム判定部２１８は、入力されたノルムが近傍判定識別情報であるとして判定し、近傍判定部２１５に、近傍判定識別情報を出力する。次に、近傍判定部２１５は、近傍判定識別情報が入力ノルム判定部２１８から入力されたことに応じて、ユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する（ステップＳ４０８）。
【０１２９】
ステップＳ４０８の判定結果が、近傍である場合には、重み更新部２１６が、重み記憶部２３１に記憶されている結合重みベクトルの値を更新して（ステップＳ４０９）、処理を終了する。一方、ステップＳ４０８の判定結果が、近傍でない場合には、処理を終了する。
【０１３０】
次に、図１１を用いて、ユニットのトークン入力部にトークンが入力された場合の動作について説明する。まず、トークン入力部２０２に、トークンが入力される（ステップＳ５００）。次に、トークン出力フラグ判定部２２３が、トークン入力部２０２にトークンが入力されたことに応じて、トークン出力フラグ記憶部２３８からトークン出力フラグを読み出し、読み出したトークン出力フラグがトークンを未出力であるか否かを判定し（ステップＳ５０１）、読み出したトークン出力フラグがトークンを未出力である場合には、入力されたトークンをノルム比較部２１７に出力すると共に、入力されたトークンを、トークン出力部２０３を介して出力する。
【０１３１】
次に、ノルム比較部２１７は、トークン入力部２０２を介してトークンが入力されたことに応じて、ユニットノルム記憶部２３６から読み出したユニットノルムと、入力ノルム記憶部２３７から読み出した入力ノルムとを比較する（ステップＳ５０２）。
【０１３２】
ノルム比較部２１７の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ノルム選択部２２０が、ユニットノルム記憶部２３６からユニットノルムを読み出し、読み出したユニットノルムをデータ合成出力部２２１に出力する（ステップＳ５０３）と共に、ネットワーク座標選択部２１９が、ユニットネットワーク座標記憶部２３４からユニットネットワーク座標を読み出し、読み出したユニットネットワーク座標をデータ合成出力部２２１に出力する（ステップＳ５０４）。
【０１３３】
次に、データ合成出力部２２１が、ノルム選択部２２０から入力されたユニットノルムと、ネットワーク座標選択部２１９から入力されたユニットネットワーク座標とを組みとして合成し、組として合成したユニットノルムとユニットネットワーク座標とを、データ出力部２０４を介して出力する（ステップＳ５０５）。
【０１３４】
一方、ステップＳ５０２でノルム比較部２１７が比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には、ノルム選択部２２０が、入力ノルム記憶部２３７から入力ノルムを読み出し、読み出した入力ノルムをデータ合成出力部２２１に出力する（ステップＳ５０８）と共に、ネットワーク座標選択部２１９が、入力ネットワーク座標記憶部２３３から入力ネットワーク座標を読み出し、読み出した入力ネットワーク座標をデータ合成出力部２２１に出力する（ステップＳ５０９）。
【０１３５】
次に、データ合成出力部２２１は、ノルム選択部２２０から入力された入力ノルムと、ネットワーク座標選択部２１９から入力された入力ネットワーク座標とを組みとして合成し、組として合成した入力ノルムと入力ネットワーク座標とを、データ出力部２０４を介して出力する（ステップＳ５１０）。
【０１３６】
次に、トークン出力部２０３が、ステップＳ５０５にて、データ合成出力部２２１が、ユニットノルム記憶部２３６から読み出したユニットノルムとユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標とを組みとしてデータ出力部２０４を介して出力したことに応じて、または、ステップＳ５１０にて、入力ノルム記憶部２３７から読み出した入力ノルムと入力ネットワーク座標記憶部２３３から読み出した入力ネットワーク座標とを組みとしてデータ出力部２０４を介して出力したことに応じて、トークンを出力する（ステップＳ５０６）。
【０１３７】
次に、トークン出力部２０３は、トークンを出力した後に、トークン出力フラグ記憶部２３８に記憶されているトークン出力フラグを出力済みに更新し（ステップＳ５０７）、処理を終了する。
【０１３８】
＜自己組織化マップに適応した場合の並列演算装置全体の動作＞
次に、自己組織化マップに適応した場合の並列演算装置全体の動作について説明する。まず、制御装置は、入力ベクトルと、値を−２としたノルムとを組みとした入力値を、全てのユニットに、ユニット入力バス３を介して、入力する（手順Ａ３００）。
【０１３９】
次に、入力ベクトルを入力された各ユニットのノルム算出部２１４は、入力された入力ベクトルと、ユニットが有する結合重みベクトルとのノルムを算出し、算出したノルムを、ユニットノルム記憶部２３６に記憶させる（手順Ａ３０１）。
【０１４０】
次に、制御装置は、ユニットＵ１に、トークンを入力する（手順Ａ３０２）。次に、ユニットＵ１のノルム比較部２１７は、ユニットＵ１のトークン入力部２０２を介してトークンが入力されたことに応じて、ユニットノルム記憶部２３６から読み出したユニットノルムと、入力ノルム記憶部２３７から読み出した入力ノルムとを比較する（手順Ａ３０３）。
【０１４１】
ここで、ユニットＵ１の入力ノルム記憶部２３７には、ユニットＵ１が手順Ａ３０１で算出したノルムに比較して、十分に大きな値のノルムが予め記憶されているものとして説明する。
【０１４２】
ここでは、ユニットノルム記憶部２３６から読み出したユニットノルムの方が、入力ノルム記憶部２３７から読み出した入力ノルムより小さいため、ユニットＵ１の選択出力部２５１は、ユニットノルム記憶部２３６から読み出したユニットノルムとユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標とを組みとして、データ出力部２０４を介して出力する（手順Ａ３０４）。
【０１４３】
次に、ユニットＵ１のデータ出力部２０４が出力したノルムとネットワーク座標とが組として、ユニット出力バス２と増幅器４とユニット入力バス３とを介して、各ユニットのデータ入力部２０１に入力される（手順Ａ３０５）。
【０１４４】
次に、各ユニットの入力ノルム部２５０は、データ入力部２０１に入力された入力値のノルムの値が−１でないため、入力されたネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２３３に記憶させると共に、入力されたノルムを入力ノルムとして入力ノルム記憶部２３７に記憶させる（手順Ａ３０６）。ここで、入力ネットワーク座標記憶部２３３に記憶されるネットワーク座標と、入力ノルム記憶部２３７に記憶されるノルムは、ユニットＵ１の、ネットワーク座標とノルムである。
【０１４５】
次に、ユニットＵ１のトークン出力部２０３は、ユニットＵ１のデータ合成出力部２２１または選択出力部２５１が、ユニットノルム記憶部２３６から読み出したユニットノルムとユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標とを組みとしてデータ出力部２０４を介して出力したことに応じて、トークンを、デイジーチェーン制御バス１を介してユニットＵ２に出力する（手順Ａ３０７）。
【０１４６】
次に、手順Ａ３０３のユニットＵ１と同様に、ユニットＵ２のノルム比較部２１７は、ユニットＵ２のトークン入力部２０２を介してユニットＵ１からのトークンが入力されたことに応じて、ユニットノルム記憶部２３６から読み出したユニットノルムと、入力ノルム記憶部２３７から読み出した入力ノルムとを比較する（手順Ａ３０８）。
【０１４７】
ここで、入力ノルム記憶部２３７に記憶される入力ノルムは、ユニットＵ１のノルムであり、また、ユニットノルム記憶部２３６から読み出したユニットノルムは、ユニットＵ２のノルムであるため、このユニットＵ２のノルム比較部２１７は、ユニットＵ２のノルムと、ユニットＵ１のノルムとを比較することになる。以降、ユニットＵ２のノルム比較部２１７の比較結果に基づいて、手順Ａ３０４から手順Ａ３０６の処理が、同様に実行される（手順Ａ３０９）。
【０１４８】
従って、トークンがユニットＵ２に入力されることにより、ユニットＵ１とユニットＵ２とのノルムが比較され、ノルムが小さい方のユニットが勝者ユニットとして選択され、勝者ユニットのノルムとユニットネットワーク座標とが、全てのユニットの入力ノルム記憶部２３７と入力ネットワーク座標記憶部２３３とに記憶される（手順Ａ３１０）。
【０１４９】
次に、手順Ａ３０７と同様に、ユニットＵ２からユニットＵ３にトークンが送信されることにより、次に、ユニットＵ３が、手順Ａ３０３から手順Ａ３０７とを実行することにより、ユニットＵ１とユニットＵ２との勝者ユニットのノルムと、ユニットＵ３のノルムとが比較され、ユニットＵ１からユニットＵ３までのユニットの中からの勝者ユニットが選択される（手順Ａ３１１）。
【０１５０】
以降、トークンがデイジーチェーン順序でユニットに渡されていく毎に、トークンが入力されたユニットの中での勝者ユニットが選択される（手順Ａ３１２）。その後、デイジーチェーン順序で最後のユニットであるユニットＵ１０にトークンが入力されると、ユニットＵ１０のデータ出力部２０４が、ユニットＵ１からユニットＵ１０の中の勝者ユニットのノルムとネットワーク座標とを出力する（手順Ａ３１３）。
【０１５１】
制御装置は、ユニットＵ１０のデータ出力部２０４が出力するノルムとネットワーク座標とを、勝者ユニットのノルムとネットワーク座標として受信する（手順Ａ３１４）。これにより、制御装置は、入力ベクトルに対しての、勝者ユニットのノルムとネットワーク座標とを、受信することが出来る。
【０１５２】
次に、制御装置は、ユニットＵ１０のデータ出力部２０４から受信したネットワーク座標と、値を−１としたノルムとを組みとした入力値を、全てのユニットに、ユニット入力バス３を介して、入力する（手順Ａ３１５）。
【０１５３】
次に、ネットワーク座標と値を−１としたノルムとを組みとした入力値を入力された各ユニットは、各ユニットのネットワーク座標抽出部２１１が、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２３３に記憶させる（手順Ａ３１６）と共に、各ユニットの入力ノルム判定部２１８が、ノルム抽出部２１２から入力されたノルムの値が−１であるため、入力されたノルムが近傍判定識別情報であるとして判定し、近傍判定部２１５に、近傍判定識別情報を出力する（手順Ａ３１７）。
【０１５４】
次に、各ユニットの近傍判定部２１５が、近傍判定識別情報が入力ノルム部２５０または入力ノルム判定部２１８から入力されたことに応じて、ユニットネットワーク座標記憶部２３４から読み出したユニットネットワーク座標が、入力ネットワーク座標記憶部２３３から読み出した入力ネットワーク座標の近傍にあるか否かを判定する（手順Ａ３１８）。
【０１５５】
次に、各ユニットの重み更新部２１６は、そのユニットの近傍判定部２１５の判定した結果が近傍である場合には、そのユニットの重み記憶部２３１に記憶されている結合重みベクトルの値を更新する（手順Ａ３１９）。これにより、勝者ユニットのネットワーク座標の近傍であるユニットの結合重みベクトルが、更新され、学習が実行される。
【０１５６】
以上に説明した自己組織化マップに適応した場合の並列演算装置においては、ユニット入力バス３に全てのユニットが接続されているため、制御装置が入力ベクトルをユニット入力バス３に１度出力するだけで、全てのユニットに入力ベクトルを入力することができる。また、各ユニットが、入力された入力ベクトルに対して、並列にノルムを算出することができるため、ユニット全体で、短時間でノルムを算出することができる。
【０１５７】
また、ユニット入力バス３に全てのユニットが接続されているため、制御装置が勝者ユニットのネットワーク座標をユニット入力バス３に１度出力するだけで、全てのユニットに勝者ユニットのネットワーク座標を入力することができる。また、各ユニットが、入力された勝者ユニットのネットワーク座標の近傍にあるか否かを並列に判定し、学習するため、ユニット全体で、短時間で学習することができる。
【０１５８】
また、デイジーチェーン制御バス１を介してトークンをユニット間で渡していくことにより、デイジーチェーン順序で順に勝者ユニットを決定することができる。つまり、勝者ユニットの決定が、デイジーチェーン制御バス１という、簡易な配線で可能となる。
【０１５９】
＜冗長性を持たせた並列演算装置＞
次に、図１２を用いて、デイジーチェーン制御バス１に冗長性をもたせた場合の並列演算装置の構成を説明する。
各ユニットは、予め定められた順序であるデイジーチェーン順序において、１つ飛ばしの順序である第１の冗長順序で、複数のユニットのうちの半数のユニットが、第１の冗長デイジーチェーン制御バス６によりデイジーチェーンされている。例えば、ユニットＵ１とユニットＵ３とユニットＵ５とユニットＵ７とユニットＵ９とが、第１の冗長デイジーチェーン制御バス６により、デイジーチェーンされている。
【０１６０】
また、予め定められた順序であるデイジーチェーン順序において、１つ飛ばしの順序で、上記の第１の冗長デイジーチェーン制御バス６によりデイジーチェーンされていない複数のうちの残りの半数のユニットが、第２の冗長デイジーチェーン制御バス７によりデイジーチェーンされている。例えば、ユニットＵ２とユニットＵ４とユニットＵ６とユニットＵ８とユニットＵ１０とが、第２の冗長デイジーチェーン制御バス７により、デイジーチェーンされている。
【０１６１】
次に、図１３を用いて、第１の冗長デイジーチェーン制御バス６によりデイジーチェーンされているユニットの構成について説明する。つまり、例えば、ユニットＵ１とユニットＵ３とユニットＵ５とユニットＵ７とユニットＵ９の構成について説明する。なお、冗長性について変更される構成のみについて説明するため、図２のユニットの構成において、変更される構成のみについて説明する。
【０１６２】
図１３において、図１３（ａ）と（ｃ）とには、変更される前の図２で示されたユニットの構成が示してある。並列演算装置が冗長性を有するようにすることにより、図１３（ａ）のユニットの構成が、図１３（ｂ）の構成に変更される。また、図１３（ｃ）のユニットの構成が、図１３（ｄ）のユニットの構成に変更される。
【０１６３】
図１３（ｂ）に示すようにユニットは、トークン出力部Ａ１３＿１と、トークン出力部Ｂ１３＿２と、トークン出力部選択部１７と、トークン選択情報記憶部１８とを有する。ここで、トークン出力部Ａ１３＿１は、図２のトークン出力部１３に対応する。
【０１６４】
トークン出力部Ｂ１３＿２（冗長トークン出力部）は、トークン入力部１２にトークンが入力されたことに応じて、トークンを冗長順序で１つ後のユニットへ第１の冗長デイジーチェーン制御バス６を介して出力する。トークン選択情報記憶部１８には、トークン出力部Ａ１３＿１とトークン出力部Ｂ１３＿２とのうち、いずれを選択するかを示すトークン出力選択情報が記憶されている。
【０１６５】
トークン出力部選択部１７は、トークン入力部１２にトークンが入力されたことに応じて、トークン選択情報記憶部１８から読み出したトークン出力選択情報に基づいて、トークン出力部Ａ１３＿１とトークン出力部Ｂ１３＿２とのうちいずれか一方を選択し、選択したトークン出力部Ａ１３＿１またはトークン出力部Ｂ１３＿２を介してトークンを出力する。
【０１６６】
また、図１３（ｄ）に示すように、ユニットは、トークン入力部Ａ１２＿１と、トークン入力部Ｂ１２＿２（冗長トークン入力部）とを有する。ここで、トークン入力部Ａ１２＿１は、図２のトークン入力部１２に対応する。
【０１６７】
トークン入力部Ｂ１２＿２は、第１の冗長デイジーチェーン制御バス６を介してデイジーチェーンされている冗長順序が１つ前のユニットからのトークンを入力する。
また、トークン出力部１３は、トークン入力部Ａ１２＿１またはトークン入力部Ｂ１２＿２にトークンが入力されたことに応じて、トークンを出力する。
【０１６８】
また、第１の冗長デイジーチェーン制御バス６によりデイジーチェーンされているユニットと同様に、第２の冗長デイジーチェーン制御バス７によりデイジーチェーンされているユニットも、第２の冗長デイジーチェーン制御バス７を第１の冗長デイジーチェーン制御バス６として、トークン入力部Ｂ１２＿２（冗長トークン出力部）とトークン選択情報記憶部１８とトークン出力部選択部１７とトークン入力部Ｂ１２＿２（冗長トークン入力部）を有している。
【０１６９】
なお、ここでは、トークン選択情報記憶部１８には、トークン出力部Ａ１３＿１とトークン出力部Ｂ１３＿２とのうち、いずれを選択するかを示すトークン出力選択情報が記憶されているもとして説明したが、このトークン出力選択情報は、例えば、デイジーチェーン順序で次のユニットに欠陥があるか否かを示す情報であってもよい。
【０１７０】
トークン出力選択情報が、デイジーチェーン順序で次のユニットに欠陥があるか否かを示す情報である場合、トークン出力部選択部１７は、トークン選択情報記憶部１８から読み出したトークン出力選択情報に基づいて、デイジーチェーン順序で次のユニットに欠陥がない場合には、トークン出力部Ａ１３＿１を選択してトークンを出力し、逆に欠陥がある場合には、トークン出力部Ｂ１３＿２を選択してトークンを出力する。
【０１７１】
＜欠陥チェックの方法＞
次に、欠陥チェックの方法について説明する。ここでは、並列演算装置が、階層型ニューラルネットワークの場合について説明する。まず、ニューラルネットワークの並列演算装置が、結合係数がすべて同じで、中間層無しの入力層と出力層との２層である階層型ニューラルネットワークとして演算を実行し、制御装置が、演算結果の出力値を得る。制御装置は、出力値を判定し、正常な場合は処理を修了する。制御装置は、出力値を判定し、異常があることを検出した場合には、異常ユニットの前段ユニットのトークン選択情報記憶部１８に対し、欠陥情報を書き込む。
【０１７２】
次に、制御装置の、正常な場合と異常な場合の、判定方法とその処理について、詳細に説明する。まず、制御装置は、全てのユニットから、すべて同じ出力を得る場合に、正常として判定する。次に、制御装置は、ユニットからの出力が途中で止まる、または、ユニットからの出力値が予想された値と異なる部分がある場合に、異常として判定する。この場合、制御装置は、異常として検出したユニットである異常ユニットの、デイジーチェーン順序で１つ前となる前段ユニットのトークン選択情報記憶部１８に、欠陥情報を書き込み、もう一度欠陥チェックを実行し、判定結果が正常となるまで欠陥チェックを実行する。このとき、欠陥が原因で電気的に切り離す必要が生じる場合に備え、ユニットの入出力部にハイインピーダンススイッチを設け、回路を電気的に切り離す機構を備えても良い。
【０１７３】
以上のように、並列演算装置が、第１の冗長デイジーチェーン制御バス６と、第２の冗長デイジーチェーン制御バス７とにより冗長性を有するようにすることにより、デイジーチェーン制御バス１またはいずれかのユニットに欠陥が生じた場合においても、並列演算装置は問題なく動作することが可能となる。
【０１７４】
なお、ここでは、冗長配線が、デイジーチェーン順序において１つ飛ばしの第１の冗長デイジーチェーン制御バス６と第２の冗長デイジーチェーン制御バス７との場合について説明したが、更に、デイジーチェーン順序において２つ飛ばしの冗長デイジーチェーン制御バスなどを追加することも可能である。
【０１７５】
＜第２の基本構成＞
次に、この発明の一実施形態による並列演算装置の第２の基本構成を、図１４の概略ブロック図を用いて説明する。図１４の概略ブロック図において、図１の第１の基本構成と同一の構成には同一の符号を付けて、その説明を省略する。ここでは、ユニットＡＵ１からＡＵ１０の、ユニットの個数が１０である場合について説明する。このユニットの詳細については、後述する。
【０１７６】
並列演算装置は、第２の基本構成においては、予め定められた識別番号である固有ユニット番号で識別される複数のユニット（ＡＵ１〜ＡＵ１０）と、この複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バス２を介して入力されたことに応じて、該入力された入力値と複数のユニットの中から選択したいずれか１つのユニットを識別する識別番号である選択ユニット番号とを含む制御データを、複数のユニットのそれぞれにユニット入力バス３を介して出力する分配制御部８と、を有する。なお、この制御データには、入力値と、選択ユニット番号と、ユニットの演算方法または制御方法を選択するための制御コードとを含む。
【０１７７】
次に、図１５を用いて、各ユニットの構成について説明する。なお、ユニットＡＵ１からＡＵ１０は同一の構成を有するため、ここでは、ユニットＡＵ１の構成のみについて説明する。ユニットＡＵ１は、データ入力部１１Ａと、データ出力部１４Ａと、ユニット演算部１５Ａと、ユニット出力記憶部１６Ａと、制御コード抽出部１７Ａと、入力値抽出部１８Ａと、ユニット番号抽出部１９Ａと、ユニット番号一致判定部２０Ａと、固有ユニット番号記憶部２１Ａと、を有する。
【０１７８】
固有ユニット番号記憶部２１Ａには、それぞれのユニットを識別するための識別番号である固有ユニット番号が予め記憶されている。ユニット出力記憶部１６Ａには、ユニット演算部１５Ａが演算した結果である演算結果が記憶される。データ入力部１１Ａは、ユニット入力バス３を介して分配制御部８からの制御データを入力する。入力値抽出部１８Ａは、データ入力部１１Ａに入力された制御データから入力値を抽出する。選択ユニット番号抽出部１９Ａは、データ入力部１１Ａに入力された制御データから選択ユニット番号を抽出する。制御コード抽出部１７Ａは、データ入力部１１Ａに入力された制御データから制御コードを抽出する。
【０１７９】
ユニット番号一致判定部２０Ａは、データ入力部１１Ａに入力された制御データに含まれる出力ユニット番号と、固有ユニット番号とが一致するか否かを判定する。このユニット番号一致判定部２０Ａは、選択ユニット番号抽出部１９Ａが抽出した選択ユニット番号と、固有ユニット番号記憶部２１Ａから読み出した固有ユニット番号とが一致するか否かを判定する。
【０１８０】
ユニット演算部１５Ａは、データ入力部１１Ａに入力された制御データに含まれる入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。このユニット演算部１５Ａは、入力値抽出部１８Ａが抽出した入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、このユニット演算部１５Ａは、予め定められた演算方法から、制御コード抽出部１７Ａが抽出した制御コードに基づいて、演算方法を選択し、該選択した演算方法により演算する。また、ユニット演算部１５Ａは、演算した結果である演算結果をユニット出力記憶部１６Ａに記憶させる。
【０１８１】
データ出力部１４Ａは、ユニット番号一致判定部２０Ａが判定した結果が一致である場合には、ユニット演算部１５Ａが演算した結果である演算結果を出力値として、分配制御部８にユニット出力バス２を介して出力する。また、データ出力部１４Ａは、ユニット番号一致判定部２０Ａが判定した結果が一致である場合には、演算結果をユニット出力記憶部１６Ａから読み出し、該読み出した演算結果を出力値として分配制御部８にユニット出力バス２を介して出力する。
【０１８２】
次に、図１６を用いて、分配制御部８の構成を説明する。分配制御部８は、ユニット出力値入力部３１と、制御データ生成部３２と、制御データ出力部３３と、処理手順記憶部３４と、を有する。ユニット出力値入力部３１は、ユニット出力バス２を介して複数のユニットの中のいずれか１つのユニットが出力する出力値を入力する。制御データ生成部３２は、ユニット出力値入力部３１に入力された出力値に基づいて、予め定められた処理手順により制御データを生成する。制御データ出力部３３は、制御データ生成部３２が生成した制御データを複数のユニットのそれぞれにユニット入力バス３を介して出力する。なお、この制御データ出力部３３は、出力する制御データを、電気的に増幅する増幅器を、その内部に有していてもよい。
【０１８３】
また、処理手順記憶部３４には、演算を実行する処理手順が予め記憶されている。制御データ生成部３２は、処理手順を処理手順記憶部３４から順に読み出すことにより、また、必要であれば読み出した処理手順にユニット出力値入力部３１に入力された出力値を挿入することにより、予め定められた処理手順により制御データを生成する。
【０１８４】
ここで、分配制御部８の制御データ生成部３２は、ユニット出力値入力部３１に出力値が入力されたことに応じて、または、制御データ出力部３３が制御データを出力してから予め定められた一定時間の経過後に、制御データを生成する。そのため、分配制御部８、より詳しくは、分配制御部８の制御データ出力部３３は、ユニット出力値入力部３１に出力値が入力されたことに応じて、または、制御データ出力部３３が制御データを出力してから予め定められた一定時間の経過後に、制御データを出力する。
【０１８５】
また、分配制御部８は、入力端子Ｐ２を介して外部から初期値などのデータである入力値を入力され、入力された入力値を各ユニットにユニット入力バス３を介して設定することにより、各ユニットを用いた並列演算を実行する。また、分配制御部８は、各ユニットが演算した演算結果を、各ユニットからユニット出力バス２を介して入力され、該入力された演算結果を外部に出力端子Ｐ１を介して出力する。なお、ここでいう外部とは、並列演算装置の外部にある制御装置やコンピュータである。
【０１８６】
図１４から図１６を用いて説明した並列演算装置の第２の基本構成においては、分配制御部８が制御データにより各ユニットを制御するために、図１に示す並列演算装置の第１の基本構成と比較して、各ユニットでの処理が簡易となり、また、各ユニット間をデイジーチェーン順序で接続していたデイジーチェーン制御バス１が不要となる効果を奏する。
【０１８７】
＜第３の実施形態＞
＜階層型ニューラルネットワークに適応した場合のユニットの構成＞
次に、第２の基本構成による並列演算装置を、階層型ニューラルネットワークに適応した場合の構成について説明する。階層型ニューラルネットワークにおいても並列演算装置全体の構成は、図１４の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図１７を用いて、階層型ニューラルネットワークに適応した場合のユニットの構成のみについて説明する。
【０１８８】
ユニットは、データ入力部１０１Ａと、データ出力部１０４Ａと、重み記憶部１３０と、積和計算一次値記憶部１３１と、層情報記憶部１３３と、関数記憶部１３２と、ユニット出力記憶部１３５Ａと、前段ユニット出力記憶部１３８Ｂと、前段ユニット番号記憶部１３９Ｂと、選択ユニット番号記憶部１４１Ｂと、固有ユニット番号記憶部１４０Ｂと、を有する。また、ユニットは、積和計算一次値算出部１１１Ａと、ユニット出力算出部１１２Ａと、比較部１１５Ｂと、ユニット制御部１１６Ｂと、ファンクション番号抽出部１５０Ｂと、ファンクション番号記憶部１５１Ｂと、オペランド抽出部１５２Ｂと、汎用バッファー記憶部１５３Ｂと、を有する。
【０１８９】
ここで、図１７のデータ入力部１０１Ａ、データ出力部１０４Ａ、ユニット出力記憶部１３５Ａは、図１５のデータ入力部１１Ａ、データ出力部１４Ａ、ユニット出力記憶部１６Ａに、それぞれ対応する。また、図１７の固有ユニット番号記憶部１４０Ｂ、比較部１１５Ａが、図１５の固有ユニット番号記憶部２１Ａ、ユニット番号一致判定部２０Ａに、それぞれ対応する。これらの図１７と図１５とにおいて対応する構成について、共通の機能については、その説明を省略する。
【０１９０】
また、図１７のファンクション番号抽出部１５０Ｂとファンクション番号記憶部１５１Ｂとが図１５の制御コード抽出部１７Ａに対応する。また、図１７のオペランド抽出部１５２Ｂと汎用バッファー記憶部１５３Ｂとが、図１５の入力値抽出部１８Ａまたは選択ユニット番号抽出部１９Ａに対応する。
【０１９１】
また、図１７の重み記憶部１３０と、層情報記憶部１３３と、積和計算一次値記憶部１３１と、関数記憶部１３２と、積和計算一次値算出部１１１Ａと、ユニット出力算出部１１２Ａと、前段ユニット番号記憶部１３９Ｂとが、図１５のユニット演算部１５Ａに対応する。
【０１９２】
また、図１７の構成において、図３の第１の基本構成における階層型ニューラルネットワークに適応した場合の並列演算装置のユニットの構成と同様の構成には、同一の符号、または、同一の符号に符号Ａを付した符号を付け、その説明を省略する。
【０１９３】
＜第３の実施形態におけるユニットの各構成の説明＞
ファンクション番号記憶部１５１Ｂには、制御データに含まれる制御コード（ファンクション番号）が記憶される。汎用バッファー記憶部１５３Ｂには、制御データに含まれる制御コードＡ（ファンクション番号）以外の情報、例えば、後述する選択ユニット番号Ｂ、出力値Ｃ、配信層情報Ｄ、または、配信ユニット識別情報Ｅが記憶される。以降において、制御データに含まれる制御コードＡ（ファンクション番号）以外の情報、例えば、後述する選択ユニット番号Ｂ、出力値Ｃ、配信層情報Ｄ、または、配信ユニット識別情報Ｅを汎用データとして説明する。この制御データの詳細については、図１８を用いて後述する。
【０１９４】
ファンクション番号抽出部１５０Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードを抽出し、抽出した制御コードをファンクション番号記憶部１５１Ｂに記憶させる。オペランド抽出部１５２Ｂは、データ入力部１０１Ａに入力された制御データに含まれる汎用データを抽出し、抽出した汎用データを汎用バッファー記憶部１５３Ｂに記憶させる。
【０１９５】
ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データと比較部１１５Ｂが判定した結果とに基づいて、処理を実行する、または、予め定められた処理部の中から選択的に処理を実行させる。このデータ入力部１０１Ａに入力された制御データとは、ファンクション番号記憶部１５１Ｂから読み出した制御コードと、汎用バッファー記憶部１５３Ｂから読み出した汎用データとである。
【０１９６】
この前記ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードが、積和計算一次値を初期化することを示す場合には、積和計算一次値記憶部１３１に記憶されている積和計算一次値情報の値を０に初期化する。
【０１９７】
またユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードが、積和計算一次値を算出し加算格納することを示し、該制御データが出力値と該出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報とを含む場合には、配信ユニット識別情報を前段ユニット出力記憶部１３８Ｂに記憶し、出力値に基づいて積和計算一次値算出部１１１Ａを用いて処理を選択的に実行する。
【０１９８】
また、ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードがユニット出力演算を実行することを示す場合には、ユニット出力算出部１１２Ａを用いて処理を選択的に実行する。
【０１９９】
また、ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードがアクティブなユニットとして出力値を出力することを示し、該制御データが選択ユニット番号を含む場合であり、かつ、比較部１１５Ｂ（ユニット番号一致判定部）が判定した結果が一致である場合には、データ出力部１０４Ａの処理を用いて処理を選択的に実行し、演算結果をユニット出力記憶部１３５Ａから読み出し、該読み出した演算結果を出力値として分配制御部８にデータ出力部１０４Ａとユニット出力バス２とを介して出力する。
【０２００】
なお、ユニット出力記憶部１３５Ａに層情報と演算結果とが関連付けて記憶されている場合においては、ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データに含まれる制御コードがアクティブなユニットとして出力値を出力することを示し、該制御データが選択ユニット番号を含む場合であり、かつ、比較部１１５Ｂが判定した結果が一致である場合には、データ出力部１０４Ａの処理を選択的に実行し、層情報記憶部１３３から読み出した層情報に該当する演算結果をユニット出力記憶部１３５Ａから読み出し、該読み出した演算結果を出力値として分配制御部８にデータ出力部１０４Ａとユニット出力バス２とを介して出力する。
【０２０１】
また、ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データが配信層情報を含む場合には、データ入力部１０１Ａに入力された制御データに含められた配信層情報を層情報記憶部１３３に記憶する。
詳細には、ユニット制御部１１６Ｂは、データ入力部１０１Ａに入力された制御データが配信層情報を含む場合には、データ入力部１０１Ａに入力された制御データから配信層情報を抽出し、抽出した配信層情報を層情報記憶部１３３に記憶する。また、このユニット制御部１１６Ｂは、汎用バッファー記憶部１５３Ｂから配信層情報を読み出すことにより、データ入力部１０１Ａに入力された制御データから配信層情報を抽出する。
【０２０２】
またユニット制御部１１６Ｂは、出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報を、データ入力部１０１Ａに入力された制御データが含む場合には、データ入力部１０１Ａに入力された制御データに含められた配信ユニット識別情報を前段ユニット出力記憶部１３８Ｂに記憶する。
詳細には、ユニット制御部１１６Ｂは、出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報を、データ入力部１０１Ａに入力された制御データが含む場合には、データ入力部１０１Ａに入力された制御データから配信ユニット識別情報を抽出し、抽出した配信ユニット識別情報をユニット番号記憶部１３９Ｂに記憶する。また、このユニット制御部１１６Ｂは、汎用バッファー記憶部１５３Ｂから配信ユニット識別情報を読み出すことにより、データ入力部１０１Ａに入力された制御データから配信ユニット識別情報を抽出する。
【０２０３】
積和計算一次値算出部１１１Ａは、ユニット制御部１１６Ｂの選択に応じて、層情報記憶部１３３から読み出した層情報に該当する結合荷重を重み記憶部１３０から読み出し、該読み出した結合荷重と、データ入力部１０１Ａに入力された入力値とを乗算し、該乗算した値を積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる。
【０２０４】
また、積和計算一次値算出部１１１Ａは、ユニット制御部１１６Ｂの選択に応じて、前段ユニット出力記憶部１３８Ｂから読み出したユニット識別情報と層情報記憶部１３３から読み出した層情報とに該当する結合荷重を重み記憶部１３０から読み出し、該読み出した結合荷重と、データ入力部１０１Ａに入力された入力値とを乗算し、該乗算した値を前記積和計算一次値記憶部１３１に記憶されている積和計算一次値情報に加算して記憶させる。
【０２０５】
ユニット出力算出部１１２Ａは、ユニット制御部１１６Ｂの選択に応じて、積和計算一次値記憶部１３１から積和計算一次値情報を読み出し、層情報記憶部１３３から読み出した層情報に該当する出力関数を関数記憶部１３２から読み出し、該読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、該算出した出力値をユニット出力記憶部１３５Ａに記憶させる。また、ユニット出力算出部１１２Ａは、この算出した出力値をユニット出力記憶部１３５Ａに記憶させるときに、層情報記憶部１３３から読み出した層情報と関連付けて、この算出した出力値を前記ユニット出力記憶部１３５Ａに記憶させる。
【０２０６】
＜第３の実施形態における制御データのプロトコル＞
次に、図１８を用いて、一例としての制御データのプロトコルについて説明する。この制御データは、制御コードＡと、選択ユニット番号Ｂと、出力値Ｃとを含み、更に、配信層情報Ｄと、配信ユニット識別情報Ｅと、を含む。この配信層情報Ｄとは、出力値Ｃを出力しているユニットの層情報であり、また、配信ユニット識別情報Ｅとは、出力値Ｃを出力しているユニットのユニット識別情報である。この制御コードのプロトコルは、制御コードの値により、次に示すように予め定められている。
【０２０７】
＜選択処理０＞
制御データに含まれる制御コードＡの値が“０”であり、“積和計算一次値を初期化する”ことを示す制御コードである場合には、この制御データは、他の情報（汎用データ）を含んでいない。この制御コードＡの値が“０”である制御データを受信した全てのユニットは、積和計算一次値算出部１１１Ａに記憶されている積和計算一次値の値を０に初期化する。
【０２０８】
＜選択処理１＞
また、制御データに含まれる制御コードＡの値が“１”であり、“積和計算一次値を算出し加算格納する”ことを示す制御コードである場合には、この制御データは、出力値Ｃと、配信層情報Ｄと、配信ユニット識別情報Ｅと、を含む。この制御コードＡの値が１である制御データを受信した全てのユニットは、層情報ｌを配信層情報Ｄとし、ユニット識別情報ｉを配信ユニット識別情報Ｅとし、入力値の値を出力値Ｃとして、積和計算一次値を算出する。
【０２０９】
＜選択処理２＞
また、制御データに含まれる制御コードＡの値が“２”であり、“ユニット出力演算を実行する”ことを示す制御コードである場合には、この制御データは、配信層情報Ｄを含む。この制御コードＡの値が“２”である制御データを受信した全てのユニットは、層情報ｌを配信層情報Ｄとして、ユニット出力演算を実行し、実行した演算結果を出力値として層情報ｌと関連付けてユニット出力記憶部１３５Ａに格納する。
【０２１０】
＜選択処理３＞
また、制御データに含まれる制御コードＡの値が“３”であり、“アクティブなユニットとして出力値を出力する”ことを示す制御コードである場合には、制御データは、選択ユニット番号Ｂと配信層情報Ｄとを含む。この制御コードＡの値が“３”である制御データを受信した全てのユニットは、受信した制御データに含まれる選択ユニット番号Ｂが、自身のユニットが有する固有ユニット番号Ｉと一致するか否かを判定し、判定した結果が一致する場合には、層情報ｌを配信層情報Ｄの値とし、この層情報ｌに該当するユニット出力記憶部１３５Ａから読み出した出力値を出力する。
【０２１１】
この図１８の制御データのプロトコルに基づいて、分配制御部９は、積和計算一次値を初期化することを示す制御コード、出力値と配信ユニット識別情報とを含み、積和計算一次値を算出し加算格納することを示す制御コード、ユニット出力演算を実行することを示す制御コード、アクティブなユニットとして出力値を出力することを示す制御コード、または、前記配信層情報を含む制御データを、階層型ニューラルネットワークの階層数と該階層のノード数とに合わせて予め定められた順序で出力する。
【０２１２】
＜第３の実施形態におけるユニットの動作＞
次に、図１９を用いて、図１８で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部１１６の動作について説明する。
まず、ユニットは、データ入力部１０１Ａに制御データが入力されたことに応じて、処理を開始する（ステップＳ１９０１）。次に、ファンクション番号抽出部１５０Ｂが、データ入力部１０１Ａに入力された制御データから、制御コードを抽出し、抽出した制御コードをファンクション番号記憶部１５１Ｂに記憶させる。
【０２１３】
また、オペランド抽出部１５２Ｂが、データ入力部１０１Ａに入力された制御データから、オペランドである制御コード以外の情報、例えば、選択ユニット番号Ｂと、出力値Ｃと、配信層情報Ｄと、配信ユニット識別情報Ｅとを抽出し、抽出したオペランドを汎用バッファー記憶部１５３Ｂに記憶させる。
【０２１４】
次に、ユニット制御部１１６Ｂが、ファンクション番号抽出部１５０Ｂが制御コードを抽出したことに応じて、ファンクション番号記憶部１５１Ｂから読み出した制御コードの値に基づいて、以降に説明するステップＳ１９０２からステップＳ１９０８により、ユニットにおける処理を選択的に実行する。
【０２１５】
まず、ユニット制御部１１６Ｂは、読み出した制御コードＡの値が“０”であるか否かを判定する（ステップＳ１９０２）。ステップＳ１９０２の判定結果が、読み出した制御コードＡの値が“０”である場合には、ユニット制御部１１６Ｂは、上記に説明した選択処理０を実行し（ステップＳ１９０３）、処理を終了する。
【０２１６】
一方、ステップＳ１９０２の判定結果が、読み出した制御コードＡの値が“０”でない場合には、ユニット制御部１１６Ｂは、読み出した制御コードＡの値が“１”であるか否かを判定する（ステップＳ１９０４）。ステップＳ１９０４の判定結果が、読み出した制御コードＡの値が“１”である場合には、ユニット制御部１１６Ｂは、上記に説明した選択処理１を実行し（ステップＳ１９０５）、処理を終了する。
【０２１７】
一方、ステップＳ１９０４の判定結果が、読み出した制御コードＡの値が“１”でない場合には、ユニット制御部１１６Ｂは、読み出した制御コードＡの値が“２”であるか否かを判定する（ステップＳ１９０５）。ステップＳ１９０５の判定結果が、読み出した制御コードＡの値が“２”である場合には、ユニット制御部１１６Ｂは、上記に説明した選択処理２を実行し（ステップＳ１９０６）、処理を終了する。
【０２１８】
一方、ステップＳ１９０５の判定結果が、読み出した制御コードＡの値が“２”でない場合には、つまり、読み出した制御コードＡの値が“３”である場合には、比較部１１５Ｂが、選択ユニット番号記憶部１４１Ｂから読み出した選択ユニット番号と固有ユニット番号記憶部１４０Ｂから読み出した固有ユニット番号とが一致するか否かを判定する（ステップＳ１９０７）。ステップＳ１９０７の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部１１６Ｂは、上記に説明した選択処理３を実行し（ステップＳ１９０８）、処理を終了する。一方、ステップＳ１９０７の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
【０２１９】
＜第３の実施形態における分配制御部８の動作＞
次に、図２０と図２１とを用いて、第２の基本構成による並列演算装置を階層型ニューラルネットワークに適応した場合の分配制御部８の動作について説明する。なお、分配制御部８が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図１７から図１９を用いて既に説明したので、ここでは、分配制御部８の動作のみについて説明する。なお、ここでも図６の階層型ニューラルネットワークに、第２の基本構成による並列演算装置を適応した場合について説明する。
【０２２０】
まず、図２０（ａ）を用いて、階層型ニューラルネットワークに適応した場合における、分配制御部８の動作概要について説明する。まず、各ユニットの初期設定（初期化）をする（ステップＳ２００１）。次に、外部から入力端子Ｐ２を介して入力層Ｌ１のノード用の入力データ（パターン入力）である入力の指示を受けて、受けた入力を、中間層（隠れ層）Ｌ２のノードとしての各ユニットに、分配制御部８が入力層Ｌ１として、分配することにより、各ユニットを用いて中間層Ｌ２の積和計算を並列に実行する（ステップＳ２００２）。このステップＳ２００２では、分配制御部８が入力層Ｌ１のノードとして、中間層Ｌ２のノードとなる各ユニットに出力値を出力している。
【０２２１】
次に、階層型ニューラルネットワークの全ての中間層（層情報カウンタ変数ｌ＝２、・・・Ｌ＋１）について、中間層積和計算（ステップＳ２００４）の処理を繰り返す（ステップＬ２００２からステップＬ２００５の層ループ処理）。ここで、Ｌは、中間層の総数（中間層総数）の値であり、図６の３階層である階層型ニューラルネットワークにおいては、この中間層総数Ｌの値は１である。このステップＳ２００４の中間層積和計算は、後に図２１（ａ）を用いて詳述する。
【０２２２】
このステップＬ２００２からステップＬ２００５の層ループ処理により、階層型ニューラルネットワークの中間層のノードとしての処理が階層型ニューラルネットワークの層において、入力層Ｌ１から出力層Ｌ３の方向に順に実行され、最終的には、各ユニットには出力層Ｌ３としての演算結果の値が記憶される。なお、このステップＬ２００２からステップＬ２００５のループにおいては、いずれか１つのユニットは、出力をする層としてのアクティブなユニットとして機能し、全てのユニットは入力を受ける層のノードとして機能する。
【０２２３】
次に、出力層Ｌ３のノードとしてのユニットに出力値を、ユニット識別情報で識別されるユニットの順に出力させる（ステップＳ２００６）ことにより、階層型ニューラルネットワークの出力層Ｌ３に属するノードとなる全てのユニットからの演算結果を順に受信する。また、この順に受信した演算結果を、入力されたパターン入力に対しての階層型ニューラルネットワーク演算装置の演算結果として、出力端子Ｐ１を介して外部に順に出力する。
【０２２４】
以上のステップＳ２００１からステップＳ２００６の処理により、この並列演算装置は、外部から入力された入力データ（パターン入力）である入力に応じて、階層型ニューラルネットワークの演算を複数のユニットを用いて並列に実行し、この実行した演算結果を、外部に出力することができる。
【０２２５】
次に、図２０（ｂ）、図２０（ｃ）、図２１（ａ）、および、図２１（ｂ）を用いて、図２０（ａ）の各処理について詳細に説明する。なお、ここでは、図２０（ｂ）、図２０（ｃ）、図２１（ａ）、および、図２１（ｂ）の処理を、図２０（ａ）の各処理についての関数またはサブルーチンとして説明する。
【０２２６】
最初に、図２０（ｂ）を用いて、図２０（ａ）のステップＳ２００１の処理を詳細に説明する。まず、制御コードＡの値を“０”とした制御データを出力し（ステップＳ２００１１）、次に、処理を戻す。
【０２２７】
次に、図２０（ｃ）を用いて、図２０（ａ）のステップＳ２００２の処理を詳細に説明する。まず、カウンタ変数ｉの値を０から、１、２、・・・Ｎ（１）まで順次増加させながら、次のステップＳ２００２２とステップＳ２００２３との処理を繰り返す（ステップＬ２００２１とステップＬ２００２４の入力ループ）。このＮ（１）は、層識別情報の値が１である層のノード数の値、つまり、入力層Ｌ１のノード数の値である。例えば、図６の階層型ニューラルネットワークにおいては、この入力層Ｌ１のノード数の値は３である。
【０２２８】
このステップＳ２００２２では、パターン入力ｘｉ（ｌ）を外部から入力する。次に、このステップＳ２００２３では、制御コードＡの値を“１”とし、出力値Ｃの値をステップＳ２００２２で外部から入力されたパターン入力ｘｉ（１）とし、配信層情報Ｄの値をカウンタ変数ｉとし、配信ユニット識別情報Ｅの値を１とした制御データを、各ユニットに出力する。
次に、制御コードＡの値を“２”とし、配信層情報Ｄの値を１とした制御データを、各ユニットに出力し（ステップＳ２００２５）、処理を戻す。
【０２２９】
次に、図２１（ａ）を用いて、図２０（ａ）のステップＳ２００４の処理を詳細に説明する。まず、カウンタ変数ｉの値を０から、１、２、・・・Ｎ（ｌ）まで順次増加させながら、次のステップＳ２００４２からステップＳ２００４４の処理を繰り返す（ステップＬ２００４１とステップＬ２００４５の入力ループ）。このＮ（ｌ）は、層識別情報の値が層情報カウンタ変数ｌである層のノード数の値である。
【０２３０】
このステップＳ２００４２では、制御コードＡの値を“３”とし、選択ユニット番号Ｂをカウンタ変数ｉとし、配信層情報Ｄを層情報カウンタ変数ｌとした制御データを、各ユニットに出力する。また、このステップＳ２００４３では、ステップＳ２００４２で出力した選択ユニット番号Ｂであるカウンタ変数ｉと固有ユニット番号とが一致したユニットから出力された出力値ｘｉ（ｌ）を入力する。また、このステップＳ２００４４では、制御コードＡの値を“２”とし、出力値ＣをステップＳ２００４３でユニットから入力された出力値ｘｉ（ｌ）とし、配信層情報Ｄをカウンタ変数ｉとし、配信ユニット識別情報Ｅを層情報カウンタ変数ｌとした制御データを、各ユニットに出力する。
次に、制御コードＡの値を“２”とし、配信層情報Ｄを層情報カウンタ変数ｌとした制御データを、各ユニットに出力し（ステップＳ２００４６）、処理を戻す。
【０２３１】
次に、図２１（ｂ）を用いて、図２０（ａ）のステップＳ２００６の処理を詳細に説明する。まず、カウンタ変数ｉの値を０から、１、２、・・・Ｎ（Ｌ＋２）まで順次増加させながら、次のステップＳ２００６２からステップＳ２００６４の処理を繰り返し（ステップＬ２００６１とステップＬ２００６５の出力ループ）、処理を戻す。このＮ（Ｌ＋２）は、層識別情報の値が（中間層総数Ｌ＋２）である層のノード数の値であり、つまり、出力層Ｌ３のノードの数である。例えば、図６の階層型ニューラルネットワークにおいては、この出力層Ｌ３のノード数の値は３である。
【０２３２】
このステップＳ２００６２では、制御コードＡの値を“３”とし、選択ユニット番号Ｂをカウンタ変数ｉとし、配信層情報Ｄを（中間層総数Ｌ＋２）とした制御データを、各ユニットに出力する。また、このステップＳ２００６３では、ステップＳ２００６２で出力した選択ユニット番号Ｂであるカウンタ変数ｉと固有ユニット番号とが一致したユニットから出力された出力値ｘｉ（Ｌ＋２）を入力する。また、このステップＳ２００６４では、ステップＳ２００６３でユニットから入力された出力値ｘｉ（Ｌ＋２）を、出力端子Ｐ１を介して外部に出力する。
【０２３３】
以上の処理により、この第３の実施形態による階層型ニューラルネットワークに適応した場合の並列演算装置は、第１の実施形態による階層型ニューラルネットワークに適応した場合の並列演算装置と同様に、階層型ニューラルネットワークを実行することができ、また、第１の実施形態による階層型ニューラルネットワークと同様の効果を奏することが可能である。
【０２３４】
＜第４の実施形態＞
＜自己組織化マップに適応した場合のユニットの構成＞
次に、第２の基本構成による並列演算装置を、自己組織化マップに適応した場合の構成について説明する。自己組織化マップにおいても並列演算装置全体の構成は、図１４の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図２２を用いて、自己組織化マップに適応した場合のユニットの構成のみについて説明する。
【０２３５】
ここで、第１の基本構成における自己組織化マップの並列演算装置においては、最小のノルムを有するユニットの決定は、各ユニットがノルムを算出し、次に、ユニット間でノルムの大小を順に比較していた。これに対して、この第２の基本構成における自己組織化マップの並列演算装置においては、各ユニットがノルムを算出した後に、分配制御部８の制御に基づいて、各ユニットが算出したノルムを順に分配制御部８にユニット出力バス２を介して出力する。次に、分配制御部８が、入力されたノルムの中から最小となるノルムを選択することにより、最小のノルムを有するユニットを決定する。
【０２３６】
また、第１の基本構成における自己組織化マップの並列演算装置においては、各ユニットが、学習回数に関連付けて学習速度と近傍距離とを予め内部の記憶部（学習速度記憶部と近傍距離記憶部）に記憶していた。これに対して第２の基本構成における自己組織化マップの並列演算装置においては、分配制御部８が、内部に有する学習速度記憶部と近傍距離記憶部とに、学習回数に関連付けて学習速度と近傍距離とを記憶する。また、各ユニットは、１つの値の学習速度と近傍距離とを内部の記憶部（学習速度記憶部と近傍距離記憶部）に記憶する。また、分配制御部８が、学習回数に応じて、学習速度記憶部と近傍距離記憶部とを各ユニットに制御データに含めて配信し、各ユニットが、内部の記憶部（学習速度記憶部と近傍距離記憶部）の学習速度記憶部と近傍距離記憶部とを、分配制御部８から受信した制御データに含まれている学習速度記憶部と近傍距離記憶部とに更新する。
【０２３７】
以上のように、分配制御部８が、学習回数に応じて、学習速度記憶部と近傍距離記憶部とを各ユニットに制御データに含めて配信するようにすることにより、全てのユニットが学習回数に関連付けて学習速度と近傍距離とを予め内部の記憶部しておく必要がなくなるという効果を奏する。また、例えば、学習速度と近傍距離との変化の度合いを学習回数に応じて早くするまたは遅くするなどの、学習回数に関連付いた学習速度と近傍距離との変化の仕方を変更する場合には、学習回数と関連付けて学習速度記憶部と近傍距離記憶部とを記憶している分配制御部８内部の記憶部の情報のみを変更するのみでよく、変更が簡易となる効果を奏する。
【０２３８】
また、自己組織化マップに適応した場合のユニットは、第２の実施形態と同様に、ネットワーク座標により識別される座標で予め識別されている。そこで、第４の実施形態においては、固有ユニット番号をネットワーク座標として説明する。なお、各ユニットは、第２の実施形態または第３の実施形態と同様に、同一の構成を有しているので、ここでは図２２を用いて１つのユニットの構成のみについて説明する。
【０２３９】
ユニットは、データ入力部２０１Ａと、データ出力部２０４Ａと、距離記憶部２３２Ａと、重み記憶部２３１Ａと、ノルム算出部２１４Ａと、近傍判定部２１５Ａと、重み更新部２１６Ａと、ユニットネットワーク座標記憶部２３４Ａと、入力ネットワーク座標記憶部２３３Ａと、学習速度記憶部２３５Ａと、ユニットノルム記憶部２３６Ａと、入力データ記憶部２３０Ａと、実数ベクトル次元数記憶部２４２Ｂと、比較部２１５Ｂと、ユニット制御部２１６Ｂと、ファンクション番号抽出部２５０Ｂと、ファンクション番号記憶部２５１Ｂと、オペランド抽出部２５２Ｂと、汎用バッファー記憶部２５３Ｂと、を有する。
【０２４０】
ここで、図２２のデータ入力部２０１Ａ、データ出力部２０４Ａ、ユニットノルム記憶部２３６Ａと重み記憶部２３１Ａは、図１５のデータ入力部１１Ａ、データ出力部１４Ａ、ユニット出力記憶部１６Ａに、それぞれ対応する。また、図２２のユニットネットワーク座標記憶部２３４Ａ、比較部２１５Ｂが、図１５の固有ユニット番号記憶部２１Ａ、ユニット番号一致判定部２０Ａに、それぞれ対応する。これらの図２２と図１５とにおいて対応する構成について、共通の機能については、その説明を省略する。
【０２４１】
また、図２２のファンクション番号抽出部２５０Ｂとファンクション番号記憶部２５１Ｂとが図１５の制御コード抽出部１７Ａに対応する。また、図２２のオペランド抽出部２５２Ｂと汎用バッファー記憶部２５３Ｂとが、図１５の入力値抽出部１８Ａまたは選択ユニット番号抽出部１９Ａに対応する。
【０２４２】
また、図２２の構成において、図７と図８との第１の基本構成における自己組織化マップに適応した場合の並列演算装置のユニットの構成と同様の構成には、同一の符号、または、同一の符号に符号Ａを付した符号を付け、その説明を省略する。
【０２４３】
＜第４の実施形態におけるユニットの各構成の説明＞
ファンクション番号記憶部２５１Ｂには、制御データに含まれる制御コード（ファンクション番号）が記憶される。汎用バッファー記憶部２５３Ｂには、制御データに含まれる制御コードＡ（ファンクション番号）以外の情報、例えば、後述する入力ネットワーク座標Ｂ、入力学習速度Ｃ、入力近傍距離Ｄ、入力重みＷ、入力次元数Ｎ、または、入力値Ｘが記憶される。
【０２４４】
以降において、制御データに含まれる制御コードＡ（ファンクション番号）以外の情報、例えば、後述する入力ネットワーク座標Ｂ、入力学習速度Ｃ、入力近傍距離Ｄ、入力重みＷ、入力次元数Ｎ、または、入力値Ｘを汎用データとして説明する。この制御データの詳細については、図２３を用いて後述する。
【０２４５】
ファンクション番号抽出部２５０Ｂは、データ入力部２０１Ａに入力された制御データに含まれる制御コードを抽出し、抽出した制御コードをファンクション番号記憶部２５１Ｂに記憶させる。オペランド抽出部２５２Ｂは、データ入力部２０１Ａに入力された制御データに含まれる汎用データを抽出し、抽出した汎用データを汎用バッファー記憶部２５３Ｂに記憶させる。
【０２４６】
ユニット制御部２１６Ｂは、データ入力部２０１Ａに入力された制御データと比較部２１５Ｂが判定した結果とに基づいて、処理を実行する、または、予め定められた処理部の中から選択的に処理を実行させる。このデータ入力部２０１Ａに入力された制御データとは、ファンクション番号記憶部２５１Ｂから読み出した制御コードと、汎用バッファー記憶部２５３Ｂから読み出した汎用データとである。
【０２４７】
また、図２２の距離記憶部２３２Ａと、ノルム算出部２１４Ａと、近傍判定部２１５Ａと、重み更新部２１６Ａと、入力ネットワーク座標記憶部２３３Ａと、学習速度記憶部２３５Ａと、入力データ記憶部２３０Ａと、実数ベクトル次元数記憶部２４２Ｂと、ユニット制御部２１６Ｂとが、図１５のユニット演算部１５Ａに対応する。なお、図２２の重み記憶部２３１Ａは、図１５のユニット演算部１５Ａとユニット出力記憶部１６Ａとに対応する。
【０２４８】
また、ユニット制御部２１６Ｂの詳細と他の構成とについては、次に図２３を用いて、一例としての制御データのプロトコルの説明とともに説明する。
【０２４９】
＜第４の実施形態における制御データのプロトコル＞
次に、図２３を用いて、一例としての制御データのプロトコルについて説明する。この制御データは、制御コードＡと、入力ネットワーク座標Ｂと、入力学習速度Ｃと、入力近傍距離Ｄと、入力結合重みベクトルＷ（Ｗ１、Ｗ２、・・・）と、入力次元数Ｎと、入力ベクトルＸ（Ｘ１、Ｘ２、・・・）と、を含む。この制御コードのプロトコルは、制御コードの値により、次に示すように予め定められている。
【０２５０】
＜選択処理４＞
制御データに含まれる制御コードＡの値が“４”であり、“重みを設定する”ことを示す場合には、この制御データは、入力ネットワーク座標Ｂと入力結合重みベクトルＷ（Ｗ１、Ｗ２、・・・）とを含んでいる。この制御コードＡの値が“４”であり、“重みを設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、入力ネットワーク座標記憶部２３３Ａに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Ｂに更新するとともに、比較部２１５Ｂが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部２１５Ｂの判定結果が一致する場合には、ユニット制御部２１６Ｂが、重み記憶部２３１Ａに記憶されている結合重みベクトルを、受信した制御データに含まれる入力結合重みベクトルＷ（Ｗ１、Ｗ２、・・・）に更新する。
【０２５１】
＜選択処理５＞
制御データに含まれる制御コードＡの値が“５”であり、“学習速度と近傍距離とを設定する”ことを示す場合には、この制御データは、入力学習速度Ｃと、入力近傍距離Ｄと、を含んでいる。この制御コードＡの値が“５”であり、“学習速度と近傍距離とを設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、学習速度記憶部２３５Ａに記憶されている学習速度を受信した制御データに含まれる入力学習速度Ｃに更新するとともに、距離記憶部２３２Ａに記憶されている基準距離を受信した制御データに含まれる入力近傍距離Ｄに更新する。
【０２５２】
＜選択処理６＞
制御データに含まれる制御コードＡの値が“６”であり、“実数ベクトルの次元数を設定する”こと示す場合には、この制御データは、入力次元数Ｎを含んでいる。この制御コードＡの値が“６”であり、“実数ベクトルの次元数を設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、実数ベクトル次元数記憶部２４２Ｂに記憶されている次元数を受信した制御データに含まれる入力次元数Ｎに更新する。
【０２５３】
＜選択処理７＞
制御データに含まれる制御コードＡの値が“７”であり、“ノルムを算出する”ことを示す場合には、この制御データは、入力ベクトルＸ（Ｘ１、Ｘ２、・・・）を含んでいる。この制御コードＡの値が“７”であり、“ノルムを算出する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、入力データ記憶部２３０Ａに記憶されている入力データベクトルを入力ベクトルＸ（Ｘ１、Ｘ２、・・・）に更新する。次に、ノルム算出部２１４Ａが、該更新した入力ベクトルＸ（Ｘ１、Ｘ２、・・・）と、重み記憶部２３１Ａから読み出した結合重みベクトルとのノルムを算出し、該算出したノルムをユニットノルムとしてユニットノルム記憶部２３６Ａに記憶させる。
【０２５４】
＜選択処理８＞
制御データに含まれる制御コードＡの値が“８”であり、“ノルムを出力する”ことを示す場合には、この制御データは、入力ネットワーク座標Ｂを含んでいる。この制御コードＡの値が“８”であり、“ノルムを出力する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、入力ネットワーク座標記憶部２３３Ａに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Ｂに更新するとともに、比較部２１５Ｂが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部２１５Ｂの判定結果が一致する場合には、ユニット制御部２１６Ｂが、ユニットノルム記憶部２３６Ａから読み出したユニットノルムを、データ出力部２０４Ａとユニット出力バス２とを介して分配制御部８に出力する。
【０２５５】
＜選択処理９＞
制御データに含まれる制御コードＡの値が“９”であり、“学習する”ことを示す場合には、この制御データは、入力ネットワーク座標Ｂを含んでいる。この制御コードＡの値が“９”であり、“学習する”ことを示す制御データを受信した全てのユニットは、ユニット制御部２１６Ｂが、入力ネットワーク座標記憶部２３３Ａに記憶されている入力ネットワーク座標を、制御データに含まれていた入力ネットワーク座標Ｂに更新する。次に、ユニットの近傍判定部２１５Ａが、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部２３３Ａから読み出した入力ネットワーク座標との間の距離を算出し、該算出した距離が、距離記憶部２３２Ａから読み出した距離以下であるか否かを判定することにより、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標が、入力ネットワーク座標記憶部２３３Ａから読み出した入力ネットワーク座標の近傍にあるか否かを判定する。次に、近傍判定部２１５Ａの判定した結果が近傍である場合には、重み更新部２１６Ａが、入力データ記憶部２３０Ａから読み出した入力データベクトルと重み記憶部２３１Ａから読み出した結合重みベクトルとの差を算出し、該算出した差に学習速度記憶部２３５Ａから読み出した学習速度係数を乗じた値を、重み記憶部２３１Ａに記憶されている結合重みベクトルに加算し、重み記憶部２３１Ａに記憶されている結合重みベクトルを更新することにより、学習する。
【０２５６】
＜選択処理１０＞
制御データに含まれる制御コードＡの値が“１０”であり、“学習結果を出力する”ことを示す場合には、この制御データは、入力ネットワーク座標Ｂを含んでいる。この制御コードＡの値が“１０”であり、“学習結果を出力する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部２１６Ｂが、入力ネットワーク座標記憶部２３３Ａに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Ｂに更新するとともに、比較部２１５Ｂが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部２１５Ｂの判定結果が一致する場合には、ユニット制御部２１６Ｂが、重み記憶部２３１Ａから読み出した結合重みベクトルを、データ出力部２０４Ａとユニット出力バス２とを介して分配制御部８に出力する。
【０２５７】
＜第４の実施形態におけるユニットの動作＞
次に、図２４を用いて、図２３で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部２１６Ｂの動作について説明する。なお、説明の簡略のために、以降においては制御コードＡの値を用いて説明する。この制御コードＡの値の意味は、上記に図２３の説明と同様である。
【０２５８】
まず、ユニットは、データ入力部２０１Ａに制御データが入力されたことに応じて、処理を開始する（ステップＳ２４０１）。次に、ファンクション番号抽出部２５０Ｂが、データ入力部２０１Ａに入力された制御データから、制御コードを抽出し、抽出した制御コードをファンクション番号記憶部２５１Ｂに記憶させる。
【０２５９】
また、オペランド抽出部２５２Ｂが、データ入力部２０１Ａに入力された制御データから、オペランドである制御コード以外の情報を汎用バッファー記憶部２５３Ｂに記憶させる。
【０２６０】
次に、ユニット制御部２１６Ｂが、ファンクション番号抽出部２５０Ｂが制御コードを抽出したことに応じて、ファンクション番号記憶部２５１Ｂから読み出した制御コードの値に基づいて、以降に説明するステップＳ２４０２からステップＳ２４１２により、ユニットにおける処理を選択的に実行する（ステップＳ２４０２）。
【０２６１】
ステップＳ２４０２で、読み出した制御コードの値が“４”である場合には、比較部２１５Ｂが、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部２３３Ａから読み出した入力ネットワーク座標とが一致するか否かを判定する（ステップＳ２４０３）。ステップＳ２４０３の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理４を実行し（ステップＳ２４０４）、処理を終了する。一方、ステップ２４０３の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
【０２６２】
一方、ステップＳ２４０２で、読み出した制御コードの値が“５”である場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理５を実行し（ステップＳ２４０５）、処理を終了する。一方、ステップＳ２４０２で、読み出した制御コードの値が“６”である場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理６を実行し（ステップＳ２４０６）、処理を終了する。一方、ステップＳ２４０３で、読み出した制御コードの値が“７”である場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理７を実行し（ステップＳ２４０７）、処理を終了する。
【０２６３】
一方、ステップＳ２４０２で、読み出した制御コードの値が“８”である場合には、比較部２１５Ｂが、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部２３３Ａから読み出した入力ネットワーク座標とが一致するか否かを判定する（ステップＳ２４０８）。ステップＳ２４０８の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理８を実行し（ステップＳ２４０９）、処理を終了する。一方、ステップ２４０８の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
【０２６４】
一方、ステップＳ２４０２で、読み出した制御コードの値が“９”である場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理９を実行し（ステップＳ２４１０）、処理を終了する。
【０２６５】
一方、ステップＳ２４０２で、読み出した制御コードの値が“１０”である場合には、比較部２１５Ｂが、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部２３３Ａから読み出した入力ネットワーク座標とが一致するか否かを判定する（ステップＳ２４１１）。ステップＳ２４１１の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理１０を実行し（ステップＳ２４１２）、処理を終了する。一方、ステップ２４１１の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
【０２６６】
上記に図２４を用いて説明したように、各ユニットは、ユニットのユニット制御部２１６Ｂにより、入力された入力データに含まれる制御コードの値に基づいて、選択的に予め定められた処理を実行する。
【０２６７】
＜第４の実施形態における分配制御部８の動作＞
次に、図２５と図２６とを用いて、第２の基本構成による並列演算装置を自己組織化マップに適応した場合の、並列演算装置の動作について説明する。なお、並列演算装置は分配制御部８と複数のユニットを有するが、分配制御部８が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図２２から図２４を用いて既に説明したので、ここでは、分配制御部８の動作のみについて説明する。
【０２６８】
まず、図２５（ａ）を用いて、自己組織化マップに適応した場合における並列演算装置の分配制御部８の動作について説明する。まず、各ユニットの初期設定をする（ステップＳ２５０１）。この初期設定については、後に図２５（ｂ）を用いて詳述する。
【０２６９】
次に、学習回数変数ｔ＝０、１、２、・・・・Ｔについて、競合学習（ステップＳ２５０３）を繰り返す（ステップＬ２５０２からステップＬ２５０４の学習ループ処理）。ここで、このＴは、競合学習の学習回数である。また、このステップＳ２５０２の競合学習については、後に図２６（a）を用いて詳述する。
【０２７０】
次に、学習した結果を出力する（ステップＳ２５０５）。この出力については、後に図２６（ｃ）を用いて詳述する。
【０２７１】
次に、図２５（ｂ）と、図２６（ａ）から図２６（ｃ）とを用いて、図２５（ａ）の各処理について詳細に説明する。なお、ここでは、図２５（ｂ）と、図２６（ａ）から図２６（ｃ）との処理を、図２０（ａ）の各処理についての関数またはサブルーチンとして説明する。
【０２７２】
最初に、図２５（ｂ）を用いて、図２５（ａ）のステップＳ２５０１の初期設定の処理について説明する。まず、パターン入力ｎを外部から入力する（ステップＳ２５０１０１）。次に、制御コードＡの値を“６”、出力値Ｄの値を入力されたパターン入力ｎとした制御データを、各ユニットに出力する（ステップＳ２５０１０２）。
【０２７３】
次に、ユニットループ変数ｊ＝１、２、・・・Ｎで示されるユニットの順に、次のステップＬ２５０１０４からステップＬ２５０１０６の次元ループとＳ２５０１０７との処理を繰り返す（ステップＬ２５０１０３からステップＬ２５０１０８のユニットループ）。ここで、Ｎは、ユニットの総数の値である。
【０２７４】
このステップＬ２５０１０４からステップＬ２５０１０６の次元ループでは、入力ベクトル次元数ｉ＝１、２、・・・ｎで示される入力ベクトルの次元数の順に、次のステップＳ２５０１０５の処理を繰り返す。このステップＳ２５０１０５では、外部から入力パターンｗｊｉを入力する。ここで、ｎは、入力ベクトルの次元数である。
【０２７５】
また、このステップＳ２５０１０７の処理では、制御コードＡの値を“４”、入力ネットワーク座標Ｂの値をユニットループ変数ｊ、出力値Ｃ（Ｃ１、Ｃ２、・・・Ｃｎ）を入力パターンｗｊｉ（ｗｊ１、ｗｊ２、・・・ｗｊｎ）とした制御データを、各ユニットに出力する。
【０２７６】
上記のステップＬ２５０１０３からステップＬ２５０１０８の処理により、各ユニットに対して、それぞれのユニット内の重み記憶部２３１Ａの結合重みベクトルを初期設定する。
【０２７７】
次に、学習回数変数ｔ＝０、１、２、・・・Ｔについて、ステップＳ２５０１１０の処理を繰り返す（ステップＬ２５０１０９からステップＬ２５０１１１の入力ループ）。このステップＳ２５０１１０では、外部から学習速度η（ｔ）と近傍距離ｄ（ｔ）とを入力し、学習回数変数ｔと関連付けて入力した学習速度η（ｔ）を内部の学習速度記憶部に記憶するとともに、学習回数変数ｔと関連付けて入力した近傍距離ｄ（ｔ）を内部の近傍距離記憶部に記憶する。
次に、後に図２６（ｂ）を用いて説明する最小ノルム判定に用いるダミー変数であるノルム最小値ｄｍｉｎの値を−１に設定し（ステップＳ２５０１１２）、処理を戻す。
【０２７８】
次に、図２６（ａ）を用いて、図２５（ａ）のステップＳ２５０３の競合学習の処理について説明する。まず、制御コードＡの値を“５”、入力学習速度Ｃを内部の学習速度記憶部から読み出した学習速度η（ｔ）、入力近傍距離Ｄを内部の近傍距離記憶部から読み出した近傍距離ｄ（ｔ）とした制御データを各ユニットに出力する（ステップＳ２５０３０１）。
【０２７９】
次に、次元ループ変数ｉ＝１、２、・・・ｎについて、次のステップＳ２５０３０３の処理を繰り返す（ステップＬ２５０３０２からステップＬ２５０３０４の次元ループ）。このステップＳ２５０３０３では、外部からパターン入力ｘｉを入力する。
【０２８０】
次に、制御コードＡの値を“７”、入力ベクトルＣ（Ｃ１、Ｃ２、・・・Ｃｎ）をステップＬ２５０３０２からステップＬ２５０３０４で外部から入力したパターン入力ｘ（ｘ１、ｘ２、・・・ｘｎ）とした制御データを各ユニットに出力する（ステップＳ２５０３０５）。
【０２８１】
次に、ユニットループ数変ｊ＝１、２、・・・Ｎについて、次のステップＳ２５０３０７とステップＳ２５０３０８とステップＳ２５０３０９との処理を繰り返す（ステップＬ２５０３０６からステップＬ２５０３１０のユニットループ）。このステップＳ２５０３０７では、制御コードＡの値を“８”、入力ネットワーク座標Ｂの値をユニットループ変数ｊ、とした制御データを各ユニットに出力する。また、このステップＳ２５０３０８では、ステップＳ２５０３０７で制御コードＡの値を“８”、入力ネットワーク座標Ｂの値をユニットループ数変ｊ、とした制御データに対して、ユニットネットワーク座標が入力ネットワーク座標Ｂであるユニットループ数変ｊに一致するユニットからのノルムの出力を、ノルムｄｎとして入力する。
【０２８２】
また、このステップＳ２５０３０９では、ステップＳ２５０３０８で入力したノルムｄｎに基づいて、最小ノルム判定の処理を実行する。このステップＳ２５０３０９における最小ノルム判定の処理については、後に、図２６（ｂ）を用いて詳細に説明する。
【０２８３】
上記のステップＬ２５０３０６からステップＬ２５０３１０の処理により、各ユニットで算出されたノルムを全てのユニットから順に入力し、ステップＳ２５０３０９の処理にて入力したノルムを順に比較することにより、全てのユニットからのノルムの出力の中から最小となるノルムと、該最小となるノルムを出力したユニットを識別する識別情報であるユニットネットワーク座標をノルム最小ユニットネットワーク座標ｊｍｉｎとして選択する。
【０２８４】
次に、制御コードＡの値を“９”、入力ネットワーク座標Ｂの値をノルム最小ユニットネットワーク座標ｊｍｉｎ、とした制御データを各ユニットに出力する。これにより、各ユニットは、入力されたノルム最小ユニットネットワーク座標ｊｍｉｎに基づいて、近傍となるユニットが学習をする。
【０２８５】
次に、図２６（ｂ）を用いて、図２６（ａ）のステップＳ２５０３０９の最小ノルム判定の処理について説明する。
まず、ステップＳ２５０３０８で入力したノルムｄｎがノルム最小値ｄｍｉｎより小さいか否か、または、ノルム最小値ｄｍｉｎの値が−1であるか否かを判定する（ステップＳ２５０３０９１）。ステップＳ２５０３０９１で判定した結果が、入力したノルムｄｎがノルム最小値ｄｍｉｎより小さい場合、または、ノルム最小値ｄｍｉｎの値が−1である場合には、ノルム最小値ｄｍｉｎを入力したノルムｄｎとするともに、ノルム最小ユニットネットワーク座標ｊｍｉｎをユニットループ変数ｊとし（ステップＳ２５０３０９２）、処理を戻す。
【０２８６】
一方、ステップＳ２５０３０９１で判定した結果が、入力したノルムｄｎがノルム最小値ｄｍｉｎより小さくない場合であって、かつ、ノルム最小値ｄｍｉｎの値が−1でない場合には、処理を戻す。
【０２８７】
次に、図２６（ｃ）を用いて、図２５（ａ）のステップＳ２５０５の出力の処理について説明する。まず、ユニットループ変数ｊ＝０、１、２、・・・Ｎについて、次のステップＳ２５０５０２の処理とステップＬ２５０５０３からステップＬ２５０５０６の次元ループの処理とを繰り返す（ステップＬ２５０５０１からステップＬ２５０５０７のユニットループ）。
【０２８８】
このステップＳ２５０５０２では、制御コードＡの値を“１０”、入力ネットワーク座標Ｂの値をユニットループ変数ｊ、とした制御データを各ユニットに出力する。
【０２８９】
また、このステップＬ２５０５０３からステップＬ２５０５０６の次元ループの処理では、次元ループ変数ｉ＝１、２、・・・ｎについて、次のステップＳ２５０５０４とステップＳ２５０５０５との処理を繰り返す。このステップＳ２５０５０４では、ステップＳ２５０５０２で出力した制御データに応じたユニットからの出力である結合重みベクトルを、結合重みベクトルｗｊｉとして入力する。次に、このステップＳ２５０５０５では、ステップＳ２５０５０４でユニットから入力した結合重みベクトルｗｊｉを外部に出力する。
【０２９０】
以上の、ステップＬ２５０５０１からステップＬ２５０５０７の処理により、まず、各ユニットから順に結合重みベクトルを出力させ（ステップＳ２５０５０２）、次に、ステップＳ２５０５０２に応じて各ユニットが順に出力した結合重みベクトルを順に入力する（ステップＳ２５０５０４）。次に、ステップＳ２５０５０４で各ユニットから順に入力した結合重みベクトルを、順に外部に自己組織化マップの演算結果として出力する（ステップＳ２５０５０５）。
【０２９１】
以上の図２２から図２６を用いて説明した第２の基本構成による自己組織化マップに適応した場合の並列演算装置は、第１の基本構成による自己組織化マップに適応した場合の並列演算装置と同様に、自己組織化マップの演算を実行し、実行した結果を外部に出力することが可能である。
【０２９２】
また、第２の基本構成による自己組織化マップに適応した場合の並列演算装置は、第１の基本構成による自己組織化マップに適応した場合の並列演算装置と比較して、その構成が簡易であるという効果がある。また、入力ベクトルの次元数や学習速度や近傍距離の変更など、自己組織化マップにおける様々な変数の値の設計変更が容易であるという効果がある。
【０２９３】
＜分離構成＞
次に、図２７を用いて、図１４の第２の基本構成による並列演算装置において、各ユニットと分配制御装置８とを、分離構成とした場合の並列演算装置の構成について説明する。
【０２９４】
この図２７の並列演算装置は、図１４の並列演算装置に対して、互いに接続可能な接続部９Ａと接続部９Ｂとを有する。この接続部９Ａと接続部９Ｂとを介して、ユニットＡＵ１からユニットＡＵ１０の全てのユニットと分配制御装置８とは、ユニット出力バス２とユニット入力バス３とにより接続される。例えば、この接続部９Ａと接続部９Ｂとは、互いに嵌合する部材であることが望ましい。
【０２９５】
また、図２７に示すように、互いに接続可能な接続部９Ａと接続部９Ｂとにより、ユニットＡＵ１からユニットＡＵ１０の全てのユニットと接続部９Ｂとを１つの装置（装置Ｂ）とし、分配制御装置８と接続部９Ａとを１つの装置（装置Ａ）とする。
【０２９６】
この場合、例えば、この接続部９Ａと接続部９Ｂとは、ＵＳＢ（Universal Serial Bus）（登録商標）コネクタのメスとオスとし、また、装置ＢをＵＳＢ機器とし、装置Ａをパーソナルコンピュータとしてもよい。以上のように、ユニットと分配制御装置８とを別の装置として構成し、分配制御装置８をパーソナルコンピュータとすることにより、並列演算装置全体の構成がより簡易となり、安価に製造可能となる。
【０２９７】
また、分配制御装置８をパーソナルコンピュータとすることにより、予め定められた制御の手順などを、コンピュータプログラミングすることにより、より簡易に制御の手順が作成可能となる。また、分配制御装置８であるパーソナルコンピュータは、入力手段としてのキーボードや、表示手段または出力手段としてのモニタも有しているため、よりユーザが簡易に並列演算装置を用いることが可能となる。
【０２９８】
なお、接続部９Ａと接続部９ＢとはＵＳＢコネクタに限られるものではなく、他の規格のコネクタでもよいし、または、通信ネットワークのコネクタであってもよい。通信ネットワークのコネクタの場合には、ユニットＡＵ１からユニットＡＵ１０と配制御装置８との間の接続は、接続部９Ａと接続部９Ｂとを介した通信プロトコルを用いた通信接続であってもよいし、接続部９Ａと接続部９Ｂとが、通信プロトコルを制御するようにしてもよい。
【０２９９】
また、装置Ｂを拡張基盤装置として構成し、この拡張基盤装置を、パーソナルコンピュータである分配制御装置８の拡張スロットに接続するようにしてもよい。例えば、拡張基盤装置として構成された装置Ｂが、例えば、ＰＣＩ（Peripheral Component Interconnect）規格またはＰＣＩ−Ｅｘｐｒｅｓｓ規格のバスに準じたボードであってもよい。また、この場合には、装置Ａであるパーソナルコンピュータは、接続部９Ａとして、例えば、ＰＣＩ規格またはＰＣＩ−Ｅｘｐｒｅｓｓ規格に準じた拡張スロットを有するようにしてもよい。
【０３００】
＜第５の実施形態：ユニット間のノルムの比較を高速にする実施形態＞
＜トーナメント方式の原理＞
次に、第５の実施形態として、第２または第４の実施形態における自己組織化マップに適応した並列演算装置において、ユニット間のノルムの比較を高速にする実施形態について説明する。
【０３０１】
第２の実施形態における自己組織化マップに適応した並列演算装置においては、予め定められた順序で、ユニットがトークンとともにノルムを出力し、ノルムを入力したユニットが、入力したノルムとそのユニットが算出したノルムとを比較し、小さい方のノルムを出力する。これを、全てのユニットの間で順に繰り返すことにより、全てのユニットで最小となるノルムを算出していた。そのため、ユニットの数がＮ個（ここで、Ｎは任意の自然数）の場合、ノルムの比較には、（Ｎ−１）回の比較が必要であり、また、（Ｎ−１）回の比較をする時間が必要であった。
【０３０２】
また、第４の実施形態における自己組織化マップに適応した並列演算装置においては、各ユニットが算出したノルムを順に出力し、分配制御装置部が、入力されたノルムを順に比較し、最小のノルムを選択した。この場合、ユニットがノルムを分配制御装置部に順に出力するために、ユニットの数がＮ個の場合、全てのユニットがノルムを出力するには（Ｎ−１）回の出力が必要であり、また、（Ｎ−１）回の出力をする時間が必要であった。また、分配制御装置部における比較においても、分配制御装置部に入力されたユニットを順に比較するため、（Ｎ−１）回の比較が必要であり、また、（Ｎ−１）回の比較をする時間が必要であった。
【０３０３】
第５の実施形態における自己組織化マップに適応した並列演算装置においては、各ユニットが算出したノルムで、最小となるノルムを選択する場合、トーナメント方式を用いることにより、ノルムを比較する時間を、Ｎ回の比較をする時間より低減する。
【０３０４】
ここで、トーナメント方式とは、例えば、図２８に示すように、例えば、ＡとＢとＣとＤとの４つのユニットがある場合、ユニットＡとユニットＢとのノルムを比較するとともに、並列して、ユニットＣとユニットＤとのノルムを比較する。次に、ユニットＡとユニットＢとでノルムが小さかったユニットと、ユニットＣとユニットＤとでノルムが小さかったユニットとで、ノルムを比較する。
【０３０５】
これにより、図２８に示す４個のユニットの場合には、この４個（＝Ｎ）のユニットに対して、第２の実施形態または第４の実施形態のように順に１つずつ比較していく方式では、３回（Ｎ−１）の比較時間が必要であったのに対して、２回の比較時間で、最小となるユニットを選択することが可能となる。
【０３０６】
一般には、図２８に示すように、２個ずつのユニットのノルムを並列に比較するトーナメント方式の場合には、その比較に要する時間はｌｏｇ２（Ｎ）回となり、第２の実施形態または第４の実施形態のように順に１つずつ順にユニットのノルムを比較していく方式の場合に要する（Ｎ−１）回の時間に対して、比較に要する時間を大幅に低減することができる。なお、ユニットの個数Ｎが増大するに従い、トーナメント方式による比較に要する時間はより低減される。例えば、５１２個のユニットの場合には、第２の実施形態または第４の実施形態のように順に１つずつ順にユニットのノルムを比較していく方式では、５１１回の比較時間を要するのに対して、トーナメント方式による比較に要する時間は８回の比較時間を要するのみでよい。
【０３０７】
＜ユニットの配置の第１例＞
次に、図２９を用いて、ユニットを２次元平面に配置した場合に、上記に説明したトーナメント方式により、最小となるユニットを選択する方法について説明する。
ここでは、図２９に示すように、横軸であるＸ軸方向に、ユニットのＸ軸座標が１から１２であり、縦軸であるＹ軸方向に、ユニットのＹ軸座標が１から９の、１０８（＝１２×９）個のユニットが平面上に配置されている場合について説明する。
【０３０８】
ここで、図２９を用いた説明においては、ユニットの表記を簡単にするために、座標を用いてユニットを標記することとし、Ｘ軸の座標がｍでありＹ軸の座標がｎであるユニットＵを、Ｕ（ｍ，ｎ）として表記することにする。例えば、Ｘ軸の座標が５でありＹ軸の座標が３であるユニットＵを、Ｕ（５，３）として表記する。
【０３０９】
また、図２９においては、図中の矢印の順に、ユニット同士のノルムを比較していく。例えば、まず、Ｕ（１，１）が算出したノルムを、Ｕ（１，１）がＵ（１，２）に出力する。次に、Ｕ（１，１）からノルムが入力されたことに応じて、Ｕ（１，２）が、Ｕ（１，２）が算出したノルムと、Ｕ（１，１）から入力したノルムとを比較し、小さい方のノルムを選択する。次に、Ｕ（１，２）が、選択した小さい方のノルムを、Ｕ（１，３）に出力する。
【０３１０】
ここで、Ｕ（１，１）が図中の矢印に従って自ユニットが算出したノルムをＵ（１，２）に出力するのと並列して、Ｕ（２，１）が図中の矢印に従って自ユニットが算出したノルムをＵ（２，２）に出力する。また、Ｕ（１，１）とＵ（２，１）とに並列して、Ｕ（３，１）、Ｕ（４，１）、Ｕ（５，１）なども、並列して、矢印に従ってそれぞれの自ユニットが算出したノルムを出力する
【０３１１】
次に、Ｕ（１，２）が、Ｕ（１，１）からのノルムの入力に応じて、入力されたノルムと自ユニットが算出したノルムとを比較する。また、Ｕ（１，２）が比較しているのと並列して、Ｕ（２，２）も、Ｕ（２，１）からのノルムの入力に応じて、入力されたノルムと自ユニットが算出したノルムとを比較する。また、Ｕ（１，２）とＵ（２，２）とにおける比較に並列して、Ｕ（３，２）、Ｕ（４，２）、Ｕ（５，２）なども、それぞれのユニットが、入力されたノルムと自ユニットが算出したノルムとを比較する。
【０３１２】
図２９のユニットにおいては、矢印に従った順序で、Ｕ（７，６）とＵ（７，８）とから、Ｕ（７，５）に入力される。次に、Ｕ（７，５）で、Ｕ（７，６）とＵ（７，８）とから入力されたノルムと、Ｕ（７，５）が算出したノルムとの中から最小となるノルムと、該ノルムを有するユニット識別情報とを選択する。
以上より、全てのユニットの中で、最小となるノルムの値と、該最小となるノルムを有するユニットとを選択可能となる。
【０３１３】
この図２９においては、矢印に従って、各ノルムが自ユニットに入力されたノルムと自ユニットが算出したノルムとを比較するため、最長となる比較の回数は、例えば、Ｕ（１，１）を比較の開始として、Ｕ（１，２）、Ｕ（１，３）、Ｕ（１，４）、Ｕ（１，５）、Ｕ（５，２）、Ｕ（５，３）、Ｕ（５，４）Ｕ（５，５）、Ｕ（６，４）、Ｕ（６，５）、Ｕ（７，５）の順の１１回分の比較となる。ここで、この各ノルムの比較が並列に実行されるために、この図２９においては、全ノルムにおいて、最小のノルムの比較は、１１回分の比較ですむことになる。よって、比較が並列に実行されるために、非常に少ない回数の比較により、最小のノルムを選択可能となる。
【０３１４】
ここで、図２９に示されるように、複数のユニットは、葉ユニットと、根ユニットと、幹ユニットとに予め分類されている。この葉ユニットとは、複数のユニットがそれぞれ算出したノルムの中から、最小となるノルムを選択するための比較を開始するユニットとして、予め定められた複数のユニットである。また、根ユニットとは、ユニットのそれぞれが算出したノルムの中から選択された最小となるノルムと、該ノルムを有するユニットのユニットネットワーク座標とを分配制御部に出力するユニットとして予め定められた１つのユニットである。また、幹ユニットとは、葉ユニットと根ユニットとを接続する予め定められた複数のユニットである。
【０３１５】
図２９においては、Ｕ（１，１）、Ｕ（２，１）などの葉ユニットは、色が濃くしてある。また、結果を出力するユニットである根ユニットは、図２９ではＵ（７，５）の１つのユニットであり、このユニットも図２９においては色を濃くしてある。また、幹ユニットは、他のユニットであり、図２９では白塗りのユニットとしてある。
【０３１６】
なお、図２９では、葉ユニットが、ほぼ同時のタイミングでユニットの開始のためのノルムを出力し始めた場合、全ての幹ユニット、および、根ユニットには、ほぼ同時となるタイミングでは、１つのユニットのみからノルムが入力されるような順序となるように、矢印に示すような順序が予め定められている。
【０３１７】
例えば、Ｕ（２，５）には、Ｕ（１，５）とＵ（２，４）とからノルムが入力されるが、Ｕ（２，５）にＵ（１，５）からノルムが入力されるタイミングと、Ｕ（２，５）にＵ（２，４）からノルムが入力されるタイミングとは、異なるタイミングとなるように予め設定されている。例えば、Ｕ（１，１）およびＵ（２，１）が、ほぼ同時にノルムを出力してから、Ｕ（１，５）は約４ステップ時間でＵ（２，５）にノルムを出力し、Ｕ（２，４）は約３ステップ時間でＵ（２，５）にノルムを出力する。なお、ここでいうステップ時間とは、あるユニットにノルムが入力されてから、そのユニットが比較した最小となるノルムを出力するまでに要する時間のことである。
【０３１８】
図２９においては、以上のように、幹ユニットまたは根ユニットにおいては、接続されているユニットから、ほぼ同時にノルムが入力されることがないように、予め接続されている。
【０３１９】
＜第５の実施形態における並列演算装置の全体構成＞
次に、図３０と図３１とを用いて、第５の実施形態による並列演算装置の全体構成について説明する。図３０または図３１に示すように、ここでは、ユニットＡＵ１からＡＵ１６の１６個のユニットある場合について説明する。この第５の実施形態による並列演算装置は、図３０の構成に加えて、更に図３１の構成を有する。
【０３２０】
また、以降においては、第５の実施形態による並列演算装置は、図１４から図１６、および、図２２の構成図を用いて説明した第２の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の構成に対して、上記に説明したトーナメント方式による比較を実行する構成を追加するものとして説明する。また、第５の実施形態による並列演算装置の構成またはその構成の動作において、第２の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の構成またはその構成の動作は同一なので、その説明を省略する。また、図３０または図３１において、図１４と構成と同一の構成には同一の符号を付けて、その説明を省略する。
【０３２１】
まず、図３０に示すように、図３０の第５の実施形態による自己組織化マップを演算する並列演算装置は、予め定められた識別情報であるユニットネットワーク座標によりそれぞれが識別される複数のユニット（ＡＵ１からＡＵ１６）と、複数のユニットの中のいずれか１つのユニットが出力する出力値がユニット出力バス２を介して入力されたことに応じて、該入力された入力値と複数のユニットの中から選択したいずれか１つのユニットを選択する識別情報である選択ユニットネットワーク座標とを含む制御データを、複数のユニットのそれぞれにユニット入力バス３を介して出力する分配制御部８と、を有する。この図３０の第５の実施形態による並列演算装置の構成は、図１４の並列演算装置の構成と同様である。
【０３２２】
次に、図３１に示すように、第５の実施形態による自己組織化マップを演算する並列演算装置においては、複数のユニットＡＵ１からＡＵ１６とＡＵ１からＡＵ１６とは、図３０の構成に加えて更に、ノルム比較バス４１とユニットビジーフラグバス４２とを介して予め定められた順序で接続されている。図３１においては、ＡＵ１とＡＵ２とＡＵ３とＡＵ５とが葉ユニットである。また、ＡＵ５から１２、および、ＡＵ１４からＡＵ１６が、幹ユニットである。また、ＡＵ１３が、根ユニットである。この葉ユニットと幹ユニットと根ユニットとは、葉ユニットから根ユニットにノルムの比較結果が、予め定められた順序で送信できるように、該順序で隣接するユニット同士がノルム比較バス４１を介して接続されており、かつ、根ユニット（ＡＵ１３）は分配制御部８にノルム比較バス４１を介して接続されている。
【０３２３】
この順序は、図３１では、葉ユニットから根ユニットまでの順序として、ＡＵ１、ＡＵ５、ＡＵ９、ＡＵ１３の順序で予め定められた第１の順序と、ＡＵ２、ＡＵ６、ＡＵ１０、ＡＵ１４の順序で予め定められた第２の順序と、ＡＵ３、ＡＵ７、ＡＵ１１、ＡＵ１５、ＡＵ１４、ＡＵ１３の順序で予め定められた第３の順序と、ＡＵ４、ＡＵ８、ＡＵ１２、ＡＵ１６、ＡＵ１５、ＡＵ１４、ＡＵ１３の順序で予め定められた第４の順序とがある。
この予め定められた第１の順序、第２の順序、第３の順序、および、第４の順序で、隣接するユニット同士はノルム比較バス４１を介して接続されているとともに、ユニットビジーフラグバス４２を介して接続されている。
【０３２４】
また、図３１では、ＡＵ１とＡＵ２とＡＵ３とＡＵ５とが葉ユニットと、分配制御部８とが、ノルム比較開始信号線４０で接続されている。例えば、分配制御部８が、ノルムの比較を開始することを示す信号を、ノルム比較開始信号線４０を介して、ＡＵ１とＡＵ２とＡＵ３とＡＵ５とである葉ユニットに出力することにより、葉ユニットを開始ユニットとして、第１の順序、第２の順序、第３の順序、および、第４の順序で、ノルムの比較が並列に実行される。そして、各順序の比較結果が、根ユニットであるＡＵ１３に入力され、根ユニットが、全てのユニットのうち、最小となるノルムと該ノルムを有するユニットのユニットネットワーク座標とを選択し、選択したノルムとユニットネットワーク座標とを分配制御部８にノルム比較バス４１を介して出力する。
【０３２５】
なお、上記においては、ＡＵ１とＡＵ２とＡＵ３とＡＵ５とである葉ユニットと、分配制御部８とが、ノルム比較開始信号線４０で接続されており、ノルムの比較を開始することを示す信号を、分配制御部８が葉ユニットへノルム比較開始信号線４０を介して出力するとして説明した。しかし、後述する実施形態においては、ノルム比較開始信号線４０を用いるのではなく、後述する図３２のプロトコル表に示すように、制御コードＡの値が“１１”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを、分配制御部８が葉ユニットへユニット入力バス３を介して出力する。なお、分配制御部８は、制御コードＡの値が“１１”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを、葉ユニットのみではなく全てのユニットへ、ユニット入力バス３を介して出力する。
【０３２６】
なお、図３１においては、並列なノルムの比較順序の原理を説明するために、比較の順序が簡易な接続を用いているが、実際の接続においては、図２９に示すように、根ユニットは、ユニット全体に対して、ほぼ中央となる位置にあり、複数の葉ユニットは、ユニット全体に対して、ほぼ外周となる位置にあることが望ましい。根ユニットはユニット全体に対してほぼ中央となる位置にあり、複数の葉ユニットはユニット全体に対してほぼ外周となる位置にあることにより、葉ユニットから根ユニットまでの根ユニットの数、つまり、ノルムの比較の回数を低減することが可能なため、より高速にノルムの比較が出来るという効果を奏する。
【０３２７】
＜第５の実施形態におけるユニットの構成の概要＞
次に、上記において、図３０と図３１とを用いて説明した第５の実施形態におけるユニットの構成の概要について説明する。
まず、図２２を用いて説明したように、複数のユニットのそれぞれは、分配制御部８から入力された制御データに基づいて自ユニットが算出したノルムを記憶するユニットノルム記憶部２３６Ａと、自ユニットのユニットネットワーク座標を記憶するユニットネットワーク座標記憶部２３４Ａと、を有している。
【０３２８】
また、葉ユニットが葉ノルム情報出力部を有する。この葉ノルム情報出力部は、複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始することを示す信号を分配制御部８から入力されたことに応じて、自ユニットのユニットノルム記憶部２３６Ａから読み出したノルムと自ユニットのユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とを、自ユニットが接続される後段ユニットへノルム比較バス４１を介して出力する。
【０３２９】
また、幹ユニットまたは根ユニットは、勝者ノルム情報記憶部と、ノルム情報入力部と、勝者ノルム情報設定部と、ノルム情報出力部とを有する。
勝者ノルム情報記憶部は、自ユニットに入力されたノルムと自ユニットのユニットノルム記憶部に記憶されたノルムとにおいて最小であるノルムと、該ノルムを有するユニットを識別するユニットネットワーク座標とを関連付けて勝者ノルム情報として記憶する。
ノルム情報入力部は、ノルムを比較する順序において葉ユニットに近い方のユニットであり隣接するユニットである前段ユニットから、ノルムとユニットネットワーク座標とを関連付けてノルム情報としてノルム比較バスを介して入力する。
【０３３０】
勝者ノルム情報設定部は、ノルム情報入力部にノルム情報が入力されたことに応じて、ノルム情報入力部に入力されたノルムと、自ユニットの勝者ノルム情報記憶部または自ユニットのユニットノルム記憶部から読み出したノルムとを比較し、最小となるノルムと該ノルムと関連付けられたユニットネットワーク座標とを関連付けて勝者ノルム情報として勝者ノルム情報記憶部に設定して記憶する。
ノルム情報出力部は、勝者ノルム情報記憶部から読み出した勝者ノルム情報を、ノルムを比較する順序で根ユニットに近い方のユニットであり隣接するユニットである後段ユニットへノルム比較バスを介して出力する。
【０３３１】
また、幹ユニットまたは根ユニットには、複数の幹ユニットまたは複数の葉ユニットが前段ユニットとして予め接続されており、幹ユニットまたは根ユニットのそれぞれは、前段接続数記憶部と、入力回数記憶部と、前段接続数比較部とを有する。
前段接続数記憶部には、自ユニットに接続される前段ユニットの総数である前段接続数が予め記憶されている。入力回数記憶部には、ノルム情報入力部にノルムとユニットネットワーク座標とが入力される毎に、入力回数をカウントアップして記憶する。前段接続数比較部は、前段接続数記憶部から読み出した前段接続数と、入力回数記憶部から読み出した入力回数とを比較する。
また、ノルム情報出力部が、接続数比較部の比較結果が、前段接続数と入力回数とが一致した場合に、勝者ノルム情報記憶部から読み出した勝者ノルム情報を出力する。
【０３３２】
また、幹ユニットまたは根ユニットのそれぞれが、ノルムとユニットネットワーク座標とを、自ユニットの前段ユニットから入力可能であるか否かを示すユニットビジーフラグ情報を記憶するユニットビジーフラグ記憶部を有している。また、ユニットのそれぞれが、自ユニットの後段ユニットが有するユニットビジーフラグ記憶部から出力されたユニットビジーフラグ情報に基づいて、該後段ユニットにノルムとユニットネットワーク座標とを出力するか否かを判定するビジーフラグ判定部を有する。また、自ユニットのノルム情報出力部は、自ユニットのビジーフラグ判定部の判定結果に基づいて、勝者ノルム情報記憶部から読み出した勝者ノルム情報を出力する。
【０３３３】
また、ノルム情報入力部は、ノルム情報が入力されたことに応じて、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能でないことを示すように設定する。また、接続数比較部は、比較結果が前段接続数と入力回数とが一致しない場合に、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能であることを示すように設定する。
【０３３４】
また、幹ユニットまたは根ユニットのそれぞれが、ユニット制御部を有する。このユニット制御部は、複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始することを示す信号を分配制御部から入力されたことに応じて、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能であることを示すように設定する。
また、接続数比較部は、比較結果が前段接続数と入力回数とが一致した場合に、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能でないことを示すように設定する。
【０３３５】
＜第５の実施形態における制御データのプロトコル＞
次に、図３２を用いて、第５の実施形態における制御データの一例としてのプロトコルについて説明する。なお、図３２に示す制御データのプロトコルは、図２３に示した制御データのプロトコルにおいて、制御コードＡの値が“１１”が追加されている。制御コードＡの値が４から１０の制御データのプロトコルについては、図３２に示す制御データのプロトコルと図２３に示す制御データのプロトコルとは同様であるため、その説明を省略する。
【０３３６】
＜選択処理１１＞
制御データに含まれる制御コードＡの値が“１１”であり、“勝者ユニット決定アルゴリズムの開始の合図”、つまり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す場合には、この制御データは、この制御コードＡの値が“１１”の制御コードＡのみを含んでいる。この制御コードＡの値が“１１”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを受信したユニットにおいて、葉ユニット（開始ユニット）は、後段ユニットに自ユニットノルムと自ユニットネットワーク座標とを出力して渡す。また、それ以外のユニットである根ユニットと幹ユニットとは、前段からの入力と比較して、決定された勝者ユニットノルムとそのユニットネット座標とを後段へ出力して渡す。
【０３３７】
この制御コードＡの値が“１１”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを受信したユニットにおいて、葉ユニット、および、根ユニットと幹ユニットとの構成とその動作については、図３３から図３６を用いて後述する。
【０３３８】
＜葉ユニットの構成＞
次に、図３３を用いて、第５の実施形態における葉ユニットの構成について説明する。なお、第５の実施形態における葉ユニットは、図２２の第４の実施形態におけるユニットの構成を全て有している。ここでは、図２２の第４の実施形態におけるユニットの構成に対して、追加された第５の実施形態における葉ユニットの構成について説明する。なお、図３３の第５の実施形態におけるユニットの構成において、図２２の第４の実施形態におけるユニットの構成と同一の構成については、同一の符号を付けその説明を省略する。
【０３３９】
葉ユニットは、ユニット制御部２１６Ｂと、ビジーフラグ判定部２６１と、ノルム情報出力部２６２と、を有する。なお、他の構成については、その説明を省略する。なお、図３３において、ビジーフラグ記憶部２６０は、後段ユニットが有する構成である。
【０３４０】
なお、この葉ユニットの構成は、上記の「第５の実施形態におけるユニットの構成の概要」において説明した構成において、以下の構成同士が、それぞれ対応する。まず、ノルム情報出力部２６２が、葉ノルム情報出力部に対応する。また、ユニット制御部２１６Ｂがユニット制御部に対応する。また、ビジーフラグ判定部２６１がビジーフラグ判定部に対応する。
【０３４１】
次に、各構成について説明する。ユニット制御部２１６Ｂは、制御コードの値が“１１”の制御コードを受信した場合には、制御コードの値が“１１”の処理を実行することを示す信号をビジーフラグ判定部２６１に出力する。
【０３４２】
ビジーフラグ判定部２６１は、制御コードの値が“１１”の処理を実行することを示す信号をユニット制御部２１６Ｂから入力されたことに応じて、後段ユニットのビジーフラグ記憶部２６０からユニットビジーフラグバス４２を介してビジーフラグを後段ビジーフラグとして読み出して判定し、判定した結果をノルム情報出力部２６２に出力する。
【０３４３】
ノルム情報出力部２６２は、ビジーフラグ判定部２６１から入力された判定結果が、後段ビジーフラグが立っていないことを示す場合には、ユニットノルム記憶部２３６Ａから読み出したユニットノルムと、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス４１を介して出力する。
【０３４４】
＜幹ユニットまたは根ユニットの構成＞
次に、図３４を用いて、第５の実施形態における幹ユニットまたは根ユニットの構成について説明する。なお、図３３を用いて説明した第５の実施形態における葉ユニットの構成の説明と同様に、図２２の第４の実施形態におけるユニットの構成に対して、変更または追加される構成についてのみ説明する。また、図３４の第５の実施形態におけるユニットの構成において、図２２の第４の実施形態におけるユニットの構成と同一の構成については、同一の符号を付けその説明を省略する。
【０３４５】
幹ユニットまたは根ユニットは、ビジーフラグ記憶部２６０と、ビジーフラグ判定部２６１と、ノルム情報出力部２６２と、ノルム情報入力部２６３と、入力ノルム抽出部２７０と、入力ノルム記憶部２７１と、入力ネットワーク座標抽出部２７２と、入力ネットワーク座標記憶部２７３と、勝者ノルム判定部２７４と、勝者ノルム・勝者ネットワーク座標セット部２７５と、勝者ノルム記憶部２７６と、勝者ネットワーク座標記憶部２７７と、前段接続数比較部２７８と、前段接続数記憶部２７９と、前段接続数カウンタ部２８０と、前段接続数カウンタリセット部２８１と、ユニットビジーフラグセット部２８２と、を有する。
【０３４６】
なお、この幹ユニットまたは根ユニットの構成は、上記の「第５の実施形態におけるユニットの構成の概要」において説明した構成において、以下の構成同士が、それぞれ対応する。まず、ビジーフラグ記憶部２６０がユニットビジーフラグ記憶部に対応する。また、ビジーフラグ判定部２６１がビジーフラグ判定部に対応する。また、ノルム情報出力部２６２がノルム情報出力部に対応する。また、ノルム情報入力部２６３がノルム情報入力部に対応する。また、入力ノルム抽出部２７０と入力ノルム記憶部２７１と入力ネットワーク座標抽出部２７２と入力ネットワーク座標記憶部２７３と勝者ノルム判定部２７４と勝者ノルム・勝者ネットワーク座標セット部２７５とが、勝者ノルム情報設定部に対応する。また、勝者ノルム記憶部２７６と勝者ネットワーク座標記憶部２７７とが、勝者ノルム情報記憶部に対応する。また、前段接続数比較部２７８と前段接続数カウンタリセット部２８１とユニットビジーフラグセット部２８２とが、前段接続数比較部に対応する。また、前段接続数記憶部２７９が前段接続数記憶部に対応する。また、前段接続数カウンタ部２８０が入力回数記憶部に対応する。
【０３４７】
次に、各構成について説明する。ユニット制御部２１６Ｂは、制御コードの値が“１１”の制御コードを受信した場合には、制御コードの値が“１１”の処理を実行することを示す信号を勝者ノルム・ネットワーク座標初期セット部２８４に出力する。また、ユニット制御部２１６Ｂは、制御コードの値が“１１”の制御コードを受信した場合には、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットする。
【０３４８】
勝者ノルム・ネットワーク座標初期セット部２８４は、制御コードの値が“１１”の処理を実行することを示す信号をユニット制御部２１６Ｂから受信したことに応じて、ユニットノルム記憶部２３６Ａから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする。
【０３４９】
ノルム情報入力部２６３は、ノルム情報が前段ユニットからノルム比較バス４１を介して入力されたことに応じて、ユニットビジーフラグ記憶部２６０のビジーフラグをセットし、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）をカウントアップし、また、入力したノルム情報を入力ノルム抽出部２７０と入力ネットワーク座標抽出部２７２とに出力する。
【０３５０】
入力ノルム抽出部２７０は、ノルム情報がノルム情報入力部２６３から入力されたことに応じて、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして入力ノルム記憶部２７１に記憶する。入力ネットワーク座標抽出部２７２は、ノルム情報がノルム情報入力部２６３から入力されたことに応じて、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２７３に記憶する。
【０３５１】
勝者ノルム判定部２７４は、抽出したノルムを入力ノルム抽出部２７０が入力ノルム記憶部２７１に記憶したことに応じて、入力ノルム記憶部２７１から読み出した入力ノルムと、勝者ノルム記憶部２７６から読み出した勝者ノルムとを比較し、比較した結果を勝者情報として、勝者ノルム・勝者ネットワーク座標セット部２７５に出力する。
【０３５２】
勝者ノルム・勝者ネットワーク座標セット部２７５は、勝者ノルム判定部２７４から入力した勝者情報が、入力ノルムが勝者ノルムより小さいことを示す場合には、入力ノルム記憶部２７１から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、入力ネットワーク座標記憶部２７３から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする。
【０３５３】
また、勝者ノルム・勝者ネットワーク座標セット部２７５は、勝者ノルム判定部２７４から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部２７５の処理が終了したことに応じて、勝者ノルム判定部２７４から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部２７５の処理が終了したことを示す信号を前段接続数比較部２７８に出力する。
【０３５４】
前段接続数記憶部２７９には、自ユニットが接続される前段ユニットの総数である前段接続数の値（ｉｎ）が、予め記憶されている。前段接続数比較部２７８は、勝者ノルム判定部２７４から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部２７５の処理が終了したことを示す信号を入力することに応じて、前段接続数カウンタ部から読み出した前段接続数カウンタの値（ｔ）と、前段接続数記憶部２７９から読み出した前段接続数の値（ｉｎ）とを、比較する。また、前段接続数比較部２７８は、比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致しない場合には、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットする。
【０３５５】
前段接続数カウンタリセット部２８１は、前段接続数比較部２７８の比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致することに応じて、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）を０にリセットする。ユニットビジーフラグセット部２８２は、前段接続数カウンタリセット部２８１が前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）を０にリセットしたことに応じて、ユニットビジーフラグ記憶部２６０のユニットビジーフラグをセットする。
【０３５６】
ビジーフラグ判定部２６１は、ユニットビジーフラグセット部２８２がユニットビジーフラグ記憶部２６０のユニットビジーフラグをセットしたことに応じて、後段ユニットのビジーフラグ記憶部２６０からユニットビジーフラグバス４２を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定し、判定結果をノルム情報出力部２６２に出力する。
【０３５７】
ノルム情報出力部２６２は、ビジーフラグ判定部２６１から入力した判定結果が、後段ビジーフラグが立っていないことを示すことに応じて、勝者ノルム記憶部２７６から読み出した勝者ノルムと、勝者ネットワーク座標記憶部２７７から読み出した勝者ネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス４１を介して出力する。また、ノルム情報出力部２６２は、ビジーフラグ判定部２６１から入力した判定結果が、後段ビジーフラグが立っていないことを示すことに応じて、勝者ノルム記憶部２７６に予め定められた負値の値であるノルムを記憶することによりリセットするとともに、勝者ネットワーク座標記憶部２７７に記憶されている勝者ネットワーク座標をリセットする。
【０３５８】
＜第５の実施形態におけるユニットの動作＞
次に、図３５を用いて、図３２で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部２１６Ｂの動作について説明する。なお、説明の簡略のために、以降においては制御コードＡの値を用いて説明する。
【０３５９】
なお、この図３５の第５の実施形態におけるユニット制御部２１６Ｂの動作において、図２４の第４の実施形態におけるユニット制御部２１６Ｂの動作と同一の動作については、同一のステップ番号を付け、その説明を省略する。ここでは、図３５の第５の実施形態におけるユニット制御部２１６Ｂの動作において、図２４の第４の実施形態におけるユニット制御部２１６Ｂの動作と異なる動作についてのみ説明する。
【０３６０】
ステップＳ２４０２で、読み出した制御コードの値が“１１”である場合には、ユニット制御部２１６Ｂは、上記に説明した選択処理１１を実行し（ステップＳ２４１３）、処理を終了する。つまり、図３５の第５の実施形態におけるユニット制御部２１６Ｂの動作には、図２４の第４の実施形態におけるユニット制御部２１６Ｂの動作に対して、ステップＳ２４０２の次に、読み出した制御コードの値が“１１”である場合の動作であるステップＳ２４１３が追加されている点が異なる。
【０３６１】
次に、図３６を用いて第５の実施形態におけるユニットの動作について説明する。なお、葉ユニットと、幹ユニットまたは根ユニットとでは、図３３と図３４とを用いて示したように、ユニットの構成が異なるので、葉ユニットと、幹ユニットまたは根ユニットとに分けて、ユニットの動作について説明する。
【０３６２】
＜葉ユニットの動作＞
まず、図３６（ａ）を用いて、葉ユニットの動作を説明する。
ユニット制御部２１６Ｂが、制御コードの値が“１１”の処理を実行することを判定した場合には、まず、ビジーフラグ判定部２６１が、後段ユニットのビジーフラグ記憶部２６０からユニットビジーフラグバス４２を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定する（ステップＳ３６０１）。ステップＳ３６０１の判定結果が、後段ビジーフラグが立っている場合には、後段ビジーフラグが立つまでステップＳ３６０１からの処理を繰り返す。
【０３６３】
一方、ステップＳ３６０１の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部２６２が、ユニットノルム記憶部２３６Ａから読み出したユニットノルムと、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス４１を介して出力し（ステップＳ３６１０２）、処理を戻す。
【０３６４】
＜幹ユニットまたは根ユニットの動作＞
次に、図３６（ｂ）を用いて、幹ユニットまたは根ユニットの動作を説明する。
ユニット制御部２１６Ｂが、制御コードの値が“１１”の処理を実行することを判定した場合には、ユニット制御部２１６Ｂが、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットする。次に、制御コードの値が“１１”の処理を実行することを判定したことに応じて、勝者ノルム・ネットワーク座標初期セット部２８４が、ユニットノルム記憶部２３６Ａから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする（ステップＳ３６２０１）。その後、ノルム情報入力部２６３が、ノルム情報が前段ユニットから入力されるのを待機する。
【０３６５】
次に、ノルム情報入力部２６３に、ノルム情報が前段ユニットからノルム比較バス４１を介して入力したことに応じて（ステップＳ３６２０２）、ノルム情報入力部２６３が、ユニットビジーフラグ記憶部２６０のビジーフラグをセットする。また、ノルム情報入力部２６３が、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）をカウントアップする（ステップＳ３６２０３）とともに、ノルム情報入力部２６３が、入力したノルム情報を入力ノルム抽出部２７０と入力ネットワーク座標抽出部２７２に出力する。
【０３６６】
次に、ノルム情報が入力された入力ノルム抽出部２７０が、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして入力ノルム記憶部２７１に記憶する。また、ノルム情報が入力された入力ネットワーク座標抽出部２７２が、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部２７３に記憶する。
【０３６７】
次に、入力ノルム抽出部２７０が抽出したノルムを入力ノルム記憶部２７１に記憶したことに応じて、勝者ノルム判定部２７４が、入力ノルム記憶部２７１から読み出した入力ノルムと、勝者ノルム記憶部２７６から読み出した勝者ノルムとを、比較する（ステップＳ３６２０４）。
【０３６８】
ステップＳ３６２０４で比較した結果が、入力ノルムが勝者ノルムより小さい場合には、勝者ノルム・勝者ネットワーク座標セット部２７５が、入力ノルム記憶部２７１から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、入力ネットワーク座標記憶部２７３から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする（ステップＳ３６２０５）。
【０３６９】
一方、ステップＳ３６２０４で比較した結果が、入力ノルムが勝者ノルムより小さくない場合には、または、ステップＳ３６２０５の次には、つまり、勝者ノルム判定部２７４から入力した比較結果である勝者情報を入力したことによる処理を勝者ノルム・勝者ネットワーク座標セット部２７５が実行したことに応じて、前段接続数比較部２７８が、前段接続数カウンタ部から読み出した前段接続数カウンタの値（ｔ）と、前段接続数記憶部２７９から読み出した前段接続数の値（ｉｎ）とを、比較する（ステップＳ３６２０６）。
【０３７０】
ステップＳ３６２０６で比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致しない場合には、前段接続数比較部２７８が、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットし、ステップＳ３６２０２からの処理を繰り返させる。一方、ステップＳ３６２０６で比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致する場合には、前段接続数カウンタリセット部２８１が、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）を０にリセットする（ステップＳ３６２０７）。
【０３７１】
次に、ユニットビジーフラグセット部２８２が、ユニットビジーフラグ記憶部２６０のユニットビジーフラグをセットする。次に、ビジーフラグ判定部２６１が、後段ユニットのビジーフラグ記憶部２６０からユニットビジーフラグバス４２を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定する（ステップＳ３６２０１）。ステップＳ３６２０８の判定結果が、後段ビジーフラグが立っている場合には、後段ビジーフラグが立つまで、ステップＳ３６２０８からの処理を繰り返す。
【０３７２】
一方、ステップＳ３６２０８の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部２６２が、勝者ノルム記憶部２７６から読み出した勝者ノルムと、勝者ネットワーク座標記憶部２７７から読み出した勝者ネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス４１を介して出力し（ステップＳ３６２０９）、処理を戻す。また、ステップＳ３６２０８の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部２６２が、勝者ノルム記憶部２７６に予め定められた負値の値であるノルムを記憶することによりリセットするとともに、勝者ネットワーク座標記憶部２７７に記憶されている勝者ネットワーク座標をリセットする。
【０３７３】
＜第５の実施形態における並列演算装置の動作（分配制御部８の動作）＞
次に、図３７を用いて、第５の実施形態における並列演算装置の動作、つまり、第２の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の動作について説明する。なお、ここでは、図２２から図２６を用いて説明した第４の実施形態における並列演算装置の動作について、追加または変更される部分のみについて説明する。
【０３７４】
図２６の分配制御部８の動作から図３７の分配制御部８の動作について、変更される動作のステップは、図２６（ａ）を用いて説明した競合学習の処理であり、より詳細には、図２６の分配制御部８のステップＳ２５０３０６からステップＳ２５０３１０が、図３７の分配制御部８のステップＳ２５０３１２からステップＳ２５０３１３に、変更される。
【０３７５】
このステップＳ２５０３１２で、分配制御部８は、制御コードＡの値を“１１”とした制御データを各ユニットに出力する。次に、ステップＳ２５０３１３で、分配制御部８は、根ユニットがノルム比較バス４１を介して出力したノルム情報に含まれるユニットネットワーク座標を、ノルム最小ユニットネットワーク座標ｊｍｉｎとして入力する。
【０３７６】
第４の実施形態による分配制御部８は、ステップＳ２５０３０６からステップＳ２５０３１０により、分配制御部８が、全てのユニットから順にノルムを入力して、分配制御部８が、入力された全てのユニットの中からノルムが最小となるノルムのユニットネットワーク座標を選択していたのに対して、第５の実施形態による分配制御部８は、制御コードＡの値を“１１”とした制御データを各ユニットに出力し、根ユニットから出力されるユニットネットワーク座標を入力するだけでよい。
従って、第４の実施形態による分配制御部８での処理に対して第５の実施形態による分配制御部８での処理は簡易となるとともに、ノルムの比較が各ユニットにより並列的に実行されるために、比較が早くなるという効果を奏する。
【０３７７】
＜ユニットの配置の第２例＞
次に、図３８を用いて、ユニットを２次元平面に配置した場合に、上記に説明したトーナメント方式により、最小となるユニットを選択する方法の第２例目について説明する。この図３８において、根ユニットはＵ（７，５）であり、葉ユニットは、色を付けてあるユニットであり、幹ユニットは無地のユニットであり、また、比較の順序は、図中の矢印に沿って順に実行される。図３８におけるユニットにおけるノルムの比較は、図２９におけるユニットにおけるノルムの比較と、ほぼ同様である。
【０３７８】
ただし、図２９を用いて説明したユニットの配置と比較の順序においては、１つのユニットに対して、ほぼ同時となるタイミングではノルムが入力されないように、比較の順序が予め設定されていた。これに対して、図３８に例示するユニットの配置と比較の順序においては、１つのユニットに対して、ほぼ同時のタイミングで、ノルムが入力されるユニットもあるようにして、比較の順序が予め設定されている。
【０３７９】
一般に、１つのユニットに対して、ほぼ同時のタイミングでノルムが入力されることも可能とすることにより、比較の順序の回数が少なくなるような順序を設定することが可能となるために、ユニット全体でノルムを比較するのに要する時間を短縮することが可能である。
【０３８０】
＜ユニットの構成の変更点＞
ほぼ同時のタイミングでノルムが入力されることも可能とするために、図３３から図３７を用いて説明した葉ユニット、または、幹ユニットと根ユニットにおいて、ユニットの構成において変更される構成と、その動作についてのみ説明する。
まず、葉ユニットの構成においては、変更点はなく、同一である。また、葉ユニットの動作は、図３９（ａ）に示すように、図３６（ａ）と同一である。
【０３８１】
次に、幹ユニットまたは根ユニットにおいては、入力されるノルム情報を、前段接続数カウンタの値（ｔ）と関連付けて記憶しておき、前段接続数カウンタの値（ｔ）に基いて、順に読み出して比較することにより、ほぼ同時のタイミングでノルムが入力されることも可能とする。
【０３８２】
幹ユニットまたは根ユニットの構成において、変更がある構成のみについて説明する。入力ノルム抽出部２７０は、ノルム情報がノルム情報入力部２６３から入力されたことに応じて、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）と関連付けて、入力ノルム記憶部２７１に記憶する。
【０３８３】
入力ネットワーク座標抽出部２７２は、ノルム情報がノルム情報入力部２６３から入力されたことに応じて、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）と関連付けて、入力ネットワーク座標として入力ネットワーク座標記憶部２７３に記憶する。
【０３８４】
勝者ノルム判定部２７４は、抽出したノルムを入力ノルム抽出部２７０が入力ノルム記憶部２７１に記憶したことに応じて、または、前段接続数比較部２７８の比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致しないことに応じて、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）に該当する入力ノルムを入力ノルム記憶部２７１から読み出し、該読み出した入力ノルムと、勝者ノルム記憶部２７６から読み出した勝者ノルムとを比較し、比較した結果を勝者情報として、勝者ノルム・勝者ネットワーク座標セット部２７５に出力する。
【０３８５】
＜幹ユニットまたは根ユニットの動作の変更点＞
次に、図３９（ｂ）を用いて、幹ユニットまたは根ユニットの動作を説明する。なお、図３６（ｂ）のステップＳ３６２０１からステップＳ３６２０９と、図３９（ｂ）のステップＳ３９２０１からステップＳ３９２０９とが、それぞれ対応する。ここでは、図３６（ｂ）のステップの処理と、図３９（ｂ）のステップの処理とにおいて、異なる処理を中心に説明する。
【０３８６】
ユニット制御部２１６Ｂが、制御コードの値が“１１”の処理を実行することを判定した場合には、ユニット制御部２１６Ｂが、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットする。次に、制御コードの値が“１１”の処理を実行することを判定したことに応じて、勝者ノルム・ネットワーク座標初期セット部２８４が、ユニットノルム記憶部２３６Ａから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、ユニットネットワーク座標記憶部２３４Ａから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする（ステップＳ３９２０１）。その後、ノルム情報入力部２６３が、ノルム情報が前段ユニットから入力されるのを待機する。
【０３８７】
次に、ノルム情報入力部２６３に、ノルム情報が前段ユニットからノルム比較バス４１を介して入力したことに応じて（ステップＳ３９２０２）、ノルム情報入力部２６３が、ユニットビジーフラグ記憶部２６０のビジーフラグをセットする。また、ノルム情報入力部２６３が、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）をカウントアップする（ステップＳ３９２０３）とともに、ノルム情報入力部２６３が、入力したノルム情報を入力ノルム抽出部２７０と入力ネットワーク座標抽出部２７２に出力する。
【０３８８】
次に、ノルム情報が入力された入力ノルム抽出部２７０が、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）と関連付けて、入力ノルム記憶部２７１に記憶する。また、ノルム情報が入力された入力ネットワーク座標抽出部２７２が、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）と関連付けて、入力ネットワーク座標記憶部２７３に記憶する。
【０３８９】
次に、入力ノルム抽出部２７０が抽出したノルムを入力ノルム記憶部２７１に記憶したことに応じて、勝者ノルム判定部２７４が、前段接続数カウンタ部２８０から読み出した前段接続数カウンタの値（ｔ）に該当する入力ノルムを入力ノルム記憶部２７１から読み出し、該読み出した入力ノルムと、勝者ノルム記憶部２７６から読み出した勝者ノルムとを、比較する（ステップＳ３９２０４）。
【０３９０】
ステップＳ３９２０４で比較した結果が、入力ノルムが勝者ノルムより小さい場合には、勝者ノルム・勝者ネットワーク座標セット部２７５が、入力ノルム記憶部２７１から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部２７６に記憶してセットするとともに、入力ネットワーク座標記憶部２７３から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部２７７に記憶してセットする（ステップＳ３９２０５）。
【０３９１】
一方、ステップＳ３９２０４で比較した結果が、入力ノルムが勝者ノルムより小さくない場合には、または、ステップＳ３９２０５の次には、つまり、勝者ノルム判定部２７４から入力した比較結果である勝者情報を入力したことによる処理を勝者ノルム・勝者ネットワーク座標セット部２７５が実行したことに応じて、前段接続数比較部２７８が、前段接続数カウンタ部から読み出した前段接続数カウンタの値（ｔ）と、前段接続数記憶部２７９から読み出した前段接続数の値（ｉｎ）とを、比較する（ステップＳ３９２０６）。
【０３９２】
ステップＳ３９２０６で比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致しない場合には、前段接続数比較部２７８が、ユニットビジーフラグ記憶部２６０のビジーフラグをリセットし、ステップＳ３９２０３からの処理を繰り返させる。一方、ステップＳ３９２０６で比較した結果が、前段接続数カウンタの値（ｔ）と前段接続数の値（ｉｎ）とが一致する場合には、前段接続数カウンタリセット部２８１が、前段接続数カウンタ部２８０に記憶されている前段接続数カウンタの値（ｔ）を０にリセットする（ステップＳ３９２０７）。
【０３９３】
以降の処理においては、図３６（ｂ）のステップの処理と、図３９（ｂ）のステップの処理とは、同一であるため、その説明を省略する。
【０３９４】
＜第６の実施形態：逆誤差伝播＞
次に、第３の実施形態として説明した第２の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるようにする場合の構成を、第６の実施形態として説明する。
【０３９５】
まず、逆誤差伝播について説明する。一般に、ニューラルネットワークはニューロンの結合形態により分類され、フィードバック結合を持たない階層型ニューラルネットワーク、フィードバック結合を有するリカレント型ニューラルネットワークに分類することができる。
【０３９６】
ここでは、フィードバック結合を持たない階層型ニューラルネットワークが教師あり学習を行う場合について例を挙げて説明する。ニューラルネットワークが順方向に信号を出力する際、ユニットは結合している１つ前のユニットから入力を受け、ユニット間の結合係数を参照し積和計算を行い、出力関数の出力を結合している次の層のユニットへ送る。これを繰り返し、最終的に出力層が演算結果を出力する。このとき、与えた入力に対し所望の出力を得るには、適切な結合係数を設定する必要がある。しかしながら、この適切な結合係数は自明でないことが多い。
【０３９７】
逆誤差伝播（バックプロパゲーション）法は、教師データを与えることで階層型ニューラルネットワークの結合係数を適切な値へと学習させる教師あり学習アルゴリズムのひとつである。中間層の結合係数を修正しようとするとき、与えられた教師データと出力すべき値との誤差を直ちに求めることは難しい。そのため、与えられた教師データに基いて、教師データと算出した出力値との誤差を、出力層から入力層への向きに順々に計算し、出力の誤差を前段の層へと次々に伝えていく。これを実現するアルゴリズムが逆誤差伝播法である。
【０３９８】
ここで、この逆誤差伝播法を用いた階層型ニューラルネットワークのアルゴリズムの概要を説明する。まず、次のステップＣ１からステップＣ２により、順方向伝播を演算する。
【０３９９】
（ステップＣ１）ニューラルネットワークの入力層（第１層）に学習のための入力パターンを入力する。
（ステップＣ２）次に、入力層から出力層までの各層のユニットの状態を次の式１から式３に基いて演算する（ｌ＝１，２，・・・，Ｌ＋１）。詳細には、現在与えられている結合係数を用い積和計算を、次の式１により演算する。次に、この式１により演算した積和計算の結果に基いて、ニューラルネットワークの出力を、次の式２により算出する。なお、この結合係数とは、結合荷重に相当する。
【０４００】
【数１】
0004513865.tif 000002
【０４０１】
なお、式１から式３において、Ｎ（ｌ）はｌ層のユニットの数であり、ｘ（ｌ）ｐｉはｌ層ｉ番目のユニットの出力である。また、ｓ（ｌ＋１）ｐｊは、（ｌ＋１）層ｊ番目のユニットの内部状態である。また、ｗ（ｌ）ｊｉは、ｌ層ｉ番目のユニットから（ｌ＋１）層ｊ番目のユニットへの結合係数である。また、ｆ（ｌ）ｊは、ｌ層ｉ番目のユニットにおける非線形な出力関数である。なお、添え字ｐは、入力パターンに対応して提示された教師パターンの番号、Ｉ、Ｏはそれぞれ入力ユニット、出力ユニットの集合、Ｈはそれら以外のユニットの集合を示す。
【０４０２】
次に、逆誤差伝播（バックプロパゲーション）を演算する。逆誤差伝播の演算として、まず、次のステップＣ３からステップＣ５により、出力層から隠れ層への演算し、出力層（Ｌ＋２層目）に向かう結合係数を修正する。
【０４０３】
（ステップＣ３）ステップＣ１とステップＣ２とにより順方向伝播させた際において、入力パターンに対して、期待している出力値（教師データ）を入力し、実際の出力値との差を算出する。
（ステップＣ４）教師データと出力値との差（出力値の誤差）が、前段のユニットの出力値に結合係数を掛けた値（積和値＝出力層ユニットへの入力）により発生したと考え、出力値の誤差とユニットの出力関数および実際の入力値を用いて積和値の誤差（局所誤差）を、次の式４により逆算する。
【０４０４】
【数２】
0004513865.tif 000003
【０４０５】
（ステップＣ５）学習速度を考慮し、積和値の誤差を減少させるように各々の結合係数を、次の式５と式６とにより修正する。
【０４０６】
【数３】
0004513865.tif 000004
【０４０７】
ここで、ｄｐｊは、ｐ番目に提示された入力パターンに対応する教師パターンである。また、ηは学習係数である。
【０４０８】
次に、逆誤差伝播の演算として、次のステップＣ６からステップＣ８により、Ｌ＋１層目である隠れ層から、１層目である入力層へ、順次結合係数を修正する演算を実行する。
【０４０９】
（ステップＣ６）ステップＣ４と同様に積和値の誤差（局所誤差）を、次の式７により逆算する。
【０４１０】
【数４】
0004513865.tif 000005
【０４１１】
なお、ステップＣ６において、ステップＣ４との相違点は、出力層では１つのユニットについて１つの出力値の誤差情報を逆算して前段に伝えるのに対し、隠れ層では１つのユニットについて複数の誤差情報（結合関係のある後段のユニットが複数であることに起因する）を合算したものを隠れ層ユニットの出力値の誤差情報として用い、逆算するところにある。
（ステップＣ７）学習速度を考慮し、積和値の誤差を減少させるように各々の結合係数を、次の式８と式９とにより修正する。
【０４１２】
【数５】
0004513865.tif 000006
【０４１３】
（ステップＣ８）隠れ層が複数である場合は、層をひとつ前段に移してステップＣ６からの処理を繰り返す。
【０４１４】
（ステップＣ９）ニューラルネットワークに学習のための入力層への入力パターンを変更し、ステップＣ１からの処理を繰り返す。ここで、学習のための入力パターンを全て出力した後は、次の式１０により誤差測度を演算する。
【０４１５】
【数６】
0004513865.tif 000007
【０４１６】
この演算した誤差測度が、予め定められた一定の値以下であれば、逆誤差伝播法を用いた学習アルゴリズムを終了する。一方、この演算した誤差測度が、予め定められた一定の値以下でなければ、学習のための入力パターンを、再度入力し、ステップＣ１からの処理を繰り返す。
【０４１７】
なお、上記に説明したステップＣ１からステップＣ２の処理については、第１の実施形態または第３の実施形態により処理が実行される。第６の実施形態においては、ステップＣ１からステップＣ２の処理を実行する第３の実施形態の構成に加えて、ステップＣ３からステップＣ８の処理を実行する構成を有する。
【０４１８】
なお、以降においては、第６の実施形態による並列演算装置に、１つのパターンデータを入力し、その後、該１つのパターンデータに対応する期待値である教師データを入力し、該教師データに基いて、結合係数を１回のみ修正する場合について説明する。
【０４１９】
＜第６の実施形態におけるユニットの構成＞
次に、図４０を用いて、第６の実施形態におけるユニットの構成を説明する。この図４０の第６の実施形態におけるユニットの構成は、図１７を用いて説明した第３の実施形態のユニットの構成、つまり、第２の基本構成による並列演算装置に階層型ニューラルネットワークに適応した場合のユニットの構成を有し、更に、逆誤差伝播を実行するための構成を有する。
【０４２０】
また、第６の実施形態によるユニットにおいて、図１７を用いて説明したユニットの構成とその動作については、同様であるため、その説明を省略する。以降においては、第６の実施形態によるユニットにおいて、逆誤差伝播を実行するための構成とその動作について説明する。また、全てのユニットの構成とその動作は、同一であるため、以降においては、１つのユニットの構成と動作のみについて説明する。
【０４２１】
ユニットは、図４０に示すように、ユニット制御部１１６Ｂから入力された教師データと、ユニット出力記憶部１３５Ａに記憶された出力値との誤差を算出し、該算出した誤差に基いて、出力層から入力層の順に重み記憶部１３０に記憶されている結合荷重を変更する学習部１９０を有する。この学習部１９０は、学習係数記憶部１７０と、逆誤差伝播用積和計算一次値記憶部１７１と、逆誤差伝播用関数記憶部１７２と、教師データ記憶部１７３と、逆誤差伝播用換算値記憶部１７４と、第１逆誤差伝播用換算値算出部１８０と、第１結合係数更新部１８１と、逆誤差伝播用積和計算一次値算出部１８２と、第２逆誤差伝播用換算値算出部１８３と、第２結合係数更新部１８４とを有する。
【０４２２】
次に、学習部１９０が有する各構成の概要について説明する。学習係数記憶部１７０には、逆誤差伝播の演算における学習において用いられる係数である学習係数が記憶される。この学習係数とは、上記ステップＣ５での式５、または、ステップＣ７での式８で用いる学習係数ηに相当する。逆誤差伝播用積和計算一次値記憶部１７１には、逆誤差伝播の演算において用いられる一時的な値である逆誤差伝播用積和計算一次値が記憶される。この逆誤差伝播用積和計算一次値とは、上記ステップＣ６での式７における和記号Σにより積和される項である。
【０４２３】
逆誤差伝播用関数記憶部１７２には、逆誤差伝播の演算において用いられる逆誤差伝播用関数が、層情報と関連付けて予め記憶される。この逆誤差伝播用関数とは、上記のステップＣ４での式４、または、ステップＣ６での式７で用いる関数ｇに相当する。この逆誤差伝播用関数である関数ｇは、例えば、出力関数ｆの微分関数である。
【０４２４】
教師データ記憶部１７３には、入力パターンに対する教師データが記憶される。この教師データとは、上記ステップＣ５でのｐ番目に提示された入力パターンｄｐｊに相当する。逆誤差伝播用換算値記憶部１７４には、逆誤差伝播用換算値が記憶される。この逆誤差伝播用換算値とは、上記ステップＣ４での式４で算出されるδに相当する。
【０４２５】
第１逆誤差伝播用換算値算出部１８０は、上記のステップＣ４での式４に基いた演算を実行することにより第１逆誤差伝播用換算値（式４のδｐｊ（Ｌ＋２））を算出し、該算出した第１逆誤差伝播用換算値を逆誤差伝播用換算値記憶部１７４に記憶するとともに、データ出力部１０４Ａを介して分配制御部８に出力する。第１結合係数更新部１８１は、上記のステップＣ５での式６と式７とに基いた演算を実行することにより、重み記憶部１３０に記憶されている結合荷重を修正して更新する。
【０４２６】
逆誤差伝播用積和計算一次値算出部１８２は、上記のステップＣ５での式７に基いた演算を実行することにより、式７のΣにより積和する項である逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部１７１に記憶する。第２逆誤差伝播用換算値算出部１８３は、上記のステップＣ６での式７に基いた演算を実行することにより、逆誤差伝播用換算値を算出し、該算出した逆誤差伝播用換算値を逆誤差伝播用換算値記憶部１７４に記憶する。
【０４２７】
第２結合係数更新部１８４は、上記のステップＣ７での式８と式９とに基いた演算を実行することにより、重み記憶部１３０に記憶されている結合荷重を修正して更新する。
【０４２８】
この第１逆誤差伝播用換算値算出部１８０と、第１結合係数更新部１８１と、逆誤差伝播用積和計算一次値算出部１８２と、第２逆誤差伝播用換算値算出部１８３と、第２結合係数更新部１８４とについては、図４１のプロトコル表と図４２から図５２とを用いて、制御コードＡの値毎に詳細に説明する。なお、ユニット制御部２１６Ｂは、入力される制御コードＡの値に基づいて、図１９（または図２４や図３５）を用いて説明したように、予め定められた処理を実行する。
【０４２９】
＜選択処理１１１＞
まず、図４１のプロトコル表と図４２とを用いて、制御コードＡの値が“１１１”の場合について説明する。制御データに含まれる制御コードＡの値が“１１１”であり、“学習係数を設定する”ことを示す場合には、この制御データは、学習係数Ｈを含んでいる。
この制御コードＡの値が“１１１”であり、“学習係数を設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部１１６Ｂが、制御データに含まれている学習係数Ｈを、学習係数記憶部１７０に記憶して設定する。
【０４３０】
＜選択処理１１２＞
次に、図４１のプロトコル表と図４３とを用いて、制御コードＡの値が“１１２”の場合について説明する。制御データに含まれる制御コードＡの値が“１１２”であり、“逆誤差伝播用積和計算一次値の値を０に初期化する”ことを示す場合には、この制御データは、制御コードＡのみを含んでいる。この制御コードＡの値が“１１２”であり、“逆誤差伝播用積和計算一次値の値を０に初期化する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部１１６Ｂが、逆誤差伝播用積和計算一次値記憶部１７１に記憶されている逆誤差伝播用積和計算一次値の値を０に初期化する。
【０４３１】
＜選択処理１１３＞
次に、図４１のプロトコル表と図４４とを用いて、制御コードＡの値が“１１３”の場合について説明する。制御データに含まれる制御コードＡの値が“１１３”であり、“局所誤差を算出する”ことを示す場合には、この制御データは、選択ユニット番号Ｂと層インデックスＬａと、該層インデックスＬａと選択ユニット番号Ｂとで識別される出力層におけるユニットが出力すべき値であった教師データＤとを含んでいる。この制御コードＡの値が“１１３”であり、“局所誤差を算出する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Ｂと自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉとが一致する場合には、ユニットの第１逆誤差伝播用換算値算出部１８０が、教師データＤに基いて、層インデックスＬａに基いた層に該当する第１逆誤差伝播用換算値を算出し、該算出した第１逆誤差伝播用換算値を分配制御部８にデータ出力部１０４Ａを介して出力する。
【０４３２】
具体的には、まず、比較部１１５Ｂが、制御データに含まれる選択ユニット番号と固有ユニット番号記憶部１４０Ｂから読み出した固有ユニット番号とが一致するか否かを判定する。なお、比較部１１５Ｂは、ユニット制御部１１６Ｂが、制御データから抽出した選択ユニット番号を選択ユニット番号記憶部１４１Ｂに記憶したことに応じて、選択ユニット番号記憶部１４１Ｂから選択ユニット番号を読み出し、該読み出した選択ユニット番号と、固有ユニット番号記憶部１４０Ｂから読み出した固有ユニット番号とが一致するか否かを判定する。
【０４３３】
次に、比較部１１５Ｂの判定結果が一致する場合には、ユニット制御部１１６Ｂが、制御データから抽出した教師データＤを教師データ記憶部１７３に記憶し、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶するとともに、第１逆誤差伝播用換算値算出部１８０の処理を選択的に実行させる。
【０４３４】
次に、第１逆誤差伝播用換算値算出部１８０が、上記のステップＣ４での式４に基いた演算を実行することにより第１逆誤差伝播用換算値を算出し、該算出した第１逆誤差伝播用換算値を、逆誤差伝播用換算値記憶部１７４に記憶するとともに、分配制御部８にデータ出力部１０４Ａを介して出力する。
【０４３５】
この第１逆誤差伝播用換算値算出部１８０の処理を詳細に説明すると、まず、第１逆誤差伝播用換算値算出部１８０は、層情報記憶部１３３から読み出した層インデックスＬａと固有ユニット番号記憶部１４０Ｂから読み出した固有ユニット番号Ｉとに基いて、層インデックスＬａに２を加算した層情報と固有ユニット番号Ｉとに該当する出力値（式４のｙｐｊ（Ｌ＋２）の項）をユニット出力記憶部１３５Ａから読み出し、該読み出した出力値と、教師データ記憶部１７３から読み出した教師データ（式４のｄｐｊの項）との差である誤差（式４の（ｙｐｊ（Ｌ＋２）−ｄｐｊ）の項）を算出する。次に、第１逆誤差伝播用換算値算出部１８０は、層インデックスＬａに２を加算した層情報と固有ユニット番号Ｉとに該当する積和計算一次値情報（式４のｓｐｊ（Ｌ＋２）の項）を積和計算一次値記憶部１３１から読み出すとともに、層インデックスＬａに２を加算した層情報に該当する逆誤差伝播用関数（式４のｇｊ（Ｌ＋２）の項）を逆誤差伝播用関数記憶部１７２から読み出し、読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入する。次に、第１逆誤差伝播用換算値算出部１８０は、この積和計算一次値情報を逆誤差伝播用関数に代入して算出した値に、上記で算出した誤差を乗じることにより、第１逆誤差伝播用換算値（式４のδｐｊ（Ｌ＋２）の項）を算出する。次に、第１逆誤差伝播用換算値算出部１８０は、該算出した第１逆誤差伝播用換算値を、層インデックスＬａに２を加算した層情報と固有ユニット番号Ｉとに関連付けて、逆誤差伝播用換算値記憶部１７４に記憶するとともに、分配制御部８にデータ出力部１０４Ａを介して出力する。
【０４３６】
＜選択処理１１４＞
次に、図４１のプロトコル表と図４５とを用いて、制御コードＡの値が“１１４”の場合について説明する。制御データに含まれる制御コードＡの値が“１１４”であり、“結合係数を修正する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δとユニット情報Ｊと層インデックスＬａとを含んでいる。この制御コードＡの値が“１１４”であり、“結合係数を修正する”ことを示す制御データを受信した全てのユニットは、ユニットの第１結合係数更新部１８１が、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する重み記憶部１３０に記憶されている結合荷重を、逆誤差伝播用換算値Δに基いて更新して修正する。なお、この逆誤差伝播用換算値Δとは、先に選択処理１１３で説明した第１逆誤差伝播用換算値（式４のδｐｊ（Ｌ＋２）の項）である。
【０４３７】
具体的には、ユニット制御部１１６Ｂが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスＬａとユニット情報Ｊとに関連付けて、逆誤差伝播用換算値記憶部１７４に記憶し、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶し、制御データから抽出したユニット情報Ｊを前段ユニット番号記憶部１３９Ｂに記憶するとともに、第１結合係数更新部１８１の処理を選択的に実行させる。
【０４３８】
次に、第１結合係数更新部１８１が、逆誤差伝播用換算値Δに基いて、上記のステップＣ５での式５と式６とに基いた演算を実行することにより、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する重み記憶部１３０に記憶されている結合荷重を更新して修正する。
【０４３９】
この第１結合係数更新部１８１の処理を詳細に説明すると、まず、第１結合係数更新部１８１は、層情報記憶部１３３から読み出した層インデックスＬａと固有ユニット番号記憶部１４０Ｂから読み出した固有ユニット番号Ｉとに基いて、層インデックスＬａに１を加算した層情報と固有ユニット番号Ｉとに該当する出力値（式５のｘｐｊ（Ｌ＋１）の項）をユニット出力記憶部１３５Ａから読み出す。また、第１結合係数更新部１８１は、層インデックスＬａに２を加算した層情報と固有ユニット番号Ｉとに該当する第１逆誤差伝播用換算値を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部１７４から読み出す。また、第１結合係数更新部１８１は、学習係数を学習係数記憶部１７０から読み出す。
【０４４０】
次に、第１結合係数更新部１８１は、読み出した出力値（式５のｘｐｊ（Ｌ＋１）の項）と、読み出した逆誤差伝播用換算値Δ（式５のδｐｊ（Ｌ＋２）の項）と、読み出した学習係数（式５のηの項）とを乗じ、更に、数値−１を乗じて式５の演算を実行することにより、学習係数更新値（式５のΔｐｗｊｉ（Ｌ＋１）の項）を算出する。次に、第１結合係数更新部１８１は、層インデックスＬａに１を加算した層情報と固有ユニット番号Ｉとユニット情報Ｊとに該当する結合荷重（式６のｗｊｉ（Ｌ＋１）ＯＬＤの項）を重み記憶部１３０から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値（式５または式６のΔｐｗｊｉ（Ｌ＋１）の項）を加算することにより、新しい結合荷重（式６のｗｊｉ（Ｌ＋１）ＮＥＷの項）を算出する。次に、第１結合係数更新部１８１は、該算出した新しい結合荷重を、層インデックスＬａに１を加算した層情報と固有ユニット番号Ｉとユニット情報Ｊとに関連付けて重み記憶部１３０に記憶することにより、結合荷重を更新する。
【０４４１】
＜選択処理１１５＞
次に、図４１のプロトコル表と図４６とを用いて、制御コードＡの値が“１１５”の場合について説明する。制御データに含まれる制御コードＡの値が“１１５”であり、“結合係数を取得する”ことを示す場合には、この制御データは、選択ユニット番号Ｂとユニット情報Ｊと層インデックスＬａとを含んでいる。この制御コードＡの値が“１１５”であり、“結合係数を取得する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Ｂと自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉとが一致する場合には、ユニットのユニット制御部１１６Ｂが、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する結合荷重を重み記憶部１３０から読み出し、該読み出した結合荷重を、分配制御部８にデータ出力部１０４Ａを介して出力する。ただし、この結合荷重であるＷｊｉの添え字ｉは、自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉのことである。
【０４４２】
＜選択処理１１６＞
次に、図４１のプロトコル表と図４７とを用いて、制御コードＡの値が“１１６”の場合について説明する。制御データに含まれる制御コードＡの値が“１１６”であり、“結合係数を更新する”ことを示す場合には、この制御データは、選択ユニット番号Ｂと更新結合荷重Ｗと層インデックスＬａとユニット情報Ｅとを含んでいる。この制御コードＡの値が“１１６”であり、“結合係数を更新する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Ｂと自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉとが一致する場合には、ユニットのユニット制御部１１６Ｂが、制御データに含まれる層インデックスＬａと、ユニット情報Ｅと、固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉとに該当する重み記憶部１３０に記憶してある結合荷重ｗｊｉ（Ｌａ）を、更新結合荷重Ｗに更新する。
【０４４３】
なお、この更新結合荷重Ｗとは、選択処理１１５で、ユニットが出力した結合荷重である。また、この結合荷重であるＷｊｉの添え字ｊは、自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉのことである。
【０４４４】
＜選択処理１１７＞
次に、図４１のプロトコル表と図４８とを用いて、制御コードＡの値が“１１７”の場合について説明する。制御データに含まれる制御コードＡの値が“１１７”であり、“誤差情報を積和計算する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δと層インデックスＬａとユニット情報Ｋとを含んでいる。この制御コードＡの値が“１１７”であり、“誤差情報を積和計算する”ことを示す制御データを受信した全てのユニットは、ユニットの逆誤差伝播用積和計算一次値算出部１８２が、制御データに含まれる逆誤差伝播用換算値Δと層インデックスＬａとユニット情報Ｋとに基づいて、上記式７のΣの中のδｐｋ（ｌ＋２）ｗｋｊ（ｌ＋１）の項である逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部１７１に加算して記憶する。
【０４４５】
具体的には、ユニット制御部１１６Ｂが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスＬａと、固有ユニット情報記憶部１４０Ｂから読み出した固有ユニット情報Ｉと関連付けて、逆誤差伝播用換算値記憶部１７４に記憶する。また、ユニット制御部１１６Ｂが、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶し、制御データから抽出したユニット情報Ｋを前段ユニット番号記憶部１３９Ｂに記憶するとともに、逆誤差伝播用積和計算一次値算出部１８２の処理を選択的に実行させる。
【０４４６】
次に、逆誤差伝播用積和計算一次値算出部１８２は、層情報記憶部１３３から読み出した層インデックスｌと、前段ユニット番号記憶部１３９Ｂから読み出したユニット情報ｊとに基づいて、重み記憶部１３８Ｂから読み出した結合荷重ｗｋｊ（ｌ＋１）と、逆誤差伝播用換算値記憶部１７４から読み出した逆誤差伝播用換算値δｐｋ（ｌ＋２）とを乗じて逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を、層インデックスｌ＋２に基いて、逆誤差伝播用積和計算一次値記憶部１７１に加算して記憶する。
【０４４７】
＜選択処理１１８＞
次に、図４１のプロトコル表と図４９とを用いて、制御コードＡの値が“１１８”の場合について説明する。制御データに含まれる制御コードＡの値が“１１８”であり、“前段からの入力と結合係数との積和値の誤差を逆算する”ことを示す場合には、この制御データは、層インデックスＬａを含んでいる。この制御コードＡの値が“１１８”であり、“前段からの入力と結合係数との積和値の誤差を逆算する”ことを示す制御データを受信した全てのユニットは、ユニットの第２逆誤差伝播用換算値算出部１８３が、制御データに含まれる層インデックスＬａに基いて、上記式７のδｐｊ（ｌ＋１）の項である第２逆誤差伝播用換算値を算出し、該算出した第２逆誤差伝播用換算値を層インデックスＬａ＋１と関連付けて逆誤差伝播用換算値記憶部１７４に記憶する。ただし、式７における添え字ｊは、この場合、自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉのことである。
【０４４８】
具体的には、まず、比較部１１５Ｂが、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶するとともに、第２逆誤差伝播用換算値算出部１８３の処理を選択的に実行させる。
【０４４９】
次に、第２逆誤差伝播用換算値算出部１８３が、上記のステップＣ６での式７に基いた演算を実行することにより第２逆誤差伝播用換算値を算出し、該算出した第２逆誤差伝播用換算値を、逆誤差伝播用換算値記憶部１７４に記憶する。
【０４５０】
この第２逆誤差伝播用換算値算出部１８３の処理を詳細に説明すると、まず、第２逆誤差伝播用換算値算出部１８３は、層情報記憶部１３３から読み出した層インデックスｌに基いて、層インデックスｌに１を加算した層情報に該当する積和計算一次値情報（式７のｓｐｊ（ｌ＋１）の項）を積和計算一次値記憶部１３１から読み出すとともに、層インデックスｌに１を加算した層情報に該当する逆誤差伝播用関数（式７のｇｊ（ｌ＋１）の関数）を逆誤差伝播用関数記憶部１７２から読み出し、読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入する。次に、第２逆誤差伝播用換算値算出部１８３は、層インデックスｌに２を加算した層情報に該当する逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部１７１から読み出し、該読み出した逆誤差伝播用積和計算一次値と、前記読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入した値とを乗じて、第２逆誤差伝播用換算値（式７のδｐｊ（ｌ＋１）の項）を算出し、該算出した第２逆誤差伝播用換算値を、層インデックスｌに１を加算した層情報と関連付けて、逆誤差伝播用換算値記憶部１７４に記憶する。
【０４５１】
＜選択処理１１９＞
次に、図４１のプロトコル表と図５０とを用いて、制御コードＡの値が“１１９”の場合について説明する。制御データに含まれる制御コードＡの値が“１１９”であり、“第２逆誤差伝播用換算値を出力する”ことを示す場合には、この制御データは、選択ユニット番号Ｂと層インデックスＬａとを含んでいる。この制御コードＡの値が“１１９”であり、“第２逆誤差伝播用換算値を出力する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Ｂと自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉとが一致する場合には、ユニットの制御部１１６ｂが、制御データに含まれている選択ユニット番号Ｂと層インデックスＬａとに基いて逆誤差伝播用換算値記憶部１７４から読み出した第２逆誤差伝播用換算値を分配制御部８にデータ出力部１０４Ａを介して出力する。ただし、この場合、ユニットの制御部１１６ｂは、逆誤差伝播用換算値記憶部１７４から読み出す第２逆誤差伝播用換算値δｐｊにおける、添え字ｊが、自ユニットの固有ユニット番号記憶部１４０Ｂに記憶されている固有ユニット番号Ｉに対応する第２逆誤差伝播用換算値を読み出す。
【０４５２】
＜選択処理１２０＞
次に、図４１のプロトコル表と図５１と図５２とを用いて、制御コードＡの値が“１２０”の場合について説明する。制御データに含まれる制御コードＡの値が“１２０”であり、“結合係数を修正する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δとユニット情報Ｊと層インデックスＬａとを含んでいる。この制御コードＡの値が“１１４”であり、“結合係数を修正する”ことを示す制御データを受信した全てのユニットは、ユニットの第２結合係数更新部１８４が、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する重み記憶部１３０に記憶されている結合荷重を、逆誤差伝播用換算値Δに基いて更新して修正する。なお、この逆誤差伝播用換算値Δとは、先に選択処理１１９で説明した第２逆誤差伝播用換算値（式７のδｐｊ（ｌ＋２）の項）である。
【０４５３】
なお、この第２結合係数更新部１８４は、入力された層インデックスＬａの値が１でない場合には、図５１に示すように、出力値（式８のｘｐｊ（ｌ）の項）をユニット出力記憶部１３５Ａから読み出し、該読み出した出力値に基づいて、重み記憶部１３０に記憶されている結合荷重を更新する。また、この第２結合係数更新部１８４は、入力された層インデックスＬａの値が１である場合には、図５２に示すように、出力値（式８のｘｐｊ（ｌ）の項）を前段ユニット出力記憶部１３８Ｂから読み出し、該読み出した出力値に基づいて、重み記憶部１３０に記憶されている結合荷重を更新する。
【０４５４】
なお、第２結合係数更新部１８４は、層インデックスＬａの値が１であるか否かにより、出力値（式８のｘｐｊ（ｌ）の項）を、前段ユニット出力記憶部１３８Ｂまたはユニット出力記憶部１３５Ａから読み出す。その他の処理については、上記で選択処理１１４において説明したユニット制御部１１６Ｂと第１結合係数更新部１８１と、この選択処理１２０におけるユニット制御部１１６Ｂと第２結合係数更新部１８４とは、同様である。
【０４５５】
次に、図５１を用いて、制御コードＡの値が“１２０”の場合であって、入力された層インデックスＬａの値が１でない場合、つまり、中間層に関する結合荷重の更新の場合について、具体的に説明する。まず、ユニット制御部１１６Ｂが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスＬａと制御データから抽出したユニット情報Ｊとに関連付けて、逆誤差伝播用換算値記憶部１７４に記憶する。また、ユニット制御部１１６Ｂが、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶し、制御データから抽出したユニット情報Ｊを前段ユニット番号記憶部１３９Ｂに記憶するとともに、第２結合係数更新部１８４の処理を選択的に実行させる。
【０４５６】
次に、第２結合係数更新部１８４が、逆誤差伝播用換算値Δに基いて、上記のステップＣ７での式８と式９とに基いた演算を実行することにより、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する重み記憶部１３０に記憶されている結合荷重を更新して修正する。
【０４５７】
この第２結合係数更新部１８４の処理を詳細に説明すると、まず、第２結合係数更新部１８４は、層情報記憶部１３３から読み出した層インデックスｌと前段ユニット番号記憶部１３９Ｂから読み出したユニット情報ｊとに基いて、層インデックスｌとユニット情報ｊとに該当する出力値（式８のｘｐｉ（ｌ）の項）をユニット出力記憶部１３５Ａから読み出す。また、第２結合係数更新部１８４は、層インデックスｌに１を加算した層情報と前段ユニット番号記憶部１３９Ｂから読み出したユニット情報ｊとに該当する逆誤差伝播用換算値（式８のδｐｉ（ｌ＋１）の項）を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部１７４から読み出す。また、第２結合係数更新部１８４は、学習係数を学習係数記憶部１７０から読み出す。
【０４５８】
次に、第２結合係数更新部１８４は、読み出した出力値（式８のｘｐｉ（ｌ）の項）と、読み出した逆誤差伝播用換算値Δ（式８のδｐｉ（ｌ＋１）の項）と、読み出した学習係数（式８のηの項）とを乗じ、更に、数値−１を乗じて式８の演算を実行することにより、学習係数更新値（式８のΔｐｗｊｉ（ｌ）の項）を算出する。次に、第２結合係数更新部１８４は、層インデックスｌと固有ユニット番号Ｉとユニット情報Ｊとに該当する結合荷重（式９のｗｊｉ（ｌ）ＯＬＤの項）を重み記憶部１３０から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値（式８のΔｐｗｊｉ（ｌ）の項）を加算することにより、新しい結合荷重（式８のｗｊｉ（ｌ）ＮＥＷの項）を算出する。次に、第１結合係数更新部１８１は、該算出した新しい結合荷重を、層インデックスｌと固有ユニット番号Ｉとユニット情報ｊとに関連付けて重み記憶部１３０に記憶することにより、結合荷重を更新する。
【０４５９】
次に、図５２を用いて、制御コードＡの値が“１２０”の場合であって、入力された層インデックスＬａの値が１である場合、つまり、入力層に関する結合荷重の更新の場合について、具体的に説明する。まず、ユニット制御部１１６Ｂが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスＬａと制御データから抽出したユニット情報Ｊとに関連付けて、逆誤差伝播用換算値記憶部１７４に記憶する。また、ユニット制御部１１６Ｂが、制御データから抽出した層インデックスＬａを層情報記憶部１３３に記憶し、制御データから抽出したユニット情報Ｊを前段ユニット番号記憶部１３９Ｂに記憶するとともに、第２結合係数更新部１８４の処理を選択的に実行させる。
【０４６０】
次に、第２結合係数更新部１８４が、逆誤差伝播用換算値Δに基いて、上記のステップＣ７での式８と式９とに基いた演算を実行することにより、制御データに含まれるユニット情報Ｊと層インデックスＬａとに該当する重み記憶部１３０に記憶されている結合荷重を更新して修正する。
【０４６１】
この第２結合係数更新部１８４の処理を詳細に説明すると、まず、第２結合係数更新部１８４は、層情報記憶部１３３から読み出した層インデックスｌと前段ユニット番号記憶部１３９Ｂから読み出したユニット情報ｊとに基いて、層インデックスｌとユニット情報ｊとに該当する出力値（式８のｘｐｉ（ｌ）の項）を前段ユニット出力記憶部１３８Ｂからから読み出す。また、第２結合係数更新部１８４は、層インデックスｌに１を加算した層情報と前段ユニット番号記憶部１３９Ｂから読み出したユニット情報ｊとに該当する逆誤差伝播用換算値（式８のδｐｉ（ｌ＋１）の項）を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部１７４から読み出す。また、第２結合係数更新部１８４は、学習係数を学習係数記憶部１７０から読み出す。
【０４６２】
次に、第２結合係数更新部１８４は、読み出した出力値（式８のｘｐｉ（ｌ）の項）と、読み出した逆誤差伝播用換算値Δ（式８のδｐｉ（ｌ＋１）の項）と、読み出した学習係数（式８のηの項）とを乗じ、更に、数値−１を乗じて式８の演算を実行することにより、学習係数更新値（式８のΔｐｗｊｉ（ｌ）の項）を算出する。次に、第２結合係数更新部１８４は、層インデックスｌと固有ユニット番号Ｉとユニット情報Ｊとに該当する結合荷重（式９のｗｊｉ（ｌ）ＯＬＤの項）を重み記憶部１３０から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値（式８のΔｐｗｊｉ（ｌ）の項）を加算することにより、新しい結合荷重（式８のｗｊｉ（ｌ）ＮＥＷの項）を算出する。次に、第１結合係数更新部１８１は、該算出した新しい結合荷重を、層インデックスｌと固有ユニット番号Ｉとユニット情報ｊとに関連付けて重み記憶部１３０に記憶することにより、結合荷重を更新する。
【０４６３】
なお、第３の実施形態において説明した＜選択処理１＞において、つまり順方向の演算において、制御コードＡの値が１である制御データを受信した全てのユニットのユニット制御部１１６Ｂが、制御コードから抽出した出力値Ｃを、前段ユニット出力記憶部１３８Ｂに記憶している。入力層に関する結合荷重の更新の場合において、第２結合係数更新部１８４は、この前段ユニット出力記憶部１３８Ｂに記憶されている出力値Ｃ、つまり、入力データを用いて、重み記憶部１３０に記憶されている結合荷重を更新する。
【０４６４】
つまり、前段ユニット出力記憶部１３８Ｂには、入力層としての自ユニットに入力された入力パターンを記憶されている。そして、第２結合係数更新部１８４は、入力層に関する重み記憶部１３０に記憶されている結合荷重を更新する場合には、ユニット出力記憶部１３５Ａから読み出した出力値に替えて、前段ユニット出力記憶部１３８Ｂから読み出した入力パターンに基づいて、重み記憶部１３０に記憶されている結合荷重を更新する。
【０４６５】
よって、入力パターンを記憶しておき、この記憶した入力パターンに基づいて、中間層からその１つ前の層である出力層に対する結合荷重を更新することが出来ることにより、再度入力パターンを入力することなく、階層型ニューラルネットワークにおいて、入力層に関して学習することが出来るという効果を奏する。
【０４６６】
＜第５の実施形態における分配制御部８の動作＞
次に、図５３と図５４とを用いて、第２の基本構成による並列演算装置を階層型ニューラルネットワークに適応した場合の分配制御部８の動作について説明する。なお、分配制御部８が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図４０から図５２を用いて既に説明したので、ここでは、分配制御部８の動作のみについて説明する。なお、ここでも図６の階層型ニューラルネットワークに、第２の基本構成による並列演算装置を適応した場合について説明する。
【０４６７】
なお、この図５３と図５４との分配制御部８の処理は、図２０と図２１とを用いて説明した分配制御部８の処理の後に、実行されるものである。つまり、入力層から出力層への順方向の処理が終了した後、出力層から入力層への逆方向の処理である学習が行われる。ここで、図２０と図２１とにおける順方向の処理が既に実行されているので、各ユニットのユニット出力記憶部１３５Ａには、演算結果である出力値が記憶されている。また、ここでは、ユニット出力算出部１１２Ａが、ユニット出力記憶部１３５Ａに、層情報とユニット識別情報と関連付けて出力値が記憶されているものとして説明する。
【０４６８】
まず、図５３（ａ）を用いて、分配制御部８の動作概要について説明する。まず、初期設定をする（ステップＳ５３１）。次に、カウンタ変数ｊの値を１から、２、３、・・・Ｎ（Ｌ＋２）まで順次増加させながら、次のステップＳ５３３の処理を繰り返す（ステップＳ５３１〜ステップＳ５３４のループ処理）。このＮ（Ｌ＋２）は、層識別情報の値がＬ＋２である層のノード数の値、つまり、出力層Ｌ３のノード数の値である。例えば、図６の階層型ニューラルネットワークにおいては、この入力層Ｌ１のノード数の値は３である。また、カウンタ変数ｊは、（Ｌ＋２）層におけるユニットを識別するために用いられる変数である。
【０４６９】
このステップＳ５３３では、カウンタ変数ｊに基いて、出力層のユニットが、順に、出力層へ向かう結合定数を修正する。
【０４７０】
次に、カウンタ値ｌの値をＬから、Ｌ−１、・・・１まで順次減少させながら、つまり、層変数が出力層から入力層へ順に入力層になるまで、隠れ層の分だけ、次のステップＳ５３６の処理を、繰り返す（ステップＳ５３５〜ステップＳ５３７のループ処理）。このステップＳ５３６では、隠れ層へ向かう結合定数を修正する。このカウンタ値ｌは、層を識別するために用いられる変数である。
【０４７１】
次に、図５３（ｂ）と図５３（ｃ）、および、図５４とを用いて、図５３（ａ）のステップＳ５３１、ステップＳ５３３、および、ステップＳ５３６の処理について、詳細に説明する。
【０４７２】
まず、図５３（ｂ）を用いて、図５３（ａ）のステップＳ５３１について説明する。まず、制御コードＡの値を“１１１”とし、学習係数Ｈの値をηとした制御データを、各ユニットに出力する（ステップＳ５３１１）。次に、制御コードＡの値を“１１１”とした制御データを、各ユニットに出力し（ステップＳ５３１２）、処理を戻す。なお、この学習係数Ｈの値であるηは、予め定められた値でもよいし、学習の回数に応じて、または、学習測度に応じて、値を変更するようにしてもよい。
【０４７３】
次に、図５３（ｃ）を用いて、図５３（ａ）のステップＳ５３３について説明する。まず、制御コードＡの値を“１１３”とし、選択ユニット番号Ｂの値をカウンタ変数ｊとし、層インデックスＬａの値を１とし、教師データＤの値をｄｊとした制御データを、各ユニットに出力する（ステップＳ５３３１）。次に、ステップＳ５３３１で出力した制御データに応じて、ユニットから誤差δｊ（Ｌ＋２）を入力する（ステップＳ５３３１）。
【０４７４】
次に、制御コードＡの値を“１１４”とし、逆誤差伝播用換算値Δの値をステップＳ５３３１で入力した誤差δｊ（Ｌ＋２）とし、層インデックスＬａの値をＬとし、ユニット情報Ｊの値をカウンタ変数ｊとした制御データを、各ユニットに出力する（ステップＳ５３３３）。
【０４７５】
次に、カウンタ変数ｉの値を、０から、１，２，・・・・Ｎ（Ｌ＋１）まで、次のステップＳ５３３５からステップＳ５３３７の処理を、繰り返す（ステップＳ５３３４〜ステップＳ５３３８のループ処理）。このカウンタ変数ｉは、（Ｌ＋１）層のユニットを識別する変数として用いられる。
【０４７６】
このステップＳ５３３５では、制御コードＡの値を“１１５”とし、選択ユニット番号Ｂの値をカウンタ変数ｉとし、層インデックスＬａの値をＬ＋１とし、ユニット情報Ｊの値をカウンタ変数ｊとした制御データを、各ユニットに出力する。また、このステップＳ５３３６では、ステップＳ５３３５で出力した制御データに応じて、ユニットから出力される結合荷重ｗｊｉ（Ｌ＋１）を入力する。また、このステップＳ５３３７では、制御コードＡの値を“１１６”とし、選択ユニット番号Ｂの値をカウンタ変数ｊとし、更新結合荷重Ｗの値をステップＳ５３３５で入力した結合荷重ｗｊｉ（Ｌ＋１）とし、層インデックスＬａの値をＬ＋１とし、ユニット情報Ｅの値をカウンタ変数ｉとした制御データを、各ユニットに出力する。
【０４７７】
次に、図５４を用いて、図５３（ａ）のステップＳ５３６について説明する。まず、カウンタ変数ｋの値を、１から２，・・・・，Ｎ（ｌ＋２）まで、次のステップＳ５３６０２の処理を、繰り返す（ステップＳ５３６０１〜ステップＳ５３６０３のループ処理）。なお、このカウンタ変数ｋは、（ｌ＋２）層のユニットを識別する変数として用いられる。次に、このステップＳ５３６０２では、制御コードＡの値を“１１７”とし、逆誤差伝播用換算値Δの値をステップＳ５３３２で入力した誤差δｐｊ（ｌ＋２）とし、層インデックスＬａの値をカウンタ変数ｌとし、ユニット情報Ｋの値をカウンタ変数ｋとした制御データを、各ユニットに出力する。次に、制御コードＡの値を“１１８”とし、層インデックスＬａの値をカウンタ変数ｌとした制御データを、各ユニットに出力する（ステップＳ５３６０４）。
【０４７８】
次に、カウンタ変数ｊの値を、０から、１，２，・・・・Ｎ（ｌ＋１）まで、次のステップＳ５３６０６からステップＳ５３６１３の処理を、繰り返す（ステップＳ５３６０５〜ステップＳ５３６１４のループ処理）。このカウンタ変数ｊは、（ｌ＋１）層のユニットを識別する変数として用いられる。
【０４７９】
次に、このステップＳ５３６０６では、制御コードＡの値を“１１９”とし、選択ユニット番号Ｂの値をカウンタ変数ｊとし、層インデックスＬａの値をｌとした制御データを、各ユニットに出力する。次に、このステップＳ５３６０７では、ステップＳ５３６０６で出力した制御データに応じてユニットが出力した誤差δｐｊ（ｌ＋１）を入力する。次に、制御コードＡの値を“１２０”とし、逆誤差伝播用換算値Δの値をステップＳ５３６０７で入力した誤差δｐｊ（ｌ＋１）とし、層インデックスＬａの値をｌとし、ユニット情報Ｊの値をカウンタ変数ｊとした制御データを、各ユニットに出力する。
【０４８０】
次に、カウンタ変数ｉが０から、１，２，・・・Ｎ（ｌ）まで、次のステップＳ５３６１０からステップＳ５３６１３の処理を、繰り返す（ステップＳ５３６０９〜ステップＳ５３６１３のループ２処理）。このカウンタ変数ｉは、（ｌ）層のユニットを識別する変数として用いられる。
【０４８１】
次に、このステップＳ５３６１０では、制御コードＡの値を“１１５”とし、選択ユニット番号Ｂの値をカウンタ変数ｉとし、層インデックスＬａの値をカウンタ変数ｌとし、ユニット情報Ｊの値をカウンタ変数ｊとした制御データを、各ユニットに出力する。また、このステップＳ５３６１１では、ステップＳ５３６１０で出力した制御データに応じて、ユニットから出力される結合荷重ｗｊｉ（ｌ）を入力する。また、このステップＳ５３６１２では、制御コードＡの値を“１１６”とし、選択ユニット番号Ｂの値をカウンタ変数ｊとし、更新結合荷重Ｗの値をステップＳ５３６１１で入力した結合荷重ｗｊｉ（ｌ）とし、層インデックスＬａの値をカウンタ変数ｌとし、ユニット情報Ｅの値をカウンタ変数ｉとした制御データを、各ユニットに出力する。
【０４８２】
図５３と図５４とを用いて説明したように、分配制御部８は、階層型ニューラルネットワークの層の数と、各層におけるユニットの数とに基いて、制御コードを予め定められた順に各ユニットに出力することにより、各ユニットが内部の重み記憶部１３０に記憶している結合荷重を、学習データに合わせて更新する。
【０４８３】
以上の図４０から図５４を用いて説明した第６の実施形態によれば、第２の基本構成に階層型ニューラルネットワークに適応した場合の並列演算装置において、各ユニットが学習部１９０を有し、分配制御部８が、階層型ニューラルネットワークの層の数と各層におけるユニットの数とに基いて、制御コードを予め定められた順に各ユニットに出力することにより、逆誤差伝播法により結合荷重（結合係数）を修正することが可能となり、よって、ニューラルネットワークの学習をすることが可能となる効果を奏する。
【０４８４】
なお、上記に説明した逆誤差伝播法はフィードバック結合を持たない階層型ニューラルネットワークについて最も効果を発揮するが、フィードバック結合を有するリカレント型フィードバックについても、適切に空間展開を行うことでフィードバック結合を持たない階層型ニューラルネットワークとしてアルゴリズムを適応できることが知られている。このため本構成の適用範囲は、明示的にフィードバック結合を持たない階層型ニューラルネットワークに限定されるものではない。
【０４８５】
また、上記においては、第６の実施形態として、第３の実施形態として説明した第２の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるようにする場合の構成について説明したが、同様に、第１の実施形態として説明した第１の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるように構成してもよい。
【０４８６】
また、第６の実施形態による並列演算装置においては、１つのパターンデータを入力し、その後、該１つのパターンデータに対応する期待値である教師データを入力し、該教師データに基いて、１回の結合係数を修正する場合について説明した。しかし、これに限られるものでなく、例えば、分配制御部８が、上記ステップＣ９で説明した誤差測度を演算するようにし、この演算した誤差測度に基づいて、上記で説明したステップＣ３からステップＣ８の処理、つまり、上記で説明した図５３と図５４とを用いて説明した処理を、繰り返して、複数回の学習を実行するようにしてもよい。また、分配制御部８が、複数のパターンデータと、対応する複数の教師データに基づいて、上記で説明したステップＣ１からステップＣ９の処理の処理を、実行するようにしてもよい。
【０４８７】
＜第７の実施形態：共有重み記憶部＞
次に、第６の実施形態として説明した第２の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、各ユニットが有する重み記憶部１３０を、各ユニットで共有される共有重み記憶部とした場合の構成を、第７の実施形態として説明する。
【０４８８】
まず、第７の実施形態の概要について説明する。第６の実施形態においては、入力層から出力層へと順方向へ伝播する順伝播モードと、出力層から入力層へと逆方向に伝播し、逆誤差伝播を用いた学習を実行する逆誤差伝播モード（学習モード）とでは、入力層と出力層との間の層に対応するノードにおける信号の流れが逆になり、信号を送る側と積和計算を担うノード、つまりユニットが交代する。しかしながら、結合荷重は順伝播モードと逆誤差伝播モードとでは、同じ結合荷重を用いて演算する。
【０４８９】
ここで、第６の実施形態においては、同一の結合荷重が、順伝播モードと逆誤差伝播モードとに対応させて、異なる２つの記憶部、つまり、２つの異なるユニットの重み記憶部１３０に、記憶されている。
【０４９０】
そのため、この２つの記憶部に記憶されている対応する結合荷重の値を、逆誤差伝播モードにおいて更新する場合には、２つの記憶部に記憶されている対応する結合荷重の値が同一となるように更新する必要があった。具体的には、図５３（ｃ）のステップＳ５３３４からステップＳ５３３８の処理、および、図５４のステップＳ５３６０９からステップＳ５３６１３の処理により、この結合荷重の値を一致させる処理を実行する必要があった。
【０４９１】
これに対して、第７の実施形態においては、順伝播モードと逆誤差伝播モードとで、層間での演算に用いる結合荷重が記憶されており、２つのユニットが互いに共有する記憶部を共有記憶部とする。また、この共有記憶部においては、複数の記憶ユニットを、格子状に配置する。また、この共有記憶部を構成する記憶ユニットに対して、メモリアクセスするためのアドレスバス、データバス、および、コントロールバスが、全ての記憶ユニットに格子状に接続しており、伝播層に応じて、格子の列方向もしくは行方向のいずれかをアクティブとする。また、後述するバス配線と制御方法により、メモリアクセス時に衝突することがない。
【０４９２】
このように、第７の実施形態においては、２つのユニットが結合荷重を重複してメモリする必要がなくなるため、逆誤差伝播アルゴリズムの実行時間を短縮することができる。具体的には、図５３（ｃ）のステップＳ５３３４からステップＳ５３３８の処理、および、図５４のステップＳ５３６０９からステップＳ５３６１３の処理が不要となり、そのため、演算の実行時間を短縮することができるという効果を奏する。
【０４９３】
次に、図５６を用いて、第７の実施形態における並列演算装置の構成について説明する。なお、以降においては、図５５に示されるように、入力層がｐ１０１からｐ１０４の４個のノードであり、隠れ層がｐ２０１からｐ２１０の１０個のノードであり、出力層がｐ３０１からｐ３０３の３個のノードである階層型ニューラルネットワークを演算する場合の並列演算装置について説明する。
【０４９４】
なお、入力層を１層目とし、入力層から出力層へ向かう層の順に、層の順序を示す値が２層目、３層目、・・・と、順に番号が付してあるものとする。また、層の順序を示す値が、奇数である層を奇数層と称し、偶数である層を偶数層と称して説明する。
【０４９５】
並列演算装置は、複数のユニット（ＡＵ１〜ＡＵ１０）に共有され、階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部を有している。この共有重み記憶部は、図５６に示すように、複数の記憶ユニットｍ１１、ｍ１２、ｍ１３、ｍ１４、ｍ２１、ｍ２２、・・・・ｍ１０３、ｍ１０４と、後述する複数の行スイッチｒｓ１１、ｒｓ１２、ｒｓ１３、・・・・ｒｓ１０３、および、後述する複数の列スイッチｃｓ１１、ｃｓ１２、ｃｓ１３、・・・・ｃｓ９４を有する。
【０４９６】
また、この共有重み記憶部には、階層型ニューラルネットワークにおいて階層を識別する層情報と、階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、階層型ニューラルネットワークにおいて出力値を入力しているノードを識別する出力ノード情報と、に関連付けて結合荷重が記憶されている。
【０４９７】
また、この共有重み記憶部は、入力ノード情報の１つの値と出力ノード情報の１つの値とに対応する結合荷重が、層情報の異なる値毎に記憶されている複数の記憶ユニット（図５６では、記憶ユニットｍ１１、ｍ１２、ｍ１３、ｍ１４、ｍ２１、ｍ２２・・・・ｍ１０３、ｍ１０４）を有している。
【０４９８】
たとえば、図５９に示すように、結合荷重Ｗ（２）１２と結合荷重Ｗ（３）２１との２つの層に対応する結合係数が、記憶ユニットｍ１２には記憶されている。なお、図５９には、図５６の複数の記憶ユニットに対応して、各記憶ユニットに記憶される結合荷重が、表形式で示してある。ここでは、図５９の表において、行方向の番号が２であり列方向の番号が１である枠内に示されている結合係数が、記憶ユニットｍ１２には記憶されている結合係数に対応する。なお、この図５９に示されている結合荷重は、図５７で示す２層目に対応する結合荷重と、３層目に対応する結合荷重とが、まとめて記憶されている。
【０４９９】
なお、図５５で示してある階層型ニューラルネットワークにおいては、入力層に４個のノードがあり、隠れ層に１０個のノードがあり、出力層に３個のノードがあるため、この層におけるノード数に対応して、上記結合荷重が記憶されている。そのため、図５８の４列目に示すように、対応する結合荷重が不要となる場合もある。
【０５００】
また、図５９に示すように、この記憶ユニットには、層情報の順に、入力ノード情報の１つの値と出力ノード情報の１つの値とが交互となる結合荷重が記憶されている。たとえば、次に説明する図５９の表において、記憶ユニットｍ１２に記憶されている結合荷重は、結合荷重Ｗ（２）１２と結合荷重Ｗ（３）２１とであるが、入力ノード情報と出力ノード情報との値が、層情報の順に、１と２とで交互となる。
【０５０１】
また、複数の記憶ユニットのそれぞれは、記憶ユニットに記憶されている結合荷重の入力ノード情報および出力ノード情報と、ユニットが階層型ニューラルネットワークにおいて演算するノードとに基づいて、複数のユニットのうち、２つのユニットに共有されている。
【０５０２】
たとえば、記憶ユニットｍ１２には、図５９に示されるように結合荷重Ｗ（２）１２と結合荷重Ｗ（３）２１とが記憶されており、入力ノード情報の値は１または２であり、出力ノード情報の値は１または２である。ここで、たとえば、ユニット固有情報に基づいて、ユニットが階層型ニューラルネットワークにおいて演算するノードが予め定められている。そのため、たとえば、ユニットＡＵ１は、全ての層において、１番目のノードとして階層型ニューラルネットワークの演算を実行し、また、ユニットＡＵ２は、全ての層において、２番目のノードとして階層型ニューラルネットワークの演算を実行する。
【０５０３】
この場合、記憶ユニットｍ１２は、入力ノード情報または出力ノード情報の値（１または２）と、複数のユニットのうち、ユニットが階層型ニューラルネットワークにおいて演算するノードの番号（ユニット固有情報）とが一致するユニットであって、ユニットＡＵ１とユニットＡＵ２との２つのユニットに共有される。なお、後述するように、記憶ユニットｍ１２は、行スイッチｒｓ１１を介してユニットＡＵ１に接続され、列スイッチｃｓ１２を介してユニットＡＵ２に接続されることにより、ユニットＡＵ１とユニットＡＵ２との２つのユニットに共有されている。
【０５０４】
なお、記憶されている結合荷重の入力ノード情報の値と出力ノード情報の値とが同一である記憶ユニットを共有している２つのユニットは、同一のユニットである。
【０５０５】
また、たとえば、記憶ユニットｍ１１には、図５９に示されるように結合荷重Ｗ（２）１１と結合荷重Ｗ（３）１１とが記憶されており、入力ノード情報の値は１のみであり、出力ノード情報の値は１のみであり、記憶されている結合荷重の入力ノード情報の値と出力ノード情報の値とが同一である。
【０５０６】
この場合、記憶ユニットｍ１１は、入力ノード情報および出力ノード情報の値（１のみ）と、複数のユニットのうち、ユニットが階層型ニューラルネットワークにおいて演算するノードの番号（ユニット固有情報）とが一致するユニットであって、ユニットＡＵ１のみに共有される。そのため、記憶ユニットｍ１１はユニットＡＵ１のみに共有されるため、記憶ユニットｍ１１とユニットＡＵ１とは、行スイッチまたは列スイッチを介して接続される必要はなく、直接に接続されてもよい。または、記憶ユニットｍ１１をユニットＡＵ１に内蔵するようにしてもよい。
【０５０７】
また、たとえば、図５６に示されるように、ユニットＡＵ１と記憶ユニットｍ１１、ユニットＡＵ２と記憶ユニットｍ２２、ユニットＡＵ３と記憶ユニットｍ３３、および、ユニットＡＵ４と記憶ユニットｍ４４などのように、記憶ユニットを共有している２つのユニットが、同一のユニットである場合には、格子状に配置されている記憶ユニットにおいて、対角線上に配置されている記憶ユニットとユニットとを対応づけることが可能となる。そのため、対応するユニットと記憶ユニットとの間の配線がしやすくなり、また、行スイッチと列スイッチとの個数を減ずることも可能である。また、ユニットＡＵ１が記憶ユニットｍ１１を内蔵する場合には、記憶ユニットｍ１１の個数を減ずることも可能である。
【０５０８】
また、共有重み記憶部において、複数の記憶ユニットは、記憶ユニットに記憶されている結合荷重の入力ノード情報と出力ノード情報とに基づいて、行方向と列方向とに格子状に配置されている。
【０５０９】
たとえば、図５９に示される記憶ユニットに記憶されている結合荷重において、２層目における入力ノード情報の値と出力ノード情報の値とに、格子の行方向における配置位置と列方向における配置位置とを対応させて、図５６に示されるように記憶ユニットが、それぞれ格子状に位置されている。
【０５１０】
また、共有重み記憶部は、記憶ユニットを行方向で、記憶ユニットを共有する２つのユニットのうち一方のユニットに接続させる行スイッチと、記憶ユニットを列方向で、記憶ユニットを共有する２つのユニットのうち他方のユニットに接続させる列スイッチとを有する。
【０５１１】
たとえば、記憶ユニットｍ１０１は、ユニットＡＵ１０とユニットＡＵ１とにより共有されるが、この記憶ユニットｍ１０１は、行方向で、記憶ユニットｍ１０１を共有する２つのユニットのうち一方のユニットであるユニットＡＵ１０に、行スイッチｒｓ１０１、ｒｓ１０２、および、ｒｓ１０３を介して、接続される。また、記憶ユニットｍ１０１は、列方向で、記憶ユニットｍ１０１を共有する２つのユニットのうち他方のユニットであるＡＵ１に、列スイッチｃｓ９１、ｃｓ８１、ｃｓ７１、ｃｓ６１、ｃｓ６１、ｃｓ５１、ｃｓ４１、ｃｓ３１、ｃｓ２１、および、ｃｓ１１を介して、接続される。
【０５１２】
また、共有重み記憶部は、階層型ニューラルネットワークにおける演算の階層に基づいて、行スイッチと列スイッチとを接続状態または非接続状態に制御するスイッチ制御部を有する。また、このスイッチ制御部は、階層型ニューラルネットワークにおける演算の階層に基づいて、次に説明する行アクティブ状態と列アクティブ状態とに、記憶ユニットと列スイッチと行スイッチとを制御する。
【０５１３】
上記の行アクティブ状態とは、行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの行方向に配置されている複数の記憶ユニットが、階層に対応する結合荷重を出力するように制御するとともに、列スイッチを接続状態に制御し行スイッチを非接続状態に制御した状態である。
【０５１４】
また、上記の列アクティブ状態とは、行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか１つの列方向に配置されている複数の記憶ユニットが、階層に対応する結合荷重を出力するように制御するとともに、列スイッチを非接続状態に制御し行スイッチを接続状態に制御した状態である。
【０５１５】
また、このスイッチ制御部は、階層型ニューラルネットワークにおける演算に基づいて、奇数層のユニットが出力側であり、偶数層のユニットが入力側である場合には、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、このスイッチ制御部は、偶数層のユニットが出力側であり、奇数層のユニットが入力側である場合には、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。
【０５１６】
なお、このスイッチ制御部は、分配制御部８から入力された制御データに基づいて、上記に説明した制御を実行してもよい。また、分配制御部８が、スイッチ制御部を内蔵するようにしてもよい。
【０５１７】
上記の説明したようにスイッチ制御部が、行スイッチと列スイッチとを制御するとともに、記憶ユニットの出力も制御することにより、記憶ユニットとユニットとの間において、衝突することなく、結合荷重の入出力が可能である。
【０５１８】
次に、図６０と図６１とを用いて、上記で説明した行アクティブ状態と列アクティブ状態とにおける行スイッチと列スイッチとの接続状態について説明する。図６０は、行アクティブ状態における行スイッチと列スイッチとの接続状態を示す図である。この場合、全ての行スイッチｒｓ１１、・・・・ｒｓ１０３は、非接続状態にされ、全ての列スイッチｃｓ１１、・・・・ｃｓ９４は、接続状態にされる。なお、以降の図において、行スイッチまたは列スイッチが、接続状態にある場合には、スイッチの近傍にある矢印を黒塗りとし、非接続状態にある場合には、スイッチの近傍にある矢印を白抜きとしている。
【０５１９】
図６１は、列アクティブ状態における行スイッチと列スイッチとの接続状態を示す図である。この場合、全ての行スイッチｒｓ１１、・・・・ｒｓ１０３は、接続状態にされ、全ての列スイッチｃｓ１１、・・・・ｃｓ９４は、非接続状態にされる。
【０５２０】
次に、図６２から図６９を用いて、階層型ニューラルネットワークにおける演算に基づいて、行アクティブ状態と列アクティブ状態とを説明する。ここで、図６３は、ノードの状態が図６２に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。同様に、図６５は、ノードの状態が図６４に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。また、同様に、図６７は、ノードの状態が図６６に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。また、同様に、図６９は、ノードの状態が図６８に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。
【０５２１】
なお、図６２、図６４、図６６、および、図６８において、出力ノードおよび入力ノードについては、灰色としている。また、図６３、図６５、図６７、および、図６９において、ノードとしての演算を実行しているユニットを灰色にするとともに、ユニットには、対応するノードの符号（ｐ２０１など）を付している。また、同図において、結合荷重を出力している記憶ユニットには、色を付けるとともに、出力しているなどの結合荷重の符号（Ｗ（２）１２など）を図中に示している。
【０５２２】
＜順方向：奇数層側から偶数層側への入力＞
まず、図６２と図６３とを用いて、順方向における奇数層のノードが出力側となり偶数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図６２に示されるように、入力層（Ｌ１）のノードｐ１０２が、隠れ層（Ｌ２）の全てのノード（ｐ２０１〜ｐ２１０）に、出力値を出力している場合について説明する。
【０５２３】
この場合、奇数層のノードが出力側となり、偶数層のノードが入力側となっているので、図６３に示すように、スイッチ制御部は、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットＡＵ１はノードｐ２０１として機能し、ユニットＡＵ２はノードｐ２０２として機能し、・・・ユニットＡＵ１０はノードｐ２１０として機能する。なお、この場合、分配制御部８が出力ノードｐ１０２として機能する。
【０５２４】
また、ここでは、入力層（Ｌ１）のノードｐ１０２が出力していることに対応して、２列目の記憶ユニットである記憶ユニットｍ１２が結合係数Ｗ（２）１２を出力し、記憶ユニットｍ２２が結合係数Ｗ（２）２２を出力し、記憶ユニットｍ３２が結合係数Ｗ（２）３２を出力し、記憶ユニットｍ４２が結合係数Ｗ（２）１２を出力し、記憶ユニットｍ５２が結合係数Ｗ（２）５２を出力し、・・・・記憶ユニットｍ１０２が結合係数Ｗ（２）１０２を出力する。
【０５２５】
また、列アクティブ状態であり、行スイッチは全て接続状態となっているため、記憶ユニットｍ１２が出力した結合係数Ｗ（２）１２は、行スイッチｒｓ１１を介してユニットＡＵ１に入力される。同様に、記憶ユニットが出力した結合係数は、行スイッチを介して、対応するユニットに入力される。
【０５２６】
以上により、第６の実施形態と同様に、各ユニットは、入力された結合係数に基づいて、順方向における演算を実行することが可能となる。
【０５２７】
＜順方向：偶数層側から奇数層側への入力＞
次に、図６４と図６５とを用いて、順方向における偶数層のノードが出力側となり奇数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図６４に示されるように、隠れ層（Ｌ２）のノードｐ２０８が、出力層（Ｌ３）の全てのノード（ｐ３０１〜ｐ３０３）に、出力値を出力している場合について説明する。
【０５２８】
この場合、偶数層のノードが出力側となり、奇数層のノードが入力側となっているので、図６５に示すように、スイッチ制御部は、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットＡＵ１はノードｐ３０１として機能し、ユニットＡＵ２はノードｐ３０２として機能し、ユニットＡＵ３はノードｐ３０３として機能する。なお、この場合、分配制御部８が出力ノードｐ２０８として機能する。
【０５２９】
また、ここでは、隠れ層（Ｌ２）のノードｐ２０８が出力していることに対応して、８行目の記憶ユニットである記憶ユニットｍ８１が結合係数Ｗ（３）１８を出力し、記憶ユニットｍ８２が結合係数Ｗ（３）２８を出力し、記憶ユニットｍ８３が結合係数Ｗ（３）３８を出力する。
【０５３０】
また、行アクティブ状態であり、列スイッチは全て接続状態となっているため、記憶ユニットｍ８１が出力した結合係数Ｗ（３）１８は、列スイッチｃｓ７１、列スイッチｃｓ６１、列スイッチｃｓ５１、・・・列スイッチｃｓ１１を介してユニットＡＵ１に入力される。同様に、記憶ユニットが出力した結合係数は、列スイッチを介して、対応するユニットに入力される。
【０５３１】
以上により、各ユニットは、第６の実施形態と同様に、入力された結合係数に基づいて、順方向における演算を実行することが可能となる。
【０５３２】
＜逆方向：奇数層側から偶数層側への入力＞
次に、図６６と図６７とを用いて、逆方向における奇数層のノードが出力側となり偶数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図６６に示されるように、出力層（Ｌ３）のノードｐ３０１が、隠れ層（Ｌ２）の全てのノード（ｐ２０１〜ｐ２１０）に、出力値を出力している場合について説明する。
【０５３３】
この場合、奇数層のノードが出力側となり、偶数層のノードが入力側となっているので、図６７に示すように、スイッチ制御部は、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットＡＵ１はノードｐ２０１として機能し、ユニットＡＵ２はノードｐ２０２として機能し、・・・ユニットＡＵ１０はノードｐ２１０として機能する。なお、この場合、分配制御部８が出力ノードｐ３０１として機能する。
【０５３４】
また、ここでは、出力層（Ｌ３）のノードｐ３０１が出力していることに対応して、１列目の記憶ユニットである記憶ユニットｍ１１が結合係数Ｗ（３）１１を出力し、記憶ユニットｍ２１が結合係数Ｗ（３）１２を出力し、記憶ユニットｍ３１が結合係数Ｗ（３）１３を出力し、記憶ユニットｍ４１が結合係数Ｗ（３）１４を出力し、記憶ユニットｍ５１が結合係数Ｗ（３）１５を出力し、・・・・記憶ユニットｍ１０１が結合係数Ｗ（３）１１０を出力する。
【０５３５】
また、列アクティブ状態であり、行スイッチは全て接続状態となっているため、記憶ユニットｍ１１が出力した結合係数Ｗ（３）１１は、ユニットＡＵ１に入力される。また、記憶ユニットｍ１２が出力した結合係数Ｗ（３）１１は、行スイッチｒｓ２１を介してユニットＡＵ２に入力される。同様に、記憶ユニットが出力した結合係数は、行スイッチを介して、対応するユニットに入力される。
【０５３６】
以上により、各ユニットは、第６の実施形態と同様に、入力された結合係数に基づいて、逆方向における演算を実行することが可能となる。
【０５３７】
＜逆方向：偶数層側から奇数層側への入力＞
次に、図６８と図６９とを用いて、逆方向における偶数層のノードが出力側となり奇数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図６８に示されるように、隠れ層（Ｌ２）のノードｐ２０８が、入力層（Ｌ１）の全てのノード（ｐ１０１〜ｐ１０４）に、出力値を出力している場合について説明する。
【０５３８】
この場合、偶数層のノードが出力側となり、奇数層のノードが入力側となっているので、図６９に示すように、スイッチ制御部は、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットＡＵ１はノードｐ１０１として機能し、ユニットＡＵ２はノードｐ１０２として機能し、ユニットＡＵ３はノードｐ１０３とし、ユニットＡＵ４はノードｐ１０４として機能する。なお、この場合、分配制御部８が出力ノードｐ２０８として機能する。
【０５３９】
また、ここでは、隠れ層（Ｌ２）のノードｐ２０８が出力していることに対応して、８行目の記憶ユニットである記憶ユニットｍ８１が結合係数Ｗ（２）８１を出力し、記憶ユニットｍ８２が結合係数Ｗ（２）８２を出力し、記憶ユニットｍ８３が結合係数Ｗ（２）８３を出力し、記憶ユニットｍ８４が結合係数Ｗ（２）８４を出力する。
【０５４０】
また、行アクティブ状態であり、列スイッチは全て接続状態となっているため、記憶ユニットｍ８１が出力した結合係数Ｗ（２）８１は、列スイッチｃｓ７１、列スイッチｃｓ６１、列スイッチｃｓ５１、・・・列スイッチｃｓ１１を介してユニットＡＵ１に入力される。同様に、記憶ユニットが出力した結合係数は、列スイッチを介して、対応するユニットに入力される。
【０５４１】
以上により、各ユニットは、第６の実施形態と同様に、入力された結合係数に基づいて、逆方向における演算を実行することが可能となる。
【０５４２】
＜第７の実施形態における分配制御部８の動作＞
次に、図７０と図７１とを用いて、第７の実施形態における分配制御部８の動作について説明する。図７０のフローチャートは、図５３に示したフローチャートにおいて、図５３（ｃ）のステップＳ５３３４からステップＳ５３３８の処理が無いフローチャートであり、他の処理は同様である。また、図７１のフローチャートは、図５４に示したフローチャートにおいて、図５４のステップＳ５３６０９からステップＳ５３６１３の処理が無いフローチャートであり、他の処理は同様である。
【０５４３】
図７０と図７１とを用いて説明した第７の実施形態における分配制御部８は、図５３と図５４とを用いて説明した第６の実施形態における分配制御部８と同様の動作をすることにより、階層型ニューラルネットワークの演算を実行することが可能である。
【０５４４】
このように第６の実施形態と同様に、第７の実施形態によるユニット演算部１５は、分配制御部８からの制御情報に基づいて、共有重み記憶部に記憶されている結合荷重に基づいて、階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、出力層から入力層へと向かう方向である逆方向における演算を実行し、結合荷重を更新することが可能である。
【０５４５】
なお、ユニット演算部１５は、順方向においては、入力パターンが分配制御部８から入力され、この入力された入力パターンに対して共有重み記憶部に記憶されている結合荷重に基づいて出力値を算出して出力する。また、ユニット演算部１５は、逆方向においては、先に入力された入力パターンに対する教師データが分配制御部８から入力され、この入力された教師データに基づいて、出力した出力値と入力された教師データとの誤差が小さくなるように、共有重み記憶部に記憶されている結合荷重の値を更新する。
【０５４６】
また、第７の実施形態における分配制御部８は、第６の実施形態における分配制御部８に対比して、図５３（ｃ）のステップＳ５３３４からステップＳ５３３８の処理と、図５４のステップＳ５３６０９からステップＳ５３６１３の処理とが不要であり、全体の処理ステップ数を減ずることが可能となる。
【０５４７】
以上説明したように、第７の実施形態においては、第６の実施形態に対して、順伝播モードと逆誤差伝播モードとで、層間での演算に用いる結合荷重が記憶されており、２つのユニットが互いに共有する記憶部を共有記憶部としたことにより、２つのユニットの記憶部に記憶されている対応する結合荷重の値を同一となるように更新する必要がなくなり、上記の図５３（ｃ）のステップＳ５３３４からステップＳ５３３８の処理、および、図５４のステップＳ５３６０９からステップＳ５３６１３の処理が不要となる。
【０５４８】
次に、記憶ユニットとして必要な個数について説明する。階層型ニューラルネットワークが３層構造の場合は、たとえば、図５５で示したように、次に示すように、層に対応したノード数を有している。なお、入力層を１層目とし、入力層から出力層への順に、層に番号を付けた場合について説明する。
【０５４９】
入力層（第１層）：４ノード（入力端子）
隠れ層（第２層）：１０ノード
出力層（第３層）：３ノード
【０５５０】
一般に、階層型ニューラルネットワークがｎ層構造の場合は、次に示すノード数を有している。なお、ここでのｎは、自然数である。
入力層（第１層）：Ｎ１ノード（入力端子）
隠れ層１（第２層）：Ｎ２ノード
隠れ層２（第３層）：Ｎ３ノード
・
・
隠れ層ｎ−２（第ｎ−１層）：Ｎｎ−１ノード
出力層（第ｎ層）：Ｎｎノード
【０５５１】
ここで、各層から次の層について、行方向と列方向とに必要な記憶ユニットの個数は、次のようになる。
（１）第１層から第２層の場合には、行方向にＮ１個であり、列方向にＮ２個である。
（２）第２層から第３層の場合には、列方向にＮ２個であり、行方向にＮ３個である。
（３）第３層から第４層の場合には、行方向にＮ３個であり、列方向にＮ４個である。
【０５５２】
（４）第ｎ−２層から第ｎ−１層の場合には、ｎ−２の値が偶数の場合には、列方向にＮｎ−２個であり、行方向にＮｎ−１個である。逆に、ｎ−２の値が奇数の場合には、行方向にＮｎ−２個であり、列方向にＮｎ−１個である。
（５）第ｎ−１層から第ｎ層の場合には、ｎ−１の値が偶数である場合には、列方向にＮｎ−１個であり、行方向にＮｎ個である。逆に、ｎ−１が奇数である場合には、行方向にＮｎ−１個であり、列方向にＮｎ個である。
【０５５３】
以上より、列方向と行方向とに必要な記憶ユニットの個数は、少なくとも、それぞれ、層の番号が偶数である偶数層で必要となる記憶ユニットの最大値と、層の番号が奇数である奇数層で必要となる記憶ユニットの最大値となる。
【０５５４】
上記に説明したように、階層型ニューラルネットワークにおける入力層を１層目とし、入力層から出力層へと順に層の番号が付してある場合に、共有重み記憶部は、行方向または列方向のうちいずれか一方の方向における記憶ユニットとして、階層型ニューラルネットワークにおける偶数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する。また、共有重み記憶部は、行方向または列方向のうち他方の方向における記憶ユニットとして、階層型ニューラルネットワークにおける奇数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する。
【０５５５】
よって、たとえば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、共有重み記憶部で必要となる記憶ユニットの個数を最小とすることにより、記憶ユニットの個数を減ずることが可能である。
【０５５６】
また、並列演算装置は、ユニットとして、階層型ニューラルネットワークにおける全ての層においてノード数が最大値となる個数のユニットを少なくとも有している。よって、たとえば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、必要となるユニットの個数を最小とすることにより、ユニットの個数を減ずることが可能である。
【０５５７】
なお、上記実施形態の各図で示した構成である記憶部のそれぞれは、ハードディスク装置や光磁気ディスク装置、フラッシュメモリ等の不揮発性のメモリや、ＣＲ−ＲＯＭ等の読み出しのみが可能な記憶媒体、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような揮発性のメモリ、あるいはこれらの組み合わせにより構成されるものとする。
なお、図２の図１５のユニット算出部、または、図１６の分配制御部８は、専用のハードウェアにより実現されるものであってもよく、また、メモリおよびマイクロプロセッサにより実現させるものであってもよい。
【０５５８】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【０５５９】
【図１】この発明の一実施形態による並列演算装置の構成を示すブロック図である。
【図２】この発明の一実施形態による並列演算装置のユニットの構成を示すブロック図である。
【図３】階層型ニューラルネットワークにおける図２のユニットの構成を示すブロック図である。
【図４】図３のユニットの動作を示す第１のフローチャート図である。
【図５】図３のユニットの動作を示す第２のフローチャート図である。
【図６】ニューラルネットワークを説明する説明図である。
【図７】自己組織化マップにおける図２のユニットの構成を示す第１のブロック図である。
【図８】自己組織化マップにおける図２のユニットの構成を示す第２のブロック図である。
【図９】自己組織化マップにおけるデータ構造を示す説明図である。
【図１０】図７および図８のユニットの動作を示す第１のフローチャート図である。
【図１１】図７および図８のユニットの動作を示す第２のフローチャート図である。
【図１２】冗長回路を有した並列演算装置の構成を示すブロック図である。
【図１３】図１２のユニットの構成を示すブロック図である。
【図１４】第２の基本構成による並列演算装置の構成を示すブロック図である。
【図１５】図１４のユニットの構成を示すブロック図である。
【図１６】図１４の分配制御部８の構成を示すブロック図である。
【図１７】階層型ニューラルネットワークにおける図１４のユニットの構成を示すブロック図である。
【図１８】図１４の階層型ニューラルネットワークにおけるプロトコル表である。
【図１９】図１４の各ユニットの動作を説明するフローチャートである。
【図２０】図１４の分配制御部８の動作を説明するフローチャートその１である。
【図２１】図１４の分配制御部８の動作を説明するフローチャートその２である。
【図２２】自己組織化マップにおける図１４のユニットの構成を示すブロック図である。
【図２３】図２２の自己組織化マップにおけるプロトコル表である。
【図２４】図２２の各ユニットの動作を説明するフローチャートである。
【図２５】図２２の分配制御部８の動作を説明するフローチャートその１である。
【図２６】図２２の分配制御部８の動作を説明するフローチャートその２である。
【図２７】図１４の並列演算装置を分離構成とした場合の並列演算装置の構成を示すブロック図である。
【図２８】トーナメント方式の説明図である。
【図２９】ノルムの比較において、ユニットにノルムの同時入力のない場合の比較順序を説明する一例としての比較順序図である。
【図３０】トーナメント方式を用いた場合のユニットの接続図その１である。
【図３１】トーナメント方式を用いた場合のユニットの接続図その２である。
【図３２】第５の実施形態による自己組織化マップにおけるプロトコル表である。
【図３３】第５の実施形態による葉ユニットの構成を示すブロック図である。
【図３４】第５の実施形態による幹ユニットまたは根ユニットの構成を示すブロック図である。
【図３５】第５の実施形態による各ユニットの動作を説明するフローチャートである。
【図３６】第５の実施形態によるユニットの動作を説明するフローチャートである。
【図３７】第５の実施形態による分配制御部８の動作を説明するフローチャートである。
【図３８】ノルムの比較において、ユニットにノルムの同時入力のある場合の比較順序を説明する一例としての比較順序図である。
【図３９】ユニットにノルムの同時入力のある場合における、第５の実施形態によるユニットの動作を説明するフローチャートである。
【図４０】第６の実施形態における図１４のユニットの構成を示すブロック図である。
【図４１】第６の実施形態におけるプロトコル表である。
【図４２】図４０のユニットの構成において制御コードＡの値が１１１の場合の動作を説明する動作図である。
【図４３】図４０のユニットの構成において制御コードＡの値が１１２の場合の動作を説明する動作図である。
【図４４】図４０のユニットの構成において制御コードＡの値が１１３の場合の動作を説明する動作図である。
【図４５】図４０のユニットの構成において制御コードＡの値が１１４の場合の動作を説明する動作図である。
【図４６】図４０のユニットの構成において制御コードＡの値が１１５の場合の動作を説明する動作図である。
【図４７】図４０のユニットの構成において制御コードＡの値が１１６の場合の動作を説明する動作図である。
【図４８】図４０のユニットの構成において制御コードＡの値が１１７の場合の動作を説明する動作図である。
【図４９】図４０のユニットの構成において制御コードＡの値が１１８の場合の動作を説明する動作図である。
【図５０】図４０のユニットの構成において制御コードＡの値が１１９の場合の動作を説明する動作図である。
【図５１】図４０のユニットの構成において、制御コードＡの値が１２０であり、層情報Ｌの値が１でない場合の動作を説明する動作図である。
【図５２】図４０のユニットの構成において、制御コードＡの値が１２０であり、層情報Ｌの値が１である場合の動作を説明する動作図である。
【図５３】第６の実施形態における分配制御部８の動作を説明するフローチャートその１である。
【図５４】第６の実施形態における分配制御部８の動作を説明するフローチャートその２である。
【図５５】一例としての階層型ニューラルネットワークを説明する説明図である。
【図５６】第７の実施形態における並列演算装置の構成を示すブロック図である。
【図５７】図５５の階層型ニューラルネットワークにおいて用いられる結合係数を示す表その１である。
【図５８】図５５の階層型ニューラルネットワークにおいて用いられる結合係数を示す表その２である。
【図５９】図５６の記憶ユニットに記憶される結合係数を示す表である。
【図６０】図５６の並列演算装置における列アクティブ状態を示す説明図である。
【図６１】図５６の並列演算装置における行アクティブ状態を示す説明図である。
【図６２】図５５の階層型ニューラルネットワークでの、一例としての順方向におけるノードの状態を示す説明図その１である。
【図６３】図６２のノードの状態における図５６の並列演算装置の動作状態を示す状態図である。
【図６４】図５５の階層型ニューラルネットワークでの、一例としての順方向におけるノードの状態を示す説明図その２である。
【図６５】図６４のノードの状態における図５６の並列演算装置の動作状態を示す状態図である。
【図６６】図５５の階層型ニューラルネットワークでの、一例としての逆方向におけるノードの状態を示す説明図その１である。
【図６７】図６６のノードの状態における図５６の並列演算装置の動作状態を示す状態図である。
【図６８】図５５の階層型ニューラルネットワークでの、一例としての逆方向におけるノードの状態を示す説明図その２である。
【図６９】図６８のノードの状態における図５６の並列演算装置の動作状態を示す状態図である。
【図７０】第７の実施形態における分配制御部８の動作を説明するフローチャートその１である。
【図７１】第７の実施形態における分配制御部８の動作を説明するフローチャートその２である。
【符号の説明】
【０５６０】
１  デイジーチェーン制御バス
２  ユニット出力バス
３  ユニット入力バス
４  増幅器
５  トリガ入力線
６  第１の冗長デイジーチェーン制御バス
７  第２の冗長デイジーチェーン制御バス
１１、１０１、２０１、１１Ａ、１０１Ａ、２０１Ａ  データ入力部
１２、Ａ１２、Ｂ１２、１０２、２０２  トークン入力部
１３、Ａ１３、Ｂ１３、１０３、２０３  トークン出力部
１４、１０４、２０４、１４Ａ、１０４Ａ、２０４Ａ  データ出力部
１６、１６Ａ  ユニット出力記憶部
１７  トークン出力部選択部
１８  トークン選択情報記憶部
３３  制御データ出力部
１０１Ａ、２０１Ａ  データ入力部
１０４Ａ、２０４Ａ  データ出力部
１５０Ｂ、２５０Ｂ  ファンクション番号抽出部
１５１Ｂ、２５１Ｂ  ファンクション番号記憶部
１５２Ｂ、２５２Ｂ  オペランド抽出部
１５３Ｂ、２５３Ｂ  汎用バッファー記憶部
１１１、１１１Ａ  積和計算一次値算出部
１１２、１１２Ａ  ユニット出力算出部
１１３  層情報算出部
１１４  カウンタ
１３０、２３１、２３１Ａ  重み記憶部
１３１  積和計算一次値記憶部
１３２  関数記憶部
１３３  層情報記憶部
１３４  ユニット数記憶部
１３５、１３５Ａ  ユニット出力記憶部
１３６  データ出力フラグ記憶部
１３７  ユニット識別情報記憶部
１３８Ｂ  前段ユニット出力記憶部
１７０  学習係数記憶部
１７１  逆誤差伝播用積和計算一次値記憶部
１７２  逆誤差伝播用関数記憶部
１７３  教師データ記憶部
１７４  逆誤差伝播用換算値記憶部
１８０  第１逆誤差伝播用換算値算出部
１８１  第１結合係数更新部
１８２  逆誤差伝播用積和計算一次値算出部
１８３  第２逆誤差伝播用換算値算出部
１８４  第２結合係数更新部
１９０  学習部
２１０  データ抽出部
２１１  ネットワーク座標抽出部
２１２  ノルム抽出部
２１３  カウンタ
２１４、２１４Ａ  ノルム算出部
２１５、２１５Ａ  近傍判定部
２１６、２１６Ａ  重み更新部
２１７  ノルム比較部
２１８  入力ノルム判定部
２１９  ネットワーク座標選択部
２２０  ノルム選択部
２２１  データ合成出力部
２２２  データ入力判定部
２２３  トークン出力フラグ判定部
２３０、２３０Ａ  入力データ記憶部
２３２、２３２Ａ  距離記憶部
２３３、２３３Ａ  入力ネットワーク座標記憶部
２３４、２３４Ａ  ユニットネットワーク座標記憶部
２３５、２３５Ａ  学習速度記憶部
２３６、２３６Ａ  ユニットノルム記憶部
２３７  入力ノルム記憶部
２３８  トークン出力フラグ記憶部
２５０  入力ノルム部
２５１  選択出力部
２６０  ビジーフラグ記憶部
２６１  ビジーフラグ判定部
２６２  ノルム情報出力部
２６３  ノルム情報入力部
２７０  入力ノルム抽出部
２７１  入力ノルム記憶部
２７２  入力ネットワーク座標抽出部
２７３  入力ネットワーク座標記憶部
２７４  勝者ノルム判定部
２７５  勝者ノルム・勝者ネットワーク座標セット部
２７６  勝者ノルム記憶部
２７７  勝者ネットワーク座標記憶部
２７８  前段接続数比較部
２７９  前段接続数記憶部
２８０  前段接続数カウンタ部
２８１  前段接続数カウンタリセット部
２８２  ユニットビジーフラグセット部
Ｌ１  入力層
Ｌ２  隠れ層
Ｌ３  出力層
Ｐ１  出力端子
Ｐ２  入力端子
Ｐ３  トリガ入力端子
Ｕ１、Ｕ２、Ｕ３、Ｕ４、Ｕ５、Ｕ６、Ｕ７、Ｕ８、Ｕ９、Ｕ１０、ＡＵ１、ＡＵ２、ＡＵ３、ＡＵ４、ＡＵ５、ＡＵ６、ＡＵ７、ＡＵ８、ＡＵ９、ＡＵ１０  ユニット
【図１】
0004513865.tif 000008
【図２】
0004513865.tif 000009
【図３】
0004513865.tif 000010
【図４】
0004513865.tif 000011
【図５】
0004513865.tif 000012
【図６】
0004513865.tif 000013
【図７】
0004513865.tif 000014
【図８】
0004513865.tif 000015
【図９】
0004513865.tif 000016
【図１０】
0004513865.tif 000017
【図１１】
0004513865.tif 000018
【図１２】
0004513865.tif 000019
【図１３】
0004513865.tif 000020
【図１４】
0004513865.tif 000021
【図１５】
0004513865.tif 000022
【図１６】
0004513865.tif 000023
【図１７】
0004513865.tif 000024
【図１８】
0004513865.tif 000025
【図１９】
0004513865.tif 000026
【図２０】
0004513865.tif 000027
【図２１】
0004513865.tif 000028
【図２２】
0004513865.tif 000029
【図２３】
0004513865.tif 000030
【図２４】
0004513865.tif 000031
【図２５】
0004513865.tif 000032
【図２６】
0004513865.tif 000033
【図２７】
0004513865.tif 000034
【図２８】
0004513865.tif 000035
【図２９】
0004513865.tif 000036
【図３０】
0004513865.tif 000037
【図３１】
0004513865.tif 000038
【図３２】
0004513865.tif 000039
【図３３】
0004513865.tif 000040
【図３４】
0004513865.tif 000041
【図３５】
0004513865.tif 000042
【図３６】
0004513865.tif 000043
【図３７】
0004513865.tif 000044
【図３８】
0004513865.tif 000045
【図３９】
0004513865.tif 000046
【図４０】
0004513865.tif 000047
【図４１】
0004513865.tif 000048
【図４２】
0004513865.tif 000049
【図４３】
0004513865.tif 000050
【図４４】
0004513865.tif 000051
【図４５】
0004513865.tif 000052
【図４６】
0004513865.tif 000053
【図４７】
0004513865.tif 000054
【図４８】
0004513865.tif 000055
【図４９】
0004513865.tif 000056
【図５０】
0004513865.tif 000057
【図５１】
0004513865.tif 000058
【図５２】
0004513865.tif 000059
【図５３】
0004513865.tif 000060
【図５４】
0004513865.tif 000061
【図５５】
0004513865.tif 000062
【図５６】
0004513865.tif 000063
【図５７】
0004513865.tif 000064
【図５８】
0004513865.tif 000065
【図５９】
0004513865.tif 000066
【図６０】
0004513865.tif 000067
【図６１】
0004513865.tif 000068
【図６２】
0004513865.tif 000069
【図６３】
0004513865.tif 000070
【図６４】
0004513865.tif 000071
【図６５】
0004513865.tif 000072
【図６６】
0004513865.tif 000073
【図６７】
0004513865.tif 000074
【図６８】
0004513865.tif 000075
【図６９】
0004513865.tif 000076
【図７０】
0004513865.tif 000077
【図７１】
0004513865.tif 000078