<第1の基本構成>
以下、図面を参照して、本発明の実施の形態について説明する。図1は、この発明の一実施形態による並列演算装置の構成(第1の基本構成)を示す概略ブロック図である。ここでは、ユニットU1からU10の、ユニットの個数が10である場合について説明する。なお、このユニットの詳細については、後述する。
複数のユニットU1からU10は、予め定められた順序であるデイジーチェーン順序で、デイジーチェーン制御バス1を介してデイジーチェーンされている。ここでは、このデイジーチェーン順序は、ユニットU1、ユニットU2、ユニットU3、・・・ユニットU10の順と、予め定められているものとして説明する。また、デイジーチェーン制御バス1は、デイジーチェーン順序で隣接するユニット同士を接続している。例えば、デイジーチェーン制御バス1は、ユニットU1とユニットU2、ユニットU2とユニットU3、・・・ユニットU10とユニットU1、を接続している。また、このデイジーチェーン制御バス1は、ユニットU1からU10をデイジーチェーン順序で循環的に接続している。そのため、ユニットU10とユニットU1とも、デイジーチェーン制御バス1を介して接続されている。
ユニットU1からU10のそれぞれのユニットは、トークンをデイジーチェーン順序で、デイジーチェーン制御バス1を介してユニット間で送受信している。このトークンは、デイジーチェーンされたユニットU1からU10の、いずれかの1つのユニットが有しており、このトークンを有しているユニットが、出力ユニットとなることを示す信号である。ユニットは、トークンを有しているユニットのみが出力ユニットとなり、また、全てのユニットが入力ユニットとなる。
この各ユニットは、ユニット出力バス2を介して入力される増幅器4からの入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、各ユニットは、トークンがデイジーチェーン順序で前のユニットからデイジーチェーン制御バス1を介して入力されたことに応じて、トークンをデイジーチェーン順序で次のユニットにデイジーチェーン制御バス1を介して出力すると共に、演算した結果を出力値として増幅器4にユニット出力バス2を介して出力する。
増幅器(中継器)4は、複数のユニットU1からU10の内のいずれか1つが出力する出力値がユニット出力バス2を介して入力され、入力された出力値を複数のユニットU1からU10のそれぞれに、ユニット入力バス3を介して入力値として出力する。また、増幅器4は、入力された出力値の信号を、電気的に増幅して、入力値として出力する。
また、ユニット出力バス2の一端が、並列演算装置の出力端子P1に接続されている。また、増幅器4の入力端子に、並列演算装置の入力端子P2に接続されている。また、ユニットU1は、トリガ入力線5を介して、トリガ入力端子P3と、接続されている。また、出力端子P1、入力端子P2、トリガ入力端子P3は、並列演算装置の外部にある制御装置に接続されている。制御装置は、出力端子P1、入力端子P2、トリガ入力端子P3を介して、並列演算装置にデータを入力し、並列演算装置から演算結果を取得し、また、並列演算装置を制御する。
次に、図2を用いて、各ユニットの構成について説明する。なお、ユニットU1からU10は同一の構成を有するため、ここでは、ユニットU2の構成のみについて説明する。ユニットU2は、トークン入力部12と、トークン出力部13と、データ入力部11と、データ出力部14と、ユニット演算部15と、ユニット出力記憶部16と、を有する。
トークン入力部12は、デイジーチェーン制御バス1を介してデイジーチェーンされている順序が1つ前のユニットからのトークンを入力する。例えば、ユニットU2のトークン入力部12は、デイジーチェーン制御バス1を介してデイジーチェーンされている順序が1つ前のユニットであるユニットU1からのトークンを入力する。なお、ユニットU1のトークン入力部12は、ユニットU10からのトークンがトークンデイジーチェーン制御バス1を介して入力されるだけでなく、制御装置からのトークンがトリガ入力端子P3とトリガ入力線5とを介して入力される。
トークン出力部13は、トークン入力部にトークンが入力されたことに応じて、トークンをデイジーチェーンされている順序が1つ後のユニットへデイジーチェーン制御バス1を介して出力する。例えば、ユニットU2のトークン出力部13は、デイジーチェーン制御バス1を介してデイジーチェーンされている順序が1つ後のユニットであるユニットU3へトークンを出力する。
データ入力部11は、ユニット出力バス2を介して増幅器4からの入力値を入力する。ユニット出力記憶部16は、ユニット演算部15が演算した結果である演算結果が記憶される。ユニット演算部15は、データ入力部11に入力された入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、ユニット演算部15は、演算した結果である演算結果を、ユニット出力記憶部16に記憶させる。
データ出力部14は、トークン入力部12にトークンが入力されたことに応じて、ユニット演算部15が演算した結果である演算結果を出力値として、増幅器4にユニット出力バス2を介して出力する。また、データ出力部14は、トークン入力部12にトークンが入力されたことに応じて、ユニット出力記憶部16から演算結果を読み出し、読み出した演算結果を出力値として、増幅器4にユニット出力バス2を介して出力する。
なお、後述するように、並列演算装置が、トリガであるトークンをユニットU1にトリガ入力端子P3を介して入力し、ユニットU1から順にトークンがユニット間で順次渡されていくことにより、並列演算装置の各ユニットでの処理が実行される。この並列演算装置の動作については、次に説明する並列演算装置を階層型ニューラルネットワークに適応した場合を例にして説明する。
<第1の実施形態>
<階層型ニューラルネットワークに適応した場合のユニットの構成>
次に、並列演算装置を、階層型ニューラルネットワークに適応した場合の構成について説明する。階層型ニューラルネットワークにおいても並列演算装置全体の構成は、図1の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図3を用いて、階層型ニューラルネットワークに適応した場合のユニットの構成を説明する。
ユニットは、データ入力部101と、トークン入力部102と、トークン出力部103と、データ出力部104とを有する。また、ユニットは、重み記憶部130と、層情報記憶部133と、ユニット数記憶部134と、積和計算一次値記憶部131と、関数記憶部132と、ユニット出力記憶部135と、データ出力フラグ記憶部136と、ユニット識別情報記憶部137とを有する。また、ユニットは、カウンタ114と、積和計算一次値算出部111と、層情報算出部113と、ユニット出力算出部112とを有する。
ここで、図3のデータ入力部101、トークン入力部102、トークン出力部103、データ出力部104は、図2のデータ入力部11、トークン入力部12、トークン出力部13、データ出力部14に、それぞれ対応する。また、図3のユニット出力記憶部135が、図2のユニット出力記憶部16に対応する。これらの図2と図3とにおいて対応する構成について、共通の機能については、その説明を省略する。
また、図3の重み記憶部130と、層情報記憶部133と、ユニット数記憶部134と、積和計算一次値記憶部131と、関数記憶部132と、データ出力フラグ記憶部136と、ユニット識別情報記憶部137と、カウンタ114と、積和計算一次値算出部111と、層情報算出部113と、ユニット出力算出部112とが、図2のユニット演算部15に対応する。
層情報記憶部133には、階層型ニューラルネットワークの階層のうち、アクティブな層(出力層)を識別する層情報が記憶されている。ユニット識別情報記憶部137には、アクティブな層に属しているユニットのうち、いずれのユニットが出力しているかを示すユニット識別情報が記憶されている。関数記憶部132には、ユニットの出力関数と層情報とが関連付けて予め記憶されている。この出力関数とは、例えば、シグモイド関数、ステップ関数、区分線形関数などの、予め定められた関数である。
重み記憶部130には、層情報で識別されるアクティブな層のユニットからの出力値に乗ずる予め定められた結合荷重と、層情報とが関連付けて記憶されている。また、重み記憶部130には、層情報とユニット識別情報とで識別される層のユニットからの出力値に乗ずる予め定められた結合荷重と、層情報とユニット識別情報とが、関連付けて記憶されている。
ユニット数記憶部134には、層情報と層情報で識別される階層に属する階層型ニューラルネットワークのユニット数とが関連付けて予め記憶されている。積和計算一次値記憶部131には、前段ユニットに相当するユニットからの入力値と結合荷重とを乗じた積和計算一次値情報が記憶される。データ出力フラグ記憶部136には、データ出力部104が出力値を出力済みであるか否かを示すデータ出力フラグが記憶されている。カウンタ114は、データ入力部101に入力値が入力される毎に、ユニット識別情報記憶部137に記憶されているユニット識別情報の値をインクリメントする。
ユニット数比較部115は、層情報記憶部133から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部134から読み出し、ユニット識別情報記憶部137からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力する。また、ユニット数比較部115は、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、ユニット識別情報記憶部137に記憶されているユニット識別情報の値をリセットする。
積和計算一次値算出部111は、層情報記憶部133から読み出した層情報に該当する結合荷重を重み記憶部130から読み出し、読み出した結合荷重と、データ入力部101に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる。
また、積和計算一次値算出部111は、ユニット識別情報記憶部137から読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出し、読み出した結合荷重と、データ入力部101に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる。
ユニット出力算出部112は、積和計算一次値記憶部131から積和計算一次値情報を読み出し、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部135に記憶させる。
また、ユニット出力算出部112は、ユニット数比較部115から比較一致信号を入力されたことに応じて、積和計算一次値記憶部131から積和計算一次値情報を読み出し、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部135に記憶させる。
また、ユニット出力算出部112は、積和計算一次値記憶部131から積和計算一次値情報を読み出した後、積和計算一次値記憶部131に記憶されている積和計算一次値情報の値を0にリセットする。
層情報算出部113は、ユニット数比較部115から比較一致信号を入力されたことに応じて、層情報記憶部133に記憶されている層情報の値をインクリメントする。データ出力部104は、トークン入力部102にトークンが入力されたことに応じて、データ出力フラグ記憶部136のデータ出力フラグを出力済みに設定する。
トークン出力部103は、データ入力部101に入力値が入力されたことに応じて、データ出力フラグ記憶部136からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力する(トークン出力手順)。また、トークン出力部103は、トークンを出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを未出力に設定する。
なお、トークン出力部103は、データ入力部101に入力値が入力されたことに応じて、データ出力フラグ記憶部136からデータ出力フラグを読み出し、読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力するという上記トークン出力手順の代わりに、積和計算一次値算出部111にデータ入力部101からの入力値が入力されたことに応じて、データ出力フラグ記憶部136からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みに設定されている場合には、トークンを出力してもよい。
<階層型ニューラルネットワークに適応した場合のユニットの動作>
次に、図4と図5とを用いて、図3の階層型ニューラルネットワークに適応した場合のユニットの動作について説明する。まず、図4を用いて、ユニットに入力値が入力された場合の動作について説明する。
まず、データ入力部101に、増幅器4からユニット入力バス3を介して入力値が入力される(ステップS100)。次に、ステップS100で、データ入力部101に入力値が入力されたことに応じて、カウンタ114がユニット識別情報記憶部137に記憶されているユニット識別情報の値を、1つインクリメントする(ステップS101)。
また、ステップS100で、データ入力部101に入力値が入力されたことに応じて、積和計算一次値算出部111が、ユニット識別情報記憶部137から読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出し、読み出した結合荷重と、データ入力部101に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる。
次に、ユニット数比較部115が、層情報記憶部133から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部134から読み出し、ユニット識別情報記憶部137からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力する(ステップS103)。また、このユニット数比較部115が、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致した場合に、ユニット識別情報記憶部137に記憶されているユニット識別情報の値をリセットする。
次に、ステップS103にて比較した結果が一致した場合には、層情報算出部113が、ユニット数比較部115から比較一致信号を入力されたことに応じて、層情報記憶部133に記憶されている層情報の値をインクリメントする(ステップS104)。
次に、ステップS103にて比較した結果が一致した場合には、ユニット出力算出部112は、ユニット数比較部115から比較一致信号を入力されたことに応じて、積和計算一次値記憶部131から積和計算一次値情報を読み出し、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部135に記憶させる(ステップS105)。次に、このユニット出力算出部112は、積和計算一次値記憶部131から積和計算一次値情報を読み出した後、積和計算一次値記憶部131に記憶されている積和計算一次値情報の値を0にリセットする。
次に、または、ステップS103にて比較した結果が不一致であった場合には、トークン出力部103が、ステップS100にてデータ入力部101に入力値が入力されたことに応じて、データ出力フラグ記憶部136からデータ出力フラグを読み出し、該読み出したデータ出力フラグが出力済みであるか否かを検出し(ステップS106)、データ出力フラグが出力済みに設定されている場合には、トークンを出力する(ステップS107)。
また、トークン出力部103は、ステップS107にてトークンを出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを未出力に設定し(ステップS108)、処理を終了する。一方、ステップS106にてデータ出力フラグが未出力に設定されている場合には、トークン出力部103は、処理を終了する。
次に、図5を用いて、ユニットにトークンが入力された場合の動作について説明する。まず、トークン入力部102に、デイジーチェーン制御バス1を介してデイジーチェーンされている順序が1つ前のユニットからのトークンが入力される(ステップS200)。
次に、データ出力部104は、トークン入力部102にトークンが入力されたことに応じて、ユニット出力記憶部135から出力値(演算結果)を読み出し、読み出した出力値(演算結果)を出力値として、増幅器4にユニット出力バス2を介して出力する(ステップS201)。次に、データ出力部104は、トークン入力部102にトークンが入力されたことに応じて、データ出力フラグ記憶部136のデータ出力フラグを出力済みに設定して(ステップS202)、処理を終了する。
<階層型ニューラルネットワークの全体の構成>
次に、本実施形態による階層型ニューラルネットワークの全体の構成について、説明する。
ここでは、図6に示すように、階層型ニューラルネットワークとして、入力層L1、隠れ層L2、出力層L3の3層がある場合について説明する。各層は、層情報により識別されており、また、階層の層情報は、階層の順に層情報が1つずつ大きくなるようにして、識別されている。例えば、入力層L1の層情報が1、隠れ層L2の層情報が2、出力層L3の層情報が3として識別されている。
また、入力層L1には、P101、P102、P103の3個のノードがあり、隠れ層L2には、P201、P202、P203、P204、P205、P206、P207、P208、P209、P210の10個のノードがあり、出力層L3には、P301、P302、P303の3個のノードがある場合について説明する。入力層L1の各ノードの出力は、隠れ層L2の各ノードの入力に入力され、また、隠れ層L2の各ノードの出力は、出力層L3の各ノードの入力に入力されている。
各層において、各ノードはユニット識別情報により識別されており、各ノードのユニット識別情報は、予め定められたノードの配置順に、ユニット識別情報が1つずつ大きくなるようにして設定されている。例えば、P101はユニット識別情報が1であり、P102はユニット識別情報が2であり、P103はユニット識別情報が3である。
本実施の形態においては、それぞれのユニットが、隠れ層L2、出力層L3のノードとして機能する。なお、この例においては、ユニットU1からユニットU3は、隠れ層L2、出力層L3のノードとして機能し、ユニットU4からユニットU10は、隠れ層L2のノードとして機能する。ここで、制御装置が入力層L1として出力値を、増幅器4とユニット出力バス2とを介して、隠れ層L2としての各ユニットに、順次出力する。そのために、ここでは、各ユニットは、隠れ層L2と出力層L3として機能する。
例えば、ユニットU1は、隠れ層L2のノードP201と出力層L3のノードP301として機能する。また、ユニットU3は、隠れ層L2のノードP203と出力層L3のノードP303として機能する。また、ユニットU4は、隠れ層L2のノードP204として機能する。
ここで、あるユニットに値が入力された際、入力層L1、隠れ層L2、出力層L3のいずれの層からの入力であるかは、各ユニットにおいて、ユニットが有する層情報記憶部133に記憶してある層情報により判定される。
<階層型ニューラルネットワークの全体の動作>
次に、本実施形態による階層型ニューラルネットワークの、一例としての、全体の動作について説明する。ここでは、各ユニットが、出力層L3のノードとして機能し、トークンを入力されたいずれか1つのユニットが隠れ層L2のアクティブなノードとして機能する場合について説明する。この場合、各ユニットが出力層L3のノードとして機能し、アクティブな層が隠れ層L2であるため、各ユニットの層情報記憶部133には層情報の値として2が記憶されている。
まず、ノードP201であるユニットU1が、トークンが制御装置から入力されることにより、ユニット出力記憶部135から出力値を読み出し、出力値を出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを出力済みとして設定する(手順A100)。次に、ノードP201からの出力値が、ユニット出力バス2と増幅器4とユニット入力バス3とを介して、ユニットU1からU10の各ユニットのデータ入力部101に入力される。
次に、ユニットU1からU10の各ユニットは、ユニットU1からの入力値に基づいて、積和計算一次値算出部111が、ユニット識別情報記憶部137から読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出し、読み出した結合荷重と、データ入力部101に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる(手順A101)。
ここで、各ユニットの積和計算一次値算出部111が、ユニット識別情報記憶部137から読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出すことにより、各ユニットは、層情報に基づいて出力層L3のノードとして機能し、また、層情報に基づいて、アクティブなユニットの属する層が隠れ層L2であると識別し、更に、ユニット識別情報に基づいてアクティブとなる隠れ層L2での各ノードを識別し、この隠れ層L2のアクティブとなるノードに対応する結合荷重を、このアクティブとなった隠れ層L2のノードからの出力値に乗ずることが可能となる。
ここで、ユニットU1のデータ出力フラグ記憶部136のデータ出力フラグは、出力済みとして設定されてあるため、ユニットU1のトークン出力部103は、データ入力部101に入力値が入力されたことに応じて、トークンを出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを未出力として設定する(手順A102)。
次に、ユニットU1から出力されたトークンは、デイジーチェーン制御バス1を介して、デイジーチェーンされている順序が1つ後のユニットであるユニットU2のトークン入力部12に入力される(手順A103)。
ユニットU2はトークン入力部12にトークンが入力されたことに応じて、上記に説明した手順A100でノードP101であるユニットU1が、トークンが入力された場合と同様に、ユニット出力記憶部135から出力値を読み出し、出力値を出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを出力済みとして設定する(手順A104)。
以降、同様に、手順A101から手順A103を繰り返し、隠れ層L2のノードP210であるユニットU10が、出力値を出力すると共に、データ出力フラグ記憶部136のデータ出力フラグを出力済みとして設定する。
次に、出力層L3のノードP301からP303に該当するユニットU1からU3の各ユニットは、手順A101と同様に、ユニットU10からの入力値に基づいて、各ユニットの積和計算一次値算出部111が、ユニット識別情報記憶部137から読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出し、読み出した結合荷重と、データ入力部101に入力された入力値とを乗算し、乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる(手順A105)。
ここで、ユニットU10からの入力値が、各ユニットのデータ入力部101に入力されたことに応じて、各ユニットのカウンタ114は、ユニット識別情報記憶部137に記憶されているユニット識別情報の値をインクリメントし、ユニット識別情報の値は3となる(手順A106)。
なお、各ユニットのユニット数記憶部134には、層情報と層情報で識別される階層に属する階層型ニューラルネットワークのユニット数とが関連付けて予め記憶されている。例えば、図6の階層型ニューラルネットワークの場合には、入力層L1の層情報である値1と、階層型ニューラルネットワークのユニット数、つまり、入力層L1のノード数である3とが、関連付けて予め記憶されている。また、例えば、図6の階層型ニューラルネットワークの場合には、隠れ層L2の層情報である値2と、階層型ニューラルネットワークのユニット数、つまり、隠れ層L2のノード数である10とが、関連付けて予め記憶されている。
次に、各ユニットのユニット数比較部115は、層情報記憶部133から層情報を読み出し、読み出した層情報に該当するユニット数をユニット数記憶部134から読み出し、ユニット識別情報記憶部137からユニット識別情報を読み出し、読み出したユニット識別情報の値と読み出したユニット数とを比較し、比較した結果が一致するために、読み出したユニット識別情報の値と読み出したユニット数とが一致したことを示す比較一致信号を出力すると共に、ユニット識別情報記憶部137に記憶されているユニット識別情報の値をリセットする(手順A107)。
次に、各ユニットのユニット出力算出部112は、ユニット数比較部115から比較一致信号を入力されたことに応じて、積和計算一次値記憶部131から積和計算一次値情報を読み出し、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出し、読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、算出した出力値をユニット出力記憶部135に記憶させる(手順A108)。
ここで、各ユニットのユニット出力算出部112は、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出すため、出力層L3に該当するユニット毎の出力関数により、ユニットの出力値を算出することが可能となる。また、各ユニットのユニット出力記憶部135に出力層L3のノードとして算出した出力値が記憶されるため、各ユニットはトークンが入力された場合に、各ユニットは出力層L3のアクティブなノードとして、出力値を出力することが可能となる。
また、各ユニットの層情報算出部113が、ユニット数比較部115から比較一致信号を入力されたことに応じて、層情報記憶部133に記憶されている層情報の値をインクリメントして、層情報の値を3とする。そのために、各ユニットは、以降、トークンが入力されたいずれか1つのユニットが、出力層L3のアクティブなノードとして出力値を出力する。
なお、上記において、出力層L3でユニットU3からユニットU4にトークンが出力され、次に、トークンを入力されたユニットU4が出力層L3のノードとして出力値を出力するが、この例における階層型ニューラルネットワークにおいて、出力層L3のノードとしてユニットU4に相当するノードは無いため、ユニットU4は、出力層L3のノードとして出力値を出力しないことが望ましい。または、ユニットU4は、出力層L3のノードとしては、出力値の値を0として出力してもよい。または、各ユニットにおいて、出力層L3としてのユニットU4からの出力値に乗じる結合荷重を0として、重み記憶部130に予め記憶しておいてもよい。
このようにユニットU4の出力値、または、ユニットU4からの出力値を受けた各ユニットの結合荷重を、予め階層型ニューラルネットワークの各層のノードの個数に合わせて設定しておくことにより、ユニットに対して、ある層でそのユニットに対応するノードが無い場合においても、本実施形態の並列演算装置は階層型ニューラルネットワークとして問題なく動作することが可能である。
以上説明したように、本実施形態を階層型ニューラルネットワークに適応した場合には、一度に発火すうニューロンの個数を1つに限定したことにより、つまり、出力層において出力値を出力するノードを、トークンが入力された1つのユニットに限定することにより、ユニット間の配線が増大することを減じる効果を奏する。
また、1つの出力層のノードであるユニットからの出力値が、ユニット入力バス3を介して、1度に全ての入力層となるノードであるユニットに分配して入力されるため、分配に要する時間を減じる効果を奏する。また、複数のユニットが、並列にユニット内演算を演算するため、全体としての演算が高速になるという効果を奏する。
例えば、階層型ニューラルネットワークを演算した場合、従来型のプロセッサを用いた場合には、その計算時間は概算として、計算時間=(シナプス数×1回の演算に要するステップ数÷クロック周波数)として算出されるのに対して、本実形態による並列演算装置を用いた場合には、計算時間=(ニューロン数×1ニューロンの発火周期)により算出される。ここで、シナプス数は、ニューロン数の2乗に比例するため、本実形態による並列演算装置を用いた階層型ニューラルネットワークの計算時間は、従来型のプロセッサを用いた場合に比較して、計算時間を大幅に減ずることが可能となる。
また、各ユニットが、階層型ニューラルネットワークの層を変更し、かつ、入力側の層のノードと出力側の層のノードとして機能するため、少ないユニット数で多層のノードの演算を実行することが可能となる効果を奏する。
なお、上記に説明した第1の実施形態においては、制御装置が入力層L1として出力値を順次出力し、そのために、各ユニットは隠れ層L2と出力層L3のノードとして機能するとして説明したが、各ユニットは、入力層L1のノードとして機能するようにしてもよい。例えば、制御装置が入力層L1のノードに対応する出力値を順次出力し、ユニットが入力層L1のノードとして、制御装置からの出力値をユニット出力記憶部135に順次記憶する。次に、トークンが入力されたユニットが、入力層L1のアクティブなユニットとして出力値を出力する。このようにして、各ユニットは、入力層L1と、隠れ層L2と、出力層L3とのユニットとして機能することも可能である。
なお、上記の第1の実施形態においては、階層型ニューラルネットワークとして、入力層L1、隠れ層L2、出力層L3の3層がある場合について説明したが、本実施形態は、階層型ニューラルネットワークの階層は3層に限られるものではなく、任意の階層に適応可能である。
<第2の実施形態>
<自己組織化マップに適応した場合のユニットの構成>
次に、本実施形態の並列演算装置を、自己組織化マップに適応した場合について説明する。自己組織化マップは、次のような処理を実行することにより、多変量からなるデータの統計的性質を学習し、 類似したデータが近接するように配列し、また、データの視覚化を可能とするものである。
各ユニットは、ユニットの結合重みベクトルを有している。まず、各ユニットに入力データベクトルが入力され、各ユニットは入力された入力データベクトルと結合重みベクトルの差であるノルムを算出する(手順A200)。次に、最もノルムの小さい出力ユニットを勝者ユニットとして選択する(手順A201)。次に、選択した勝者ユニットとその近傍のユニットが、より入力データベクトルに近づくように結合重みベクトルの値を予め定められた関数により変更して、学習を行う(手順A203)。この、手順A200から手順A203を繰り返す。
本実施形態の並列演算装置を自己組織化マップに適応する場合、各ユニットに入力されるデータは、上記の手順A200と、手順A201と、手順A202とで異なるため、実施形態においては、ユニットに入力するデータに、上記の手順A200と、手順A201と、手順A202とを識別する識別情報を組とすることにより、識別する。
図9(a)に示すように、ユニット入力バス3からの入力値は、ノルム部とデータ部とを有する。また、図9(b)に示すように、ノルム部の値が−2である場合、入力値のノルム部は「データ部の値が入力ベクトルである」ことを示す識別子であり、そのデータ部は入力ベクトルである。また、図9(c)に示すように、ノルム部の値が−1である場合、ノルム部は「近傍判定識別情報」であり、そのデータ部は、ネットワーク座標である。また、図9(d)に示すように、ノルム部の値が零または正の値である場合、ノルム部の値はノルムであり、また、データ部は、ネットワーク座標である。これらの詳細については、後述する。
次に、図7と図8とを用いて、自己組織化マップに適応した場合の並列演算装置のユニットの構成について説明する。ここで、複数のユニットのそれぞれは、ネットワーク座標により識別される座標で予め識別されている。なお、各ユニットは、第1の実施形態と同様に、同一の構成を有しているので、ここでは1つのユニットの構成のみについて説明する。
この図7または図8のユニットの構成において、データ入力部201はデータ入力部11に対応し、データ出力部204はデータ出力部14に対応し、トークン入力部202はトークン入力部12に対応と、トークン出力部203はトークン出力部13に対応する。また、ユニットノルム記憶部236と、入力ノルム記憶部237と、ユニットネットワーク座標記憶部234と、入力ネットワーク座標記憶部233とは、ユニット出力記憶部16に対応する。また、他の構成は、ユニット演算部15に対応する。
ユニットネットワーク座標記憶部234には、ユニットのネットワーク座標であるユニットネットワーク座標が予め記憶されている。入力ネットワーク座標記憶部233には、入力されたネットワーク座標である入力ネットワーク座標が記憶される。重み記憶部231には、ユニットの結合重みベクトルが予め記憶されている。入力データ記憶部230には、入力された入力データベクトルが記憶される。ユニットノルム記憶部236には、ユニットのノルムが記憶される。入力ノルム記憶部237には、入力されたノルムが記憶される。
学習速度記憶部235には、学習速度を決める係数である学習速度係数が予め記憶されている。また、学習速度記憶部235には、学習した回数を示す学習ステップ数と、前記学習速度係数とが予め関連付けて記憶されている。距離記憶部232には、ネットワーク座標の間の距離が近傍であるか否かを判定する基準である基準距離が予め記憶されている。また、距離記憶部232には、学習ステップ数と基準距離とが予め関連付けて記憶されている。
データ入力判定部222は、データ入力部201に入力された入力値が入力データベクトルであるか否かを判定し、入力データベクトルである場合には、データ抽出部210に入力値である入力データベクトルを出力し、入力データベクトルでない場合には、ネットワーク座標抽出部211とノルム抽出部212とに入力値を出力する。
このデータ入力判定部222は、入力値のノルムの値が、入力値が入力データベクトルであることを示す値である−2であるか否かを判定することにより、データ入力部201に入力された入力値が入力データベクトルであるか否かを判定する。
データ抽出部210は、データ入力部201に入力された入力値が入力データベクトルである場合には、入力された入力データベクトルを入力データ記憶部230に記憶させる。また、データ抽出部210は、入力された入力データベクトルを、ノルム算出部214に出力する。また、データ抽出部210は、入力データベクトルが入力される毎に、カウンタ213がカウントアップ信号を出力する。
カウンタ213は、ユニットに入力データベクトルが入力される毎に、ユニットに入力データベクトルが入力された回数であるステップ数をカウントアップする。また、カウンタ213は、データ抽出部210からカウントアップ信号を入力される毎に、ステップ数をカウントアップする。
ノルム算出部214は、データ入力部201に入力された入力値が入力データベクトルである場合には、入力された入力データベクトルと、重み記憶部231から読み出した結合重みベクトルとのノルムを算出し、算出したノルムをユニットノルムとしてユニットノルム記憶部236に記憶させる。
入力ノルム部250は、データ入力部201に入力された入力値が、ネットワーク座標とノルムとの組みである場合には、入力されたネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部233に記憶させると共に、入力されたノルムを入力ノルムとして入力ノルム記憶部237に記憶させる。この入力ノルム部250は、ネットワーク座標抽出部211と、ノルム抽出部212と、入力ノルム判定部218とから構成されている。
ネットワーク座標抽出部211は、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部233に記憶させる。ノルム抽出部212は、入力された入力値から、ノルムを抽出し、抽出したノルムを入力ノルム判定部218に出力する。
入力ノルム判定部218は、ノルム抽出部212から入力されたノルムの値により、入力されたノルムが、ノルムであるのか、または、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報であるのかを判定し、ノルムである場合には、入力されたノルムを入力ノルムとして入力ノルム記憶部237に記憶させる。逆に、入力されたノルムが近傍判定識別情報である場合には、入力ノルム判定部218は、近傍判定部215に、近傍判定識別情報を出力する。
例えば、この入力ノルム判定部218は、ノルム抽出部212から入力されたノルムの値が−1である場合には、入力されたノルムが近傍判定識別情報であるとして判定し、ノルム抽出部212から入力されたノルムの値が−1でない場合には、ノルムとして判定する。
ノルム比較部217は、トークン入力部202を介してトークンが入力されたことに応じて、ユニットノルム記憶部236から読み出したユニットノルムと、入力ノルム記憶部237から読み出した入力ノルムとを比較する。
選択出力部251は、ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットノルム記憶部236から読み出したユニットノルムとユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標とを組みとして、データ出力部204を介して出力し、読み出したユニットノルムが入力ノルム以上である場合には、入力ノルム記憶部237から読み出した入力ノルムと入力ネットワーク座標記憶部233から読み出した入力ネットワーク座標とを組みとして、データ出力部204を介して出力する。この選択出力部251は、ネットワーク座標選択部219と、ノルム選択部220と、データ合成出力部221とから構成されている。
ノルム選択部220は、ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットノルム記憶部236からユニットノルムを読み出し、読み出したユニットノルムをデータ合成出力部221に出力する。また、ネットワーク座標選択部219は、ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には入力ノルム記憶部237から入力ノルムを読み出し、読み出した入力ノルムをデータ合成出力部221に出力する。
ネットワーク座標選択部219は、ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ユニットネットワーク座標記憶部234からユニットネットワーク座標を読み出し、読み出したユニットネットワーク座標をデータ合成出力部221に出力する。また、ネットワーク座標選択部219は、ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には、入力ネットワーク座標記憶部233から入力ネットワーク座標を読み出し、読み出した入力ネットワーク座標をデータ合成出力部221に出力する。
データ合成出力部221は、ノルム選択部220から入力されたユニットノルムまたは入力ノルムであるノルムと、ネットワーク座標選択部219から入力されたユニットネットワーク座標または入力ネットワーク座標であるネットワーク座標とを組みとして合成し、組として合成したノルムとネットワーク座標とを、データ出力部204を介して出力する。
近傍判定部215は、データ入力部201に入力された入力値が、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報との組みである場合には、ユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する。
また、近傍判定部215は、近傍判定識別情報が入力ノルム部250または入力ノルム判定部218から入力されたことに応じて、ユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する。
また、近傍判定部215は、データ入力部201に入力された入力値が、ネットワーク座標と近傍判定を実行することを示す識別情報である近傍判定識別情報との組みである場合には、距離記憶部232から基準距離を読み出し、ユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標と入力されたネットワーク座標である入力ネットワーク座標との間の距離が、読み出した基準距離以下であるか否かを判定することにより、ユニットネットワーク座標が入力ネットワーク座標の近傍にあるか否かを判定する。
また、近傍判定部215は、カウンタ213から読み出したステップ数に一致する学習ステップ数に関連付けられている基準距離を距離記憶部232から読み出し、該読み出した基準距離に基づいて前記ユニットネットワーク座標が前記入力ネットワーク座標の近傍にあるか否かを判定する。
重み更新部216は、近傍判定部215の判定した結果が近傍である場合には、重み記憶部231に記憶されている結合重みベクトルの値を更新する。また、重み更新部216は、入力データ記憶部230から読み出した入力データベクトルと重み記憶部231から読み出した結合重みベクトルとの差を算出し、算出した差に、学習速度記憶部235から読み出した学習速度係数を乗じた値を、重み記憶部231に記憶されている結合重みベクトルに加算することにより、重み記憶部231に記憶されている結合重みベクトルの値を更新する。
また、重み更新部216は、カウンタ213から読み出したステップ数と一致する学習ステップ数に関連付けられている学習速度係数を学習速度記憶部235から読み出し、読み出した学習速度係数に基づいて重み記憶部231に記憶されている結合重みベクトルの値を更新する。
トークン出力フラグ記憶部238には、トークン出力部203がトークンを出力済みであるか否かを示すトークン出力フラグが記憶されている。トークン出力フラグ判定部223は、トークン入力部202にトークンが入力されたことに応じて、トークン出力フラグ記憶部238からトークン出力フラグを読み出し、読み出したトークン出力フラグがトークンを未出力である場合に、入力されたトークンをノルム比較部217に出力すると共に、入力されたトークンを、トークン出力部203を介して出力する。
トークン出力部203は、トークン入力部202にトークンが入力されたことに応じて、トークンを出力する。また、トークン出力部203は、データ合成出力部221または選択出力部251が、ユニットノルム記憶部236から読み出したユニットノルムとユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標とを組みとしてデータ出力部204を介して出力したことに応じて、または、入力ノルム記憶部237から読み出した入力ノルムと入力ネットワーク座標記憶部233から読み出した入力ネットワーク座標とを組みとしてデータ出力部204を介して出力したことに応じて、トークンを出力する。また、トークン出力部203は、トークンを出力した後に、トークン出力フラグ記憶部238に記憶されているトークン出力フラグを出力済みに更新する。
<自己組織化マップに適応した場合のユニットの動作>
次に、図10と図11とを用いて、自己組織化マップに適応した場合の並列演算装置のユニットの動作について説明する。最初に、図10を用いて、ユニットのデータ入力部に入力値が入力された場合の動作について説明する。
まず、データ入力部201に入力値であるデータが入力される(ステップS400)。次に、データ入力判定部222は、入力値のノルムの値が、入力値が入力データベクトルであることを示す値である−2であるか否かを判定することにより、データ入力部201に入力された入力値が入力データベクトルであるか否かを判定する(ステップS401)。
次に、ステップS401の判定結果が、ノルムの値が−2であり、入力データベクトルである場合には、データ抽出部210が、入力された入力データベクトルを入力データ記憶部230に記憶させる(ステップS402)と共に、カウントアップ信号をカウンタ213に出力する。次に、カウンタ213は、データ抽出部210からカウントアップ信号を入力されたことに応じて、ステップ数をカウントアップする(ステップS403)。
次に、ノルム算出部214は、データ抽出部210を介して入力された入力データベクトルと、重み記憶部231から読み出した結合重みベクトルとのノルムを算出し、算出したノルムをユニットノルムとしてユニットノルム記憶部236に記憶させ(ステップS404)、処理を終了する。
一方、ステップS401の判定結果が、ノルムの値が−2ではなく、入力データベクトルではない場合には、ネットワーク座標抽出部211が、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部233に記憶させる(ステップS405)と共に、ノルム抽出部212は、入力された入力値から、ノルムを抽出し、抽出したノルムを入力ノルム判定部218に出力する。
次に、入力ノルム判定部218は、ノルム抽出部212から入力されたノルムの値が−1であるか否かを判定し(ステップS406)、判定結果が、ノルム抽出部212から入力されたノルムの値が−1でない場合には、ノルムとして判定し、入力されたノルムを入力ノルムとして入力ノルム記憶部237に記憶させ(ステップS407)、処理を終了する。
一方、ステップS406の判定結果が、ノルム抽出部212から入力されたノルムの値が−1である場合には、入力ノルム判定部218は、入力されたノルムが近傍判定識別情報であるとして判定し、近傍判定部215に、近傍判定識別情報を出力する。次に、近傍判定部215は、近傍判定識別情報が入力ノルム判定部218から入力されたことに応じて、ユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標が、入力されたネットワーク座標である入力ネットワーク座標の近傍にあるか否かを判定する(ステップS408)。
ステップS408の判定結果が、近傍である場合には、重み更新部216が、重み記憶部231に記憶されている結合重みベクトルの値を更新して(ステップS409)、処理を終了する。一方、ステップS408の判定結果が、近傍でない場合には、処理を終了する。
次に、図11を用いて、ユニットのトークン入力部にトークンが入力された場合の動作について説明する。まず、トークン入力部202に、トークンが入力される(ステップS500)。次に、トークン出力フラグ判定部223が、トークン入力部202にトークンが入力されたことに応じて、トークン出力フラグ記憶部238からトークン出力フラグを読み出し、読み出したトークン出力フラグがトークンを未出力であるか否かを判定し(ステップS501)、読み出したトークン出力フラグがトークンを未出力である場合には、入力されたトークンをノルム比較部217に出力すると共に、入力されたトークンを、トークン出力部203を介して出力する。
次に、ノルム比較部217は、トークン入力部202を介してトークンが入力されたことに応じて、ユニットノルム記憶部236から読み出したユニットノルムと、入力ノルム記憶部237から読み出した入力ノルムとを比較する(ステップS502)。
ノルム比較部217の比較した結果が、読み出したユニットノルムが入力ノルムより小さい場合には、ノルム選択部220が、ユニットノルム記憶部236からユニットノルムを読み出し、読み出したユニットノルムをデータ合成出力部221に出力する(ステップS503)と共に、ネットワーク座標選択部219が、ユニットネットワーク座標記憶部234からユニットネットワーク座標を読み出し、読み出したユニットネットワーク座標をデータ合成出力部221に出力する(ステップS504)。
次に、データ合成出力部221が、ノルム選択部220から入力されたユニットノルムと、ネットワーク座標選択部219から入力されたユニットネットワーク座標とを組みとして合成し、組として合成したユニットノルムとユニットネットワーク座標とを、データ出力部204を介して出力する(ステップS505)。
一方、ステップS502でノルム比較部217が比較した結果が、読み出したユニットノルムが入力ノルム以上である場合には、ノルム選択部220が、入力ノルム記憶部237から入力ノルムを読み出し、読み出した入力ノルムをデータ合成出力部221に出力する(ステップS508)と共に、ネットワーク座標選択部219が、入力ネットワーク座標記憶部233から入力ネットワーク座標を読み出し、読み出した入力ネットワーク座標をデータ合成出力部221に出力する(ステップS509)。
次に、データ合成出力部221は、ノルム選択部220から入力された入力ノルムと、ネットワーク座標選択部219から入力された入力ネットワーク座標とを組みとして合成し、組として合成した入力ノルムと入力ネットワーク座標とを、データ出力部204を介して出力する(ステップS510)。
次に、トークン出力部203が、ステップS505にて、データ合成出力部221が、ユニットノルム記憶部236から読み出したユニットノルムとユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標とを組みとしてデータ出力部204を介して出力したことに応じて、または、ステップS510にて、入力ノルム記憶部237から読み出した入力ノルムと入力ネットワーク座標記憶部233から読み出した入力ネットワーク座標とを組みとしてデータ出力部204を介して出力したことに応じて、トークンを出力する(ステップS506)。
次に、トークン出力部203は、トークンを出力した後に、トークン出力フラグ記憶部238に記憶されているトークン出力フラグを出力済みに更新し(ステップS507)、処理を終了する。
<自己組織化マップに適応した場合の並列演算装置全体の動作>
次に、自己組織化マップに適応した場合の並列演算装置全体の動作について説明する。まず、制御装置は、入力ベクトルと、値を−2としたノルムとを組みとした入力値を、全てのユニットに、ユニット入力バス3を介して、入力する(手順A300)。
次に、入力ベクトルを入力された各ユニットのノルム算出部214は、入力された入力ベクトルと、ユニットが有する結合重みベクトルとのノルムを算出し、算出したノルムを、ユニットノルム記憶部236に記憶させる(手順A301)。
次に、制御装置は、ユニットU1に、トークンを入力する(手順A302)。次に、ユニットU1のノルム比較部217は、ユニットU1のトークン入力部202を介してトークンが入力されたことに応じて、ユニットノルム記憶部236から読み出したユニットノルムと、入力ノルム記憶部237から読み出した入力ノルムとを比較する(手順A303)。
ここで、ユニットU1の入力ノルム記憶部237には、ユニットU1が手順A301で算出したノルムに比較して、十分に大きな値のノルムが予め記憶されているものとして説明する。
ここでは、ユニットノルム記憶部236から読み出したユニットノルムの方が、入力ノルム記憶部237から読み出した入力ノルムより小さいため、ユニットU1の選択出力部251は、ユニットノルム記憶部236から読み出したユニットノルムとユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標とを組みとして、データ出力部204を介して出力する(手順A304)。
次に、ユニットU1のデータ出力部204が出力したノルムとネットワーク座標とが組として、ユニット出力バス2と増幅器4とユニット入力バス3とを介して、各ユニットのデータ入力部201に入力される(手順A305)。
次に、各ユニットの入力ノルム部250は、データ入力部201に入力された入力値のノルムの値が−1でないため、入力されたネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部233に記憶させると共に、入力されたノルムを入力ノルムとして入力ノルム記憶部237に記憶させる(手順A306)。ここで、入力ネットワーク座標記憶部233に記憶されるネットワーク座標と、入力ノルム記憶部237に記憶されるノルムは、ユニットU1の、ネットワーク座標とノルムである。
次に、ユニットU1のトークン出力部203は、ユニットU1のデータ合成出力部221または選択出力部251が、ユニットノルム記憶部236から読み出したユニットノルムとユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標とを組みとしてデータ出力部204を介して出力したことに応じて、トークンを、デイジーチェーン制御バス1を介してユニットU2に出力する(手順A307)。
次に、手順A303のユニットU1と同様に、ユニットU2のノルム比較部217は、ユニットU2のトークン入力部202を介してユニットU1からのトークンが入力されたことに応じて、ユニットノルム記憶部236から読み出したユニットノルムと、入力ノルム記憶部237から読み出した入力ノルムとを比較する(手順A308)。
ここで、入力ノルム記憶部237に記憶される入力ノルムは、ユニットU1のノルムであり、また、ユニットノルム記憶部236から読み出したユニットノルムは、ユニットU2のノルムであるため、このユニットU2のノルム比較部217は、ユニットU2のノルムと、ユニットU1のノルムとを比較することになる。以降、ユニットU2のノルム比較部217の比較結果に基づいて、手順A304から手順A306の処理が、同様に実行される(手順A309)。
従って、トークンがユニットU2に入力されることにより、ユニットU1とユニットU2とのノルムが比較され、ノルムが小さい方のユニットが勝者ユニットとして選択され、勝者ユニットのノルムとユニットネットワーク座標とが、全てのユニットの入力ノルム記憶部237と入力ネットワーク座標記憶部233とに記憶される(手順A310)。
次に、手順A307と同様に、ユニットU2からユニットU3にトークンが送信されることにより、次に、ユニットU3が、手順A303から手順A307とを実行することにより、ユニットU1とユニットU2との勝者ユニットのノルムと、ユニットU3のノルムとが比較され、ユニットU1からユニットU3までのユニットの中からの勝者ユニットが選択される(手順A311)。
以降、トークンがデイジーチェーン順序でユニットに渡されていく毎に、トークンが入力されたユニットの中での勝者ユニットが選択される(手順A312)。その後、デイジーチェーン順序で最後のユニットであるユニットU10にトークンが入力されると、ユニットU10のデータ出力部204が、ユニットU1からユニットU10の中の勝者ユニットのノルムとネットワーク座標とを出力する(手順A313)。
制御装置は、ユニットU10のデータ出力部204が出力するノルムとネットワーク座標とを、勝者ユニットのノルムとネットワーク座標として受信する(手順A314)。これにより、制御装置は、入力ベクトルに対しての、勝者ユニットのノルムとネットワーク座標とを、受信することが出来る。
次に、制御装置は、ユニットU10のデータ出力部204から受信したネットワーク座標と、値を−1としたノルムとを組みとした入力値を、全てのユニットに、ユニット入力バス3を介して、入力する(手順A315)。
次に、ネットワーク座標と値を−1としたノルムとを組みとした入力値を入力された各ユニットは、各ユニットのネットワーク座標抽出部211が、入力された入力値から、ネットワーク座標を抽出し、抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部233に記憶させる(手順A316)と共に、各ユニットの入力ノルム判定部218が、ノルム抽出部212から入力されたノルムの値が−1であるため、入力されたノルムが近傍判定識別情報であるとして判定し、近傍判定部215に、近傍判定識別情報を出力する(手順A317)。
次に、各ユニットの近傍判定部215が、近傍判定識別情報が入力ノルム部250または入力ノルム判定部218から入力されたことに応じて、ユニットネットワーク座標記憶部234から読み出したユニットネットワーク座標が、入力ネットワーク座標記憶部233から読み出した入力ネットワーク座標の近傍にあるか否かを判定する(手順A318)。
次に、各ユニットの重み更新部216は、そのユニットの近傍判定部215の判定した結果が近傍である場合には、そのユニットの重み記憶部231に記憶されている結合重みベクトルの値を更新する(手順A319)。これにより、勝者ユニットのネットワーク座標の近傍であるユニットの結合重みベクトルが、更新され、学習が実行される。
以上に説明した自己組織化マップに適応した場合の並列演算装置においては、ユニット入力バス3に全てのユニットが接続されているため、制御装置が入力ベクトルをユニット入力バス3に1度出力するだけで、全てのユニットに入力ベクトルを入力することができる。また、各ユニットが、入力された入力ベクトルに対して、並列にノルムを算出することができるため、ユニット全体で、短時間でノルムを算出することができる。
また、ユニット入力バス3に全てのユニットが接続されているため、制御装置が勝者ユニットのネットワーク座標をユニット入力バス3に1度出力するだけで、全てのユニットに勝者ユニットのネットワーク座標を入力することができる。また、各ユニットが、入力された勝者ユニットのネットワーク座標の近傍にあるか否かを並列に判定し、学習するため、ユニット全体で、短時間で学習することができる。
また、デイジーチェーン制御バス1を介してトークンをユニット間で渡していくことにより、デイジーチェーン順序で順に勝者ユニットを決定することができる。つまり、勝者ユニットの決定が、デイジーチェーン制御バス1という、簡易な配線で可能となる。
<冗長性を持たせた並列演算装置>
次に、図12を用いて、デイジーチェーン制御バス1に冗長性をもたせた場合の並列演算装置の構成を説明する。
各ユニットは、予め定められた順序であるデイジーチェーン順序において、1つ飛ばしの順序である第1の冗長順序で、複数のユニットのうちの半数のユニットが、第1の冗長デイジーチェーン制御バス6によりデイジーチェーンされている。例えば、ユニットU1とユニットU3とユニットU5とユニットU7とユニットU9とが、第1の冗長デイジーチェーン制御バス6により、デイジーチェーンされている。
また、予め定められた順序であるデイジーチェーン順序において、1つ飛ばしの順序で、上記の第1の冗長デイジーチェーン制御バス6によりデイジーチェーンされていない複数のうちの残りの半数のユニットが、第2の冗長デイジーチェーン制御バス7によりデイジーチェーンされている。例えば、ユニットU2とユニットU4とユニットU6とユニットU8とユニットU10とが、第2の冗長デイジーチェーン制御バス7により、デイジーチェーンされている。
次に、図13を用いて、第1の冗長デイジーチェーン制御バス6によりデイジーチェーンされているユニットの構成について説明する。つまり、例えば、ユニットU1とユニットU3とユニットU5とユニットU7とユニットU9の構成について説明する。なお、冗長性について変更される構成のみについて説明するため、図2のユニットの構成において、変更される構成のみについて説明する。
図13において、図13(a)と(c)とには、変更される前の図2で示されたユニットの構成が示してある。並列演算装置が冗長性を有するようにすることにより、図13(a)のユニットの構成が、図13(b)の構成に変更される。また、図13(c)のユニットの構成が、図13(d)のユニットの構成に変更される。
図13(b)に示すようにユニットは、トークン出力部A13_1と、トークン出力部B13_2と、トークン出力部選択部17と、トークン選択情報記憶部18とを有する。ここで、トークン出力部A13_1は、図2のトークン出力部13に対応する。
トークン出力部B13_2(冗長トークン出力部)は、トークン入力部12にトークンが入力されたことに応じて、トークンを冗長順序で1つ後のユニットへ第1の冗長デイジーチェーン制御バス6を介して出力する。トークン選択情報記憶部18には、トークン出力部A13_1とトークン出力部B13_2とのうち、いずれを選択するかを示すトークン出力選択情報が記憶されている。
トークン出力部選択部17は、トークン入力部12にトークンが入力されたことに応じて、トークン選択情報記憶部18から読み出したトークン出力選択情報に基づいて、トークン出力部A13_1とトークン出力部B13_2とのうちいずれか一方を選択し、選択したトークン出力部A13_1またはトークン出力部B13_2を介してトークンを出力する。
また、図13(d)に示すように、ユニットは、トークン入力部A12_1と、トークン入力部B12_2(冗長トークン入力部)とを有する。ここで、トークン入力部A12_1は、図2のトークン入力部12に対応する。
トークン入力部B12_2は、第1の冗長デイジーチェーン制御バス6を介してデイジーチェーンされている冗長順序が1つ前のユニットからのトークンを入力する。
また、トークン出力部13は、トークン入力部A12_1またはトークン入力部B12_2にトークンが入力されたことに応じて、トークンを出力する。
また、第1の冗長デイジーチェーン制御バス6によりデイジーチェーンされているユニットと同様に、第2の冗長デイジーチェーン制御バス7によりデイジーチェーンされているユニットも、第2の冗長デイジーチェーン制御バス7を第1の冗長デイジーチェーン制御バス6として、トークン入力部B12_2(冗長トークン出力部)とトークン選択情報記憶部18とトークン出力部選択部17とトークン入力部B12_2(冗長トークン入力部)を有している。
なお、ここでは、トークン選択情報記憶部18には、トークン出力部A13_1とトークン出力部B13_2とのうち、いずれを選択するかを示すトークン出力選択情報が記憶されているもとして説明したが、このトークン出力選択情報は、例えば、デイジーチェーン順序で次のユニットに欠陥があるか否かを示す情報であってもよい。
トークン出力選択情報が、デイジーチェーン順序で次のユニットに欠陥があるか否かを示す情報である場合、トークン出力部選択部17は、トークン選択情報記憶部18から読み出したトークン出力選択情報に基づいて、デイジーチェーン順序で次のユニットに欠陥がない場合には、トークン出力部A13_1を選択してトークンを出力し、逆に欠陥がある場合には、トークン出力部B13_2を選択してトークンを出力する。
<欠陥チェックの方法>
次に、欠陥チェックの方法について説明する。ここでは、並列演算装置が、階層型ニューラルネットワークの場合について説明する。まず、ニューラルネットワークの並列演算装置が、結合係数がすべて同じで、中間層無しの入力層と出力層との2層である階層型ニューラルネットワークとして演算を実行し、制御装置が、演算結果の出力値を得る。制御装置は、出力値を判定し、正常な場合は処理を修了する。制御装置は、出力値を判定し、異常があることを検出した場合には、異常ユニットの前段ユニットのトークン選択情報記憶部18に対し、欠陥情報を書き込む。
次に、制御装置の、正常な場合と異常な場合の、判定方法とその処理について、詳細に説明する。まず、制御装置は、全てのユニットから、すべて同じ出力を得る場合に、正常として判定する。次に、制御装置は、ユニットからの出力が途中で止まる、または、ユニットからの出力値が予想された値と異なる部分がある場合に、異常として判定する。この場合、制御装置は、異常として検出したユニットである異常ユニットの、デイジーチェーン順序で1つ前となる前段ユニットのトークン選択情報記憶部18に、欠陥情報を書き込み、もう一度欠陥チェックを実行し、判定結果が正常となるまで欠陥チェックを実行する。このとき、欠陥が原因で電気的に切り離す必要が生じる場合に備え、ユニットの入出力部にハイインピーダンススイッチを設け、回路を電気的に切り離す機構を備えても良い。
以上のように、並列演算装置が、第1の冗長デイジーチェーン制御バス6と、第2の冗長デイジーチェーン制御バス7とにより冗長性を有するようにすることにより、デイジーチェーン制御バス1またはいずれかのユニットに欠陥が生じた場合においても、並列演算装置は問題なく動作することが可能となる。
なお、ここでは、冗長配線が、デイジーチェーン順序において1つ飛ばしの第1の冗長デイジーチェーン制御バス6と第2の冗長デイジーチェーン制御バス7との場合について説明したが、更に、デイジーチェーン順序において2つ飛ばしの冗長デイジーチェーン制御バスなどを追加することも可能である。
<第2の基本構成>
次に、この発明の一実施形態による並列演算装置の第2の基本構成を、図14の概略ブロック図を用いて説明する。図14の概略ブロック図において、図1の第1の基本構成と同一の構成には同一の符号を付けて、その説明を省略する。ここでは、ユニットAU1からAU10の、ユニットの個数が10である場合について説明する。このユニットの詳細については、後述する。
並列演算装置は、第2の基本構成においては、予め定められた識別番号である固有ユニット番号で識別される複数のユニット(AU1〜AU10)と、この複数のユニットの中のいずれか1つのユニットが出力する出力値がユニット出力バス2を介して入力されたことに応じて、該入力された入力値と複数のユニットの中から選択したいずれか1つのユニットを識別する識別番号である選択ユニット番号とを含む制御データを、複数のユニットのそれぞれにユニット入力バス3を介して出力する分配制御部8と、を有する。なお、この制御データには、入力値と、選択ユニット番号と、ユニットの演算方法または制御方法を選択するための制御コードとを含む。
次に、図15を用いて、各ユニットの構成について説明する。なお、ユニットAU1からAU10は同一の構成を有するため、ここでは、ユニットAU1の構成のみについて説明する。ユニットAU1は、データ入力部11Aと、データ出力部14Aと、ユニット演算部15Aと、ユニット出力記憶部16Aと、制御コード抽出部17Aと、入力値抽出部18Aと、ユニット番号抽出部19Aと、ユニット番号一致判定部20Aと、固有ユニット番号記憶部21Aと、を有する。
固有ユニット番号記憶部21Aには、それぞれのユニットを識別するための識別番号である固有ユニット番号が予め記憶されている。ユニット出力記憶部16Aには、ユニット演算部15Aが演算した結果である演算結果が記憶される。データ入力部11Aは、ユニット入力バス3を介して分配制御部8からの制御データを入力する。入力値抽出部18Aは、データ入力部11Aに入力された制御データから入力値を抽出する。選択ユニット番号抽出部19Aは、データ入力部11Aに入力された制御データから選択ユニット番号を抽出する。制御コード抽出部17Aは、データ入力部11Aに入力された制御データから制御コードを抽出する。
ユニット番号一致判定部20Aは、データ入力部11Aに入力された制御データに含まれる出力ユニット番号と、固有ユニット番号とが一致するか否かを判定する。このユニット番号一致判定部20Aは、選択ユニット番号抽出部19Aが抽出した選択ユニット番号と、固有ユニット番号記憶部21Aから読み出した固有ユニット番号とが一致するか否かを判定する。
ユニット演算部15Aは、データ入力部11Aに入力された制御データに含まれる入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。このユニット演算部15Aは、入力値抽出部18Aが抽出した入力値に基づいて、ユニット毎に予め定められた演算方法により演算する。また、このユニット演算部15Aは、予め定められた演算方法から、制御コード抽出部17Aが抽出した制御コードに基づいて、演算方法を選択し、該選択した演算方法により演算する。また、ユニット演算部15Aは、演算した結果である演算結果をユニット出力記憶部16Aに記憶させる。
データ出力部14Aは、ユニット番号一致判定部20Aが判定した結果が一致である場合には、ユニット演算部15Aが演算した結果である演算結果を出力値として、分配制御部8にユニット出力バス2を介して出力する。また、データ出力部14Aは、ユニット番号一致判定部20Aが判定した結果が一致である場合には、演算結果をユニット出力記憶部16Aから読み出し、該読み出した演算結果を出力値として分配制御部8にユニット出力バス2を介して出力する。
次に、図16を用いて、分配制御部8の構成を説明する。分配制御部8は、ユニット出力値入力部31と、制御データ生成部32と、制御データ出力部33と、処理手順記憶部34と、を有する。ユニット出力値入力部31は、ユニット出力バス2を介して複数のユニットの中のいずれか1つのユニットが出力する出力値を入力する。制御データ生成部32は、ユニット出力値入力部31に入力された出力値に基づいて、予め定められた処理手順により制御データを生成する。制御データ出力部33は、制御データ生成部32が生成した制御データを複数のユニットのそれぞれにユニット入力バス3を介して出力する。なお、この制御データ出力部33は、出力する制御データを、電気的に増幅する増幅器を、その内部に有していてもよい。
また、処理手順記憶部34には、演算を実行する処理手順が予め記憶されている。制御データ生成部32は、処理手順を処理手順記憶部34から順に読み出すことにより、また、必要であれば読み出した処理手順にユニット出力値入力部31に入力された出力値を挿入することにより、予め定められた処理手順により制御データを生成する。
ここで、分配制御部8の制御データ生成部32は、ユニット出力値入力部31に出力値が入力されたことに応じて、または、制御データ出力部33が制御データを出力してから予め定められた一定時間の経過後に、制御データを生成する。そのため、分配制御部8、より詳しくは、分配制御部8の制御データ出力部33は、ユニット出力値入力部31に出力値が入力されたことに応じて、または、制御データ出力部33が制御データを出力してから予め定められた一定時間の経過後に、制御データを出力する。
また、分配制御部8は、入力端子P2を介して外部から初期値などのデータである入力値を入力され、入力された入力値を各ユニットにユニット入力バス3を介して設定することにより、各ユニットを用いた並列演算を実行する。また、分配制御部8は、各ユニットが演算した演算結果を、各ユニットからユニット出力バス2を介して入力され、該入力された演算結果を外部に出力端子P1を介して出力する。なお、ここでいう外部とは、並列演算装置の外部にある制御装置やコンピュータである。
図14から図16を用いて説明した並列演算装置の第2の基本構成においては、分配制御部8が制御データにより各ユニットを制御するために、図1に示す並列演算装置の第1の基本構成と比較して、各ユニットでの処理が簡易となり、また、各ユニット間をデイジーチェーン順序で接続していたデイジーチェーン制御バス1が不要となる効果を奏する。
<第3の実施形態>
<階層型ニューラルネットワークに適応した場合のユニットの構成>
次に、第2の基本構成による並列演算装置を、階層型ニューラルネットワークに適応した場合の構成について説明する。階層型ニューラルネットワークにおいても並列演算装置全体の構成は、図14の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図17を用いて、階層型ニューラルネットワークに適応した場合のユニットの構成のみについて説明する。
ユニットは、データ入力部101Aと、データ出力部104Aと、重み記憶部130と、積和計算一次値記憶部131と、層情報記憶部133と、関数記憶部132と、ユニット出力記憶部135Aと、前段ユニット出力記憶部138Bと、前段ユニット番号記憶部139Bと、選択ユニット番号記憶部141Bと、固有ユニット番号記憶部140Bと、を有する。また、ユニットは、積和計算一次値算出部111Aと、ユニット出力算出部112Aと、比較部115Bと、ユニット制御部116Bと、ファンクション番号抽出部150Bと、ファンクション番号記憶部151Bと、オペランド抽出部152Bと、汎用バッファー記憶部153Bと、を有する。
ここで、図17のデータ入力部101A、データ出力部104A、ユニット出力記憶部135Aは、図15のデータ入力部11A、データ出力部14A、ユニット出力記憶部16Aに、それぞれ対応する。また、図17の固有ユニット番号記憶部140B、比較部115Aが、図15の固有ユニット番号記憶部21A、ユニット番号一致判定部20Aに、それぞれ対応する。これらの図17と図15とにおいて対応する構成について、共通の機能については、その説明を省略する。
また、図17のファンクション番号抽出部150Bとファンクション番号記憶部151Bとが図15の制御コード抽出部17Aに対応する。また、図17のオペランド抽出部152Bと汎用バッファー記憶部153Bとが、図15の入力値抽出部18Aまたは選択ユニット番号抽出部19Aに対応する。
また、図17の重み記憶部130と、層情報記憶部133と、積和計算一次値記憶部131と、関数記憶部132と、積和計算一次値算出部111Aと、ユニット出力算出部112Aと、前段ユニット番号記憶部139Bとが、図15のユニット演算部15Aに対応する。
また、図17の構成において、図3の第1の基本構成における階層型ニューラルネットワークに適応した場合の並列演算装置のユニットの構成と同様の構成には、同一の符号、または、同一の符号に符号Aを付した符号を付け、その説明を省略する。
<第3の実施形態におけるユニットの各構成の説明>
ファンクション番号記憶部151Bには、制御データに含まれる制御コード(ファンクション番号)が記憶される。汎用バッファー記憶部153Bには、制御データに含まれる制御コードA(ファンクション番号)以外の情報、例えば、後述する選択ユニット番号B、出力値C、配信層情報D、または、配信ユニット識別情報Eが記憶される。以降において、制御データに含まれる制御コードA(ファンクション番号)以外の情報、例えば、後述する選択ユニット番号B、出力値C、配信層情報D、または、配信ユニット識別情報Eを汎用データとして説明する。この制御データの詳細については、図18を用いて後述する。
ファンクション番号抽出部150Bは、データ入力部101Aに入力された制御データに含まれる制御コードを抽出し、抽出した制御コードをファンクション番号記憶部151Bに記憶させる。オペランド抽出部152Bは、データ入力部101Aに入力された制御データに含まれる汎用データを抽出し、抽出した汎用データを汎用バッファー記憶部153Bに記憶させる。
ユニット制御部116Bは、データ入力部101Aに入力された制御データと比較部115Bが判定した結果とに基づいて、処理を実行する、または、予め定められた処理部の中から選択的に処理を実行させる。このデータ入力部101Aに入力された制御データとは、ファンクション番号記憶部151Bから読み出した制御コードと、汎用バッファー記憶部153Bから読み出した汎用データとである。
この前記ユニット制御部116Bは、データ入力部101Aに入力された制御データに含まれる制御コードが、積和計算一次値を初期化することを示す場合には、積和計算一次値記憶部131に記憶されている積和計算一次値情報の値を0に初期化する。
またユニット制御部116Bは、データ入力部101Aに入力された制御データに含まれる制御コードが、積和計算一次値を算出し加算格納することを示し、該制御データが出力値と該出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報とを含む場合には、配信ユニット識別情報を前段ユニット出力記憶部138Bに記憶し、出力値に基づいて積和計算一次値算出部111Aを用いて処理を選択的に実行する。
また、ユニット制御部116Bは、データ入力部101Aに入力された制御データに含まれる制御コードがユニット出力演算を実行することを示す場合には、ユニット出力算出部112Aを用いて処理を選択的に実行する。
また、ユニット制御部116Bは、データ入力部101Aに入力された制御データに含まれる制御コードがアクティブなユニットとして出力値を出力することを示し、該制御データが選択ユニット番号を含む場合であり、かつ、比較部115B(ユニット番号一致判定部)が判定した結果が一致である場合には、データ出力部104Aの処理を用いて処理を選択的に実行し、演算結果をユニット出力記憶部135Aから読み出し、該読み出した演算結果を出力値として分配制御部8にデータ出力部104Aとユニット出力バス2とを介して出力する。
なお、ユニット出力記憶部135Aに層情報と演算結果とが関連付けて記憶されている場合においては、ユニット制御部116Bは、データ入力部101Aに入力された制御データに含まれる制御コードがアクティブなユニットとして出力値を出力することを示し、該制御データが選択ユニット番号を含む場合であり、かつ、比較部115Bが判定した結果が一致である場合には、データ出力部104Aの処理を選択的に実行し、層情報記憶部133から読み出した層情報に該当する演算結果をユニット出力記憶部135Aから読み出し、該読み出した演算結果を出力値として分配制御部8にデータ出力部104Aとユニット出力バス2とを介して出力する。
また、ユニット制御部116Bは、データ入力部101Aに入力された制御データが配信層情報を含む場合には、データ入力部101Aに入力された制御データに含められた配信層情報を層情報記憶部133に記憶する。
詳細には、ユニット制御部116Bは、データ入力部101Aに入力された制御データが配信層情報を含む場合には、データ入力部101Aに入力された制御データから配信層情報を抽出し、抽出した配信層情報を層情報記憶部133に記憶する。また、このユニット制御部116Bは、汎用バッファー記憶部153Bから配信層情報を読み出すことにより、データ入力部101Aに入力された制御データから配信層情報を抽出する。
またユニット制御部116Bは、出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報を、データ入力部101Aに入力された制御データが含む場合には、データ入力部101Aに入力された制御データに含められた配信ユニット識別情報を前段ユニット出力記憶部138Bに記憶する。
詳細には、ユニット制御部116Bは、出力値を出力しているユニットのユニット識別情報である配信ユニット識別情報を、データ入力部101Aに入力された制御データが含む場合には、データ入力部101Aに入力された制御データから配信ユニット識別情報を抽出し、抽出した配信ユニット識別情報をユニット番号記憶部139Bに記憶する。また、このユニット制御部116Bは、汎用バッファー記憶部153Bから配信ユニット識別情報を読み出すことにより、データ入力部101Aに入力された制御データから配信ユニット識別情報を抽出する。
積和計算一次値算出部111Aは、ユニット制御部116Bの選択に応じて、層情報記憶部133から読み出した層情報に該当する結合荷重を重み記憶部130から読み出し、該読み出した結合荷重と、データ入力部101Aに入力された入力値とを乗算し、該乗算した値を積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる。
また、積和計算一次値算出部111Aは、ユニット制御部116Bの選択に応じて、前段ユニット出力記憶部138Bから読み出したユニット識別情報と層情報記憶部133から読み出した層情報とに該当する結合荷重を重み記憶部130から読み出し、該読み出した結合荷重と、データ入力部101Aに入力された入力値とを乗算し、該乗算した値を前記積和計算一次値記憶部131に記憶されている積和計算一次値情報に加算して記憶させる。
ユニット出力算出部112Aは、ユニット制御部116Bの選択に応じて、積和計算一次値記憶部131から積和計算一次値情報を読み出し、層情報記憶部133から読み出した層情報に該当する出力関数を関数記憶部132から読み出し、該読み出した出力関数に読み出した積和計算一次値情報を代入することにより出力値を算出し、該算出した出力値をユニット出力記憶部135Aに記憶させる。また、ユニット出力算出部112Aは、この算出した出力値をユニット出力記憶部135Aに記憶させるときに、層情報記憶部133から読み出した層情報と関連付けて、この算出した出力値を前記ユニット出力記憶部135Aに記憶させる。
<第3の実施形態における制御データのプロトコル>
次に、図18を用いて、一例としての制御データのプロトコルについて説明する。この制御データは、制御コードAと、選択ユニット番号Bと、出力値Cとを含み、更に、配信層情報Dと、配信ユニット識別情報Eと、を含む。この配信層情報Dとは、出力値Cを出力しているユニットの層情報であり、また、配信ユニット識別情報Eとは、出力値Cを出力しているユニットのユニット識別情報である。この制御コードのプロトコルは、制御コードの値により、次に示すように予め定められている。
<選択処理0>
制御データに含まれる制御コードAの値が“0”であり、“積和計算一次値を初期化する”ことを示す制御コードである場合には、この制御データは、他の情報(汎用データ)を含んでいない。この制御コードAの値が“0”である制御データを受信した全てのユニットは、積和計算一次値算出部111Aに記憶されている積和計算一次値の値を0に初期化する。
<選択処理1>
また、制御データに含まれる制御コードAの値が“1”であり、“積和計算一次値を算出し加算格納する”ことを示す制御コードである場合には、この制御データは、出力値Cと、配信層情報Dと、配信ユニット識別情報Eと、を含む。この制御コードAの値が1である制御データを受信した全てのユニットは、層情報lを配信層情報Dとし、ユニット識別情報iを配信ユニット識別情報Eとし、入力値の値を出力値Cとして、積和計算一次値を算出する。
<選択処理2>
また、制御データに含まれる制御コードAの値が“2”であり、“ユニット出力演算を実行する”ことを示す制御コードである場合には、この制御データは、配信層情報Dを含む。この制御コードAの値が“2”である制御データを受信した全てのユニットは、層情報lを配信層情報Dとして、ユニット出力演算を実行し、実行した演算結果を出力値として層情報lと関連付けてユニット出力記憶部135Aに格納する。
<選択処理3>
また、制御データに含まれる制御コードAの値が“3”であり、“アクティブなユニットとして出力値を出力する”ことを示す制御コードである場合には、制御データは、選択ユニット番号Bと配信層情報Dとを含む。この制御コードAの値が“3”である制御データを受信した全てのユニットは、受信した制御データに含まれる選択ユニット番号Bが、自身のユニットが有する固有ユニット番号Iと一致するか否かを判定し、判定した結果が一致する場合には、層情報lを配信層情報Dの値とし、この層情報lに該当するユニット出力記憶部135Aから読み出した出力値を出力する。
この図18の制御データのプロトコルに基づいて、分配制御部9は、積和計算一次値を初期化することを示す制御コード、出力値と配信ユニット識別情報とを含み、積和計算一次値を算出し加算格納することを示す制御コード、ユニット出力演算を実行することを示す制御コード、アクティブなユニットとして出力値を出力することを示す制御コード、または、前記配信層情報を含む制御データを、階層型ニューラルネットワークの階層数と該階層のノード数とに合わせて予め定められた順序で出力する。
<第3の実施形態におけるユニットの動作>
次に、図19を用いて、図18で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部116の動作について説明する。
まず、ユニットは、データ入力部101Aに制御データが入力されたことに応じて、処理を開始する(ステップS1901)。次に、ファンクション番号抽出部150Bが、データ入力部101Aに入力された制御データから、制御コードを抽出し、抽出した制御コードをファンクション番号記憶部151Bに記憶させる。
また、オペランド抽出部152Bが、データ入力部101Aに入力された制御データから、オペランドである制御コード以外の情報、例えば、選択ユニット番号Bと、出力値Cと、配信層情報Dと、配信ユニット識別情報Eとを抽出し、抽出したオペランドを汎用バッファー記憶部153Bに記憶させる。
次に、ユニット制御部116Bが、ファンクション番号抽出部150Bが制御コードを抽出したことに応じて、ファンクション番号記憶部151Bから読み出した制御コードの値に基づいて、以降に説明するステップS1902からステップS1908により、ユニットにおける処理を選択的に実行する。
まず、ユニット制御部116Bは、読み出した制御コードAの値が“0”であるか否かを判定する(ステップS1902)。ステップS1902の判定結果が、読み出した制御コードAの値が“0”である場合には、ユニット制御部116Bは、上記に説明した選択処理0を実行し(ステップS1903)、処理を終了する。
一方、ステップS1902の判定結果が、読み出した制御コードAの値が“0”でない場合には、ユニット制御部116Bは、読み出した制御コードAの値が“1”であるか否かを判定する(ステップS1904)。ステップS1904の判定結果が、読み出した制御コードAの値が“1”である場合には、ユニット制御部116Bは、上記に説明した選択処理1を実行し(ステップS1905)、処理を終了する。
一方、ステップS1904の判定結果が、読み出した制御コードAの値が“1”でない場合には、ユニット制御部116Bは、読み出した制御コードAの値が“2”であるか否かを判定する(ステップS1905)。ステップS1905の判定結果が、読み出した制御コードAの値が“2”である場合には、ユニット制御部116Bは、上記に説明した選択処理2を実行し(ステップS1906)、処理を終了する。
一方、ステップS1905の判定結果が、読み出した制御コードAの値が“2”でない場合には、つまり、読み出した制御コードAの値が“3”である場合には、比較部115Bが、選択ユニット番号記憶部141Bから読み出した選択ユニット番号と固有ユニット番号記憶部140Bから読み出した固有ユニット番号とが一致するか否かを判定する(ステップS1907)。ステップS1907の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部116Bは、上記に説明した選択処理3を実行し(ステップS1908)、処理を終了する。一方、ステップS1907の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
<第3の実施形態における分配制御部8の動作>
次に、図20と図21とを用いて、第2の基本構成による並列演算装置を階層型ニューラルネットワークに適応した場合の分配制御部8の動作について説明する。なお、分配制御部8が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図17から図19を用いて既に説明したので、ここでは、分配制御部8の動作のみについて説明する。なお、ここでも図6の階層型ニューラルネットワークに、第2の基本構成による並列演算装置を適応した場合について説明する。
まず、図20(a)を用いて、階層型ニューラルネットワークに適応した場合における、分配制御部8の動作概要について説明する。まず、各ユニットの初期設定(初期化)をする(ステップS2001)。次に、外部から入力端子P2を介して入力層L1のノード用の入力データ(パターン入力)である入力の指示を受けて、受けた入力を、中間層(隠れ層)L2のノードとしての各ユニットに、分配制御部8が入力層L1として、分配することにより、各ユニットを用いて中間層L2の積和計算を並列に実行する(ステップS2002)。このステップS2002では、分配制御部8が入力層L1のノードとして、中間層L2のノードとなる各ユニットに出力値を出力している。
次に、階層型ニューラルネットワークの全ての中間層(層情報カウンタ変数l=2、・・・L+1)について、中間層積和計算(ステップS2004)の処理を繰り返す(ステップL2002からステップL2005の層ループ処理)。ここで、Lは、中間層の総数(中間層総数)の値であり、図6の3階層である階層型ニューラルネットワークにおいては、この中間層総数Lの値は1である。このステップS2004の中間層積和計算は、後に図21(a)を用いて詳述する。
このステップL2002からステップL2005の層ループ処理により、階層型ニューラルネットワークの中間層のノードとしての処理が階層型ニューラルネットワークの層において、入力層L1から出力層L3の方向に順に実行され、最終的には、各ユニットには出力層L3としての演算結果の値が記憶される。なお、このステップL2002からステップL2005のループにおいては、いずれか1つのユニットは、出力をする層としてのアクティブなユニットとして機能し、全てのユニットは入力を受ける層のノードとして機能する。
次に、出力層L3のノードとしてのユニットに出力値を、ユニット識別情報で識別されるユニットの順に出力させる(ステップS2006)ことにより、階層型ニューラルネットワークの出力層L3に属するノードとなる全てのユニットからの演算結果を順に受信する。また、この順に受信した演算結果を、入力されたパターン入力に対しての階層型ニューラルネットワーク演算装置の演算結果として、出力端子P1を介して外部に順に出力する。
以上のステップS2001からステップS2006の処理により、この並列演算装置は、外部から入力された入力データ(パターン入力)である入力に応じて、階層型ニューラルネットワークの演算を複数のユニットを用いて並列に実行し、この実行した演算結果を、外部に出力することができる。
次に、図20(b)、図20(c)、図21(a)、および、図21(b)を用いて、図20(a)の各処理について詳細に説明する。なお、ここでは、図20(b)、図20(c)、図21(a)、および、図21(b)の処理を、図20(a)の各処理についての関数またはサブルーチンとして説明する。
最初に、図20(b)を用いて、図20(a)のステップS2001の処理を詳細に説明する。まず、制御コードAの値を“0”とした制御データを出力し(ステップS20011)、次に、処理を戻す。
次に、図20(c)を用いて、図20(a)のステップS2002の処理を詳細に説明する。まず、カウンタ変数iの値を0から、1、2、・・・N(1)まで順次増加させながら、次のステップS20022とステップS20023との処理を繰り返す(ステップL20021とステップL20024の入力ループ)。このN(1)は、層識別情報の値が1である層のノード数の値、つまり、入力層L1のノード数の値である。例えば、図6の階層型ニューラルネットワークにおいては、この入力層L1のノード数の値は3である。
このステップS20022では、パターン入力xi (l)を外部から入力する。次に、このステップS20023では、制御コードAの値を“1”とし、出力値Cの値をステップS20022で外部から入力されたパターン入力xi (1)とし、配信層情報Dの値をカウンタ変数iとし、配信ユニット識別情報Eの値を1とした制御データを、各ユニットに出力する。
次に、制御コードAの値を“2”とし、配信層情報Dの値を1とした制御データを、各ユニットに出力し(ステップS20025)、処理を戻す。
次に、図21(a)を用いて、図20(a)のステップS2004の処理を詳細に説明する。まず、カウンタ変数iの値を0から、1、2、・・・N(l)まで順次増加させながら、次のステップS20042からステップS20044の処理を繰り返す(ステップL20041とステップL20045の入力ループ)。このN(l)は、層識別情報の値が層情報カウンタ変数lである層のノード数の値である。
このステップS20042では、制御コードAの値を“3”とし、選択ユニット番号Bをカウンタ変数iとし、配信層情報Dを層情報カウンタ変数lとした制御データを、各ユニットに出力する。また、このステップS20043では、ステップS20042で出力した選択ユニット番号Bであるカウンタ変数iと固有ユニット番号とが一致したユニットから出力された出力値xi (l)を入力する。また、このステップS20044では、制御コードAの値を“2”とし、出力値CをステップS20043でユニットから入力された出力値xi (l)とし、配信層情報Dをカウンタ変数iとし、配信ユニット識別情報Eを層情報カウンタ変数lとした制御データを、各ユニットに出力する。
次に、制御コードAの値を“2”とし、配信層情報Dを層情報カウンタ変数lとした制御データを、各ユニットに出力し(ステップS20046)、処理を戻す。
次に、図21(b)を用いて、図20(a)のステップS2006の処理を詳細に説明する。まず、カウンタ変数iの値を0から、1、2、・・・N(L+2)まで順次増加させながら、次のステップS20062からステップS20064の処理を繰り返し(ステップL20061とステップL20065の出力ループ)、処理を戻す。このN(L+2)は、層識別情報の値が(中間層総数L+2)である層のノード数の値であり、つまり、出力層L3のノードの数である。例えば、図6の階層型ニューラルネットワークにおいては、この出力層L3のノード数の値は3である。
このステップS20062では、制御コードAの値を“3”とし、選択ユニット番号Bをカウンタ変数iとし、配信層情報Dを(中間層総数L+2)とした制御データを、各ユニットに出力する。また、このステップS20063では、ステップS20062で出力した選択ユニット番号Bであるカウンタ変数iと固有ユニット番号とが一致したユニットから出力された出力値xi (L+2)を入力する。また、このステップS20064では、ステップS20063でユニットから入力された出力値xi (L+2)を、出力端子P1を介して外部に出力する。
以上の処理により、この第3の実施形態による階層型ニューラルネットワークに適応した場合の並列演算装置は、第1の実施形態による階層型ニューラルネットワークに適応した場合の並列演算装置と同様に、階層型ニューラルネットワークを実行することができ、また、第1の実施形態による階層型ニューラルネットワークと同様の効果を奏することが可能である。
<第4の実施形態>
<自己組織化マップに適応した場合のユニットの構成>
次に、第2の基本構成による並列演算装置を、自己組織化マップに適応した場合の構成について説明する。自己組織化マップにおいても並列演算装置全体の構成は、図14の並列演算装置の構成と同一であり、ユニットの構成のみが異なる。従って、図22を用いて、自己組織化マップに適応した場合のユニットの構成のみについて説明する。
ここで、第1の基本構成における自己組織化マップの並列演算装置においては、最小のノルムを有するユニットの決定は、各ユニットがノルムを算出し、次に、ユニット間でノルムの大小を順に比較していた。これに対して、この第2の基本構成における自己組織化マップの並列演算装置においては、各ユニットがノルムを算出した後に、分配制御部8の制御に基づいて、各ユニットが算出したノルムを順に分配制御部8にユニット出力バス2を介して出力する。次に、分配制御部8が、入力されたノルムの中から最小となるノルムを選択することにより、最小のノルムを有するユニットを決定する。
また、第1の基本構成における自己組織化マップの並列演算装置においては、各ユニットが、学習回数に関連付けて学習速度と近傍距離とを予め内部の記憶部(学習速度記憶部と近傍距離記憶部)に記憶していた。これに対して第2の基本構成における自己組織化マップの並列演算装置においては、分配制御部8が、内部に有する学習速度記憶部と近傍距離記憶部とに、学習回数に関連付けて学習速度と近傍距離とを記憶する。また、各ユニットは、1つの値の学習速度と近傍距離とを内部の記憶部(学習速度記憶部と近傍距離記憶部)に記憶する。また、分配制御部8が、学習回数に応じて、学習速度記憶部と近傍距離記憶部とを各ユニットに制御データに含めて配信し、各ユニットが、内部の記憶部(学習速度記憶部と近傍距離記憶部)の学習速度記憶部と近傍距離記憶部とを、分配制御部8から受信した制御データに含まれている学習速度記憶部と近傍距離記憶部とに更新する。
以上のように、分配制御部8が、学習回数に応じて、学習速度記憶部と近傍距離記憶部とを各ユニットに制御データに含めて配信するようにすることにより、全てのユニットが学習回数に関連付けて学習速度と近傍距離とを予め内部の記憶部しておく必要がなくなるという効果を奏する。また、例えば、学習速度と近傍距離との変化の度合いを学習回数に応じて早くするまたは遅くするなどの、学習回数に関連付いた学習速度と近傍距離との変化の仕方を変更する場合には、学習回数と関連付けて学習速度記憶部と近傍距離記憶部とを記憶している分配制御部8内部の記憶部の情報のみを変更するのみでよく、変更が簡易となる効果を奏する。
また、自己組織化マップに適応した場合のユニットは、第2の実施形態と同様に、ネットワーク座標により識別される座標で予め識別されている。そこで、第4の実施形態においては、固有ユニット番号をネットワーク座標として説明する。なお、各ユニットは、第2の実施形態または第3の実施形態と同様に、同一の構成を有しているので、ここでは図22を用いて1つのユニットの構成のみについて説明する。
ユニットは、データ入力部201Aと、データ出力部204Aと、距離記憶部232Aと、重み記憶部231Aと、ノルム算出部214Aと、近傍判定部215Aと、重み更新部216Aと、ユニットネットワーク座標記憶部234Aと、入力ネットワーク座標記憶部233Aと、学習速度記憶部235Aと、ユニットノルム記憶部236Aと、入力データ記憶部230Aと、実数ベクトル次元数記憶部242Bと、比較部215Bと、ユニット制御部216Bと、ファンクション番号抽出部250Bと、ファンクション番号記憶部251Bと、オペランド抽出部252Bと、汎用バッファー記憶部253Bと、を有する。
ここで、図22のデータ入力部201A、データ出力部204A、ユニットノルム記憶部236Aと重み記憶部231Aは、図15のデータ入力部11A、データ出力部14A、ユニット出力記憶部16Aに、それぞれ対応する。また、図22のユニットネットワーク座標記憶部234A、比較部215Bが、図15の固有ユニット番号記憶部21A、ユニット番号一致判定部20Aに、それぞれ対応する。これらの図22と図15とにおいて対応する構成について、共通の機能については、その説明を省略する。
また、図22のファンクション番号抽出部250Bとファンクション番号記憶部251Bとが図15の制御コード抽出部17Aに対応する。また、図22のオペランド抽出部252Bと汎用バッファー記憶部253Bとが、図15の入力値抽出部18Aまたは選択ユニット番号抽出部19Aに対応する。
また、図22の構成において、図7と図8との第1の基本構成における自己組織化マップに適応した場合の並列演算装置のユニットの構成と同様の構成には、同一の符号、または、同一の符号に符号Aを付した符号を付け、その説明を省略する。
<第4の実施形態におけるユニットの各構成の説明>
ファンクション番号記憶部251Bには、制御データに含まれる制御コード(ファンクション番号)が記憶される。汎用バッファー記憶部253Bには、制御データに含まれる制御コードA(ファンクション番号)以外の情報、例えば、後述する入力ネットワーク座標B、入力学習速度C、入力近傍距離D、入力重みW、入力次元数N、または、入力値Xが記憶される。
以降において、制御データに含まれる制御コードA(ファンクション番号)以外の情報、例えば、後述する入力ネットワーク座標B、入力学習速度C、入力近傍距離D、入力重みW、入力次元数N、または、入力値Xを汎用データとして説明する。この制御データの詳細については、図23を用いて後述する。
ファンクション番号抽出部250Bは、データ入力部201Aに入力された制御データに含まれる制御コードを抽出し、抽出した制御コードをファンクション番号記憶部251Bに記憶させる。オペランド抽出部252Bは、データ入力部201Aに入力された制御データに含まれる汎用データを抽出し、抽出した汎用データを汎用バッファー記憶部253Bに記憶させる。
ユニット制御部216Bは、データ入力部201Aに入力された制御データと比較部215Bが判定した結果とに基づいて、処理を実行する、または、予め定められた処理部の中から選択的に処理を実行させる。このデータ入力部201Aに入力された制御データとは、ファンクション番号記憶部251Bから読み出した制御コードと、汎用バッファー記憶部253Bから読み出した汎用データとである。
また、図22の距離記憶部232Aと、ノルム算出部214Aと、近傍判定部215Aと、重み更新部216Aと、入力ネットワーク座標記憶部233Aと、学習速度記憶部235Aと、入力データ記憶部230Aと、実数ベクトル次元数記憶部242Bと、ユニット制御部216Bとが、図15のユニット演算部15Aに対応する。なお、図22の重み記憶部231Aは、図15のユニット演算部15Aとユニット出力記憶部16Aとに対応する。
また、ユニット制御部216Bの詳細と他の構成とについては、次に図23を用いて、一例としての制御データのプロトコルの説明とともに説明する。
<第4の実施形態における制御データのプロトコル>
次に、図23を用いて、一例としての制御データのプロトコルについて説明する。この制御データは、制御コードAと、入力ネットワーク座標Bと、入力学習速度Cと、入力近傍距離Dと、入力結合重みベクトルW(W1、W2、・・・)と、入力次元数Nと、入力ベクトルX(X1、X2、・・・)と、を含む。この制御コードのプロトコルは、制御コードの値により、次に示すように予め定められている。
<選択処理4>
制御データに含まれる制御コードAの値が“4”であり、“重みを設定する”ことを示す場合には、この制御データは、入力ネットワーク座標Bと入力結合重みベクトルW(W1、W2、・・・)とを含んでいる。この制御コードAの値が“4”であり、“重みを設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、入力ネットワーク座標記憶部233Aに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Bに更新するとともに、比較部215Bが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部215Bの判定結果が一致する場合には、ユニット制御部216Bが、重み記憶部231Aに記憶されている結合重みベクトルを、受信した制御データに含まれる入力結合重みベクトルW(W1、W2、・・・)に更新する。
<選択処理5>
制御データに含まれる制御コードAの値が“5”であり、“学習速度と近傍距離とを設定する”ことを示す場合には、この制御データは、入力学習速度Cと、入力近傍距離Dと、を含んでいる。この制御コードAの値が“5”であり、“学習速度と近傍距離とを設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、学習速度記憶部235Aに記憶されている学習速度を受信した制御データに含まれる入力学習速度Cに更新するとともに、距離記憶部232Aに記憶されている基準距離を受信した制御データに含まれる入力近傍距離Dに更新する。
<選択処理6>
制御データに含まれる制御コードAの値が“6”であり、“実数ベクトルの次元数を設定する”こと示す場合には、この制御データは、入力次元数Nを含んでいる。この制御コードAの値が“6”であり、“実数ベクトルの次元数を設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、実数ベクトル次元数記憶部242Bに記憶されている次元数を受信した制御データに含まれる入力次元数Nに更新する。
<選択処理7>
制御データに含まれる制御コードAの値が“7”であり、“ノルムを算出する”ことを示す場合には、この制御データは、入力ベクトルX(X1、X2、・・・)を含んでいる。この制御コードAの値が“7”であり、“ノルムを算出する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、入力データ記憶部230Aに記憶されている入力データベクトルを入力ベクトルX(X1、X2、・・・)に更新する。次に、ノルム算出部214Aが、該更新した入力ベクトルX(X1、X2、・・・)と、重み記憶部231Aから読み出した結合重みベクトルとのノルムを算出し、該算出したノルムをユニットノルムとしてユニットノルム記憶部236Aに記憶させる。
<選択処理8>
制御データに含まれる制御コードAの値が“8”であり、“ノルムを出力する”ことを示す場合には、この制御データは、入力ネットワーク座標Bを含んでいる。この制御コードAの値が“8”であり、“ノルムを出力する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、入力ネットワーク座標記憶部233Aに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Bに更新するとともに、比較部215Bが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部215Bの判定結果が一致する場合には、ユニット制御部216Bが、ユニットノルム記憶部236Aから読み出したユニットノルムを、データ出力部204Aとユニット出力バス2とを介して分配制御部8に出力する。
<選択処理9>
制御データに含まれる制御コードAの値が“9”であり、“学習する”ことを示す場合には、この制御データは、入力ネットワーク座標Bを含んでいる。この制御コードAの値が“9”であり、“学習する”ことを示す制御データを受信した全てのユニットは、ユニット制御部216Bが、入力ネットワーク座標記憶部233Aに記憶されている入力ネットワーク座標を、制御データに含まれていた入力ネットワーク座標Bに更新する。次に、ユニットの近傍判定部215Aが、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部233Aから読み出した入力ネットワーク座標との間の距離を算出し、該算出した距離が、距離記憶部232Aから読み出した距離以下であるか否かを判定することにより、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標が、入力ネットワーク座標記憶部233Aから読み出した入力ネットワーク座標の近傍にあるか否かを判定する。次に、近傍判定部215Aの判定した結果が近傍である場合には、重み更新部216Aが、入力データ記憶部230Aから読み出した入力データベクトルと重み記憶部231Aから読み出した結合重みベクトルとの差を算出し、該算出した差に学習速度記憶部235Aから読み出した学習速度係数を乗じた値を、重み記憶部231Aに記憶されている結合重みベクトルに加算し、重み記憶部231Aに記憶されている結合重みベクトルを更新することにより、学習する。
<選択処理10>
制御データに含まれる制御コードAの値が“10”であり、“学習結果を出力する”ことを示す場合には、この制御データは、入力ネットワーク座標Bを含んでいる。この制御コードAの値が“10”であり、“学習結果を出力する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部216Bが、入力ネットワーク座標記憶部233Aに記憶されている入力ネットワーク座標の値を、受信した制御データに含まれる入力ネットワーク座標Bに更新するとともに、比較部215Bが、該更新した入力ネットワーク座標とユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とが一致するか否かを判定する。次に、比較部215Bの判定結果が一致する場合には、ユニット制御部216Bが、重み記憶部231Aから読み出した結合重みベクトルを、データ出力部204Aとユニット出力バス2とを介して分配制御部8に出力する。
<第4の実施形態におけるユニットの動作>
次に、図24を用いて、図23で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部216Bの動作について説明する。なお、説明の簡略のために、以降においては制御コードAの値を用いて説明する。この制御コードAの値の意味は、上記に図23の説明と同様である。
まず、ユニットは、データ入力部201Aに制御データが入力されたことに応じて、処理を開始する(ステップS2401)。次に、ファンクション番号抽出部250Bが、データ入力部201Aに入力された制御データから、制御コードを抽出し、抽出した制御コードをファンクション番号記憶部251Bに記憶させる。
また、オペランド抽出部252Bが、データ入力部201Aに入力された制御データから、オペランドである制御コード以外の情報を汎用バッファー記憶部253Bに記憶させる。
次に、ユニット制御部216Bが、ファンクション番号抽出部250Bが制御コードを抽出したことに応じて、ファンクション番号記憶部251Bから読み出した制御コードの値に基づいて、以降に説明するステップS2402からステップS2412により、ユニットにおける処理を選択的に実行する(ステップS2402)。
ステップS2402で、読み出した制御コードの値が“4”である場合には、比較部215Bが、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部233Aから読み出した入力ネットワーク座標とが一致するか否かを判定する(ステップS2403)。ステップS2403の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部216Bは、上記に説明した選択処理4を実行し(ステップS2404)、処理を終了する。一方、ステップ2403の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
一方、ステップS2402で、読み出した制御コードの値が“5”である場合には、ユニット制御部216Bは、上記に説明した選択処理5を実行し(ステップS2405)、処理を終了する。一方、ステップS2402で、読み出した制御コードの値が“6”である場合には、ユニット制御部216Bは、上記に説明した選択処理6を実行し(ステップS2406)、処理を終了する。一方、ステップS2403で、読み出した制御コードの値が“7”である場合には、ユニット制御部216Bは、上記に説明した選択処理7を実行し(ステップS2407)、処理を終了する。
一方、ステップS2402で、読み出した制御コードの値が“8”である場合には、比較部215Bが、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部233Aから読み出した入力ネットワーク座標とが一致するか否かを判定する(ステップS2408)。ステップS2408の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部216Bは、上記に説明した選択処理8を実行し(ステップS2409)、処理を終了する。一方、ステップ2408の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
一方、ステップS2402で、読み出した制御コードの値が“9”である場合には、ユニット制御部216Bは、上記に説明した選択処理9を実行し(ステップS2410)、処理を終了する。
一方、ステップS2402で、読み出した制御コードの値が“10”である場合には、比較部215Bが、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標と入力ネットワーク座標記憶部233Aから読み出した入力ネットワーク座標とが一致するか否かを判定する(ステップS2411)。ステップS2411の判定結果が、選択ユニット番号と固有ユニット番号とが一致する場合には、ユニット制御部216Bは、上記に説明した選択処理10を実行し(ステップS2412)、処理を終了する。一方、ステップ2411の判定結果が、選択ユニット番号と固有ユニット番号とが一致しない場合には、処理を終了する。
上記に図24を用いて説明したように、各ユニットは、ユニットのユニット制御部216Bにより、入力された入力データに含まれる制御コードの値に基づいて、選択的に予め定められた処理を実行する。
<第4の実施形態における分配制御部8の動作>
次に、図25と図26とを用いて、第2の基本構成による並列演算装置を自己組織化マップに適応した場合の、並列演算装置の動作について説明する。なお、並列演算装置は分配制御部8と複数のユニットを有するが、分配制御部8が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図22から図24を用いて既に説明したので、ここでは、分配制御部8の動作のみについて説明する。
まず、図25(a)を用いて、自己組織化マップに適応した場合における並列演算装置の分配制御部8の動作について説明する。まず、各ユニットの初期設定をする(ステップS2501)。この初期設定については、後に図25(b)を用いて詳述する。
次に、学習回数変数t=0、1、2、・・・・Tについて、競合学習(ステップS2503)を繰り返す(ステップL2502からステップL2504の学習ループ処理)。ここで、このTは、競合学習の学習回数である。また、このステップS2502の競合学習については、後に図26(a)を用いて詳述する。
次に、学習した結果を出力する(ステップS2505)。この出力については、後に図26(c)を用いて詳述する。
次に、図25(b)と、図26(a)から図26(c)とを用いて、図25(a)の各処理について詳細に説明する。なお、ここでは、図25(b)と、図26(a)から図26(c)との処理を、図20(a)の各処理についての関数またはサブルーチンとして説明する。
最初に、図25(b)を用いて、図25(a)のステップS2501の初期設定の処理について説明する。まず、パターン入力nを外部から入力する(ステップS250101)。次に、制御コードAの値を“6”、出力値Dの値を入力されたパターン入力nとした制御データを、各ユニットに出力する(ステップS250102)。
次に、ユニットループ変数j=1、2、・・・Nで示されるユニットの順に、次のステップL250104からステップL250106の次元ループとS250107との処理を繰り返す(ステップL250103からステップL250108のユニットループ)。ここで、Nは、ユニットの総数の値である。
このステップL250104からステップL250106の次元ループでは、入力ベクトル次元数i=1、2、・・・nで示される入力ベクトルの次元数の順に、次のステップS250105の処理を繰り返す。このステップS250105では、外部から入力パターンwjiを入力する。ここで、nは、入力ベクトルの次元数である。
また、このステップS250107の処理では、制御コードAの値を“4”、入力ネットワーク座標Bの値をユニットループ変数j、出力値C(C1、C2、・・・Cn)を入力パターンwji(wj1、wj2、・・・wjn)とした制御データを、各ユニットに出力する。
上記のステップL250103からステップL250108の処理により、各ユニットに対して、それぞれのユニット内の重み記憶部231Aの結合重みベクトルを初期設定する。
次に、学習回数変数t=0、1、2、・・・Tについて、ステップS250110の処理を繰り返す(ステップL250109からステップL250111の入力ループ)。このステップS250110では、外部から学習速度η(t)と近傍距離d(t)とを入力し、学習回数変数tと関連付けて入力した学習速度η(t)を内部の学習速度記憶部に記憶するとともに、学習回数変数tと関連付けて入力した近傍距離d(t)を内部の近傍距離記憶部に記憶する。
次に、後に図26(b)を用いて説明する最小ノルム判定に用いるダミー変数であるノルム最小値dminの値を−1に設定し(ステップS250112)、処理を戻す。
次に、図26(a)を用いて、図25(a)のステップS2503の競合学習の処理について説明する。まず、制御コードAの値を“5”、入力学習速度Cを内部の学習速度記憶部から読み出した学習速度η(t)、入力近傍距離Dを内部の近傍距離記憶部から読み出した近傍距離d(t)とした制御データを各ユニットに出力する(ステップS250301)。
次に、次元ループ変数i=1、2、・・・nについて、次のステップS250303の処理を繰り返す(ステップL250302からステップL250304の次元ループ)。このステップS250303では、外部からパターン入力xiを入力する。
次に、制御コードAの値を“7”、入力ベクトルC(C1、C2、・・・Cn)をステップL250302からステップL250304で外部から入力したパターン入力x(x1、x2、・・・xn)とした制御データを各ユニットに出力する(ステップS250305)。
次に、ユニットループ数変j=1、2、・・・Nについて、次のステップS250307とステップS250308とステップS250309との処理を繰り返す(ステップL250306からステップL250310のユニットループ)。このステップS250307では、制御コードAの値を“8”、入力ネットワーク座標Bの値をユニットループ変数j、とした制御データを各ユニットに出力する。また、このステップS250308では、ステップS250307で制御コードAの値を“8”、入力ネットワーク座標Bの値をユニットループ数変j、とした制御データに対して、ユニットネットワーク座標が入力ネットワーク座標Bであるユニットループ数変jに一致するユニットからのノルムの出力を、ノルムdnとして入力する。
また、このステップS250309では、ステップS250308で入力したノルムdnに基づいて、最小ノルム判定の処理を実行する。このステップS250309における最小ノルム判定の処理については、後に、図26(b)を用いて詳細に説明する。
上記のステップL250306からステップL250310の処理により、各ユニットで算出されたノルムを全てのユニットから順に入力し、ステップS250309の処理にて入力したノルムを順に比較することにより、全てのユニットからのノルムの出力の中から最小となるノルムと、該最小となるノルムを出力したユニットを識別する識別情報であるユニットネットワーク座標をノルム最小ユニットネットワーク座標jminとして選択する。
次に、制御コードAの値を“9”、入力ネットワーク座標Bの値をノルム最小ユニットネットワーク座標jmin、とした制御データを各ユニットに出力する。これにより、各ユニットは、入力されたノルム最小ユニットネットワーク座標jminに基づいて、近傍となるユニットが学習をする。
次に、図26(b)を用いて、図26(a)のステップS250309の最小ノルム判定の処理について説明する。
まず、ステップS250308で入力したノルムdnがノルム最小値dminより小さいか否か、または、ノルム最小値dminの値が−1であるか否かを判定する(ステップS2503091)。ステップS2503091で判定した結果が、入力したノルムdnがノルム最小値dminより小さい場合、または、ノルム最小値dminの値が−1である場合には、ノルム最小値dminを入力したノルムdnとするともに、ノルム最小ユニットネットワーク座標jminをユニットループ変数jとし(ステップS2503092)、処理を戻す。
一方、ステップS2503091で判定した結果が、入力したノルムdnがノルム最小値dminより小さくない場合であって、かつ、ノルム最小値dminの値が−1でない場合には、処理を戻す。
次に、図26(c)を用いて、図25(a)のステップS2505の出力の処理について説明する。まず、ユニットループ変数j=0、1、2、・・・Nについて、次のステップS250502の処理とステップL250503からステップL250506の次元ループの処理とを繰り返す(ステップL250501からステップL250507のユニットループ)。
このステップS250502では、制御コードAの値を“10”、入力ネットワーク座標Bの値をユニットループ変数j、とした制御データを各ユニットに出力する。
また、このステップL250503からステップL250506の次元ループの処理では、次元ループ変数i=1、2、・・・nについて、次のステップS250504とステップS250505との処理を繰り返す。このステップS250504では、ステップS250502で出力した制御データに応じたユニットからの出力である結合重みベクトルを、結合重みベクトルwjiとして入力する。次に、このステップS250505では、ステップS250504でユニットから入力した結合重みベクトルwjiを外部に出力する。
以上の、ステップL250501からステップL250507の処理により、まず、各ユニットから順に結合重みベクトルを出力させ(ステップS250502)、次に、ステップS250502に応じて各ユニットが順に出力した結合重みベクトルを順に入力する(ステップS250504)。次に、ステップS250504で各ユニットから順に入力した結合重みベクトルを、順に外部に自己組織化マップの演算結果として出力する(ステップS250505)。
以上の図22から図26を用いて説明した第2の基本構成による自己組織化マップに適応した場合の並列演算装置は、第1の基本構成による自己組織化マップに適応した場合の並列演算装置と同様に、自己組織化マップの演算を実行し、実行した結果を外部に出力することが可能である。
また、第2の基本構成による自己組織化マップに適応した場合の並列演算装置は、第1の基本構成による自己組織化マップに適応した場合の並列演算装置と比較して、その構成が簡易であるという効果がある。また、入力ベクトルの次元数や学習速度や近傍距離の変更など、自己組織化マップにおける様々な変数の値の設計変更が容易であるという効果がある。
<分離構成>
次に、図27を用いて、図14の第2の基本構成による並列演算装置において、各ユニットと分配制御装置8とを、分離構成とした場合の並列演算装置の構成について説明する。
この図27の並列演算装置は、図14の並列演算装置に対して、互いに接続可能な接続部9Aと接続部9Bとを有する。この接続部9Aと接続部9Bとを介して、ユニットAU1からユニットAU10の全てのユニットと分配制御装置8とは、ユニット出力バス2とユニット入力バス3とにより接続される。例えば、この接続部9Aと接続部9Bとは、互いに嵌合する部材であることが望ましい。
また、図27に示すように、互いに接続可能な接続部9Aと接続部9Bとにより、ユニットAU1からユニットAU10の全てのユニットと接続部9Bとを1つの装置(装置B)とし、分配制御装置8と接続部9Aとを1つの装置(装置A)とする。
この場合、例えば、この接続部9Aと接続部9Bとは、USB(Universal Serial Bus)(登録商標)コネクタのメスとオスとし、また、装置BをUSB機器とし、装置Aをパーソナルコンピュータとしてもよい。以上のように、ユニットと分配制御装置8とを別の装置として構成し、分配制御装置8をパーソナルコンピュータとすることにより、並列演算装置全体の構成がより簡易となり、安価に製造可能となる。
また、分配制御装置8をパーソナルコンピュータとすることにより、予め定められた制御の手順などを、コンピュータプログラミングすることにより、より簡易に制御の手順が作成可能となる。また、分配制御装置8であるパーソナルコンピュータは、入力手段としてのキーボードや、表示手段または出力手段としてのモニタも有しているため、よりユーザが簡易に並列演算装置を用いることが可能となる。
なお、接続部9Aと接続部9BとはUSBコネクタに限られるものではなく、他の規格のコネクタでもよいし、または、通信ネットワークのコネクタであってもよい。通信ネットワークのコネクタの場合には、ユニットAU1からユニットAU10と配制御装置8との間の接続は、接続部9Aと接続部9Bとを介した通信プロトコルを用いた通信接続であってもよいし、接続部9Aと接続部9Bとが、通信プロトコルを制御するようにしてもよい。
また、装置Bを拡張基盤装置として構成し、この拡張基盤装置を、パーソナルコンピュータである分配制御装置8の拡張スロットに接続するようにしてもよい。例えば、拡張基盤装置として構成された装置Bが、例えば、PCI(Peripheral Component Interconnect)規格またはPCI−Express規格のバスに準じたボードであってもよい。また、この場合には、装置Aであるパーソナルコンピュータは、接続部9Aとして、例えば、PCI規格またはPCI−Express規格に準じた拡張スロットを有するようにしてもよい。
<第5の実施形態:ユニット間のノルムの比較を高速にする実施形態>
<トーナメント方式の原理>
次に、第5の実施形態として、第2または第4の実施形態における自己組織化マップに適応した並列演算装置において、ユニット間のノルムの比較を高速にする実施形態について説明する。
第2の実施形態における自己組織化マップに適応した並列演算装置においては、予め定められた順序で、ユニットがトークンとともにノルムを出力し、ノルムを入力したユニットが、入力したノルムとそのユニットが算出したノルムとを比較し、小さい方のノルムを出力する。これを、全てのユニットの間で順に繰り返すことにより、全てのユニットで最小となるノルムを算出していた。そのため、ユニットの数がN個(ここで、Nは任意の自然数)の場合、ノルムの比較には、(N−1)回の比較が必要であり、また、(N−1)回の比較をする時間が必要であった。
また、第4の実施形態における自己組織化マップに適応した並列演算装置においては、各ユニットが算出したノルムを順に出力し、分配制御装置部が、入力されたノルムを順に比較し、最小のノルムを選択した。この場合、ユニットがノルムを分配制御装置部に順に出力するために、ユニットの数がN個の場合、全てのユニットがノルムを出力するには(N−1)回の出力が必要であり、また、(N−1)回の出力をする時間が必要であった。また、分配制御装置部における比較においても、分配制御装置部に入力されたユニットを順に比較するため、(N−1)回の比較が必要であり、また、(N−1)回の比較をする時間が必要であった。
第5の実施形態における自己組織化マップに適応した並列演算装置においては、各ユニットが算出したノルムで、最小となるノルムを選択する場合、トーナメント方式を用いることにより、ノルムを比較する時間を、N回の比較をする時間より低減する。
ここで、トーナメント方式とは、例えば、図28に示すように、例えば、AとBとCとDとの4つのユニットがある場合、ユニットAとユニットBとのノルムを比較するとともに、並列して、ユニットCとユニットDとのノルムを比較する。次に、ユニットAとユニットBとでノルムが小さかったユニットと、ユニットCとユニットDとでノルムが小さかったユニットとで、ノルムを比較する。
これにより、図28に示す4個のユニットの場合には、この4個(=N)のユニットに対して、第2の実施形態または第4の実施形態のように順に1つずつ比較していく方式では、3回(N−1)の比較時間が必要であったのに対して、2回の比較時間で、最小となるユニットを選択することが可能となる。
一般には、図28に示すように、2個ずつのユニットのノルムを並列に比較するトーナメント方式の場合には、その比較に要する時間はlog2(N)回となり、第2の実施形態または第4の実施形態のように順に1つずつ順にユニットのノルムを比較していく方式の場合に要する(N−1)回の時間に対して、比較に要する時間を大幅に低減することができる。なお、ユニットの個数Nが増大するに従い、トーナメント方式による比較に要する時間はより低減される。例えば、512個のユニットの場合には、第2の実施形態または第4の実施形態のように順に1つずつ順にユニットのノルムを比較していく方式では、511回の比較時間を要するのに対して、トーナメント方式による比較に要する時間は8回の比較時間を要するのみでよい。
<ユニットの配置の第1例>
次に、図29を用いて、ユニットを2次元平面に配置した場合に、上記に説明したトーナメント方式により、最小となるユニットを選択する方法について説明する。
ここでは、図29に示すように、横軸であるX軸方向に、ユニットのX軸座標が1から12であり、縦軸であるY軸方向に、ユニットのY軸座標が1から9の、108(=12×9)個のユニットが平面上に配置されている場合について説明する。
ここで、図29を用いた説明においては、ユニットの表記を簡単にするために、座標を用いてユニットを標記することとし、X軸の座標がmでありY軸の座標がnであるユニットUを、U(m,n)として表記することにする。例えば、X軸の座標が5でありY軸の座標が3であるユニットUを、U(5,3)として表記する。
また、図29においては、図中の矢印の順に、ユニット同士のノルムを比較していく。例えば、まず、U(1,1)が算出したノルムを、U(1,1)がU(1,2)に出力する。次に、U(1,1)からノルムが入力されたことに応じて、U(1,2)が、U(1,2)が算出したノルムと、U(1,1)から入力したノルムとを比較し、小さい方のノルムを選択する。次に、U(1,2)が、選択した小さい方のノルムを、U(1,3)に出力する。
ここで、U(1,1)が図中の矢印に従って自ユニットが算出したノルムをU(1,2)に出力するのと並列して、U(2,1)が図中の矢印に従って自ユニットが算出したノルムをU(2,2)に出力する。また、U(1,1)とU(2,1)とに並列して、U(3,1)、U(4,1)、U(5,1)なども、並列して、矢印に従ってそれぞれの自ユニットが算出したノルムを出力する
次に、U(1,2)が、U(1,1)からのノルムの入力に応じて、入力されたノルムと自ユニットが算出したノルムとを比較する。また、U(1,2)が比較しているのと並列して、U(2,2)も、U(2,1)からのノルムの入力に応じて、入力されたノルムと自ユニットが算出したノルムとを比較する。また、U(1,2)とU(2,2)とにおける比較に並列して、U(3,2)、U(4,2)、U(5,2)なども、それぞれのユニットが、入力されたノルムと自ユニットが算出したノルムとを比較する。
図29のユニットにおいては、矢印に従った順序で、U(7,6)とU(7,8)とから、U(7,5)に入力される。次に、U(7,5)で、U(7,6)とU(7,8)とから入力されたノルムと、U(7,5)が算出したノルムとの中から最小となるノルムと、該ノルムを有するユニット識別情報とを選択する。
以上より、全てのユニットの中で、最小となるノルムの値と、該最小となるノルムを有するユニットとを選択可能となる。
この図29においては、矢印に従って、各ノルムが自ユニットに入力されたノルムと自ユニットが算出したノルムとを比較するため、最長となる比較の回数は、例えば、U(1,1)を比較の開始として、U(1,2)、U(1,3)、U(1,4)、U(1,5)、U(5,2)、U(5,3)、U(5,4)U(5,5)、U(6,4)、U(6,5)、U(7,5)の順の11回分の比較となる。ここで、この各ノルムの比較が並列に実行されるために、この図29においては、全ノルムにおいて、最小のノルムの比較は、11回分の比較ですむことになる。よって、比較が並列に実行されるために、非常に少ない回数の比較により、最小のノルムを選択可能となる。
ここで、図29に示されるように、複数のユニットは、葉ユニットと、根ユニットと、幹ユニットとに予め分類されている。この葉ユニットとは、複数のユニットがそれぞれ算出したノルムの中から、最小となるノルムを選択するための比較を開始するユニットとして、予め定められた複数のユニットである。また、根ユニットとは、ユニットのそれぞれが算出したノルムの中から選択された最小となるノルムと、該ノルムを有するユニットのユニットネットワーク座標とを分配制御部に出力するユニットとして予め定められた1つのユニットである。また、幹ユニットとは、葉ユニットと根ユニットとを接続する予め定められた複数のユニットである。
図29においては、U(1,1)、U(2,1)などの葉ユニットは、色が濃くしてある。また、結果を出力するユニットである根ユニットは、図29ではU(7,5)の1つのユニットであり、このユニットも図29においては色を濃くしてある。また、幹ユニットは、他のユニットであり、図29では白塗りのユニットとしてある。
なお、図29では、葉ユニットが、ほぼ同時のタイミングでユニットの開始のためのノルムを出力し始めた場合、全ての幹ユニット、および、根ユニットには、ほぼ同時となるタイミングでは、1つのユニットのみからノルムが入力されるような順序となるように、矢印に示すような順序が予め定められている。
例えば、U(2,5)には、U(1,5)とU(2,4)とからノルムが入力されるが、U(2,5)にU(1,5)からノルムが入力されるタイミングと、U(2,5)にU(2,4)からノルムが入力されるタイミングとは、異なるタイミングとなるように予め設定されている。例えば、U(1,1)およびU(2,1)が、ほぼ同時にノルムを出力してから、U(1,5)は約4ステップ時間でU(2,5)にノルムを出力し、U(2,4)は約3ステップ時間でU(2,5)にノルムを出力する。なお、ここでいうステップ時間とは、あるユニットにノルムが入力されてから、そのユニットが比較した最小となるノルムを出力するまでに要する時間のことである。
図29においては、以上のように、幹ユニットまたは根ユニットにおいては、接続されているユニットから、ほぼ同時にノルムが入力されることがないように、予め接続されている。
<第5の実施形態における並列演算装置の全体構成>
次に、図30と図31とを用いて、第5の実施形態による並列演算装置の全体構成について説明する。図30または図31に示すように、ここでは、ユニットAU1からAU16の16個のユニットある場合について説明する。この第5の実施形態による並列演算装置は、図30の構成に加えて、更に図31の構成を有する。
また、以降においては、第5の実施形態による並列演算装置は、図14から図16、および、図22の構成図を用いて説明した第2の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の構成に対して、上記に説明したトーナメント方式による比較を実行する構成を追加するものとして説明する。また、第5の実施形態による並列演算装置の構成またはその構成の動作において、第2の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の構成またはその構成の動作は同一なので、その説明を省略する。また、図30または図31において、図14と構成と同一の構成には同一の符号を付けて、その説明を省略する。
まず、図30に示すように、図30の第5の実施形態による自己組織化マップを演算する並列演算装置は、予め定められた識別情報であるユニットネットワーク座標によりそれぞれが識別される複数のユニット(AU1からAU16)と、複数のユニットの中のいずれか1つのユニットが出力する出力値がユニット出力バス2を介して入力されたことに応じて、該入力された入力値と複数のユニットの中から選択したいずれか1つのユニットを選択する識別情報である選択ユニットネットワーク座標とを含む制御データを、複数のユニットのそれぞれにユニット入力バス3を介して出力する分配制御部8と、を有する。この図30の第5の実施形態による並列演算装置の構成は、図14の並列演算装置の構成と同様である。
次に、図31に示すように、第5の実施形態による自己組織化マップを演算する並列演算装置においては、複数のユニットAU1からAU16とAU1からAU16とは、図30の構成に加えて更に、ノルム比較バス41とユニットビジーフラグバス42とを介して予め定められた順序で接続されている。図31においては、AU1とAU2とAU3とAU5とが葉ユニットである。また、AU5から12、および、AU14からAU16が、幹ユニットである。また、AU13が、根ユニットである。この葉ユニットと幹ユニットと根ユニットとは、葉ユニットから根ユニットにノルムの比較結果が、予め定められた順序で送信できるように、該順序で隣接するユニット同士がノルム比較バス41を介して接続されており、かつ、根ユニット(AU13)は分配制御部8にノルム比較バス41を介して接続されている。
この順序は、図31では、葉ユニットから根ユニットまでの順序として、AU1、AU5、AU9、AU13の順序で予め定められた第1の順序と、AU2、AU6、AU10、AU14の順序で予め定められた第2の順序と、AU3、AU7、AU11、AU15、AU14、AU13の順序で予め定められた第3の順序と、AU4、AU8、AU12、AU16、AU15、AU14、AU13の順序で予め定められた第4の順序とがある。
この予め定められた第1の順序、第2の順序、第3の順序、および、第4の順序で、隣接するユニット同士はノルム比較バス41を介して接続されているとともに、ユニットビジーフラグバス42を介して接続されている。
また、図31では、AU1とAU2とAU3とAU5とが葉ユニットと、分配制御部8とが、ノルム比較開始信号線40で接続されている。例えば、分配制御部8が、ノルムの比較を開始することを示す信号を、ノルム比較開始信号線40を介して、AU1とAU2とAU3とAU5とである葉ユニットに出力することにより、葉ユニットを開始ユニットとして、第1の順序、第2の順序、第3の順序、および、第4の順序で、ノルムの比較が並列に実行される。そして、各順序の比較結果が、根ユニットであるAU13に入力され、根ユニットが、全てのユニットのうち、最小となるノルムと該ノルムを有するユニットのユニットネットワーク座標とを選択し、選択したノルムとユニットネットワーク座標とを分配制御部8にノルム比較バス41を介して出力する。
なお、上記においては、AU1とAU2とAU3とAU5とである葉ユニットと、分配制御部8とが、ノルム比較開始信号線40で接続されており、ノルムの比較を開始することを示す信号を、分配制御部8が葉ユニットへノルム比較開始信号線40を介して出力するとして説明した。しかし、後述する実施形態においては、ノルム比較開始信号線40を用いるのではなく、後述する図32のプロトコル表に示すように、制御コードAの値が“11”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを、分配制御部8が葉ユニットへユニット入力バス3を介して出力する。なお、分配制御部8は、制御コードAの値が“11”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを、葉ユニットのみではなく全てのユニットへ、ユニット入力バス3を介して出力する。
なお、図31においては、並列なノルムの比較順序の原理を説明するために、比較の順序が簡易な接続を用いているが、実際の接続においては、図29に示すように、根ユニットは、ユニット全体に対して、ほぼ中央となる位置にあり、複数の葉ユニットは、ユニット全体に対して、ほぼ外周となる位置にあることが望ましい。根ユニットはユニット全体に対してほぼ中央となる位置にあり、複数の葉ユニットはユニット全体に対してほぼ外周となる位置にあることにより、葉ユニットから根ユニットまでの根ユニットの数、つまり、ノルムの比較の回数を低減することが可能なため、より高速にノルムの比較が出来るという効果を奏する。
<第5の実施形態におけるユニットの構成の概要>
次に、上記において、図30と図31とを用いて説明した第5の実施形態におけるユニットの構成の概要について説明する。
まず、図22を用いて説明したように、複数のユニットのそれぞれは、分配制御部8から入力された制御データに基づいて自ユニットが算出したノルムを記憶するユニットノルム記憶部236Aと、自ユニットのユニットネットワーク座標を記憶するユニットネットワーク座標記憶部234Aと、を有している。
また、葉ユニットが葉ノルム情報出力部を有する。この葉ノルム情報出力部は、複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始することを示す信号を分配制御部8から入力されたことに応じて、自ユニットのユニットノルム記憶部236Aから読み出したノルムと自ユニットのユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とを、自ユニットが接続される後段ユニットへノルム比較バス41を介して出力する。
また、幹ユニットまたは根ユニットは、勝者ノルム情報記憶部と、ノルム情報入力部と、勝者ノルム情報設定部と、ノルム情報出力部とを有する。
勝者ノルム情報記憶部は、自ユニットに入力されたノルムと自ユニットのユニットノルム記憶部に記憶されたノルムとにおいて最小であるノルムと、該ノルムを有するユニットを識別するユニットネットワーク座標とを関連付けて勝者ノルム情報として記憶する。
ノルム情報入力部は、ノルムを比較する順序において葉ユニットに近い方のユニットであり隣接するユニットである前段ユニットから、ノルムとユニットネットワーク座標とを関連付けてノルム情報としてノルム比較バスを介して入力する。
勝者ノルム情報設定部は、ノルム情報入力部にノルム情報が入力されたことに応じて、ノルム情報入力部に入力されたノルムと、自ユニットの勝者ノルム情報記憶部または自ユニットのユニットノルム記憶部から読み出したノルムとを比較し、最小となるノルムと該ノルムと関連付けられたユニットネットワーク座標とを関連付けて勝者ノルム情報として勝者ノルム情報記憶部に設定して記憶する。
ノルム情報出力部は、勝者ノルム情報記憶部から読み出した勝者ノルム情報を、ノルムを比較する順序で根ユニットに近い方のユニットであり隣接するユニットである後段ユニットへノルム比較バスを介して出力する。
また、幹ユニットまたは根ユニットには、複数の幹ユニットまたは複数の葉ユニットが前段ユニットとして予め接続されており、幹ユニットまたは根ユニットのそれぞれは、前段接続数記憶部と、入力回数記憶部と、前段接続数比較部とを有する。
前段接続数記憶部には、自ユニットに接続される前段ユニットの総数である前段接続数が予め記憶されている。入力回数記憶部には、ノルム情報入力部にノルムとユニットネットワーク座標とが入力される毎に、入力回数をカウントアップして記憶する。前段接続数比較部は、前段接続数記憶部から読み出した前段接続数と、入力回数記憶部から読み出した入力回数とを比較する。
また、ノルム情報出力部が、接続数比較部の比較結果が、前段接続数と入力回数とが一致した場合に、勝者ノルム情報記憶部から読み出した勝者ノルム情報を出力する。
また、幹ユニットまたは根ユニットのそれぞれが、ノルムとユニットネットワーク座標とを、自ユニットの前段ユニットから入力可能であるか否かを示すユニットビジーフラグ情報を記憶するユニットビジーフラグ記憶部を有している。また、ユニットのそれぞれが、自ユニットの後段ユニットが有するユニットビジーフラグ記憶部から出力されたユニットビジーフラグ情報に基づいて、該後段ユニットにノルムとユニットネットワーク座標とを出力するか否かを判定するビジーフラグ判定部を有する。また、自ユニットのノルム情報出力部は、自ユニットのビジーフラグ判定部の判定結果に基づいて、勝者ノルム情報記憶部から読み出した勝者ノルム情報を出力する。
また、ノルム情報入力部は、ノルム情報が入力されたことに応じて、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能でないことを示すように設定する。また、接続数比較部は、比較結果が前段接続数と入力回数とが一致しない場合に、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能であることを示すように設定する。
また、幹ユニットまたは根ユニットのそれぞれが、ユニット制御部を有する。このユニット制御部は、複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始することを示す信号を分配制御部から入力されたことに応じて、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能であることを示すように設定する。
また、接続数比較部は、比較結果が前段接続数と入力回数とが一致した場合に、ユニットビジーフラグ記憶部に記憶されているユニットビジーフラグ情報を自ユニットの前段ユニットから入力可能でないことを示すように設定する。
<第5の実施形態における制御データのプロトコル>
次に、図32を用いて、第5の実施形態における制御データの一例としてのプロトコルについて説明する。なお、図32に示す制御データのプロトコルは、図23に示した制御データのプロトコルにおいて、制御コードAの値が“11”が追加されている。制御コードAの値が4から10の制御データのプロトコルについては、図32に示す制御データのプロトコルと図23に示す制御データのプロトコルとは同様であるため、その説明を省略する。
<選択処理11>
制御データに含まれる制御コードAの値が“11”であり、“勝者ユニット決定アルゴリズムの開始の合図”、つまり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す場合には、この制御データは、この制御コードAの値が“11”の制御コードAのみを含んでいる。この制御コードAの値が“11”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを受信したユニットにおいて、葉ユニット(開始ユニット)は、後段ユニットに自ユニットノルムと自ユニットネットワーク座標とを出力して渡す。また、それ以外のユニットである根ユニットと幹ユニットとは、前段からの入力と比較して、決定された勝者ユニットノルムとそのユニットネット座標とを後段へ出力して渡す。
この制御コードAの値が“11”であり、“複数のユニットがそれぞれ算出したノルムの中から最小となるノルムを選択するための比較を開始する”ことを示す制御データを受信したユニットにおいて、葉ユニット、および、根ユニットと幹ユニットとの構成とその動作については、図33から図36を用いて後述する。
<葉ユニットの構成>
次に、図33を用いて、第5の実施形態における葉ユニットの構成について説明する。なお、第5の実施形態における葉ユニットは、図22の第4の実施形態におけるユニットの構成を全て有している。ここでは、図22の第4の実施形態におけるユニットの構成に対して、追加された第5の実施形態における葉ユニットの構成について説明する。なお、図33の第5の実施形態におけるユニットの構成において、図22の第4の実施形態におけるユニットの構成と同一の構成については、同一の符号を付けその説明を省略する。
葉ユニットは、ユニット制御部216Bと、ビジーフラグ判定部261と、ノルム情報出力部262と、を有する。なお、他の構成については、その説明を省略する。なお、図33において、ビジーフラグ記憶部260は、後段ユニットが有する構成である。
なお、この葉ユニットの構成は、上記の「第5の実施形態におけるユニットの構成の概要」において説明した構成において、以下の構成同士が、それぞれ対応する。まず、ノルム情報出力部262が、葉ノルム情報出力部に対応する。また、ユニット制御部216Bがユニット制御部に対応する。また、ビジーフラグ判定部261がビジーフラグ判定部に対応する。
次に、各構成について説明する。ユニット制御部216Bは、制御コードの値が“11”の制御コードを受信した場合には、制御コードの値が“11”の処理を実行することを示す信号をビジーフラグ判定部261に出力する。
ビジーフラグ判定部261は、制御コードの値が“11”の処理を実行することを示す信号をユニット制御部216Bから入力されたことに応じて、後段ユニットのビジーフラグ記憶部260からユニットビジーフラグバス42を介してビジーフラグを後段ビジーフラグとして読み出して判定し、判定した結果をノルム情報出力部262に出力する。
ノルム情報出力部262は、ビジーフラグ判定部261から入力された判定結果が、後段ビジーフラグが立っていないことを示す場合には、ユニットノルム記憶部236Aから読み出したユニットノルムと、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス41を介して出力する。
<幹ユニットまたは根ユニットの構成>
次に、図34を用いて、第5の実施形態における幹ユニットまたは根ユニットの構成について説明する。なお、図33を用いて説明した第5の実施形態における葉ユニットの構成の説明と同様に、図22の第4の実施形態におけるユニットの構成に対して、変更または追加される構成についてのみ説明する。また、図34の第5の実施形態におけるユニットの構成において、図22の第4の実施形態におけるユニットの構成と同一の構成については、同一の符号を付けその説明を省略する。
幹ユニットまたは根ユニットは、ビジーフラグ記憶部260と、ビジーフラグ判定部261と、ノルム情報出力部262と、ノルム情報入力部263と、入力ノルム抽出部270と、入力ノルム記憶部271と、入力ネットワーク座標抽出部272と、入力ネットワーク座標記憶部273と、勝者ノルム判定部274と、勝者ノルム・勝者ネットワーク座標セット部275と、勝者ノルム記憶部276と、勝者ネットワーク座標記憶部277と、前段接続数比較部278と、前段接続数記憶部279と、前段接続数カウンタ部280と、前段接続数カウンタリセット部281と、ユニットビジーフラグセット部282と、を有する。
なお、この幹ユニットまたは根ユニットの構成は、上記の「第5の実施形態におけるユニットの構成の概要」において説明した構成において、以下の構成同士が、それぞれ対応する。まず、ビジーフラグ記憶部260がユニットビジーフラグ記憶部に対応する。また、ビジーフラグ判定部261がビジーフラグ判定部に対応する。また、ノルム情報出力部262がノルム情報出力部に対応する。また、ノルム情報入力部263がノルム情報入力部に対応する。また、入力ノルム抽出部270と入力ノルム記憶部271と入力ネットワーク座標抽出部272と入力ネットワーク座標記憶部273と勝者ノルム判定部274と勝者ノルム・勝者ネットワーク座標セット部275とが、勝者ノルム情報設定部に対応する。また、勝者ノルム記憶部276と勝者ネットワーク座標記憶部277とが、勝者ノルム情報記憶部に対応する。また、前段接続数比較部278と前段接続数カウンタリセット部281とユニットビジーフラグセット部282とが、前段接続数比較部に対応する。また、前段接続数記憶部279が前段接続数記憶部に対応する。また、前段接続数カウンタ部280が入力回数記憶部に対応する。
次に、各構成について説明する。ユニット制御部216Bは、制御コードの値が“11”の制御コードを受信した場合には、制御コードの値が“11”の処理を実行することを示す信号を勝者ノルム・ネットワーク座標初期セット部284に出力する。また、ユニット制御部216Bは、制御コードの値が“11”の制御コードを受信した場合には、ユニットビジーフラグ記憶部260のビジーフラグをリセットする。
勝者ノルム・ネットワーク座標初期セット部284は、制御コードの値が“11”の処理を実行することを示す信号をユニット制御部216Bから受信したことに応じて、ユニットノルム記憶部236Aから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする。
ノルム情報入力部263は、ノルム情報が前段ユニットからノルム比較バス41を介して入力されたことに応じて、ユニットビジーフラグ記憶部260のビジーフラグをセットし、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)をカウントアップし、また、入力したノルム情報を入力ノルム抽出部270と入力ネットワーク座標抽出部272とに出力する。
入力ノルム抽出部270は、ノルム情報がノルム情報入力部263から入力されたことに応じて、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして入力ノルム記憶部271に記憶する。入力ネットワーク座標抽出部272は、ノルム情報がノルム情報入力部263から入力されたことに応じて、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部273に記憶する。
勝者ノルム判定部274は、抽出したノルムを入力ノルム抽出部270が入力ノルム記憶部271に記憶したことに応じて、入力ノルム記憶部271から読み出した入力ノルムと、勝者ノルム記憶部276から読み出した勝者ノルムとを比較し、比較した結果を勝者情報として、勝者ノルム・勝者ネットワーク座標セット部275に出力する。
勝者ノルム・勝者ネットワーク座標セット部275は、勝者ノルム判定部274から入力した勝者情報が、入力ノルムが勝者ノルムより小さいことを示す場合には、入力ノルム記憶部271から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、入力ネットワーク座標記憶部273から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする。
また、勝者ノルム・勝者ネットワーク座標セット部275は、勝者ノルム判定部274から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部275の処理が終了したことに応じて、勝者ノルム判定部274から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部275の処理が終了したことを示す信号を前段接続数比較部278に出力する。
前段接続数記憶部279には、自ユニットが接続される前段ユニットの総数である前段接続数の値(in)が、予め記憶されている。前段接続数比較部278は、勝者ノルム判定部274から入力した勝者情報による勝者ノルム・勝者ネットワーク座標セット部275の処理が終了したことを示す信号を入力することに応じて、前段接続数カウンタ部から読み出した前段接続数カウンタの値(t)と、前段接続数記憶部279から読み出した前段接続数の値(in)とを、比較する。また、前段接続数比較部278は、比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致しない場合には、ユニットビジーフラグ記憶部260のビジーフラグをリセットする。
前段接続数カウンタリセット部281は、前段接続数比較部278の比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致することに応じて、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)を0にリセットする。ユニットビジーフラグセット部282は、前段接続数カウンタリセット部281が前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)を0にリセットしたことに応じて、ユニットビジーフラグ記憶部260のユニットビジーフラグをセットする。
ビジーフラグ判定部261は、ユニットビジーフラグセット部282がユニットビジーフラグ記憶部260のユニットビジーフラグをセットしたことに応じて、後段ユニットのビジーフラグ記憶部260からユニットビジーフラグバス42を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定し、判定結果をノルム情報出力部262に出力する。
ノルム情報出力部262は、ビジーフラグ判定部261から入力した判定結果が、後段ビジーフラグが立っていないことを示すことに応じて、勝者ノルム記憶部276から読み出した勝者ノルムと、勝者ネットワーク座標記憶部277から読み出した勝者ネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス41を介して出力する。また、ノルム情報出力部262は、ビジーフラグ判定部261から入力した判定結果が、後段ビジーフラグが立っていないことを示すことに応じて、勝者ノルム記憶部276に予め定められた負値の値であるノルムを記憶することによりリセットするとともに、勝者ネットワーク座標記憶部277に記憶されている勝者ネットワーク座標をリセットする。
<第5の実施形態におけるユニットの動作>
次に、図35を用いて、図32で説明した制御データのプロトコルを受信した場合の、ユニットの動作、特に、ユニットのユニット制御部216Bの動作について説明する。なお、説明の簡略のために、以降においては制御コードAの値を用いて説明する。
なお、この図35の第5の実施形態におけるユニット制御部216Bの動作において、図24の第4の実施形態におけるユニット制御部216Bの動作と同一の動作については、同一のステップ番号を付け、その説明を省略する。ここでは、図35の第5の実施形態におけるユニット制御部216Bの動作において、図24の第4の実施形態におけるユニット制御部216Bの動作と異なる動作についてのみ説明する。
ステップS2402で、読み出した制御コードの値が“11”である場合には、ユニット制御部216Bは、上記に説明した選択処理11を実行し(ステップS2413)、処理を終了する。つまり、図35の第5の実施形態におけるユニット制御部216Bの動作には、図24の第4の実施形態におけるユニット制御部216Bの動作に対して、ステップS2402の次に、読み出した制御コードの値が“11”である場合の動作であるステップS2413が追加されている点が異なる。
次に、図36を用いて第5の実施形態におけるユニットの動作について説明する。なお、葉ユニットと、幹ユニットまたは根ユニットとでは、図33と図34とを用いて示したように、ユニットの構成が異なるので、葉ユニットと、幹ユニットまたは根ユニットとに分けて、ユニットの動作について説明する。
<葉ユニットの動作>
まず、図36(a)を用いて、葉ユニットの動作を説明する。
ユニット制御部216Bが、制御コードの値が“11”の処理を実行することを判定した場合には、まず、ビジーフラグ判定部261が、後段ユニットのビジーフラグ記憶部260からユニットビジーフラグバス42を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定する(ステップS3601)。ステップS3601の判定結果が、後段ビジーフラグが立っている場合には、後段ビジーフラグが立つまでステップS3601からの処理を繰り返す。
一方、ステップS3601の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部262が、ユニットノルム記憶部236Aから読み出したユニットノルムと、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス41を介して出力し(ステップS36102)、処理を戻す。
<幹ユニットまたは根ユニットの動作>
次に、図36(b)を用いて、幹ユニットまたは根ユニットの動作を説明する。
ユニット制御部216Bが、制御コードの値が“11”の処理を実行することを判定した場合には、ユニット制御部216Bが、ユニットビジーフラグ記憶部260のビジーフラグをリセットする。次に、制御コードの値が“11”の処理を実行することを判定したことに応じて、勝者ノルム・ネットワーク座標初期セット部284が、ユニットノルム記憶部236Aから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする(ステップS36201)。その後、ノルム情報入力部263が、ノルム情報が前段ユニットから入力されるのを待機する。
次に、ノルム情報入力部263に、ノルム情報が前段ユニットからノルム比較バス41を介して入力したことに応じて(ステップS36202)、ノルム情報入力部263が、ユニットビジーフラグ記憶部260のビジーフラグをセットする。また、ノルム情報入力部263が、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)をカウントアップする(ステップS36203)とともに、ノルム情報入力部263が、入力したノルム情報を入力ノルム抽出部270と入力ネットワーク座標抽出部272に出力する。
次に、ノルム情報が入力された入力ノルム抽出部270が、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして入力ノルム記憶部271に記憶する。また、ノルム情報が入力された入力ネットワーク座標抽出部272が、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として入力ネットワーク座標記憶部273に記憶する。
次に、入力ノルム抽出部270が抽出したノルムを入力ノルム記憶部271に記憶したことに応じて、勝者ノルム判定部274が、入力ノルム記憶部271から読み出した入力ノルムと、勝者ノルム記憶部276から読み出した勝者ノルムとを、比較する(ステップS36204)。
ステップS36204で比較した結果が、入力ノルムが勝者ノルムより小さい場合には、勝者ノルム・勝者ネットワーク座標セット部275が、入力ノルム記憶部271から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、入力ネットワーク座標記憶部273から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする(ステップS36205)。
一方、ステップS36204で比較した結果が、入力ノルムが勝者ノルムより小さくない場合には、または、ステップS36205の次には、つまり、勝者ノルム判定部274から入力した比較結果である勝者情報を入力したことによる処理を勝者ノルム・勝者ネットワーク座標セット部275が実行したことに応じて、前段接続数比較部278が、前段接続数カウンタ部から読み出した前段接続数カウンタの値(t)と、前段接続数記憶部279から読み出した前段接続数の値(in)とを、比較する(ステップS36206)。
ステップS36206で比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致しない場合には、前段接続数比較部278が、ユニットビジーフラグ記憶部260のビジーフラグをリセットし、ステップS36202からの処理を繰り返させる。一方、ステップS36206で比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致する場合には、前段接続数カウンタリセット部281が、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)を0にリセットする(ステップS36207)。
次に、ユニットビジーフラグセット部282が、ユニットビジーフラグ記憶部260のユニットビジーフラグをセットする。次に、ビジーフラグ判定部261が、後段ユニットのビジーフラグ記憶部260からユニットビジーフラグバス42を介してビジーフラグを後段ビジーフラグとして読み出して判定することにより、後段ビジーフラグが立っているか否かを判定する(ステップS36201)。ステップS36208の判定結果が、後段ビジーフラグが立っている場合には、後段ビジーフラグが立つまで、ステップS36208からの処理を繰り返す。
一方、ステップS36208の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部262が、勝者ノルム記憶部276から読み出した勝者ノルムと、勝者ネットワーク座標記憶部277から読み出した勝者ネットワーク座標とを、ノルム情報として後段ユニットにノルム比較バス41を介して出力し(ステップS36209)、処理を戻す。また、ステップS36208の判定結果が、後段ビジーフラグが立っていない場合には、ノルム情報出力部262が、勝者ノルム記憶部276に予め定められた負値の値であるノルムを記憶することによりリセットするとともに、勝者ネットワーク座標記憶部277に記憶されている勝者ネットワーク座標をリセットする。
<第5の実施形態における並列演算装置の動作(分配制御部8の動作)>
次に、図37を用いて、第5の実施形態における並列演算装置の動作、つまり、第2の基本構成による並列演算装置を自己組織化マップに適応した場合の並列演算装置の動作について説明する。なお、ここでは、図22から図26を用いて説明した第4の実施形態における並列演算装置の動作について、追加または変更される部分のみについて説明する。
図26の分配制御部8の動作から図37の分配制御部8の動作について、変更される動作のステップは、図26(a)を用いて説明した競合学習の処理であり、より詳細には、図26の分配制御部8のステップS250306からステップS250310が、図37の分配制御部8のステップS250312からステップS250313に、変更される。
このステップS250312で、分配制御部8は、制御コードAの値を“11”とした制御データを各ユニットに出力する。次に、ステップS250313で、分配制御部8は、根ユニットがノルム比較バス41を介して出力したノルム情報に含まれるユニットネットワーク座標を、ノルム最小ユニットネットワーク座標jminとして入力する。
第4の実施形態による分配制御部8は、ステップS250306からステップS250310により、分配制御部8が、全てのユニットから順にノルムを入力して、分配制御部8が、入力された全てのユニットの中からノルムが最小となるノルムのユニットネットワーク座標を選択していたのに対して、第5の実施形態による分配制御部8は、制御コードAの値を“11”とした制御データを各ユニットに出力し、根ユニットから出力されるユニットネットワーク座標を入力するだけでよい。
従って、第4の実施形態による分配制御部8での処理に対して第5の実施形態による分配制御部8での処理は簡易となるとともに、ノルムの比較が各ユニットにより並列的に実行されるために、比較が早くなるという効果を奏する。
<ユニットの配置の第2例>
次に、図38を用いて、ユニットを2次元平面に配置した場合に、上記に説明したトーナメント方式により、最小となるユニットを選択する方法の第2例目について説明する。この図38において、根ユニットはU(7,5)であり、葉ユニットは、色を付けてあるユニットであり、幹ユニットは無地のユニットであり、また、比較の順序は、図中の矢印に沿って順に実行される。図38におけるユニットにおけるノルムの比較は、図29におけるユニットにおけるノルムの比較と、ほぼ同様である。
ただし、図29を用いて説明したユニットの配置と比較の順序においては、1つのユニットに対して、ほぼ同時となるタイミングではノルムが入力されないように、比較の順序が予め設定されていた。これに対して、図38に例示するユニットの配置と比較の順序においては、1つのユニットに対して、ほぼ同時のタイミングで、ノルムが入力されるユニットもあるようにして、比較の順序が予め設定されている。
一般に、1つのユニットに対して、ほぼ同時のタイミングでノルムが入力されることも可能とすることにより、比較の順序の回数が少なくなるような順序を設定することが可能となるために、ユニット全体でノルムを比較するのに要する時間を短縮することが可能である。
<ユニットの構成の変更点>
ほぼ同時のタイミングでノルムが入力されることも可能とするために、図33から図37を用いて説明した葉ユニット、または、幹ユニットと根ユニットにおいて、ユニットの構成において変更される構成と、その動作についてのみ説明する。
まず、葉ユニットの構成においては、変更点はなく、同一である。また、葉ユニットの動作は、図39(a)に示すように、図36(a)と同一である。
次に、幹ユニットまたは根ユニットにおいては、入力されるノルム情報を、前段接続数カウンタの値(t)と関連付けて記憶しておき、前段接続数カウンタの値(t)に基いて、順に読み出して比較することにより、ほぼ同時のタイミングでノルムが入力されることも可能とする。
幹ユニットまたは根ユニットの構成において、変更がある構成のみについて説明する。入力ノルム抽出部270は、ノルム情報がノルム情報入力部263から入力されたことに応じて、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)と関連付けて、入力ノルム記憶部271に記憶する。
入力ネットワーク座標抽出部272は、ノルム情報がノルム情報入力部263から入力されたことに応じて、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)と関連付けて、入力ネットワーク座標として入力ネットワーク座標記憶部273に記憶する。
勝者ノルム判定部274は、抽出したノルムを入力ノルム抽出部270が入力ノルム記憶部271に記憶したことに応じて、または、前段接続数比較部278の比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致しないことに応じて、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)に該当する入力ノルムを入力ノルム記憶部271から読み出し、該読み出した入力ノルムと、勝者ノルム記憶部276から読み出した勝者ノルムとを比較し、比較した結果を勝者情報として、勝者ノルム・勝者ネットワーク座標セット部275に出力する。
<幹ユニットまたは根ユニットの動作の変更点>
次に、図39(b)を用いて、幹ユニットまたは根ユニットの動作を説明する。なお、図36(b)のステップS36201からステップS36209と、図39(b)のステップS39201からステップS39209とが、それぞれ対応する。ここでは、図36(b)のステップの処理と、図39(b)のステップの処理とにおいて、異なる処理を中心に説明する。
ユニット制御部216Bが、制御コードの値が“11”の処理を実行することを判定した場合には、ユニット制御部216Bが、ユニットビジーフラグ記憶部260のビジーフラグをリセットする。次に、制御コードの値が“11”の処理を実行することを判定したことに応じて、勝者ノルム・ネットワーク座標初期セット部284が、ユニットノルム記憶部236Aから読み出したユニットノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、ユニットネットワーク座標記憶部234Aから読み出したユニットネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする(ステップS39201)。その後、ノルム情報入力部263が、ノルム情報が前段ユニットから入力されるのを待機する。
次に、ノルム情報入力部263に、ノルム情報が前段ユニットからノルム比較バス41を介して入力したことに応じて(ステップS39202)、ノルム情報入力部263が、ユニットビジーフラグ記憶部260のビジーフラグをセットする。また、ノルム情報入力部263が、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)をカウントアップする(ステップS39203)とともに、ノルム情報入力部263が、入力したノルム情報を入力ノルム抽出部270と入力ネットワーク座標抽出部272に出力する。
次に、ノルム情報が入力された入力ノルム抽出部270が、入力されたノルム情報からノルムを抽出し、該抽出したノルムを入力ノルムとして、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)と関連付けて、入力ノルム記憶部271に記憶する。また、ノルム情報が入力された入力ネットワーク座標抽出部272が、入力されたノルム情報からネットワーク座標を抽出し、該抽出したネットワーク座標を入力ネットワーク座標として、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)と関連付けて、入力ネットワーク座標記憶部273に記憶する。
次に、入力ノルム抽出部270が抽出したノルムを入力ノルム記憶部271に記憶したことに応じて、勝者ノルム判定部274が、前段接続数カウンタ部280から読み出した前段接続数カウンタの値(t)に該当する入力ノルムを入力ノルム記憶部271から読み出し、該読み出した入力ノルムと、勝者ノルム記憶部276から読み出した勝者ノルムとを、比較する(ステップS39204)。
ステップS39204で比較した結果が、入力ノルムが勝者ノルムより小さい場合には、勝者ノルム・勝者ネットワーク座標セット部275が、入力ノルム記憶部271から読み出した入力ノルムを勝者ノルムとして勝者ノルム記憶部276に記憶してセットするとともに、入力ネットワーク座標記憶部273から読み出した入力ネットワーク座標を勝者ネットワーク座標として勝者ネットワーク座標記憶部277に記憶してセットする(ステップS39205)。
一方、ステップS39204で比較した結果が、入力ノルムが勝者ノルムより小さくない場合には、または、ステップS39205の次には、つまり、勝者ノルム判定部274から入力した比較結果である勝者情報を入力したことによる処理を勝者ノルム・勝者ネットワーク座標セット部275が実行したことに応じて、前段接続数比較部278が、前段接続数カウンタ部から読み出した前段接続数カウンタの値(t)と、前段接続数記憶部279から読み出した前段接続数の値(in)とを、比較する(ステップS39206)。
ステップS39206で比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致しない場合には、前段接続数比較部278が、ユニットビジーフラグ記憶部260のビジーフラグをリセットし、ステップS39203からの処理を繰り返させる。一方、ステップS39206で比較した結果が、前段接続数カウンタの値(t)と前段接続数の値(in)とが一致する場合には、前段接続数カウンタリセット部281が、前段接続数カウンタ部280に記憶されている前段接続数カウンタの値(t)を0にリセットする(ステップS39207)。
以降の処理においては、図36(b)のステップの処理と、図39(b)のステップの処理とは、同一であるため、その説明を省略する。
<第6の実施形態:逆誤差伝播>
次に、第3の実施形態として説明した第2の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるようにする場合の構成を、第6の実施形態として説明する。
まず、逆誤差伝播について説明する。一般に、ニューラルネットワークはニューロンの結合形態により分類され、フィードバック結合を持たない階層型ニューラルネットワーク、フィードバック結合を有するリカレント型ニューラルネットワークに分類することができる。
ここでは、フィードバック結合を持たない階層型ニューラルネットワークが教師あり学習を行う場合について例を挙げて説明する。ニューラルネットワークが順方向に信号を出力する際、ユニットは結合している1つ前のユニットから入力を受け、ユニット間の結合係数を参照し積和計算を行い、出力関数の出力を結合している次の層のユニットへ送る。これを繰り返し、最終的に出力層が演算結果を出力する。このとき、与えた入力に対し所望の出力を得るには、適切な結合係数を設定する必要がある。しかしながら、この適切な結合係数は自明でないことが多い。
逆誤差伝播(バックプロパゲーション)法は、教師データを与えることで階層型ニューラルネットワークの結合係数を適切な値へと学習させる教師あり学習アルゴリズムのひとつである。中間層の結合係数を修正しようとするとき、与えられた教師データと出力すべき値との誤差を直ちに求めることは難しい。そのため、与えられた教師データに基いて、教師データと算出した出力値との誤差を、出力層から入力層への向きに順々に計算し、出力の誤差を前段の層へと次々に伝えていく。これを実現するアルゴリズムが逆誤差伝播法である。
ここで、この逆誤差伝播法を用いた階層型ニューラルネットワークのアルゴリズムの概要を説明する。まず、次のステップC1からステップC2により、順方向伝播を演算する。
(ステップC1)ニューラルネットワークの入力層(第1層)に学習のための入力パターンを入力する。
(ステップC2)次に、入力層から出力層までの各層のユニットの状態を次の式1から式3に基いて演算する(l=1,2,・・・,L+1)。詳細には、現在与えられている結合係数を用い積和計算を、次の式1により演算する。次に、この式1により演算した積和計算の結果に基いて、ニューラルネットワークの出力を、次の式2により算出する。なお、この結合係数とは、結合荷重に相当する。
なお、式1から式3において、N(l)はl層のユニットの数であり、x(l) piはl層i番目のユニットの出力である。また、s(l+1) pjは、(l+1)層j番目のユニットの内部状態である。また、w(l) jiは、l層i番目のユニットから(l+1)層j番目のユニットへの結合係数である。また、f(l) jは、l層i番目のユニットにおける非線形な出力関数である。なお、添え字pは、入力パターンに対応して提示された教師パターンの番号、I、Oはそれぞれ入力ユニット、出力ユニットの集合、Hはそれら以外のユニットの集合を示す。
次に、逆誤差伝播(バックプロパゲーション)を演算する。逆誤差伝播の演算として、まず、次のステップC3からステップC5により、出力層から隠れ層への演算し、出力層(L+2層目)に向かう結合係数を修正する。
(ステップC3)ステップC1とステップC2とにより順方向伝播させた際において、入力パターンに対して、期待している出力値(教師データ)を入力し、実際の出力値との差を算出する。
(ステップC4)教師データと出力値との差(出力値の誤差)が、前段のユニットの出力値に結合係数を掛けた値(積和値=出力層ユニットへの入力)により発生したと考え、出力値の誤差とユニットの出力関数および実際の入力値を用いて積和値の誤差(局所誤差)を、次の式4により逆算する。
(ステップC5)学習速度を考慮し、積和値の誤差を減少させるように各々の結合係数を、次の式5と式6とにより修正する。
ここで、dpjは、p番目に提示された入力パターンに対応する教師パターンである。また、ηは学習係数である。
次に、逆誤差伝播の演算として、次のステップC6からステップC8により、L+1層目である隠れ層から、1層目である入力層へ、順次結合係数を修正する演算を実行する。
(ステップC6)ステップC4と同様に積和値の誤差(局所誤差)を、次の式7により逆算する。
なお、ステップC6において、ステップC4との相違点は、出力層では1つのユニットについて1つの出力値の誤差情報を逆算して前段に伝えるのに対し、隠れ層では1つのユニットについて複数の誤差情報(結合関係のある後段のユニットが複数であることに起因する)を合算したものを隠れ層ユニットの出力値の誤差情報として用い、逆算するところにある。
(ステップC7)学習速度を考慮し、積和値の誤差を減少させるように各々の結合係数を、次の式8と式9とにより修正する。
(ステップC8)隠れ層が複数である場合は、層をひとつ前段に移してステップC6からの処理を繰り返す。
(ステップC9)ニューラルネットワークに学習のための入力層への入力パターンを変更し、ステップC1からの処理を繰り返す。ここで、学習のための入力パターンを全て出力した後は、次の式10により誤差測度を演算する。
この演算した誤差測度が、予め定められた一定の値以下であれば、逆誤差伝播法を用いた学習アルゴリズムを終了する。一方、この演算した誤差測度が、予め定められた一定の値以下でなければ、学習のための入力パターンを、再度入力し、ステップC1からの処理を繰り返す。
なお、上記に説明したステップC1からステップC2の処理については、第1の実施形態または第3の実施形態により処理が実行される。第6の実施形態においては、ステップC1からステップC2の処理を実行する第3の実施形態の構成に加えて、ステップC3からステップC8の処理を実行する構成を有する。
なお、以降においては、第6の実施形態による並列演算装置に、1つのパターンデータを入力し、その後、該1つのパターンデータに対応する期待値である教師データを入力し、該教師データに基いて、結合係数を1回のみ修正する場合について説明する。
<第6の実施形態におけるユニットの構成>
次に、図40を用いて、第6の実施形態におけるユニットの構成を説明する。この図40の第6の実施形態におけるユニットの構成は、図17を用いて説明した第3の実施形態のユニットの構成、つまり、第2の基本構成による並列演算装置に階層型ニューラルネットワークに適応した場合のユニットの構成を有し、更に、逆誤差伝播を実行するための構成を有する。
また、第6の実施形態によるユニットにおいて、図17を用いて説明したユニットの構成とその動作については、同様であるため、その説明を省略する。以降においては、第6の実施形態によるユニットにおいて、逆誤差伝播を実行するための構成とその動作について説明する。また、全てのユニットの構成とその動作は、同一であるため、以降においては、1つのユニットの構成と動作のみについて説明する。
ユニットは、図40に示すように、ユニット制御部116Bから入力された教師データと、ユニット出力記憶部135Aに記憶された出力値との誤差を算出し、該算出した誤差に基いて、出力層から入力層の順に重み記憶部130に記憶されている結合荷重を変更する学習部190を有する。この学習部190は、学習係数記憶部170と、逆誤差伝播用積和計算一次値記憶部171と、逆誤差伝播用関数記憶部172と、教師データ記憶部173と、逆誤差伝播用換算値記憶部174と、第1逆誤差伝播用換算値算出部180と、第1結合係数更新部181と、逆誤差伝播用積和計算一次値算出部182と、第2逆誤差伝播用換算値算出部183と、第2結合係数更新部184とを有する。
次に、学習部190が有する各構成の概要について説明する。学習係数記憶部170には、逆誤差伝播の演算における学習において用いられる係数である学習係数が記憶される。この学習係数とは、上記ステップC5での式5、または、ステップC7での式8で用いる学習係数ηに相当する。逆誤差伝播用積和計算一次値記憶部171には、逆誤差伝播の演算において用いられる一時的な値である逆誤差伝播用積和計算一次値が記憶される。この逆誤差伝播用積和計算一次値とは、上記ステップC6での式7における和記号Σにより積和される項である。
逆誤差伝播用関数記憶部172には、逆誤差伝播の演算において用いられる逆誤差伝播用関数が、層情報と関連付けて予め記憶される。この逆誤差伝播用関数とは、上記のステップC4での式4、または、ステップC6での式7で用いる関数gに相当する。この逆誤差伝播用関数である関数gは、例えば、出力関数fの微分関数である。
教師データ記憶部173には、入力パターンに対する教師データが記憶される。この教師データとは、上記ステップC5でのp番目に提示された入力パターンdpjに相当する。逆誤差伝播用換算値記憶部174には、逆誤差伝播用換算値が記憶される。この逆誤差伝播用換算値とは、上記ステップC4での式4で算出されるδに相当する。
第1逆誤差伝播用換算値算出部180は、上記のステップC4での式4に基いた演算を実行することにより第1逆誤差伝播用換算値(式4のδpj (L+2))を算出し、該算出した第1逆誤差伝播用換算値を逆誤差伝播用換算値記憶部174に記憶するとともに、データ出力部104Aを介して分配制御部8に出力する。第1結合係数更新部181は、上記のステップC5での式6と式7とに基いた演算を実行することにより、重み記憶部130に記憶されている結合荷重を修正して更新する。
逆誤差伝播用積和計算一次値算出部182は、上記のステップC5での式7に基いた演算を実行することにより、式7のΣにより積和する項である逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部171に記憶する。第2逆誤差伝播用換算値算出部183は、上記のステップC6での式7に基いた演算を実行することにより、逆誤差伝播用換算値を算出し、該算出した逆誤差伝播用換算値を逆誤差伝播用換算値記憶部174に記憶する。
第2結合係数更新部184は、上記のステップC7での式8と式9とに基いた演算を実行することにより、重み記憶部130に記憶されている結合荷重を修正して更新する。
この第1逆誤差伝播用換算値算出部180と、第1結合係数更新部181と、逆誤差伝播用積和計算一次値算出部182と、第2逆誤差伝播用換算値算出部183と、第2結合係数更新部184とについては、図41のプロトコル表と図42から図52とを用いて、制御コードAの値毎に詳細に説明する。なお、ユニット制御部216Bは、入力される制御コードAの値に基づいて、図19(または図24や図35)を用いて説明したように、予め定められた処理を実行する。
<選択処理111>
まず、図41のプロトコル表と図42とを用いて、制御コードAの値が“111”の場合について説明する。制御データに含まれる制御コードAの値が“111”であり、“学習係数を設定する”ことを示す場合には、この制御データは、学習係数Hを含んでいる。
この制御コードAの値が“111”であり、“学習係数を設定する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部116Bが、制御データに含まれている学習係数Hを、学習係数記憶部170に記憶して設定する。
<選択処理112>
次に、図41のプロトコル表と図43とを用いて、制御コードAの値が“112”の場合について説明する。制御データに含まれる制御コードAの値が“112”であり、“逆誤差伝播用積和計算一次値の値を0に初期化する”ことを示す場合には、この制御データは、制御コードAのみを含んでいる。この制御コードAの値が“112”であり、“逆誤差伝播用積和計算一次値の値を0に初期化する”ことを示す制御データを受信した全てのユニットは、ユニットのユニット制御部116Bが、逆誤差伝播用積和計算一次値記憶部171に記憶されている逆誤差伝播用積和計算一次値の値を0に初期化する。
<選択処理113>
次に、図41のプロトコル表と図44とを用いて、制御コードAの値が“113”の場合について説明する。制御データに含まれる制御コードAの値が“113”であり、“局所誤差を算出する”ことを示す場合には、この制御データは、選択ユニット番号Bと層インデックスLaと、該層インデックスLaと選択ユニット番号Bとで識別される出力層におけるユニットが出力すべき値であった教師データDとを含んでいる。この制御コードAの値が“113”であり、“局所誤差を算出する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Bと自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iとが一致する場合には、ユニットの第1逆誤差伝播用換算値算出部180が、教師データDに基いて、層インデックスLaに基いた層に該当する第1逆誤差伝播用換算値を算出し、該算出した第1逆誤差伝播用換算値を分配制御部8にデータ出力部104Aを介して出力する。
具体的には、まず、比較部115Bが、制御データに含まれる選択ユニット番号と固有ユニット番号記憶部140Bから読み出した固有ユニット番号とが一致するか否かを判定する。なお、比較部115Bは、ユニット制御部116Bが、制御データから抽出した選択ユニット番号を選択ユニット番号記憶部141Bに記憶したことに応じて、選択ユニット番号記憶部141Bから選択ユニット番号を読み出し、該読み出した選択ユニット番号と、固有ユニット番号記憶部140Bから読み出した固有ユニット番号とが一致するか否かを判定する。
次に、比較部115Bの判定結果が一致する場合には、ユニット制御部116Bが、制御データから抽出した教師データDを教師データ記憶部173に記憶し、制御データから抽出した層インデックスLaを層情報記憶部133に記憶するとともに、第1逆誤差伝播用換算値算出部180の処理を選択的に実行させる。
次に、第1逆誤差伝播用換算値算出部180が、上記のステップC4での式4に基いた演算を実行することにより第1逆誤差伝播用換算値を算出し、該算出した第1逆誤差伝播用換算値を、逆誤差伝播用換算値記憶部174に記憶するとともに、分配制御部8にデータ出力部104Aを介して出力する。
この第1逆誤差伝播用換算値算出部180の処理を詳細に説明すると、まず、第1逆誤差伝播用換算値算出部180は、層情報記憶部133から読み出した層インデックスLaと固有ユニット番号記憶部140Bから読み出した固有ユニット番号Iとに基いて、層インデックスLaに2を加算した層情報と固有ユニット番号Iとに該当する出力値(式4のypj (L+2)の項)をユニット出力記憶部135Aから読み出し、該読み出した出力値と、教師データ記憶部173から読み出した教師データ(式4のdpjの項)との差である誤差(式4の(ypj (L+2)−dpj)の項)を算出する。次に、第1逆誤差伝播用換算値算出部180は、層インデックスLaに2を加算した層情報と固有ユニット番号Iとに該当する積和計算一次値情報(式4のspj (L+2)の項)を積和計算一次値記憶部131から読み出すとともに、層インデックスLaに2を加算した層情報に該当する逆誤差伝播用関数(式4のgj (L+2)の項)を逆誤差伝播用関数記憶部172から読み出し、読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入する。次に、第1逆誤差伝播用換算値算出部180は、この積和計算一次値情報を逆誤差伝播用関数に代入して算出した値に、上記で算出した誤差を乗じることにより、第1逆誤差伝播用換算値(式4のδpj (L+2)の項)を算出する。次に、第1逆誤差伝播用換算値算出部180は、該算出した第1逆誤差伝播用換算値を、層インデックスLaに2を加算した層情報と固有ユニット番号Iとに関連付けて、逆誤差伝播用換算値記憶部174に記憶するとともに、分配制御部8にデータ出力部104Aを介して出力する。
<選択処理114>
次に、図41のプロトコル表と図45とを用いて、制御コードAの値が“114”の場合について説明する。制御データに含まれる制御コードAの値が“114”であり、“結合係数を修正する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δとユニット情報Jと層インデックスLaとを含んでいる。この制御コードAの値が“114”であり、“結合係数を修正する”ことを示す制御データを受信した全てのユニットは、ユニットの第1結合係数更新部181が、制御データに含まれるユニット情報Jと層インデックスLaとに該当する重み記憶部130に記憶されている結合荷重を、逆誤差伝播用換算値Δに基いて更新して修正する。なお、この逆誤差伝播用換算値Δとは、先に選択処理113で説明した第1逆誤差伝播用換算値(式4のδpj (L+2)の項)である。
具体的には、ユニット制御部116Bが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスLaとユニット情報Jとに関連付けて、逆誤差伝播用換算値記憶部174に記憶し、制御データから抽出した層インデックスLaを層情報記憶部133に記憶し、制御データから抽出したユニット情報Jを前段ユニット番号記憶部139Bに記憶するとともに、第1結合係数更新部181の処理を選択的に実行させる。
次に、第1結合係数更新部181が、逆誤差伝播用換算値Δに基いて、上記のステップC5での式5と式6とに基いた演算を実行することにより、制御データに含まれるユニット情報Jと層インデックスLaとに該当する重み記憶部130に記憶されている結合荷重を更新して修正する。
この第1結合係数更新部181の処理を詳細に説明すると、まず、第1結合係数更新部181は、層情報記憶部133から読み出した層インデックスLaと固有ユニット番号記憶部140Bから読み出した固有ユニット番号Iとに基いて、層インデックスLaに1を加算した層情報と固有ユニット番号Iとに該当する出力値(式5のxpj (L+1)の項)をユニット出力記憶部135Aから読み出す。また、第1結合係数更新部181は、層インデックスLaに2を加算した層情報と固有ユニット番号Iとに該当する第1逆誤差伝播用換算値を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部174から読み出す。また、第1結合係数更新部181は、学習係数を学習係数記憶部170から読み出す。
次に、第1結合係数更新部181は、読み出した出力値(式5のxpj (L+1)の項)と、読み出した逆誤差伝播用換算値Δ(式5のδpj (L+2)の項)と、読み出した学習係数(式5のηの項)とを乗じ、更に、数値−1を乗じて式5の演算を実行することにより、学習係数更新値(式5のΔpwji (L+1)の項)を算出する。次に、第1結合係数更新部181は、層インデックスLaに1を加算した層情報と固有ユニット番号Iとユニット情報Jとに該当する結合荷重(式6のwji (L+1)OLDの項)を重み記憶部130から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値(式5または式6のΔpwji (L+1)の項)を加算することにより、新しい結合荷重(式6のwji (L+1)NEWの項)を算出する。次に、第1結合係数更新部181は、該算出した新しい結合荷重を、層インデックスLaに1を加算した層情報と固有ユニット番号Iとユニット情報Jとに関連付けて重み記憶部130に記憶することにより、結合荷重を更新する。
<選択処理115>
次に、図41のプロトコル表と図46とを用いて、制御コードAの値が“115”の場合について説明する。制御データに含まれる制御コードAの値が“115”であり、“結合係数を取得する”ことを示す場合には、この制御データは、選択ユニット番号Bとユニット情報Jと層インデックスLaとを含んでいる。この制御コードAの値が“115”であり、“結合係数を取得する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Bと自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iとが一致する場合には、ユニットのユニット制御部116Bが、制御データに含まれるユニット情報Jと層インデックスLaとに該当する結合荷重を重み記憶部130から読み出し、該読み出した結合荷重を、分配制御部8にデータ出力部104Aを介して出力する。ただし、この結合荷重であるWjiの添え字iは、自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iのことである。
<選択処理116>
次に、図41のプロトコル表と図47とを用いて、制御コードAの値が“116”の場合について説明する。制御データに含まれる制御コードAの値が“116”であり、“結合係数を更新する”ことを示す場合には、この制御データは、選択ユニット番号Bと更新結合荷重Wと層インデックスLaとユニット情報Eとを含んでいる。この制御コードAの値が“116”であり、“結合係数を更新する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Bと自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iとが一致する場合には、ユニットのユニット制御部116Bが、制御データに含まれる層インデックスLaと、ユニット情報Eと、固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iとに該当する重み記憶部130に記憶してある結合荷重wji (La)を、更新結合荷重Wに更新する。
なお、この更新結合荷重Wとは、選択処理115で、ユニットが出力した結合荷重である。また、この結合荷重であるWjiの添え字jは、自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iのことである。
<選択処理117>
次に、図41のプロトコル表と図48とを用いて、制御コードAの値が“117”の場合について説明する。制御データに含まれる制御コードAの値が“117”であり、“誤差情報を積和計算する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δと層インデックスLaとユニット情報Kとを含んでいる。この制御コードAの値が“117”であり、“誤差情報を積和計算する”ことを示す制御データを受信した全てのユニットは、ユニットの逆誤差伝播用積和計算一次値算出部182が、制御データに含まれる逆誤差伝播用換算値Δと層インデックスLaとユニット情報Kとに基づいて、上記式7のΣの中のδpk (l+2)wkj (l+1)の項である逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部171に加算して記憶する。
具体的には、ユニット制御部116Bが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスLaと、固有ユニット情報記憶部140Bから読み出した固有ユニット情報Iと関連付けて、逆誤差伝播用換算値記憶部174に記憶する。また、ユニット制御部116Bが、制御データから抽出した層インデックスLaを層情報記憶部133に記憶し、制御データから抽出したユニット情報Kを前段ユニット番号記憶部139Bに記憶するとともに、逆誤差伝播用積和計算一次値算出部182の処理を選択的に実行させる。
次に、逆誤差伝播用積和計算一次値算出部182は、層情報記憶部133から読み出した層インデックスlと、前段ユニット番号記憶部139Bから読み出したユニット情報jとに基づいて、重み記憶部138Bから読み出した結合荷重wkj (l+1)と、逆誤差伝播用換算値記憶部174から読み出した逆誤差伝播用換算値δpk (l+2)とを乗じて逆誤差伝播用積和計算一次値を算出し、該算出した逆誤差伝播用積和計算一次値を、層インデックスl+2に基いて、逆誤差伝播用積和計算一次値記憶部171に加算して記憶する。
<選択処理118>
次に、図41のプロトコル表と図49とを用いて、制御コードAの値が“118”の場合について説明する。制御データに含まれる制御コードAの値が“118”であり、“前段からの入力と結合係数との積和値の誤差を逆算する”ことを示す場合には、この制御データは、層インデックスLaを含んでいる。この制御コードAの値が“118”であり、“前段からの入力と結合係数との積和値の誤差を逆算する”ことを示す制御データを受信した全てのユニットは、ユニットの第2逆誤差伝播用換算値算出部183が、制御データに含まれる層インデックスLaに基いて、上記式7のδpj (l+1)の項である第2逆誤差伝播用換算値を算出し、該算出した第2逆誤差伝播用換算値を層インデックスLa+1と関連付けて逆誤差伝播用換算値記憶部174に記憶する。ただし、式7における添え字jは、この場合、自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iのことである。
具体的には、まず、比較部115Bが、制御データから抽出した層インデックスLaを層情報記憶部133に記憶するとともに、第2逆誤差伝播用換算値算出部183の処理を選択的に実行させる。
次に、第2逆誤差伝播用換算値算出部183が、上記のステップC6での式7に基いた演算を実行することにより第2逆誤差伝播用換算値を算出し、該算出した第2逆誤差伝播用換算値を、逆誤差伝播用換算値記憶部174に記憶する。
この第2逆誤差伝播用換算値算出部183の処理を詳細に説明すると、まず、第2逆誤差伝播用換算値算出部183は、層情報記憶部133から読み出した層インデックスlに基いて、層インデックスlに1を加算した層情報に該当する積和計算一次値情報(式7のspj (l+1)の項)を積和計算一次値記憶部131から読み出すとともに、層インデックスlに1を加算した層情報に該当する逆誤差伝播用関数(式7のgj (l+1)の関数)を逆誤差伝播用関数記憶部172から読み出し、読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入する。次に、第2逆誤差伝播用換算値算出部183は、層インデックスlに2を加算した層情報に該当する逆誤差伝播用積和計算一次値を逆誤差伝播用積和計算一次値記憶部171から読み出し、該読み出した逆誤差伝播用積和計算一次値と、前記読み出した積和計算一次値情報を読み出した逆誤差伝播用関数に代入した値とを乗じて、第2逆誤差伝播用換算値(式7のδpj (l+1)の項)を算出し、該算出した第2逆誤差伝播用換算値を、層インデックスlに1を加算した層情報と関連付けて、逆誤差伝播用換算値記憶部174に記憶する。
<選択処理119>
次に、図41のプロトコル表と図50とを用いて、制御コードAの値が“119”の場合について説明する。制御データに含まれる制御コードAの値が“119”であり、“第2逆誤差伝播用換算値を出力する”ことを示す場合には、この制御データは、選択ユニット番号Bと層インデックスLaとを含んでいる。この制御コードAの値が“119”であり、“第2逆誤差伝播用換算値を出力する”ことを示す制御データを受信した全てのユニットは、制御データに含まれる選択ユニット番号Bと自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iとが一致する場合には、ユニットの制御部116bが、制御データに含まれている選択ユニット番号Bと層インデックスLaとに基いて逆誤差伝播用換算値記憶部174から読み出した第2逆誤差伝播用換算値を分配制御部8にデータ出力部104Aを介して出力する。ただし、この場合、ユニットの制御部116bは、逆誤差伝播用換算値記憶部174から読み出す第2逆誤差伝播用換算値δpjにおける、添え字jが、自ユニットの固有ユニット番号記憶部140Bに記憶されている固有ユニット番号Iに対応する第2逆誤差伝播用換算値を読み出す。
<選択処理120>
次に、図41のプロトコル表と図51と図52とを用いて、制御コードAの値が“120”の場合について説明する。制御データに含まれる制御コードAの値が“120”であり、“結合係数を修正する”ことを示す場合には、この制御データは、逆誤差伝播用換算値Δとユニット情報Jと層インデックスLaとを含んでいる。この制御コードAの値が“114”であり、“結合係数を修正する”ことを示す制御データを受信した全てのユニットは、ユニットの第2結合係数更新部184が、制御データに含まれるユニット情報Jと層インデックスLaとに該当する重み記憶部130に記憶されている結合荷重を、逆誤差伝播用換算値Δに基いて更新して修正する。なお、この逆誤差伝播用換算値Δとは、先に選択処理119で説明した第2逆誤差伝播用換算値(式7のδpj (l+2)の項)である。
なお、この第2結合係数更新部184は、入力された層インデックスLaの値が1でない場合には、図51に示すように、出力値(式8のxpj (l)の項)をユニット出力記憶部135Aから読み出し、該読み出した出力値に基づいて、重み記憶部130に記憶されている結合荷重を更新する。また、この第2結合係数更新部184は、入力された層インデックスLaの値が1である場合には、図52に示すように、出力値(式8のxpj (l)の項)を前段ユニット出力記憶部138Bから読み出し、該読み出した出力値に基づいて、重み記憶部130に記憶されている結合荷重を更新する。
なお、第2結合係数更新部184は、層インデックスLaの値が1であるか否かにより、出力値(式8のxpj (l)の項)を、前段ユニット出力記憶部138Bまたはユニット出力記憶部135Aから読み出す。その他の処理については、上記で選択処理114において説明したユニット制御部116Bと第1結合係数更新部181と、この選択処理120におけるユニット制御部116Bと第2結合係数更新部184とは、同様である。
次に、図51を用いて、制御コードAの値が“120”の場合であって、入力された層インデックスLaの値が1でない場合、つまり、中間層に関する結合荷重の更新の場合について、具体的に説明する。まず、ユニット制御部116Bが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスLaと制御データから抽出したユニット情報Jとに関連付けて、逆誤差伝播用換算値記憶部174に記憶する。また、ユニット制御部116Bが、制御データから抽出した層インデックスLaを層情報記憶部133に記憶し、制御データから抽出したユニット情報Jを前段ユニット番号記憶部139Bに記憶するとともに、第2結合係数更新部184の処理を選択的に実行させる。
次に、第2結合係数更新部184が、逆誤差伝播用換算値Δに基いて、上記のステップC7での式8と式9とに基いた演算を実行することにより、制御データに含まれるユニット情報Jと層インデックスLaとに該当する重み記憶部130に記憶されている結合荷重を更新して修正する。
この第2結合係数更新部184の処理を詳細に説明すると、まず、第2結合係数更新部184は、層情報記憶部133から読み出した層インデックスlと前段ユニット番号記憶部139Bから読み出したユニット情報jとに基いて、層インデックスlとユニット情報jとに該当する出力値(式8のxpi (l)の項)をユニット出力記憶部135Aから読み出す。また、第2結合係数更新部184は、層インデックスlに1を加算した層情報と前段ユニット番号記憶部139Bから読み出したユニット情報jとに該当する逆誤差伝播用換算値(式8のδpi (l+1)の項)を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部174から読み出す。また、第2結合係数更新部184は、学習係数を学習係数記憶部170から読み出す。
次に、第2結合係数更新部184は、読み出した出力値(式8のxpi (l)の項)と、読み出した逆誤差伝播用換算値Δ(式8のδpi (l+1)の項)と、読み出した学習係数(式8のηの項)とを乗じ、更に、数値−1を乗じて式8の演算を実行することにより、学習係数更新値(式8のΔpwji (l)の項)を算出する。次に、第2結合係数更新部184は、層インデックスlと固有ユニット番号Iとユニット情報Jとに該当する結合荷重(式9のwji (l)OLDの項)を重み記憶部130から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値(式8のΔpwji (l)の項)を加算することにより、新しい結合荷重(式8のwji (l)NEWの項)を算出する。次に、第1結合係数更新部181は、該算出した新しい結合荷重を、層インデックスlと固有ユニット番号Iとユニット情報jとに関連付けて重み記憶部130に記憶することにより、結合荷重を更新する。
次に、図52を用いて、制御コードAの値が“120”の場合であって、入力された層インデックスLaの値が1である場合、つまり、入力層に関する結合荷重の更新の場合について、具体的に説明する。まず、ユニット制御部116Bが、制御データから抽出した逆誤差伝播用換算値Δを、制御データから抽出した層インデックスLaと制御データから抽出したユニット情報Jとに関連付けて、逆誤差伝播用換算値記憶部174に記憶する。また、ユニット制御部116Bが、制御データから抽出した層インデックスLaを層情報記憶部133に記憶し、制御データから抽出したユニット情報Jを前段ユニット番号記憶部139Bに記憶するとともに、第2結合係数更新部184の処理を選択的に実行させる。
次に、第2結合係数更新部184が、逆誤差伝播用換算値Δに基いて、上記のステップC7での式8と式9とに基いた演算を実行することにより、制御データに含まれるユニット情報Jと層インデックスLaとに該当する重み記憶部130に記憶されている結合荷重を更新して修正する。
この第2結合係数更新部184の処理を詳細に説明すると、まず、第2結合係数更新部184は、層情報記憶部133から読み出した層インデックスlと前段ユニット番号記憶部139Bから読み出したユニット情報jとに基いて、層インデックスlとユニット情報jとに該当する出力値(式8のxpi (l)の項)を前段ユニット出力記憶部138Bからから読み出す。また、第2結合係数更新部184は、層インデックスlに1を加算した層情報と前段ユニット番号記憶部139Bから読み出したユニット情報jとに該当する逆誤差伝播用換算値(式8のδpi (l+1)の項)を、つまり、制御データに含まれていた逆誤差伝播用換算値Δを、逆誤差伝播用換算値記憶部174から読み出す。また、第2結合係数更新部184は、学習係数を学習係数記憶部170から読み出す。
次に、第2結合係数更新部184は、読み出した出力値(式8のxpi (l)の項)と、読み出した逆誤差伝播用換算値Δ(式8のδpi (l+1)の項)と、読み出した学習係数(式8のηの項)とを乗じ、更に、数値−1を乗じて式8の演算を実行することにより、学習係数更新値(式8のΔpwji (l)の項)を算出する。次に、第2結合係数更新部184は、層インデックスlと固有ユニット番号Iとユニット情報Jとに該当する結合荷重(式9のwji (l)OLDの項)を重み記憶部130から読み出し、該読み出した結合荷重に、上記で算出した学習係数更新値(式8のΔpwji (l)の項)を加算することにより、新しい結合荷重(式8のwji (l)NEWの項)を算出する。次に、第1結合係数更新部181は、該算出した新しい結合荷重を、層インデックスlと固有ユニット番号Iとユニット情報jとに関連付けて重み記憶部130に記憶することにより、結合荷重を更新する。
なお、第3の実施形態において説明した<選択処理1>において、つまり順方向の演算において、制御コードAの値が1である制御データを受信した全てのユニットのユニット制御部116Bが、制御コードから抽出した出力値Cを、前段ユニット出力記憶部138Bに記憶している。入力層に関する結合荷重の更新の場合において、第2結合係数更新部184は、この前段ユニット出力記憶部138Bに記憶されている出力値C、つまり、入力データを用いて、重み記憶部130に記憶されている結合荷重を更新する。
つまり、前段ユニット出力記憶部138Bには、入力層としての自ユニットに入力された入力パターンを記憶されている。そして、第2結合係数更新部184は、入力層に関する重み記憶部130に記憶されている結合荷重を更新する場合には、ユニット出力記憶部135Aから読み出した出力値に替えて、前段ユニット出力記憶部138Bから読み出した入力パターンに基づいて、重み記憶部130に記憶されている結合荷重を更新する。
よって、入力パターンを記憶しておき、この記憶した入力パターンに基づいて、中間層からその1つ前の層である出力層に対する結合荷重を更新することが出来ることにより、再度入力パターンを入力することなく、階層型ニューラルネットワークにおいて、入力層に関して学習することが出来るという効果を奏する。
<第5の実施形態における分配制御部8の動作>
次に、図53と図54とを用いて、第2の基本構成による並列演算装置を階層型ニューラルネットワークに適応した場合の分配制御部8の動作について説明する。なお、分配制御部8が出力した制御データに含まれる制御コードの値に応じた各ユニットの動作については、図40から図52を用いて既に説明したので、ここでは、分配制御部8の動作のみについて説明する。なお、ここでも図6の階層型ニューラルネットワークに、第2の基本構成による並列演算装置を適応した場合について説明する。
なお、この図53と図54との分配制御部8の処理は、図20と図21とを用いて説明した分配制御部8の処理の後に、実行されるものである。つまり、入力層から出力層への順方向の処理が終了した後、出力層から入力層への逆方向の処理である学習が行われる。ここで、図20と図21とにおける順方向の処理が既に実行されているので、各ユニットのユニット出力記憶部135Aには、演算結果である出力値が記憶されている。また、ここでは、ユニット出力算出部112Aが、ユニット出力記憶部135Aに、層情報とユニット識別情報と関連付けて出力値が記憶されているものとして説明する。
まず、図53(a)を用いて、分配制御部8の動作概要について説明する。まず、初期設定をする(ステップS531)。次に、カウンタ変数jの値を1から、2、3、・・・N(L+2)まで順次増加させながら、次のステップS533の処理を繰り返す(ステップS531〜ステップS534のループ処理)。このN(L+2)は、層識別情報の値がL+2である層のノード数の値、つまり、出力層L3のノード数の値である。例えば、図6の階層型ニューラルネットワークにおいては、この入力層L1のノード数の値は3である。また、カウンタ変数jは、(L+2)層におけるユニットを識別するために用いられる変数である。
このステップS533では、カウンタ変数jに基いて、出力層のユニットが、順に、出力層へ向かう結合定数を修正する。
次に、カウンタ値lの値をLから、L−1、・・・1まで順次減少させながら、つまり、層変数が出力層から入力層へ順に入力層になるまで、隠れ層の分だけ、次のステップS536の処理を、繰り返す(ステップS535〜ステップS537のループ処理)。このステップS536では、隠れ層へ向かう結合定数を修正する。このカウンタ値lは、層を識別するために用いられる変数である。
次に、図53(b)と図53(c)、および、図54とを用いて、図53(a)のステップS531、ステップS533、および、ステップS536の処理について、詳細に説明する。
まず、図53(b)を用いて、図53(a)のステップS531について説明する。まず、制御コードAの値を“111”とし、学習係数Hの値をηとした制御データを、各ユニットに出力する(ステップS5311)。次に、制御コードAの値を“111”とした制御データを、各ユニットに出力し(ステップS5312)、処理を戻す。なお、この学習係数Hの値であるηは、予め定められた値でもよいし、学習の回数に応じて、または、学習測度に応じて、値を変更するようにしてもよい。
次に、図53(c)を用いて、図53(a)のステップS533について説明する。まず、制御コードAの値を“113”とし、選択ユニット番号Bの値をカウンタ変数jとし、層インデックスLaの値を1とし、教師データDの値をdjとした制御データを、各ユニットに出力する(ステップS5331)。次に、ステップS5331で出力した制御データに応じて、ユニットから誤差δj (L+2)を入力する(ステップS5331)。
次に、制御コードAの値を“114”とし、逆誤差伝播用換算値Δの値をステップS5331で入力した誤差δj (L+2)とし、層インデックスLaの値をLとし、ユニット情報Jの値をカウンタ変数jとした制御データを、各ユニットに出力する(ステップS5333)。
次に、カウンタ変数iの値を、0から、1,2,・・・・N(L+1)まで、次のステップS5335からステップS5337の処理を、繰り返す(ステップS5334〜ステップS5338のループ処理)。このカウンタ変数iは、(L+1)層のユニットを識別する変数として用いられる。
このステップS5335では、制御コードAの値を“115”とし、選択ユニット番号Bの値をカウンタ変数iとし、層インデックスLaの値をL+1とし、ユニット情報Jの値をカウンタ変数jとした制御データを、各ユニットに出力する。また、このステップS5336では、ステップS5335で出力した制御データに応じて、ユニットから出力される結合荷重wji (L+1)を入力する。また、このステップS5337では、制御コードAの値を“116”とし、選択ユニット番号Bの値をカウンタ変数jとし、更新結合荷重Wの値をステップS5335で入力した結合荷重wji (L+1)とし、層インデックスLaの値をL+1とし、ユニット情報Eの値をカウンタ変数iとした制御データを、各ユニットに出力する。
次に、図54を用いて、図53(a)のステップS536について説明する。まず、カウンタ変数kの値を、1から2,・・・・,N(l+2)まで、次のステップS53602の処理を、繰り返す(ステップS53601〜ステップS53603のループ処理)。なお、このカウンタ変数kは、(l+2)層のユニットを識別する変数として用いられる。次に、このステップS53602では、制御コードAの値を“117”とし、逆誤差伝播用換算値Δの値をステップS5332で入力した誤差δpj (l+2)とし、層インデックスLaの値をカウンタ変数lとし、ユニット情報Kの値をカウンタ変数kとした制御データを、各ユニットに出力する。次に、制御コードAの値を“118”とし、層インデックスLaの値をカウンタ変数lとした制御データを、各ユニットに出力する(ステップS53604)。
次に、カウンタ変数jの値を、0から、1,2,・・・・N(l+1)まで、次のステップS53606からステップS53613の処理を、繰り返す(ステップS53605〜ステップS53614のループ処理)。このカウンタ変数jは、(l+1)層のユニットを識別する変数として用いられる。
次に、このステップS53606では、制御コードAの値を“119”とし、選択ユニット番号Bの値をカウンタ変数jとし、層インデックスLaの値をlとした制御データを、各ユニットに出力する。次に、このステップS53607では、ステップS53606で出力した制御データに応じてユニットが出力した誤差δpj (l+1)を入力する。次に、制御コードAの値を“120”とし、逆誤差伝播用換算値Δの値をステップS53607で入力した誤差δpj (l+1)とし、層インデックスLaの値をlとし、ユニット情報Jの値をカウンタ変数jとした制御データを、各ユニットに出力する。
次に、カウンタ変数iが0から、1,2,・・・N(l)まで、次のステップS53610からステップS53613の処理を、繰り返す(ステップS53609〜ステップS53613のループ2処理)。このカウンタ変数iは、(l)層のユニットを識別する変数として用いられる。
次に、このステップS53610では、制御コードAの値を“115”とし、選択ユニット番号Bの値をカウンタ変数iとし、層インデックスLaの値をカウンタ変数lとし、ユニット情報Jの値をカウンタ変数jとした制御データを、各ユニットに出力する。また、このステップS53611では、ステップS53610で出力した制御データに応じて、ユニットから出力される結合荷重wji (l)を入力する。また、このステップS53612では、制御コードAの値を“116”とし、選択ユニット番号Bの値をカウンタ変数jとし、更新結合荷重Wの値をステップS53611で入力した結合荷重wji (l)とし、層インデックスLaの値をカウンタ変数lとし、ユニット情報Eの値をカウンタ変数iとした制御データを、各ユニットに出力する。
図53と図54とを用いて説明したように、分配制御部8は、階層型ニューラルネットワークの層の数と、各層におけるユニットの数とに基いて、制御コードを予め定められた順に各ユニットに出力することにより、各ユニットが内部の重み記憶部130に記憶している結合荷重を、学習データに合わせて更新する。
以上の図40から図54を用いて説明した第6の実施形態によれば、第2の基本構成に階層型ニューラルネットワークに適応した場合の並列演算装置において、各ユニットが学習部190を有し、分配制御部8が、階層型ニューラルネットワークの層の数と各層におけるユニットの数とに基いて、制御コードを予め定められた順に各ユニットに出力することにより、逆誤差伝播法により結合荷重(結合係数)を修正することが可能となり、よって、ニューラルネットワークの学習をすることが可能となる効果を奏する。
なお、上記に説明した逆誤差伝播法はフィードバック結合を持たない階層型ニューラルネットワークについて最も効果を発揮するが、フィードバック結合を有するリカレント型フィードバックについても、適切に空間展開を行うことでフィードバック結合を持たない階層型ニューラルネットワークとしてアルゴリズムを適応できることが知られている。このため本構成の適用範囲は、明示的にフィードバック結合を持たない階層型ニューラルネットワークに限定されるものではない。
また、上記においては、第6の実施形態として、第3の実施形態として説明した第2の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるようにする場合の構成について説明したが、同様に、第1の実施形態として説明した第1の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、逆誤差伝播による学習が実行できるように構成してもよい。
また、第6の実施形態による並列演算装置においては、1つのパターンデータを入力し、その後、該1つのパターンデータに対応する期待値である教師データを入力し、該教師データに基いて、1回の結合係数を修正する場合について説明した。しかし、これに限られるものでなく、例えば、分配制御部8が、上記ステップC9で説明した誤差測度を演算するようにし、この演算した誤差測度に基づいて、上記で説明したステップC3からステップC8の処理、つまり、上記で説明した図53と図54とを用いて説明した処理を、繰り返して、複数回の学習を実行するようにしてもよい。また、分配制御部8が、複数のパターンデータと、対応する複数の教師データに基づいて、上記で説明したステップC1からステップC9の処理の処理を、実行するようにしてもよい。
<第7の実施形態:共有重み記憶部>
次に、第6の実施形態として説明した第2の基本構成に階層型ニューラルネットワークを適応した場合の並列演算装置において、各ユニットが有する重み記憶部130を、各ユニットで共有される共有重み記憶部とした場合の構成を、第7の実施形態として説明する。
まず、第7の実施形態の概要について説明する。第6の実施形態においては、入力層から出力層へと順方向へ伝播する順伝播モードと、出力層から入力層へと逆方向に伝播し、逆誤差伝播を用いた学習を実行する逆誤差伝播モード(学習モード)とでは、入力層と出力層との間の層に対応するノードにおける信号の流れが逆になり、信号を送る側と積和計算を担うノード、つまりユニットが交代する。しかしながら、結合荷重は順伝播モードと逆誤差伝播モードとでは、同じ結合荷重を用いて演算する。
ここで、第6の実施形態においては、同一の結合荷重が、順伝播モードと逆誤差伝播モードとに対応させて、異なる2つの記憶部、つまり、2つの異なるユニットの重み記憶部130に、記憶されている。
そのため、この2つの記憶部に記憶されている対応する結合荷重の値を、逆誤差伝播モードにおいて更新する場合には、2つの記憶部に記憶されている対応する結合荷重の値が同一となるように更新する必要があった。具体的には、図53(c)のステップS5334からステップS5338の処理、および、図54のステップS53609からステップS53613の処理により、この結合荷重の値を一致させる処理を実行する必要があった。
これに対して、第7の実施形態においては、順伝播モードと逆誤差伝播モードとで、層間での演算に用いる結合荷重が記憶されており、2つのユニットが互いに共有する記憶部を共有記憶部とする。また、この共有記憶部においては、複数の記憶ユニットを、格子状に配置する。また、この共有記憶部を構成する記憶ユニットに対して、メモリアクセスするためのアドレスバス、データバス、および、コントロールバスが、全ての記憶ユニットに格子状に接続しており、伝播層に応じて、格子の列方向もしくは行方向のいずれかをアクティブとする。また、後述するバス配線と制御方法により、メモリアクセス時に衝突することがない。
このように、第7の実施形態においては、2つのユニットが結合荷重を重複してメモリする必要がなくなるため、逆誤差伝播アルゴリズムの実行時間を短縮することができる。具体的には、図53(c)のステップS5334からステップS5338の処理、および、図54のステップS53609からステップS53613の処理が不要となり、そのため、演算の実行時間を短縮することができるという効果を奏する。
次に、図56を用いて、第7の実施形態における並列演算装置の構成について説明する。なお、以降においては、図55に示されるように、入力層がp101からp104の4個のノードであり、隠れ層がp201からp210の10個のノードであり、出力層がp301からp303の3個のノードである階層型ニューラルネットワークを演算する場合の並列演算装置について説明する。
なお、入力層を1層目とし、入力層から出力層へ向かう層の順に、層の順序を示す値が2層目、3層目、・・・と、順に番号が付してあるものとする。また、層の順序を示す値が、奇数である層を奇数層と称し、偶数である層を偶数層と称して説明する。
並列演算装置は、複数のユニット(AU1〜AU10)に共有され、階層型ニューラルネットワークでの複数の層における結合荷重が予め記憶されている共有重み記憶部を有している。この共有重み記憶部は、図56に示すように、複数の記憶ユニットm11、m12、m13、m14、m21、m22、・・・・m103、m104と、後述する複数の行スイッチrs11、rs12、rs13、・・・・rs103、および、後述する複数の列スイッチcs11、cs12、cs13、・・・・cs94を有する。
また、この共有重み記憶部には、階層型ニューラルネットワークにおいて階層を識別する層情報と、階層型ニューラルネットワークにおいて出力値を出力しているノードを識別する出力ノード情報と、階層型ニューラルネットワークにおいて出力値を入力しているノードを識別する出力ノード情報と、に関連付けて結合荷重が記憶されている。
また、この共有重み記憶部は、入力ノード情報の1つの値と出力ノード情報の1つの値とに対応する結合荷重が、層情報の異なる値毎に記憶されている複数の記憶ユニット(図56では、記憶ユニットm11、m12、m13、m14、m21、m22・・・・m103、m104)を有している。
たとえば、図59に示すように、結合荷重W(2) 12と結合荷重W(3) 21との2つの層に対応する結合係数が、記憶ユニットm12には記憶されている。なお、図59には、図56の複数の記憶ユニットに対応して、各記憶ユニットに記憶される結合荷重が、表形式で示してある。ここでは、図59の表において、行方向の番号が2であり列方向の番号が1である枠内に示されている結合係数が、記憶ユニットm12には記憶されている結合係数に対応する。なお、この図59に示されている結合荷重は、図57で示す2層目に対応する結合荷重と、3層目に対応する結合荷重とが、まとめて記憶されている。
なお、図55で示してある階層型ニューラルネットワークにおいては、入力層に4個のノードがあり、隠れ層に10個のノードがあり、出力層に3個のノードがあるため、この層におけるノード数に対応して、上記結合荷重が記憶されている。そのため、図58の4列目に示すように、対応する結合荷重が不要となる場合もある。
また、図59に示すように、この記憶ユニットには、層情報の順に、入力ノード情報の1つの値と出力ノード情報の1つの値とが交互となる結合荷重が記憶されている。たとえば、次に説明する図59の表において、記憶ユニットm12に記憶されている結合荷重は、結合荷重W(2) 12と結合荷重W(3) 21とであるが、入力ノード情報と出力ノード情報との値が、層情報の順に、1と2とで交互となる。
また、複数の記憶ユニットのそれぞれは、記憶ユニットに記憶されている結合荷重の入力ノード情報および出力ノード情報と、ユニットが階層型ニューラルネットワークにおいて演算するノードとに基づいて、複数のユニットのうち、2つのユニットに共有されている。
たとえば、記憶ユニットm12には、図59に示されるように結合荷重W(2) 12と結合荷重W(3) 21とが記憶されており、入力ノード情報の値は1または2であり、出力ノード情報の値は1または2である。ここで、たとえば、ユニット固有情報に基づいて、ユニットが階層型ニューラルネットワークにおいて演算するノードが予め定められている。そのため、たとえば、ユニットAU1は、全ての層において、1番目のノードとして階層型ニューラルネットワークの演算を実行し、また、ユニットAU2は、全ての層において、2番目のノードとして階層型ニューラルネットワークの演算を実行する。
この場合、記憶ユニットm12は、入力ノード情報または出力ノード情報の値(1または2)と、複数のユニットのうち、ユニットが階層型ニューラルネットワークにおいて演算するノードの番号(ユニット固有情報)とが一致するユニットであって、ユニットAU1とユニットAU2との2つのユニットに共有される。なお、後述するように、記憶ユニットm12は、行スイッチrs11を介してユニットAU1に接続され、列スイッチcs12を介してユニットAU2に接続されることにより、ユニットAU1とユニットAU2との2つのユニットに共有されている。
なお、記憶されている結合荷重の入力ノード情報の値と出力ノード情報の値とが同一である記憶ユニットを共有している2つのユニットは、同一のユニットである。
また、たとえば、記憶ユニットm11には、図59に示されるように結合荷重W(2) 11と結合荷重W(3) 11とが記憶されており、入力ノード情報の値は1のみであり、出力ノード情報の値は1のみであり、記憶されている結合荷重の入力ノード情報の値と出力ノード情報の値とが同一である。
この場合、記憶ユニットm11は、入力ノード情報および出力ノード情報の値(1のみ)と、複数のユニットのうち、ユニットが階層型ニューラルネットワークにおいて演算するノードの番号(ユニット固有情報)とが一致するユニットであって、ユニットAU1のみに共有される。そのため、記憶ユニットm11はユニットAU1のみに共有されるため、記憶ユニットm11とユニットAU1とは、行スイッチまたは列スイッチを介して接続される必要はなく、直接に接続されてもよい。または、記憶ユニットm11をユニットAU1に内蔵するようにしてもよい。
また、たとえば、図56に示されるように、ユニットAU1と記憶ユニットm11、ユニットAU2と記憶ユニットm22、ユニットAU3と記憶ユニットm33、および、ユニットAU4と記憶ユニットm44などのように、記憶ユニットを共有している2つのユニットが、同一のユニットである場合には、格子状に配置されている記憶ユニットにおいて、対角線上に配置されている記憶ユニットとユニットとを対応づけることが可能となる。そのため、対応するユニットと記憶ユニットとの間の配線がしやすくなり、また、行スイッチと列スイッチとの個数を減ずることも可能である。また、ユニットAU1が記憶ユニットm11を内蔵する場合には、記憶ユニットm11の個数を減ずることも可能である。
また、共有重み記憶部において、複数の記憶ユニットは、記憶ユニットに記憶されている結合荷重の入力ノード情報と出力ノード情報とに基づいて、行方向と列方向とに格子状に配置されている。
たとえば、図59に示される記憶ユニットに記憶されている結合荷重において、2層目における入力ノード情報の値と出力ノード情報の値とに、格子の行方向における配置位置と列方向における配置位置とを対応させて、図56に示されるように記憶ユニットが、それぞれ格子状に位置されている。
また、共有重み記憶部は、記憶ユニットを行方向で、記憶ユニットを共有する2つのユニットのうち一方のユニットに接続させる行スイッチと、記憶ユニットを列方向で、記憶ユニットを共有する2つのユニットのうち他方のユニットに接続させる列スイッチとを有する。
たとえば、記憶ユニットm101は、ユニットAU10とユニットAU1とにより共有されるが、この記憶ユニットm101は、行方向で、記憶ユニットm101を共有する2つのユニットのうち一方のユニットであるユニットAU10に、行スイッチrs101、rs102、および、rs103を介して、接続される。また、記憶ユニットm101は、列方向で、記憶ユニットm101を共有する2つのユニットのうち他方のユニットであるAU1に、列スイッチcs91、cs81、cs71、cs61、cs61、cs51、cs41、cs31、cs21、および、cs11を介して、接続される。
また、共有重み記憶部は、階層型ニューラルネットワークにおける演算の階層に基づいて、行スイッチと列スイッチとを接続状態または非接続状態に制御するスイッチ制御部を有する。また、このスイッチ制御部は、階層型ニューラルネットワークにおける演算の階層に基づいて、次に説明する行アクティブ状態と列アクティブ状態とに、記憶ユニットと列スイッチと行スイッチとを制御する。
上記の行アクティブ状態とは、行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか1つの行方向に配置されている複数の記憶ユニットが、階層に対応する結合荷重を出力するように制御するとともに、列スイッチを接続状態に制御し行スイッチを非接続状態に制御した状態である。
また、上記の列アクティブ状態とは、行方向と列方向とに格子状に配置されている複数の記憶ユニットのうち、いずれか1つの列方向に配置されている複数の記憶ユニットが、階層に対応する結合荷重を出力するように制御するとともに、列スイッチを非接続状態に制御し行スイッチを接続状態に制御した状態である。
また、このスイッチ制御部は、階層型ニューラルネットワークにおける演算に基づいて、奇数層のユニットが出力側であり、偶数層のユニットが入力側である場合には、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、このスイッチ制御部は、偶数層のユニットが出力側であり、奇数層のユニットが入力側である場合には、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。
なお、このスイッチ制御部は、分配制御部8から入力された制御データに基づいて、上記に説明した制御を実行してもよい。また、分配制御部8が、スイッチ制御部を内蔵するようにしてもよい。
上記の説明したようにスイッチ制御部が、行スイッチと列スイッチとを制御するとともに、記憶ユニットの出力も制御することにより、記憶ユニットとユニットとの間において、衝突することなく、結合荷重の入出力が可能である。
次に、図60と図61とを用いて、上記で説明した行アクティブ状態と列アクティブ状態とにおける行スイッチと列スイッチとの接続状態について説明する。図60は、行アクティブ状態における行スイッチと列スイッチとの接続状態を示す図である。この場合、全ての行スイッチrs11、・・・・rs103は、非接続状態にされ、全ての列スイッチcs11、・・・・cs94は、接続状態にされる。なお、以降の図において、行スイッチまたは列スイッチが、接続状態にある場合には、スイッチの近傍にある矢印を黒塗りとし、非接続状態にある場合には、スイッチの近傍にある矢印を白抜きとしている。
図61は、列アクティブ状態における行スイッチと列スイッチとの接続状態を示す図である。この場合、全ての行スイッチrs11、・・・・rs103は、接続状態にされ、全ての列スイッチcs11、・・・・cs94は、非接続状態にされる。
次に、図62から図69を用いて、階層型ニューラルネットワークにおける演算に基づいて、行アクティブ状態と列アクティブ状態とを説明する。ここで、図63は、ノードの状態が図62に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。同様に、図65は、ノードの状態が図64に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。また、同様に、図67は、ノードの状態が図66に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。また、同様に、図69は、ノードの状態が図68に示す状態の場合の、並列演算装置の動作状態、特に、共有重み記憶部の動作状態を示す図である。
なお、図62、図64、図66、および、図68において、出力ノードおよび入力ノードについては、灰色としている。また、図63、図65、図67、および、図69において、ノードとしての演算を実行しているユニットを灰色にするとともに、ユニットには、対応するノードの符号(p201など)を付している。また、同図において、結合荷重を出力している記憶ユニットには、色を付けるとともに、出力しているなどの結合荷重の符号(W(2) 12など)を図中に示している。
<順方向:奇数層側から偶数層側への入力>
まず、図62と図63とを用いて、順方向における奇数層のノードが出力側となり偶数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図62に示されるように、入力層(L1)のノードp102が、隠れ層(L2)の全てのノード(p201〜p210)に、出力値を出力している場合について説明する。
この場合、奇数層のノードが出力側となり、偶数層のノードが入力側となっているので、図63に示すように、スイッチ制御部は、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットAU1はノードp201として機能し、ユニットAU2はノードp202として機能し、・・・ユニットAU10はノードp210として機能する。なお、この場合、分配制御部8が出力ノードp102として機能する。
また、ここでは、入力層(L1)のノードp102が出力していることに対応して、2列目の記憶ユニットである記憶ユニットm12が結合係数W(2) 12を出力し、記憶ユニットm22が結合係数W(2) 22を出力し、記憶ユニットm32が結合係数W(2) 32を出力し、記憶ユニットm42が結合係数W(2) 12を出力し、記憶ユニットm52が結合係数W(2) 52を出力し、・・・・記憶ユニットm102が結合係数W(2) 102を出力する。
また、列アクティブ状態であり、行スイッチは全て接続状態となっているため、記憶ユニットm12が出力した結合係数W(2) 12は、行スイッチrs11を介してユニットAU1に入力される。同様に、記憶ユニットが出力した結合係数は、行スイッチを介して、対応するユニットに入力される。
以上により、第6の実施形態と同様に、各ユニットは、入力された結合係数に基づいて、順方向における演算を実行することが可能となる。
<順方向:偶数層側から奇数層側への入力>
次に、図64と図65とを用いて、順方向における偶数層のノードが出力側となり奇数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図64に示されるように、隠れ層(L2)のノードp208が、出力層(L3)の全てのノード(p301〜p303)に、出力値を出力している場合について説明する。
この場合、偶数層のノードが出力側となり、奇数層のノードが入力側となっているので、図65に示すように、スイッチ制御部は、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットAU1はノードp301として機能し、ユニットAU2はノードp302として機能し、ユニットAU3はノードp303として機能する。なお、この場合、分配制御部8が出力ノードp208として機能する。
また、ここでは、隠れ層(L2)のノードp208が出力していることに対応して、8行目の記憶ユニットである記憶ユニットm81が結合係数W(3) 18を出力し、記憶ユニットm82が結合係数W(3) 28を出力し、記憶ユニットm83が結合係数W(3) 38を出力する。
また、行アクティブ状態であり、列スイッチは全て接続状態となっているため、記憶ユニットm81が出力した結合係数W(3) 18は、列スイッチcs71、列スイッチcs61、列スイッチcs51、・・・列スイッチcs11を介してユニットAU1に入力される。同様に、記憶ユニットが出力した結合係数は、列スイッチを介して、対応するユニットに入力される。
以上により、各ユニットは、第6の実施形態と同様に、入力された結合係数に基づいて、順方向における演算を実行することが可能となる。
<逆方向:奇数層側から偶数層側への入力>
次に、図66と図67とを用いて、逆方向における奇数層のノードが出力側となり偶数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図66に示されるように、出力層(L3)のノードp301が、隠れ層(L2)の全てのノード(p201〜p210)に、出力値を出力している場合について説明する。
この場合、奇数層のノードが出力側となり、偶数層のノードが入力側となっているので、図67に示すように、スイッチ制御部は、列アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットAU1はノードp201として機能し、ユニットAU2はノードp202として機能し、・・・ユニットAU10はノードp210として機能する。なお、この場合、分配制御部8が出力ノードp301として機能する。
また、ここでは、出力層(L3)のノードp301が出力していることに対応して、1列目の記憶ユニットである記憶ユニットm11が結合係数W(3) 11を出力し、記憶ユニットm21が結合係数W(3) 12を出力し、記憶ユニットm31が結合係数W(3) 13を出力し、記憶ユニットm41が結合係数W(3) 14を出力し、記憶ユニットm51が結合係数W(3) 15を出力し、・・・・記憶ユニットm101が結合係数W(3) 110を出力する。
また、列アクティブ状態であり、行スイッチは全て接続状態となっているため、記憶ユニットm11が出力した結合係数W(3) 11は、ユニットAU1に入力される。また、記憶ユニットm12が出力した結合係数W(3) 11は、行スイッチrs21を介してユニットAU2に入力される。同様に、記憶ユニットが出力した結合係数は、行スイッチを介して、対応するユニットに入力される。
以上により、各ユニットは、第6の実施形態と同様に、入力された結合係数に基づいて、逆方向における演算を実行することが可能となる。
<逆方向:偶数層側から奇数層側への入力>
次に、図68と図69とを用いて、逆方向における偶数層のノードが出力側となり奇数層のノードが入力側となっている場合の並列演算装置の動作状態について説明する。ここでは、一例として、図68に示されるように、隠れ層(L2)のノードp208が、入力層(L1)の全てのノード(p101〜p104)に、出力値を出力している場合について説明する。
この場合、偶数層のノードが出力側となり、奇数層のノードが入力側となっているので、図69に示すように、スイッチ制御部は、行アクティブ状態に記憶ユニットと列スイッチと行スイッチとを制御する。また、ユニットAU1はノードp101として機能し、ユニットAU2はノードp102として機能し、ユニットAU3はノードp103とし、ユニットAU4はノードp104として機能する。なお、この場合、分配制御部8が出力ノードp208として機能する。
また、ここでは、隠れ層(L2)のノードp208が出力していることに対応して、8行目の記憶ユニットである記憶ユニットm81が結合係数W(2) 81を出力し、記憶ユニットm82が結合係数W(2) 82を出力し、記憶ユニットm83が結合係数W(2) 83を出力し、記憶ユニットm84が結合係数W(2) 84を出力する。
また、行アクティブ状態であり、列スイッチは全て接続状態となっているため、記憶ユニットm81が出力した結合係数W(2) 81は、列スイッチcs71、列スイッチcs61、列スイッチcs51、・・・列スイッチcs11を介してユニットAU1に入力される。同様に、記憶ユニットが出力した結合係数は、列スイッチを介して、対応するユニットに入力される。
以上により、各ユニットは、第6の実施形態と同様に、入力された結合係数に基づいて、逆方向における演算を実行することが可能となる。
<第7の実施形態における分配制御部8の動作>
次に、図70と図71とを用いて、第7の実施形態における分配制御部8の動作について説明する。図70のフローチャートは、図53に示したフローチャートにおいて、図53(c)のステップS5334からステップS5338の処理が無いフローチャートであり、他の処理は同様である。また、図71のフローチャートは、図54に示したフローチャートにおいて、図54のステップS53609からステップS53613の処理が無いフローチャートであり、他の処理は同様である。
図70と図71とを用いて説明した第7の実施形態における分配制御部8は、図53と図54とを用いて説明した第6の実施形態における分配制御部8と同様の動作をすることにより、階層型ニューラルネットワークの演算を実行することが可能である。
このように第6の実施形態と同様に、第7の実施形態によるユニット演算部15は、分配制御部8からの制御情報に基づいて、共有重み記憶部に記憶されている結合荷重に基づいて、階層型ニューラルネットワークの階層における入力層から出力層へと向かう方向である順方向における演算を実行するとともに、出力層から入力層へと向かう方向である逆方向における演算を実行し、結合荷重を更新することが可能である。
なお、ユニット演算部15は、順方向においては、入力パターンが分配制御部8から入力され、この入力された入力パターンに対して共有重み記憶部に記憶されている結合荷重に基づいて出力値を算出して出力する。また、ユニット演算部15は、逆方向においては、先に入力された入力パターンに対する教師データが分配制御部8から入力され、この入力された教師データに基づいて、出力した出力値と入力された教師データとの誤差が小さくなるように、共有重み記憶部に記憶されている結合荷重の値を更新する。
また、第7の実施形態における分配制御部8は、第6の実施形態における分配制御部8に対比して、図53(c)のステップS5334からステップS5338の処理と、図54のステップS53609からステップS53613の処理とが不要であり、全体の処理ステップ数を減ずることが可能となる。
以上説明したように、第7の実施形態においては、第6の実施形態に対して、順伝播モードと逆誤差伝播モードとで、層間での演算に用いる結合荷重が記憶されており、2つのユニットが互いに共有する記憶部を共有記憶部としたことにより、2つのユニットの記憶部に記憶されている対応する結合荷重の値を同一となるように更新する必要がなくなり、上記の図53(c)のステップS5334からステップS5338の処理、および、図54のステップS53609からステップS53613の処理が不要となる。
次に、記憶ユニットとして必要な個数について説明する。階層型ニューラルネットワークが3層構造の場合は、たとえば、図55で示したように、次に示すように、層に対応したノード数を有している。なお、入力層を1層目とし、入力層から出力層への順に、層に番号を付けた場合について説明する。
入力層(第1層):4ノード(入力端子)
隠れ層(第2層):10ノード
出力層(第3層):3ノード
一般に、階層型ニューラルネットワークがn層構造の場合は、次に示すノード数を有している。なお、ここでのnは、自然数である。
入力層(第1層):N1ノード(入力端子)
隠れ層1(第2層):N2ノード
隠れ層2(第3層):N3ノード
・
・
隠れ層n−2(第n−1層):Nn−1ノード
出力層(第n層):Nnノード
ここで、各層から次の層について、行方向と列方向とに必要な記憶ユニットの個数は、次のようになる。
(1)第1層から第2層の場合には、行方向にN1個であり、列方向にN2個である。
(2)第2層から第3層の場合には、列方向にN2個であり、行方向にN3個である。
(3)第3層から第4層の場合には、行方向にN3個であり、列方向にN4個である。
(4)第n−2層から第n−1層の場合には、n−2の値が偶数の場合には、列方向にNn−2個であり、行方向にNn−1個である。逆に、n−2の値が奇数の場合には、行方向にNn−2個であり、列方向にNn−1個である。
(5)第n−1層から第n層の場合には、n−1の値が偶数である場合には、列方向にNn−1個であり、行方向にNn個である。逆に、n−1が奇数である場合には、行方向にNn−1個であり、列方向にNn個である。
以上より、列方向と行方向とに必要な記憶ユニットの個数は、少なくとも、それぞれ、層の番号が偶数である偶数層で必要となる記憶ユニットの最大値と、層の番号が奇数である奇数層で必要となる記憶ユニットの最大値となる。
上記に説明したように、階層型ニューラルネットワークにおける入力層を1層目とし、入力層から出力層へと順に層の番号が付してある場合に、共有重み記憶部は、行方向または列方向のうちいずれか一方の方向における記憶ユニットとして、階層型ニューラルネットワークにおける偶数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する。また、共有重み記憶部は、行方向または列方向のうち他方の方向における記憶ユニットとして、階層型ニューラルネットワークにおける奇数層におけるノード数が最大値となる個数の記憶ユニットを少なくとも有する。
よって、たとえば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、共有重み記憶部で必要となる記憶ユニットの個数を最小とすることにより、記憶ユニットの個数を減ずることが可能である。
また、並列演算装置は、ユニットとして、階層型ニューラルネットワークにおける全ての層においてノード数が最大値となる個数のユニットを少なくとも有している。よって、たとえば、階層型ニューラルネットワークの階層と各階層のノード数とに応じて、必要となるユニットの個数を最小とすることにより、ユニットの個数を減ずることが可能である。
なお、上記実施形態の各図で示した構成である記憶部のそれぞれは、ハードディスク装置や光磁気ディスク装置、フラッシュメモリ等の不揮発性のメモリや、CR−ROM等の読み出しのみが可能な記憶媒体、RAM(Random Access Memory)のような揮発性のメモリ、あるいはこれらの組み合わせにより構成されるものとする。
なお、図2の図15のユニット算出部、または、図16の分配制御部8は、専用のハードウェアにより実現されるものであってもよく、また、メモリおよびマイクロプロセッサにより実現させるものであってもよい。
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。