(58)【調査した分野】(Int.Cl.,DB名)
前記入力回路は、前記複数のコアおよび前記複数のルータのうち何れか1つのコアまたはルータに接続され、当該入力回路に接続されたコアまたはルータから前記順方向データまたは前記逆方向データを受信し、
前記出力回路は、前記複数のコアおよび前記複数のルータのうち何れか1つのコアまたはルータに接続され、当該出力回路に接続されたコアまたはルータに前記順方向データまたは前記逆方向データを送信する
請求項2に記載のニューラルネットワーク装置。
前記ルータ内受信部は、前記逆方向データを記憶させるための空き容量が前記出力記憶部に存在しない場合、最も過去に書き込まれた1つの前記逆方向データを前記出力記憶部から削除する
請求項2から7の何れか1項に記載のニューラルネットワーク装置。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら実施形態に係るニューラルネットワーク装置10について説明する。実施形態に係るニューラルネットワーク装置10は、ニューラルネットワークにおける通常のデータ処理と学習処理とを並行に実行しつつ、内部でのトラフィックの混雑を軽減することができる。
【0012】
図1は、実施形態に係るニューラルネットワーク装置10の構成を示す図である。ニューラルネットワーク装置10は、データ処理部20と、通信部22と、学習部24と、設定部26とを備える。
【0013】
データ処理部20、通信部22、学習部24および設定部26は、1つの半導体装置内に実装されてもよいし、1つの基板上に設けられた複数の半導体装置に実装されていてもよいし、複数の基板に設けられた複数の半導体装置に実装されていてもよい。また、学習部24および設定部26は、同一のプロセッサにより実現されてもよい。
【0014】
ニューラルネットワーク装置10は、外部装置から入力データを受信する。ニューラルネットワーク装置10は、受信した入力データに対してニューラルネットワークを用いた演算処理を実行する。そして、ニューラルネットワーク装置10は、ニューラルネットワークを用いた演算処理の結果である出力データを外部装置に送信する。
【0015】
データ処理部20は、ニューラルネットワークに基づく通常の演算処理を実行する。データ処理部20は、例えば、ニューラルネットワークに基づく通常の演算処理として、パターン認識処理、データ解析処理および制御処理等の様々な情報処理を実行する。
【0016】
また、データ処理部20は、通常の演算処理と並行して、学習処理を実行する。データ処理部20は、学習処理により、通常の演算処理をより適切に行うように、ニューラルネットワークに含まれる複数の係数(重み)を変更する。
【0017】
通信部22は、外部装置とデータの送受信をする。具体的には、通常の演算処理において、通信部22は、外部装置から、演算対象となる入力データを受信する。また、通信部22は、外部装置へ、演算結果である出力データを送信する。
【0018】
学習部24は、通常の演算処理においてデータ処理部20から出力された出力データを取得する。そして、学習処理において、学習部24は、出力データの誤差を表す誤差データを算出して、データ処理部20に与える。
【0019】
さらに、学習部24は、データ処理部20が複数の層に対して誤差データを逆方向に伝播した結果得られた情報に基づき、ニューラルネットワークに含まれる複数の係数(重み)を変更する。例えば、学習部24は、ニューラルネットワークに含まれる複数の係数のそれぞれについて、誤差の勾配を算出する。そして、学習部24は、誤差の勾配を例えば0とする方向に、複数の係数を変更する。
【0020】
設定部26は、学習部24によりニューラルネットワークに含まれる複数の係数が変更された場合、データ処理部20に対して、変更後の係数を設定する。
【0021】
図2は、ニューラルネットワークにおける通常の演算処理(順方向処理)の内容を示す図である。
【0022】
ニューラルネットワークは、複数の層を含む。複数の層のそれぞれは、受け取ったデータに対して所定の演算および処理をする。ニューラルネットワークに含まれる複数の層のそれぞれは、複数のノードを含む。1つの層に含まれるノードの数は、層毎に異なってもよい。
【0023】
それぞれのノードには、活性化関数が設定されている。活性化関数は、層毎に異なってもよい。また、同一の層において、ノード毎に活性化関数が異なってもよい。また、それぞれのノードとノードとを結ぶリンクには、係数(重み)が設定されている。ニューラルネットワークは、ノードから次のノードへとデータを伝播する場合に、そのデータに対してリンクに設定された係数を乗じる。これらの係数は、学習処理により適切に変更される。
【0024】
データ処理部20は、ニューラルネットワークにおける通常の演算処理において、ニューラルネットワークにおける複数の層に対してデータを順方向に伝播させながら演算を実行させる順方向処理を実行する。例えば、順方向処理において、データ処理部20は、入力層に入力データを与える。続いて、順方向処理において、データ処理部20は、それぞれの層から出力されたデータを、直後の層へと順方向に伝播させる。そして、順方向処理において、データ処理部20は、出力層から出力されたデータを、出力データとして外部装置へと送信する。
【0025】
ここで、本実施形態においては、ニューラルネットワークにおける通常の演算処理において、複数の層を順方向に伝播するデータを、順方向データと呼ぶ。
【0026】
図3は、ニューラルネットワークにおける学習処理(逆方向処理)の内容を示す図である。それぞれのノードには、誤差関数が設定されている。誤差関数は、そのノードに設定されている活性化関数の導関数である。すなわち、誤差関数は、そのノードに設定されている活性化関数の微分である。
【0027】
学習部24は、順方向処理が終了した場合、順方向処理で出力された出力データに対する誤差を表す誤差データを算出する。続いて、逆方向処理において、データ処理部20は、学習部24により生成された誤差データを出力層に与える。そして、逆方向処理において、データ処理部20は、それぞれの層から出力された複数のデータを、直前の層へと逆方向に伝播させる。
【0028】
ここで、本実施形態においては、ニューラルネットワークにおける学習処理において、複数の層を逆方向に伝播するデータを、逆方向データと呼ぶ。
【0029】
図4は、データ処理部20の構成を示す図である。データ処理部20は、複数のコア30と、複数のルータ40と、通信路42(42−1,42−2)と、を有する。
【0030】
複数のコア30は、それぞれが、ニューラルネットワークにおける一部の構成要素の演算および処理を実行する。複数のコア30のそれぞれは、プロセッサであってもよいし、専用のハードウェア回路であってもよいし、デジタル回路であってもよいし、アナログ回路であってもよい。また、複数のコア30のそれぞれは、記憶部を有し、ニューラルネットワークに含まれる係数を記憶してもよい。
【0031】
複数のルータ40は、複数のコア30のそれぞれから出力されたデータを、ニューラルネットワークの構成に従って演算および処理が実行されるように、通信路42を介して複数のコア30の何れか1つのコア30に転送する。
【0032】
例えば、複数のルータ40のそれぞれは、通信路42の分岐点に配置される。複数のルータ40のそれぞれは、通信路42を介して複数の他のルータ40と直接接続される。複数のルータ40のそれぞれは、通信路42を介して直接接続された他のルータ40とデータを送受信する。
【0033】
また、複数のルータ40のそれぞれは、さらに、1または複数のコア30と接続され、接続されたコア30とデータを送受信してもよい。本実施形態においては、複数のコア30は、複数のルータ40に対して一対一に対応して設けられ、対応して設けられたルータ40とデータを送受信する。
【0034】
このような複数のルータ40のそれぞれは、当該ルータ40と接続された送信元であるルータ40またはコア30から受信したデータを、送信先である当該ルータ40と接続された他のルータ40またはコア30へとデータを転送する。
【0035】
例えば、複数のルータ40は、第1配列方向および第2配列方向に並べてマトリクス状に配列される。例えば、第2配列方向は、第1配列方向に直交する方向である。例えば、通信路42は、第1配列方向に配列された複数の第1通信路42−1と、第1配列方向とは直交する第2配列方向に配列された複数の第2通信路42−2とを含むクロスバーネットワークである。複数のルータ40は、このようなクロスバーネットワークにおける、第1通信路42−1と第2通信路42−2との交点に設けられる。これにより、複数のルータ40は、何れかのコア30から出力されたデータを、複数のコア30の何れにも転送することができる。
【0036】
図5は、ニューラルネットワークに含まれる構成要素と、その構成要素での処理を実行するコア30との対応関係を示す図である。
【0037】
複数のコア30のそれぞれには、ニューラルネットワークに含まれる複数の構成要素のうちの何れかが予め割り当てられている。複数のコア30のそれぞれは、ニューラルネットワークに含まれる複数の構成要素のうち、予め割り当てられた構成要素の演算または処理を実行する。
【0038】
ニューラルネットワークに含まれる構成要素とは、例えば、ノードにおける活性化関数の演算および誤差関数の演算、リンクに設定された係数の乗算、および、係数が乗算されたデータの加算、外部装置からのデータの入力、外部装置へのデータの出力、誤差データの取得、および、勾配データの出力等である。ニューラルネットワークに含まれる全ての構成要素が少なくとも何れかのコア30で実行されるように、複数のコア30のそれぞれに構成要素が割り当てられている。
【0039】
1つのコア30において実行される処理は、例えば、1つのノードで実行される処理であってもよい。例えば、ある1つのコア30は、ある層のある1つのノードにおける、リンクに設定された係数の乗算、前段の層から受け取った複数のデータの加算、活性化関数の演算または誤差関数の演算等を実行する。
【0040】
また、1つのコア30において実行される演算および処理は、1つのノードの一部分の演算であってもよい。例えば、ある1つのコア30は、1つのノードにおける活性化関数の演算を実行し、他の1つのコア30は、そのノードにおける係数の乗算および加算を実行してもよい。また、1つのコア30において実行される演算および処理は、1つの層に含まれる複数のノードにおける全ての処理であってもよい。
【0041】
このようにデータ処理部20は、ニューラルネットワークに含まれる複数の構成要素の処理を複数のコア30に分散して実行することができる。
【0042】
図6は、複数のコア30および複数のルータ40の間で送受信されるデータを示す図である。
【0043】
複数のコア30のそれぞれは、ニューラルネットワークを順方向に伝播する順方向データ、および、ニューラルネットワークを逆方向に伝播する逆方向データの少なくとも一方を、当該コア30に接続されたルータ40に送信する。また、複数のコア30のそれぞれは、順方向データおよび逆方向データの少なくとも一方を、当該コア30に接続されたルータ40から受信する。
【0044】
また、複数のルータ40のそれぞれは、順方向データおよび逆方向データを、当該ルータ40と接続されたコア30または他のルータ40から受信する。また、複数のルータ40のそれぞれは、受信した順方向データおよび逆方向データを、当該ルータ40と接続されたコア30または他のルータ40に送信する。
【0045】
ここで、コア30は、順方向データまたは逆方向データを送信する場合、送信に先だって、当該コア30に接続されたルータ40に対して順方向データまたは逆方向データの受信を要求する要求信号を送信する。また、ルータ40は、順方向データまたは逆方向データを送信する場合、送信に先だって、送信先である、当該ルータ40に接続されたコア30または他のルータ40に対して、要求信号を送信する。
【0046】
コア30は、要求信号を受信した場合、受信可能であれば、要求信号の送信元のルータ40に対して許可信号を送信する。ルータ40は、要求信号を受信した場合、受信可能であれば、要求信号の送信元のコア30または他のルータ40に対して許可信号を送信する。
【0047】
コア30は、許可信号を受信した場合、当該コア30に接続されたルータ40に対して順方向データまたは逆方向データを送信する。また、ルータ40は、許可信号を受信した場合、送信先である、当該ルータ40に接続された他のルータ40またはコア30に対して、順方向データまたは逆方向データを送信する。
【0048】
図7は、データの構成の一例を示す図である。順方向データおよび逆方向データは、例えば、
図7に示すように、例えば、実体データと、ヘッダとを含む。実体データは、ニューラルネットワークにおいて演算および処理がされる対象である。ヘッダは、パケットを目的のコア30へと転送させるために必要な情報、および、実体データに対して演算および処理をするために必要な情報等を含む。
【0049】
例えば、ヘッダは、IDと、データ種別と、前処理アドレスと、次処理アドレスと、を含む。IDは、当該実体データの元となる入力データを識別するための情報である。
【0050】
データ種別は、実体データが、順方向に伝播される順方向データ(通常の演算処理において伝播されるデータ)であるか、逆方向に伝播される逆方向データ(学習処理において伝播されるデータ)であるかを識別する情報である。
【0051】
前処理アドレスは、当該データを出力したコア30を識別するアドレスである。前処理アドレスは、ニューラルネットワークにおける当該データを生成した層およびノードを識別する情報であってもよい。
【0052】
次処理アドレスは、ニューラルネットワークにおける当該データに対して次に演算または処理をするコア30を識別するアドレスである。次処理アドレスは、ニューラルネットワークにおける、当該データに対して演算または処理をする構成要素(層またはノード等)を識別する情報であってもよい。
【0053】
ヘッダは、以上のような構成に限らず、ルータ40が、実体データをニューラルネットワークの構成に従って演算および処理が実行されるように適切なコア30に転送することができれば、他の構成であってもよい。
【0054】
図8は、ルータ40の構成を示す図である。ルータ40は、少なくとも1つの入力回路50と、少なくとも1つの出力回路60とを有する。
【0055】
少なくとも1つの入力回路50のそれぞれは、複数のコア30または複数のルータ40のうちの何れか1つから、順方向データおよび逆方向データを受信する。例えば、少なくとも1つの入力回路50のそれぞれは、予め設定された何れか1つのコア30または1つのルータ40に通信路42を介して接続され、接続された1つのコア30または1つのルータ40から順方向データおよび逆方向データを受信する。
【0056】
少なくとも1つの出力回路60のそれぞれは、複数のコア30または複数のルータ40のうちの何れか1つに、順方向データおよび逆方向データを送信する。例えば、少なくとも1つの出力回路60のそれぞれは、予め設定された何れか1つのコア30またはルータ40に通信路42を介して接続され、接続された1つのコア30または1つのルータ40に順方向データおよび逆方向データを送信する。
【0057】
入力回路50は、当該ルータ40が有する全ての出力回路60と接続される。ただし、入力回路50は、当該入力回路50と接続している同一のコア30またはルータ40に接続された出力回路60とは、接続されていなくてもよい。すなわち、入力回路50は、当該入力回路50と同一のコア30またはルータ40に接続された出力回路60とは、接続されていなくてもよい。
【0058】
例えば、ルータ40は、入力回路50および出力回路60の第1の組と、入力回路50および出力回路60の第2の組と、入力回路50および出力回路60の第3の組と、入力回路50および出力回路60の第4の組と、入力回路50および出力回路60の第5の組とを有する。第1の組および第2の組は、マトリクス状における第1配列方向に隣接する他のルータ40に接続される。第3の組および第4の組は、マトリクス状における第2配列方向に隣接する他のルータ40に接続される。第5の組は、当該ルータ40に対応して設けられたコア30に接続される。
【0059】
なお、
図8の接続例では、入力回路50は、複数の出力回路60のそれぞれと互いに異なる信号線により接続されている。しかし、入力回路50は、複数の出力回路60のそれぞれと共通のバスにより接続されていてもよい。すなわち、ルータ40は、少なくとも1つの入力回路50のそれぞれおよび少なくとも1つの出力回路60のそれぞれが、同一のバスに接続される構成であってもよい。この場合、入力回路50は、宛先となる出力回路60の識別子を付加したデータをバスに送信する。出力回路60は、バスから、自身の識別子が付加されたデータを選択して受信する。これにより、入力回路50は、少なくとも1つの出力回路60のうち、特定の1つの出力回路60に順方向データおよび逆方向データを送信することができる。
【0060】
図9は、入力回路50および出力回路60の構成を示す図である。なお、
図9の例においては、入力回路50と出力回路60とが一対一で接続されているが、入力回路50は、当該ルータ40内の1または複数の出力回路60と接続される。また、出力回路60は、当該ルータ40内の1または複数の入力回路50と接続される。
【0061】
入力回路50は、受信部52と、入力記憶部54と、ルータ内送信部56とを含む。受信部52は、当該入力回路50に通信路42を介して接続されたコア30またはルータ40から要求信号、順方向データおよび逆方向データを受信する。なお、受信部52の処理の詳細は、後述において
図10を参照してさらに説明する。
【0062】
入力記憶部54は、受信部52が受信した順方向データおよび逆方向データを記憶する。入力記憶部54は、先入れ、先出し方式のバッファ(FIFOバッファ)である。また、入力記憶部54は、例えば、順方向データおよび逆方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【0063】
ルータ内送信部56は、当該ルータ40内の1または複数の出力回路60のそれぞれに、第1の要求信号、第2の要求信号、順方向データおよび逆方向データを送信する。なお、ルータ内送信部56の処理の詳細は、後述において
図11を参照してさらに説明する。
【0064】
出力回路60は、ルータ内受信部62と、出力記憶部64と、送信部66とを含む。ルータ内受信部62は、当該ルータ40内の1または複数の入力回路50のそれぞれから、第1の要求信号、第2の要求信号、順方向データおよび逆方向データを受信する。なお、ルータ内受信部62の処理の詳細は、後述において
図12を参照してさらに説明する。
【0065】
出力記憶部64は、順方向データバッファ72と、逆方向データバッファ74とを含む。順方向データバッファ72は、ルータ内受信部62が受信した順方向データを記憶する。順方向データバッファ72は、先入れ、先出し方式のバッファ(FIFOバッファ)である。また、順方向データバッファ72は、例えば、順方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【0066】
逆方向データバッファ74は、ルータ内受信部62が受信した逆方向データを記憶する。逆方向データバッファ74は、先入れ、先出し方式のバッファ(FIFOバッファ)である。また、逆方向データバッファ74は、例えば、逆方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【0067】
送信部66は、当該出力回路60に通信路42を介して接続されたコア30またはルータ40に、要求信号、順方向データおよび逆方向データを送信する。なお、送信部66の処理の詳細は、後述において
図13を参照してさらに説明する。
【0068】
図10は、入力回路50の受信部52の処理を示すフローチャートである。当該入力回路50に通信路42を介して接続されたコア30またはルータ40から要求信号が送信された場合、受信部52は、以下のS11〜S16の処理を実行する。
【0069】
まず、S11において、受信部52は、当該入力回路50に通信路42を介して接続されたコア30またはルータ40から要求信号を受信する。続いて、S12において、受信部52は、入力記憶部54に空き容量が存在するか否かを判断する。
【0070】
入力記憶部54に空き容量が存在しない場合(S12のNo)、S13において、受信部52は、処理を一定時間待機する。受信部52は、一定時間待機した後、処理をS12に戻し、入力記憶部54に空き容量ができるまでS12およびS13の処理を繰り返す。なお、受信部52は、一定回数または所定時間以上待機しても入力記憶部54に空き容量ができない場合には、要求信号の送信元のコア30またはルータ40に不許可信号を送信して、処理を終了してもよい。
【0071】
入力記憶部54に空き容量が存在する場合(S12のYes)、S14において、受信部52は、許可信号を、要求信号の送信元のコア30またはルータ40に送信する。要求信号の送信元のコア30またはルータ40は、許可信号を受信した場合、順方向データまたは逆方向データを当該入力回路50に送信する。
【0072】
続いて、S15において、受信部52は、要求信号の送信元のコア30またはルータ40から、順方向データまたは逆方向データを受信する。そして、S16において、受信部52は、受信した順方向データまたは逆方向データを入力記憶部54に書き込む。受信部52は、S16の処理後、本フローを終了する。
【0073】
図11は、入力回路50のルータ内送信部56の処理を示すフローチャートである。ルータ内送信部56は、ニューラルネットワーク装置10の動作中、下記のS21からS28の処理を繰り返して実行する。
【0074】
S21において、ルータ内送信部56は、入力記憶部54を監視して、入力記憶部54に順方向データまたは逆方向データが存在するか否かを判断する。ルータ内送信部56は、入力記憶部54に順方向データおよび逆方向データが存在しない場合(S21のNo)、S21の処理を繰り返す。
【0075】
入力記憶部54に順方向データまたは逆方向データが存在する場合(S21のYes)、S22において、ルータ内送信部56は、まだ未送信であって、最も過去に書き込まれた1つの順方向データまたは1つの逆方向データを、入力記憶部54から読み出す。
【0076】
続いて、S23において、ルータ内送信部56は、読み出した順方向データまたは逆方向データのヘッダを参照して、当該ルータ40に接続されたコア30またはルータ40の中から1つの送信先を決定する。例えば、ルータ内送信部56は、ヘッダを解析して、読み出した順方向データまたは逆方向データに対して次の演算および処理を実行するコア30のアドレス(例えば、次処理アドレス)を検出する。次処理アドレスを検出した後、ルータ内送信部56は、当該ルータ40から、検出したコア30へと適切に(例えば、最短時間または最短距離で)データを転送できる1つの経路を見つけ出す。そして、ルータ内送信部56は、当該ルータ40に接続されたコア30またはルータ40の中から、見つけ出した1つの経路上のコア30またはルータ40を送信先として決定する。
【0077】
続いて、S24において、ルータ内送信部56は、順方向データを読み出した場合には、送信先として決定したコア30またはルータ40に接続された出力回路60に対して、順方向データの受信を要求する第1の要求信号を送信する。また、ルータ内送信部56は、逆方向データを読み出した場合には、送信先として決定したコア30またはルータ40に接続された出力回路60に対して、逆方向データの受信を要求する第2の要求信号を送信する。
【0078】
出力回路60は、第1の要求信号を受信した場合、順方向データを受信可能であれば、第1の要求信号の送信元に許可信号を送信する。また、出力回路60は、第2の要求信号を受信した場合、逆方向データを受信可能であれば、第2の要求信号の送信元に許可信号を送信する。
【0079】
続いて、S25において、ルータ内送信部56は、送信先として決定したコア30またはルータ40に接続された出力回路60から、許可信号を受信したか否かを判断する。許可信号を受信していない場合(S25のNo)、S26において、ルータ内送信部56は、処理を一定時間待機する。ルータ内送信部56は、一定時間待機した後、処理をS25に戻し、許可信号が受信できるまでS25およびS26の処理を繰り返す。なお、ルータ内送信部56は、一定回数または所定時間以上待機しても許可信号を受信できない場合、または、出力回路60から不許可信号を受信した場合には、処理をS21に戻してもよい。
【0080】
許可信号を受信した場合(S25のYes)、S27において、ルータ内送信部56は、送信先として決定したコア30またはルータ40に接続された出力回路60に対して、読み出した順方向データまたは逆方向データを送信する。続いて、S28において、ルータ内送信部56は、送信した順方向データまたは逆方向データを入力記憶部54から削除する。ルータ内送信部56は、S28の処理後、処理をS21に戻して、本フローを繰り返し実行する。
【0081】
図12は、出力回路60のルータ内受信部62の処理を示すフローチャートである。当該ルータ40が有する少なくとも1つの入力回路50の何れかから、当該出力回路60へと第1の要求信号または第2の要求信号が送信された場合、ルータ内受信部62は、以下のS41〜S52の処理を実行する。
【0082】
まず、S41において、ルータ内受信部62は、何れかの入力回路50から、第1の要求信号または第2の要求信号を受信する。続いて、S42において、ルータ内受信部62は、順方向データの受信要求か(すなわち、第1の要求信号を受信したか)、または、逆方向データの受信要求か(すなわち、第2の要求信号を受信したか)を判断する。
【0083】
順方向データの受信要求の場合(S42のYes)、ルータ内受信部62は、処理をS43に進める。S43において、ルータ内受信部62は、出力記憶部64における順方向データバッファ72に空き容量が存在するか否かを判断する。
【0084】
順方向データバッファ72に空き容量が存在しない場合(S43のNo)、S44において、ルータ内受信部62は、処理を一定時間待機する。ルータ内受信部62は、一定時間待機した後、処理をS43に戻し、順方向データバッファ72に空き容量ができるまでS43およびS44の処理を繰り返す。なお、ルータ内受信部62は、一定回数または所定時間以上待機しても空き容量ができない場合には、第1の要求信号の送信元の入力回路50に不許可信号を送信して、処理を終了してもよい。
【0085】
順方向データバッファ72に空き容量が存在する場合(S43のYes)、S45において、ルータ内受信部62は、許可信号を、第1の要求信号の送信元の入力回路50に送信する。第1の要求信号の送信元の入力回路50は、許可信号を受信した場合、順方向データを当該出力回路60に送信する。
【0086】
続いて、S46において、ルータ内受信部62は、第1の要求信号の送信元の入力回路50から、順方向データを受信する。そして、S47において、ルータ内受信部62は、受信した順方向データを順方向データバッファ72に書き込む。ルータ内受信部62は、S47の処理後、本フローを終了する。
【0087】
S43〜S47を実行することにより、出力回路60は、順方向データを記憶するための空き容量が無い場合には、空き容量を確保するまで受信を待機する。これにより、出力回路60は、順方向データを確実に送信先のコア30に転送することができる。
【0088】
逆方向データの受信要求の場合(S42のNo)、ルータ内受信部62は、処理をS48に進める。S48において、ルータ内受信部62は、出力記憶部64における逆方向データバッファ74に空き容量が存在するか否かを判断する。
【0089】
出力記憶部64における逆方向データバッファ74に空き容量が存在しない場合(S48のNo)、S49において、ルータ内受信部62は、出力記憶部64における逆方向データバッファ74に記憶されている逆方向データを削除する。例えば、逆方向データバッファ74がFIFOバッファである場合、ルータ内受信部62は、逆方向データバッファ74における先頭に記憶された1つの逆方向データを削除する。すなわち、最も過去に書き込まれた1つの逆方向データを逆方向データバッファ74から削除する。これにより、ルータ内受信部62は、出力記憶部64における逆方向データバッファ74に空き容量を確保することができる。
【0090】
S49で逆方向データを逆方向データバッファ74から削除した後、または、そもそも逆方向データバッファ74に空き容量が存在した場合(S48のYes)、S50において、ルータ内受信部62は、許可信号を、第2の要求信号の送信元の入力回路50に送信する。第2の要求信号の送信元の入力回路50は、許可信号を受信した場合、逆方向データを当該出力回路60に送信する。
【0091】
続いて、S51において、ルータ内受信部62は、第2の要求信号の送信元の入力回路50から、逆方向データを受信する。そして、S52において、ルータ内受信部62は、受信した逆方向データを逆方向データバッファ74に書き込む。ルータ内受信部62は、S52の処理後、本フローを終了する。
【0092】
S48〜S52を実行することにより、出力回路60は、逆方向データを記憶するための空き容量が無い場合には、出力記憶部64から逆方向データを削除して、空き容量を確保し、直ぐに逆方向データを受信する。これにより、出力回路60は、逆方向データの滞留を無くし、トラフィックをスムーズにすることができる。
【0093】
図13は、出力回路60の送信部66の処理を示すフローチャートである。送信部66は、ニューラルネットワーク装置10の動作中、下記のS61からS67の処理を繰り返して実行する。
【0094】
S61において、送信部66は、出力記憶部64を監視して、出力記憶部64に、順方向データまたは逆方向データが存在するか否かを判断する。送信部66は、出力記憶部64に順方向データおよび逆方向データが存在しない場合(S61のNo)、S61の処理を繰り返す。
【0095】
出力記憶部64に順方向データまたは逆方向データが存在する場合(S61のYes)、S62において、送信部66は、当該出力回路60に通信路42を介して接続されたコア30またはルータ40に、要求信号を送信する。コア30またはルータ40は、要求信号を受信した場合、順方向データおよび逆方向データを受信可能であれば、許可信号を送信元のコア30またはルータ40に送信する。
【0096】
続いて、S63において、送信部66は、当該出力回路60に接続されたコア30またはルータ40から許可信号を受信したか否かを判断する。許可信号を受信していない場合(S63のNo)、S64において、送信部66は、処理を一定時間待機する。送信部66は、一定時間待機した後、処理をS63に戻し、許可信号が受信できるまでS63およびS64の処理を繰り返す。なお、送信部66は、一定回数または所定時間以上待機しても許可信号を受信できない場合、または、当該出力回路60に接続されたコア30またはルータ40から不許可信号を受信した場合には、処理をS61に戻してもよい。
【0097】
許可信号を受信した場合(S63のYes)、S65において、送信部66は、まだ未送信であって、最も過去に書き込まれた1つの順方向データまたは1つの逆方向データを、出力記憶部64の順方向データバッファ72または逆方向データバッファ74から読み出す。なお、送信部66は、順方向データバッファ72に記憶された順方向データと逆方向データバッファ74に記憶された逆方向データとを交互に読み出してもよい。また、送信部66は、順方向データバッファ72に記憶された順方向データを3回読み出した後に、逆方向データバッファ74に記憶された逆方向データを1回読み出すといったように、逆方向データよりも順方向データを優先して読み出してもよい。
【0098】
続いて、S66において、送信部66は、当該出力回路60に通信路42を介して接続されたコア30またはルータ40に対して、読み出した順方向データまたは逆方向データを送信する。続いて、S67において、送信部66は、送信した順方向データまたは逆方向データを出力記憶部64から削除する。送信部66は、S67の処理後、処理をS61に戻して、本フローを繰り返し実行する。
【0099】
以上のように本実施形態に係るニューラルネットワーク装置10は、ニューラルネットワークにおける学習処理(逆方向処理)において伝播される逆方向データが、何れかのルータ40で滞留した場合、滞留した逆方向データを削除して、逆方向データの転送をスムーズにする。これにより、ニューラルネットワーク装置10は、内部でのトラフィックの停滞を軽減することができる。
【0100】
また、ニューラルネットワーク装置10は、ニューラルネットワークにおける通常の演算処理(順方向処理)において伝播される順方向データが、何れかのルータ40で停滞しても削除しない。これにより、ニューラルネットワーク装置10は、外部装置から与えられる入力データに対する演算を確実に実行することができる。また、ニューラルネットワーク装置10は、逆方向データが転送できなくなることにより学習精度が低下するが、少なくとも演算を確実に実行することができるので、データ削除による影響を少なくすることができる。
【0101】
また、ニューラルネットワーク装置10は、ルータ40での逆方向データの滞留を無くすことができるので、ルータ40内での順方向データを記憶するための記憶容量を大きくし、逆方向データを記憶するための記憶容量を小さくすることができる。これにより、ニューラルネットワーク装置10は、少ないメモリ容量で効率良くデータ転送を実現し、コストを小さくすることができる。
【0102】
図14は、第1変形例に係る出力回路60内の出力記憶部64の構成を示す図である。出力記憶部64は、例えば、
図14に示すような構成であってもよい。なお、第1変形例については、上述で説明した構成の相違点を中心に説明する。第2変形例以降も同様である。
【0103】
第1変形例に係る出力記憶部64は、データ記憶部82と、メモリコントローラ84とを含む。データ記憶部82は、ランダムアクセスが可能なメモリであり、順方向データおよび逆方向データを記憶する。メモリコントローラ84は、データ記憶部82に対するアクセス制御をする。
【0104】
メモリコントローラ84は、データ記憶部82に対して、順方向データを記憶させるための第1の記憶容量、および、逆方向データを記憶させるための第2の記憶容量を設定している。例えば、メモリコントローラ84は、データ記憶部82に対して、順方向データを記憶させるための第1の記憶容量を少なくとも有する順方向データ領域と、逆方向データを記憶させるための第2の記憶容量を少なくとも有する逆方向データ領域とを設定している。
【0105】
ルータ内受信部62は、順方向データの受信を要求する第1の要求信号を何れか1つの入力回路50から受信した場合、データ記憶部82に記憶されている順方向データの合計容量が、第1の記憶容量に達しているか否かを判断する。ルータ内受信部62は、順方向データの合計容量が第1の記憶容量に達していない場合には、第1の要求信号を送信した入力回路50に許可信号を返信する。
【0106】
ルータ内受信部62は、順方向データの合計容量が第1の記憶容量に達している場合には、許可信号を返信せず、順方向データの合計容量が第1の記憶容量を下回った後に、許可信号を返信する。
【0107】
また、ルータ内受信部62は、逆方向データの受信を要求する第2の要求信号を何れか1つの入力回路50から受信した場合、データ記憶部82に記憶されている逆方向データの合計容量が、第2の記憶容量に達しているか否かを判断する。ルータ内受信部62は、逆方向データの合計容量が第2の記憶容量に達していない場合には、第2の要求信号を送信した入力回路50に許可信号を返信する。
【0108】
ルータ内受信部62は、逆方向データの合計容量が第2の記憶容量に達している場合には、データ記憶部82に記憶されている何れか1つの逆方向データを削除する。そして、ルータ内受信部62は、逆方向データを削除した後に、許可信号を返信する。
【0109】
また、メモリコントローラ84は、データ記憶部82に記憶された順方向データおよび逆方向データの書き込み順を管理する。そして、送信部66は、メモリコントローラ84により管理された書き込み順に従い、最も過去に書き込まれた1つの順方向データまたは1つの逆方向データを読み出して、当該出力回路60に接続されたコア30またはルータ40に送信する。
【0110】
なお、メモリコントローラ84は、データ記憶部82に記憶されている順方向データの合計容量の時間変化および逆方向データの合計容量の時間変化に応じて、順方向データを記憶させるための第1の記憶容量および逆方向データを記憶させるための第2の記憶容量を変更してもよい。例えば、メモリコントローラ84は、一定時間毎に、順方向データの受信量と逆方向データの受信量の比率を算出し、比率の変化に応じて、第1の記憶容量と第2の記憶容量の比率を変更する。
【0111】
このような第1変形例に係る出力回路60は、ランダムアクセス可能なメモリを用いて順方向データおよび逆方向データを記憶することができる。
【0112】
図15は、第2変形例に係る出力回路60のルータ内受信部62の処理を示すフローチャートである。出力記憶部64が、例えば、
図14に示すようなランダムアクセス可能なデータ記憶部82とメモリコントローラ84を含む構成である場合、出力回路60は、
図15に示すような処理を実行してもよい。
【0113】
まず、S71において、ルータ内受信部62は、何れかの入力回路50から、第1の要求信号または第2の要求信号を受信する。続いて、S72において、ルータ内受信部62は、データ記憶部82に空き容量が存在するか否かを判断する。
【0114】
データ記憶部82に空き容量が存在しない場合(S72のNo)、ルータ内受信部62は、処理をS73に進める。S73において、ルータ内受信部62は、順方向データの受信要求か(すなわち、第1の要求信号を受信したか)、または、逆方向データの受信要求か(すなわち、第2の要求信号を受信したか)を判断する。
【0115】
順方向データの受信要求の場合(S73のYes)、ルータ内受信部62は、処理をS74に進める。S74において、ルータ内受信部62は、処理を一定時間待機する。ルータ内受信部62は、一定時間待機した後、処理をS72に戻し、データ記憶部82に空き容量ができるまでS72、S73およびS74の処理を繰り返す。なお、ルータ内受信部62は、一定回数または所定時間以上待機しても空き容量ができない場合には、第1の要求信号の送信元の入力回路50に不許可信号を送信して、処理を終了してもよい。
【0116】
逆方向データの受信要求の場合(S73のNo)、ルータ内受信部62は、処理をS75に進める。S75において、ルータ内受信部62は、データ記憶部82に記憶されている逆方向データを削除する。例えば、ルータ内受信部62は、最も過去に書き込まれた1つの逆方向データをデータ記憶部82から削除する。これにより、ルータ内受信部62は、データ記憶部82に空き容量を確保することができる。なお、ルータ内受信部62は、データ記憶部82に逆方向データが存在しない場合には、処理をせずに次の処理に進める。
【0117】
データ記憶部82に空き容量が存在すると判断された場合(S72のYes)または1つの逆方向データをデータ記憶部82から削除した場合(S75)、S76において、ルータ内受信部62は、許可信号を、第1の要求信号または第2の要求信号の送信元の入力回路50に送信する。第1の要求信号または第2の要求信号の送信元の入力回路50は、許可信号を受信した場合、順方向データまたは逆方向データを当該出力回路60に送信する。
【0118】
続いて、S77において、ルータ内受信部62は、第1の要求信号または第2の要求信号の送信元の入力回路50から、順方向データまたは逆方向データを受信する。そして、S78において、ルータ内受信部62は、受信した逆方向データをデータ記憶部82に書き込む。なお、ルータ内受信部62は、データ記憶部82に逆方向データが存在せずに、S75で空き容量を確保できなかった場合には、S77で受信した逆方向データを書き込まず破棄する。
【0119】
このような第2変形例に係る出力回路60は、データ記憶部82に順方向データまたは逆方向データを区別なく記憶させることができる。さらに、第2変形例に係る出力回路60は、データ記憶部82の空き容量が存在しない場合に、逆方向データを受信した場合には、滞留した逆方向データを削除して、逆方向データの転送をスムーズにすることができる。
【0120】
また、入力回路50は、通信路42を介して接続されたコア30またはルータ40から要求信号を受信した場合、入力記憶部54に空き容量が存在するか否かを判断している。そして、入力回路50は、入力記憶部54に空き容量が存在しない場合、入力記憶部54に空き容量ができるまで処理を一定時間待機している。そこで、第2変形例において、入力回路50は、コア30またはルータ40から要求信号を受信した場合であって、入力記憶部54に空き容量が存在しない場合、当該ルータ40内の出力回路60に対して、逆方向データの削除を指示する信号を送信してもよい。これにより、出力回路60のデータ記憶部82に空き容量ができ、入力回路50が、出力回路60へデータを送信することが可能となる。そして、入力回路50は、出力回路60へデータを送信することができると、入力記憶部54に空き容量を作成することができる。
【0121】
図16は、第3変形例に係る出力回路60のルータ内受信部62の処理を示すフローチャートである。出力記憶部64が、例えば、
図14に示すようなランダムアクセス可能なデータ記憶部82とメモリコントローラ84を含む構成である場合、出力回路60は、
図16に示すような処理を実行してもよい。
【0122】
まず、S81において、ルータ内受信部62は、何れかの入力回路50から、第1の要求信号または第2の要求信号を受信する。続いて、S82において、ルータ内受信部62は、データ記憶部82に空き容量が存在するか否かを判断する。
【0123】
データ記憶部82に空き容量が存在しない場合(S82のNo)、ルータ内受信部62は、処理をS83に進める。S83において、ルータ内受信部62は、データ記憶部82に逆方向データが存在するか否かを判断する。
【0124】
データ記憶部82に逆方向データが存在しない場合(S83のNo)、ルータ内受信部62は、処理をS84に進める。S84において、ルータ内受信部62は、処理を一定時間待機する。ルータ内受信部62は、一定時間待機した後、処理をS82に戻し、データ記憶部82に空き容量ができるまでS82、S83およびS84の処理を繰り返す。なお、ルータ内受信部62は、一定回数または所定時間以上待機しても空き容量ができない場合には、第1の要求信号または第2の要求信号の送信元の入力回路50に不許可信号を送信して、処理を終了してもよい。
【0125】
データ記憶部82に逆方向データが存在する場合(S83のYes)、ルータ内受信部62は、処理をS85に進める。S85において、ルータ内受信部62は、データ記憶部82に記憶されている逆方向データを削除する。例えば、ルータ内受信部62は、最も過去に書き込まれた1つの逆方向データをデータ記憶部82から削除する。これにより、ルータ内受信部62は、データ記憶部82に空き容量を存在させることができる。
【0126】
データ記憶部82に空き容量が存在すると判断された場合(S82のYes)または1つの逆方向データをデータ記憶部82から削除した場合(S85)、S86において、ルータ内受信部62は、許可信号を、第1の要求信号または第2の要求信号の送信元の入力回路50に送信する。
【0127】
続いて、S87において、ルータ内受信部62は、第1の要求信号または第2の要求信号の送信元の入力回路50から、順方向データまたは逆方向データを受信する。そして、S88において、ルータ内受信部62は、受信した順方向データまたは逆方向データをデータ記憶部82に書き込む。ルータ内受信部62は、S88の処理後、本フローを終了する。
【0128】
このような第3変形例に係る出力回路60は、データ記憶部82に順方向データまたは逆方向データを区別なく記憶させることができる。さらに、第3変形例に係る出力回路60は、データ記憶部82の空き容量が存在しない場合に、滞留した逆方向データを削除して、順方向データおよび逆方向データの転送をスムーズにすることができる。
【0129】
以上、実施形態に係るニューラルネットワーク装置10およびいくつかの変形例を説明した。実施形態および変形例においては、入力回路50に備えられる入力記憶部54は、通常のFIFOバッファまたはシフトレジスタを想定している。しかし、入力回路50に備えられる入力記憶部54は、ランダムアクセス可能なメモリであってもよい。この場合、入力回路50の受信部52は、出力回路60のルータ内受信部62と同様の処理を実行してもよい。
【0130】
すなわち、入力回路50は、要求信号を受信した場合であって、入力記憶部54における逆方向データを記憶させるための空き容量が存在しない場合、入力記憶部54に記憶されている逆方向データを削除する。例えば、この場合、入力回路50は、最も過去に書き込まれた逆方向データを削除する。また、入力回路50は、第1変形例、第2変形例および第3変形例で説明したルータ内受信部62と同様の処理を入力記憶部54に対して実行してもよい。
【0131】
また、入力回路50に備えられる入力記憶部54がFIFOバッファまたはシフトレジスタである場合、入力回路50は、要求信号を受信した場合であって、入力記憶部54における逆方向データを記憶させるための空き容量が存在しない場合、FIFOバッファにおける先頭に記憶された1つの逆方向データを削除する。ただし、FIFOバッファにおける先頭に記憶されたデータが、順方向データである場合には、入力回路50は、実施形態で説明した処理を実行する。
【0132】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。