(57)【要約】【課題】通信量を低減しながら並列分散学習処理を効率的に実行できる電子装置を実現する。【解決手段】実施形態によれば、電子装置は、受信手段と処理手段とを具備する。前記受信手段は、前記電子装置と少なくとも一つの他の電子装置とによって目的関数を基準とする並列分散処理が実行される場合に、前記少なくとも一つの他の電子装置の内の第１電子装置から、前記第１電子装置によって前記目的関数の第１重み係数を更新するために算出された複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを受信する。前記処理手段は、前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて、前記目的関数の第２重み係数を更新する。【選択図】図４
2018036779.tif 000002
【特許請求の範囲】
【請求項１】
電子装置であって、
前記電子装置と少なくとも一つの他の電子装置とによって目的関数を基準とする並列分散処理が実行される場合に、前記少なくとも一つの他の電子装置の内の第１電子装置から、前記第１電子装置によって前記目的関数の第１重み係数を更新するために算出された複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを受信する受信手段と、
前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて、前記目的関数の第２重み係数を更新する処理手段とを具備する電子装置。
【請求項２】
前記受信手段は、前記第１電子装置から、前記複数の勾配の大小関係を特定可能な情報を受信し、
前記処理手段は、さらに、前記複数の勾配の和と前記複数の勾配の大小関係を特定可能な情報とを用いて前記第２重み係数を更新する請求項１記載の電子装置。
【請求項３】
前記処理手段は、前記複数の勾配の和を前記複数の勾配の数で除した値に、学習係数を掛けた値を用いて、前記第２重み係数を更新する請求項１記載の電子装置。
【請求項４】
前記学習係数は、前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて決定される請求項３記載の電子装置。
【請求項５】
前記受信手段は、さらに、前記第１電子装置が、前記少なくとも一つの他の電子装置の内の第２電子装置から、前記第２電子装置によって前記目的関数の第３重み係数を更新するために算出された複数の第１の勾配の和と、前記複数の第１の勾配の数を特定可能な情報とを受信した場合に、前記第１電子装置から、前記複数の第１の勾配の和と、前記第１電子装置によって前記第１重み係数を更新するために算出された複数の第２の勾配の和との総和と、前記複数の第１の勾配の数と前記複数の第２の勾配の数との和を特定可能な情報とを受信し、
前記処理手段は、さらに、前記総和と、前記複数の第１の勾配の数と前記複数の第２の勾配の数との和を特定可能な情報とを用いて前記第２重み係数を更新する請求項１記載の電子装置。
【請求項６】
複数の電子装置によって目的関数を基準とする並列分散処理が実行される場合に、前記複数の電子装置の内の第１電子装置から、前記第１電子装置によって前記目的関数の第１重み係数を更新するために算出された複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを受信し、
前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて、前記目的関数の第２重み係数を更新する方法。
【請求項７】
前記第１電子装置から、前記複数の勾配の大小関係を特定可能な情報を受信することを含み、
前記複数の勾配の和と前記複数の勾配の大小関係を特定可能な情報とを用いて前記第２重み係数を更新することを含む請求項６記載の方法。
【請求項８】
前記複数の勾配の和を前記複数の勾配の数で除した値に、学習係数を掛けた値を用いて、前記第２重み係数を更新することを含む請求項６記載の方法。
【請求項９】
前記学習係数は、前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて決定される請求項８記載の方法。
【請求項１０】
前記受信することは、前記第１電子装置が、前記複数の電子装置の内の第２電子装置から、前記第２電子装置によって前記目的関数の第３重み係数を更新するために算出された複数の第１の勾配の和と、前記複数の第１の勾配の数を特定可能な情報とを受信した場合に、前記第１電子装置から、前記第１の勾配の和と、前記第１電子装置によって前記第１重み係数を更新するために算出された複数の第２の勾配の和との総和と、前記複数の第１の勾配の数と前記複数の第２の勾配の数との和を特定可能な情報とを受信することをさらに含み、
前記更新することは、前記総和と、前記複数の第１の勾配の数と前記複数の第２の勾配の数との和を特定可能な情報とを用いて前記第２重み係数を更新することをさらに含む請求項６記載の方法。
【請求項１１】
サーバ装置と第１クライアント装置と第２クライアント装置とによって構成される情報処理システムであって、
前記第１クライアント装置は、
前記情報処理システムにおいて目的関数を基準とする並列分散処理が実行される場合に、前記目的関数の第１重み係数を更新し、
前記第１重み係数の更新のために算出された複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを前記サーバ装置に送信し、
前記サーバ装置は、
前記送信された複数の勾配の和と複数の勾配の数を特定可能な情報とを用いて、前記目的関数の第２重み係数を更新し、
前記更新された第２重み係数を前記第２クライアント装置に送信する情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、並列分散学習のための技術に関する。
【背景技術】
【０００２】
近年、機械学習の一つであるディープラーニングによるデータの有効活用が期待されている。ディープラーニングにおいて、大規模なデータを用いた学習結果をより高速に得るためには、複数のコンピュータ（プロセッサ）による学習の並列処理を実行し、各コンピュータによる学習経過を共有する並列分散学習処理が求められる。このような並列分散学習処理では、コンピュータ間での通信によって学習経過を示すデータが共有される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１４／０２０９５９号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、ディープラーニングにおける並列分散学習処理ではコンピュータ間で共有されるデータ量が大きく、したがって、通信コストが高くなる場合がある。そのため、通信コストを低減しながら並列分散学習処理を効率的に実行できる新たな技術の実現が要求される。
【０００５】
本発明の一形態は、通信コストを低減しながら並列分散学習処理を効率的に実行できる電子装置、方法及び情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態によれば、電子装置は、受信手段と処理手段とを具備する。前記受信手段は、前記電子装置と少なくとも一つの他の電子装置とによって目的関数を基準とする並列分散処理が実行される場合に、前記少なくとも一つの他の電子装置の内の第１電子装置から、前記第１電子装置によって前記目的関数の第１重み係数を更新するために算出された複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを受信する。前記処理手段は、前記複数の勾配の和と、前記複数の勾配の数を特定可能な情報とを用いて、前記目的関数の第２重み係数を更新する。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係る情報処理システムの構成の例を示すブロック図。
【図２】目的関数を基準とする並列分散学習処理で重み係数の更新に用いられる勾配の例を説明するための図。
【図３】図１の情報処理システムにおいて、目的関数を基準とする並列分散学習処理で重み係数の更新に用いられる勾配の例を説明するための図。
【図４】図１の情報処理システムによる目的関数を基準とする並列分散学習処理で学習経過が共有される例を説明するための図。
【図５】図１の情報処理システム内のサーバのシステム構成を示すブロック図。
【図６】図１の情報処理システム内のクライアントのシステム構成を示すブロック図。
【図７】図１の情報処理システム内のサーバ及びクライアントの機能構成の例を示すブロック図。
【図８】勾配の和を送信するクライアントによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図９】勾配の和を受信するサーバによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図１０】図７のクライアントによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図１１】図７のサーバによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図１２】第２実施形態に係る情報処理システムの構成の例を示すブロック図。
【図１３】目的関数を基準とする並列分散学習処理で重み係数の更新に用いられる勾配の別の例を説明するための図。
【図１４】図１２の情報処理システムにおいて、目的関数を基準とする並列分散学習処理で重み係数の更新に用いられる勾配の例を説明するための図。
【図１５】図１２の情報処理システムによる目的関数を基準とする並列分散学習処理で学習経過が共有される例を説明するための図。
【図１６】図１２の情報処理システムによる目的関数を基準とする並列分散学習処理で学習経過が共有される別の例を説明するための図。
【図１７】図１２の情報処理システム内の第１クライアント及び第２クライアントの機能構成の例を示すブロック図。
【図１８】図１７の第１クライアントによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図１９】図１７の第２クライアントによって実行される並列分散学習処理の手順の例を示すフローチャート。
【図２０】図１２の情報処理システムにおいて、複数のクライアントによる並列分散学習の効果を説明するための図。
【図２１】図１２の情報処理システムにおいて、勾配の和だけでなく勾配の数も用いることによる並列分散学習の効果を説明するための図。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。
（第１実施形態）  
まず、図１を参照して、第１実施形態に係る情報処理システムの構成を説明する。この情報処理システム１は、ネットワーク５０等を介して相互に接続されたサーバコンピュータ（以下、サーバとも称する）１０と複数のクライアントコンピュータ（以下、クライアントとも称する）２０，３０，４０とによって構成されるサーバ−クライアント型のシステムである。ネットワーク５０は、例えば、イーサネット（登録商標）であるが、これに限るものではない。情報処理システム１内のサーバ１０及びクライアント２０，３０，４０は、例えば、大規模なデータを扱うディープラーニングにおいて目的関数を基準とする並列分散学習処理を実行する。この目的関数を基準とする並列分散学習処理とは、目的関数を学習結果のフィードバック（評価値）として用いて、複数の処理主体で学習されるものであればどのようなものであってもよく、例えば、目的関数を最適化するための並列分散学習処理である。なお、図１では、情報処理システム１に３台のクライアント２０，３０，４０が設けられる例を示したが、クライアントの数は２台であってもよいし、４台以上であってもよい。
【０００９】
図１に示すように、この並列分散学習処理では、クライアント２０，３０，４０は、各々に割り当てられた学習データ２１Ａ，３１Ａ，４１Ａを用いて目的関数のパラメータ（例えば、重み係数）を更新し、その際の学習経過を示すデータをサーバ１０に送信する。そして、サーバ１０は、その学習経過を示すデータを利用して、サーバ１０に格納されている目的関数のパラメータを更新し、更新されたパラメータをクライアント２０，３０，４０に送信する。
【００１０】
より具体的には、サーバ１０は、例えば、クライアント２０から送信された学習経過を示すデータを用いて、サーバ１０上の目的関数のパラメータを更新し、その更新されたパラメータをクライアント２０，３０，４０に送信する。また、サーバ１０は、例えば、クライアント２０から送信された学習経過を示すデータとクライアント３０から送信された学習経過を示すデータとを用いて、サーバ１０上の目的関数のパラメータを更新し、その更新されたパラメータをクライアント２０，３０，４０に送信する。
【００１１】
これにより、各クライアントの学習経過が、情報処理システム１内の別のクライアントでも共有されることになるので、情報処理システム１全体での目的関数の最適化を効率的に進めることができる。
【００１２】
ところで、ディープラーニングでは、目的関数を最適化する手法として、例えば、確率的勾配降下法（stochastic gradient descent: ＳＧＤ）が用いられる。このＳＧＤでは、勾配ベクトルと称される最適解方向へのベクトルを用いて、目的関数の重み係数（以下、重みベクトルとも称する）が更新される。ＳＧＤにおける現在の状態を示す重みベクトル、勾配ベクトル及び学習係数をそれぞれW(t)、∇W(t)、ε(t)とすると、更新後の重みベクトルW(t+1)は、以下の式（１）で表される。なお、以下では、重みべクトル、勾配ベクトルのそれぞれを、単に、重み、勾配とも称する。  
W(t+1)＝W(t)−ε(t)∇W(t)            式（１）  
更新幅を決定する学習係数ε(t)は学習の進度に応じて適応的に決定され、例えば、学習の進度に応じて減衰する。近年では、ＳＧＤの最適化アルゴリズムとして、Ａｄａｇｒａｄ、Ａｄａｄｅｌｔａ、Ａｄａｍ等に代表される学習係数自動減衰アルゴリズムが用いられるケースが増加している。これらの学習係数自動減衰アルゴリズムでは、学習係数ε(t)は、勾配ベクトル∇W(t)に依存して減衰する。
【００１３】
また、ＳＧＤによる目的関数の最適化を並列分散化した場合には、情報処理システム１内で共有される学習経過として勾配ベクトルが用いられることがある。このような並列分散学習の一例として、次の参考文献が挙げられる。  
参考文献：Jeffrey Dean, Greg S. Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Quoc V. Le, Mark Z. Mao, Marc’Aurelio Ranzato, Andrew Senior, Paul Tucker, Ke Yang, and Andrew Y. Ng, “Large Scale Distributed Deep Networks,” Advances in Neural Information Processing Systems 25, 2012.
【００１４】
一般にディープラーニングにおける勾配ベクトルは非常に大きな次元（例えば、数百万）を有するので、情報処理システム１内で勾配ベクトルを共有するための通信コストも非常に高くなる。通信コストを抑制するために、例えば、クライアント２０が目的関数の重み係数を複数回更新する間に、各々の更新で用いられた勾配をその複数回分足し合わせた勾配の和∇Wtransferを算出し、この勾配の和∇Wtransferをサーバ１０に送信することによって、複数回の更新に対応する学習経過を一度に共有することが考えられる。その場合、サーバ１０は、以下の式（２）に従って、勾配の和∇Wtransferを用いて、別のクライアント３０，４０の重み係数Wを更新する。  
【数１】
2018036779.tif 000003
サーバ１０は、この更新された重み係数Wをクライアント３０，４０に送信する。これにより、クライアント３０，４０は、クライアント２０による学習経過が反映された重み係数Wを用いて、効率的に目的関数の最適化を進めることができる。
【００１５】
なお、サーバ１０によって処理される、複数のクライアント２０，３０，４０に対応する複数の重み係数Wは同一のものであってもよい。その場合、サーバ１０は、複数のクライアント２０，３０，４０に共通の重み係数W（マスタパラメータ）を保持し、各クライアント２０，３０，４０による学習経過（勾配の和∇Wtransfer）を用いて、この共通の重み係数を更新する。サーバ１０は、更新された重み係数Wをクライアント２０，３０，４０に送信する。各クライアント２０，３０，４０は、サーバから受信した重み係数Wで、そのクライアントで用いられる重み係数Wを上書きする。これにより、クライアント２０，３０，４０は、各クライアント２０，３０，４０による学習経過が反映された重み係数Wを用いて、効率的に目的関数の最適化を進めることができる。
【００１６】
しかし、クライアント２０が複数の勾配∇Wの各々を用いて重み係数Wを更新するのに対して、サーバ１０は勾配の和∇Wtransferを用いて重み係数Wを更新するので、クライアント２０上で更新される重み係数Wとサーバ１０上で更新される重み係数Wとでは、処理工程（処理ステップ数）の差が生じることになる。
【００１７】
図２は、重み係数の更新に用いられる勾配の一例を示す。この例では、あるクライアント（例えば、第１クライアント２０）からサーバ１０に、当該クライアントで算出された複数の勾配５１１，５１２，５１３，５１４の和５２が送信される。そして、サーバ１０は、この勾配の和５２を用いて、別のクライアント（例えば、第２クライアント３０）の重み係数を更新する。
【００１８】
図２に示す例では、送信側のクライアントが四つの勾配５１１，５１２，５１３，５１４を用いて重み係数を更新するのに対して、サーバ１０は一つの勾配（勾配の和）５２を用いて、別のクライアントの重み係数を更新する。換言すると、送信側のクライアントが式（１）に基づく重み係数の更新処理を４回実行しているのに対して、サーバ１０は式（２）に基づく重み係数の更新処理を１回実行している。式（１）及び式（２）に含まれる学習係数εは、上述したように学習の進度に応じて適応的に決定される（例えば、勾配に依存して減衰する）。したがって、四つの勾配５１１，５１２，５１３，５１４を用いた重み係数の更新処理と、一つの勾配（勾配の和）５２を用いた重み係数の更新処理とでは、処理工程に差が生じることになる。これによって、送信側のクライアントによる学習経過が、サーバ１０での別のクライアントの重み係数の更新に十分に反映されない、すなわち、情報処理システム１内で学習経過が十分に共有されない可能性がある。
【００１９】
このような処理工程の差を低減するために、本実施形態では、各クライアント２０，３０，４０からサーバ１０に、複数の勾配の和だけでなく、この複数の勾配の和の算出に用いられた複数の勾配の数を特定可能な情報も送信する。この複数の勾配の数は、複数の勾配の和が算出される間に重み係数が更新された回数に対応する。なお、複数の勾配の数を特定可能な情報は、複数の勾配の数を特定できればどのような情報であってもよく、例えば数値（例：“４”）を直接示す情報であってもよく、間接的に数値が導かれる情報であってもよい。
【００２０】
図３は、本実施形態で重み係数の更新に用いられる勾配の一例を示す。この例では、あるクライアント（例えば、第１クライアント２０）からサーバ１０に、当該クライアントで算出された複数の勾配５１１，５１２，５１３，５１４の和５２と、これら複数の勾配５１１，５１２，５１３，５１４の数N（ここでは、N=4）とが送信される。サーバ１０は、この勾配の和５２を勾配の数Nで除して得られたN個の勾配５５１，５５２，５５３，５５４を用いて、別のクライアント（例えば、第２クライアント３０）の重み係数を更新する。
【００２１】
図３に示す例では、送信側のクライアントが四つの勾配５１１，５１２，５１３，５１４を用いて重み係数を更新しているのと同様に、サーバ１０も四つの勾配５５１，５５２，５５３，５５４を用いて、別のクライアントの重み係数を更新している。より具体的には、サーバ１０は、次の式（３）を用いて別のクライアントの重み係数を更新する。  
【数２】
2018036779.tif 000004
【００２２】
サーバ１０は、送信側のクライアントによる四つの勾配５１１，５１２，５１３，５１４を用いた重み係数の更新を、四つの勾配５５１，５５２，５５３，５５４を用いた重み係数の更新で擬似的に再現することによって、処理工程の差を低減している。これにより、送信側のクライアントによる学習経過が、サーバ１０での別のクライアントの重み係数の更新に十分に反映でき、したがって、情報処理システム１内で学習経過を十分に共有することができる。
【００２３】
また、勾配の数Nはスカラー量であるので、勾配の数Nを特定可能な情報は、非常に大きな次元（例えば、数百万）を有する勾配（勾配ベクトル）のデータに対して十分に小さなメタデータである。そのため、勾配の数Nをさらに送信することによって、通信コストにほとんど影響を与えることなく、送信側のクライアントとサーバ１０とによる重み係数更新の処理工程の差を低減することができる。
【００２４】
図４は、情報処理システム１内のサーバ１０とクライアント２０，３０，４０とによって、目的関数を基準とする並列分散学習処理で学習経過が共有される例を示す。
【００２５】
まず、第１クライアント２０、第２クライアント３０及び第３クライアント４０は、サーバ１０によって割り当てられた学習データを受信する（Ｓ１１）。そして、各クライアント２０，３０，４０は、受信した学習データを用いて、目的関数の重み係数WをN回（ここでは、３回）更新する（Ｓ１２）。
【００２６】
次いで、各クライアント２０，３０，４０は、それらN回の更新毎に算出されたN個の勾配の和∇Wtransferと勾配の数Nとをサーバ１０に送信する（Ｓ１３）。サーバ１０には、各クライアント２０，３０，４０から送信された勾配の和∇Wtransferと勾配の数Nとを利用して、各クライアント２０，３０，４０で用いられる目的関数の重み係数Wを更新する。そして、各クライアント２０，３０，４０は、サーバ１０から、更新された重み係数Wを受信する（Ｓ１４）。
【００２７】
同様にして、各クライアント２０，３０，４０は、学習データを用いて、目的関数の重み係数WをN回更新し（Ｓ１５）、勾配の和∇Wtransferと勾配の数Nとをサーバ１０に送信する（Ｓ１６）。そして、各クライアント２０，３０，４０は、サーバ１０から、更新された重み係数Wを受信する（Ｓ１７）。
【００２８】
このように、各クライアント２０，３０，４０は、例えば、予め規定された同期タイミングで（例えば、３回の更新毎に）、勾配の和∇Wtransferと勾配の数Nとをサーバ１０に送信し、サーバ１０から更新された重み係数Wを受信する。これにより、情報処理システム１内で、各クライアント２０，３０，４０による学習経過が共有され、情報処理システム１全体での目的関数の最適化を効率的に進めることができる。なお、この同期タイミングは、更新回数に限らず、例えば、前回、勾配の和∇Wtransferと勾配の数Nとを送信してからの経過時間に基づいて決定されてもよい。また、クライアント２０，３０，４０は、別々のタイミングで、勾配の和∇Wtransferと勾配の数Nとを送信するようにしてもよい。
【００２９】
次いで、図５は、サーバ１０のシステム構成の例を示す。サーバ１０は、ＣＰＵ１０１、システムコントローラ１０２、主メモリ１０３、ＢＩＯＳ−ＲＯＭ１０４、不揮発性メモリ１０５、通信デバイス１０６、エンベデッドコントローラ（ＥＣ）１０７、等を備える。
【００３０】
ＣＰＵ１０１は、サーバ１０内の様々なコンポーネントの動作を制御するプロセッサである。ＣＰＵ１０１は、ストレージデバイスである不揮発性メモリ１０５から主メモリ１０３にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム（ＯＳ）２０１、及び様々なアプリケーションプログラムが含まれている。アプリケーションプログラムには、並列分散学習サーバプログラム２０２が含まれている。この並列分散学習サーバプログラム２０２は、例えば、クライアント２０，３０，４０に学習データを割り当てる機能、クライアント２０，３０，４０から学習経過を受信する機能、学習経過を用いて更新された目的関数のパラメータをクライアント２０，３０，４０に送信する機能、等を有している。
【００３１】
また、ＣＰＵ１０１は、ＢＩＯＳ−ＲＯＭ１０４に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００３２】
システムコントローラ１０２は、ＣＰＵ１０１のローカルバスと各種コンポーネントとの間を接続するデバイスである。システムコントローラ１０２には、主メモリ１０３をアクセス制御するメモリコントローラも内蔵されている。
【００３３】
通信デバイス１０６は、有線又は無線による通信を実行するように構成されたデバイスである。通信デバイス１０６は、信号を送信する送信部と、信号を受信する受信部とを含む。ＥＣ１０７は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。ＥＣ１０７は、ユーザによるパワーボタンの操作に応じてサーバ１０を電源オン又は電源オフする機能を有している。
【００３４】
また、図６は、クライアント２０，３０，４０のシステム構成の例を示す。クライアント２０，３０，４０は、ＣＰＵ３０１、システムコントローラ３０２、主メモリ３０３、ＢＩＯＳ−ＲＯＭ３０４、不揮発性メモリ３０５、通信デバイス３０６、エンベデッドコントローラ（ＥＣ）３０７、等を備える。
【００３５】
ＣＰＵ３０１は、クライアント２０，３０，４０内の様々なコンポーネントの動作を制御するプロセッサである。ＣＰＵ３０１は、ストレージデバイスである不揮発性メモリ３０５から主メモリ３０３にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム（ＯＳ）４０１、及び様々なアプリケーションプログラムが含まれている。アプリケーションプログラムには、並列分散学習クライアントプログラム４０２が含まれている。この並列分散学習クライアントプログラム４０２は、例えば、目的関数のパラメータを更新する機能、学習経過をサーバ１０に送信する機能、サーバ１０によって更新された目的関数のパラメータを受信する機能、等を有している。
【００３６】
また、ＣＰＵ３０１は、ＢＩＯＳ−ＲＯＭ３０４に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００３７】
システムコントローラ３０２は、ＣＰＵ３０１のローカルバスと各種コンポーネントとの間を接続するデバイスである。システムコントローラ３０２には、主メモリ３０３をアクセス制御するメモリコントローラも内蔵されている。
【００３８】
通信デバイス３０６は、有線又は無線による通信を実行するように構成されたデバイスである。通信デバイス３０６は、信号を送信する送信部と、信号を受信する受信部とを含む。ＥＣ３０７は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。ＥＣ３０７は、ユーザによるパワーボタンの操作に応じてクライアント２０，３０，４０を電源オン又は電源オフする機能を有している。
【００３９】
図７は、サーバ１０によって実行される並列分散学習サーバプログラム２０２と、クライアント２０，３０，４０によって実行される並列分散学習クライアントプログラム４０２との機能構成の一例を示す。サーバ１０とクライアント２０，３０，４０とは、例えば、ディープラーニングによる目的関数を基準とする並列分散学習処理を実行する。ここでは、説明を分かりやすくするために、情報処理システム１において、第１クライアント２０が学習経過を示すデータをサーバ１０に送信し、サーバ１０がこのデータを用いて第２クライアント３０の重み係数を更新し、その更新された重み係数を第２クライアント３０に送信する場合を主に例示する。
【００４０】
サーバ１０上で実行される並列分散学習サーバプログラム２０２は、例えば、データ割当部１２、送信制御部１３、受信制御部１４、及び算出部１５を備える。また、サーバ１０は、情報処理システム１内で用いられる学習データ１１Ａが格納される記憶媒体１１（例えば、不揮発性メモリ１０５）を有している。
【００４１】
データ割当部１２は、学習データ１１Ａの内、各クライアント２０，３０，４０に割り当てられるデータを決定する。データ割当部１２は、例えば、学習データ１１Ａを３つに分割し、分割されたデータのそれぞれを割り当てるクライアント２０，３０，４０を決定する。
【００４２】
送信制御部１３及び受信制御部１４は、通信デバイス１０６を介して、各クライアント２０，３０，４０との間でデータを送受信する機能を有する。送信制御部１３は、データ割当部１２によって割り当てられたデータを、各クライアント２０，３０，４０に送信する。
【００４３】
受信制御部１４は、各クライアント２０，３０，４０から、各々のクライアント上での学習経過を示す複数の勾配の和とそれら複数の勾配の数を特定可能な情報とを受信する。受信制御部１４は、例えば、第１クライアント２０から、この第１クライアント２０によって目的関数の重み係数２９Ａ（第１重み係数）を更新するために算出された複数の勾配の和２９Ｂとそれら複数の勾配の数２９Ｃを特定可能な情報とを受信する。
【００４４】
算出部１５は、あるクライアントから受信した複数の勾配の和と複数の勾配の数を特定可能な情報とを用いて、別のクライアントに関連付けられた重み係数を更新する。送信制御部１３は、算出部１５によって更新された重み係数を、その重み係数が関連付けられたクライアントに送信する。より具体的には、例えば、算出部１５は、受信制御部１４を介して、第１クライアント２０から複数の勾配の和２９Ｂと複数の勾配の数２９Ｃを特定可能な情報とを受信した場合、この複数の勾配の和２９Ｂと複数の勾配の数２９Ｃを特定可能な情報とを用いて、第２クライアント３０に関連付けられた重み係数１９Ａ（第２重み係数）を更新する。算出部１５は、例えば、上述した式（３）に従って、複数の勾配の和２９Ｂを複数の勾配の数２９Ｃで除した値に、学習係数を掛けた値を用いて、第２クライアント３０に関連付けられた重み係数１９Ａを更新する。なお、この学習係数は、例えば、複数の勾配の和２９Ｂと複数の勾配の数２９Ｃを特定可能な情報とを用いて決定される。そして、送信制御部１３は、更新された重み係数１９Ａを第２クライアント３０に送信する。
【００４５】
また、第１クライアント２０上で実行される並列分散学習クライアントプログラム４０２は、例えば、受信制御部２２、算出部２３及び送信制御部２４を備える。受信制御部２２及び送信制御部２４は、通信デバイス３０６を介して、サーバ１０との間でデータを送受信する機能を有する。
【００４６】
受信制御部２２は、サーバ１０によって割り当てられた学習データ２１Ａを受信し、この受信した学習データ２１Ａを記憶媒体２１（例えば、不揮発性メモリ３０５）に格納する。
【００４７】
算出部２３は、学習データ２１Ａを用いて、目的関数の重み係数２９Ａを更新する処理を繰り返し実行する。算出部２３は、第１期間において、重み係数２９Ａが更新される毎に、その更新時に算出された勾配を積算することによって、勾配の和２９Ｂを算出すると共に、積算された勾配の数２９Ｃをカウントする。なお、この第１期間は、例えば、時間で規定されてもよいし、重み係数２９Ａが更新される回数で規定されてもよい。
【００４８】
送信制御部２４は、第１期間が経過した場合、第１クライアント２０による学習経過を示すデータをサーバ１０に送信する。送信制御部２４は、例えば、算出された勾配の和２９Ｂと、カウントされた勾配の数２９Ｃを特定可能な情報とをサーバ１０に送信する。
【００４９】
また、第２クライアント３０上で実行される並列分散学習クライアントプログラム４０２は、例えば、受信制御部３２、算出部３３及び送信制御部３４を備える。受信制御部３２及び送信制御部３４は、通信デバイス３０６を介して、サーバ１０との間でデータを送受信する機能を有する。
【００５０】
受信制御部３２は、サーバ１０によって割り当てられた学習データ３１Ａを受信し、この受信した学習データ３１Ａを記憶媒体３１（例えば、不揮発性メモリ３０５）に格納する。
【００５１】
算出部３３は、学習データ３１Ａを用いて、目的関数の重み係数３９Ａを更新する処理を繰り返し実行する。
【００５２】
また、受信制御部３２は、サーバ１０によって更新された重み係数１９Ａを受信する。この受信される重み係数１９Ａは、上述したように、第１クライアント２０から送信された勾配の和２９Ｂと勾配の数２９Ｃとを用いて更新された重み係数１９Ａである。受信制御部３２は、例えば、受信した重み係数１９Ａで、作業メモリ３９に格納された重み係数３９Ａを置き換える。これにより、第２クライアント３０は、第１クライアント２０による学習経過が反映された重み係数３９Ａを用いて、並列分散学習処理を効率的に進めることができる。
【００５３】
なお、算出部３３は、第１期間において、重み係数３９Ａが更新される毎に、その更新時に算出された勾配を積算することによって、勾配の和３９Ｂを算出すると共に、積算された勾配の数３９Ｃをカウントしてもよい。
【００５４】
また、送信制御部３４は、第１期間が経過した場合、第２クライアント３０による学習経過を示すデータをサーバ１０に送信してもよい。送信制御部３４は、例えば、算出された勾配の和３９Ｂと、カウントされた勾配の数３９Ｃを特定可能な情報とをサーバ１０に送信してもよい。
【００５５】
その場合、サーバ１０の算出部１５及び送信制御部１３は、これら勾配の和３９Ｂと勾配の数３９Ｃとを用いて、第１クライアント２０に関連付けられた重み係数を更新し、更新された重み係数を第１クライアント２０に送信することもできる。第１クライアント２０の受信制御部２２は、サーバ１０によって更新された重み係数を受信する。受信制御部２２は、例えば、受信した重み係数で、作業メモリ２９に格納された重み係数２９Ａを置き換える。これにより、第１クライアント２０は、第２クライアント３０による学習経過が反映された重み係数２９Ａを用いて、並列分散学習処理を効率的に進めることができる。
【００５６】
なお、情報処理システム１では、サーバ１０上に保持され、全てのクライアント２０，３０，４０で共通した重み係数W（マスタパラメータ）を用いることもできる。その場合、サーバ１０の算出部１５は、クライアント２０，３０，４０の少なくともいずれか１つから受信した複数の勾配の和と複数の勾配の数を特定可能な情報とを用いて、上述した方法で、サーバ１０上の重み係数W（マスタパラメータ）を更新する。そして、送信制御部１３は、更新された重み係数Wを各クライアント２０，３０，４０に送信する。例えば、第１クライアントの受信制御部２２は、サーバ１０によって更新された重み係数Wを受信し、受信した重み係数Wで作業メモリ２９に格納された重み係数２９Ａを置き換える。同様に、第２クライアント３０の受信制御部３２は、サーバ１０によって更新された重み係数Wを受信し、受信した重み係数Wで作業メモリ３９に格納された重み係数３９Ａを置き換える。これにより、第１クライアント２０及び第２クライアント３０は、クライアント２０，３０，４０による学習経過が反映された重み係数２９Ａ，３９Ａを用いて、並列分散学習処理を効率的に進めることができる。
【００５７】
情報処理システム１には、第１クライアント２０及び第２クライアント３０に限らず、３台以上のクライアントを設けることができ、各クライアントは、上述した第１クライアント２０及び第２クライアント３０と同様の構成を有する。したがって、情報処理システム１では、あるクライアントによる学習経過を別の複数のクライアントの重み係数の更新に反映することができ、また複数のクライアントによる複数の学習経過を別の一つのクライアントの重み係数の更新に反映することもできる。
【００５８】
なお、上述した構成では、複数の勾配の和だけでなく複数の勾配の数Nを特定可能な情報もクライアント２０からサーバ１０に送信される例を示したが、この勾配の数Nの代わりに、クライアント２０で算出された複数の勾配（勾配ベクトル）の大小関係を特定可能な情報がサーバ１０に送信されるようにしてもよい。この複数の勾配の大小関係を特定可能な情報は、複数の勾配の大小関係を特定できればどのような情報であってもよく、例えば、数値（例えば、複数の勾配の各々の大きさの比を表すN次元のベクトル）を直接示す情報であってもよく、間接的に数値が導かれる情報であってもよい。
【００５９】
例えば、目的関数が凸関数である場合、ＳＧＤにより最適化を進めることにより得られる勾配ベクトルの大きさは徐々に小さくなる。そのため、クライアント２０は、勾配の数Nに代わるメタデータとして、N個の勾配（勾配ベクトル）の各々の大きさの比を表すN次元のベクトルを送信することもできる。また、N次元のベクトルも、勾配ベクトルが有する非常に大きな次元（例えば、数百万）と比較すると十分に小さいと云える。
【００６０】
サーバ１０の受信制御部１４は、例えば、第１クライアント２０から、複数の勾配の和２９Ｂと、これら複数の勾配の大小関係を特定可能な情報とを受信する。そして、算出部１５は、複数の勾配の和２９Ｂと、複数の勾配の大小関係を特定可能な情報とを用いて、例えば、勾配の和２９Ｂが、複数の勾配の大小関係（例えば、N次元ベクトルによって表される大きさの比）に基づいて分割された複数の勾配を算出する。算出部１５は、算出された複数の勾配を用いて、例えば、第２クライアント３０に関連付けられた重み係数１９Ａを更新する。そして、送信制御部１３は、更新された重み係数１９Ａを第２クライアント３０に送信する。これにより、送信側の第１クライアント２０による学習経過を第２クライアント３０の重み係数の更新に、より反映させることができる。
【００６１】
次いで、図８から図１１のフローチャートを参照して、並列分散学習処理の手順の例を示す。図８及び図９のフローチャートが、勾配の和だけが送受信される場合の処理を示すのに対して、図１０及び図１１のフローチャートは、勾配の和と勾配の数とが送受信される本実施形態の処理を示している。以下では、目的関数の最適化に用いられる学習データが、サーバからクライアントに対して既に割り当てられている場合を例示する。
【００６２】
まず、図８のフローチャートは、勾配の和を送信するクライアントによって実行される処理の手順を示す。  
クライアントのＣＰＵは、勾配の和を送信するための∇Wtransferを初期化する（ブロックＢ１１）、すなわち、∇Wtransferに０を設定する。ＣＰＵは、送信される勾配の数Nに応じて、N回、ブロックＢ１３からブロックＢ１４までの手順を実行する（ブロックＢ１２）。より具体的には、ＣＰＵは、目的関数の重みWを更新する（ブロックＢ１３）。そして、ＣＰＵは、重みWを更新する際に算出された勾配∇Wを、勾配の和∇Wtransferに加算する（ブロックＢ１４）。
【００６３】
勾配∇Wが勾配の和∇WtransferにN回加算された後、すなわち、重みWの更新がN回行われた後、ＣＰＵは勾配の和∇Wtransferをサーバに送信する（ブロックＢ１５）。また、ＣＰＵは、他のクライアントによる学習経過を示す勾配の和∇Wtransferを用いて更新された重みWをサーバ１０から受信する（ブロックＢ１６）。そして、ＣＰＵ３０１は、受信した重みWで、第１クライアント２０で用いられる目的関数の重みWを上書きする（ブロックＢ１７）。
【００６４】
図９のフローチャートは、勾配の和を受信するサーバによって実行される処理の手順を示す。  
まず、サーバのＣＰＵは、クライアントから勾配の和∇Wtransferを受信したか否かを判定する（ブロックＢ２１）。クライアントから勾配の和∇Wtransferを受信していない場合（ブロックＢ２１のＮＯ）、ブロックＢ２２の手順に戻る。
【００６５】
クライアントから勾配の和∇Wtransferを受信した場合（ブロックＢ２１のＹＥＳ）、ＣＰＵは、この勾配の和∇Wtransferを送信したクライアント以外のクライアントの内、重みWを更新する対象のクライアントを選択する（ブロックＢ２２）。そして、ＣＰＵは、対象のクライアントに関連付けられた重みW（すなわち、対象のクライアント上で更新された重みW）を、受信した勾配の和∇Wtransferを用いて更新し（ブロックＢ２３）、その更新された重みWをその対象のクライアントに送信する（ブロックＢ２４）。
【００６６】
次いで、ＣＰＵは、重みWを更新すべき別のクライアントがあるか否かを判定する（ブロックＢ２５）。別のクライアントがある場合（ブロックＢ２５のＹＥＳ）、ブロックＢ２２に戻り、その別のクライアントに関連付けられた重みWを更新するための手順が実行される。別のクライアントがない場合（ブロックＢ２５のＮＯ）、ブロックＢ２１の手順に戻る。
【００６７】
次いで、図１０のフローチャートを参照して、勾配の和と勾配の数とを送信する第１クライアント２０によって実行される処理の手順を説明する。  
まず、第１クライアント２０のＣＰＵ３０１は、勾配の和を送信するための∇Wtransferを初期化する（ブロックＢ３１）、すなわち、∇Wtransferに０を設定する。ＣＰＵ３０１は、送信される勾配の数Nに応じて、N回、ブロックＢ３３からブロックＢ３４までの手順を実行する（ブロックＢ３２）。より具体的には、ＣＰＵ３０１は、学習データ２１Ａを用いて目的関数の重みWを更新する（ブロックＢ３３）。そして、ＣＰＵ３０１は、重みWを更新する際に算出された勾配∇Wを、勾配の和∇Wtransferに加算する（ブロックＢ３４）。
【００６８】
勾配∇Wが勾配の和∇WtransferにN回加算された後、すなわち、重みWの更新がN回行われた後、ＣＰＵ３０１は勾配の和∇Wtransferと勾配の数Nとをサーバ１０に送信する（ブロックＢ３５）。また、ＣＰＵ３０１は、クライアント２０，３０，４０による学習経過を示す勾配の和∇Wtransferと勾配の数Nとを用いて更新された重みWをサーバ１０から受信する（ブロックＢ３６）。そして、ＣＰＵ３０１は、受信した重みWで、第１クライアント２０で用いられる目的関数の重みWを上書きする（ブロックＢ３７）。
【００６９】
また、図１１のフローチャートを参照して、勾配の和と勾配の数とを受信するサーバ１０によって実行される処理の手順を説明する。  
まず、サーバ１０のＣＰＵ１０１は、クライアント２０，３０，４０の少なくともいずれかから勾配の和∇Wtransferと勾配の数Nとを受信したか否かを判定する（ブロックＢ４０１）。いずれのクライアント２０，３０，４０からも勾配の和∇Wtransferと勾配の数Nとを受信していない場合（ブロックＢ４０１のＮＯ）、ブロックＢ４０１の手順に戻る。
【００７０】
クライアント２０，３０，４０の少なくともいずれかから勾配の和∇Wtransferと勾配の数Nとを受信した場合（ブロックＢ４０１のＹＥＳ）、ＣＰＵ１０１は、これら勾配の和∇Wtransferと勾配の数Nの送信元のクライアント以外のクライアントから、重みWを更新する対象のクライアントを選択する（ブロックＢ４０２）。ＣＰＵ１０１は、例えば、第１クライアント２０から勾配の和∇Wtransferと勾配の数Nとを受信した場合、第２クライアント３０と第３クライアント４０のいずれか一方を、重みWを更新する対象のクライアントとして選択する。
【００７１】
次いで、ＣＰＵ１０１は、更新のための勾配∇Wupdateを初期化する（ブロックＢ４０３）、すなわち、∇Wupdateに０を設定する。また、ＣＰＵ１０１は、ブロックＢ４０５からブロックＢ４０８までの繰り返し処理に用いられる変数iに１を設定する（ブロックＢ４０４）。ＣＰＵ１０１は、変数iが勾配の数N以下である間、ブロックＢ４０６からブロックＢ４０８までの手順を繰り返す（ブロックＢ４０５）。より具体的には、ＣＰＵ１０１は学習係数εiを算出する（ブロックＢ４０６）。ＣＰＵ１０１は、例えば、学習の進度に対応する変数iと、勾配の和∇Wtransferを勾配の数Nで除した値である勾配の平均値∇Wtransfer/Nとを用いて、学習係数εiを算出する。ＣＰＵ１０１は、更新のための勾配∇Wupdateに、学習係数εiと∇Wtransfer/Nとを乗じた値を加算する（ブロックＢ４０７）。ＣＰＵ１０１は、変数iに１を加算する（ブロックＢ４０９）。そして、変数iがN以下であるならば、ブロックＢ４０６の手順に戻る。
【００７２】
一方、変数iがNより大きいならば、ＣＰＵ１０１は、対象のクライアントに関連付けられた重みWを、更新のための勾配∇Wupdateを用いて更新する（ブロックＢ４０９）。ＣＰＵ１０１は、通信デバイス１０６を介して、その更新された重みWを対象のクライアントに送信する（ブロックＢ４１０）。
【００７３】
次いで、ＣＰＵ１０１は、重みWを更新すべき別のクライアントがあるか否かを判定する（ブロックＢ４１１）。別のクライアントがある場合（ブロックＢ４１１のＹＥＳ）、ブロックＢ４０２に戻り、その別のクライアントに関連付けられた重みWを更新するための手順が実行される。別のクライアントがない場合（ブロックＢ４１１のＮＯ）、ブロックＢ４０１の手順に戻る。
【００７４】
なお、上述したように、情報処理システム１では、サーバ１０上に保持され、全てのクライアント２０，３０，４０で共通した重み係数W（マスタパラメータ）を用いることもできる。その場合、ＣＰＵ１０１は、クライアント２０，３０，４０の少なくともいずれか１つから受信した複数の勾配の和と複数の勾配の数を特定可能な情報とを用いて、ブロックＢ４０２の手順で重みWを更新する対象のクライアントを選択することなく、ブロックＢ４０３からブロックＢ４０９の手順において、サーバ１０上の重み係数W（マスタパラメータ）を更新する。そして、ＣＰＵ１０１は、ブロックＢ４１０において、更新された重み係数Wを各クライアント２０，３０，４０に送信する。
【００７５】
また、ＣＰＵ１０１は、複数のクライアントから受信した複数の勾配の和∇Wtransferと複数の勾配の数Nとを用いて、それら複数のクライアント以外のクライアントに関連付けられた重みWを更新してもよい。例えば、ＣＰＵ１０１は、第１クライアント２０から受信した勾配の和∇Wtransfer及び勾配の数Nと、第２クライアント３０から受信した勾配の和∇Wtransfer及び勾配の数Nとを用いて、第３クライアント４０に関連付けられた重みWを更新するようにしてもよい。その場合、ＣＰＵ１０１は、第１クライアント２０から受信した勾配の和∇Wtransferと、第２クライアント３０から受信した勾配の和∇Wtransferとの総和を、勾配の和∇Wtransferとし、第１クライアント２０から受信した勾配の数Nと第２クライアント３０から受信した勾配の数Nとの和を、勾配の数Nとして、ブロックＢ４０３以降の手順を実行する。
【００７６】
以上説明したように、本実施形態によれば、通信コストを低減しながら並列分散学習処理を効率的に実行することができる。サーバ１０の受信制御部１４は、サーバ１０及びクライアント２０，３０，４０によって、ディープラーニングによる目的関数を基準とする並列分散学習処理が実行される場合に、第１クライアント２０から、この第１クライアント２０によって目的関数の重み係数２９Ａ（第１重み係数）を更新するために算出された複数の勾配の和２９Ｂと、複数の勾配の数２９Ｃを特定可能な情報とを受信する。サーバ１０の算出部１５は、複数の勾配の和２９Ｂと、複数の勾配の数２９Ｃを特定可能な情報とを用いて、目的関数の重み係数１９Ａ（第２重み係数）を更新する。
【００７７】
これにより、第１クライアント２０から受信した複数の勾配の和２９Ｂだけでなく、通信コストが小さい複数の勾配の数２９Ｃも用いて、目的関数の重み係数１９Ａが更新されるので、第１クライアント２０による学習経過を十分に反映して重み係数１９Ａを更新することができる。したがって、通信コストを低減しながら並列分散学習処理を効率的に実行することができる。
【００７８】
（第２実施形態）  
図１２を参照して、第２実施形態に係る情報処理システムの構成を説明する。この情報処理システム５は、ネットワーク５０等を介して相互に接続された複数のクライアントコンピュータ（以下、クライアントとも称する）２０，３０，４０によって構成される。情報処理システム５内のクライアント２０，３０，４０は、例えば、大規模なデータを扱うディープラーニングにおいて目的関数を基準とする並列分散学習処理を実行する。この目的関数を基準とする並列分散学習処理とは、目的関数を学習結果のフィードバック（評価値）として用いて、複数の処理主体で学習されるものであればどのようなものであってもよく、例えば、目的関数を最適化するための並列分散学習処理である。クライアント２０，３０，４０は、第１実施形態において図６を参照して上述したシステム構成を有する。図１２では、情報処理システム５に３台のクライアント２０，３０，４０が設けられる例を示したが、クライアントの数は２台であってもよいし、４台以上であってもよい。
【００７９】
図１２に示すように、この並列分散学習処理では、クライアント２０，３０，４０は、各々に割り当てられた学習データ２１Ａ，３１Ａ，４１Ａを用いて目的関数のパラメータ（例えば、重み係数）を更新し、その際の学習経過を示すデータを相互に送受信し得る。各クライアント２０，３０，４０は、受信した学習経過を示すデータを利用して、各クライアント２０，３０，４０の目的関数のパラメータをさらに更新する。
【００８０】
より具体的には、例えば、クライアント２０は、クライアント３０から送信された学習経過を示すデータを用いて、クライアント２０の目的関数のパラメータをさらに更新する。また、例えば、クライアント３０は、クライアント２０から送信された学習経過を示すデータと、クライアント４０から送信された学習経過を示すデータとを用いて、クライアント３０の目的関数のパラメータをさらに更新する。
【００８１】
これにより、各クライアントの学習経過が、情報処理システム５内の別のクライアントでも共有されることになるので、情報処理システム５全体での目的関数の最適化を効率的に進めることができる。
【００８２】
第１実施形態でも述べたように、ディープラーニングでは、目的関数を最適化する手法として、例えば、確率的勾配降下法（ＳＧＤ）が用いられる。このＳＧＤでは、勾配ベクトルと称される最適解方向へのベクトルを用いて、目的関数の重み係数（重みベクトル）が更新される。ＳＧＤにおける現在の状態を示す重みベクトル、勾配ベクトル及び学習係数をそれぞれW(t)、∇W(t)、ε(t)とすると、更新後の重みベクトルW(t+1)は、以下の式（４）で表される。  
W(t+1)＝W(t)−ε(t)∇W(t)            式（４）  
更新幅を決定する学習係数ε(t)は学習の進度に応じて適応的に決定され、例えば、学習の進度に応じて減衰する。近年では、ＳＧＤの最適化アルゴリズムとして、Ａｄａｇｒａｄ、Ａｄａｄｅｌｔａ、Ａｄａｍ等に代表される学習係数自動減衰アルゴリズムが用いられるケースが増加している。これらの学習係数自動減衰アルゴリズムでは、学習係数ε(t)は、勾配∇W(t)に依存して減衰する。
【００８３】
また、ＳＧＤによる目的関数の最適化を並列分散化した場合には、情報処理システム５内で共有される学習経過として勾配ベクトルが用いられることがある。
【００８４】
しかし、一般にディープラーニングにおける勾配ベクトルは非常に大きな次元（例えば、数百万）を有するので、情報処理システム５内で勾配ベクトルを共有するための通信コストも非常に高くなる。通信コストを減少させるために、例えば、第１クライアント２０が目的関数の重み係数を複数回更新する間に、各々の更新で用いられた勾配を複数回分足し合わせた勾配の和∇Wtransferを算出し、この勾配の和∇Wtransferを第２クライアント３０に送信することが考えられる。その場合、第２クライアント３０は、以下の式（５）に従って、受信した勾配の和∇Wtransferと、第２クライアント３０上で算出された勾配∇Wlocalとを用いて、重み係数Wを更新する。  
【数３】
2018036779.tif 000005
【００８５】
これにより、第２クライアント３０は、第１クライアント２０による学習経過が反映された重み係数Wを用いて、効率的に目的関数の最適化を進めることができる。
【００８６】
しかし、第１クライアント２０が複数の勾配∇Wの各々を用いて重み係数Wを更新するのに対して、第２クライアント３０は、受信した勾配の和∇Wtransferを用いて重み係数Wを更新するので、第１クライアント２０上で更新される重み係数Wと第２クライアント３０上で更新される重み係数Wとでは、処理工程（処理ステップ数）の差が生じることになる。
【００８７】
図１３は、重み係数の更新に用いられる勾配の一例を示す。この例では、第１クライアント２０から第２クライアント３０に、第１クライアント２０で算出された複数の勾配５１１，５１２，５１３，５１４の和５２が送信される。そして、第２クライアント３０は、この勾配の和５２と第２クライアント３０で算出された勾配５３との和（すなわち、勾配の和５２と勾配５３との合成ベクトル）５４を用いて、重み係数を更新する。
【００８８】
図１３に示す例では、第１クライアント２０が四つの勾配５１１，５１２，５１３，５１４を用いて重み係数を更新しているのに対して、第２クライアント３０は一つの勾配（勾配の和）５４を用いて重み係数を更新している。換言すると、第１クライアント２０が式（４）に基づく重み係数の更新処理を４回実行しているのに対して、サーバ１０は式（５）に基づく重み係数の更新処理を１回実行している。式（４）及び式（５）に含まれる学習係数εは、学習の進度に応じて適応的に決定される（例えば、勾配に依存して減衰する）。したがって、四つの勾配５１１，５１２，５１３，５１４を用いた重み係数の更新処理と、一つの勾配（勾配の和）５４を用いた重み係数の更新処理とでは、処理工程の差が生じることになる。これによって、送信側の第１クライアント２０による学習経過が、第２クライアント３０での重み係数の更新に十分に反映されない、すなわち、情報処理システム５内で学習経過が十分に共有されない可能性がある。
【００８９】
このような処理工程の差を低減するために、本実施形態では、各クライアント２０，３０，４０間で、複数の勾配の和だけでなく、この複数の勾配の和の算出に用いられた複数の勾配の数を特定可能な情報も送信するこの複数の勾配の数を特定可能な情報は、複数の勾配の数を特定できればどのような情報であってもよく、例えば数値（例：“４”）を直接示す情報であってもよく、間接的に数値が導かれる情報であってもよい。
【００９０】
図１４は、本実施形態で重み係数の更新に用いられる勾配の一例を示す。この例では、第１クライアント２０から第２クライアント３０に、第１クライアント２０で算出された複数の勾配５１１，５１２，５１３，５１４の和５２と、これら複数の勾配５１１，５１２，５１３，５１４の数N（ここでは、N=4）とが送信される。第２クライアント３０は、この第２クライアント３０自体で算出された勾配５３だけでなく、受信した勾配の和５２を勾配の数Nで除して得られたN個の勾配５５１，５５２，５５３，５５４も用いて、第２クライアント３０の重み係数を更新する。
【００９１】
図１４に示す例では、第１クライアント２０が四つの勾配５１１，５１２，５１３，５１４を用いて重み係数を更新しているのに対して、第２クライアント３０は、四つの勾配５５１，５５２，５５３，５５４と、この第２クライアント３０自体で算出された勾配５３とを用いて重み係数を更新している。より具体的には、第２クライアント３０は、次の式（６）を用いて第２クライアント３０の重み係数を更新する。  
【数４】
2018036779.tif 000006
【００９２】
第２クライアント３０は、送信側の第１クライアント２０による四つの勾配５１１，５１２，５１３，５１４を用いた重み係数の更新を、四つの勾配５５１，５５２，５５３，５５４を用いた重み係数の更新で擬似的に再現することによって、処理工程の差を低減している。これにより、送信側の第１クライアント２０による学習経過が、第２クライアント３０での重み係数の更新に十分に反映でき、したがって、情報処理システム５内で学習経過を十分に共有することができる。
【００９３】
また、勾配の数Nはスカラー量であるので、勾配の数Nを特定可能な情報は、非常に大きな次元（例えば、数百万）を有する勾配（勾配ベクトル）のデータに対して十分に小さなメタデータである。そのため、勾配の数Nをさらに送信することによって、通信コストにほとんど影響を与えることなく、クライアント２０，３０，４０間での重み係数更新の処理工程の差を低減することができる。
【００９４】
図１５は、情報処理システム５内のクライアント２０，３０，４０によって、目的関数を基準とする並列分散学習処理で学習経過が共有される例を示す。以下では、各クライアント２０，３０，４０に学習データ２１Ａ，３１Ａ，４１Ａが既に割り当てられている場合を想定する。各クライアント２０，３０，４０は、割り当てられた学習データを用いて、目的関数の重み係数Wを繰り返し更新する。
【００９５】
図１５に示す例では、第１クライアント２０は、割り当てられた学習データ２１Ａを用いて、重み係数Wを４回更新し、その４回の更新毎に算出された４個の勾配の和∇Wtransferを算出する（Ｓ２１）。そして、第１クライアント２０は、算出された勾配の和∇Wtransferと勾配の数とを示すデータ(∇Wtransfer, 4)を第２クライアント３０に送信する（Ｓ２２）。
【００９６】
次いで、第２クライアント３０は、このデータ(∇Wtransfer, 4)を受信し、勾配の和∇Wtransfer及び勾配の数と、第２クライアント３０上で算出された勾配∇Wlocalとを用いて、第２クライアント３０の重み係数Wを更新する（Ｓ２３）。
【００９７】
同様にして、各クライアント２０，３０，４０は、学習データを用いて、目的関数の重み係数WをN回更新し、勾配の和∇Wtransferと勾配の数Nとを示すデータを別のクライアント２０，３０，４０に送信することができる。そして、各クライアント２０，３０，４０は、別のクライアント２０，３０，４０から受信した勾配の和∇Wtransfer及び勾配の数Nと、そのクライアント自体で算出した勾配∇Wlocalとを用いて、重み係数Wを更新することができる。
【００９８】
このように、各クライアント２０，３０，４０は、例えば、予め規定されたタイミングで（例えば、４回の更新毎に）、勾配の和∇Wtransferと勾配の数Nとを、予め規定された別のクライアント２０，３０，４０に送信し得る。これにより、情報処理システム５内で、各クライアント２０，３０，４０による学習経過が共有され、情報処理システム５全体での目的関数の最適化を効率的に進めることができる。なお、この送信タイミングは、更新回数に限らず、例えば、前回、勾配の和∇Wtransferと勾配の数Nとが送信されてからの経過時間に基づいて決定されてもよい。
【００９９】
また、図１６は、情報処理システム５内のクライアント２０，３０，４０によって、目的関数を基準とする並列分散学習処理で学習経過が共有される別の例を示す。各クライアント２０，３０，４０は、割り当てられた学習データ２１Ａ，３１Ａ，４１Ａを用いて、目的関数の重み係数Wを繰り返し更新する。
【０１００】
図１６に示す例では、第３クライアント４０は、割り当てられた学習データ４１Ａを用いて、重み係数Wを４回更新し、その４回の更新毎に算出された４個の勾配の和∇Wt1を算出する（Ｓ３１）。そして、第３クライアント４０は、算出された勾配の和∇Wt1と勾配の数とを示すデータ(∇Wt1, 4)を第１クライアント３０に送信する（Ｓ３２）。第１クライアント２０は、第３クライアント４０によって送信されたデータ(∇Wt1, 4)を受信する。
【０１０１】
また、第１クライアント２０は、割り当てられた学習データ２１Ａを用いて、重み係数Wを４回更新し、その４回の更新毎に算出された４個の勾配の和を算出している（Ｓ３３）。第１クライアント２０は、この算出した勾配の和と第３クライアント４０から受信した勾配の和∇Wt1との総和∇Wt2を算出し、さらに、受信した勾配の数（＝４）と、第１クライアント２０上で算出した勾配の数（＝４）との和（＝８）を算出し、算出された勾配の総和と勾配の数の和とを示すデータ(∇Wt2, 8)を第２クライアント３０に送信する（Ｓ３４）。第２クライアント３０は、第１クライアント２０によって送信されたデータ(∇Wt2, 8)を受信する。なお、第１クライアント２０は、第３クライアント４０から受信したデータ(∇Wt1, 4)と、第１クライアント２０上で、例えば直前に算出された勾配とを用いて、上述した式（６）に従って、第１クライアント２０の重み係数Wを更新するようにしてもよい。
【０１０２】
また、第２クライアント３０は、割り当てられた学習データ３１Ａを用いて、重み係数Wを６回更新し、その６回の更新毎に算出された６個の勾配の和を算出している（Ｓ３５）。第２クライアント３０は、この算出した勾配の和と第１クライアント２０から受信した勾配の和∇Wt2との総和∇Wt3を算出し、さらに、受信した勾配の数（＝８）と、第２クライアント３０上で算出した勾配の数（＝６）との和（＝１４）を算出し、算出された勾配の総和と勾配の数の和とを示すデータ(∇Wt3, 14)を第３クライアント４０に送信する（Ｓ３６）。第３クライアント４０は、第２クライアント３０によって送信されたデータ(∇Wt3, 14)を受信する。なお、第２クライアント３０は、第１クライアント２０から受信したデータ(∇Wt2, 8)と、第２クライアント３０上で、例えば直前に算出された勾配とを用いて、上述した式（６）に従って、第２クライアント３０の重み係数Wを更新するようにしてもよい。
【０１０３】
次いで、第３クライアント４０は、第２クライアント３０から受信したデータ(∇Wt3, 14)と、第３クライアント４０上で、例えば直前に算出された勾配∇Wlocalとを用いて、第３クライアント４０の重み係数Wを更新する（Ｓ３７）。より具体的には、第３クライアント４０は、受信したデータ(∇Wt3, 14)と、Ｓ３１においてこの第３クライアント４０上で算出されたデータ(∇Wt1, 4)とを用いて、第３クライアント４０で共有すべき勾配の和と勾配の数とを算出する。すなわち、第３クライアント４０は、受信した勾配の総和∇Wt3から、第３クライアント４０自体で算出された勾配の和∇Wt1を引いた値（∇Wt3−∇Wt1）を第３クライアント４０で共有すべき勾配の和として算出する。また、第３クライアント４０は、受信した勾配の数（＝１４）から、第３クライアント４０自体で算出された勾配の数（＝４）を引いた値（＝１０）を第３クライアント４０で共有すべき勾配の数として算出する。第３クライアント４０は、算出された勾配の和（∇Wt3−∇Wt1）と勾配の数（＝１０）と、第３クライアント４０上で直前に算出された勾配∇Wlocalとを用いて、上述した式（６）に従って第３クライアント４０の重み係数Wを更新する。
【０１０４】
このように、各クライアント２０，３０，４０は、別のクライアントから受信した勾配の和と勾配の数とに、そのクライアント自体で算出した勾配の和と勾配の数とをそれぞれ加算し、加算結果である勾配の総和と勾配の数の和とをさらに別のクライアントに送信することができる。各クライアント２０，３０，４０は、受信した勾配の総和と勾配の数の和と、そのクライアント自体で算出した勾配∇Wlocalとを用いて、重み係数Wを更新することができる。なお、各クライアント２０，３０，４０は、受信した勾配の総和と勾配の数の和とに、そのクライアント自体で算出した勾配の和と勾配の数とがそれぞれ含まれている場合には、それらを引いた値を用いて、重み係数Wを更新することができる。
【０１０５】
図１７は、第１クライアント２０と第２クライアント３０とによってそれぞれ実行される並列分散学習クライアントプログラム４０２の機能構成の一例を示す。第１クライアント２０と第２クライアント３０とは、例えば、ディープラーニングによる目的関数を基準とする並列分散学習処理を実行する。ここでは、説明を分かりやすくするために、情報処理システム５において、第１クライアント２０が学習経過を示すデータを第２クライアント３０に送信し、第２クライアント３０がこの学習経過を用いて重み係数を更新する場合を主に例示する。
【０１０６】
第１クライアント２０上で実行される並列分散学習クライアントプログラム４０２は、例えば、受信制御部２２、算出部２３及び送信制御部２４を備える。第１クライアント２０に設けられた記憶媒体２１（例えば、不揮発性メモリ３０５）には、第１クライアント２０に割り当てられた学習データ２１Ａが格納されている。
【０１０７】
算出部２３は、学習データ２１Ａを用いて、目的関数の重み係数２９Ａ（第１重み係数）を更新する処理を繰り返し実行する。算出部２３は、第１期間において、重み係数２９Ａが更新される毎に、その更新時に算出された勾配を積算することによって、複数の勾配の和２９Ｂを算出すると共に、積算された複数の勾配の数２９Ｃをカウントする。なお、第１期間は、例えば、時間で規定されてもよいし、重み係数２９Ａが更新される回数で規定されてもよい。
【０１０８】
受信制御部２２及び送信制御部２４は、通信デバイス３０６を介して、第２クライアント３０との間でデータを送受信する機能を有する。
【０１０９】
送信制御部２４は、第１期間が経過した場合、第１クライアント２０による学習経過を示すデータを第２クライアント３０に送信する。送信制御部２４は、例えば、算出された複数の勾配の和２９Ｂと、カウントされた複数の勾配の数２９Ｃを特定可能な情報とを第２クライアント３０に送信する。
【０１１０】
また、第２クライアント３０上で実行される並列分散学習クライアントプログラム４０２は、例えば、受信制御部３２、算出部３３及び送信制御部３４を備える。第２クライアント３０に設けられた記憶媒体３１（例えば、不揮発性メモリ３０５）には、第２クライアント３０に割り当てられた学習データ３１Ａが格納されている。
【０１１１】
算出部３３は、学習データ３１Ａを用いて、目的関数の重み係数３９Ａを更新する処理を繰り返し実行する。
【０１１２】
受信制御部３２及び送信制御部３４は、通信デバイス３０６を介して、第１クライアント２０との間でデータを送受信する機能を有する。
【０１１３】
受信制御部３２は、第１クライアント２０から、学習経過を示す複数の勾配の和２９Ｂと、それら複数の勾配の数２９Ｃを特定可能な情報とを受信する。
【０１１４】
算出部３３は、第１クライアント２０から受信した複数の勾配の和２９Ｂと複数の勾配の数２９Ｃを特定可能な情報とを用いて、第２クライアント３０の重み係数３９Ａを更新する。算出部３３は、例えば、上述した式（６）に従って、複数の勾配の和２９Ｂを複数の勾配の数２９Ｃで除した値に、学習係数を掛けた値を用いて、第２クライアント３０の重み係数３９Ａを更新する。なお、この学習係数は、例えば、複数の勾配の和２９Ｂと、複数の勾配の数２９Ｃを特定可能な情報とを用いて決定される。これにより、第２クライアント３０は、第１クライアント２０による学習経過が反映された重み係数３９Ａを用いて、並列分散学習処理を効率的に進めることができる。
【０１１５】
なお、算出部３３は、第１期間において、重み係数３９Ａが更新される毎に、その更新時に算出された勾配を積算することによって、勾配の和３９Ｂを算出すると共に、積算された勾配の数３９Ｃをカウントしてもよい。
【０１１６】
また、送信制御部３４は、第１期間が経過した場合、第２クライアント３０による学習経過を示すデータを第１クライアント２０に送信してもよい。送信制御部３４は、例えば、算出された勾配の和３９Ｂと、カウントされた勾配の数３９Ｃを特定可能な情報とを第１クライアント２０に送信してもよい。
【０１１７】
その場合、第１クライアント２０の算出部２３は、これら勾配の和３９Ｂと勾配の数３９Ｃとを用いて、第１クライアント２０の重み係数２９Ａを更新することができる。これにより、第１クライアント２０は、第２クライアント３０による学習経過が反映された重み係数２９Ａを用いて、並列分散学習処理を効率的に進めることができる。
【０１１８】
なお、上述した構成では、勾配の和だけでなく勾配の数Nも含む学習経過が第１クライアント２０から第２クライアント３０に送信される例を示したが、この勾配の数Nの代わりに、第１クライアント２０で算出されたN個の勾配（勾配ベクトル）の大きさの比を表すN次元のベクトルが第２クライアント３０に送信されるようにしてもよい。
【０１１９】
第２クライアント３０の受信制御部３２は、例えば、第１クライアント２０から、複数の勾配の和２９Ｂと、これら複数の勾配の各々の大きさの比を表すベクトルとを受信する。そして、算出部３３は、複数の勾配の和２９Ｂと、複数の勾配の各々の大きさの比を表すベクトルとを用いて、例えば、勾配の和２９Ｂが、ベクトルによって表される大きさの比に基づいて分割された複数の勾配を算出する。算出部３３は、算出された複数の勾配を用いて重み係数３９Ａを更新する。これにより、送信側の第１クライアント２０による学習経過を第２クライアント３０の重み係数３９Ａの更新に、より反映させることができる。
【０１２０】
また、情報処理システム５には、第１クライアント２０及び第２クライアント３０に限らず、３台以上のクライアントを設けることができ、各クライアントは、上述した第１クライアント２０及び第２クライアント３０と同様の構成を有する。したがって、情報処理システム５では、あるクライアントによる学習経過を別の複数のクライアントの重み係数の更新に反映することができる。
【０１２１】
さらに、情報処理システム５では、複数のクライアントによる複数の学習経過を別の一つのクライアントの重み係数の更新に反映することもできる。
【０１２２】
例えば、第１クライアント２０が、第３クライアント４０から、この第３クライアント４０によって目的関数の重み係数（第３重み係数）を更新するために算出された複数の第１の勾配の和と、複数の第１の勾配の数を特定可能な情報とを受信した場合を想定する。この場合、第１クライアント２０の送信制御部２４は、複数の第１の勾配の和と、算出部２３によって重み係数２９Ａ（第１重み係数）を更新するために算出された複数の第２の勾配の和２９Ｂとの総和と、複数の第１の勾配の数と複数の第２の勾配の数２９Ｃとの和を特定可能な情報とを、第２クライアント３０に送信する。
【０１２３】
第２クライアント３０の受信制御部３２は、複数の第１の勾配の和と複数の第２の勾配の和２９Ｂとの総和と、複数の第１の勾配の数と複数の第２の勾配の数２９Ｃとの和を特定可能な情報とを受信する。そして、算出部３３は、これら総和と、前記複数の第１の勾配の数と前記複数の第２の勾配の数との和を特定可能な情報とを用いて、重み係数３９Ａ（第２重み係数）を更新する。
【０１２４】
このように、第３クライアント４０と第１クライアント２０とを経由して得られた複数の学習経過を、別の第２クライアント３０の重み係数３９Ａの更新に反映することもできる。
【０１２５】
図１８のフローチャートを参照して、勾配の和と勾配の数とを送信する第１クライアント２０によって実行される処理の手順を説明する。以下では、目的関数の最適化に用いられる学習データが、クライアント２０，３０，４０に対して既に割り当てられている場合を想定する。
【０１２６】
まず、第１クライアント２０のＣＰＵ３０１は、勾配の和を送信するための∇Wtransferを初期化する（ブロックＢ３１）、すなわち、∇Wtransferに０を設定する。ＣＰＵ３０１は、送信される勾配の数Nに応じて、N回、ブロックＢ５３及びブロックＢ５４の手順を実行する（ブロックＢ５２）。より具体的には、ＣＰＵ３０１は、学習データ２１Ａを用いて目的関数の重みWを更新する（ブロックＢ５３）。そして、ＣＰＵ３０１は、重みWを更新する際に算出された勾配∇Wを、勾配の和∇Wtransferに加算する（ブロックＢ５４）。
【０１２７】
勾配∇Wが勾配の和∇WtransferにN回加算された後、すなわち、重みWの更新がN回行われた後、ＣＰＵ３０１は勾配の和∇Wtransferと勾配の数Nとを別のクライアント（例えば、第２クライアント３０）に送信する（ブロックＢ５５）。
【０１２８】
次いで、図１９のフローチャートを参照して、勾配の和と勾配の数とを受信する第２クライアント３０によって実行される処理の手順を説明する。
【０１２９】
まず、第２クライアント３０のＣＰＵ３０１は、学習データ３１Ａを用いて重みWを更新する（ブロックＢ６１）。そして、ＣＰＵ３０１は、第１クライアント２０から勾配の和∇Wtransferと勾配の数Nとを受信したか否かを判定する（ブロックＢ６２）。第１クライアント２０から勾配の和∇Wtransferと勾配の数Nとを受信していない場合（ブロックＢ６２のＮＯ）、ブロックＢ６１の手順に戻る。
【０１３０】
第１クライアント２０から勾配の和∇Wtransferと勾配の数Nとを受信した場合（ブロックＢ６２のＹＥＳ）、ＣＰＵ３０１は、更新のための勾配∇Wupdateを初期化する（ブロックＢ６３）、すなわち、∇Wupdateに０を設定する。また、ＣＰＵ３０１は、ブロックＢ６５からブロックＢ６８までの繰り返し処理に用いられる変数iに１を設定する（ブロックＢ６４）。ＣＰＵ３０１は、iが勾配の数N以下である間、ブロックＢ６６からブロックＢ６８までの手順を繰り返す（ブロックＢ６５）。より具体的には、ＣＰＵ３０１は学習係数εiを算出する（ブロックＢ６６）。ＣＰＵ３０１は、例えば、学習の進度に対応するiと、勾配の和∇Wtransferを勾配の数Nで除した勾配の平均∇Wtransfer/Nとを用いて、学習係数εiを算出する。ＣＰＵ３０１は、更新のための勾配∇Wupdateに、学習係数εiと勾配の平均∇Wtransfer/Nとを乗じた値を加算する（ブロックＢ６７）。そして、ＣＰＵ３０１は、変数iに１を加算する（ブロックＢ６８）。
【０１３１】
変数iがNより大きいならば、ＣＰＵ３０１は、ブロックＢ６１で更新された重みWを、更新のための勾配の和∇Wupdateを用いてさらに更新する（ブロックＢ６９）。
【０１３２】
なお、第２クライアント３０のＣＰＵ３０１は、第１クライアント２０が第３クライアント４０から、第３クライアント４０によって目的関数の重みWを更新するために算出された複数の第１の勾配の和∇Wtransferと第１の勾配の数Nとを受信した場合に、第１クライアント２０から、  
（１）複数の第１の勾配の和∇Wtransferと、第１クライアント２０によって目的関数の重みWを更新するために算出された複数の第２の勾配の和∇Wtransferとの総和、及び  
（２）複数の第１の勾配の数Nと複数の第２の勾配の数Nとの和  
を受信してもよい。その場合、ＣＰＵ３０１は、複数の第１の勾配の和∇Wtransferと複数の第２の勾配の和∇Wtransferとの総和と、複数の第１の勾配の数Nと複数の第２の勾配の数Nとの和とを用いて、ブロックＢ６３以降の手順を実行することによって、第２クライアント３０の重みWを更新する。
【０１３３】
また、ＣＰＵ３０１は、第１クライアント２０と第３クライアント４０の各々から、勾配の和∇Wtransferと勾配の数Nとを受信してもよい。その場合、ＣＰＵ３０１は、第１クライアント２０から受信した勾配の和∇Wtransferと、第３クライアント４０から受信した勾配の和∇Wtransferとの総和を、勾配の和∇Wtransferとし、第１クライアント２０から受信した勾配の数Nと第３クライアント４０から受信した勾配の数Nとの和を、勾配の数Nとして、ブロックＢ６３以降の手順を実行することによって、第２クライアント３０の重みWを更新する。
【０１３４】
次いで、図２０は、本実施形態の複数のクライアント２０，３０，４０による並列分散学習の効果を示す。図２０に示す例では、目的関数を基準とする並列分散学習処理における学習時間と認識精度との関係が、処理が１台のクライアントで実行された場合の折れ線グラフ６１と、処理が３台のクライアントで実行された場合の折れ線グラフ６２とで示されている。これら折れ線グラフ６１，６２から、処理が３台のクライアントで実行された場合の方が、より早く最適解に収束し、より早く一定水準の認識精度（例えば、０．８）に到達していることが分かる。
【０１３５】
また、図２１は、勾配の和だけでなく勾配の数も用いることによる並列分散学習の効果を示す。図２１に示す例では、目的関数を基準とする並列分散学習処理における学習時間と認識精度との関係が、勾配の和だけを用いて処理が実行された場合の折れ線グラフ７１と、勾配の和と勾配の数とを用いて処理が実行された場合の折れ線グラフ７２とで示されている。勾配の和だけを用いて処理が実行された場合の折れ線グラフ７１では、勾配の和だけが用いられることによる処理工程の差に起因して、認識精度の変動がクライアントによって大きく異なる箇所がある。つまり、この折れ線グラフ７１は、最適解への収束に関して、クライアント間で異なる挙動が生じていることを示している。
【０１３６】
これに対して、勾配の和と勾配の数とを用いて処理が実行された場合の折れ線グラフ７２では、処理工程の差が低減されたことによって、各クライアントの認識精度の変動がほぼ同様になっている。つまり、この折れ線グラフ７２は、最適解への収束に関して、クライアント間で同様の挙動が生じていることを示している。したがって、勾配の和だけでなく勾配の数も用いることによって、クライアント間で学習経過が十分に共有され、並列分散学習が効率的に進められていることが分かる。
【０１３７】
以上説明したように、本実施形態によれば、通信コストを低減しながら並列分散学習処理を効率的に実行することができる。第２クライアント３０と少なくとも一つの他のクライアント２０，４０とによって目的関数を基準とする並列分散処理が実行される場合に、第２クライアント３０の受信制御部３２は、少なくとも一つの他のクライアント２０，４０の内の第１クライアント２０から、この第１クライアント２０によって目的関数の重み係数２９Ａ（第１重み係数）を更新するために算出された複数の勾配の和２９Ｂと、複数の勾配の数２９Ｃを特定可能な情報とを受信する。第２クライアント２０の算出部３３は、複数の勾配の和２９Ｂと、複数の勾配の数２９Ｃを特定可能な情報とを用いて、目的関数の重み係数３９Ａ（第２重み係数）を更新する。
【０１３８】
これにより、第１クライアント２０から受信した複数の勾配の和２９Ｂだけでなく、通信コストが小さい複数の勾配の数２９Ｃも用いて、目的関数の重み係数３９Ａが更新されるので、第１クライアント２０による学習経過を十分に反映して重み係数３９Ａを更新することができる。したがって、通信コストを低減しながら並列分散学習処理を効率的に実行することができる。
【０１３９】
また、本発明のいくつかの実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０１４０】
また、本発明のいくつかの実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、これら実施形態と同様の効果を容易に実現することができる。
【０１４１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４２】
１…情報処理システム、１０…サーバ、２０，３０，４０…クライアント、２１Ａ，３１Ａ，４１Ａ…学習データ、１０１…ＣＰＵ、１０２…システムコントローラ、１０３…主メモリ、１０４…ＢＩＯＳ−ＲＯＭ、１０５…不揮発性メモリ、１０６…通信デバイス、１０７…ＥＣ、２０１…ＯＳ、２０２…並列分散学習サーバプログラム、３０１…ＣＰＵ、３０２…システムコントローラ、３０３…主メモリ、３０４…ＢＩＯＳ−ＲＯＭ、３０５…不揮発性メモリ、３０６…通信デバイス、３０７…ＥＣ、４０１…ＯＳ、４０２…並列分散学習クライアントプログラム。
【図１】
2018036779.tif 000007
【図２】
2018036779.tif 000008
【図３】
2018036779.tif 000009
【図４】
2018036779.tif 000010
【図５】
2018036779.tif 000011
【図６】
2018036779.tif 000012
【図７】
2018036779.tif 000013
【図８】
2018036779.tif 000014
【図９】
2018036779.tif 000015
【図１０】
2018036779.tif 000016
【図１１】
2018036779.tif 000017
【図１２】
2018036779.tif 000018
【図１３】
2018036779.tif 000019
【図１４】
2018036779.tif 000020
【図１５】
2018036779.tif 000021
【図１６】
2018036779.tif 000022
【図１７】
2018036779.tif 000023
【図１８】
2018036779.tif 000024
【図１９】
2018036779.tif 000025
【図２０】
2018036779.tif 000026
【図２１】
2018036779.tif 000027