(57)【要約】【課題】ニューラルネットワークの学習効率を向上させる。【解決手段】各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、学習対象のニューラルネットワークのＭ個の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］を番号ｍの順番にパケット化して集計処理ノード１に送信し、集計処理ノード１から送信されたパケットを受信して集計データＲ［ｍ］を番号ｍの順番に取得して、集計データＲ［ｍ］に基づいてニューラルネットワークの重みｗ［ｍ］を更新する。集計処理ノード１は、各分散処理ノード２［ｎ］から送信されたパケットを受信して分散データＤ［ｍ，ｎ］を番号ｍの順番に取得し、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した集計データＲ［ｍ］を生成して、集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノード２［ｎ］に送信する。【選択図】  図１
2019144643.tif 000002
【特許請求の範囲】
【請求項１】
集計処理ノードとＮ個（Ｎは２以上の整数）の分散処理ノードとを備え、
各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して前記集計処理ノードに送信し、前記集計処理ノードから送信されたパケットを受信して集計データＲ［ｍ］を番号ｍの順番に取得して、この集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、
前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して分散データＤ［ｍ，ｎ］を番号ｍの順番に取得し、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成して、この集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信することを特徴とする分散処理システム。
【請求項２】
請求項１記載の分散処理システムにおいて、
各分散処理ノードは、
前記分散データＤ［ｍ，ｎ］を番号ｍの順番にパケット化して前記集計処理ノードに送信する送信部と、
前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する受信部と、
前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とする分散処理システム。
【請求項３】
請求項１または２記載の分散処理システムにおいて、
前記集計処理ノードは、
各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する受信部と、
全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成する集計処理部と、
前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する送信部とを備えることを特徴とする分散処理システム。
【請求項４】
請求項１乃至３のいずれか１項に記載の分散処理システムにおいて、
各分散処理ノードは、
前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部と、
サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部とを、さらに備えることを特徴とする分散処理システム。
【請求項５】
請求項１乃至４のいずれか１項に記載の分散処理システムにおいて、
前記集計処理ノードと各分散処理ノードとは、
各分散処理ノードがパケット化した分散データＤ［ｍ，ｎ］を前記集計処理ノードに送信して、前記集計処理ノードが受信したパケットから前記分散データＤ［ｍ，ｎ］を取得する集約通信処理と、前記集計処理ノードが前記集計データＲ［ｍ］を生成する全ノード集計処理と、前記集計処理ノードがパケット化した前記集計データＲ［ｍ］を各分散処理ノードに送信して、各分散処理ノードが受信したパケットから前記集計データＲ［ｍ］を取得する分配通信処理と、各分散処理ノードが前記重みｗ［ｍ］を更新する重み更新処理とを、それぞれ異なる番号ｍについて並行して行うことを特徴とする分散処理システム。
【請求項６】
Ｎ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノードに送信する第１のステップと、
前記集計処理ノードが、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する第２のステップと、
前記集計処理ノードが、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した集計データＲ［ｍ］を生成する第３のステップと、
前記集計処理ノードが、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する第４のステップと、
前記分散処理ノードの各々が、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する第５のステップと、
前記分散処理ノードの各々が、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第６のステップとを含むことを特徴とする分散処理方法。
【請求項７】
請求項６記載の分散処理方法において、
前記第１のステップの前に、前記分散処理ノードの各々が、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する第７のステップと、
前記分散処理ノードの各々が、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持する第８のステップとを、さらに含むことを特徴とする分散処理方法。
【請求項８】
請求項６または７記載の分散処理方法において、
前記分散処理ノードの前記第１のステップおよび前記集計処理ノードの前記第２のステップと、前記集計処理ノードの前記第３のステップと、前記集計処理ノードの前記第４のステップおよび前記分散処理ノードの前記第５のステップと、前記分散処理ノードの前記第６のステップとを、それぞれ異なる番号ｍについて並行して行うことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集計処理ノードと複数の分散処理ノードとを連携させてニューラルネットワークの学習を行う分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【０００２】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み（前段のニューロンモデルが出力した値に乗じる係数）を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【０００３】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する（サンプルデータ毎に得られた勾配を重み別に合算する）集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【０００４】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【０００５】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる（非特許文献１参照）。
【０００６】
深層学習の分散処理において、集計処理を行うためには、分散処理ノード毎に得られたデータ（分散データ）を集計処理ノードに集約するための、各分散処理ノードから集計処理ノードへの通信（集約通信）と、集計処理ノードでの全ノード集計処理と、集計処理ノードが集計したデータ（集計データ）を各分散処理ノードに転送するための、集計処理ノードから分散処理ノードへの通信（分配通信）と、が必要となる。
【０００７】
図１２に、従来技術による、深層学習の分散処理のシーケンスを示す。分散処理ノード１００［ｎ］（ｎ＝１，・・・，Ｎ）は、Iの期間においてサンプルデータ入力と勾配計算処理とノード内集計処理とを行い、分散データを集計処理ノード１０１に送信する。IIの期間では、このような各ノードからの送信が行われるが、各ノードが同時に分散データを送信するとは限らない。
【０００８】
IIIの期間では、集計処理ノード１０１が各ノードから得られた勾配を重み別に合算する全ノード集計処理を行い、IVの期間において集計データを各分散処理ノード１００［ｎ］に送信する。Vの期間では、各分散処理ノード１００［ｎ］が重み更新処理を行う。
こうして、分散処理が行われることにより、深層学習には、集約通信（II）と全ノード集計処理（III）と分配通信（IV）の各処理時間が加わる。
【０００９】
このような処理時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。
【００１０】
このように、深層学習の分散システムは、集約通信時間と分配通信時間の増大によって、各分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。図１３は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、２００は分散処理ノード数と処理性能の理想的な関係（性能∝ノード数）を示し、２０１は分散処理ノード数と処理性能の実際の関係を示している。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】秋葉 拓哉，“分散深層学習パッケージ ChainerMN 公開”，プリファードインフラストラクチャー（Preferred Infrastructure），２０１７年，インターネット＜https://research.preferred.jp/2017/05/chainermn-beta-release/＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、集計処理ノードと複数の分散処理ノードとを備える分散処理システムおいて、ニューラルネットワークの学習効率を向上させることができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の分散処理システムは、集計処理ノードとＮ個（Ｎは２以上の整数）の分散処理ノードとを備え、各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して前記集計処理ノードに送信し、前記集計処理ノードから送信されたパケットを受信して集計データＲ［ｍ］を番号ｍの順番に取得して、この集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して分散データＤ［ｍ，ｎ］を番号ｍの順番に取得し、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成して、この集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信することを特徴とするものである。
【００１４】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記分散データＤ［ｍ，ｎ］を番号ｍの順番にパケット化して前記集計処理ノードに送信する送信部と、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する受信部と、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とするものである。
また、本発明の分散処理システムの１構成例において、前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する受信部と、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成する集計処理部と、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する送信部とを備えることを特徴とするものである。
【００１５】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部と、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部とを、さらに備えることを特徴とするものである。
また、本発明の分散処理システムの１構成例において、前記集計処理ノードと各分散処理ノードとは、各分散処理ノードがパケット化した分散データＤ［ｍ，ｎ］を前記集計処理ノードに送信して、前記集計処理ノードが受信したパケットから前記分散データＤ［ｍ，ｎ］を取得する集約通信処理と、前記集計処理ノードが前記集計データＲ［ｍ］を生成する全ノード集計処理と、前記集計処理ノードがパケット化した前記集計データＲ［ｍ］を各分散処理ノードに送信して、各分散処理ノードが受信したパケットから前記集計データＲ［ｍ］を取得する分配通信処理と、各分散処理ノードが前記重みｗ［ｍ］を更新する重み更新処理とを、それぞれ異なる番号ｍについて並行して行うことを特徴とするものである。
【００１６】
また、本発明の分散処理方法は、Ｎ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノードに送信する第１のステップと、前記集計処理ノードが、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する第２のステップと、前記集計処理ノードが、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した集計データＲ［ｍ］を生成する第３のステップと、前記集計処理ノードが、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する第４のステップと、前記分散処理ノードの各々が、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する第５のステップと、前記分散処理ノードの各々が、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第６のステップとを含むことを特徴とするものである。
【００１７】
また、本発明の分散処理方法の１構成例は、前記第１のステップの前に、前記分散処理ノードの各々が、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する第７のステップと、前記分散処理ノードの各々が、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持する第８のステップとを、さらに含むことを特徴とするものである。
また、本発明の分散処理方法の１構成例は、前記分散処理ノードの前記第１のステップおよび前記集計処理ノードの前記第２のステップと、前記集計処理ノードの前記第３のステップと、前記集計処理ノードの前記第４のステップおよび前記分散処理ノードの前記第５のステップと、前記分散処理ノードの前記第６のステップとを、それぞれ異なる番号ｍについて並行して行うことを特徴とするものである。
【発明の効果】
【００１８】
本発明によれば、各分散処理ノードが、ニューラルネットワークの重み毎の分散データを順番にパケット化して集計処理ノードに送信し、集計処理ノードから送信されたパケットに格納された集計データを順番に取得してニューラルネットワークの重みを更新し、集計処理ノードが、各分散処理ノードから送信されたパケットに格納された分散データを順番に取得し、全分散処理ノードの分散データを集計した集計データをパケット化して各分散処理ノードに送信することにより、各分散処理ノードから集計処理ノードに分散データを送信する処理と、集計処理ノードから各分散処理ノードに集計データを送信する処理とを同時に行うことができ、効果的な分散処理を行うことができ、ニューラルネットワークの学習効率を向上させることができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図３】図３は、本発明の第１の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係る分散処理ノードの集約通信処理を説明するフローチャートである。
【図５】図５は、本発明の第１の実施例に係る集計処理ノードの集約通信処理を説明するフローチャートである。
【図６】図６は、本発明の第１の実施例に係る集計処理ノードの全ノード集計処理を説明するフローチャートである。
【図７】図７は、本発明の第１の実施例に係る集計処理ノードの分配通信処理を説明するフローチャートである。
【図８】図８は、本発明の第１の実施例に係る分散処理ノードの分配通信処理を説明するフローチャートである。
【図９】図９は、本発明の第１の実施例に係る分散処理ノードの重み更新処理を説明するフローチャートである。
【図１０】図１０は、本発明の第１の実施例に係る集計処理ノードと分散処理ノードの処理のシーケンスを示す図である。
【図１１】図１１は、本発明の第２の実施例に係る集計処理ノードの構成例を示すブロック図である。
【図１２】図１２は、従来の深層学習の分散処理のシーケンスを示す図である。
【図１３】図１３は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【００２０】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。図１の分散処理システムは、１個の集計処理ノード１と、ニューラルネットワークのサンプルデータ（学習データ）の集合毎に設けられたＮ個（Ｎは２以上の整数）の分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）とを備える。各分散処理ノード２［ｎ］は、双方向の通信が可能なネットワーク３により、集計処理ノード１と接続されている。
【００２１】
なお、本発明において、「ノード」とは、ネットワーク上に分散配置されているサーバ等の機器を意味する。
【００２２】
図２は分散処理ノード２［ｎ］の構成例を示すブロック図である。各分散処理ノード２［ｎ］は、それぞれ図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部２０と、サンプルデータが入力されたときに、ニューラルネットワークの重みの各々について、ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部２１と、サンプルデータ毎の勾配を集計した数値である分散データを重み毎に生成して保持するノード内集計処理部２２と、分散データをパケット化して集計処理ノード１に送信する送信部２３と、集計処理ノード１から送信されたパケットを受信して集計データを取得する受信部２４と、集計データに基づいてニューラルネットワークの重みを更新する重み更新処理部２５と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク２６とを備えている。
【００２３】
図３は分散処理ノード２［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）のサンプル入力部２０は、図示しないデータ収集ノードから異なるＳ個（Ｓは２以上の整数）のサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する（図３ステップＳ１００）。
【００２４】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをＮ個の集合に振り分けて各分散処理ノード２［ｎ］へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【００２５】
各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の勾配計算処理部２１は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、学習対象のニューラルネットワーク２６のＭ個（Ｍは２以上の整数）の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワーク２６の損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する（図３ステップＳ１０１）。
【００２６】
ニューラルネットワーク２６を各分散処理ノード２［ｎ］にソフトウェアで構築する方法、ニューラルネットワーク２６の重みｗ［ｍ］、ニューラルネットワーク２６の性能の悪さを示す指標である損失関数、および損失関数の勾配Ｇ［ｍ，ｎ，ｓ］については周知の技術であるので、詳細な説明は省略する。
【００２７】
続いて、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）のノード内集計処理部２２は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］を、重みｗ［ｍ］毎に生成して保持する（図３ステップＳ１０２）。分散データＤ［ｍ，ｎ］の計算式は以下のとおりである。
【００２８】
【数１】
2019144643.tif 000003
【００２９】
なお、勾配計算処理部２１による勾配計算処理とノード内集計処理部２２によるノード内集計処理とは、サンプルデータ単位でパイプライン化する（あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する）ことができる。
【００３０】
図４は分散処理ノード２［ｎ］の集約通信処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３は、重みｗ［ｍ］毎の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノード１に送信する集約通信を行う。
【００３１】
このとき、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３は、保持するＭ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、Ｌｇ（Ｌｇは１以上Ｍ未満の整数）個ずつＰｇ個（Ｐｇは２以上の整数）の集約通信パケットに振り分けて（図４ステップＳ１０３）、全ての集約通信パケットを送信し終えるまで（図４ステップＳ１０５においてＹＥＳ）、Ｐｇ個の集約通信パケットを順番に集計処理ノード１に送信する（図４ステップＳ１０４）。すなわち、ｐ番目（ｐ＝１，・・・，Ｐｇ）に送信する集約通信パケットＳＰ［ｐ，ｎ］には、Ｌｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）が格納される。
【００３２】
なお、ＭがＬｇで割り切れない条件では、Ｐｇ個目の集約通信パケットＳＰ［Ｐｇ，ｎ］には、（Ｍ−Ｌｇ×（Ｐｇ−１））個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（Ｐｇ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌｇ×（Ｐｇ−１））が格納される。
Ｐｇ番目の集約通信パケットＳＰ［Ｐｇ，ｎ］については、（Ｍ−Ｌｇ×（Ｐｇ−１））個の分散データＤ［ｉ，ｎ］の後に、｛Ｌｇ−（Ｍ−Ｌｇ×（Ｐｇ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬｇ個のデータを格納するようにしてもよい。
【００３３】
図５は集計処理ノード１の集約通信処理を説明するフローチャートである。集約通信において、集計処理ノード１は、各分散処理ノード２［ｎ］が送信した各集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）を受信する（図５ステップＳ２００）。
【００３４】
集計処理ノード１は、受信した集約通信パケットＳＰ［ｐ，ｎ］から、分散処理ノード２［ｎ］が保持していたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を取得する（図５ステップＳ２０１）。
【００３５】
このように、集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）が保持していた分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番に取得することができる。
【００３６】
図６は集計処理ノード１の全ノード集計処理を説明するフローチャートである。集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）から重みｗ［ｍ］の分散データＤ［ｍ，ｎ］を取得し終えた後に（図６ステップＳ２０２においてＹＥＳ）、取得した全分散処理ノード２［ｎ］の分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計する全ノード集計処理を行い、集計データＲ［ｍ］を生成する（図６ステップＳ２０３）。集計データＲ［ｍ］の計算式は、以下のとおりである。
【００３７】
【数２】
2019144643.tif 000004
【００３８】
このように、集計処理は、番号ｍの順番に取得した分散データＤ［ｍ，ｎ］に基づいて、集計データＲ［ｍ］を計算する処理である。このため、集計処理ノード１は、番号ｍの順番に集計データＲ［ｍ］を生成することができる。
【００３９】
図７は集計処理ノード１の分配通信処理を説明するフローチャートである。集計処理ノード１は、重みｗ［ｍ］毎の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信する分配通信を行う。
【００４０】
このとき、集計処理ノード１は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個（Ｌｓは１以上Ｍ未満の整数）ずつＰｓ個（Ｐｓは２以上の整数）の分配通信パケットに振り分けて（図７ステップＳ２０４）、全ての分配通信パケットを送信し終えるまで（図７ステップＳ２０６においてＹＥＳ）、Ｐｓ個の分配通信パケットを順番に各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信する（図７ステップＳ２０５）。すなわち、分散処理ノード２［ｎ］に向けてｐ番目（ｐ＝１，・・・，Ｐｓ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納される。
【００４１】
なお、ＭがＬｓで割り切れない条件では、Ｐｓ個目の分配通信パケットＤＰ［Ｐｓ，ｎ］には、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（Ｐｓ−１）＋ｏ、ｏ＝１，・・・，Ｍ−Ｌｓ×（Ｐｓ−１））が格納される。
Ｐｓ番目の分配通信パケットＤＰ［Ｐｓ，ｎ］については、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］の後に、｛Ｌｓ−（Ｍ−Ｌｓ×（Ｐｓ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬｓ個のデータを格納するようにしてもよい。
【００４２】
図８は分散処理ノード２［ｎ］の分配通信処理を説明するフローチャートである。分配通信において、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４は、集計処理ノード１が送信した各分配通信パケットＤＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｓ）を順番に受信する（図８ステップＳ１０６）。
【００４３】
そして、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４は、受信した分配通信パケットＤＰ［ｐ，ｎ］から、集計処理ノード１が生成したＬｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）を取得する（図８ステップＳ１０７）。
【００４４】
このように、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、集計処理ノード１が生成した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番に取得することができる。
【００４５】
なお、集計処理ノード１がｐ番目に送信する分配通信パケットＤＰ［ｐ，ｎ］には、全ての分散処理ノード２［ｎ］に関して同じ集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納されている。したがって、分配通信パケットＤＰ［ｐ，ｎ］の宛先を指定する必要がない場合（例えば図１のように分散処理ノード別に経路が異なる場合や、全分散処理ノード宛にマルチキャストできるネットワークを介する場合）は、全ての分散処理ノード２［ｎ］に同じ分配通信パケットＤＰ［ｐ］を送信してもよい。
【００４６】
図９は分散処理ノード２［ｎ］の重み更新処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２５は、集計処理ノード１から重みｗ［ｍ］の集計データＲ［ｍ］を取得し終えた後に（図９ステップＳ１０８においてＹＥＳ）、取得した集計データＲ［ｍ］に基づいて、それぞれ自ノード内のニューラルネットワーク２６の重みｗ［ｍ］を更新する重み更新処理を行う（図９ステップＳ１０９）。
【００４７】
重み更新処理においては、集計データＲ［ｍ］が示す、損失関数の勾配に基づいて損失関数が最小になるように重みｗ［ｍ］を番号ｍ毎に更新すればよい。重みｗ［ｍ］の更新は周知の技術であるので、詳細な説明は省略する。
【００４８】
このように、重み更新処理は、重みｗ［ｍ］の番号ｍの順番に取得した集計データＲ［ｍ］に基づいて、重みｗ［ｍ］を更新する処理である。このため、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、重みｗ［ｍ］に対する重み更新処理を、番号ｍの順番に行うことができる。
【００４９】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）と集計処理ノード１とは、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード２［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク２６の推論精度を向上させる。
【００５０】
なお、ミニバッチ学習の繰り返しの終了は、（Ａ）ミニバッチ学習の回数が予め指定された値に到達した場合、（Ｂ）ニューラルネットワーク２６の推論精度（例えば正答が既知の問題をニューラルネットワーク２６に推論処理させたときの正答率）が予め指定された閾値を超過した場合、（Ｃ）ニューラルネットワーク２６の推論精度の向上が停止した場合（予め指定されたミニバッチ学習の回数を繰り返したときに推論精度の上昇が予め指定された閾値を下回った場合）、（Ｄ）あるいは、（Ａ）〜（Ｃ）のうち少なくとも２つの場合の組み合わせが発生した場合、とする。このようなミニバッチ学習の繰り返しの終了は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）が個別に判断してもよいし、集計処理ノード１が総合的に判断してもよい。
【００５１】
図１０に、集計処理ノード１と分散処理ノード２［ｎ］の処理のシーケンスを示す。上記のように、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノード１に送信し、集計処理ノード１は、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番に取得する、という集約通信処理を行う。
【００５２】
さらに、集計処理ノード１は、重みｗ［ｍ］の番号ｍの順番に取得したＭ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）に基づき、集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ））を番号ｍの順番に生成する全ノード集計処理を行う。
【００５３】
さらに、集計処理ノード１は、重みｗ［ｍ］の番号ｍの順番に生成したＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番にパケット化して各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信し、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番に取得する、という分配通信処理を行う。
【００５４】
さらに、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、番号ｍの順番に取得したＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）に基づき、Ｍ個の重みｗ［ｍ］を番号ｍの順番に更新する重み更新処理を行う。
【００５５】
本実施例では、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理とを、並行してほぼ同時に（パイプラインで）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術によるシーケンス（図１２）と比較したとき、処理時間の大幅な短縮が可能となる。
【００５６】
すなわち、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３と集計処理ノード１とがＭ個の重みｗ［ｍ］の内のある重みｗ［ｍ］の分散データＤ［ｍ，ｎ］について図４、図５で説明した集約通信処理を行っているときに、集約通信処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の取得済みの分散データＤ［ｍ，ｎ］について集計処理ノード１が図６で説明した全ノード集計処理を行い、全ノード集計処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の集計処理済みの集計データＲ［ｍ］について集計処理ノード１と各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４とが図７、図８で説明した分配通信処理を行い、分配通信処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の取得済みの集計データＲ［ｍ］に基づき各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２５が図９で説明した重み更新処理を行う。
【００５７】
したがって、例えば、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理のそれぞれで時間Ｔを要する場合、従来技術では、これらの全ての処理を終えるのに４Ｔの時間を要したが、本実施例ではＴ＋αの時間で済む。ここで、前記αは、任意の分散処理ノード２［ｎ］が任意の分散データＤ［ｍ，ｎ］を集計処理ノード１に送信した時点から重みｗ［ｍ］の更新が完了するまでの遅延時間である。本実施例では、重みｗ［ｍ］の番号ｍの単位で処理をパイプライン化しているため、時間αはＴと比較すると十分に小さい時間である。したがって、本実施例では、従来技術と比較して、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理とに要する時間を、約１／４に短縮することが可能である。
【００５８】
［第２の実施例］
次に、本発明の第２の実施例について説明する。本実施例は、第１の実施例の深層学習用分散処理システムの構成要素である集計処理ノード１の構成例を説明するものである。図１１は集計処理ノード１の構成例を示すブロック図である。
【００５９】
集計処理ノード１は、受信部１０［ｎ］（ｎ＝１，・・・，Ｎ）と、受信ＦＩＦＯ（First In, First Out）バッファ１１［ｎ］と、集計処理部１２と、送信部１３［ｎ］とを備えている。
【００６０】
第１の実施例で説明したように、集計処理ノード１は、集約通信処理において、分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の各々から、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、Ｌｇ個ずつに振り分けられたＰｇ個の集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）として受信する。集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）には、Ｌｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）が格納されている。
【００６１】
また、集計処理ノード１は、分配通信処理において、分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の各々に向けて、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個ずつに振り分けてＰｓ個の集約通信パケットＤＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｓ）として送信する。
【００６２】
図１１に示したように、集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）から集約通信パケットＳＰ［ｐ，ｎ］を受信するための受信部１０［ｎ］を、分散処理ノード２［ｎ］別に備える。
【００６３】
各受信部１０［ｎ］は、図５で説明した集約通信処理を行うものである。具体的には、各受信部１０［ｎ］は、対応する分散処理ノード２［ｎ］が送信した集約通信パケットＳＰ［ｐ，ｎ］を受信し、この集約通信パケットＳＰ［ｐ，ｎ］に重みｗ［ｍ］の番号ｍの順に格納されたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を番号ｉ（ｉは重みｗ［ｍ］の番号ｍの一部）の順に取得して、後段の受信ＦＩＦＯバッファ１１［ｎ］に渡す。
【００６４】
また、図１１に示すように、集計処理ノード１は、受信部１０［ｎ］別（分散処理ノード２［ｎ］別）に、受信ＦＩＦＯバッファ１１［ｎ］を備える。さらに、集計処理ノード１は、各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）に蓄積されている、番号ｍ（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］を各受信ＦＩＦＯバッファ１１［ｎ］から読み出して集計する集計処理部１２を備える。受信ＦＩＦＯバッファ１１［ｎ］と集計処理部１２とは、図６で説明した全ノード集計処理を行うものである。
【００６５】
具体的には、受信ＦＩＦＯバッファ１１［ｎ］は、対応する受信部１０［ｎ］から渡されたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を、番号ｉ（ｉは番号ｍの一部）の順に蓄積する。この蓄積は各受信ＦＩＦＯバッファ１１［ｎ］が空の状態から開始される。集約通信パケットＳＰ［ｐ，ｎ］の受信と分散データＤ［ｉ，ｎ］の蓄積とがＰｇ回行われることで、Ｍ個の分散データＤ［ｍ，ｎ］が各受信ＦＩＦＯバッファ１１［ｎ］に蓄積される。
【００６６】
したがって、各受信ＦＩＦＯバッファ１１［ｎ］に蓄積された分散データを同じ個数ずつ読み出した場合、各受信ＦＩＦＯバッファ１１［ｎ］から読み出された分散データＤ［ｍ，ｎ］はｍ＝１，・・・，Ｍの順に並んでいる。
【００６７】
各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）は、集計処理部１２に対して、それぞれ分散データの蓄積の有無を示す蓄積有無信号Ｕ［ｎ］を出力する。
【００６８】
集計処理部１２は、全ての蓄積有無信号Ｕ［ｎ］（ｎ＝１，・・・，Ｎ）が分散データの蓄積有を示す場合に、各受信ＦＩＦＯバッファ１１［ｎ］から分散データを１個ずつ読み出す。なお、各受信ＦＩＦＯバッファ１１［ｎ］は番号ｍの順番で分散データを蓄積しており、集計処理部１２は各受信ＦＩＦＯバッファ１１［ｎ］から同数の分散データを読み出す。このため、各受信ＦＩＦＯバッファ１１［ｎ］から読み出された分散データの番号ｍは、各受信ＦＩＦＯバッファ１１［ｎ］間で同じ値となる。したがって、蓄積有無信号Ｕ［ｎ］は分散データの番号ｍを特定する必要はなく、次に読み出すべき分散データが各受信ＦＩＦＯバッファ１１［ｎ］に蓄積されているか否かを知らせるだけでよい。
【００６９】
ただし、後述するように、集計処理部１２において、読み出し済みの分散データＤ［ｍ，ｎ］に基づいて生成した集計データＲ［ｍ］を分配通信パケットに格納し、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）から送出するが、集計処理部１２は、分配通信パケットを送出する状態にない場合（例えば別の分配通信パケットを送出中である場合）は、次の分散データＤ［ｍ，ｎ］の読み出しを、分配通信パケットを送出可能となるまで保留する。
【００７０】
このため、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）は、分配通信パケットが送出可能になったときに、分配通信パケットが送出可能であることを示す送出許可信号Ｖ［ｎ］を集計処理部１２に対して出力する。
【００７１】
集計処理部１２は、各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）からの蓄積有無信号Ｕ［ｎ］と、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）からの送出許可信号Ｖ［ｎ］（ｎ＝１，・・・，Ｎ）とを受けて、各受信ＦＩＦＯバッファ１１［ｎ］から分散データの読み出しを行うか否かを判定する。
【００７２】
具体的には、集計処理部１２は、蓄積有無信号Ｕ［ｎ］が、次に読み出すべき分散データＤ［ｍ，ｎ］の蓄積有りを示し、送出許可信号Ｖ［ｎ］が、読み出し済みの分散データＤ［ｍ，ｎ］から生成された集計データＲ［ｍ］を含む分配通信パケットの送出可能を示しているとき、分散データＤ［ｍ，ｎ］を各受信ＦＩＦＯバッファ１１［ｎ］から読み出す。
【００７３】
さらに、集計処理部１２は、各受信ＦＩＦＯバッファ１１［ｎ］から番号ｍの順に読み出した分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）に基づいて、集計データＲ［ｍ］を番号ｍの順に生成し、集計データＲ［ｍ］を番号ｍの順に後段の送信部１３［ｎ］に渡す。ここでは、各送信部１３［ｎ］に同一の集計データが渡される。集計データＲ［ｍ］の計算式は、式（２）に示したとおりである。
【００７４】
各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に分配通信パケットを送信するための送信部１３［ｎ］は、分散処理ノード２［ｎ］別に設けられている。送信部１３［ｎ］は、図７で説明した分配通信処理を行うものである。
【００７５】
各送信部１３［ｎ］は、集計処理部１２から番号ｍの順番に渡された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個ずつＰｓ個の分配通信パケットに振り分けて送信する。すなわち、分散処理ノード２［ｎ］に向けてｐ番目（ｐ＝１，・・・，Ｐｓ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納される。上記のとおり、各送信部１３［ｎ］は、分配通信パケットＤＰ［ｐ，ｎ］が送出可能になったときに、集計処理部１２に対して送出許可信号Ｖ［ｎ］を出力する。
【００７６】
第１の実施例で説明したように、各送信部１３［ｎ］は、ＭがＬｓで割り切れない条件では、Ｐｓ個目の分配通信パケットＤＰ［Ｐｓ，ｎ］に、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（Ｐｓ−１）＋ｏ、ｏ＝１，・・・，Ｍ−Ｌｓ×（Ｐｓ−１））を格納する。また、各送信部１３［ｎ］は、Ｐｓ番目の分配通信パケットＤＰ［Ｐｓ，ｎ］について、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］の後に、｛Ｌｓ−（Ｍ−Ｌｓ×（Ｐｓ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬｓ個のデータを格納するようにしてもよい。
【００７７】
以上のように、各受信部１０［ｎ］（ｎ＝１，・・・，Ｎ）は、分散処理ノード２［ｎ］から受信した集約通信パケットから、重みｗ［ｍ］の番号ｍ（ｍ＝１，・・・，Ｍ）の順に分散データＤ［ｍ，ｎ］を取り出して、番号ｍの順に、分散処理ノード別の受信ＦＩＦＯバッファ１１［ｎ］に格納する。
【００７８】
集計処理部１２は、分散データＤ［ｍ，ｎ］を番号ｍの順に各受信ＦＩＦＯバッファ１１［ｎ］から読み出して、読み出した分散データＤ［ｍ，ｎ］に基づいて集計データＲ［ｍ］を生成する。さらに、各送信部１３［ｎ］は、生成された集計データＲ［ｍ］を番号ｍの順に分配通信パケットに格納して、各分散処理ノード２［ｎ］に送出する。
【００７９】
図１２で説明した従来技術では、集計処理ノード１０１が全ての分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を分散処理ノード１００［ｎ］から受け、その後、分散データＤ［ｍ，ｎ］を集計して全ての集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を生成し、その後、集計データＲ［ｍ］を分散処理ノード１００［ｎ］に返していた。
【００８０】
これに対して、本実施例では、集計処理ノード１における集約通信処理と全ノード集計処理と分配通信処理とを互いに異なる番号ｍについてパイプライン化することができるので、各分散処理ノード２［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、全ノードについて分散データＤ［ｍ，ｎ］を集計した集計データＲ［ｍ］を、各分散処理ノード２［ｎ］に返すまでの時間を、従来技術と比較して大幅に短縮することができる。
【００８１】
例えば、番号ｍに関わる各処理に要する時間をｔとすると、各分散処理ノード２［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、全分散処理ノード２［ｎ］について分散データＤ［ｍ，ｎ］を集計した集計データＲ［ｍ］を、各分散処理ノード２［ｎ］に返すまでの時間は、本発明では４ｔ（パイプライン段数＝４）となる。
【００８２】
一方、従来技術では、各処理にＭ倍の時間を要するので、各分散処理ノード１００［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、集計データＲ［ｍ］を各分散処理ノード１００［ｎ］に返すまでの時間が４ｔ×Ｍとなる。このように、本実施例では、１／Ｍ（Ｍは重みｗ［ｍ］の個数であり１００，０００，０００程度の値になり得る）に時間を短縮することができる。
【００８３】
分散処理システムの他の構成要素については、第１の実施例で説明したものと同じであるため、本実施例では説明を省略する。
【００８４】
第１、第２の実施例で説明した集計処理ノード１と分散処理ノード２［ｎ］の各々は、ＣＰＵ（Central Processing Unit）、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。集計処理ノード１と分散処理ノード２［ｎ］の各々のＣＰＵは、各々の記憶装置に格納されたプログラムに従って第１、第２の実施例で説明した処理を実行する。
【産業上の利用可能性】
【００８５】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【００８６】
１…集計処理ノード１、２…分散処理ノード、１０…受信部、１１…受信ＦＩＦＯバッファ、１２…集計処理部、１３…送信部、２０…サンプル入力部、２１…勾配計算処理部、２２…ノード内集計処理部、２３…送信部、２４…受信部、２５…重み更新処理部、２６…ニューラルネットワーク。
【図１】
2019144643.tif 000005
【図２】
2019144643.tif 000006
【図３】
2019144643.tif 000007
【図４】
2019144643.tif 000008
【図５】
2019144643.tif 000009
【図６】
2019144643.tif 000010
【図７】
2019144643.tif 000011
【図８】
2019144643.tif 000012
【図９】
2019144643.tif 000013
【図１０】
2019144643.tif 000014
【図１１】
2019144643.tif 000015
【図１２】
2019144643.tif 000016
【図１３】
2019144643.tif 000017