(57)【要約】【課題】機械学習におけるハイパーパラメータの探索を効率化する。【解決手段】複数の演算部それぞれにおいて、ニューラルネットワークを示すモデルであって共通の第１の重みを含むモデルに、演算部によって異なる第１のデータを入力し、第１の重みに対する誤差勾配を算出し、複数の演算部で算出された誤差勾配を統合する。記憶部に第１の重みを保持して、演算部によって異なるハイパーパラメータ値と統合した誤差勾配と第１の重みとに基づいて、モデルの重みを第２の重みに更新する。モデルに共通の第２のデータを入力し、複数の演算部の評価結果を比較して共通のハイパーパラメータ値を選択する。選択したハイパーパラメータ値と統合した誤差勾配と記憶部に保持した第１の重みとに基づいて、モデルの重みを第３の重みに更新する。【選択図】図１
2020191017.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算部と、前記複数の演算部に対応する複数の記憶部と、
を有し、前記複数の演算部それぞれは、
ニューラルネットワークを示すモデルであって前記複数の演算部のうちの他の演算部と共通の第１の重みを含むモデルに、前記他の演算部と異なる第１のデータを入力し、前記モデルの出力に基づいて前記第１の重みに対する誤差勾配を算出し、前記誤差勾配と前記他の演算部で算出された他の誤差勾配とを統合し、
前記複数の記憶部のうちの自身の演算部に対応する記憶部に前記第１の重みを保持して、前記他の演算部と異なるハイパーパラメータ値と前記統合した誤差勾配と前記第１の重みとに基づいて、前記モデルの重みを第２の重みに更新し、
前記モデルに前記他の演算部と共通の第２のデータを入力して前記モデルの出力の精度を評価し、前記精度の評価結果と前記他の演算部の評価結果とを比較して、前記他の演算部と共通のハイパーパラメータ値を選択し、
前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第１の重みとに基づいて、前記モデルの重みを第３の重みに更新する、
情報処理装置。
【請求項２】
前記複数の演算部に対応する複数のハイパーパラメータ値のうち、出力の精度が最高である演算部に対応するハイパーパラメータ値が、前記他の演算部と共通のハイパーパラメータ値として選択される、
請求項１記載の情報処理装置。
【請求項３】
前記他の演算部と異なるハイパーパラメータ値は、前記他の演算部と共通のハイパーパラメータ基本値に前記他の演算部と異なる調整係数を適用することで生成される、
請求項１記載の情報処理装置。
【請求項４】
前記複数の演算部それぞれが実行するプロセスに、識別情報が割り当てられ、
前記自身の演算部が実行するプロセスに対応する自身の識別情報から、前記他の演算部と異なるハイパーパラメータ値が決定され、
前記精度の評価結果と前記他の演算部の評価結果との間の比較に基づいて、前記他の演算部と共通である１つの識別情報が選択され、前記選択された１つの識別情報から、前記他の演算部と共通のハイパーパラメータ値が決定される、
請求項１記載の情報処理装置。
【請求項５】
前記モデルは複数の第１の重みを含み、
前記複数の第１の重みのうち、誤差勾配が未算出の第１の重みに対する誤差勾配の算出と、前記複数の演算部の間での算出済みの誤差勾配の転送とが、並列に実行される、
請求項１記載の情報処理装置。
【請求項６】
複数の演算部を有するコンピュータが、
前記複数の演算部それぞれにおいて、ニューラルネットワークを示すモデルであって前記複数の演算部の間で共通の第１の重みを含むモデルに、前記複数の演算部の間で異なる第１のデータを入力し、前記モデルの出力に基づいて前記第１の重みに対する誤差勾配を算出し、前記複数の演算部で算出された前記誤差勾配を統合し、
前記複数の演算部それぞれにおいて、自身の演算部に対応する記憶部に前記第１の重みを保持して、前記複数の演算部の間で異なるハイパーパラメータ値と前記統合した誤差勾配と前記第１の重みとに基づいて、前記モデルの重みを第２の重みに更新し、
前記複数の演算部それぞれにおいて、前記モデルに前記複数の演算部の間で共通の第２のデータを入力して前記モデルの出力の精度を評価し、前記複数の演算部の前記評価結果を比較して、前記複数の演算部の間で共通のハイパーパラメータ値を選択し、
前記複数の演算部それぞれにおいて、前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第１の重みとに基づいて、前記モデルの重みを第３の重みに更新する、
情報処理方法。
【請求項７】
複数の演算部を有するコンピュータに、
前記複数の演算部それぞれにおいて、ニューラルネットワークを示すモデルであって前記複数の演算部の間で共通の第１の重みを含むモデルに、前記複数の演算部の間で異なる第１のデータを入力し、前記モデルの出力に基づいて前記第１の重みに対する誤差勾配を算出し、前記複数の演算部で算出された前記誤差勾配を統合し、
前記複数の演算部それぞれにおいて、自身の演算部に対応する記憶部に前記第１の重みを保持して、前記複数の演算部の間で異なるハイパーパラメータ値と前記統合した誤差勾配と前記第１の重みとに基づいて、前記モデルの重みを第２の重みに更新し、
前記複数の演算部それぞれにおいて、前記モデルに前記複数の演算部の間で共通の第２のデータを入力して前記モデルの出力の精度を評価し、前記複数の演算部の前記評価結果を比較して、前記複数の演算部の間で共通のハイパーパラメータ値を選択し、
前記複数の演算部それぞれにおいて、前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第１の重みとに基づいて、前記モデルの重みを第３の重みに更新する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
コンピュータを利用したデータ分析として、機械学習が行われることがある。機械学習では、結果が既知である複数のサンプルを示すデータをコンピュータに入力する。コンピュータは、データを分析して、要因（説明変数や独立変数と言うことがある）と結果（目的変数や従属変数と言うことがある）との間の関係を一般化したモデルを生成する。生成されたモデルを用いることで、未知の結果を予測することができる。例えば、コンピュータは、写った物体の種類を示す教師ラベルが付与された複数の画像を分析して、画像から物体の種類を判別する画像認識モデルを生成する。
【０００３】
機械学習には、モデルとしてニューラルネットワーク（ＮＮ：Neural Network）を使用するものがある。典型的なニューラルネットワークは、それぞれ複数のノードを並べた入力層と出力層と１以上の中間層を含む。隣接する層に属する２つのノードが、重み付きのエッジで接続される。ノードはニューロンを表し、エッジはシナプスを表す。入力層に対して入力された説明変数の値が、エッジの重みに応じて後段の層に伝播し、出力層から目的変数の値が出力される。ニューラルネットワークは、重みを調整することで様々な関数を近似することができる。中間層が多いニューラルネットワークを多層ニューラルネットワーク（ＤＮＮ：Deep Neural Network）と言うことがあり、多層ニューラルネットワークを使用する機械学習を深層学習（ＤＬ：Deep Learning）と言うことがある。
【０００４】
ニューラルネットワークの典型的な機械学習では、コンピュータは、訓練データに含まれる特徴量を入力層に入力し、特徴量を入力層から出力層に向かって順方向に伝播し、特徴量に対する目的変数の推論結果を出力層から読み出す。コンピュータは、推論結果と訓練データに含まれる教師ラベルとの間の誤差を評価し、誤差情報を出力層から入力層に向かって逆方向に伝播することで、各エッジの重みに対する誤差勾配を算出する。コンピュータは、各エッジの重みを誤差勾配に基づいて更新する。このような重みの更新アルゴリズムを誤差逆伝播（Backpropagation）と言うことがある。
【０００５】
なお、階層型ニューラルネットワークの機械学習を、複数の演算器を用いて並列化する並列演算装置が提案されている。また、深層学習を、それぞれＧＰＵ（Graphics Processing Unit）を有する複数の計算機を用いて並列化する並列処理装置が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−９９００８号公報
【特許文献２】特開２０１８−１８２２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
機械学習では、機械学習の挙動を制御するハイパーパラメータが存在する。ハイパーパラメータ値は、機械学習によって生成されるモデルの精度に影響を与える。ユーザは、ハイパーパラメータ値を指定することができる。機械学習によっては、多数のハイパーパラメータが存在することもある。ニューラルネットワークの場合、中間層の数、各層のノードの数、活性化関数、学習率などの各種のハイパーパラメータが存在する。活性化関数は、前段の層の出力の重み付き和を、後段の層に対する出力に変換する関数である。学習率は、誤差勾配を重みに反映させる程度を表す。
【０００８】
精度の高いモデルが生成されるように、ハイパーパラメータ値を調整することが好ましい。ただし、最適なハイパーパラメータ値は、訓練データとして使用するデータセットに依存するため、事前にはわからないことが多い。また、ハイパーパラメータ値の候補は多数存在する。そこで、幾つかのハイパーパラメータ値で機械学習を試行し、モデルの精度が向上するハイパーパラメータ値を推測して機械学習を再実行することを繰り返すという、ハイパーパラメータ探索を行うことがある。
【０００９】
しかし、ニューラルネットワークを使用する機械学習は、計算量が大きく、１回の機械学習でも学習時間が長くなることが多い。そのため、ハイパーパラメータ値を変えながら機械学習を繰り返し実行すると、学習時間が膨大になってしまうという問題がある。
【００１０】
１つの側面では、本発明は、機械学習におけるハイパーパラメータの探索を効率化する情報処理装置、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、複数の演算部と複数の記憶部とを有する情報処理装置が提供される。複数の演算部それぞれは、ニューラルネットワークを示すモデルであって複数の演算部のうちの他の演算部と共通の第１の重みを含むモデルに、他の演算部と異なる第１のデータを入力し、モデルの出力に基づいて第１の重みに対する誤差勾配を算出し、誤差勾配と他の演算部で算出された他の誤差勾配とを統合する。複数の演算部それぞれは、複数の記憶部のうちの自身の演算部に対応する記憶部に第１の重みを保持して、他の演算部と異なるハイパーパラメータ値と統合した誤差勾配と第１の重みとに基づいて、モデルの重みを第２の重みに更新する。複数の演算部それぞれは、モデルに他の演算部と共通の第２のデータを入力してモデルの出力の精度を評価し、精度の評価結果と他の演算部の評価結果とを比較して、他の演算部と共通のハイパーパラメータ値を選択する。複数の演算部それぞれは、選択したハイパーパラメータ値と統合した誤差勾配と対応する記憶部に保持した第１の重みとに基づいて、モデルの重みを第３の重みに更新する。
【００１２】
また、１つの態様では、コンピュータが実行する情報処理方法が提供される。また、１つの態様では、コンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【００１３】
１つの側面では、機械学習におけるハイパーパラメータの探索を効率化できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理装置の例を説明する図である。
【図２】第２の実施の形態の情報処理装置のハードウェア例を示す図である。
【図３】ニューラルネットワークの例を示す図である。
【図４】ニューラルネットワークの学習例を示す図である。
【図５】ニューラルネットワークの学習の並列化例を示す図である。
【図６】第２の実施の形態の機械学習のフェーズ例を示す図である。
【図７】基本値テーブルおよび調整係数テーブルの例を示す図である。
【図８】ｔｒｙ＿ｕｐｄａｔｅの計算例を示す図である。
【図９】ｔｒｙ＿ｕｐｄａｔｅのデータフロー例を示す図である。
【図１０】ｆｏｒｗａｒｄ２およびａｎｎｏｕｎｃｅの例を示す図である。
【図１１】ｒｅｖｅｒｔ＿ｕｐｄａｔｅの計算例を示す図である。
【図１２】ｒｅｖｅｒｔ＿ｕｐｄａｔｅのデータフロー例を示す図である。
【図１３】第２の実施の形態の情報処理装置の機能例を示すブロック図である。
【図１４】機械学習の手順例を示すフローチャートである。
【図１５】機械学習の手順例を示すフローチャート（続き）である。
【図１６】機械学習のデータ入出力例を示す図である。
【図１７】機械学習の他のフェーズ例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１６】
図１は、第１の実施の形態の情報処理装置の例を説明する図である。
第１の実施の形態の情報処理装置１０は、ニューラルネットワークを使用する機械学習を、複数の演算部を用いて並列化する。ニューラルネットワークは、多くの中間層を含む多層ニューラルネットワークでもよく、機械学習は、多層ニューラルネットワークを使用する深層学習でもよい。ニューラルネットワークは、画像から物体の種類を判別する画像認識モデルでもよく、畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）でもよい。情報処理装置１０を、機械学習装置やコンピュータなどと言うこともできる。情報処理装置１０は、クライアント装置でもよいしサーバ装置でもよい。
【００１７】
情報処理装置１０は、演算部１１，１１−１を含む複数の演算部と、演算部１１，１１−１に対応する記憶部１２，１２−１を含む複数の記憶部とを有する。演算部１１は、記憶部１２を使用し、演算部１１−１は記憶部１２−１を使用する。
【００１８】
演算部１１，１１−１は、例えば、ＧＰＵ、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）などのプロセッサである。ＧＰＵは、ＧＰＧＰＵ（General Purpose Computing on Graphics Processing Unit）として用いるプロセッサであってもよい。プロセッサは、メモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。記憶部１２，１２−１は、例えば、揮発性の半導体メモリである。記憶部１２，１２−１は、ＲＡＭ（Random Access Memory）でもよく、ＧＰＵメモリでもよい。ただし、記憶部１２，１２−１が不揮発性ストレージであってもよい。
【００１９】
演算部１１，１１−１を含む複数の演算部は、それぞれ以下の処理を繰り返し実行する。ここでは、主に演算部１１の視点で処理を説明する。
演算部１１は、モデル１３を保持する。モデル１３は、例えば、記憶部１２に記憶されている。モデル１３は、ニューラルネットワークを示し、ニューラルネットワークの重みを含む。ニューラルネットワークは、それぞれ複数のノードを並べた入力層と出力層と１以上の中間層を含む。隣接する層に属する２つのノードが、重み付きのエッジで接続される。この時点では、モデル１３の重みは、重み１４（第１の重み）に設定されている。重み１４は、複数の演算部の間で共通の重みである。なお、演算部１１−１は、モデル１３−１を保持する。モデル１３−１は、例えば、記憶部１２−１に記憶されている。モデル１３−１の重みは、モデル１３と同様に重み１４に設定されている。よって、この時点では、モデル１３とモデル１３−１は同一のニューラルネットワークを示している。
【００２０】
演算部１１は、重み１４を含むモデル１３にデータ１７（第１のデータ）を入力し、モデル１３の出力を取得する。データ１７は、例えば、記憶部１２に記憶されている。データ１７は、説明変数に相当する特徴量と目的変数に相当する教師ラベルとをそれぞれ含む１以上のレコードである。このときのモデル１３の出力は、データ１７に対する目的変数の推論結果であり、画像認識モデルの場合は物体の認識結果である。ここで使用される第１のデータは演算部によって異なる。なお、演算部１１−１は、重み１４を含むモデル１３−１にデータ１７−１を入力し、モデル１３−１の出力を取得する。データ１７−１は、例えば、記憶部１２−１に記憶されている。入力データが異なるため、演算部１１が取得するモデル１３の出力と演算部１１−１が取得するモデル１３−１の出力は異なる。
【００２１】
演算部１１は、モデル１３の出力に基づいて、重み１４に対する誤差勾配を算出する。誤差勾配は、例えば、誤差逆伝播法によって算出される。誤差逆伝播法では、モデル１３の出力と教師ラベルとの間の誤差を評価し、誤差情報を出力層から入力層に向かって逆方向に伝播することで、エッジの重み１４に対する誤差勾配を算出する。誤差勾配は、誤差を重みの関数とみなした場合に、誤差を重みで偏微分したものに相当する。なお、演算部１１−１は、モデル１３−１の出力に基づいて、重み１４に対する誤差勾配を算出する。誤差の評価に使用する入力データが異なるため、このとき演算部１１が算出する誤差勾配と演算部１１−１が算出する誤差勾配は異なる。
【００２２】
演算部１１は、演算部１１で算出された誤差勾配と他の演算部で算出された誤差勾配とを統合して、統合誤差勾配を算出する。例えば、演算部１１は、他の演算部の少なくとも一部と通信し、複数の演算部の誤差勾配の合計を統合誤差勾配として算出する。他の演算部の誤差勾配の収集には、ＡｌｌＲｅｄｕｃｅ通信、ブロードキャスト通信、ＡｌｌＧａｔｈｅｒ通信などのコレクティブ通信（集団通信や集合通信と言うこともある）を利用することができる。演算部１１は、通信アルゴリズムによっては、他の全ての演算部と直接通信しなくてもよい。なお、演算部１１−１も統合誤差勾配を算出する。演算部１１で算出される統合誤差勾配と演算部１１−１で算出される統合誤差勾配は同じである。
【００２３】
演算部１１は、この時点のモデル１３の重み１４を、モデル１３の重みを更新しても失われないように記憶部１２で保持しておく。例えば、演算部１１は、記憶部１２内で重み１４をコピーして退避しておく。なお、演算部１１−１も、モデル１３−１の重み１４を、モデル１３−１の重みを更新しても失われないように記憶部１２−１で保持しておく。
【００２４】
演算部１１は、ハイパーパラメータ値１９と統合誤差勾配と重み１４とに基づいて、モデル１３の重みを重み１５（第２の重み）に更新する。ハイパーパラメータ値１９は、例えば、記憶部１２に記憶されている。ハイパーパラメータは、機械学習の挙動を制御する制御パラメータである。ハイパーパラメータ値１９は、機械学習で参照される様々なハイパーパラメータのうち、誤差勾配を重みに反映させる程度を表す学習率に関するものである。学習率が高いと重みの変化が大きくなり、学習率が低いと重みの変化が小さくなる。例えば、統合誤差勾配とハイパーパラメータ値１９の積が重み１４から減算される。ここで使用されるハイパーパラメータ値１９は演算部によって異なる。
【００２５】
なお、演算部１１−１は、ハイパーパラメータ値１９−１と統合誤差勾配と重み１４とに基づいて、モデル１３−１の重みを重み１５−１に更新する。ハイパーパラメータ値１９−１は、例えば、記憶部１２−１に記憶されている。記憶部１２が更にハイパーパラメータ値１９−１を記憶していてもよく、記憶部１２−１が更にハイパーパラメータ値１９を記憶していてもよい。使用されるハイパーパラメータ値が異なるため、演算部１１が算出する重み１５と演算部１１−１が算出する重み１５−１は異なる。
【００２６】
ハイパーパラメータ値１９，１９−１は、複数の演算部の間で共通のハイパーパラメータ基本値に、演算部によって異なる調整係数を適用することで生成したものであってもよい。例えば、ハイパーパラメータ基本値と調整係数の積がハイパーパラメータ値１９，１９−１になる。各演算部が使用する調整係数は、ＭＰＩ（Message Passing Interface）のランクなど演算部によって異なる識別情報から決定されてもよい。ハイパーパラメータ基本値および調整係数が記憶部１２，１２−１に記憶されていてもよく、複数の調整係数がテーブル形式で管理されていてもよい。また、複数の演算部それぞれにおいて、識別情報を調整係数に変換するための関数が定義されていてもよい。
【００２７】
演算部１１は、重み１５を含むモデル１３にデータ１８（第２のデータ）を入力し、モデル１３の出力を取得し、モデル１３の出力の精度を評価する。データ１８は、例えば、記憶部１２に記憶されている。ここで使用される第２のデータは複数の演算部の間で共通である。精度は、モデル１３の出力とデータ１８に含まれる教師ラベルとを比較することで評価できる。例えば、精度は、データ１８に含まれる複数のレコードのうち、モデル１３の推論結果と教師ラベルとが一致した正解レコードの割合である正確確率を示す。なお、演算部１１−１は、重み１５−１を含むモデル１３−１にデータ１８を入力し、モデル１３−１の出力を取得し、モデル１３−１の出力の精度を評価する。モデルの重みが異なるため、演算部１１の精度の評価結果と演算部１１−１の精度の評価結果は異なる。
【００２８】
演算部１１は、演算部１１の評価結果および他の演算部の評価結果を相互に比較し、比較に基づいて何れか１つのハイパーパラメータ値を選択する。このとき、演算部１１は、他の演算部の少なくとも一部と通信し、他の演算部の評価結果を収集する。他の演算部の評価結果の収集には、誤差勾配の収集と同様に、ＡｌｌＧａｔｈｅｒ通信、ＡｌｌＲｅｄｕｃｅ通信、ブロードキャスト通信などのコレクティブ通信を利用することができる。
【００２９】
ここで選択されるハイパーパラメータ値は、例えば、複数の演算部のうち最も高い精度が算出された演算部で使用されたハイパーパラメータ値である。演算部１１−１で算出された精度が最も高い場合、演算部１１−１で使用されたハイパーパラメータ値１９−１が選択される。演算部１１は、最も高い精度が算出された演算部に対応する識別情報を特定し、特定した識別情報から決定される調整係数を選択するようにしてもよい。選択した調整係数とハイパーパラメータ基本値から、ハイパーパラメータ値が決定される。
【００３０】
なお、演算部１１−１も、他の演算部の評価結果を収集して何れか１つのハイパーパラメータ値を選択する。演算部１１で収集される評価結果と演算部１１−１で収集される評価結果は同じである。そのため、演算部１１で選択されるハイパーパラメータ値と演算部１１−１で選択されるハイパーパラメータ値は同じである。ここで選択されるハイパーパラメータ値は、現時点で最良のパフォーマンスをもつハイパーパラメータ値である。
【００３１】
演算部１１は、選択したハイパーパラメータ値と、上記の統合誤差勾配と、記憶部１２に保持しておいた更新前の重み１４とに基づいて、モデル１３の重みを重み１６（第３の重み）に更新する。例えば、統合誤差勾配と選択したハイパーパラメータ値の積が重み１４から減算される。なお、演算部１１−１は、選択したハイパーパラメータ値と、上記の統合誤差勾配と、記憶部１２−１に保持しておいた重み１４とに基づいて、モデル１３−１の重みを重み１６に更新する。使用されるハイパーパラメータ値と統合誤差勾配と重み１４が同じため、演算部１１と演算部１１−１は同じ重みを算出することになる。
【００３２】
第１の実施の形態の情報処理装置１０によれば、複数の演算部において、共通の第１の重みをもつモデルと異なるデータから、異なる誤差勾配が算出され、それら異なる誤差勾配を統合した統合誤差勾配が算出される。複数の演算部において、第１の重みが退避され、異なるハイパーパラメータ値と統合誤差勾配と第１の重みに基づいて、異なる第２の重みに重みが更新される。複数の演算部において、異なる第２の重みをもつモデルと共通のデータから、異なる精度が算出され、それら異なる精度に応じて共通のハイパーパラメータ値が選択される。複数の演算部において、共通のハイパーパラメータ値と統合誤差勾配と退避しておいた第１の重みに基づいて、共通の第３の重みに重みが更新される。
【００３３】
これにより、ニューラルネットワークに訓練データを入力して重みを更新することを繰り返す１回の機械学習の中で、学習率に関するハイパーパラメータの探索を兼ねることができる。よって、ハイパーパラメータ探索を効率化でき、様々なハイパーパラメータの値を変えながら機械学習を再実行する反復回数を削減することができる。その結果、ハイパーパラメータ探索が収束するまでのトータルの学習時間を短縮できる。また、学習時間の制限の中で、モデルの精度を効率的に向上させることができる。
【００３４】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理装置のハードウェア例を示す図である。
【００３５】
第２の実施の形態の情報処理装置１００は、ニューラルネットワークを使用する機械学習を、複数のＧＰＵを用いて並列実行する。第２の実施の形態では、多層ニューラルネットワークを使用する深層学習が想定される。例えば、機械学習に使用される訓練データは、写った物体の種類を示す教師ラベルが付与された画像であり、ニューラルネットワークは、画像認識用の畳み込みニューラルネットワークである。情報処理装置１００を、機械学習装置、並列処理装置、並列コンピュータなどと言うこともできる。
【００３６】
情報処理装置１００は、システムボード１０１，１０２，１０３を含む複数のシステムボードを有する。複数のシステムボードはそれぞれ、複数のＣＰＵ、複数のＲＡＭ、複数のＨＤＤ（Hard Disk Drive）、複数のＧＰＵ、複数のＧＰＵメモリなどを有する。複数のシステムボードは、同様のハードウェアにより実装できる。以下では、複数のシステムボードのうち代表してシステムボード１０１を説明する。
【００３７】
システムボード１０１は、ＣＰＵ１１１，１１１−１、ＲＡＭ１１２，１１２−１、ＨＤＤ１１３，１１３−１、ＨＣＡ（Host Channel Adapter）１１４，１１４−１およびＰＣＩ（Peripheral Component Interconnection）スイッチ１１５，１１５−１を有する。また、システムボード１０１は、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３およびＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３を有する。
【００３８】
ＣＰＵ１１１（ＣＰＵ０）とＣＰＵ１１１−１（ＣＰＵ１）は、プロセッサ間接続インタフェースであるＵＰＩ（Ultra Path Interconnection）を介して接続されている。ＣＰＵ１１１は、ＲＡＭ１１２（ＲＡＭ０）、ＨＤＤ１１３（ＨＤＤ０）、ＨＣＡ１１４（ＨＣＡ０）およびＰＣＩスイッチ１１５と接続されている。ＣＰＵ１１１−１は、ＲＡＭ１１２−１（ＲＡＭ１）、ＨＤＤ１１３−１（ＨＤＤ１）、ＨＣＡ１１４−１（ＨＣＡ１）およびＰＣＩスイッチ１１５−１と接続されている。
【００３９】
ＰＣＩスイッチ１１５は、周辺機器接続インタフェースであるＰＣＩｅ（Peripheral Component Interconnection Express）を介して、ＧＰＵ１１６（ＧＰＵ０）およびＧＰＵ１１６−２（ＧＰＵ２）と接続されている。ＰＣＩスイッチ１１５−１は、ＰＣＩｅを介して、ＧＰＵ１１６−１（ＧＰＵ１）およびＧＰＵ１１６−３（ＧＰＵ３）と接続されている。ＧＰＵ１１６は、ＧＰＵメモリ１１７（ＧＰＵメモリ０）と接続されている。ＧＰＵ１１６−１は、ＧＰＵメモリ１１７−１（ＧＰＵメモリ１）と接続されている。ＧＰＵ１１６−２は、ＧＰＵメモリ１１７−２（ＧＰＵメモリ２）と接続されている。ＧＰＵ１１６−３は、ＧＰＵメモリ１１７−３（ＧＰＵメモリ３）と接続されている。
【００４０】
ＣＰＵ１１１，１１１−１は、プログラムの命令を実行するメインプロセッサである。ＣＰＵ１１１は、ＨＤＤ１１３などの不揮発性ストレージに記憶されたプログラムをＲＡＭ１１２にロードして実行する。ＣＰＵ１１１−１は、ＨＤＤ１１３−１などの不揮発性ストレージに記憶されたプログラムをＲＡＭ１１２−１にロードして実行する。
【００４１】
ＲＡＭ１１２，１１２−１は、プログラムやデータを一時的に記憶する揮発性の半導体メモリである。ＲＡＭ１１２は、ＣＰＵ１１１によって使用される。ＲＡＭ１１２−１は、ＣＰＵ１１１−１によって使用される。
【００４２】
ＨＤＤ１１３，１１３−１は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。ＨＤＤ１１３は、ＣＰＵ１１１によって使用される。ＨＤＤ１１３−１は、ＣＰＵ１１１−１によって使用される。なお、不揮発性ストレージとして、フラッシュメモリやＳＳＤ（Solid State Drive）など他の種類のデバイスを用いてもよい。
【００４３】
ＨＣＡ１１４，１１４−１は、システムボード１０２，１０３などの他のシステムボードのＣＰＵと通信を行う通信インタフェースである。ＨＣＡ１１４，１１４−１は、ＩｎｆｉｎｉＢａｎｄの通信規格に従って通信を行う。ＨＣＡ１１４，１１４−１は、情報処理装置１００の中で、有線通信装置であるＩｎｆｉｎｉＢａｎｄのスイッチとケーブルを介して接続されている。ＨＣＡ１１４は、ＣＰＵ１１１によって使用される。ＨＣＡ１１４−１は、ＣＰＵ１１１−１によって使用される。
【００４４】
ＰＣＩスイッチ１１５，１１５−１は、ＣＰＵとＧＰＵの間の通信を中継する中継装置である。ＰＣＩスイッチ１１５は、ＣＰＵ１１１によって使用される。ＰＣＩスイッチ１１５は、ＧＰＵ１１６，１１６−２とＰＣＩｅの通信規格に従って通信を行う。ＰＣＩスイッチ１１５−１は、ＣＰＵ１１１によって使用される。ＰＣＩスイッチ１１５−１は、ＧＰＵ１１６−１，１１６−３とＰＣＩｅの通信規格に従って通信を行う。
【００４５】
ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ハードウェアアクセラレータとしてのプロセッサであり、プログラムの命令を実行する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、画像処理に適した多数のＧＰＵコアを有する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ＧＰＧＰＵであってもよい。
【００４６】
ＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３は、ＧＰＵ用のプログラムやデータを一時的に記憶する揮発性の半導体メモリである。ＧＰＵメモリ１１７は、ＧＰＵ１１６によって使用される。ＧＰＵメモリ１１７−１は、ＧＰＵ１１６−１によって使用される。ＧＰＵメモリ１１７−２は、ＧＰＵ１１６−２によって使用される。ＧＰＵメモリ１１７−３は、ＧＰＵ１１６−３によって使用される。
【００４７】
ＧＰＵ１１６，１１６−１，１１６−２，１１６−３を用いて機械学習を行う場合、以下のようにして機械学習用のデータが転送される。ＨＤＤ１１３，１１３−１には、機械学習用のデータが記憶されている。ＨＤＤ１１３とＨＤＤ１１３−１には、同じデータが記憶されていてもよいし異なるデータが記憶されていてもよい。
【００４８】
ＣＰＵ１１１は、ＨＤＤ１１３に記憶されたデータのうち、少なくともＧＰＵ１１６によって使用されるデータを、ＰＣＩスイッチ１１５およびＧＰＵ１１６を介してＧＰＵメモリ１１７に転送する。ＧＰＵメモリ１１７に転送されるデータには、ＧＰＵ１１６によって使用されないデータが含まれていてもよい。
【００４９】
同様に、ＣＰＵ１１１は、ＨＤＤ１１３に記憶されたデータのうち、少なくともＧＰＵ１１６−２によって使用されるデータを、ＰＣＩスイッチ１１５およびＧＰＵ１１６−２を介してＧＰＵメモリ１１７−２に転送する。ＣＰＵ１１１−１は、ＨＤＤ１１３−１に記憶されたデータのうち、少なくともＧＰＵ１１６−１によって使用されるデータを、ＰＣＩスイッチ１１５−１およびＧＰＵ１１６−１を介してＧＰＵメモリ１１７−１に転送する。ＣＰＵ１１１−１は、ＨＤＤ１１３−１に記憶されたデータのうち、少なくともＧＰＵ１１６−３によって使用されるデータを、ＰＣＩスイッチ１１５−１およびＧＰＵ１１６−３を介してＧＰＵメモリ１１７−３に転送する。
【００５０】
ＨＤＤ１１３−１に記憶されたデータをＧＰＵ１１６，１１６−２が使用する場合、ＣＰＵ１１１は、ＣＰＵ１１１−１から当該データを取得すればよい。また、ＨＤＤ１１３に記憶されたデータをＧＰＵ１１６−１，１１６−３が使用する場合、ＣＰＵ１１１−１は、ＣＰＵ１１１から当該データを取得すればよい。
【００５１】
ＧＰＵ１１６，１１６−１，１１６−２，１１６−３が同一システムボード内の他のＧＰＵと通信する場合、ＣＰＵ１１１，１１１−１の少なくとも一方を経由して通信が行われる。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３が他のシステムボードのＧＰＵと通信する場合、ＨＣＡ１１４またはＨＣＡ１１４−１を経由して通信が行われる。
【００５２】
また、情報処理装置１００には、表示装置１２１や入力デバイス１２２を接続することができ、記録媒体１２３を読み込むことができる。例えば、情報処理装置１００は、表示装置１２１に接続される出力インタフェースを有する。表示装置１２１として、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。情報処理装置１００に、プリンタなど、表示装置１２１以外の出力デバイスが接続されてもよい。
【００５３】
また、例えば、情報処理装置１００は、入力デバイス１２２に接続される入力インタフェースを有する。入力デバイス１２２として、マウス、タッチパネル、キーボードなど、任意の種類の入力デバイスを使用することができる。情報処理装置１００に複数種類の入力デバイスが接続されてもよい。また、例えば、情報処理装置１００は、記録媒体１２３に記録されたプログラムやデータを読み取る媒体読み取りデバイスを有する。記録媒体１２３として、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。
【００５４】
媒体読み取りデバイスは、例えば、記録媒体１２３から読み取ったプログラムやデータを、ＲＡＭやＨＤＤなどの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵまたはＧＰＵによって実行される。なお、記録媒体１２３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１２３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００５５】
表示装置１２１への画面の出力、入力デバイス１２２からの入力信号の受信、および、記録媒体１２３の読み取りは、何れかのシステムボードのＣＰＵによって制御されてもよいし、情報処理装置１００が有する管理用ＣＰＵによって制御されてもよい。また、情報処理装置１００は、他の情報処理装置と通信する通信インタフェースを有してもよい。
【００５６】
次に、ニューラルネットワークについて説明する。
図３は、ニューラルネットワークの例を示す図である。
ニューラルネットワーク３１は、入力層および出力層を有し、入力層と出力層の間に複数の中間層を有する。入力層、中間層および出力層はそれぞれ、複数のノードを含む。入力層の各ノードは、１つ後の中間層の複数のノードとエッジで接続される。出力層の各ノードは、１つ前の中間層の複数のノードとエッジで接続される。中間層の各ノードは、１つ前の層の複数のノードとエッジで接続されると共に、１つ後の層の複数のノードとエッジで接続される。ノードはニューロンに相当し、エッジはシナプスに相当する。
【００５７】
中間層の数は、機械学習の挙動を制御するハイパーパラメータの１つによって指定される。中間層の数を指定するハイパーパラメータの値は、１回の機械学習の中では不変である。また、各層のノード数も、ハイパーパラメータの１つによって指定される。ノード数を指定するハイパーパラメータの値は、１回の機械学習の中では不変である。
【００５８】
各エッジには重みが付与される。機械学習の開始時には重みが初期値に設定され、機械学習を通じて重みが決定される。ニューラルネットワーク３１の重みは、学習すべきモデルパラメータである。重みを調整することで、ニューラルネットワーク３１は様々な関数を近似することができる。入力層に対しては、説明変数に相当する特徴量が入力される。入力層に対する入力は、入力層から複数の中間層を経由して出力層に伝播する。出力層からは、目的変数に相当する推論結果が出力される。画像認識の場合、入力層から画像の特徴量が入力され、出力層から画像認識結果が出力される。この場合、出力層の出力は、画像が特定の物体の種類（クラス）に属するか否かを示す二値データであることもあるし、画像が特定のクラスに属する確率を示す連続値データであることもある。
【００５９】
図４は、ニューラルネットワークの学習例を示す図である。
ニューラルネットワーク３１の重みは、一般的には、ｆｏｒｗａｒｄ、ｂａｃｋｗａｒｄおよびｕｐｄａｔｅを含む複数のフェーズを繰り返すことで学習される。
【００６０】
ｆｏｒｗａｒｄフェーズでは、データブロックに含まれる特徴量がニューラルネットワーク３１の入力層に対して入力され、そのデータブロックに対する推論結果がニューラルネットワーク３１の出力層から出力される。そして、推論結果とデータブロックに含まれる教師ラベルとの間の誤差を示す推論精度が算出される。
【００６１】
ここで、機械学習用データの使用方法として、第２の実施の形態ではミニバッチ学習を想定する。ミニバッチ学習では、１回に使用されるデータブロックが数十個程度のレコード（サンプル）を含んでいる。各レコードは、説明変数に相当する特徴量と目的変数に相当する教師ラベルとを含む。入力層に対してはレコード毎に特徴量が入力され、出力層からはレコード毎に推論結果が出力される。データブロックに対する推論精度は、複数のレコードの推論結果と教師ラベルとの間の誤差の平均を表す。ただし、第２の実施の形態の機械学習は、１回に１つのレコードを使用するオンライン学習に応用することもできる。
【００６２】
ｆｏｒｗａｒｄフェーズでは、入力層に対する入力が、以下のようにして出力層に向かって順方向に伝播する。ここでは、ニューラルネットワーク３１がノード４１，４２，４３，４４，４５を含むとする。ノード４３（ノードｊ）は、ある中間層に属している。ノード４１（ノードｉ０）およびノード４２（ノードｉ１）は、ノード４３の１つ前の層に属している。ノード４４（ノードｋ０）およびノード４５（ノードｋ１）は、ノード４３の１つ後の層に属している。ノード４１とノード４３の間のエッジには、重みｗｉ０ｊが付与されている。ノード４２とノード４３の間のエッジには、重みｗｉ１ｊが付与されている。ノード４３とノード４４の間のエッジには、重みｗｊｋ０が付与されている。ノード４３とノード４５の間のエッジには、重みｗｊｋ１が付与されている。
【００６３】
ノード４３に着目すると、ノード４１の出力値に重みｗｉ０ｊを乗じ、ノード４２の出力値に重みｗｉ１ｊを乗じ、これらを合算することで、１つ前の層の出力値の重み付き和が算出される。この重み付き和を所定の活性化関数に入力することで、ノード４３の出力値が算出される。活性化関数は、機械学習の挙動を制御するハイパーパラメータの１つによって指定される。活性化関数を指定するハイパーパラメータの値は、１回の機械学習の中では不変である。ノード４３の出力値は、ノード４４，４５に提供される。このようにして、入力層から複数の中間層を介して出力層に向かって数値が伝播する。
【００６４】
ｂａｃｋｗａｒｄフェーズでは、推論精度に応じた誤差情報が、ニューラルネットワーク３１の出力層から入力層に向かって伝播する。これにより、ニューラルネットワーク３１に含まれる複数の重みそれぞれに対して誤差勾配が算出される。誤差勾配は、誤差を重みの関数とみなした場合に、誤差を重みで偏微分したものに相当する。誤差勾配は、誤差が小さくなるように重みを更新するために用いられる。
【００６５】
ｂａｃｋｗａｒｄフェーズでは、誤差逆伝播法により、誤差勾配が出力層から入力層に向かって逆方向に伝播する。例えば、ノード４３と前の層との間の重みｗｉ０ｊ，ｗｉ１ｊに対する誤差勾配は、後の層との間の重みｗｊｋ０，ｗｊｋ１、それに対する誤差勾配、ｆｏｒｗａｒｄフェーズにおけるノード４３の出力値、前の層のノード４１，４２の出力値などから算出される。これにより、出力層に近い方の重みから順に誤差勾配が決定される。
【００６６】
ｕｐｄａｔｅフェーズでは、ｂａｃｋｗａｒｄフェーズで算出された誤差勾配が重みに反映されて、ニューラルネットワーク３１の重みが更新される。これにより、ニューラルネットワーク３１が、重みの異なるニューラルネットワーク３２になる。例えば、重みｗｉ０ｊ，ｗｉ１ｊ，ｗｊｋ０，ｗｊｋ１が重みｗ’ｉ０ｊ，ｗ’ｉ１ｊ，ｗ’ｊｋ０，ｗ’ｊｋ１に変わる。
【００６７】
誤差勾配を重みに反映させる際には、現在の重みから誤差勾配そのものを減算する代わりに、今回のデータブロックの影響を緩和するように誤差勾配が減算値に変換され、現在の重みから当該減算値が減算される。その際、後述するように、学習率に関する幾つかのハイパーパラメータが使用される。学習率が高いと、今回のデータブロックの影響が強く重みに反映され、学習率が低いと、今回のデータブロックの影響が緩やかに重みに反映されることになる。学習率に関するハイパーパラメータは、その値を変えるとニューラルネットワークの推論精度や重みの収束速度などが変わるという点で重要である。
【００６８】
ここで、誤差勾配の重みへの反映には加法性が成立する。あるデータブロックから算出された誤差勾配と別のデータブロックから算出された誤差勾配とを順に重みに反映させることは、２つの誤差勾配を合算して重みに反映させることと等価である。この加法性を利用して、ニューラルネットワークの学習を並列化することが考えられる。
【００６９】
図５は、ニューラルネットワークの学習の並列化例を示す図である。
第２の実施の形態では説明を簡単にするため、システムボード１０１が有するＧＰＵ１１６，１１６−１，１１６−２，１１６−３の４個のＧＰＵを用いて並列処理を行うことを想定する。ただし、ＧＰＵを２０００個使用するなど、並列度を上げることが可能である。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ＧＰＵ間通信にＭＰＩライブラリを使用する。ＧＰＵ１１６はランク０のプロセスを実行する。ＧＰＵ１１６−１はランク１のプロセスを実行する。ＧＰＵ１１６−２はランク２のプロセスを実行する。ＧＰＵ１１６−３はランク３のプロセスを実行する。
【００７０】
並列化した機械学習では、ｆｏｒｗａｒｄ、ｂａｃｋｗａｒｄ、ｃｏｍｍｕｎｉｃａｔｅおよびｕｐｄａｔｅを含む複数のフェーズを繰り返すことが考えられる。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ｆｏｒｗａｒｄ、ｂａｃｋｗａｒｄ、ｃｏｍｍｕｎｉｃａｔｅおよびｕｐｄａｔｅの各フェーズを並列に実行する。
【００７１】
ｆｏｒｗａｒｄフェーズを開始するにあたり、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一の重みを含むニューラルネットワークを保持している。ｆｏｒｗａｒｄフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、互いに異なるデータブロックをニューラルネットワークに入力して、異なる推論精度を並列に算出する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、それぞれ対応するＧＰＵメモリからデータブロックを読み出して使用する。ＧＰＵ１１６はデータブロックＡを使用し、ＧＰＵ１１６−１はデータブロックＢを使用し、ＧＰＵ１１６−２はデータブロックＣを使用し、ＧＰＵ１１６−３はデータブロックＤを使用する。
【００７２】
ｂａｃｋｗａｒｄフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、互いに異なる推論精度から異なる誤差勾配を並列に算出する。
ｃｏｍｍｕｎｉｃａｔｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、コレクティブ通信によりＧＰＵ１１６，１１６−１，１１６−２，１１６−３を合算する。通信結果として、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は同一の合算値を得る。ｃｏｍｍｕｎｉｃａｔｅフェーズでは、例えば、コレクティブ通信の１つであるＡｌｌＲｅｄｕｃｅ通信が使用される。ただし、同じくコレクティブ通信の１つであるＡｌｌＧａｔｈｅｒ通信またはブロードキャスト通信を使用することもできる。
【００７３】
例えば、ＧＰＵ１１６とＧＰＵ１１６−１が誤差勾配を相互に送信して合算する。これと並列に、ＧＰＵ１１６−２とＧＰＵ１１６−３が誤差勾配を相互に送信して合算する。次に、ＧＰＵ１１６とＧＰＵ１１６−２が、その時点の合算値を相互に送信して最終的な合算値を得る。これと並列に、ＧＰＵ１１６−１とＧＰＵ１１６−３が、その時点の合算値を相互に送信して最終的な合算値を得る。コレクティブ通信は並列化が可能である。
【００７４】
ｕｐｄａｔｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、合算結果である同一の誤差勾配をニューラルネットワークの重みに並列に反映させる。これにより、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一の重みを含むニューラルネットワークを保持していることになる。
【００７５】
以上のｆｏｒｗａｒｄ、ｂａｃｋｗａｒｄ、ｃｏｍｍｕｎｉｃａｔｅおよびｕｐｄａｔｅの４つのフェーズが、データブロックを変えながら繰り返し実行される。次のｆｏｒｗａｒｄフェーズでは、ＧＰＵ１１６はデータブロックＦを使用し、ＧＰＵ１１６−１はデータブロックＧを使用し、ＧＰＵ１１６−２はデータブロックＨを使用し、ＧＰＵ１１６−３はデータブロックＩを使用する。
【００７６】
ところで、ニューラルネットワークの機械学習では、中間層の数、各層のノード数、活性化関数、学習率などの様々なハイパーパラメータが使用される。推論精度の高いニューラルネットワークが生成されるように、ハイパーパラメータ値を調整することが好ましい。ただし、最適なハイパーパラメータ値は、機械学習に使用するデータセットに依存するため、事前にはわからない。また、ハイパーパラメータ値の候補は多数存在する。そこで、幾つかのハイパーパラメータ値で機械学習を試行し、ニューラルネットワークの推論精度が向上するハイパーパラメータ値を推測して機械学習を再実行することを繰り返すという、ハイパーパラメータ探索が行われる。しかし、ニューラルネットワークの機械学習を繰り返し行うと、トータルの学習時間が非常に長くなってしまう。
【００７７】
そこで、第２の実施の形態では、トータルの学習時間が短縮されるようにハイパーパラメータ探索を支援する。具体的には、情報処理装置１００は、様々なハイパーパラメータのうち学習率に関するハイパーパラメータの探索を、複数のフェーズを繰り返す１回の機械学習の中で自動的に行われるようにする。これにより、学習率に関するハイパーパラメータについて好ましい値を早期に絞り込むことができる。
【００７８】
図６は、第２の実施の形態の機械学習のフェーズ例を示す図である。
第２の実施の形態の機械学習では、ｆｏｒｗａｒｄ１、ｂａｃｋｗａｒｄ、ｃｏｍｍｕｎｉｃａｔｅ、ｔｒｙ＿ｕｐｄａｔｅ、ｆｏｒｗａｒｄ２、ａｎｎｏｕｎｃｅおよびｒｅｖｅｒｔ＿ｕｐｄａｔｅの７つのフェーズが繰り返される。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、並列にこれら７つのフェーズを実行する。
【００７９】
ｆｏｒｗａｒｄ１フェーズを開始するにあたり、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一の重みを含むニューラルネットワークを保持している。ｆｏｒｗａｒｄ１フェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、互いに異なるデータブロックをニューラルネットワークに入力して、異なる推論精度を並列に算出する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、それぞれ対応するＧＰＵメモリからデータブロックを読み出して使用する。ＧＰＵ１１６はデータブロックＡを使用し、ＧＰＵ１１６−１はデータブロックＢを使用し、ＧＰＵ１１６−２はデータブロックＣを使用し、ＧＰＵ１１６−３はデータブロックＤを使用する。
【００８０】
ｂａｃｋｗａｒｄフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、互いに異なる推論精度から異なる誤差勾配を並列に算出する。
ｃｏｍｍｕｎｉｃａｔｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、コレクティブ通信によりＧＰＵ１１６，１１６−１，１１６−２，１１６−３を合算する。通信結果として、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は同一の合算値を得る。ｃｏｍｍｕｎｉｃａｔｅフェーズでは、例えば、コレクティブ通信の１つであるＡｌｌＲｅｄｕｃｅ通信が使用される。ただし、同じくコレクティブ通信の１つであるＡｌｌＧａｔｈｅｒ通信またはブロードキャスト通信を使用することもできる。
【００８１】
ｔｒｙ＿ｕｐｄａｔｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、合算結果である同一の誤差勾配をニューラルネットワークの重みに並列に反映させる。このとき、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、学習率に関するハイパーパラメータについて、実質的に互いに異なるハイパーパラメータ値を使用する。具体的には、ハイパーパラメータの基本値に、ランクに応じて異なる調整係数を乗ずることで、ハイパーパラメータ値を基本値から変動させる。ハイパーパラメータの基本値は、機械学習の開始時に指定され、１回の機械学習の中では不変である。異なる調整係数を使用することで、擬似的にハイパーパラメータ値が変わることになる。
【００８２】
学習率に関するハイパーパラメータ値が異なるため、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、異なる重みを含むニューラルネットワークを保持していることになる。また、後述するｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおいて、ｔｒｙ＿ｕｐｄａｔｅフェーズで更新される前の重みを使用するため、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、更新前の重みをＧＰＵメモリ内で退避しておく。
【００８３】
ｆｏｒｗａｒｄ２フェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一のデータブロックを互いに異なるニューラルネットワークに入力して、異なる推論精度を並列に算出する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、それぞれ対応するＧＰＵメモリから同一のデータブロックのコピーを読み出して使用する。ＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３には、データ転送時に同一のデータブロックがコピーされるようにしておく。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、データブロックＥを使用する。データブロックＥは、ｆｏｒｗａｒｄ１で使用されたデータブロックＡ，Ｂ，Ｃ，Ｄと異なることが好ましい。
【００８４】
ａｎｎｏｕｎｃｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、コレクティブ通信によりＧＰＵ１１６，１１６−１，１１６−２，１１６−３のｆｏｒｗａｒｄ２フェーズの推論精度を共有する。通信結果として、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、全てのＧＰＵの推論精度のコピーを得る。ａｎｎｏｕｎｃｅフェーズでは、例えば、コレクティブ通信の１つであるＡｌｌＧａｔｈｅｒ通信が使用される。ただし、同じくコレクティブ通信の１つであるＡｌｌＲｅｄｕｃｅ通信またはブロードキャスト通信を使用することもできる。そして、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、最高の推論精度が算出されたランク（ベストランク）を判定する。ＧＰＵ１１６，１１６−１，１１６−２，１１６−３の判定結果は同一である。
【００８５】
ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ｃｏｍｍｕｎｉｃａｔｅフェーズの合算結果である誤差勾配を、ｔｒｙ＿ｕｐｄａｔｅフェーズの更新前のニューラルネットワークの重みに対し並列に反映させる。このとき、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、学習率に関するハイパーパラメータについて同一のハイパーパラメータ値を使用する。具体的には、ハイパーパラメータの基本値に、ａｎｎｏｕｎｃｅフェーズで判定したベストランクに対応する調整係数を乗ずる。これにより、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一の重みを含むニューラルネットワークを保持していることになる。
【００８６】
以上の７つのフェーズが、データブロックを変えながら繰り返し実行される。次のｆｏｒｗａｒｄ１フェーズでは、ＧＰＵ１１６はデータブロックＦを使用し、ＧＰＵ１１６−１はデータブロックＧを使用し、ＧＰＵ１１６−２はデータブロックＨを使用し、ＧＰＵ１１６−３はデータブロックＩを使用する。次のｆｏｒｗａｒｄ２フェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３はデータブロックＪを使用する。
【００８７】
図７は、基本値テーブルおよび調整係数テーブルの例を示す図である。
情報処理装置１００は、基本値テーブル１５１と調整係数テーブル１５２を有する。
基本値テーブル１５１には、学習率に関するハイパーパラメータの基本値が登録される。後述する計算例では、学習率に関連して「ｌｒ」と「ｗｄ」と「ｍｏｍｅｎｔｕｍ」の３つのハイパーパラメータが使用される。そこで、基本値テーブル１５１には、この３つのハイパーパラメータに対応する３つの基本値が登録される。基本値テーブル１５１の基本値は、機械学習の開始時に与えられ、機械学習の途中で変化しない。
【００８８】
調整係数テーブル１５２には、ランクと調整係数が対応付けて登録される。学習率に関するハイパーパラメータ１つに対して１つの調整係数が与えられる。後述する計算例では、学習率に関連して「ｌｒ」と「ｗｄ」と「ｍｏｍｅｎｔｕｍ」の３つのハイパーパラメータが使用される。そこで、基本値テーブル１５１には、「ｌｒ」に対応する調整係数ｃ０と、「ｗｄ」に対応する調整係数ｃ１と、「ｍｏｍｅｎｔｕｍ」に対応する調整係数ｃ２の３つの調整係数が登録される。調整係数テーブル１５２では、複数の調整係数の値のセットが、複数のランクの間で重複しないように決定されている。ランクと調整係数の対応関係は、機械学習の開始時に与えられ、機械学習の途中で変化しない。
【００８９】
調整係数テーブル１５２は、例えば、以下のようにして生成することができる。まず、ハイパーパラメータ毎に調整係数の変動範囲を決定し、複数の調整係数に対応する複数の軸をもつ係数空間を定義する。例えば、３つのハイパーパラメータの調整係数に対応する三次元の係数空間を定義する。次に、機械学習に使用するＧＰＵの数であるランク数に応じて、格子幅を決定し、係数空間に均等に格子点を設定する。そして、係数空間の複数の格子点に対して異なるランクを割り当て、格子点が示す調整係数の値のセット（三次元の係数空間の場合は３つの調整係数の値のセット）をランクに対応付ける。これにより、できる限り離れたハイパーパラメータ値を複数のＧＰＵで試すことができる。
【００９０】
なお、図７では調整係数テーブル１５２に登録された調整係数は非負整数であるが、調整係数は０．０１刻み程度の実数になることがある。
また、調整係数テーブル１５２には、ランクに対応付けて選択回数が記録される。ただし、選択回数は調整係数テーブル１５２と切り離して記録することもできる。選択回数は、前述の７つのフェーズを繰り返す間にベストランクとして選択された回数である。ベストランクの選択回数は、学習率に関するハイパーパラメータの好ましい値を絞り込む上で有用な情報となるため、機械学習の結果に含めて記録される。
【００９１】
例えば、第２の実施の形態の機械学習の結果、１つまたは少数のランクの選択回数が特に多かったとする。その場合、当該１つまたは少数のランクに対応する調整係数と基本値の積が、学習率に関するハイパーパラメータの好ましい値と推測される。そのため、以降の機械学習では、学習率に関するハイパーパラメータについてはそれらの値に絞り込むことができ、他のハイパーパラメータの探索に注力することができる。
【００９２】
基本値テーブル１５１および調整係数テーブル１５２は、例えば、予め作成され、ＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３にコピーされて記憶される。ただし、調整係数テーブル１５２は、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３の間で生成方法を合意しておけば、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３がそれぞれ生成することもできる。また、ランクと調整係数の対応関係をテーブル形式で管理する代わりに、ランクから調整係数を算出する関数を定義することもできる。
【００９３】
次に、誤差勾配とハイパーパラメータから重みを更新する計算例を説明する。
図８は、ｔｒｙ＿ｕｐｄａｔｅの計算例を示す図である。
ここでは、確率的勾配降下法（ＳＧＤ：Stochastic Gradient Descent）を想定する。
【００９４】
ｔｒｙ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、数式５１のように記述することができる。数式５１において、Ｗ（ｔ）は時刻ｔにおける重みであり、Ｗ（ｔ−１）は時刻ｔ−１における重みであり、ΔＷ（ｔ−１）は時刻ｔ−１で算出された誤差勾配である。Ｖ（ｔ−１）は時刻ｔ−１における内部状態である。内部状態Ｖ（ｔ−１）は、重みＷ（ｔ）が直前の誤差勾配ΔＷ（ｔ−１）だけでなくそれ以前の誤差勾配も遅延して反映するように、繰り越される数値である。ただし、ｔｒｙ＿ｕｐｄａｔｅフェーズでは内部状態Ｖ（ｔ−１）は更新されない。
【００９５】
数式５１の「ｌｒ」には基本値テーブル１５１の基本値が代入され、調整係数ｃ０を乗じて使用される。数式５１の「ｗｄ」には基本値テーブル１５１の基本値が代入され、調整係数ｃ１を乗じて使用される。数式５１の「ｍｏｍｅｎｔｕｍ」には基本値テーブル１５１の基本値が代入され、調整係数ｃ２を乗じて使用される。ｌｒ＊ｃ０、ｗｄ＊ｃ１およびｍｏｍｅｎｔｕｍ＊ｃ２を、調整後のハイパーパラメータ値とみなすことができる。数式５１のＷ（ｔ），Ｗ（ｔ−１），ΔＷ（ｔ−１），Ｖ（ｔ−１）は、ニューラルネットワークに含まれる重みの数に相当する次元をもつベクトルである。数式５１のｌｒ，ｗｄ，ｍｏｍｅｎｔｕｍ，ｃｏ，ｃ１，ｃ２は、スカラ値である。
【００９６】
ｔｒｙ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム５２のように記述することもできる。疑似プログラム５２のようなプログラムが、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３それぞれで実行される。
【００９７】
各ＧＰＵは、自身のランクに対応する調整係数ｃ０，ｃ１，ｃ２の値を読み出す。調整係数ｃ０，ｃ１，ｃ２の値は、例えば、調整係数テーブル１５２から読み出される。次に、各ＧＰＵは、配列ｗｅｉｇｈｔに格納された現在の重みを配列ｔｅｍｐ＿ｗに退避する。次に、各ＧＰＵは、配列ｔｅｍｐ＿ｗに退避された重みにｗｄ＊ｃ１を乗じ、配列ｇｒａｄに格納された誤差勾配を加算し、ｌｒ＊ｃ０を乗じ、その結果を配列ｒｅｓｃａｌｅｄ＿ｇｒａｄに代入する。次に、各ＧＰＵは、配列ｓｔａｔｅに格納された内部状態にｍｏｍｅｎｔｕｍ＊ｃ２を乗じ、配列ｒｅｓｃａｌｅｄ＿ｇｒａｄの値を加算して減算値を得る。最後に各ＧＰＵは、配列ｔｅｍｐ＿ｗに退避された重みから上記の減算値を差し引いて、配列ｗｅｉｇｈｔに代入する。ここでは、配列ｓｔａｔｅの内部状態は更新されず、更新前の重みは配列ｔｅｍｐ＿ｗに退避されたままとなる。
【００９８】
疑似プログラム５２の配列演算では、異なる次元の配列要素の演算を互いに独立に実行することができる。そこで、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３はそれぞれ、複数のＧＰＵコアを用いて複数のスレッドを起動し、異なるスレッドを用いて異なる次元の配列要素の演算を並列に実行することが可能である。
【００９９】
この点で、ｔｒｙ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム５３のように記述することもできる。疑似プログラム５３によれば、各ＧＰＵにおいて最大でＮ個（Ｎは２以上の整数）のスレッドが起動され、それらスレッドを用いてＮ次元の配列要素の演算が並列化される。
【０１００】
図９は、ｔｒｙ＿ｕｐｄａｔｅのデータフロー例を示す図である。
データフロー６１は、ｔｒｙ＿ｕｐｄａｔｅフェーズにおけるデータの関係を示す。重みｗｅｉｇｈｔが重みｔｅｍｐ＿ｗにコピーされると共に、ランクｍｙ＿ｒａｎｋに対応付けられた調整係数ｃ０，ｃ１，ｃ２が読み出される。重みｔｅｍｐ＿ｗとハイパーパラメータ基本値ｌｒ，ｗｄと調整係数ｃ０，ｃ１の積が算出される。また、誤差勾配ｇｒａｄとハイパーパラメータ基本値ｌｒと調整係数ｃ０の積が算出される。また、内部状態ｓｔａｔｅとハイパーパラメータ基本値ｍｏｍｅｎｔｕｍと調整係数ｃ２の積が算出される。これら３つの積が合計され、重みｔｅｍｐ＿ｗから当該合計から差し引かれる。減算結果が重みｗｅｉｇｈｔとして上書きされる。
【０１０１】
図１０は、ｆｏｒｗａｒｄ２およびａｎｎｏｕｎｃｅの例を示す図である。
上記のｔｒｙ＿ｕｐｄａｔｅによる重みの更新の結果、ＧＰＵ１１６はニューラルネットワーク３３を保持している。ＧＰＵ１１６−１はニューラルネットワーク３３−１を保持している。ＧＰＵ１１６−２はニューラルネットワーク３３−２を保持している。ＧＰＵ１１６−３はニューラルネットワーク３３−３を保持している。
【０１０２】
ｆｏｒｗａｒｄ２フェーズでは、ＧＰＵ１１６は、データブロックＥをニューラルネットワーク３３に代入する。ここでは、ニューラルネットワーク３３の推論精度が４５％であるとする。ＧＰＵ１１６−１は、データブロックＥをニューラルネットワーク３３−１に代入する。ここでは、ニューラルネットワーク３３−１の推論精度が５０％であるとする。ＧＰＵ１１６−２は、データブロックＥをニューラルネットワーク３３−２に代入する。ここでは、ニューラルネットワーク３３−２の推論精度が４３％であるとする。ＧＰＵ１１６−３は、データブロックＥをニューラルネットワーク３３−３に代入する。ここでは、ニューラルネットワーク３３−３の推論精度が３２％であるとする。
【０１０３】
ａｎｎｏｕｎｃｅフェーズでは、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３の間でこれら推論精度が相互に通知される。その結果、ＧＰＵ１１６は推論精度セット３４を取得し、ＧＰＵ１１６−１は推論精度セット３４−１を取得し、ＧＰＵ１１６−２は推論精度セット３４−２を取得し、ＧＰＵ１１６−３は推論精度セット３４−３を取得する。推論精度セット３４，３４−１，３４−２，３４−３の内容は同一であり、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３が算出した推論精度を全て含む。
【０１０４】
ＧＰＵ１１６は、推論精度セット３４から最高の推論精度を達成したランクを検索し、推論精度５０％を達成したランク１をベストランクと判定する。同様に、ＧＰＵ１１６−１は、推論精度セット３４−１に基づいてランク１をベストランクと判定する。ＧＰＵ１１６−２は、推論精度セット３４−２に基づいてランク１をベストランクと判定する。ＧＰＵ１１６−３は、推論精度セット３４−３に基づいてランク１をベストランクと判定する。このように、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、同一のランクをベストランクと判定することになる。
【０１０５】
図１１は、ｒｅｖｅｒｔ＿ｕｐｄａｔｅの計算例を示す図である。
ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、数式５４のように記述することができる。重みＷ（ｔ）の計算方法は、基本的にｔｒｙ＿ｕｐｄａｔｅフェーズと同様である。ただし、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズでは、時刻ｔにおける内部状態Ｖ（ｔ）が更新される。内部状態Ｖ（ｔ）は減算値として使用され、重みＷ（ｔ）は重み（ｔ−１）と内部状態Ｖ（ｔ）の差として定義される。
【０１０６】
また、ｔｒｙ＿ｕｐｄａｔｅフェーズでは、自ランクに対応する調整係数ｃ０，ｃ１，ｃ２が使用されるのに対し、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズでは、ベストランクに対応する調整係数ｂ０，ｂ１，ｂ２が使用される。調整係数ｂ０は、調整係数テーブル１５２の調整係数ｃ０に対応する。調整係数ｂ１は、調整係数テーブル１５２の調整係数ｃ１に対応する。調整係数ｂ２は、調整係数テーブル１５２の調整係数ｃ２に対応する。ハイパーパラメータ「ｌｒ」については、その基本値に調整係数ｂ０を乗じた値が使用される。ハイパーパラメータ「ｗｄ」については、その基本値に調整係数ｂ１を乗じた値が使用される。ハイパーパラメータ「ｍｏｍｅｎｔｕｍ」については、その基本値に調整係数ｂ２を乗じた値が使用される。
【０１０７】
ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム５５のように記述することもできる。疑似プログラム５５のようなプログラムが、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３それぞれで実行される。
【０１０８】
各ＧＰＵは、ベストランクに対応する調整係数ｂ０，ｂ１，ｂ２の値を読み出す。調整係数ｂ０，ｂ１，ｂ２の値は、例えば、調整係数テーブル１５２から読み出される。次に、各ＧＰＵは、ｔｒｙ＿ｕｐｄａｔｅフェーズで配列ｔｅｍｐ＿ｗに退避しておいた重みにｗｄ＊ｂ１を乗じ、配列ｇｒａｄに格納された誤差勾配を加算し、ｌｒ＊ｂ０を乗じ、その結果を配列ｒｅｓｃａｌｅｄ＿ｇｒａｄに代入する。次に、各ＧＰＵは、配列ｓｔａｔｅに格納された内部状態にｍｏｍｅｎｔｕｍ＊ｂ２を乗じ、配列ｒｅｓｃａｌｅｄ＿ｇｒａｄの値を加算し、その結果を配列ｓｔａｔｅの内部状態として上書きする。最後に各ＧＰＵは、配列ｔｅｍｐ＿ｗに格納された重みから配列ｓｔａｔｅの内部状態を差し引いて、配列ｗｅｉｇｈｔに代入する。配列ｔｅｍｐ＿ｗの重みは破棄してよい。
【０１０９】
疑似プログラム５５の配列演算では、異なる次元の配列要素の演算を互いに独立に実行することができる。この点で、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム５６のように記述することもできる。疑似プログラム５６によれば、各ＧＰＵにおいて最大でＮ個のスレッドが起動され、それらスレッドを用いてＮ次元の配列要素の演算が並列化される。
【０１１０】
図１２は、ｒｅｖｅｒｔ＿ｕｐｄａｔｅのデータフロー例を示す図である。
データフロー６２は、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおけるデータの関係を示す。ランクｂｅｓｔ＿ｒａｎｋに対応付けられた調整係数ｂ０，ｂ１，ｂ２が読み出される。ｔｒｙ＿ｕｐｄａｔｅフェーズで退避された重みｔｅｍｐ＿ｗとハイパーパラメータ基本値ｌｒ，ｗｄと調整係数ｂ０，ｂ１の積が算出される。また、誤差勾配ｇｒａｄとハイパーパラメータ基本値ｌｒと調整係数ｂ０の積が算出される。また、内部状態ｓｔａｔｅとハイパーパラメータ基本値ｍｏｍｅｎｔｕｍと調整係数ｂ２の積が算出される。これら３つの積が合計され、当該合計が内部状態ｓｔａｔｅとして上書きされる。また、重みｔｅｍｐ＿ｗから当該合計から差し引かれ、重みｗｅｉｇｈｔとして上書きされる。
【０１１１】
次に、情報処理装置１００の機能および処理手順について説明する。
図１３は、第２の実施の形態の情報処理装置の機能例を示すブロック図である。
情報処理装置１００は、ｆｏｒｗａｒｄ１処理部１３１、ｂａｃｋｗａｒｄ処理部１３２、ｃｏｍｍｕｎｉｃａｔｅ処理部１３３、ｔｒｙ＿ｕｐｄａｔｅ処理部１３４、ｆｏｒｗａｒｄ２処理部１３５、ａｎｎｏｕｎｃｅ処理部１３６およびｒｅｖｅｒｔ＿ｕｐｄａｔｅ処理部１３７を有する。これらの処理部は、例えば、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３が実行するプログラムとして実装される。また、情報処理装置１００は、入力データ記憶部１４１、ハイパーパラメータ記憶部１４２およびモデル記憶部１４３を有する。これらの記憶部は、例えば、ＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３の記憶領域として実装される。
【０１１２】
ｆｏｒｗａｒｄ１処理部１３１は、ｆｏｒｗａｒｄ１フェーズを実行する。ｆｏｒｗａｒｄ１処理部１３１は、入力データ記憶部１４１に記憶されたデータのうちＧＰＵ間で重複しない部分の中から、所定数のレコードを含むデータブロックを１つ抽出する。抽出するデータブロックはランダムで選択されてもよい。ｆｏｒｗａｒｄ１処理部１３１は、抽出したデータブロックを、モデル記憶部１４３に記憶されたニューラルネットワークに入力し、そのデータブロックに対応する推論精度を算出する。
【０１１３】
ｂａｃｋｗａｒｄ処理部１３２は、ｂａｃｋｗａｒｄフェーズを実行する。ｂａｃｋｗａｒｄ処理部１３２は、ｆｏｒｗａｒｄ１処理部１３１で算出された推論精度を用いて、モデル記憶部１４３に記憶されたニューラルネットワークに対して誤差逆伝播を行う。これにより、ｂａｃｋｗａｒｄ処理部１３２は、ニューラルネットワークに含まれる複数の重みそれぞれに対する誤差勾配を算出する。誤差勾配は、ニューラルネットワークの出力層に近いエッジに対するものから順に算出される。
【０１１４】
ｃｏｍｍｕｎｉｃａｔｅ処理部１３３は、ｃｏｍｍｕｎｉｃａｔｅフェーズを実行する。ｃｏｍｍｕｎｉｃａｔｅ処理部１３３は、ｂａｃｋｗａｒｄ処理部１３２で算出された誤差勾配を複数のＧＰＵの間で統合し、合算された誤差勾配を算出する。ここでのＧＰＵ間通信には、ＡｌｌＲｅｄｕｃｅ通信などのコレクティブ通信を使用する。
【０１１５】
ｔｒｙ＿ｕｐｄａｔｅ処理部１３４は、ｔｒｙ＿ｕｐｄａｔｅフェーズを実行する。ｔｒｙ＿ｕｐｄａｔｅ処理部１３４は、モデル記憶部１４３に記憶されたニューラルネットワークに含まれる複数の重みをコピーして退避しておく。また、ｔｒｙ＿ｕｐｄａｔｅ処理部１３４は、ハイパーパラメータ記憶部１４２から自身のランクに対応する調整係数ｃ０，ｃ１，ｃ２の値を検索する。ｔｒｙ＿ｕｐｄａｔｅ処理部１３４は、合算された誤差勾配と、ハイパーパラメータ記憶部１４２に記憶されたハイパーパラメータ基本値と、調整係数ｃ０，ｃ１，ｃ２に基づいて、ニューラルネットワークの複数の重みを更新する。
【０１１６】
ｆｏｒｗａｒｄ２処理部１３５は、ｆｏｒｗａｒｄ２フェーズを実行する。ｆｏｒｗａｒｄ２処理部１３５は、入力データ記憶部１４１に記憶されたデータのうちＧＰＵ間で共通の部分の中から、所定数のレコードを含むデータブロックを１つ抽出する。抽出するデータブロックはランダムで選択されてもよい。ｆｏｒｗａｒｄ２処理部１３５は、抽出したデータブロックを、モデル記憶部１４３に記憶された更新後のニューラルネットワークに入力し、そのデータブロックに対応する推論精度を算出する。
【０１１７】
ａｎｎｏｕｎｃｅ処理部１３６は、ａｎｎｏｕｎｃｅフェーズを実行する。ａｎｎｏｕｎｃｅ処理部１３６は、ｆｏｒｗａｒｄ２処理部１３５で算出された推論精度を複数のＧＰＵの間で互いにコピーし、全てのＧＰＵの推論精度を収集する。ここでのＧＰＵ間通信には、ＡｌｌＧａｔｈｅｒ通信などのコレクティブ通信を使用する。ａｎｎｏｕｎｃｅ処理部１３６は、収集した複数のＧＰＵの推論精度を互いに比較し、最高の推論精度を送信したプロセスのランクをベストランクとして判定する。
【０１１８】
ｒｅｖｅｒｔ＿ｕｐｄａｔｅ処理部１３７は、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズを実行する。ｒｅｖｅｒｔ＿ｕｐｄａｔｅ処理部１３７は、ハイパーパラメータ記憶部１４２から、ａｎｎｏｕｎｃｅ処理部１３６で判定されたベストランクに対応する調整係数ｂ０，ｂ１，ｂ２の値を検索する。また、ｒｅｖｅｒｔ＿ｕｐｄａｔｅ処理部１３７は、ｔｒｙ＿ｕｐｄａｔｅ処理部１３４で退避しておいた重みを読み出す。ｒｅｖｅｒｔ＿ｕｐｄａｔｅ処理部１３７は、合算された誤差勾配と、ハイパーパラメータ記憶部１４２に記憶されたハイパーパラメータ基本値と、調整係数ｂ０，ｂ１，ｂ２に基づいて、ニューラルネットワークに含まれる複数の重みを更新する。
【０１１９】
入力データ記憶部１４１は、機械学習において入力データとして使用可能なレコードの集合を記憶する。入力データ記憶部１４１は、ｆｏｒｗａｒｄ１フェーズで使用されるレコードとｆｏｒｗａｒｄ２フェーズで使用されるレコードを区別して記憶してもよい。すなわち、入力データ記憶部１４１は、ＧＰＵ間で重複しないデータ部分とＧＰＵ間で共通のデータ部分とを区別して記憶してもよい。
【０１２０】
なお、ＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３にデータを転送する際、転送するデータを、各ＧＰＵが使用するものに限定する方法と限定しない方法が考えられる。限定する方法では、ＣＰＵ１１１，１１１−１は、元のデータセットをＧＰＵ間で重複しない部分と共通部分に分割し、重複しない部分を細分化して複数のＧＰＵに割り振り、共通部分を全てのＧＰＵにコピーする。限定しない方法では、ＣＰＵ１１１，１１１−１は、同一のデータセットを全てのＧＰＵにコピーする。その場合、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ｆｏｒｗａｒｄ１フェーズで用いるデータブロックが重複せず、ｆｏｒｗａｒｄ２フェーズで用いるデータブロックが同じになるよう、所定の抽出アルゴリズムに従ってデータブロックを選択する。
【０１２１】
ハイパーパラメータ記憶部１４２は、前述の基本値テーブル１５１および調整係数テーブル１５２を記憶する。モデル記憶部１４３は、ニューラルネットワークに含まれる複数の重みを記憶する。ｔｒｙ＿ｕｐｄａｔｅフェーズからｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズの間は、モデル記憶部１４３は、更新前の重みと更新後の重みを併存して記憶する。
【０１２２】
なお、情報処理装置１００は、機械学習の結果として、機械学習の終了時のニューラルネットワークと、そのニューラルネットワークについて評価した推論精度の情報と、調整係数テーブル１５２に記録されたランク毎の選択回数の情報を出力する。これらの機械学習の結果は、例えば、ＣＰＵ１１１，１１１−１によってＧＰＵメモリ１１７，１１７−１，１１７−２，１１７−３から読み出され、ＨＤＤ１１３，１１３−１などの記憶装置に保存される。また、機械学習の結果は、例えば、表示装置１２１に表示される。また、機械学習の結果は、他の情報処理装置に送信されることがある。
【０１２３】
図１４は、機械学習の手順例を示すフローチャートである。
ここでは、ＧＰＵ１１６に着目して機械学習の手順を説明する。
（Ｓ１０）ＧＰＵ１１６は、ＣＰＵ１１１からデータセットを受信する。
【０１２４】
（Ｓ１１）ＧＰＵ１１６は、ニューラルネットワークの重みを初期化する。ニューラルネットワークの重みの初期値は、他のＧＰＵと同じである。
（Ｓ１２）ＧＰＵ１１６は、ＧＰＵ１１６で実行されているプロセスのランク（自ランク）を特定し、データセットの中から自ランクに応じた入力データ１を抽出する。
【０１２５】
（Ｓ１３）ＧＰＵ１１６は、入力データ１に含まれる特徴量をニューラルネットワークに入力し、ニューラルネットワークから出力された推論結果と入力データ１に含まれる教師ラベルとを比較して、入力データ１に対する現時点の推論精度を算出する。なお、ステップＳ１２，Ｓ１３はｆｏｒｗａｒｄ１フェーズに相当する。
【０１２６】
（Ｓ１４）ＧＰＵ１１６は、ステップＳ１３で算出された推論精度に基づいて、誤差逆伝播により、ニューラルネットワークの重みに対する誤差勾配を算出する。なお、ステップＳ１４はｂａｃｋｗａｒｄフェーズに相当する。
【０１２７】
（Ｓ１５）ＧＰＵ１１６は、他のＧＰＵと通信し、全てのＧＰＵのｂａｃｋｗａｒｄフェーズの誤差勾配を合算する。ＭＰＩのＡｌｌＲｅｄｕｃｅ通信を利用する場合、通信の過程で誤差勾配が合算されるようにすることができる。ＭＰＩのブロードキャスト通信やＡｌｌＧａｔｈｅｒ通信を利用する場合、ＧＰＵ１１６は、全てのＧＰＵの誤差勾配を収集した上で、それらの誤差勾配を明示的に合計することになる。なお、ステップＳ１５はｃｏｍｍｕｎｉｃａｔｅフェーズに相当する。
【０１２８】
（Ｓ１６）ＧＰＵ１１６は、現在のニューラルネットワークの重みをコピーして退避しておく。退避した重みは、後述のステップＳ２４まで保持される。
（Ｓ１７）ＧＰＵ１１６は、基本値テーブル１５１からハイパーパラメータ基本値を読み出し、調整係数テーブル１５２から自ランクに応じた調整係数を読み出す。
【０１２９】
（Ｓ１８）ＧＰＵ１１６は、ステップＳ１７で読み出したハイパーパラメータ基本値および調整係数を用いて、ステップＳ１５で合算された誤差勾配をニューラルネットワークの重みに反映させ、ニューラルネットワークの重みを仮更新する。なお、ステップＳ１６，Ｓ１７，Ｓ１８はｔｒｙ＿ｕｐｄａｔｅフェーズに相当する。
【０１３０】
図１５は、機械学習の手順例を示すフローチャート（続き）である。
（Ｓ１９）ＧＰＵ１１６は、データセットから共通の入力データ２を抽出する。
（Ｓ２０）ＧＰＵ１１６は、入力データ２に含まれる特徴量をニューラルネットワークに入力し、ニューラルネットワークから出力された推論結果と入力データ２に含まれる教師ラベルとを比較して、入力データ２に対する現時点の推論精度を算出する。なお、ステップＳ１９，Ｓ２０はｆｏｒｗａｒｄ２フェーズに相当する。
【０１３１】
（Ｓ２１）ＧＰＵ１１６は、他のＧＰＵと通信し、全てのＧＰＵのｆｏｒｗａｒｄ２フェーズの推論精度を収集する。ここでは、ＭＰＩのＡｌｌＧａｔｈｅｒ通信、ブロードキャスト通信、ＡｌｌＲｅｄｕｃｅ通信などを利用できる。
【０１３２】
（Ｓ２２）ＧＰＵ１１６は、ステップＳ２１で収集された推論精度の中から最高の推論精度を特定し、最高の推論精度を送信したプロセスのランクをベストランクと判定する。なお、ステップＳ２１，Ｓ２２はａｎｎｏｕｎｃｅフェーズに相当する。
【０１３３】
（Ｓ２３）ＧＰＵ１１６は、基本値テーブル１５１からハイパーパラメータ基本値を読み出し、調整係数テーブル１５２からベストランクに対応する調整係数を読み出す。
（Ｓ２４）ＧＰＵ１１６は、ステップＳ２３で読み出したハイパーパラメータ基本値および調整係数を用いて、ステップＳ１５で合算された誤差勾配をニューラルネットワークの重みに反映させ、ニューラルネットワークの重みを本更新する。このとき、ステップＳ１６で退避しておいた仮更新前の重みを基準として本更新が行われる。なお、ステップＳ２３，Ｓ２４はｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズに相当する。
【０１３４】
（Ｓ２５）ＧＰＵ１１６は、ステップＳ１２〜Ｓ２４を所定回数繰り返したか判断する。所定回数は、例えば、ハイパーパラメータとしてユーザから与えられる。所定回数繰り返した場合はステップＳ２６に進み、それ以外の場合はステップＳ１２に戻る。
【０１３５】
（Ｓ２６）ＧＰＵ１１６は、機械学習を終了する。ＧＰＵ１１６は、ＣＰＵ１１１からの要求に応じて、機械学習の結果をＣＰＵ１１１に転送する。機械学習の結果には、例えば、最終的なニューラルネットワークの重みと、そのニューラルネットワークの推論精度の情報と、ランク毎の選択回数の情報が含まれる。
【０１３６】
図１６は、機械学習のデータ入出力例を示す図である。
このデータ入出力例は、ＧＰＵメモリ１１７の使用方法の一例である。
ｆｏｒｗａｒｄ１フェーズにおいて、ＧＰＵ１１６は、自ランクの入力データ１６１（入力データ１）と共通の重み１７１（重み１）をＧＰＵメモリ１１７から読み出し、自ランクの推論精度１７４（推論精度１）をＧＰＵメモリ１１７に書き込む。ｂａｃｋｗａｒｄフェーズにおいて、ＧＰＵ１１６は、推論精度１７４をＧＰＵメモリ１１７から読み出し、自ランクの誤差勾配１７６（誤差勾配１）をＧＰＵメモリ１１７に書き込む。
【０１３７】
ｃｏｍｍｕｎｉｃａｔｅフェーズにおいて、ＧＰＵ１１６は、誤差勾配１７６をＧＰＵメモリ１１７から読み出し、共通の誤差勾配１７７（誤差勾配２）をＧＰＵメモリ１１７に書き込む。誤差勾配１７７は、複数のＧＰＵの誤差勾配を合算したものである。ｔｒｙ＿ｕｐｄａｔｅフェーズにおいて、ＧＰＵ１１６は、重み１７１と誤差勾配１７７と自ランクの調整係数１６３をＧＰＵメモリ１１７から読み出し、自ランクの重み１７２（重み２）をＧＰＵメモリ１１７に書き込む。
【０１３８】
ｆｏｒｗａｒｄ２フェーズにおいて、ＧＰＵ１１６は、重み１７２と共通の入力データ１６２（入力データ２）をＧＰＵメモリ１１７から読み出し、自ランクの推論精度１７５（推論精度２）をＧＰＵメモリ１１７に書き込む。ａｎｎｏｕｎｃｅフェーズにおいて、ＧＰＵ１１６は、推論精度１７５をＧＰＵメモリ１１７から読み出す。ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズにおいて、ＧＰＵ１１６は、重み１７１と誤差勾配１７７と共通の調整係数１６４を読み出し、共通の重み１７３（重み３）をＧＰＵメモリ１１７に書き込む。調整係数１６４は、ベストランクに対応する調整係数である。
【０１３９】
次に、第２の実施の形態の機械学習の変形例について説明する。
図１７は、機械学習の他のフェーズ例を示す図である。
前述の図６の説明では、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３が７つのフェーズを逐次的に実行することとした。特に、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、ｂａｃｋｗａｒｄフェーズを実行し、ｂａｃｋｗａｒｄフェーズの完了を待ってｃｏｍｍｕｎｉｃａｔｅフェーズを開始することとした。
【０１４０】
これに対して、ｂａｃｋｗａｒｄフェーズとｃｏｍｍｕｎｉｃａｔｅフェーズを融合することが考えられる。ｂａｃｋｗａｒｄフェーズでは、ニューラルネットワークの出力層から入力層に向かって一方向にエッジの誤差勾配が決定していく。入力層に近いエッジの誤差勾配を計算している時点で、出力層に近いエッジの誤差勾配は確定している。この確定した誤差勾配については、ＧＰＵ間で早期に共有することが可能である。また、誤差勾配の計算とＧＰＵ間通信とは互いに独立に実行することが可能である。
【０１４１】
そこで、ｂａｃｋｗａｒｄフェーズとｃｏｍｍｕｎｉｃａｔｅフェーズを融合し、ＧＰＵ毎の誤差勾配の計算とＧＰＵ間の誤差勾配の合算を並列化する。すなわち、ＧＰＵ１１６，１１６−１，１１６−２，１１６−３は、出力層に近い方から誤差勾配の計算を開始し、ある層の誤差勾配の計算が終了すると、１つ前の層の誤差勾配の計算と並列に、計算が終了した層の誤差勾配を他のＧＰＵに送信する。これは、本来の誤差勾配ベクトルを分割してＧＰＵ間で送信することに相当する。これにより、ｂａｃｋｗａｒｄフェーズとｃｏｍｍｕｎｉｃａｔｅフェーズが融合されて学習時間が短縮される。
【０１４２】
第２の実施の形態の情報処理装置１００によれば、複数のＧＰＵを用いて異なるデータブロックに対する異なる誤差勾配が並列に算出され、それら複数のＧＰＵの誤差勾配が合算される。よって、複数のデータブロックに対する誤差勾配の算出を逐次的に行う場合よりも、ニューラルネットワークの重みの学習を高速化できる。
【０１４３】
また、合算した誤差勾配をニューラルネットワークの重みに反映させる際、学習率に関するハイパーパラメータとしてＧＰＵによって異なる値が使用され、ＧＰＵによって異なる重みに仮更新される。仮更新された重みに基づいて共通のデータブロックに対する推論精度が評価され、最良のハイパーパラメータ値が推定される。そして、推定した最良のハイパーパラメータ値に基づいて、複数のＧＰＵの重みが本更新される。
【０１４４】
これにより、１回の機械学習の中で、学習率に関するハイパーパラメータの探索を兼ねることができる。よって、ハイパーパラメータ探索を効率化でき、様々なハイパーパラメータの値を変えながら機械学習を再実行する反復回数を削減することができる。その結果、ハイパーパラメータ探索が収束するまでのトータルの学習時間を短縮できる。また、ニューラルネットワークの推論精度を効率的に向上させることができる。
【０１４５】
また、複数のＧＰＵの間で擬似的にハイパーパラメータ値を変えるため、ランクと調整係数との対応関係が予め定義される。ランクに応じた調整係数を、機械学習の中で不変の基本値に乗じることで、ＧＰＵに応じてハイパーパラメータ値が基本値から変動する。これにより、複数のＧＰＵそれぞれのハイパーパラメータ値を効率的に調整できる。
【０１４６】
また、ｔｒｙ＿ｕｐｄａｔｅフェーズでは、更新前の重みが退避され、ｒｅｖｅｒｔ＿ｕｐｄａｔｅフェーズでは、更新前の重みとベストランクに対応する調整係数から重みの更新がやり直される。これにより、重みの本更新が効率化される。
【０１４７】
例えば、更新前の重みを退避しない方法として、最高の推論精度が得られたＧＰＵの重みを他のＧＰＵにブロードキャストして各ＧＰＵの重みを上書きする方法も考えられる。しかし、ニューラルネットワークは多数の重みを含むため、重みベクトルのブロードキャストは通信負荷が高い。これに対して、第２の実施の形態では、ＧＰＵ間で推論精度を通知すればよく、重みベクトルは送信しなくてよいため通信負荷が低くなる。また、各ＧＰＵの重みを事後的に修正するための差分情報を送信する方法も考えられる。しかし、重みは小数点以下の桁数が大きい数値であるため、有効桁数の関係でＧＰＵ間で修正結果が一致しなくリスクがある。これに対して、第２の実施の形態では、複数のＧＰＵが同一の数値から同一の手順で重みを再計算するため、分散処理によっても重みを統一できる。
【符号の説明】
【０１４８】
１０  情報処理装置
１１，１１−１  演算部
１２，１２−１  記憶部
１３，１３−１  モデル
１４，１５，１５−１，１６  重み
１７，１７−１，１８  データ
１９，１９−１  ハイパーパラメータ値
【図１】
2020191017.tif 000003
【図２】
2020191017.tif 000004
【図３】
2020191017.tif 000005
【図４】
2020191017.tif 000006
【図５】
2020191017.tif 000007
【図６】
2020191017.tif 000008
【図７】
2020191017.tif 000009
【図８】
2020191017.tif 000010
【図９】
2020191017.tif 000011
【図１０】
2020191017.tif 000012
【図１１】
2020191017.tif 000013
【図１２】
2020191017.tif 000014
【図１３】
2020191017.tif 000015
【図１４】
2020191017.tif 000016
【図１５】
2020191017.tif 000017
【図１６】
2020191017.tif 000018
【図１７】
2020191017.tif 000019