(57)【要約】【課題】並列分散学習処理における高いスケーラビリティを実現することが可能なシステム、プログラム及び方法を提供することにある。【解決手段】第１及び第２ノードによる勾配の算出が第３及び第４ノードによる勾配の算出よりも早い場合、ｎ＋１回目の並列分散処理では第１及び第２ノードによって算出された第１乃至第２勾配に基づいて第２重み係数をさらに更新し、ｍ＋１回目の並列分散処理では第１乃至第４ノードによって算出された第１乃至第４勾配に基づいて第４重み係数をさらに更新する。第３及び第４ノードによる勾配の算出が第１及び第２ノードによる勾配の算出よりも早い場合、ｎ＋１回目の並列分散処理では第１乃至第４勾配に基づいて第２重み係数をさらに更新し、ｍ＋１回目の並列分散処理では第３乃至第４勾配に基づいて第４重み係数をさらに更新する。【選択図】図１
2019109875.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
第１グループに属する第１ノードと第２ノードと、
第２グループに属する第３ノードと第４ノードと、を備え、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出され、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出され、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものである、
システム。
【請求項２】
システムであって、
第１グループに属する第１ノードと第２ノードと、
第２グループに属する第３ノードと第４ノードと、を備え、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出され、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出され、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである、
システム。
【請求項３】
システムであって、
第１グループに属する第１ノードと第２ノードと、
第２グループに属する第３ノードと第４ノードと、を備え、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出され、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出され、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものであって、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである、
システム。
【請求項４】
前記第２重み係数は、前記第１乃至第２勾配から算出された第５勾配に基づいて更新され、
前記第４重み係数は、前記第３乃至第４勾配から算出された第６勾配に基づいて更新される
請求項１〜３のいずれか一項に記載のシステム。
【請求項５】
前記第１ノード及び前記第３ノードと通信可能に接続されるサーバノードを更に備え、
前記サーバノードは、前記第２重み係数及び前記第４重み係数を算出し、
前記第１ノードは、前記サーバノードから送信された第２重み係数を第２ノードに送信し、
前記第３ノードは、前記サーバノードから送信された第４重み係数を第４ノードに送信する
請求項１〜３のいずれか一項に記載のシステム。
【請求項６】
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１乃至第２勾配は前記第３ノードと第４ノードとに送信され、
前記第３ノードと第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第４重み係数がさらに更新され、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第３乃至第４勾配は前記第１ノードと第２ノードとに送信され、
前記第１ノードと第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第２重み係数がさらに更新される
請求項３記載のシステム。
【請求項７】
前記第１グループに属する第１ノード及び第２ノードの処理速度の差は第１閾値以下であり、
前記第２グループに属する第３ノード及び第４ノードの処理速度の差は第２閾値以下である
請求項１〜３のいずれか一項に記載のシステム。
【請求項８】
前記第１グループには、前記第１ノード及び第２ノードを含む複数のノードが属しており、
前記第２グループには、前記第３ノード及び第４ノードを含む複数のノードが属しており、
前記第１ノード及び前記第２ノードの処理速度よりも前記第３ノード及び前記第４ノードの処理速度が遅い場合、前記第１グループに属するノードの第１数は、前記第２グループに属するノードの第２数よりも少ない
請求項７記載のシステム。
【請求項９】
前記第１ノード及び前記第２ノードの処理速度よりも前記第３ノード及び前記第４ノードの処理速度が遅い場合、前記並列分散処理における前記第２グループに属する第３ノード及び第３ノードの各々の処理量は、前記第１グループに属する第１ノード及び第２ノードの処理量よりも少ない請求項７記載のシステム。
【請求項１０】
第１グループに属する第１ノードと第２ノードと、第２グループに属する第３ノードと第４ノードとを備えるシステムの１以上のコンピュータによって実行されるプログラムであって、
前記１以上のコンピュータに、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配を算出し、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配を算出するステップと、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配を算出し、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配を算出するステップと
を実行させ、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものである、
プログラム。
【請求項１１】
第１グループに属する第１ノードと第２ノードと、第２グループに属する第３ノードと第４ノードとを備えるシステムの１以上のコンピュータによって実行されるプログラムであって、
前記１以上のコンピュータに、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配を算出し、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配を算出するステップと、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配を算出し、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配を算出するステップと
を実行させ、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである、
プログラム。
【請求項１２】
第１グループに属する第１ノードと第２ノードと、第２グループに属する第３ノードと第４ノードとを備えるシステムの１以上のコンピュータによって実行されるプログラムであって、
前記１以上のコンピュータに、
前記第１ノードと前記第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配を算出し、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配を算出するステップと、
前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配を算出し、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配を算出するステップと
を実行させ、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものであって、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、且つ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである、
プログラム。
【請求項１３】
前記第２重み係数は、前記第１乃至第２勾配から算出された第５勾配に基づいて更新され、
前記第４重み係数は、前記第３乃至第４勾配から算出された第６勾配に基づいて更新される
請求項１０〜１２のいずれか一項に記載のプログラム。
【請求項１４】
前記第２重み係数及び前記第４重み係数は、サーバノードによって算出され、
前記第１ノードは、前記サーバノードから送信された第２重み係数を第２ノードに送信し、
前記第３ノードは、前記サーバノードから送信された第４重み係数を第４ノードに送信する
請求項１０〜１２のいずれか一項に記載のプログラム。
【請求項１５】
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１乃至第２勾配は前記第３ノードと第４ノードとに送信され、
前記第３ノードと第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１勾配乃至第４勾配に基づいて前記第４重み係数がさらに更新され、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第３乃至第４勾配は前記第１ノードと第２ノードとに送信され、
前記第１ノードと第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第２重み係数がさらに更新される
請求項１０記載のプログラム。
【請求項１６】
前記第１グループに属する第１ノード及び第２ノードの処理速度の差は第１閾値以下であり、
前記第２グループに属する第３ノード及び第４ノードの処理速度の差は第２閾値以下である
請求項１０〜１２のいずれか一項に記載のプログラム。
【請求項１７】
前記第１グループには、前記第１ノード及び第２ノードを含む複数のノードが属しており、
前記第２グループには、前記第３ノード及び第４ノードを含む複数のノードが属しており、
前記第１ノード及び前記第２ノードの処理速度よりも前記第３ノード及び前記第４ノードの処理速度が遅い場合、前記第１グループに属するノードの第１数は、前記第２グループに属するノードの第２数よりも少ない
請求項１６記載のプログラム。
【請求項１８】
前記第１ノード及び前記第２ノードの処理速度よりも前記第３ノード及び前記第４ノードの処理速度が遅い場合、前記並列分散処理における前記第２グループに属する第３ノード及び第３ノードの各々の処理量は、前記第１グループに属する第１ノード及び第２ノードの処理量よりも少ない請求項１６記載のプログラム。
【請求項１９】
第１グループに属する第１ノードと第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出されるステップと、
第２グループに属する第３ノードと第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出されるステップと
を具備し、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものである、
方法。
【請求項２０】
第１グループに属する第１ノードと第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出されるステップと、
第２グループに属する第３ノードと第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出されるステップと
を具備し、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、且つ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである
方法。
【請求項２１】
第１グループに属する第１ノードと第２ノードとがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出されるステップと、
第２グループに属する第３ノードと第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出されるステップと
を具備し、
前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものであって、
前記第３ノードと前記第４ノードとによる勾配の算出が、前記第１ノードと前記第２ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、且つ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第３乃至第４勾配に基づいて前記第３重み係数から更新された前記第４重み係数をさらに更新するものである
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、システム、プログラム及び方法に関する。
【背景技術】
【０００２】
近年、機械学習の１つであるディープラーニングによるデータの有効活用が期待されている。ディープラーニングにおいて、大規模なデータを用いた学習結果をより高速に得るためには、複数のノード（コンピュータ）による学習の並列処理を実行し、各ノードによる学習経過を共有する並列分散学習処理が求められる。このような並列分散学習処理では、ノード間での通信によって学習経過を示すデータが共有される。
【０００３】
ここで、上記した学習結果をより高速に得るために並列処理を実行するノードの数を増加させることが考えられるが、一般的な並列分散学習処理においては、当該ノード数を増加させたとしても効率的に学習結果を得ることができない（つまり、学習速度がスケールしない）場合があり、高いスケーラビリティを実現することは困難である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１６／０２６７３８０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本発明が解決しようとする課題は、並列分散学習処理における高いスケーラビリティを実現することが可能なシステム、プログラム及び方法を提供することにある。
【課題を解決するための手段】
【０００６】
本実施形態に係るシステムは、第１グループに属する第１ノードと第２ノードと、第２グループに属する第３ノードと第４ノードと、を備える。前記システムは、前記第１ノードと前記第２ノードがｎ（ｎは自然数）回目の並列分散処理を実行する場合に、前記第１ノードによって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、前記第２ノードによって目的関数の前記第１重み係数を前記第２重み係数へ更新するための第２勾配が算出され、前記第３ノードと前記第４ノードとがｍ（ｍは自然数）回目の並列分散処理を実行する場合に、前記第３ノードによって目的関数の第３重み係数を第４重み係数へ更新するための第３勾配が算出され、かつ、前記第４ノードによって目的関数の前記第３重み係数を前記第４重み係数へ更新するための第４勾配が算出され、前記第１ノードと前記第２ノードとによる勾配の算出が、前記第３ノードと前記第４ノードとによる勾配の算出よりも早い場合、前記第１ノードと前記第２ノードとが実行するｎ＋１回目の並列分散処理では、前記第１乃至第２勾配に基づいて前記第１重み係数から更新された前記第２重み係数をさらに更新し、かつ、前記第３ノードと前記第４ノードとが実行するｍ＋１回目の並列分散処理では、前記第１乃至第４勾配に基づいて前記第３重み係数から更新された第４重み係数をさらに更新するものである。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係るシステムの概要を説明するための図。
【図２】本システムの構成の一例を示す図。
【図３】サーバノードのシステム構成の一例を示す図。
【図４】ワーカノードのシステム構成の一例を示す図。
【図５】サーバノードの機能構成の一例を示すブロック図。
【図６】ワーカノードの機能構成の一例を示すブロック図。
【図７】本システムの処理手順の一例を示すシーケンスチャート。
【図８】代表ノードの処理手順の一例を示すフローチャート。
【図９】非代表ノードの処理手順の一例を示すフローチャート。
【図１０】所定の汎化性能を得ることができるまでの学習時間を学習方式毎に示す図。
【図１１】本システムの変形例の概要を説明するための図。
【図１２】第２の実施形態に係るシステムの構成の一例を示す図。
【図１３】本システムの処理手順の一例を示すシーケンスチャート。
【図１４】代表ノードの処理手順の一例を示すフローチャート。
【図１５】非代表ノードの処理手順の一例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、各実施形態について説明する。
（第１の実施形態）
本実施形態に係るシステムは、例えば大規模なデータを扱うディープラーニングにおいて目的関数を基準とする並列分散学習処理を実行する。なお、目的関数を基準とする並列分散学習処理とは、目的関数を学習結果のフィードバック（評価値）として用いて、複数の処理主体で学習されるものであればどのようなものであってもよく、例えば目的関数を最適化するための並列分散学習処理である。
【０００９】
ところで、ディープラーニングでは、目的関数を最適化する手法として、例えば確率的勾配降下法（ＳＧＤ：stochastic gradient descent）が用いられる。このＳＧＤでは、勾配（ベクトル）と称される最適解方向へのベクトルを用いて、目的関数のパラメータが繰り返し更新される。なお、目的関数のパラメータには、例えば重み係数が含まれる。
【００１０】
ＳＧＤにおける現在の状態を示す重み係数（重みベクトル）、勾配ベクトル及び学習係数をそれぞれW(t)、∇W(t)、ε(t)とすると、更新後の重み係数W(t+1)は、以下の式で表される。
【００１１】
W(t+1)＝W(t)−ε(t)∇W(t)            式（１）  
なお、更新幅を決定する学習係数ε(t)は学習の進度に応じて適応的に決定され、例えば学習の進度に応じて減衰する。
【００１２】
上記した勾配は、訓練事例である学習データを目的関数に入力することで得られるが、計算コストの観点から複数の学習データをまとめて入力して平均勾配を得る「ミニバッチ法」が一般的に使用される。この平均勾配を得るための学習データの数はバッチサイズと称される。ＳＧＤによる最適化を並列分散化する際に共有する学習経過としては例えば勾配が用いられる。
【００１３】
ここで、並列分散学習の主要なアルゴリズムとしては、例えば同期型の並列分散学習方式及び非同期型の並列分散学習方式がある。
【００１４】
上記した並列分散学習処理においては複数のノードに勾配計算を実行させるが、同期型の並列分散学習方式は、当該複数のノードにおける勾配計算が同期して実行される方式である。具体的には、同期型の並列分散学習方式の一例としてはＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤが挙げられるが、当該Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによれば、上記したミニバッチ法の勾配計算を複数ノードに分散し、全ノードが計算した勾配の平均値を重み係数の更新に用いる。なお、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤの実施態様は複数存在し、例えば全ノード間で勾配を共有する集団通信型と、パラメータサーバと称されるノードに勾配を集約して重み係数の更新処理を行い、当該更新された重み係数を各ノードに配布するパラメータサーバ型等がある。
【００１５】
同期型の並列分散方式においては、勾配を計算するノード数（並列数）が増えるほど同期コストが増大し、処理スループットが低下すること、当該ノード数が増えるほどバッチサイズが増大し、汎化性能が低下すること、全体の処理速度が複数のノードの中の処理の遅いノードの処理速度の影響を受けること等が知られている。
【００１６】
一方、非同期型の並列分散学習方式は、複数のノードにおける勾配計算が非同期で実行される方式である。具体的には、非同期型の並列分散学習方式の一例としてはＡｓｙｂｃｈｒｏｎｏｕｓ−ＳＧＤが挙げられるが、当該Ａｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤは、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤと同様に勾配を共有するアルゴリズムである。しかしながら、Ａｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによれば、同期による勾配の平均化を行うことなく、各ノードが計算した勾配をそのまま用いて重み係数が更新される。なお、Ａｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤの実施態様はパラメータサーバ型が主である。
【００１７】
非同期型の並列分散学習方式においては、同期型の並列分散方式と比較して高い処理スループットが得られるが、ノード毎の処理速度の差により収束速度が低下する等の要因からスケーラビリティには限界があることが知られている。
【００１８】
なお、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤとは異なるアプローチのＡｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤは、当該Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤとは異なり、バッチサイズに依存しない並列分散学習アルゴリズムであることから、バッチサイズ非依存並列方式（処理）等と称される。なお、バッチサイズ非依存並列方式は、その多くが非同期型の並列分散学習方式である。
【００１９】
ここで、図１を参照して、本実施形態に係るシステム（以下、本システムと表記）の概要について説明する。本システムは、並列分散学習処理において、階層的に異なる学習処理（例えばＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤと他のバッチサイズ非依存並列方式）を実行可能な構成を有するものとする。
【００２０】
具体的には、図１に示すように、第一階層においては複数のノードが属する各グループ内でＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによるミニバッチ法の並列分散処理を行い、第二階層では第一階層における各グループの代表ノード同士でバッチサイズ非依存並列分散処理を行うものとする。以下、本システムについて詳細に説明する。
【００２１】
図２は、本システムの構成の一例を示す。図２に示すように、本システム１０は、サーバノード２０、複数のワーカノード３０及び複数のワーカノード４０を備える。
【００２２】
本実施形態において、複数のワーカノード３０はグループ１に属しており、複数のワーカノード４０はグループ２に属している。
【００２３】
サーバノード２０は、グループ１に属する複数のワーカノード３０のうちの１つのワーカノード３０（以下、グループ１の代表ノード３０と表記）と通信可能に接続される。また、サーバノード２０は、グループ２に属する複数のワーカノード３０のうちの１つのワーカノード４０（以下、グループ２の代表ノード４０と表記）と通信可能に接続される。
【００２４】
なお、複数のワーカノード３０のうち、サーバノード２０と通信可能に接続されていないワーカノード３０（つまり、グループ１の代表ノード３０以外のワーカノード３０）は、グループ１の非代表ノード３０と称する。また、複数のワーカノード４０のうち、サーバノード２０と通信可能に接続されていないワーカノード４０（つまり、グループ２の代表ノード４０以外のワーカノード４０）は、グループ２の非代表ノード４０と称する。
【００２５】
グループ１内において、複数のワーカノード３０（代表ノード３０及び非代表ノード３０）は、互いに通信可能に接続されている。同様に、グループ２内において、複数のワーカノード４０（代表ノード４０及び非代表ノード４０）は、互いに通信可能に接続されている。
【００２６】
本実施形態において、第一階層では、グループ１（複数のワーカノード３０）及びグループ２（複数のワーカノード４０）内でそれぞれＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによるミニバッチ法の並列分散学習処理が実行される。また、第二階層では、サーバノード２０を介して、グループ１の代表ノード３０及びグループ２の代表ノード４０同士でバッチサイズ非依存並列分散方式による並列分散学習処理が実行される。
【００２７】
なお、図２においてはグループ１及びグループ２にそれぞれ３つのワーカノードが属している例が示されているが、グループ１及びグループ２には２つ以上のワーカノードが属していればよい。また、図２においては２つのグループ（グループ１及びグループ２）のみが示されているが、本システムにおいては、３つ以上のグループを備えていてもよい。
【００２８】
図３は、図２に示すサーバノード２０のシステム構成の一例を示す。サーバノード２０は、ＣＰＵ２０１、システムコントローラ２０２、主メモリ２０３、ＢＩＯＳ−ＲＯＭ２０４、不揮発性メモリ２０５、通信デバイス２０６、エンベデッドコントローラ（ＥＣ）２０７等を備える。
【００２９】
ＣＰＵ２０１は、サーバノード２０内の様々なコンポーネントの動作を制御するプロセッサである。ＣＰＵ２０１は、ストレージデバイスである不揮発性メモリ２０５から主メモリ２０３にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム（ＯＳ）２０３ａ、及び様々なアプリケーションプログラムが含まれている。アプリケーションプログラムには、サーバノード用の並列分散学習プログラム２０３ｂが含まれている。
【００３０】
また、ＣＰＵ２０１は、ＢＩＯＳ−ＲＯＭ２０４に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００３１】
システムコントローラ２０２は、ＣＰＵ２０１のローカルバスと各種コンポーネントとの間を接続するデバイスである。システムコントローラ２０２には、主メモリ２０３をアクセス制御するメモリコントローラも内蔵されている。
【００３２】
通信デバイス２０６は、有線または無線による通信を実行するように構成されたデバイスである。通信デバイス２０６は、信号を送信する送信部と、信号を受信する受信部とを含む。ＥＣ２０７は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。
【００３３】
図４は、ワーカノード３０のシステム構成の一例を示す。ここでは、ワーカノード３０のシステム構成について説明するが、ワーカノード４０についても同様の構成であるものとする。
【００３４】
ワーカノード３０は、ＣＰＵ３０１、システムコントローラ３０２、主メモリ３０３、ＢＩＯＳ−ＲＯＭ３０４、不揮発性メモリ３０５、通信デバイス３０６、エンベデッドコントローラ（ＥＣ）３０７等を備える。
【００３５】
ＣＰＵ３０１は、ワーカノード３０内の様々なコンポーネントの動作を制御するプロセッサである。ＣＰＵ３０１は、ストレージデバイスである不揮発性メモリ３０５から主メモリ３０３にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム（ＯＳ）３０３ａ及び様々なアプリケーションプログラムが含まれている。アプリケーションプログラムには、ワーカノード用の並列分散学習プログラム３０３ｂが含まれている。
【００３６】
また、ＣＰＵ３０１は、ＢＩＯＳ−ＲＯＭ３０４に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００３７】
システムコントローラ３０２は、ＣＰＵ３０１のローカルバスと各種コンポーネントとの間を接続するデバイスである。システムコントローラ３０２には、主メモリ３０３をアクセス制御するメモリコントローラも内蔵されている。
【００３８】
通信デバイス３０６は、有線または無線による通信を実行するように構成されたデバイスである。通信デバイス３０６は、信号を送信する送信部と、信号を受信する受信部とを含む。ＥＣ３０７は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。
【００３９】
図５は、サーバノード２０の機能構成の一例を示すブロック図である。図５に示すように、サーバノード２０は、学習データ格納部２１、データ割当部２２、送信制御部２３、重み係数格納部２４、受信制御部２５及び算出部２６を含む。
【００４０】
本実施形態において、学習データ格納部２１及び重み係数格納部２４は、例えば図３に示す不揮発性メモリ２０５等に格納される。また、本実施形態において、データ割当部２２、送信制御部２３、受信制御部２５及び算出部２６は、例えば図３に示すＣＰＵ２０１（つまり、サーバノード２０のコンピュータ）が不揮発性メモリ２０５に格納されている並列分散学習プログラム２０３ｂを実行すること（つまり、ソフトウェア）により実現されるものとする。なお、この並列分散学習プログラム２０３ｂは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、並列分散学習プログラム２０３ｂは、例えばネットワークを介してサーバノード２０にダウンロードされても構わない。
【００４１】
ここでは、各部２２、２３、２５及び２６がソフトウェアにより実現されるものとして説明したが、これらの各部２２、２３、２５及び２６は、ハードウェアにより実現されてもよいし、ソフトウェア及びハードウェアの組み合わせ構成によって実現されてもよい。
【００４２】
学習データ格納部２１には、上記した並列分散学習処理において各ノード（ワーカノード）が勾配を計算するために用いられる学習データが格納されている。
【００４３】
データ割当部２２は、学習データ格納部２１に格納されている学習データのうち、各ワーカノード３０及び４０に割り当てられる学習データを決定する。データ割当部２２は、例えば学習データ格納部２１に格納されている学習データを２つに分割し、当該分割された学習データのそれぞれをグループ１（に属する複数のワーカノード３０）及びグループ２（に属する複数のワーカノード４０）に割り当てる。
【００４４】
送信制御部２３は、通信デバイス２０６を介して各種データを送信する機能を有する。送信制御部２３は、データ割当部２２によってグループ１（に属する複数のワーカノード３０）に割り当てられた学習データを、当該グループ１の代表ノード３０に送信する。また、送信制御部２３は、データ割当部２２によってグループ２（に属する複数のワーカノード４０）に割り当てられた学習データを、当該グループ２の代表ノード４０に送信する。
【００４５】
重み係数格納部２４には、目的関数の重み係数が格納されている。なお、重み係数格納部２４に格納されている重み係数（つまり、サーバノード２０において管理される重み係数）は、マスタパラメータと称される。
【００４６】
受信制御部２５は、通信デバイス２０６を介して各種データを受信する機能を有する。受信制御部２５は、各ワーカノード３０及び４０上での学習経過を示す勾配を受信する。なお、受信制御部２５によって受信される勾配は、重み係数を更新するために各ワーカノード３０及び４０において算出される。グループ１に属するワーカノード３０の各々によって算出された勾配は、当該グループ１の代表ノード３０から受信される。グループ２に属するワーカノード４０の各々によって算出された勾配は、当該グループ２の代表ノード４０から受信される。
【００４７】
算出部２６は、重み係数格納部２４に格納されている重み係数（マスタパラメータ）及び受信制御部２５によって受信された勾配を用いて、当該マスタパラメータを更新する。この場合、算出部２６は、上記した式（１）に基づいて更新後の重み係数を算出する。算出部２６によって算出された重み係数（更新後の重み係数）は、マスタパラメータとして重み係数格納部２４に格納されるとともに、送信制御部２３によってグループ１の代表ノード３０またはグループ２の代表ノード４０に送信される。
【００４８】
以下、複数のワーカノード３０及び４０の機能構成について説明する。まず、図６を参照して、グループ１の代表ノード３０の機能構成の一例について説明する。
【００４９】
図６に示すように、グループ１の代表ノード３０は、受信制御部３１、学習データ格納部３２、重み係数格納部３３、算出部３４及び送信制御部３５を含む。
【００５０】
本実施形態において、受信制御部３１、算出部３４及び送信制御部３５は、例えば図４に示すＣＰＵ３０１（つまり、グループ１の代表ノード３０のコンピュータ）が不揮発性メモリ３０５に格納されている並列分散学習プログラム３０３ｂを実行すること（つまり、ソフトウェア）により実現されるものとする。なお、この並列分散学習プログラム３０３ｂは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、並列分散学習プログラム３０３ｂは、例えばネットワークを介して代表ノード３０にダウンロードされても構わない。
【００５１】
ここでは、各部３１、３４及び３５がソフトウェアにより実現されるものとして説明したが、これらの各部３１、３４及び３５は、ハードウェアにより実現されてもよいし、ソフトウェア及びハードウェアの組み合わせ構成によって実現されてもよい。
【００５２】
また、本実施形態において、学習データ格納部３２及び重み係数格納部３３は、例えば図４に示す不揮発性メモリ３０５等に格納される。
【００５３】
受信制御部３１は通信デバイス３０６を介して各種データを受信する機能を有する。受信制御部３１は、サーバノード２０に含まれる送信制御部２３によって送信された学習データを受信する。受信制御部３１によって受信された学習データのうち、グループ１の代表ノード３０に割り当てられた学習データは、学習データ格納部３２に格納される。一方、受信制御部３１によって受信された学習データのうち、グループ１の非代表ノード３０に割り当てられた学習データは、グループ１の代表ノード３０から非代表ノード３０に送信される。
【００５４】
また、受信制御部３１は、グループ１の非代表ノード３０において算出された勾配を、当該非代表ノード３０から受信する。
【００５５】
重み係数格納部３３には、目的関数の重み係数が格納されている。なお、重み係数格納部３３に格納されている重み係数（つまり、代表ノード３０において管理される重み係数）は、便宜的にグループ１の代表ノード３０の重み係数と称する。
【００５６】
算出部３４は、学習データ格納部３２に格納された学習データ及び重み係数格納部３３に格納されている重み係数を用いて、目的関数の重み係数を更新するための勾配を算出する。
【００５７】
送信制御部３５は、通信デバイス３０６を介して各種データを送信する機能を有する。送信制御部３５は、受信制御部３１によって受信された勾配（非代表ノード３０において算出された勾配）及び算出部３４によって算出された勾配をサーバノード２０に送信する。
【００５８】
なお、上記したようにサーバノード２０に含まれる算出部２６によって算出された重み係数（更新後の重み係数）が当該サーバノード２０（送信制御部２３）から送信された場合、当該重み係数は、受信制御部３１によって受信され、重み係数格納部３３に格納されている重み係数（更新前の重み係数）と置換される。これにより、グループ１の代表ノード３０の重み係数が更新される。また、この重み係数は、送信制御部３５を介して非代表ノード３０に送信される。
【００５９】
次に、グループ１の非代表ノード３０の機能構成の一例について説明する。なお、グループ１の非代表ノード３０の機能構成については便宜的に図６を用いて説明するが、ここでは上記したグループ１の代表ノード３０と異なる部分について主に述べる。
【００６０】
グループ１の非代表ノード３０は、上記したグループ１の代表ノード３０と同様に、図６に示す受信制御部３１、学習データ格納部３２、重み係数格納部３３、算出部３４及び送信制御部３５を含む。
【００６１】
受信制御部３１は、グループ１の代表ノード３０から送信された学習データを受信する。受信制御部３１によって受信された学習データは、学習データ格納部３２に格納される。
【００６２】
重み係数格納部３３には、目的関数の重み係数が格納されている。なお、重み係数格納部３３に格納されている重み係数（つまり、非代表ノード３０において管理される重み係数）は、便宜的にグループ１の非代表ノード３０の重み係数と称する。
【００６３】
上記したようにグループ１の代表ノード３０から重み係数（更新後の重み係数）が送信された場合、当該重み係数は、受信制御部３１によって受信され、重み係数格納部３３に格納されている重み係数（更新前の重み係数）と置換される。これにより、グループ１の非代表ノード３０の重み係数が更新される。
【００６４】
算出部３４は、学習データ格納部３２に格納された学習データ及び重み係数格納部３３に格納されている重み係数を用いて、目的関数の重み係数を更新するための勾配を算出する。算出部３４によって算出された勾配は、送信制御部３５によって代表ノード３０に送信される。
【００６５】
ここでは、グループ１の代表ノード３０及び非代表ノード３０について説明したが、本実施形態においては、グループ２の代表ノード４０及び非代表ノード４０についてもグループ１の代表ノード３０及び非代表ノード３０と同様の機能構成であるものとする。このため、以下においてグループ２の代表ノード４０及び非代表ノード４０の機能構成について述べる場合には図６を用いるものとする。
【００６６】
以下、図７のシーケンスチャートを参照して、本システムの処理手順の一例について説明する。ここでは、サーバノード２０、グループ１（複数のワーカノード３０）及びグループ２（複数のワーカノード４０）間の処理について主に説明し、各グループ（グループ１及びグループ２）内のワーカノードの処理については後述する。
【００６７】
なお、グループ１に属する複数のワーカノード３０の各々に割り当てられた学習データは、当該ワーカノード３０に含まれる学習データ格納部３２に格納されているものとする。グループ２に属する複数のワーカノード４０についても同様である。
【００６８】
また、サーバノード２０に含まれる重み係数格納部２４、複数のワーカノード３０及び４０の各々に含まれる重み係数格納部３３には、例えば同一の重み係数（以下、重み係数Ｗ０と表記）が格納されているものとする。
【００６９】
この場合、グループ１（に属する複数のワーカノード３０）においては、勾配算出処理が行われる（ステップＳ１）。この勾配算出処理によれば、グループ１に属する複数のワーカノード３０の各々は、当該ワーカノード３０に含まれる学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数Ｗ０を用いて、目的関数の重み係数を更新するための勾配を算出する。なお、グループ１に属する複数のワーカノード３０の各々は、互いに同期して勾配算出処理を実行する。
【００７０】
このようにステップＳ１において複数のワーカノード３０によって算出された勾配は、グループ１の代表ノード３０からサーバノード２０に送信される（ステップＳ２）。
【００７１】
サーバノード２０（に含まれる受信制御部２５）は、ステップＳ２において送信された勾配を受信する。サーバノード２０（に含まれる算出部２６）は、受信された勾配と当該サーバノード２０に含まれる重み係数格納部２４に格納されている重み係数Ｗ０を用いて新たな重み係数（以下、重み係数Ｗ１と表記）を算出する。これにより、重み係数格納部２４に格納されている重み係数Ｗ０は、算出された重み係数Ｗ１に更新される（ステップＳ３）。
【００７２】
サーバノード２０（に含まれる送信制御部２３）は、ステップＳ３において重み係数Ｗ０から更新された重み係数Ｗ１（更新後のマスタパラメータ）を、グループ１に配布する（ステップＳ４）。
【００７３】
このようにサーバノード２０から配布された重み係数Ｗ１は、グループ１に属する複数のワーカノード３０の各々に含まれる重み係数格納部３３に格納される。この場合、グループ１においては、グループ１において算出された勾配が反映された重み係数を用いて、次回以降の勾配算出処理を実行することができる。
【００７４】
一方、グループ２（に属する複数のワーカノード４０）においては、グループ１と同様に、勾配算出処理が行われる（ステップＳ５）。この勾配算出処理によれば、グループ２に属する複数のワーカノード４０の各々は、当該ワーカノード４０に含まれる学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数Ｗ０を用いて、目的関数の重み係数を更新するための勾配を算出する。なお、グループ２に属する複数のワーカノード４０の各々は、互いに同期して勾配算出処理を実行する。
【００７５】
このようにステップＳ５において算出された勾配は、グループ２の代表ノード４０からサーバノード２０に送信される（ステップＳ６）。
【００７６】
サーバノード２０は、ステップＳ６において送信された勾配を受信する。ここで、サーバノード２０に含まれる重み係数格納部２４に格納されている重み係数（マスタパラメータ）は、ステップＳ３において更新された重み係数Ｗ１である。
【００７７】
このため、サーバノード２０は、受信された勾配と重み係数Ｗ１とを用いて新たな重み係数（以下、重み係数Ｗ２と表記）を算出する。これにより、重み係数格納部２４に格納されている重み係数Ｗ１は、算出された重み係数Ｗ２に更新される（ステップＳ７）。
【００７８】
サーバノード２０は、ステップＳ７において重み係数Ｗ１から更新された重み係数Ｗ２（マスタパラメータ）を、グループ２に配布する（ステップＳ８）。
【００７９】
このようにサーバノード２０から配布された重み係数Ｗ２は、グループ２に属する複数のワーカノード４０の各々に含まれる重み係数格納部３３に格納される。
【００８０】
ここで、重み係数Ｗ２は、グループ１において算出された勾配を用いて更新された重み係数Ｗ１がグループ２において算出された勾配を用いて更に更新されたものである。すなわち、重み係数Ｗ２は、グループ１において算出された勾配（ステップＳ１において算出された勾配）及びグループ２において算出された勾配（ステップＳ５において算出された勾配）に基づいて算出された重み係数である。このようにグループ１による勾配の算出がグループ２による勾配の算出よりも早い場合、グループ２においては、グループ１において算出された勾配に基づいて更新された重み係数を用いた並列分散学習処理が実行される。
【００８１】
このため、グループ２においては、当該グループ２において算出された勾配だけでなく、グループ１において算出された勾配もが反映された重み係数を用いて、次回以降の勾配算出処理を実行することができる。
【００８２】
また、上記したステップＳ１〜Ｓ４の処理が実行された場合、グループ１においては、当該ステップＳ１〜Ｓ４の処理に相当するステップＳ９〜Ｓ１２の処理が実行される。この処理においては、グループ１における勾配算出処理によって算出された勾配とサーバノード２０に含まれる重み係数格納部２４に格納されている重み係数Ｗ２を用いて、当該重み係数Ｗ２が新たな重み係数（以下、重み係数Ｗ３と表記）に更新される。この重み係数Ｗ３は、グループ１に属する複数のワーカノード３０に配布される。なお、ステップＳ９においては、ステップＳ１の勾配算出処理において用いられた学習データとは異なる学習データを用いて勾配を算出するものとする。
【００８３】
ここで、重み係数Ｗ３は、グループ２において算出された勾配を用いて更新された重み係数Ｗ２がグループ１において算出された勾配を用いて更に更新されたものである。このようにグループ２による勾配の算出がグループ１による勾配の算出よりも早い場合、グループ１においては、グループ２において算出された勾配に基づいて更新された重み係数を用いた並列分散学習処理が実行される。
【００８４】
このため、グループ１においては、当該グループ１において算出された勾配（ステップＳ１及びＳ９において算出された勾配）だけでなく、グループ２において算出された勾配（ステップＳ５において算出された勾配）もが反映された重み係数を用いて、次回以降の勾配算出処理を実行することができる。
【００８５】
一方、上記したステップＳ５〜Ｓ８の処理が実行された場合、グループ２においては、当該ステップＳ５〜Ｓ８の処理に相当するステップＳ１３〜Ｓ１６の処理が実行される。この処理においては、グループ２における勾配算出処理によって算出された勾配とサーバノード２０に含まれる重み係数格納部２４に格納されている重み係数Ｗ３が新たな重み係数（以下、重み係数Ｗ４と表記）に更新される。この重み係数Ｗ４は、グループ２に属する複数のワーカノード４０に配布される。なお、ステップＳ１３においては、ステップＳ５の勾配算出処理において用いられた学習データとは異なる学習データを用いて勾配を算出するものとする。
【００８６】
ここで、重み係数Ｗ４は、グループ１において算出された勾配を用いて更新された重み係数Ｗ３がグループ２において算出された勾配を用いて更に更新されたものである。
【００８７】
このため、グループ２においては、当該グループ２において算出された勾配（ステップＳ５及びＳ１３において算出された勾配）だけでなく、グループ１において算出された勾配（ステップＳ１及びＳ９において算出された勾配）もが反映された重み係数を用いて、次回以降の勾配算出処理を実行することができる。
【００８８】
図７においてはステップＳ１〜Ｓ１６の処理について説明したが、当該図７に示す処理は、複数のワーカノード３０及び４０の各々に含まれる学習データ格納部３２に格納されている学習データの全てについて勾配算出処理（つまり、並列分散学習処理）が実行されるまで継続して実行される。
【００８９】
上記したように本実施形態によれば、グループ１及びグループ２内では互いに同期して処理が実行されるが、サーバノード２０及びグループ１（の代表ノード３０）間の処理と、サーバノード２０及びグループ２（の代表ノード４０）間の処理とは、非同期に実行される。
【００９０】
以下、上記した図７に示す処理が実行される際の、各グループの代表ノード及び非代表ノードの処理について説明する。
【００９１】
まず、図８のフローチャートを参照して、代表ノードの処理手順の一例について説明する。ここでは、グループ１の代表ノード３０の処理手順について説明する。
【００９２】
代表ノード３０に含まれる算出部３４は、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ０）を用いて勾配を算出する（ステップＳ２１）。以下、代表ノード３０において算出された勾配を代表ノード３０の勾配と称する。
【００９３】
ここで、グループ１の代表ノード３０がステップＳ２１の処理を実行する場合、当該グループ１の非代表ノード３０は、後述するように当該代表ノード３０と同期して勾配を算出する。以下、このように非代表ノード３０において算出された勾配を非代表ノード３０の勾配と称する。
【００９４】
この場合、受信制御部３１は、非代表ノード３０の勾配を当該非代表ノード３０から受信する（ステップＳ２２）。なお、本システムにおいて、複数の非代表ノード３０がグループ１に属している場合は、受信制御部３１は、当該非代表ノード３０の各々から勾配を受信する。
【００９５】
次に、算出部３４は、ステップＳ２１において算出された勾配（代表ノード３０の勾配）及びステップＳ２２において受信された勾配（非代表ノード３０の勾配）の平均値を算出する（ステップＳ２３）。以下、ステップＳ２３において算出された勾配の平均値をグループ１の平均勾配と称する。
【００９６】
送信制御部３５は、グループ１の平均勾配をサーバノード２０に送信する（ステップＳ２４）。
【００９７】
なお、上記したステップＳ２１〜Ｓ２４の処理は、上記した図７に示すステップＳ１及びＳ２（またはステップＳ９及びＳ１０）においてグループ１の代表ノード３０によって実行される。
【００９８】
この場合、サーバノード２０によって図７に示すステップＳ３及びＳ４の処理が実行される。すなわち、サーバノード２０においてはステップＳ２４において送信されたグループ１の平均勾配でマスタパラメータが更新され、当該更新後のマスタパラメータ（例えば、重み係数Ｗ１）がサーバノード２０からグループ１の代表ノード３０に送信される。
【００９９】
サーバノード２０からマスタパラメータが送信された場合、受信制御部３１は、当該マスタパラメータを受信する（ステップＳ２５）。
【０１００】
送信制御部３５は、ステップＳ２５において受信されたマスタパラメータを非代表ノード３０に送信する（ステップＳ２６）。
【０１０１】
重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ０）は、ステップＳ２５において受信されたマスタパラメータ（例えば、重み係数Ｗ１）で置換される（ステップＳ２７）。これにより、グループ１の代表ノード３０の重み係数がマスタパラメータ（と同一の重み係数）に更新される。
【０１０２】
なお、ステップＳ２５〜Ｓ２７の処理は、上記した図７に示すステップＳ４（またはステップＳ１２）の処理の後に代表ノード３０によって実行される。
【０１０３】
上記した図８に示す処理が実行されることにより、グループ１の代表ノード３０の重み係数がグループ１の平均勾配を用いて算出された重み係数に更新され、次の勾配の算出においては当該更新された重み係数を用いることができる。
【０１０４】
なお、図示されていないが、図８に示す処理は、図７に示す処理が継続して実行されている間は繰り返し実行される。
【０１０５】
次に、図９のフローチャートを参照して、非代表ノードの処理手順の一例について説明する。ここでは、グループ１の非代表ノード３０の処理手順について説明する。
【０１０６】
非代表ノード３０に含まれる算出部３４は、上記した代表ノード３０における勾配の算出と同期して、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ０）を用いて勾配を算出する（ステップＳ３１）。
【０１０７】
ステップＳ３１の処理が実行されると、送信制御部３５は、当該ステップＳ３１において算出された勾配（非代表ノード３０の勾配）を代表ノード３０に送信する（ステップＳ３２）。
【０１０８】
なお、上記したステップＳ３１及びＳ３２の処理は、上記した図７に示すステップＳ１及びＳ２（またはステップＳ９及びＳ１０）において非代表ノード３０によって実行される。
【０１０９】
ステップＳ３２の処理が実行された場合、代表ノード３０においては、図８に示すステップＳ２２〜Ｓ２６の処理が実行される。この場合、サーバノード２０から送信されたマスタパラメータ（例えば、重み係数Ｗ１）がグループ１の代表ノード３０から非代表ノード３０に送信される。
【０１１０】
代表ノード３０からマスタパラメータが送信された場合、受信制御部３１は、当該マスタパラメータを受信する（ステップＳ３３）。
【０１１１】
重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ０）は、ステップＳ３３において受信されたマスタパラメータで置換される（ステップＳ３４）。これにより、グループ１の非代表ノード３０の重み係数がマスタパラメータ（と同一の重み係数）に更新される。
【０１１２】
なお、ステップＳ３３及びＳ３４の処理は、上記した図７に示すステップＳ４（またはステップＳ１２）の処理の後に非代表ノード３０によって実行される。
【０１１３】
上記した図９に示す処理が実行されることにより、グループ１の非代表ノード３０の重み係数がグループ１の平均勾配を用いて算出された重み係数に更新され、次の勾配の算出においては当該更新された重み係数を用いることができる。
【０１１４】
なお、図示されていないが、図９に示す処理は、図７に示す処理が継続して実行されている間は繰り返し実行される。
【０１１５】
上記したようにグループ１においては、当該グループ１に属する全てのワーカノード３０の勾配を代表ノード３０に集約し、当該代表ノード３０において平均勾配を算出する処理が実行される。この場合、例えばＭＰＩ（Message Passing Interface）で定義されるＲｅｄｕｃｅと称される集団通信アルゴリズム（ＭＰＩ＿Ｒｅｄｕｃｅ）を用いることで、非代表ノード３０からの代表ノード３０への勾配の送信と平均勾配（全ワーカノード３０の勾配和）の算出処理を効率的に実行することが可能である。ここでは、ＭＰＩ＿Ｒｅｄｕｃｅを用いる場合について説明したが、当該ＭＰＩ＿Ｒｅｄｕｃｅと同程度の他の処理が実行されてもよい。
【０１１６】
ここでは、グループ１（代表ノード３０及び非代表ノード３０）の処理について説明したが、グループ２（代表ノード４０及び非代表ノード４０）においてもグループ１と同様の処理が実行される。
【０１１７】
上記したように本実施形態において、システムはグループ１に属する複数のワーカノード（代表ノード及び非代表ノード）３０とグループ２（第２グループ）に属する複数のワーカノード（代表ノード及び非代表ノード）４０とを備える。複数のワーカノード３０が目的関数を基準とする例えばｎ回目の並列分散処理を実行する場合、例えばグループ１の代表ノード（第１ノード）３０によって目的関数の第１重み係数を第２重み係数へ更新するための第１勾配が算出され、かつ、グループ１の非代表ノード（第２ノード）３０によって目的関数の第１重み係数を第２重み係数へ更新するための第２勾配が算出される。
【０１１８】
一方、複数のワーカノード３０による並列分散処理と非同期に実行される例えばｍ回目の並列分散処理を複数のワーカノード４０が実行する場合、例えばグループ２の代表ノード（第３ノード）４０によって目的関数の第３重み係数を第４重み係数へ更新するための第４勾配が算出され、かつ、グループ２の非代表ノード４０によって目的関数の第３重み係数を第４重み係数へ更新するための第４勾配が算出される。
【０１１９】
ここで、本実施形態においては、グループ１（代表ノード３０及び非代表ノード３０）における勾配の算出が、グループ２（代表ノード４０及び非代表ノード４０）における勾配の算出よりも早い場合、グループ１におけるｎ＋１回目の並列分散処理では、第１乃至第２勾配に基づいて第１重み係数から更新された第２重み係数をさらに更新し、グループ２におけるｍ＋１回目の並列分散処理では、第１乃至第４勾配に基づいて第３重み係数から更新された第４重み係数をさらに更新する。
【０１２０】
一方、グループ２（代表ノード４０及び非代表ノード４０）における勾配の算出が、グループ１（代表ノード３０及び非代表ノード３０）における勾配の算出よりも早い場合、グループ１におけるｎ＋１回目の並列分散処理では、第１〜第４勾配に基づいて第１重み係数から更新された第２重み係数をさらに更新し、グループ２におけるｍ＋１回目の並列分散処理では、第３乃至第４勾配に基づいて第３重み係数から更新された第４重み係数をさらに更新する。
【０１２１】
上記したように本実施形態においては、複数のワーカノード３０及び４０を複数のグループ（グループ１及びグループ２）に分割し、第一階層として、当該グループ内でＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる並列分散学習処理を行う。この第一階層においては、グループ毎に同期を行うため、例えば複数のワーカノード３０及び４０の全てを同期させて処理を行う場合と比較して、同期コスト及びバッチサイズを抑制することが可能となる。
【０１２２】
また、第二階層としては、サーバノード２０を介して、第一階層における各グループの代表ノード同士でバッチサイズ非依存並列方式による並列分散学習処理を行う。この第二階層においては、各代表ノードは同期する必要がないため、高いスループットを得ることができる。
【０１２３】
すなわち、本実施形態においては、例えばＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤとバッチサイズ非依存並列方式を階層的に組み合わせる構成により、並列分散学習処理における高いスケーラビリティを実現することができ、より大きな並列数での並列分散学習処理が可能となる。
【０１２４】
ここで、図１０は、所定の汎化性能を得ることができるまでの時間（学習時間）を学習方式毎に示している。
【０１２５】
図１０においては、学習方式として、例えば非並列分散方式（単一のノードによる学習方式）、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤ、バッチサイズ非依存並列方式及び本実施形態における方式（Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤ＋バッチサイズ非依存並列方式）が示されている。
【０１２６】
図１０に示すように、非並列分散方式による学習処理において所定の汎化性能を得ることができるまでの学習時間（以下、非並列分散方式の学習時間と表記）を１．０とした場合、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる並列分散学習処理において所定の汎化性能を得ることができるまでの学習時間（以下、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤの学習時間と表記）は、０．６である。
【０１２７】
同様に、非並列分散方式の学習時間を１．０とした場合、バッチサイズ非依存並列方式による並列分散学習処理において所定の汎化性能を得ることができるまでの学習時間（以下、バッチサイズ非依存並列方式の学習時間と表記）は、０．５である。
【０１２８】
これに対して、本実施形態に係る方式（階層的な並列分散方式）では、理論上はＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤとバッチサイズ非依存並列方式それぞれのスケーラビリティの上限を掛け合わせたスケーラビリティを得られる。
【０１２９】
具体的には、本実施形態に係る方式による並列分散学習処理において所定の汎化性能を得ることができるまでの学習時間（の非並列分散方式の学習時間に対する割合）は、非並列分散方式の学習時間に対するＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤの学習時間の割合（ここでは、０．６）と非並列分散方式の学習時間に対するバッチサイズ非依存並列方式の学習時間の割合（ここでは、０．５）とを乗算した値（つまり、０．３）となる。
【０１３０】
これによれば、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤでは非並列分散方式の６割程度の学習時間で所定の汎化性能を得ることができ、バッチサイズ非依存並列方式では非並列分散方式の５割程度の学習時間で所定の汎化性能を得ることができるところ、本実施形態に係る方式では、非並列分散方式の３割程度の学習時間で所定の汎化性能を得ることができる。
【０１３１】
すなわち、本実施形態においては、単にＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる並列分散学習処理またはバッチサイズ非依存並列方式による並列分散学習処理を実行する場合に比べて、高いスケーラビリティを実現することが可能である。
【０１３２】
なお、本実施形態において、上記した第２重み係数は、グループ１の代表ノード３０によって算出された第１勾配及びグループ１の非代表ノード３０によって算出された第２勾配から算出された第５勾配（例えば、第１勾配と第２勾配との平均値）に基づいて算出される。同様に、第４重み係数は、グループ２の代表ノード４０によって算出された第３勾配及びグループ２の非代表ノード４０によって算出された第４勾配から算出された第６勾配（例えば、第３勾配と第４勾配との平均値）に基づいて算出される。
【０１３３】
また、本実施形態においては、グループ１の代表ノード３０及びグループ２の代表ノード４０と通信可能に接続されるサーバノード２０において第２重み係数及び第４重み係数が算出される。
【０１３４】
サーバノード２０において第２重み係数が算出された場合、サーバノード２０は当該第２重み係数をグループ１の代表ノード３０に送信し、当該代表ノード３０は当該第２重み係数を非代表ノード３０に送信する。本実施形態においては、このような構成により、グループ１の代表ノード３０及び非代表ノード３０の重み係数をサーバノード２０によって算出された重み係数に更新することができる。
【０１３５】
また、サーバノード２０において第４重み係数が算出された場合、サーバノード２０は当該第４重み係数をグループ２の代表ノード４０に送信し、当該代表ノード４０は当該第４重み係数を非代表ノード４０に送信する。本実施形態においては、このような構成により、グループ２の代表ノード４０及び非代表ノード４０の重み係数をサーバノード２０によって算出された重み係数に更新することができる。
【０１３６】
なお、本実施形態においては、グループ１における勾配の算出がグループ２における勾配の算出よりも早い場合、グループ１におけるｎ＋１回目の並列分散処理では、第１乃至第２勾配に基づいて重み係数が更新され、グループ２におけるｍ＋１回目の並列分散処理では、第１乃至第４勾配に基づいて重み係数がさらに更新されるものとして説明した。
【０１３７】
しかしながら、この「グループ１における勾配の算出がグループ２における勾配の算出よりも早い場合」には、サーバノード２０がグループ２における勾配算出結果（グループ２の代表ノード４０から送信された勾配）を受信するより先にグループ１における勾配算出結果（グループ１の代表ノード３０から送信された勾配）を受信する場合を含むものとする。
【０１３８】
これによれば、例えばグループ１における勾配算出結果がグループ２における勾配算出結果よりも先にサーバノード２０によって受信された場合には、グループ１におけるｎ＋１回目の並列分散処理（時間的に後の並列分散処理）では、当該グループ１における勾配算出結果（つまり、第１乃至第２勾配）に基づいて重み係数が更新され、グループ２におけるｍ＋１回目の並列分散処理では、グループ１における勾配算出結果（に基づいて更新された重み係数）及びグループ２における勾配算出結果（つまり、第１乃至第４勾配）に基づいて重み係数がさらに更新されることになる。
【０１３９】
また、本実施形態においては、グループ２における勾配の算出がグループ１における勾配の算出よりも早い場合、グループ２におけるｍ＋１回目の並列分散処理では、第３乃至第４勾配に基づいて重み係数が更新され、グループ１におけるｎ＋１回目の並列分散処理では、第１乃至第４勾配に基づいて重み係数がさらに更新されるものとして説明した。
【０１４０】
しかしながら、この「グループ２における勾配の算出がグループ１における勾配の算出よりも早い場合」には、サーバノード２０がグループ１における勾配算出結果（グループ１の代表ノード３０から送信された勾配）を受信するより先にグループ２における勾配算出結果（グループ２の代表ノード４０から送信された勾配）受信する場合を含むものとする。
【０１４１】
これによれば、例えばグループ２おける勾配算出結果がグループ１における勾配算出結果よりも先にサーバノード２０によって受信された場合には、グループ２におけるｍ＋１回目の並列分散処理（時間的に後の並列分散処理）では、当該グループ２における勾配算出結果（つまり、第３乃至第４勾配）に基づいて重み係数が更新され、グループ１におけるｎ＋１回目の並列分散処理では、グループ２における勾配算出結果（に基づいて更新された重み係数）及びグループ１における勾配算出結果（つまり、第１乃至第４勾配）に基づいて重み係数がさらに更新されることになる。
【０１４２】
すなわち、本実施形態においては、上記した各グループにおける勾配算出処理の順番（いずれのグループにおける勾配算出処理が早いか）という観点ではなく、いずれのグループにおける勾配算出処理の結果がサーバノード２０において早く受信されるか（サーバノード２０に早く送信されるか）という観点に基づいて重み係数が更新されるようにしても構わない。
【０１４３】
なお、上記したようにＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤにおいて例えばグループ１に属する複数のワーカノード３０は互いに同期して処理を実行するが、当該複数のワーカノード３０の各々の処理性能（に基づく処理速度）の差が大きい場合、グループ１の処理速度は、処理性能の低いワーカノード３０の処理速度の影響を受ける（つまり、処理性能の低いワーカノード３０の処理速度が支配的となる）。グループ２についても同様である。
【０１４４】
このため、同一のグループに属する複数のワーカノードの処理速度は同程度となるように構成するものとする。具体的には、グループ１に属する複数のワーカノード３０（代表ノード３０及び非代表ノード）間の処理速度の差は第１閾値以下となるようにし、グループ２に属する複数のワーカノード４０（代表ノード４０及び非代表ノード４０）間の処理速度の差は第２閾値以下となるようにする。なお、第１閾値及び第２閾値は、同じ値であってもよいし、異なる値であってもよい。
【０１４５】
また、図１１に示すように、例えばグループ１に属する複数のワーカノード３０の処理速度よりもグループ２に属する複数のワーカノード４０の処理速度が遅い場合には、グループ１に属するワーカノード３０の数を、グループ２に属するワーカノード４０の数よりも少なくするようにしてもよい。なお、複数のワーカノード３０の処理速度よりもグループ２に属する複数のワーカノード４０の処理速度が遅いとは、複数のワーカノード４０の処理速度の平均値が複数のワーカノード３０の処理速度の平均値よりも遅い場合であってもよいし、または、複数のワーカノード４０の各々の処理速度のうちの最も遅い処理速度が複数のワーカノード３０の処理速度のうちの最も遅い処理速度よりも遅い場合であってもよい。また、各ワーカノードの処理速度は、例えば当該ワーカノードのハードウェア性能等から算出されてもよい。
【０１４６】
また、グループ１に属する複数のワーカノード３０の処理速度よりもグループ２に属する複数のワーカノード４０の処理速度が遅い場合には、並列分散処理におけるグループ１の処理量（つまり、グループ１に割り当てられる学習データ量）を、グループ２の処理量（つまり、グループ２に割り当てられる学習データ量）よりも少なくする。この場合には、グループ１に属するワーカノード３０の数及びグループ２に属するワーカノード４０の数は同数であってもよい。
【０１４７】
すなわち、上記したような構成によれば、各グループに属するワーカノードの数または当該各グループの処理量（負荷）を調整することによって、各グループにおいて必要な処理時間を同程度にする（つまり、処理速度の差の影響を打ち消す）ことが可能となる。
【０１４８】
本実施形態においては、サーバノード２０、複数のワーカノード３０の各々及び複数のワーカノード４０の各々がそれぞれ１つの装置（マシン）によって実現される（つまり、各ノードと装置とが１対１の関係にある）ものとして説明したが、当該各ノードは、１つの装置内で実行される１プロセスまたはスレッドとして実現されていても構わない。すなわち、本実施形態に係るシステム（サーバノード２０、複数のワーカノード３０及び複数のワーカノード４０）は、１つの装置によって実現することも可能である。また、本実施形態に係るシステムは、ノードの数とは異なる数の複数の装置によって実現されることも可能である。
【０１４９】
すなわち、本実施形態において、１つのノードは１つのコンピュータ（サーバ）であってもよいし、複数のノードが１つのコンピュータに実装されてもよいし、１つのノードが複数のコンピュータで実装されていてもよい。なお、本実施形態においては、上記したように１つのシステムには２以上のグループがあればよく、１つのグループには２以上のノードがあれよい。
【０１５０】
また、本実施形態においては、バッチサイズ非依存並列方式として非同期型の並列分散学習方式であるＡｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤについて説明したが、例えばＥｌａｓｔｉｃ  Ａｖｅｒａｇｉｎｇ  ＳＧＤ等の他の方式が採用されても構わない。
【０１５１】
また、本実施形態においては、第一階層及び第２階層において異なる方式（アルゴリズム）の並列分散学習処理が実行されるものとして説明したが、組み合わせるアルゴリズムによっては例えば３つ以上の階層で並列分散学習処理が実行される構成としてもよい。
【０１５２】
（第２の実施形態）
次に、第２の実施形態について説明する。なお、本実施形態に係るシステムは、前述した第１の実施形態と同様に、階層的に異なる学習処理を実行可能な構成を有する。
【０１５３】
すなわち、第一階層においては複数のワーカノードが属する各グループ内でＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによるミニバッチ法の並列分散処理が行われ、第二階層においては各グループの代表ノード同士でバッチサイズ非依存並列分散処理（非同期型の並列分散方式）が行われる。
【０１５４】
図１２は、本実施形態に係るシステム（以下、本システムと表記）の構成の一例を示す。図１２に示すように、本システム１０は、複数のワーカノード３０及び複数のワーカノード４０を備える。
【０１５５】
前述した第１の実施形態においてはサーバノード２０を備える構成であるが、本実施形態は、当該サーバノード２０を備えない点で、前述した第１の実施形態とは異なる。なお、複数のワーカノード３０がグループ１に属しており、複数のワーカノード４０がグループ２に属している点については、前述した第１の実施形態と同様である。
【０１５６】
グループ１に属する複数のワーカノード３０のうちの１つのワーカノード（以下、グループ１の代表ノードと表記）３０は、他のグループ２に属する複数のワーカノード４０のうちの１つのワーカノード（以下、グループ２の代表ノードと表記）４０と通信可能に接続される。
【０１５７】
なお、複数のワーカノード３０のうち、グループ１の代表ノード３０以外のワーカノード３０は、グループ１の非代表ノード３０と称する。同様に、複数のワーカノード４０のうち、グループ２の代表ノード４０以外のワーカノード４０は、グループ２の非代表ノード４０と称する。
【０１５８】
本実施形態において、第一階層では、グループ１（複数のワーカノード３０）及びグループ２（複数のワーカノード４０）内でそれぞれＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる並列分散学習処理が実行される。また、第二階層では、グループ１の代表ノード３０及びグループ２の代表ノード４０同士でバッチサイズ非依存並列分散方式による並列分散学習処理が実行される。
【０１５９】
なお、図１２においてはグループ１及びグループ２にそれぞれ３つのワーカノードが属している例が示されているが、グループ１及びグループ２には２つ以上のワーカノードが属していればよい。また、図１２においては２つのグループのみが示されているが、本システムにおいては、３つ以上のグループを備えていてもよい。
【０１６０】
複数のワーカノード３０及び４０のシステム構成については、前述した第１の実施形態と同様であるため、ここでは詳しい説明を省略する。
【０１６１】
以下、複数のワーカノード３０及び４０のうち、グループ１の代表ノード３０の機能構成の一例について説明する。なお、本実施形態におけるグループ１の代表ノード３０の機能構成については便宜的に図６を用いて説明するが、ここでは前述した第１の実施形態におけるグループ１の代表ノード３０と異なる部分について主に述べる。
【０１６２】
図６に示すように、代表ノード３０は、受信制御部３１、学習データ格納部３２、重み係数格納部３３、算出部３４及び送信制御部３５を含む。
【０１６３】
受信制御部３１は、グループ１の非代表ノード３０において算出された勾配を、当該非代表ノード３０から受信する。
【０１６４】
学習データ格納部３２には、グループ１の代表ノード３０に割り当てられた学習データが格納される。重み係数格納部３３には、目的関数の重み係数が格納されている。
【０１６５】
算出部３４は、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数を用いて、目的関数の重み係数を更新するための勾配を算出する。
【０１６６】
算出部３４は、受信制御部３１によって受信された勾配（つまり、非代表ノード３０において算出された勾配）及び算出部３４によって算出された勾配と、重み係数格納部３３に格納されている重み係数とを用いて、当該重み係数を更新する。この場合、算出部３４は、上述した式（１）に基づいて更新後の重み係数を算出する。算出部３４によって算出された重み係数は、重み係数格納部３３に格納されている重み係数と置換される。これにより、グループ１の代表ノード３０の重み係数が更新される。
【０１６７】
送信制御部３５は、算出部３４によって算出された勾配を、グループ１の非代表ノード３０に送信する。
【０１６８】
また、送信制御部３５は、グループ１の非代表ノード３０において算出された勾配及び算出部３４によって算出された勾配（つまり、代表ノード３０において算出された勾配）を、他のグループ（例えば、グループ２）の代表ノードに送信する。
【０１６９】
ここで、グループ１の非代表ノード３０において算出された勾配及びグループ１の代表ノード３０において算出された勾配は上記したようにグループ２の代表ノード４０に送信されるが、同様に、グループ２の非代表ノード４０において算出された勾配及びグループ２の代表ノード４０において算出された勾配はグループ１の代表ノード３０に送信される。
【０１７０】
グループ２の非代表ノード４０において算出された勾配及び代表ノード４０において算出された勾配がグループ１の代表ノード３０（受信制御部３１）において受信された場合、算出部３４は当該勾配を用いて重み係数格納部３３に格納されている重み係数を更新し、送信制御部３５は当該勾配をグループ１の非代表ノード３０に送信する。
【０１７１】
次に、グループ１の非代表ノード３０の機能構成の一例について説明する。なお、本実施形態におけるグループ１の非代表ノード３０の機能構成については便宜的に図６を用いて説明するが、ここでは前述した第１の実施形態におけるグループ１の非代表ノード３０と異なる部分について主に述べる。
【０１７２】
グループ１の非代表ノード３０は、上記したグループ１の代表ノード３０と同様に、図６に示す受信制御部３１、学習データ格納部３２、重み係数格納部３３、算出部３４及び送信制御部３５を含む。
【０１７３】
受信制御部３１は、グループ１の代表ノード３０において算出された勾配及び他の非代表ノード３０において算出された勾配を、当該代表ノード３０及び当該非代表ノード３０の各々から受信する。
【０１７４】
学習データ格納部３２には、当該非代表ノード３０に割り当てられた学習データが格納される。重み係数格納部３３には、目的関数の重み係数が格納されている。
【０１７５】
算出部３４は、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数を用いて、目的関数の重み係数を更新するための勾配を算出する。
【０１７６】
算出部３４は、受信制御部３１によって受信された勾配（つまり、代表ノード３０において算出された勾配及び他の非代表ノード３０において算出された勾配）及び算出部３４によって算出された勾配と、重み係数格納部３３に格納されている重み係数とを用いて、当該重み係数を更新する。この場合、算出部３４は、上述した式（１）に基づいて更新後の重み係数を算出する。算出部３４によって算出された重み係数は、重み係数格納部３３に格納されている重み係数と置換される。これにより、グループ１の非代表ノード３０の重み係数が更新される。
【０１７７】
なお、上記したようにグループ１の代表ノード３０に含まれる送信制御部３５によってグループ２の非代表ノード４０において算出された勾配及びグループ２の代表ノード４０において算出された勾配が送信された場合、当該勾配は、受信制御部３１によって受信され、重み係数の更新に用いられる。
【０１７８】
ここでは、グループ１の代表ノード３０及び非代表ノード３０について説明したが、本実施形態においては、グループ２の代表ノード４０及び非代表ノード４０についてもグループ１の代表ノード３０及び非代表ノード３０と同様の機能構成であるものとする。このため、以下においてグループ２の代表ノード４０及び非代表ノード４０の機能構成について述べる場合には図６を用いるものとする。
【０１７９】
以下、図１３のシーケンスチャートを参照して、本システムの処理手順の一例について説明する。ここでは、グループ１（複数のワーカノード３０）及びグループ２（複数のワーカノード４０）間の処理について主に説明し、各グループ（グループ１及びグループ２）内の各ワーカノードの処理について後述する。
【０１８０】
ここでは、グループ１に属する複数のワーカノード３０の各々に含まれる重み係数格納部３３には例えば重み係数Ｗ１０が格納されており、グループ２に属する複数のワーカノード４０の各々に含まれる重み係数格納部３３には例えば重み係数Ｗ２０が格納されているものとする。なお、重み係数Ｗ１０及び重み係数Ｗ２０は、同一の値であってもよいし、異なる値であってもよい。
【０１８１】
まず、グループ１（に属する複数のワーカノード３０）においては、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる勾配算出処理が行われる（ステップＳ４１）。この勾配算出処理によれば、グループ１に属する複数のワーカノード３０の各々は、当該ワーカノード３０に含まれる学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数Ｗ１０を用いて、目的関数の重み係数を更新するための勾配を算出する。なお、グループ１に属する複数のワーカノード３０の各々は、互いに同期して勾配算出処理を実行する。
【０１８２】
複数のワーカノード３０の各々は、ステップＳ４１において算出された勾配及び当該ワーカノード３０に含まれる重み係数格納部３３に格納されている重み係数Ｗ１０を用いて新たな重み係数（以下、重み係数Ｗ１１と表記）を算出する。これにより、複数のワーカノード３０の各々に含まれる重み係数格納部３３に格納されている重み係数Ｗ１０は、算出された重み係数Ｗ１１に更新される（ステップＳ４２）。
【０１８３】
ここで、ステップＳ４２の処理が実行されると、上記したステップＳ４１において算出された勾配がグループ１の代表ノード３０からグループ２の代表ノード４０に送信される（ステップＳ４３）。
【０１８４】
グループ２の代表ノード４０は、ステップＳ４３において送信された勾配を受信する。このように受信された勾配は、グループ２に属する複数のワーカノード４０において共有される。これにより、複数のワーカノード４０の各々は、グループ２の代表ノード４０において受信された勾配及び当該ワーカノード４０に含まれる重み係数格納部３３に格納されている重み係数Ｗ２０を用いて新たな重み係数（以下、重み係数Ｗ２１と表記）を算出する。これにより、複数のワーカノード４０の各々に含まれる重み係数格納部３３に格納されている重み係数Ｗ２０は、算出された重み係数Ｗ２１に更新される（ステップＳ４４）。
【０１８５】
また、グループ２（に属する複数のワーカノード４０）においては、グループ１と同様に、Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる勾配算出処理が行われる（ステップＳ４５）。この勾配算出処理によれば、グループ２に属する複数のワーカノード４０の各々は、当該ワーカノード４０に含まれる学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数Ｗ２１を用いて、目的関数の重み係数を更新するための勾配を算出する。なお、グループ２に属する複数のワーカノード４０の各々は、互いに同期して勾配算出処理を実行する。
【０１８６】
複数のワーカノード４０の各々は、ステップＳ４５において算出された勾配及び当該ワーカノード４０に含まれる重み係数格納部３３に格納されている重み係数２１を用いて新たな重み係数（以下、重み係数Ｗ２２と表記）を算出する。これにより、複数のワーカノード４０の各々に含まれる重み係数格納部３３に格納されている重み係数Ｗ２１は、算出された重み係数Ｗ２２に更新される（ステップＳ４６）。
【０１８７】
ここで、ステップＳ４６の処理が実行されると、上記したステップＳ４５において算出された勾配がグループ２の代表ノード４０からグループ１の代表ノード３０に送信される（ステップＳ４７）。
【０１８８】
グループ１の代表ノード３０は、ステップＳ４７において送信された勾配を受信する。このように受信された勾配は、グループ１に属する複数のワーカノード３０において共有される。これにより、複数のワーカノード３０の各々は、代表ノード３０において受信された勾配及び当該ワーカノード３０に含まれる重み係数格納部３３に格納されている重み係数Ｗ１１を用いて新たな重み係数（以下、重み係数Ｗ１２と表記）を算出する。これにより、複数のワーカノード４０の各々に含まれる重み係数格納部３３に格納されている重み係数１１は、算出された重み係数Ｗ１２に更新される（ステップＳ４８）。
【０１８９】
図１３においてはステップＳ４１〜Ｓ４８の処理について説明したが、当該図１３の処理は、複数のワーカノード３０及び４０の各々に含まれる学習データ格納部３２に格納されている学習データの全てについて勾配算出処理（つまり、並列分散学習処理）が実行されるまで継続して実行される。
【０１９０】
上記したように本実施形態によれば、グループ１及びグループ２内では互いに同期して処理が実行されるが、グループ１の処理とグループ２の処理とは非同期に実行される。
【０１９１】
すなわち、図１３に示すステップＳ４３においてはステップＳ４１において算出された勾配がグループ１の代表ノード３０からグループ２の代表ノード４０に送信されるが、当該勾配の送信タイミングは、例えばステップＳ４１及びＳ４２の処理後であればよく、グループ２（に属する複数のワーカノード４０）の処理によって影響されない。同様に、図１３に示すステップＳ４７における勾配の送信タイミングは、例えばステップＳ４５及びＳ４６の処理後であればよく、グループ１（に属する複数のワーカノード３０）の処理によって影響されない。
【０１９２】
以下、上記した図１３に示す処理が実行される際の、各グループの代表ノード及び非代表ノードの処理について説明する。
【０１９３】
まず、図１４のフローチャートを参照して、代表ノードの処理手順の一例について説明する。ここでは、グループ１の代表ノード３０の処理手順について説明する。
【０１９４】
グループ１の代表ノード３０に含まれる算出部３４は、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ１１）を用いて勾配を算出する（ステップＳ５１）。以下、代表ノード３０において算出された勾配を代表ノード３０の勾配と称する。
【０１９５】
ここで、グループ１の代表ノード３０がステップＳ５１の処理を実行する場合、当該グループ１の非代表ノード３０においては、後述するように当該代表ノード３０と同期して勾配が算出される。以下、このように非代表ノード３０において算出された勾配を非代表ノード３０の勾配と称する。
【０１９６】
この場合、グループ１の代表ノード３０の勾配及び非代表ノード３０の勾配がグループ１内で配布される（ステップＳ５２）。すなわち、グループ１の代表ノード３０の勾配が当該代表ノード３０からグループ１の非代表ノード３０（の各々）に送信されるとともに、グループ１の非代表ノード３０（の各々）の勾配がグループ１の代表ノード３０（に含まれる受信制御部３１）において受信される。
【０１９７】
次に、算出部３４は、ステップＳ５１において算出された勾配（代表ノード３０の勾配）及び受信制御部３１によって受信された勾配（非代表ノード３０の勾配）の平均値を算出する（ステップＳ５３）。以下、ステップＳ５３において算出された勾配の平均値をグループ１の平均勾配と称する。
【０１９８】
ステップＳ５３の処理が実行されると、算出部３４は、グループ１の平均勾配を用いて新たな重み係数を算出し、重み係数格納部３３に格納されている重み係数を当該算出された重み係数（例えば、重み係数Ｗ１１）に更新する（ステップＳ５４）。これにより、グループ１の代表ノード３０の重み係数がグループ１内のワーカノード３０の各々によって算出された勾配に基づく重み係数に更新される。
【０１９９】
ステップＳ５４の処理が実行されると、送信制御部３５は、グループ１の平均勾配をグループ２の代表ノード４０に送信する（ステップＳ５５）。
【０２００】
上記したステップＳ５１〜Ｓ５５の処理は、図１３に示すステップＳ４１〜Ｓ４３においてグループ１の代表ノード３０によって実行される。
【０２０１】
なお、後述するように図１４に示す処理は、グループ２の代表ノード４０においても同様に実行される。このため、例えばグループ２の代表ノード４０においてステップＳ５５の処理に相当する処理が実行された場合には、グループ１の代表ノード３０に含まれる受信制御部３１は、グループ２の平均勾配を受信することができる。
【０２０２】
ここで、受信制御部３１がグループ２の平均勾配を受信したか否かが判定される（ステップＳ５６）。
【０２０３】
グループ２の平均勾配を受信したと判定された場合（ステップＳ５６のＹＥＳ）、送信制御部３５は、受信フラグ「Ｔｒｕｅ」をグループ１の非代表ノード３０に送信する（ステップＳ５７）。
【０２０４】
また、送信制御部３５は、受信制御部３１によって受信されたグループ２の平均勾配を、グループ１の非代表ノード３０に送信する（ステップＳ５８）。
【０２０５】
ステップＳ５８の処理が実行されると、算出部３４は、グループ２の平均勾配を用いて新たな重み係数を算出し、重み係数格納部３３に格納されている重み係数を当該算出された重み係数（例えば、重み係数Ｗ１２）に更新する（ステップＳ５９）。これにより、グループ１の代表ノード３０の重み係数がグループ２内のワーカノード４０の各々によって算出された勾配に基づく重み係数に更新される。
【０２０６】
上記したステップＳ５６〜Ｓ５９の処理は、図１３に示すステップＳ４８においてグループ１の代表ノード３０によって実行される。
【０２０７】
なお、ステップＳ５６においてグループ２の平均勾配を受信していないと判定された場合（ステップＳ５６のＮＯ）、送信制御部３５は、受信フラグ「Ｆａｌｓｅ」を非代表ノード３０に送信する（ステップＳ６０）。
【０２０８】
上記した図１４に示す処理が実行されることにより、グループ１の代表ノード３０の重み係数は、グループ１に属する複数のワーカノード３０の各々によって算出された勾配（グループ１の平均勾配）を用いて更新されるとともに、グループ２に属する複数のワーカノード４０の各々によって算出された勾配（グループ２の平均勾配）を用いて更に更新される。
【０２０９】
なお、図示されていないが、図１４に示す処理は、上記した図１３に示す処理が継続して実行されている間は繰り返し実行される。
【０２１０】
次に、図１５のフローチャートを参照して、非代表ノードの処理手順の一例について説明する。ここでは、グループ１の非代表ノード３０の処理手順について説明する。
【０２１１】
非代表ノード３０に含まれる算出部３４は、上記した代表ノード３０における勾配の算出処理と同期して、学習データ格納部３２に格納されている学習データ及び重み係数格納部３３に格納されている重み係数（例えば、重み係数Ｗ１０）を用いて勾配を算出する（ステップＳ７１）。
【０２１２】
この場合、上記した代表ノード３０の勾配及びステップＳ７１において算出された勾配（非代表ノード３０の勾配）がグループ１内で配布される（ステップＳ７２）。すなわち、グループ１の非代表ノード３０の勾配が当該非代表ノード３０からグループ１の代表ノード３０（及び他の非代表ノード３０）に送信されるとともに、当該代表ノード３０（及び他の非代表ノード３０）の勾配が非代表ノード３０（に含まれる受信制御部３１）において受信される。
【０２１３】
次に、算出部３４は、ステップＳ７１において算出された勾配（非代表ノード３０の勾配）及び受信制御部３１によって受信された勾配（代表ノード３０及び他の非代表ノード３０の勾配）の平均値を算出する（ステップＳ７３）。なお、このステップＳ７３において算出される勾配の平均値は、上記した図１４に示すステップＳ５３において算出されたグループ１の平均勾配に相当する。
【０２１４】
ステップＳ７３の処理が実行されると、算出部３４は、グループ１の平均勾配を用いて新たな重み係数を算出し、重み係数格納部３３に格納されている重み係数を当該算出された重み係数（例えば、重み係数Ｗ１１）に更新する（ステップＳ７４）。これにより、グループ１の非代表ノード３０の重み係数がグループ１内のワーカノード３０の各々によって算出された勾配に基づく重み係数に更新される。
【０２１５】
上記したステップＳ７１〜Ｓ７４の処理は、図１３に示すステップＳ４１及びＳ４２においてグループ１の非代表ノード３０によって実行される処理である。
【０２１６】
ここで、上記した図１４に示すステップＳ５７またはステップＳ６０において代表ノード３０から送信された受信フラグは、非代表ノード３０に含まれる受信制御部３１によって受信される。
【０２１７】
この場合、受信制御部３１によって受信フラグ「Ｔｒｕｅ」が受信されたか否かが判定される（ステップＳ７６）。
【０２１８】
受信フラグ「Ｔｒｕｅ」が受信されたと判定された場合（ステップＳ７６のＹＥＳ）、受信制御部３１は、図１４に示すステップＳ５８においてグループ１の代表ノード３０から送信されたグループ１の平均勾配を受信する（ステップＳ７７）。
【０２１９】
ステップＳ７７の処理が実行されると、算出部３４は、グループ２の平均勾配を用いて新たな重み係数を算出し、重み係数格納部３３に格納されている重み係数を当該算出された重み係数（例えば、重み係数Ｗ１２）に更新する（ステップＳ７８）。これにより、グループ１の非代表ノード３０の重み係数がグループ２内のワーカノード４０の各々によって算出された勾配に基づく重み係数に更新される。
【０２２０】
上記したステップＳ７５〜Ｓ７８の処理は、図１３に示すステップＳ４８においてグループ１の非代表ノード３０によって実行される。
【０２２１】
なお、ステップＳ７６において受信フラグ「Ｔｒｕｅ」が受信されていない（つまり、受信フラグ「Ｆａｌｓｅ」が受信されている）と判定された場合（ステップＳ７６のＮＯ）、グループ２の平均勾配が受信されないため、ステップＳ７７及びＳ７８の処理は実行されない。
【０２２２】
上記した図１５の処理が実行されることにより、グループ１の非代表ノード３０の重み係数は、グループ１に属する複数のワーカノード３０の各々によって算出された勾配（グループ１の平均勾配）を用いて更新されるとともに、グループ２に属する複数のワーカノード４０の各々によって算出された勾配（グループ２の平均勾配）を用いて更に更新される。
【０２２３】
なお、図示されていないが、図１５に示す処理は、図１３に示す処理が継続して実行されている間は繰り返し実行される。
【０２２４】
上記したようにグループ１においては、当該グループ１に属する全てのワーカノード３０間で勾配を共有し、当該各ワーカノード３０においてグループ１の平均勾配を算出する処理が実行される。この場合、ＭＰＩで定義されるＡｌｌｒｅｄｕｃｅと称される集団通信アルゴリズム（ＭＰＩ＿Ａｌｌｒｅｄｕｃｅ）を用いることで、当該各ワーカノード３０間での勾配の送信と平均勾配（全ワーカノード３０の勾配和）の算出処理を効率的に実行することが可能である。ここでは、ＭＰＩ＿Ａｌｌｒｅｄｕｃｅを用いる場合について説明したが、当該ＭＰＩ＿Ａｌｌｒｅｄｕｃｅと同程度の他の処理が実行されてもよい。
【０２２５】
ここでは、グループ１の代表ノード３０及び非代表ノード３０の処理について説明したが、グループ２の代表ノード４０及び非代表ノード４０においてもグループ１の代表ノード３０及び非代表ノード３０と同様の処理が実行される。
【０２２６】
本実施形態においては、グループ１（代表ノード３０及び非代表ノード３０）による勾配の算出がグループ２（代表ノード４０及び非代表ノード４０）による勾配の算出よりも早い場合、グループ１において算出された勾配はグループ２の代表ノード４０に送信される。この場合、グループ２の代表ノード４０（及び非代表ノード４０）は、並列分散学習処理においてグループ１の平均勾配に基づいて重み係数を算出（更新）する。
【０２２７】
また、グループ２による勾配の算出がグループ１による勾配の算出よりも早い場合、グループ２において算出された勾配はグループ１の代表ノード３０に送信される。この場合、グループ１の代表ノード３０（及び非代表ノード３０）は、並列分散処理においてグループ２の平均勾配に基づいて重み係数を算出（更新）する。
【０２２８】
上記したように本実施形態においては、第一階層として、複数のワーカノード３０及び４０を複数のグループ（グループ１及びグループ２）に分割し、当該グループ内で集団通信型Ｓｙｎｃｈｒｏｎｏｕｓ−ＳＧＤによる並列分散学習処理を行う。この第一階層においては、グループ内のワーカノード間で勾配を共有し、当該ワーカノードの各々において平均勾配が算出されて重み係数が更新される。このような第一階層によれば、同期コスト及びバッチサイズを抑制することが可能となる。
【０２２９】
また、第二階層として、第一階層における各グループの代表ノード同士でバッチサイズ非依存並列方式による並列分散学習処理を行う。この第二階層においては、各代表ノードは同期する必要がなく、高いスループットを得ることができる。
【０２３０】
すなわち、本実施形態においては、前述した第１の実施形態と同様に、例えばＳｙｎｃｈｒｏｎｏｕｓ−ＳＧＤとバッチサイズ非依存並列方式を階層的に組み合わせる構成により、並列分散学習処理における高いスケーラビリティを実現することができ、より大きな並列数での並列分散学習処理が可能となる。
【０２３１】
なお、本実施形態において説明した「グループ１による勾配の算出がグループ２による勾配の算出よりも早い場合」には、グループ２における勾配の算出より先にグループ２の代表ノード４０がグループ１において算出された勾配（グループ１における勾配算出結果）を受信する場合が含まれるものとする。
【０２３２】
これによれば、例えばグループ２において勾配が算出されるより先にグループ２の代表ノード４０がグループ１において算出された勾配を受信した場合、当該第１グループにおいては、当該グループ１において算出された勾配（つまり、第１乃至第２勾配）に基づいて重み係数が更新される。一方、グループ２においては、グループ１において算出された勾配に基づいて重み係数が更新された後に、グループ２において算出された勾配（つまり、第３乃至第４勾配）に基づいて重み係数が更に更新される。換言すれば、グループ２における勾配の算出より先にグループ２の代表ノード４０がグループ１において算出された勾配を受信した場合には、グループ１においては第１乃至第２勾配に基づいて重み係数が更新され、グループ２においては第１乃至第４勾配に基づいて重み係数が更新される。
【０２３３】
また、本実施形態において説明した「グループ２による勾配の算出がグループ１による勾配の算出よりも早い場合」には、グループ１における勾配の算出より先にグループ１の代表ノード３０がグループ２において算出された勾配（グループ２における勾配算出結果）を受信する場合が含まれるものとする。
【０２３４】
これによれば、例えばグループ１において勾配が算出されるより先にグループ１の代表ノード３０がグループ１において算出された勾配を受信した場合、当該第２グループにおいては、当該グループ２において算出された勾配（つまり、第３乃至第４勾配）に基づいて重み係数が更新される。一方、グループ１においては、グループ２において算出された勾配に基づいて重み係数が更新された後に、グループ１において算出された勾配（つまり、第１乃至第２勾配）に基づいて重み係数が更に更新される。換言すれば、グループ１における勾配の算出より先にグループ１の代表ノード３０がグループ２において算出された勾配を受信した場合には、グループ２においては第３乃至第４勾配に基づいて重み係数が更新され、グループ１においては第１乃至第４勾配に基づいて重み係数が更新される。
【０２３５】
すなわち、本実施形態においては、上記した各グループにおける勾配算出処理の順番（いずれのグループにおける勾配算出処理が早いか）という観点ではなく、いずれのグループにおける勾配算出処理の結果がグループ１またはグループ２の代表ノードにおいて早く受信されるかという観点に基づいて重み係数が更新されるようにしても構わない。
【０２３６】
なお、本実施形態においては、グループ内で勾配が共有されるものとして説明したが、例えばグループ内のワーカノードの各々において更新された重み係数が当該グループ内で共有されるような構成とすることも可能である。
【０２３７】
以上述べた少なくとも１つの実施形態によれば、並列分散学習処理における高いスケーラビリティを実現することが可能なシステム、プログラム及び方法を提供することができる。
【０２３８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。  
【符号の説明】
【０２３９】
１０…システム、２０…サーバノード、２１，３２…学習データ格納部、２２…データ割当部、２３，３５…送信制御部、２４，３３…重み係数格納部、２５，３１…受信制御部、２６，３４…算出部、３０，４０…ワーカーノード、２０１，３０１…ＣＰＵ、２０２，３０２…システムコントローラ、２０３，３０３…主メモリ、２０４，３０４…ＢＩＯＳ−ＲＯＭ、２０５，３０６…不揮発性メモリ、２０６，３０６…通信デバイス、２０７，３０７…ＥＣ。
【図１】
2019109875.tif 000003
【図２】
2019109875.tif 000004
【図３】
2019109875.tif 000005
【図４】
2019109875.tif 000006
【図５】
2019109875.tif 000007
【図６】
2019109875.tif 000008
【図７】
2019109875.tif 000009
【図８】
2019109875.tif 000010
【図９】
2019109875.tif 000011
【図１０】
2019109875.tif 000012
【図１１】
2019109875.tif 000013
【図１２】
2019109875.tif 000014
【図１３】
2019109875.tif 000015
【図１４】
2019109875.tif 000016
【図１５】
2019109875.tif 000017