(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-11
(45)【発行日】2023-01-19
(54)【発明の名称】情報処理装置、情報処理方法および情報処理プログラム
(51)【国際特許分類】
G06N 3/08 20230101AFI20230112BHJP
G06F 15/80 20060101ALI20230112BHJP
【FI】
G06N3/08
G06F15/80
(21)【出願番号】P 2019097139
(22)【出願日】2019-05-23
【審査請求日】2022-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】笠置 明彦
(72)【発明者】
【氏名】田渕 晶大
(72)【発明者】
【氏名】山崎 雅文
【審査官】武田 広太郎
(56)【参考文献】
【文献】米国特許出願公開第2019/0122141(US,A1)
【文献】特開2017-111548(JP,A)
【文献】特開2017-514251(JP,A)
【文献】中国特許出願公開第108446302(CN,A)
【文献】特開2019-080232(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/08
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
複数の演算部と、前記複数の演算部に対応する複数の記憶部と、
を有し、前記複数の演算部それぞれは、
ニューラルネットワークを示すモデルであって前記複数の演算部のうちの他の演算部と共通の第1の重みを含むモデルに、前記他の演算部と異なる第1のデータを入力し、前記モデルの出力に基づいて前記第1の重みに対する誤差勾配を算出し、前記誤差勾配と前記他の演算部で算出された他の誤差勾配とを統合し、
前記複数の記憶部のうちの自身の演算部に対応する記憶部に前記第1の重みを保持して、前記他の演算部と異なるハイパーパラメータ値と前記統合した誤差勾配と前記第1の重みとに基づいて、前記モデルの重みを第2の重みに更新し、
前記モデルに前記他の演算部と共通の第2のデータを入力して前記モデルの出力の精度を評価し、前記精度の評価結果と前記他の演算部の評価結果とを比較して、前記他の演算部と共通のハイパーパラメータ値を選択し、
前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第1の重みとに基づいて、前記モデルの重みを第3の重みに更新する、
情報処理装置。
【請求項2】
前記複数の演算部に対応する複数のハイパーパラメータ値のうち、出力の精度が最高である演算部に対応するハイパーパラメータ値が、前記他の演算部と共通のハイパーパラメータ値として選択される、
請求項1記載の情報処理装置。
【請求項3】
前記他の演算部と異なるハイパーパラメータ値は、前記他の演算部と共通のハイパーパラメータ基本値に前記他の演算部と異なる調整係数を適用することで生成される、
請求項1記載の情報処理装置。
【請求項4】
前記複数の演算部それぞれが実行するプロセスに、識別情報が割り当てられ、
前記自身の演算部が実行するプロセスに対応する自身の識別情報から、前記他の演算部と異なるハイパーパラメータ値が決定され、
前記精度の評価結果と前記他の演算部の評価結果との間の比較に基づいて、前記他の演算部と共通である1つの識別情報が選択され、前記選択された1つの識別情報から、前記他の演算部と共通のハイパーパラメータ値が決定される、
請求項1記載の情報処理装置。
【請求項5】
前記モデルは複数の第1の重みを含み、
前記複数の第1の重みのうち、誤差勾配が未算出の第1の重みに対する誤差勾配の算出と、前記複数の演算部の間での算出済みの誤差勾配の転送とが、並列に実行される、
請求項1記載の情報処理装置。
【請求項6】
複数の演算部を有するコンピュータが、
前記複数の演算部それぞれにおいて、ニューラルネットワークを示すモデルであって前記複数の演算部の間で共通の第1の重みを含むモデルに、前記複数の演算部の間で異なる第1のデータを入力し、前記モデルの出力に基づいて前記第1の重みに対する誤差勾配を算出し、前記複数の演算部で算出された前記誤差勾配を統合し、
前記複数の演算部それぞれにおいて、自身の演算部に対応する記憶部に前記第1の重みを保持して、前記複数の演算部の間で異なるハイパーパラメータ値と前記統合した誤差勾配と前記第1の重みとに基づいて、前記モデルの重みを第2の重みに更新し、
前記複数の演算部それぞれにおいて、前記モデルに前記複数の演算部の間で共通の第2のデータを入力して前記モデルの出力の精度を評価し、前記複数の演算部の前記評価結果を比較して、前記複数の演算部の間で共通のハイパーパラメータ値を選択し、
前記複数の演算部それぞれにおいて、前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第1の重みとに基づいて、前記モデルの重みを第3の重みに更新する、
情報処理方法。
【請求項7】
複数の演算部を有するコンピュータに、
前記複数の演算部それぞれにおいて、ニューラルネットワークを示すモデルであって前記複数の演算部の間で共通の第1の重みを含むモデルに、前記複数の演算部の間で異なる第1のデータを入力し、前記モデルの出力に基づいて前記第1の重みに対する誤差勾配を算出し、前記複数の演算部で算出された前記誤差勾配を統合し、
前記複数の演算部それぞれにおいて、自身の演算部に対応する記憶部に前記第1の重みを保持して、前記複数の演算部の間で異なるハイパーパラメータ値と前記統合した誤差勾配と前記第1の重みとに基づいて、前記モデルの重みを第2の重みに更新し、
前記複数の演算部それぞれにおいて、前記モデルに前記複数の演算部の間で共通の第2のデータを入力して前記モデルの出力の精度を評価し、前記複数の演算部の前記評価結果を比較して、前記複数の演算部の間で共通のハイパーパラメータ値を選択し、
前記複数の演算部それぞれにおいて、前記選択したハイパーパラメータ値と前記統合した誤差勾配と前記対応する記憶部に保持した前記第1の重みとに基づいて、前記モデルの重みを第3の重みに更新する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【0002】
コンピュータを利用したデータ分析として、機械学習が行われることがある。機械学習では、結果が既知である複数のサンプルを示すデータをコンピュータに入力する。コンピュータは、データを分析して、要因(説明変数や独立変数と言うことがある)と結果(目的変数や従属変数と言うことがある)との間の関係を一般化したモデルを生成する。生成されたモデルを用いることで、未知の結果を予測することができる。例えば、コンピュータは、写った物体の種類を示す教師ラベルが付与された複数の画像を分析して、画像から物体の種類を判別する画像認識モデルを生成する。
【0003】
機械学習には、モデルとしてニューラルネットワーク(NN:Neural Network)を使用するものがある。典型的なニューラルネットワークは、それぞれ複数のノードを並べた入力層と出力層と1以上の中間層を含む。隣接する層に属する2つのノードが、重み付きのエッジで接続される。ノードはニューロンを表し、エッジはシナプスを表す。入力層に対して入力された説明変数の値が、エッジの重みに応じて後段の層に伝播し、出力層から目的変数の値が出力される。ニューラルネットワークは、重みを調整することで様々な関数を近似することができる。中間層が多いニューラルネットワークを多層ニューラルネットワーク(DNN:Deep Neural Network)と言うことがあり、多層ニューラルネットワークを使用する機械学習を深層学習(DL:Deep Learning)と言うことがある。
【0004】
ニューラルネットワークの典型的な機械学習では、コンピュータは、訓練データに含まれる特徴量を入力層に入力し、特徴量を入力層から出力層に向かって順方向に伝播し、特徴量に対する目的変数の推論結果を出力層から読み出す。コンピュータは、推論結果と訓練データに含まれる教師ラベルとの間の誤差を評価し、誤差情報を出力層から入力層に向かって逆方向に伝播することで、各エッジの重みに対する誤差勾配を算出する。コンピュータは、各エッジの重みを誤差勾配に基づいて更新する。このような重みの更新アルゴリズムを誤差逆伝播(Backpropagation)と言うことがある。
【0005】
なお、階層型ニューラルネットワークの機械学習を、複数の演算器を用いて並列化する並列演算装置が提案されている。また、深層学習を、それぞれGPU(Graphics Processing Unit)を有する複数の計算機を用いて並列化する並列処理装置が提案されている。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2009-99008号公報
【文献】特開2018-18220号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
機械学習では、機械学習の挙動を制御するハイパーパラメータが存在する。ハイパーパラメータ値は、機械学習によって生成されるモデルの精度に影響を与える。ユーザは、ハイパーパラメータ値を指定することができる。機械学習によっては、多数のハイパーパラメータが存在することもある。ニューラルネットワークの場合、中間層の数、各層のノードの数、活性化関数、学習率などの各種のハイパーパラメータが存在する。活性化関数は、前段の層の出力の重み付き和を、後段の層に対する出力に変換する関数である。学習率は、誤差勾配を重みに反映させる程度を表す。
【0008】
精度の高いモデルが生成されるように、ハイパーパラメータ値を調整することが好ましい。ただし、最適なハイパーパラメータ値は、訓練データとして使用するデータセットに依存するため、事前にはわからないことが多い。また、ハイパーパラメータ値の候補は多数存在する。そこで、幾つかのハイパーパラメータ値で機械学習を試行し、モデルの精度が向上するハイパーパラメータ値を推測して機械学習を再実行することを繰り返すという、ハイパーパラメータ探索を行うことがある。
【0009】
しかし、ニューラルネットワークを使用する機械学習は、計算量が大きく、1回の機械学習でも学習時間が長くなることが多い。そのため、ハイパーパラメータ値を変えながら機械学習を繰り返し実行すると、学習時間が膨大になってしまうという問題がある。
【0010】
1つの側面では、本発明は、機械学習におけるハイパーパラメータの探索を効率化する情報処理装置、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
1つの態様では、複数の演算部と複数の記憶部とを有する情報処理装置が提供される。複数の演算部それぞれは、ニューラルネットワークを示すモデルであって複数の演算部のうちの他の演算部と共通の第1の重みを含むモデルに、他の演算部と異なる第1のデータを入力し、モデルの出力に基づいて第1の重みに対する誤差勾配を算出し、誤差勾配と他の演算部で算出された他の誤差勾配とを統合する。複数の演算部それぞれは、複数の記憶部のうちの自身の演算部に対応する記憶部に第1の重みを保持して、他の演算部と異なるハイパーパラメータ値と統合した誤差勾配と第1の重みとに基づいて、モデルの重みを第2の重みに更新する。複数の演算部それぞれは、モデルに他の演算部と共通の第2のデータを入力してモデルの出力の精度を評価し、精度の評価結果と他の演算部の評価結果とを比較して、他の演算部と共通のハイパーパラメータ値を選択する。複数の演算部それぞれは、選択したハイパーパラメータ値と統合した誤差勾配と対応する記憶部に保持した第1の重みとに基づいて、モデルの重みを第3の重みに更新する。
【0012】
また、1つの態様では、コンピュータが実行する情報処理方法が提供される。また、1つの態様では、コンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【0013】
1つの側面では、機械学習におけるハイパーパラメータの探索を効率化できる。
【図面の簡単な説明】
【0014】
【
図1】第1の実施の形態の情報処理装置の例を説明する図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【
図3】ニューラルネットワークの例を示す図である。
【
図4】ニューラルネットワークの学習例を示す図である。
【
図5】ニューラルネットワークの学習の並列化例を示す図である。
【
図6】第2の実施の形態の機械学習のフェーズ例を示す図である。
【
図7】基本値テーブルおよび調整係数テーブルの例を示す図である。
【
図8】try_updateの計算例を示す図である。
【
図9】try_updateのデータフロー例を示す図である。
【
図10】forward2およびannounceの例を示す図である。
【
図11】revert_updateの計算例を示す図である。
【
図12】revert_updateのデータフロー例を示す図である。
【
図13】第2の実施の形態の情報処理装置の機能例を示すブロック図である。
【
図14】機械学習の手順例を示すフローチャートである。
【
図15】機械学習の手順例を示すフローチャート(続き)である。
【
図16】機械学習のデータ入出力例を示す図である。
【
図17】機械学習の他のフェーズ例を示す図である。
【発明を実施するための形態】
【0015】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0016】
図1は、第1の実施の形態の情報処理装置の例を説明する図である。
第1の実施の形態の情報処理装置10は、ニューラルネットワークを使用する機械学習を、複数の演算部を用いて並列化する。ニューラルネットワークは、多くの中間層を含む多層ニューラルネットワークでもよく、機械学習は、多層ニューラルネットワークを使用する深層学習でもよい。ニューラルネットワークは、画像から物体の種類を判別する画像認識モデルでもよく、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)でもよい。情報処理装置10を、機械学習装置やコンピュータなどと言うこともできる。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。
【0017】
情報処理装置10は、演算部11,11-1を含む複数の演算部と、演算部11,11-1に対応する記憶部12,12-1を含む複数の記憶部とを有する。演算部11は、記憶部12を使用し、演算部11-1は記憶部12-1を使用する。
【0018】
演算部11,11-1は、例えば、GPU、CPU(Central Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。GPUは、GPGPU(General Purpose Computing on Graphics Processing Unit)として用いるプロセッサであってもよい。プロセッサは、メモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。記憶部12,12-1は、例えば、揮発性の半導体メモリである。記憶部12,12-1は、RAM(Random Access Memory)でもよく、GPUメモリでもよい。ただし、記憶部12,12-1が不揮発性ストレージであってもよい。
【0019】
演算部11,11-1を含む複数の演算部は、それぞれ以下の処理を繰り返し実行する。ここでは、主に演算部11の視点で処理を説明する。
演算部11は、モデル13を保持する。モデル13は、例えば、記憶部12に記憶されている。モデル13は、ニューラルネットワークを示し、ニューラルネットワークの重みを含む。ニューラルネットワークは、それぞれ複数のノードを並べた入力層と出力層と1以上の中間層を含む。隣接する層に属する2つのノードが、重み付きのエッジで接続される。この時点では、モデル13の重みは、重み14(第1の重み)に設定されている。重み14は、複数の演算部の間で共通の重みである。なお、演算部11-1は、モデル13-1を保持する。モデル13-1は、例えば、記憶部12-1に記憶されている。モデル13-1の重みは、モデル13と同様に重み14に設定されている。よって、この時点では、モデル13とモデル13-1は同一のニューラルネットワークを示している。
【0020】
演算部11は、重み14を含むモデル13にデータ17(第1のデータ)を入力し、モデル13の出力を取得する。データ17は、例えば、記憶部12に記憶されている。データ17は、説明変数に相当する特徴量と目的変数に相当する教師ラベルとをそれぞれ含む1以上のレコードである。このときのモデル13の出力は、データ17に対する目的変数の推論結果であり、画像認識モデルの場合は物体の認識結果である。ここで使用される第1のデータは演算部によって異なる。なお、演算部11-1は、重み14を含むモデル13-1にデータ17-1を入力し、モデル13-1の出力を取得する。データ17-1は、例えば、記憶部12-1に記憶されている。入力データが異なるため、演算部11が取得するモデル13の出力と演算部11-1が取得するモデル13-1の出力は異なる。
【0021】
演算部11は、モデル13の出力に基づいて、重み14に対する誤差勾配を算出する。誤差勾配は、例えば、誤差逆伝播法によって算出される。誤差逆伝播法では、モデル13の出力と教師ラベルとの間の誤差を評価し、誤差情報を出力層から入力層に向かって逆方向に伝播することで、エッジの重み14に対する誤差勾配を算出する。誤差勾配は、誤差を重みの関数とみなした場合に、誤差を重みで偏微分したものに相当する。なお、演算部11-1は、モデル13-1の出力に基づいて、重み14に対する誤差勾配を算出する。誤差の評価に使用する入力データが異なるため、このとき演算部11が算出する誤差勾配と演算部11-1が算出する誤差勾配は異なる。
【0022】
演算部11は、演算部11で算出された誤差勾配と他の演算部で算出された誤差勾配とを統合して、統合誤差勾配を算出する。例えば、演算部11は、他の演算部の少なくとも一部と通信し、複数の演算部の誤差勾配の合計を統合誤差勾配として算出する。他の演算部の誤差勾配の収集には、AllReduce通信、ブロードキャスト通信、AllGather通信などのコレクティブ通信(集団通信や集合通信と言うこともある)を利用することができる。演算部11は、通信アルゴリズムによっては、他の全ての演算部と直接通信しなくてもよい。なお、演算部11-1も統合誤差勾配を算出する。演算部11で算出される統合誤差勾配と演算部11-1で算出される統合誤差勾配は同じである。
【0023】
演算部11は、この時点のモデル13の重み14を、モデル13の重みを更新しても失われないように記憶部12で保持しておく。例えば、演算部11は、記憶部12内で重み14をコピーして退避しておく。なお、演算部11-1も、モデル13-1の重み14を、モデル13-1の重みを更新しても失われないように記憶部12-1で保持しておく。
【0024】
演算部11は、ハイパーパラメータ値19と統合誤差勾配と重み14とに基づいて、モデル13の重みを重み15(第2の重み)に更新する。ハイパーパラメータ値19は、例えば、記憶部12に記憶されている。ハイパーパラメータは、機械学習の挙動を制御する制御パラメータである。ハイパーパラメータ値19は、機械学習で参照される様々なハイパーパラメータのうち、誤差勾配を重みに反映させる程度を表す学習率に関するものである。学習率が高いと重みの変化が大きくなり、学習率が低いと重みの変化が小さくなる。例えば、統合誤差勾配とハイパーパラメータ値19の積が重み14から減算される。ここで使用されるハイパーパラメータ値19は演算部によって異なる。
【0025】
なお、演算部11-1は、ハイパーパラメータ値19-1と統合誤差勾配と重み14とに基づいて、モデル13-1の重みを重み15-1に更新する。ハイパーパラメータ値19-1は、例えば、記憶部12-1に記憶されている。記憶部12が更にハイパーパラメータ値19-1を記憶していてもよく、記憶部12-1が更にハイパーパラメータ値19を記憶していてもよい。使用されるハイパーパラメータ値が異なるため、演算部11が算出する重み15と演算部11-1が算出する重み15-1は異なる。
【0026】
ハイパーパラメータ値19,19-1は、複数の演算部の間で共通のハイパーパラメータ基本値に、演算部によって異なる調整係数を適用することで生成したものであってもよい。例えば、ハイパーパラメータ基本値と調整係数の積がハイパーパラメータ値19,19-1になる。各演算部が使用する調整係数は、MPI(Message Passing Interface)のランクなど演算部によって異なる識別情報から決定されてもよい。ハイパーパラメータ基本値および調整係数が記憶部12,12-1に記憶されていてもよく、複数の調整係数がテーブル形式で管理されていてもよい。また、複数の演算部それぞれにおいて、識別情報を調整係数に変換するための関数が定義されていてもよい。
【0027】
演算部11は、重み15を含むモデル13にデータ18(第2のデータ)を入力し、モデル13の出力を取得し、モデル13の出力の精度を評価する。データ18は、例えば、記憶部12に記憶されている。ここで使用される第2のデータは複数の演算部の間で共通である。精度は、モデル13の出力とデータ18に含まれる教師ラベルとを比較することで評価できる。例えば、精度は、データ18に含まれる複数のレコードのうち、モデル13の推論結果と教師ラベルとが一致した正解レコードの割合である正確確率を示す。なお、演算部11-1は、重み15-1を含むモデル13-1にデータ18を入力し、モデル13-1の出力を取得し、モデル13-1の出力の精度を評価する。モデルの重みが異なるため、演算部11の精度の評価結果と演算部11-1の精度の評価結果は異なる。
【0028】
演算部11は、演算部11の評価結果および他の演算部の評価結果を相互に比較し、比較に基づいて何れか1つのハイパーパラメータ値を選択する。このとき、演算部11は、他の演算部の少なくとも一部と通信し、他の演算部の評価結果を収集する。他の演算部の評価結果の収集には、誤差勾配の収集と同様に、AllGather通信、AllReduce通信、ブロードキャスト通信などのコレクティブ通信を利用することができる。
【0029】
ここで選択されるハイパーパラメータ値は、例えば、複数の演算部のうち最も高い精度が算出された演算部で使用されたハイパーパラメータ値である。演算部11-1で算出された精度が最も高い場合、演算部11-1で使用されたハイパーパラメータ値19-1が選択される。演算部11は、最も高い精度が算出された演算部に対応する識別情報を特定し、特定した識別情報から決定される調整係数を選択するようにしてもよい。選択した調整係数とハイパーパラメータ基本値から、ハイパーパラメータ値が決定される。
【0030】
なお、演算部11-1も、他の演算部の評価結果を収集して何れか1つのハイパーパラメータ値を選択する。演算部11で収集される評価結果と演算部11-1で収集される評価結果は同じである。そのため、演算部11で選択されるハイパーパラメータ値と演算部11-1で選択されるハイパーパラメータ値は同じである。ここで選択されるハイパーパラメータ値は、現時点で最良のパフォーマンスをもつハイパーパラメータ値である。
【0031】
演算部11は、選択したハイパーパラメータ値と、上記の統合誤差勾配と、記憶部12に保持しておいた更新前の重み14とに基づいて、モデル13の重みを重み16(第3の重み)に更新する。例えば、統合誤差勾配と選択したハイパーパラメータ値の積が重み14から減算される。なお、演算部11-1は、選択したハイパーパラメータ値と、上記の統合誤差勾配と、記憶部12-1に保持しておいた重み14とに基づいて、モデル13-1の重みを重み16に更新する。使用されるハイパーパラメータ値と統合誤差勾配と重み14が同じため、演算部11と演算部11-1は同じ重みを算出することになる。
【0032】
第1の実施の形態の情報処理装置10によれば、複数の演算部において、共通の第1の重みをもつモデルと異なるデータから、異なる誤差勾配が算出され、それら異なる誤差勾配を統合した統合誤差勾配が算出される。複数の演算部において、第1の重みが退避され、異なるハイパーパラメータ値と統合誤差勾配と第1の重みに基づいて、異なる第2の重みに重みが更新される。複数の演算部において、異なる第2の重みをもつモデルと共通のデータから、異なる精度が算出され、それら異なる精度に応じて共通のハイパーパラメータ値が選択される。複数の演算部において、共通のハイパーパラメータ値と統合誤差勾配と退避しておいた第1の重みに基づいて、共通の第3の重みに重みが更新される。
【0033】
これにより、ニューラルネットワークに訓練データを入力して重みを更新することを繰り返す1回の機械学習の中で、学習率に関するハイパーパラメータの探索を兼ねることができる。よって、ハイパーパラメータ探索を効率化でき、様々なハイパーパラメータの値を変えながら機械学習を再実行する反復回数を削減することができる。その結果、ハイパーパラメータ探索が収束するまでのトータルの学習時間を短縮できる。また、学習時間の制限の中で、モデルの精度を効率的に向上させることができる。
【0034】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【0035】
第2の実施の形態の情報処理装置100は、ニューラルネットワークを使用する機械学習を、複数のGPUを用いて並列実行する。第2の実施の形態では、多層ニューラルネットワークを使用する深層学習が想定される。例えば、機械学習に使用される訓練データは、写った物体の種類を示す教師ラベルが付与された画像であり、ニューラルネットワークは、画像認識用の畳み込みニューラルネットワークである。情報処理装置100を、機械学習装置、並列処理装置、並列コンピュータなどと言うこともできる。
【0036】
情報処理装置100は、システムボード101,102,103を含む複数のシステムボードを有する。複数のシステムボードはそれぞれ、複数のCPU、複数のRAM、複数のHDD(Hard Disk Drive)、複数のGPU、複数のGPUメモリなどを有する。複数のシステムボードは、同様のハードウェアにより実装できる。以下では、複数のシステムボードのうち代表してシステムボード101を説明する。
【0037】
システムボード101は、CPU111,111-1、RAM112,112-1、HDD113,113-1、HCA(Host Channel Adapter)114,114-1およびPCI(Peripheral Component Interconnection)スイッチ115,115-1を有する。また、システムボード101は、GPU116,116-1,116-2,116-3およびGPUメモリ117,117-1,117-2,117-3を有する。
【0038】
CPU111(CPU0)とCPU111-1(CPU1)は、プロセッサ間接続インタフェースであるUPI(Ultra Path Interconnection)を介して接続されている。CPU111は、RAM112(RAM0)、HDD113(HDD0)、HCA114(HCA0)およびPCIスイッチ115と接続されている。CPU111-1は、RAM112-1(RAM1)、HDD113-1(HDD1)、HCA114-1(HCA1)およびPCIスイッチ115-1と接続されている。
【0039】
PCIスイッチ115は、周辺機器接続インタフェースであるPCIe(Peripheral Component Interconnection Express)を介して、GPU116(GPU0)およびGPU116-2(GPU2)と接続されている。PCIスイッチ115-1は、PCIeを介して、GPU116-1(GPU1)およびGPU116-3(GPU3)と接続されている。GPU116は、GPUメモリ117(GPUメモリ0)と接続されている。GPU116-1は、GPUメモリ117-1(GPUメモリ1)と接続されている。GPU116-2は、GPUメモリ117-2(GPUメモリ2)と接続されている。GPU116-3は、GPUメモリ117-3(GPUメモリ3)と接続されている。
【0040】
CPU111,111-1は、プログラムの命令を実行するメインプロセッサである。CPU111は、HDD113などの不揮発性ストレージに記憶されたプログラムをRAM112にロードして実行する。CPU111-1は、HDD113-1などの不揮発性ストレージに記憶されたプログラムをRAM112-1にロードして実行する。
【0041】
RAM112,112-1は、プログラムやデータを一時的に記憶する揮発性の半導体メモリである。RAM112は、CPU111によって使用される。RAM112-1は、CPU111-1によって使用される。
【0042】
HDD113,113-1は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。HDD113は、CPU111によって使用される。HDD113-1は、CPU111-1によって使用される。なお、不揮発性ストレージとして、フラッシュメモリやSSD(Solid State Drive)など他の種類のデバイスを用いてもよい。
【0043】
HCA114,114-1は、システムボード102,103などの他のシステムボードのCPUと通信を行う通信インタフェースである。HCA114,114-1は、InfiniBandの通信規格に従って通信を行う。HCA114,114-1は、情報処理装置100の中で、有線通信装置であるInfiniBandのスイッチとケーブルを介して接続されている。HCA114は、CPU111によって使用される。HCA114-1は、CPU111-1によって使用される。
【0044】
PCIスイッチ115,115-1は、CPUとGPUの間の通信を中継する中継装置である。PCIスイッチ115は、CPU111によって使用される。PCIスイッチ115は、GPU116,116-2とPCIeの通信規格に従って通信を行う。PCIスイッチ115-1は、CPU111によって使用される。PCIスイッチ115-1は、GPU116-1,116-3とPCIeの通信規格に従って通信を行う。
【0045】
GPU116,116-1,116-2,116-3は、ハードウェアアクセラレータとしてのプロセッサであり、プログラムの命令を実行する。GPU116,116-1,116-2,116-3は、画像処理に適した多数のGPUコアを有する。GPU116,116-1,116-2,116-3は、GPGPUであってもよい。
【0046】
GPUメモリ117,117-1,117-2,117-3は、GPU用のプログラムやデータを一時的に記憶する揮発性の半導体メモリである。GPUメモリ117は、GPU116によって使用される。GPUメモリ117-1は、GPU116-1によって使用される。GPUメモリ117-2は、GPU116-2によって使用される。GPUメモリ117-3は、GPU116-3によって使用される。
【0047】
GPU116,116-1,116-2,116-3を用いて機械学習を行う場合、以下のようにして機械学習用のデータが転送される。HDD113,113-1には、機械学習用のデータが記憶されている。HDD113とHDD113-1には、同じデータが記憶されていてもよいし異なるデータが記憶されていてもよい。
【0048】
CPU111は、HDD113に記憶されたデータのうち、少なくともGPU116によって使用されるデータを、PCIスイッチ115およびGPU116を介してGPUメモリ117に転送する。GPUメモリ117に転送されるデータには、GPU116によって使用されないデータが含まれていてもよい。
【0049】
同様に、CPU111は、HDD113に記憶されたデータのうち、少なくともGPU116-2によって使用されるデータを、PCIスイッチ115およびGPU116-2を介してGPUメモリ117-2に転送する。CPU111-1は、HDD113-1に記憶されたデータのうち、少なくともGPU116-1によって使用されるデータを、PCIスイッチ115-1およびGPU116-1を介してGPUメモリ117-1に転送する。CPU111-1は、HDD113-1に記憶されたデータのうち、少なくともGPU116-3によって使用されるデータを、PCIスイッチ115-1およびGPU116-3を介してGPUメモリ117-3に転送する。
【0050】
HDD113-1に記憶されたデータをGPU116,116-2が使用する場合、CPU111は、CPU111-1から当該データを取得すればよい。また、HDD113に記憶されたデータをGPU116-1,116-3が使用する場合、CPU111-1は、CPU111から当該データを取得すればよい。
【0051】
GPU116,116-1,116-2,116-3が同一システムボード内の他のGPUと通信する場合、CPU111,111-1の少なくとも一方を経由して通信が行われる。GPU116,116-1,116-2,116-3が他のシステムボードのGPUと通信する場合、HCA114またはHCA114-1を経由して通信が行われる。
【0052】
また、情報処理装置100には、表示装置121や入力デバイス122を接続することができ、記録媒体123を読み込むことができる。例えば、情報処理装置100は、表示装置121に接続される出力インタフェースを有する。表示装置121として、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。情報処理装置100に、プリンタなど、表示装置121以外の出力デバイスが接続されてもよい。
【0053】
また、例えば、情報処理装置100は、入力デバイス122に接続される入力インタフェースを有する。入力デバイス122として、マウス、タッチパネル、キーボードなど、任意の種類の入力デバイスを使用することができる。情報処理装置100に複数種類の入力デバイスが接続されてもよい。また、例えば、情報処理装置100は、記録媒体123に記録されたプログラムやデータを読み取る媒体読み取りデバイスを有する。記録媒体123として、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。
【0054】
媒体読み取りデバイスは、例えば、記録媒体123から読み取ったプログラムやデータを、RAMやHDDなどの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPUまたはGPUによって実行される。なお、記録媒体123は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体123を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0055】
表示装置121への画面の出力、入力デバイス122からの入力信号の受信、および、記録媒体123の読み取りは、何れかのシステムボードのCPUによって制御されてもよいし、情報処理装置100が有する管理用CPUによって制御されてもよい。また、情報処理装置100は、他の情報処理装置と通信する通信インタフェースを有してもよい。
【0056】
次に、ニューラルネットワークについて説明する。
図3は、ニューラルネットワークの例を示す図である。
ニューラルネットワーク31は、入力層および出力層を有し、入力層と出力層の間に複数の中間層を有する。入力層、中間層および出力層はそれぞれ、複数のノードを含む。入力層の各ノードは、1つ後の中間層の複数のノードとエッジで接続される。出力層の各ノードは、1つ前の中間層の複数のノードとエッジで接続される。中間層の各ノードは、1つ前の層の複数のノードとエッジで接続されると共に、1つ後の層の複数のノードとエッジで接続される。ノードはニューロンに相当し、エッジはシナプスに相当する。
【0057】
中間層の数は、機械学習の挙動を制御するハイパーパラメータの1つによって指定される。中間層の数を指定するハイパーパラメータの値は、1回の機械学習の中では不変である。また、各層のノード数も、ハイパーパラメータの1つによって指定される。ノード数を指定するハイパーパラメータの値は、1回の機械学習の中では不変である。
【0058】
各エッジには重みが付与される。機械学習の開始時には重みが初期値に設定され、機械学習を通じて重みが決定される。ニューラルネットワーク31の重みは、学習すべきモデルパラメータである。重みを調整することで、ニューラルネットワーク31は様々な関数を近似することができる。入力層に対しては、説明変数に相当する特徴量が入力される。入力層に対する入力は、入力層から複数の中間層を経由して出力層に伝播する。出力層からは、目的変数に相当する推論結果が出力される。画像認識の場合、入力層から画像の特徴量が入力され、出力層から画像認識結果が出力される。この場合、出力層の出力は、画像が特定の物体の種類(クラス)に属するか否かを示す二値データであることもあるし、画像が特定のクラスに属する確率を示す連続値データであることもある。
【0059】
図4は、ニューラルネットワークの学習例を示す図である。
ニューラルネットワーク31の重みは、一般的には、forward、backwardおよびupdateを含む複数のフェーズを繰り返すことで学習される。
【0060】
forwardフェーズでは、データブロックに含まれる特徴量がニューラルネットワーク31の入力層に対して入力され、そのデータブロックに対する推論結果がニューラルネットワーク31の出力層から出力される。そして、推論結果とデータブロックに含まれる教師ラベルとの間の誤差を示す推論精度が算出される。
【0061】
ここで、機械学習用データの使用方法として、第2の実施の形態ではミニバッチ学習を想定する。ミニバッチ学習では、1回に使用されるデータブロックが数十個程度のレコード(サンプル)を含んでいる。各レコードは、説明変数に相当する特徴量と目的変数に相当する教師ラベルとを含む。入力層に対してはレコード毎に特徴量が入力され、出力層からはレコード毎に推論結果が出力される。データブロックに対する推論精度は、複数のレコードの推論結果と教師ラベルとの間の誤差の平均を表す。ただし、第2の実施の形態の機械学習は、1回に1つのレコードを使用するオンライン学習に応用することもできる。
【0062】
forwardフェーズでは、入力層に対する入力が、以下のようにして出力層に向かって順方向に伝播する。ここでは、ニューラルネットワーク31がノード41,42,43,44,45を含むとする。ノード43(ノードj)は、ある中間層に属している。ノード41(ノードi0)およびノード42(ノードi1)は、ノード43の1つ前の層に属している。ノード44(ノードk0)およびノード45(ノードk1)は、ノード43の1つ後の層に属している。ノード41とノード43の間のエッジには、重みwi0jが付与されている。ノード42とノード43の間のエッジには、重みwi1jが付与されている。ノード43とノード44の間のエッジには、重みwjk0が付与されている。ノード43とノード45の間のエッジには、重みwjk1が付与されている。
【0063】
ノード43に着目すると、ノード41の出力値に重みwi0jを乗じ、ノード42の出力値に重みwi1jを乗じ、これらを合算することで、1つ前の層の出力値の重み付き和が算出される。この重み付き和を所定の活性化関数に入力することで、ノード43の出力値が算出される。活性化関数は、機械学習の挙動を制御するハイパーパラメータの1つによって指定される。活性化関数を指定するハイパーパラメータの値は、1回の機械学習の中では不変である。ノード43の出力値は、ノード44,45に提供される。このようにして、入力層から複数の中間層を介して出力層に向かって数値が伝播する。
【0064】
backwardフェーズでは、推論精度に応じた誤差情報が、ニューラルネットワーク31の出力層から入力層に向かって伝播する。これにより、ニューラルネットワーク31に含まれる複数の重みそれぞれに対して誤差勾配が算出される。誤差勾配は、誤差を重みの関数とみなした場合に、誤差を重みで偏微分したものに相当する。誤差勾配は、誤差が小さくなるように重みを更新するために用いられる。
【0065】
backwardフェーズでは、誤差逆伝播法により、誤差勾配が出力層から入力層に向かって逆方向に伝播する。例えば、ノード43と前の層との間の重みwi0j,wi1jに対する誤差勾配は、後の層との間の重みwjk0,wjk1、それに対する誤差勾配、forwardフェーズにおけるノード43の出力値、前の層のノード41,42の出力値などから算出される。これにより、出力層に近い方の重みから順に誤差勾配が決定される。
【0066】
updateフェーズでは、backwardフェーズで算出された誤差勾配が重みに反映されて、ニューラルネットワーク31の重みが更新される。これにより、ニューラルネットワーク31が、重みの異なるニューラルネットワーク32になる。例えば、重みwi0j,wi1j,wjk0,wjk1が重みw’i0j,w’i1j,w’jk0,w’jk1に変わる。
【0067】
誤差勾配を重みに反映させる際には、現在の重みから誤差勾配そのものを減算する代わりに、今回のデータブロックの影響を緩和するように誤差勾配が減算値に変換され、現在の重みから当該減算値が減算される。その際、後述するように、学習率に関する幾つかのハイパーパラメータが使用される。学習率が高いと、今回のデータブロックの影響が強く重みに反映され、学習率が低いと、今回のデータブロックの影響が緩やかに重みに反映されることになる。学習率に関するハイパーパラメータは、その値を変えるとニューラルネットワークの推論精度や重みの収束速度などが変わるという点で重要である。
【0068】
ここで、誤差勾配の重みへの反映には加法性が成立する。あるデータブロックから算出された誤差勾配と別のデータブロックから算出された誤差勾配とを順に重みに反映させることは、2つの誤差勾配を合算して重みに反映させることと等価である。この加法性を利用して、ニューラルネットワークの学習を並列化することが考えられる。
【0069】
図5は、ニューラルネットワークの学習の並列化例を示す図である。
第2の実施の形態では説明を簡単にするため、システムボード101が有するGPU116,116-1,116-2,116-3の4個のGPUを用いて並列処理を行うことを想定する。ただし、GPUを2000個使用するなど、並列度を上げることが可能である。GPU116,116-1,116-2,116-3は、GPU間通信にMPIライブラリを使用する。GPU116はランク0のプロセスを実行する。GPU116-1はランク1のプロセスを実行する。GPU116-2はランク2のプロセスを実行する。GPU116-3はランク3のプロセスを実行する。
【0070】
並列化した機械学習では、forward、backward、communicateおよびupdateを含む複数のフェーズを繰り返すことが考えられる。GPU116,116-1,116-2,116-3は、forward、backward、communicateおよびupdateの各フェーズを並列に実行する。
【0071】
forwardフェーズを開始するにあたり、GPU116,116-1,116-2,116-3は、同一の重みを含むニューラルネットワークを保持している。forwardフェーズでは、GPU116,116-1,116-2,116-3は、互いに異なるデータブロックをニューラルネットワークに入力して、異なる推論精度を並列に算出する。GPU116,116-1,116-2,116-3は、それぞれ対応するGPUメモリからデータブロックを読み出して使用する。GPU116はデータブロックAを使用し、GPU116-1はデータブロックBを使用し、GPU116-2はデータブロックCを使用し、GPU116-3はデータブロックDを使用する。
【0072】
backwardフェーズでは、GPU116,116-1,116-2,116-3は、互いに異なる推論精度から異なる誤差勾配を並列に算出する。
communicateフェーズでは、GPU116,116-1,116-2,116-3は、コレクティブ通信によりGPU116,116-1,116-2,116-3を合算する。通信結果として、GPU116,116-1,116-2,116-3は同一の合算値を得る。communicateフェーズでは、例えば、コレクティブ通信の1つであるAllReduce通信が使用される。ただし、同じくコレクティブ通信の1つであるAllGather通信またはブロードキャスト通信を使用することもできる。
【0073】
例えば、GPU116とGPU116-1が誤差勾配を相互に送信して合算する。これと並列に、GPU116-2とGPU116-3が誤差勾配を相互に送信して合算する。次に、GPU116とGPU116-2が、その時点の合算値を相互に送信して最終的な合算値を得る。これと並列に、GPU116-1とGPU116-3が、その時点の合算値を相互に送信して最終的な合算値を得る。コレクティブ通信は並列化が可能である。
【0074】
updateフェーズでは、GPU116,116-1,116-2,116-3は、合算結果である同一の誤差勾配をニューラルネットワークの重みに並列に反映させる。これにより、GPU116,116-1,116-2,116-3は、同一の重みを含むニューラルネットワークを保持していることになる。
【0075】
以上のforward、backward、communicateおよびupdateの4つのフェーズが、データブロックを変えながら繰り返し実行される。次のforwardフェーズでは、GPU116はデータブロックFを使用し、GPU116-1はデータブロックGを使用し、GPU116-2はデータブロックHを使用し、GPU116-3はデータブロックIを使用する。
【0076】
ところで、ニューラルネットワークの機械学習では、中間層の数、各層のノード数、活性化関数、学習率などの様々なハイパーパラメータが使用される。推論精度の高いニューラルネットワークが生成されるように、ハイパーパラメータ値を調整することが好ましい。ただし、最適なハイパーパラメータ値は、機械学習に使用するデータセットに依存するため、事前にはわからない。また、ハイパーパラメータ値の候補は多数存在する。そこで、幾つかのハイパーパラメータ値で機械学習を試行し、ニューラルネットワークの推論精度が向上するハイパーパラメータ値を推測して機械学習を再実行することを繰り返すという、ハイパーパラメータ探索が行われる。しかし、ニューラルネットワークの機械学習を繰り返し行うと、トータルの学習時間が非常に長くなってしまう。
【0077】
そこで、第2の実施の形態では、トータルの学習時間が短縮されるようにハイパーパラメータ探索を支援する。具体的には、情報処理装置100は、様々なハイパーパラメータのうち学習率に関するハイパーパラメータの探索を、複数のフェーズを繰り返す1回の機械学習の中で自動的に行われるようにする。これにより、学習率に関するハイパーパラメータについて好ましい値を早期に絞り込むことができる。
【0078】
図6は、第2の実施の形態の機械学習のフェーズ例を示す図である。
第2の実施の形態の機械学習では、forward1、backward、communicate、try_update、forward2、announceおよびrevert_updateの7つのフェーズが繰り返される。GPU116,116-1,116-2,116-3は、並列にこれら7つのフェーズを実行する。
【0079】
forward1フェーズを開始するにあたり、GPU116,116-1,116-2,116-3は、同一の重みを含むニューラルネットワークを保持している。forward1フェーズでは、GPU116,116-1,116-2,116-3は、互いに異なるデータブロックをニューラルネットワークに入力して、異なる推論精度を並列に算出する。GPU116,116-1,116-2,116-3は、それぞれ対応するGPUメモリからデータブロックを読み出して使用する。GPU116はデータブロックAを使用し、GPU116-1はデータブロックBを使用し、GPU116-2はデータブロックCを使用し、GPU116-3はデータブロックDを使用する。
【0080】
backwardフェーズでは、GPU116,116-1,116-2,116-3は、互いに異なる推論精度から異なる誤差勾配を並列に算出する。
communicateフェーズでは、GPU116,116-1,116-2,116-3は、コレクティブ通信によりGPU116,116-1,116-2,116-3を合算する。通信結果として、GPU116,116-1,116-2,116-3は同一の合算値を得る。communicateフェーズでは、例えば、コレクティブ通信の1つであるAllReduce通信が使用される。ただし、同じくコレクティブ通信の1つであるAllGather通信またはブロードキャスト通信を使用することもできる。
【0081】
try_updateフェーズでは、GPU116,116-1,116-2,116-3は、合算結果である同一の誤差勾配をニューラルネットワークの重みに並列に反映させる。このとき、GPU116,116-1,116-2,116-3は、学習率に関するハイパーパラメータについて、実質的に互いに異なるハイパーパラメータ値を使用する。具体的には、ハイパーパラメータの基本値に、ランクに応じて異なる調整係数を乗ずることで、ハイパーパラメータ値を基本値から変動させる。ハイパーパラメータの基本値は、機械学習の開始時に指定され、1回の機械学習の中では不変である。異なる調整係数を使用することで、擬似的にハイパーパラメータ値が変わることになる。
【0082】
学習率に関するハイパーパラメータ値が異なるため、GPU116,116-1,116-2,116-3は、異なる重みを含むニューラルネットワークを保持していることになる。また、後述するrevert_updateフェーズにおいて、try_updateフェーズで更新される前の重みを使用するため、GPU116,116-1,116-2,116-3は、更新前の重みをGPUメモリ内で退避しておく。
【0083】
forward2フェーズでは、GPU116,116-1,116-2,116-3は、同一のデータブロックを互いに異なるニューラルネットワークに入力して、異なる推論精度を並列に算出する。GPU116,116-1,116-2,116-3は、それぞれ対応するGPUメモリから同一のデータブロックのコピーを読み出して使用する。GPUメモリ117,117-1,117-2,117-3には、データ転送時に同一のデータブロックがコピーされるようにしておく。GPU116,116-1,116-2,116-3は、データブロックEを使用する。データブロックEは、forward1で使用されたデータブロックA,B,C,Dと異なることが好ましい。
【0084】
announceフェーズでは、GPU116,116-1,116-2,116-3は、コレクティブ通信によりGPU116,116-1,116-2,116-3のforward2フェーズの推論精度を共有する。通信結果として、GPU116,116-1,116-2,116-3は、全てのGPUの推論精度のコピーを得る。announceフェーズでは、例えば、コレクティブ通信の1つであるAllGather通信が使用される。ただし、同じくコレクティブ通信の1つであるAllReduce通信またはブロードキャスト通信を使用することもできる。そして、GPU116,116-1,116-2,116-3は、最高の推論精度が算出されたランク(ベストランク)を判定する。GPU116,116-1,116-2,116-3の判定結果は同一である。
【0085】
revert_updateフェーズでは、GPU116,116-1,116-2,116-3は、communicateフェーズの合算結果である誤差勾配を、try_updateフェーズの更新前のニューラルネットワークの重みに対し並列に反映させる。このとき、GPU116,116-1,116-2,116-3は、学習率に関するハイパーパラメータについて同一のハイパーパラメータ値を使用する。具体的には、ハイパーパラメータの基本値に、announceフェーズで判定したベストランクに対応する調整係数を乗ずる。これにより、GPU116,116-1,116-2,116-3は、同一の重みを含むニューラルネットワークを保持していることになる。
【0086】
以上の7つのフェーズが、データブロックを変えながら繰り返し実行される。次のforward1フェーズでは、GPU116はデータブロックFを使用し、GPU116-1はデータブロックGを使用し、GPU116-2はデータブロックHを使用し、GPU116-3はデータブロックIを使用する。次のforward2フェーズでは、GPU116,116-1,116-2,116-3はデータブロックJを使用する。
【0087】
図7は、基本値テーブルおよび調整係数テーブルの例を示す図である。
情報処理装置100は、基本値テーブル151と調整係数テーブル152を有する。
基本値テーブル151には、学習率に関するハイパーパラメータの基本値が登録される。後述する計算例では、学習率に関連して「lr」と「wd」と「momentum」の3つのハイパーパラメータが使用される。そこで、基本値テーブル151には、この3つのハイパーパラメータに対応する3つの基本値が登録される。基本値テーブル151の基本値は、機械学習の開始時に与えられ、機械学習の途中で変化しない。
【0088】
調整係数テーブル152には、ランクと調整係数が対応付けて登録される。学習率に関するハイパーパラメータ1つに対して1つの調整係数が与えられる。後述する計算例では、学習率に関連して「lr」と「wd」と「momentum」の3つのハイパーパラメータが使用される。そこで、基本値テーブル151には、「lr」に対応する調整係数c0と、「wd」に対応する調整係数c1と、「momentum」に対応する調整係数c2の3つの調整係数が登録される。調整係数テーブル152では、複数の調整係数の値のセットが、複数のランクの間で重複しないように決定されている。ランクと調整係数の対応関係は、機械学習の開始時に与えられ、機械学習の途中で変化しない。
【0089】
調整係数テーブル152は、例えば、以下のようにして生成することができる。まず、ハイパーパラメータ毎に調整係数の変動範囲を決定し、複数の調整係数に対応する複数の軸をもつ係数空間を定義する。例えば、3つのハイパーパラメータの調整係数に対応する三次元の係数空間を定義する。次に、機械学習に使用するGPUの数であるランク数に応じて、格子幅を決定し、係数空間に均等に格子点を設定する。そして、係数空間の複数の格子点に対して異なるランクを割り当て、格子点が示す調整係数の値のセット(三次元の係数空間の場合は3つの調整係数の値のセット)をランクに対応付ける。これにより、できる限り離れたハイパーパラメータ値を複数のGPUで試すことができる。
【0090】
なお、
図7では調整係数テーブル152に登録された調整係数は非負整数であるが、調整係数は0.01刻み程度の実数になることがある。
また、調整係数テーブル152には、ランクに対応付けて選択回数が記録される。ただし、選択回数は調整係数テーブル152と切り離して記録することもできる。選択回数は、前述の7つのフェーズを繰り返す間にベストランクとして選択された回数である。ベストランクの選択回数は、学習率に関するハイパーパラメータの好ましい値を絞り込む上で有用な情報となるため、機械学習の結果に含めて記録される。
【0091】
例えば、第2の実施の形態の機械学習の結果、1つまたは少数のランクの選択回数が特に多かったとする。その場合、当該1つまたは少数のランクに対応する調整係数と基本値の積が、学習率に関するハイパーパラメータの好ましい値と推測される。そのため、以降の機械学習では、学習率に関するハイパーパラメータについてはそれらの値に絞り込むことができ、他のハイパーパラメータの探索に注力することができる。
【0092】
基本値テーブル151および調整係数テーブル152は、例えば、予め作成され、GPUメモリ117,117-1,117-2,117-3にコピーされて記憶される。ただし、調整係数テーブル152は、GPU116,116-1,116-2,116-3の間で生成方法を合意しておけば、GPU116,116-1,116-2,116-3がそれぞれ生成することもできる。また、ランクと調整係数の対応関係をテーブル形式で管理する代わりに、ランクから調整係数を算出する関数を定義することもできる。
【0093】
次に、誤差勾配とハイパーパラメータから重みを更新する計算例を説明する。
図8は、try_updateの計算例を示す図である。
ここでは、確率的勾配降下法(SGD:Stochastic Gradient Descent)を想定する。
【0094】
try_updateフェーズにおけるニューラルネットワークの重みの更新は、数式51のように記述することができる。数式51において、W(t)は時刻tにおける重みであり、W(t-1)は時刻t-1における重みであり、ΔW(t-1)は時刻t-1で算出された誤差勾配である。V(t-1)は時刻t-1における内部状態である。内部状態V(t-1)は、重みW(t)が直前の誤差勾配ΔW(t-1)だけでなくそれ以前の誤差勾配も遅延して反映するように、繰り越される数値である。ただし、try_updateフェーズでは内部状態V(t-1)は更新されない。
【0095】
数式51の「lr」には基本値テーブル151の基本値が代入され、調整係数c0を乗じて使用される。数式51の「wd」には基本値テーブル151の基本値が代入され、調整係数c1を乗じて使用される。数式51の「momentum」には基本値テーブル151の基本値が代入され、調整係数c2を乗じて使用される。lr*c0、wd*c1およびmomentum*c2を、調整後のハイパーパラメータ値とみなすことができる。数式51のW(t),W(t-1),ΔW(t-1),V(t-1)は、ニューラルネットワークに含まれる重みの数に相当する次元をもつベクトルである。数式51のlr,wd,momentum,co,c1,c2は、スカラ値である。
【0096】
try_updateフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム52のように記述することもできる。疑似プログラム52のようなプログラムが、GPU116,116-1,116-2,116-3それぞれで実行される。
【0097】
各GPUは、自身のランクに対応する調整係数c0,c1,c2の値を読み出す。調整係数c0,c1,c2の値は、例えば、調整係数テーブル152から読み出される。次に、各GPUは、配列weightに格納された現在の重みを配列temp_wに退避する。次に、各GPUは、配列temp_wに退避された重みにwd*c1を乗じ、配列gradに格納された誤差勾配を加算し、lr*c0を乗じ、その結果を配列rescaled_gradに代入する。次に、各GPUは、配列stateに格納された内部状態にmomentum*c2を乗じ、配列rescaled_gradの値を加算して減算値を得る。最後に各GPUは、配列temp_wに退避された重みから上記の減算値を差し引いて、配列weightに代入する。ここでは、配列stateの内部状態は更新されず、更新前の重みは配列temp_wに退避されたままとなる。
【0098】
疑似プログラム52の配列演算では、異なる次元の配列要素の演算を互いに独立に実行することができる。そこで、GPU116,116-1,116-2,116-3はそれぞれ、複数のGPUコアを用いて複数のスレッドを起動し、異なるスレッドを用いて異なる次元の配列要素の演算を並列に実行することが可能である。
【0099】
この点で、try_updateフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム53のように記述することもできる。疑似プログラム53によれば、各GPUにおいて最大でN個(Nは2以上の整数)のスレッドが起動され、それらスレッドを用いてN次元の配列要素の演算が並列化される。
【0100】
図9は、try_updateのデータフロー例を示す図である。
データフロー61は、try_updateフェーズにおけるデータの関係を示す。重みweightが重みtemp_wにコピーされると共に、ランクmy_rankに対応付けられた調整係数c0,c1,c2が読み出される。重みtemp_wとハイパーパラメータ基本値lr,wdと調整係数c0,c1の積が算出される。また、誤差勾配gradとハイパーパラメータ基本値lrと調整係数c0の積が算出される。また、内部状態stateとハイパーパラメータ基本値momentumと調整係数c2の積が算出される。これら3つの積が合計され、重みtemp_wから当該合計から差し引かれる。減算結果が重みweightとして上書きされる。
【0101】
図10は、forward2およびannounceの例を示す図である。
上記のtry_updateによる重みの更新の結果、GPU116はニューラルネットワーク33を保持している。GPU116-1はニューラルネットワーク33-1を保持している。GPU116-2はニューラルネットワーク33-2を保持している。GPU116-3はニューラルネットワーク33-3を保持している。
【0102】
forward2フェーズでは、GPU116は、データブロックEをニューラルネットワーク33に代入する。ここでは、ニューラルネットワーク33の推論精度が45%であるとする。GPU116-1は、データブロックEをニューラルネットワーク33-1に代入する。ここでは、ニューラルネットワーク33-1の推論精度が50%であるとする。GPU116-2は、データブロックEをニューラルネットワーク33-2に代入する。ここでは、ニューラルネットワーク33-2の推論精度が43%であるとする。GPU116-3は、データブロックEをニューラルネットワーク33-3に代入する。ここでは、ニューラルネットワーク33-3の推論精度が32%であるとする。
【0103】
announceフェーズでは、GPU116,116-1,116-2,116-3の間でこれら推論精度が相互に通知される。その結果、GPU116は推論精度セット34を取得し、GPU116-1は推論精度セット34-1を取得し、GPU116-2は推論精度セット34-2を取得し、GPU116-3は推論精度セット34-3を取得する。推論精度セット34,34-1,34-2,34-3の内容は同一であり、GPU116,116-1,116-2,116-3が算出した推論精度を全て含む。
【0104】
GPU116は、推論精度セット34から最高の推論精度を達成したランクを検索し、推論精度50%を達成したランク1をベストランクと判定する。同様に、GPU116-1は、推論精度セット34-1に基づいてランク1をベストランクと判定する。GPU116-2は、推論精度セット34-2に基づいてランク1をベストランクと判定する。GPU116-3は、推論精度セット34-3に基づいてランク1をベストランクと判定する。このように、GPU116,116-1,116-2,116-3は、同一のランクをベストランクと判定することになる。
【0105】
図11は、revert_updateの計算例を示す図である。
revert_updateフェーズにおけるニューラルネットワークの重みの更新は、数式54のように記述することができる。重みW(t)の計算方法は、基本的にtry_updateフェーズと同様である。ただし、revert_updateフェーズでは、時刻tにおける内部状態V(t)が更新される。内部状態V(t)は減算値として使用され、重みW(t)は重み(t-1)と内部状態V(t)の差として定義される。
【0106】
また、try_updateフェーズでは、自ランクに対応する調整係数c0,c1,c2が使用されるのに対し、revert_updateフェーズでは、ベストランクに対応する調整係数b0,b1,b2が使用される。調整係数b0は、調整係数テーブル152の調整係数c0に対応する。調整係数b1は、調整係数テーブル152の調整係数c1に対応する。調整係数b2は、調整係数テーブル152の調整係数c2に対応する。ハイパーパラメータ「lr」については、その基本値に調整係数b0を乗じた値が使用される。ハイパーパラメータ「wd」については、その基本値に調整係数b1を乗じた値が使用される。ハイパーパラメータ「momentum」については、その基本値に調整係数b2を乗じた値が使用される。
【0107】
revert_updateフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム55のように記述することもできる。疑似プログラム55のようなプログラムが、GPU116,116-1,116-2,116-3それぞれで実行される。
【0108】
各GPUは、ベストランクに対応する調整係数b0,b1,b2の値を読み出す。調整係数b0,b1,b2の値は、例えば、調整係数テーブル152から読み出される。次に、各GPUは、try_updateフェーズで配列temp_wに退避しておいた重みにwd*b1を乗じ、配列gradに格納された誤差勾配を加算し、lr*b0を乗じ、その結果を配列rescaled_gradに代入する。次に、各GPUは、配列stateに格納された内部状態にmomentum*b2を乗じ、配列rescaled_gradの値を加算し、その結果を配列stateの内部状態として上書きする。最後に各GPUは、配列temp_wに格納された重みから配列stateの内部状態を差し引いて、配列weightに代入する。配列temp_wの重みは破棄してよい。
【0109】
疑似プログラム55の配列演算では、異なる次元の配列要素の演算を互いに独立に実行することができる。この点で、revert_updateフェーズにおけるニューラルネットワークの重みの更新は、疑似プログラム56のように記述することもできる。疑似プログラム56によれば、各GPUにおいて最大でN個のスレッドが起動され、それらスレッドを用いてN次元の配列要素の演算が並列化される。
【0110】
図12は、revert_updateのデータフロー例を示す図である。
データフロー62は、revert_updateフェーズにおけるデータの関係を示す。ランクbest_rankに対応付けられた調整係数b0,b1,b2が読み出される。try_updateフェーズで退避された重みtemp_wとハイパーパラメータ基本値lr,wdと調整係数b0,b1の積が算出される。また、誤差勾配gradとハイパーパラメータ基本値lrと調整係数b0の積が算出される。また、内部状態stateとハイパーパラメータ基本値momentumと調整係数b2の積が算出される。これら3つの積が合計され、当該合計が内部状態stateとして上書きされる。また、重みtemp_wから当該合計から差し引かれ、重みweightとして上書きされる。
【0111】
次に、情報処理装置100の機能および処理手順について説明する。
図13は、第2の実施の形態の情報処理装置の機能例を示すブロック図である。
情報処理装置100は、forward1処理部131、backward処理部132、communicate処理部133、try_update処理部134、forward2処理部135、announce処理部136およびrevert_update処理部137を有する。これらの処理部は、例えば、GPU116,116-1,116-2,116-3が実行するプログラムとして実装される。また、情報処理装置100は、入力データ記憶部141、ハイパーパラメータ記憶部142およびモデル記憶部143を有する。これらの記憶部は、例えば、GPUメモリ117,117-1,117-2,117-3の記憶領域として実装される。
【0112】
forward1処理部131は、forward1フェーズを実行する。forward1処理部131は、入力データ記憶部141に記憶されたデータのうちGPU間で重複しない部分の中から、所定数のレコードを含むデータブロックを1つ抽出する。抽出するデータブロックはランダムで選択されてもよい。forward1処理部131は、抽出したデータブロックを、モデル記憶部143に記憶されたニューラルネットワークに入力し、そのデータブロックに対応する推論精度を算出する。
【0113】
backward処理部132は、backwardフェーズを実行する。backward処理部132は、forward1処理部131で算出された推論精度を用いて、モデル記憶部143に記憶されたニューラルネットワークに対して誤差逆伝播を行う。これにより、backward処理部132は、ニューラルネットワークに含まれる複数の重みそれぞれに対する誤差勾配を算出する。誤差勾配は、ニューラルネットワークの出力層に近いエッジに対するものから順に算出される。
【0114】
communicate処理部133は、communicateフェーズを実行する。communicate処理部133は、backward処理部132で算出された誤差勾配を複数のGPUの間で統合し、合算された誤差勾配を算出する。ここでのGPU間通信には、AllReduce通信などのコレクティブ通信を使用する。
【0115】
try_update処理部134は、try_updateフェーズを実行する。try_update処理部134は、モデル記憶部143に記憶されたニューラルネットワークに含まれる複数の重みをコピーして退避しておく。また、try_update処理部134は、ハイパーパラメータ記憶部142から自身のランクに対応する調整係数c0,c1,c2の値を検索する。try_update処理部134は、合算された誤差勾配と、ハイパーパラメータ記憶部142に記憶されたハイパーパラメータ基本値と、調整係数c0,c1,c2に基づいて、ニューラルネットワークの複数の重みを更新する。
【0116】
forward2処理部135は、forward2フェーズを実行する。forward2処理部135は、入力データ記憶部141に記憶されたデータのうちGPU間で共通の部分の中から、所定数のレコードを含むデータブロックを1つ抽出する。抽出するデータブロックはランダムで選択されてもよい。forward2処理部135は、抽出したデータブロックを、モデル記憶部143に記憶された更新後のニューラルネットワークに入力し、そのデータブロックに対応する推論精度を算出する。
【0117】
announce処理部136は、announceフェーズを実行する。announce処理部136は、forward2処理部135で算出された推論精度を複数のGPUの間で互いにコピーし、全てのGPUの推論精度を収集する。ここでのGPU間通信には、AllGather通信などのコレクティブ通信を使用する。announce処理部136は、収集した複数のGPUの推論精度を互いに比較し、最高の推論精度を送信したプロセスのランクをベストランクとして判定する。
【0118】
revert_update処理部137は、revert_updateフェーズを実行する。revert_update処理部137は、ハイパーパラメータ記憶部142から、announce処理部136で判定されたベストランクに対応する調整係数b0,b1,b2の値を検索する。また、revert_update処理部137は、try_update処理部134で退避しておいた重みを読み出す。revert_update処理部137は、合算された誤差勾配と、ハイパーパラメータ記憶部142に記憶されたハイパーパラメータ基本値と、調整係数b0,b1,b2に基づいて、ニューラルネットワークに含まれる複数の重みを更新する。
【0119】
入力データ記憶部141は、機械学習において入力データとして使用可能なレコードの集合を記憶する。入力データ記憶部141は、forward1フェーズで使用されるレコードとforward2フェーズで使用されるレコードを区別して記憶してもよい。すなわち、入力データ記憶部141は、GPU間で重複しないデータ部分とGPU間で共通のデータ部分とを区別して記憶してもよい。
【0120】
なお、GPUメモリ117,117-1,117-2,117-3にデータを転送する際、転送するデータを、各GPUが使用するものに限定する方法と限定しない方法が考えられる。限定する方法では、CPU111,111-1は、元のデータセットをGPU間で重複しない部分と共通部分に分割し、重複しない部分を細分化して複数のGPUに割り振り、共通部分を全てのGPUにコピーする。限定しない方法では、CPU111,111-1は、同一のデータセットを全てのGPUにコピーする。その場合、GPU116,116-1,116-2,116-3は、forward1フェーズで用いるデータブロックが重複せず、forward2フェーズで用いるデータブロックが同じになるよう、所定の抽出アルゴリズムに従ってデータブロックを選択する。
【0121】
ハイパーパラメータ記憶部142は、前述の基本値テーブル151および調整係数テーブル152を記憶する。モデル記憶部143は、ニューラルネットワークに含まれる複数の重みを記憶する。try_updateフェーズからrevert_updateフェーズの間は、モデル記憶部143は、更新前の重みと更新後の重みを併存して記憶する。
【0122】
なお、情報処理装置100は、機械学習の結果として、機械学習の終了時のニューラルネットワークと、そのニューラルネットワークについて評価した推論精度の情報と、調整係数テーブル152に記録されたランク毎の選択回数の情報を出力する。これらの機械学習の結果は、例えば、CPU111,111-1によってGPUメモリ117,117-1,117-2,117-3から読み出され、HDD113,113-1などの記憶装置に保存される。また、機械学習の結果は、例えば、表示装置121に表示される。また、機械学習の結果は、他の情報処理装置に送信されることがある。
【0123】
図14は、機械学習の手順例を示すフローチャートである。
ここでは、GPU116に着目して機械学習の手順を説明する。
(S10)GPU116は、CPU111からデータセットを受信する。
【0124】
(S11)GPU116は、ニューラルネットワークの重みを初期化する。ニューラルネットワークの重みの初期値は、他のGPUと同じである。
(S12)GPU116は、GPU116で実行されているプロセスのランク(自ランク)を特定し、データセットの中から自ランクに応じた入力データ1を抽出する。
【0125】
(S13)GPU116は、入力データ1に含まれる特徴量をニューラルネットワークに入力し、ニューラルネットワークから出力された推論結果と入力データ1に含まれる教師ラベルとを比較して、入力データ1に対する現時点の推論精度を算出する。なお、ステップS12,S13はforward1フェーズに相当する。
【0126】
(S14)GPU116は、ステップS13で算出された推論精度に基づいて、誤差逆伝播により、ニューラルネットワークの重みに対する誤差勾配を算出する。なお、ステップS14はbackwardフェーズに相当する。
【0127】
(S15)GPU116は、他のGPUと通信し、全てのGPUのbackwardフェーズの誤差勾配を合算する。MPIのAllReduce通信を利用する場合、通信の過程で誤差勾配が合算されるようにすることができる。MPIのブロードキャスト通信やAllGather通信を利用する場合、GPU116は、全てのGPUの誤差勾配を収集した上で、それらの誤差勾配を明示的に合計することになる。なお、ステップS15はcommunicateフェーズに相当する。
【0128】
(S16)GPU116は、現在のニューラルネットワークの重みをコピーして退避しておく。退避した重みは、後述のステップS24まで保持される。
(S17)GPU116は、基本値テーブル151からハイパーパラメータ基本値を読み出し、調整係数テーブル152から自ランクに応じた調整係数を読み出す。
【0129】
(S18)GPU116は、ステップS17で読み出したハイパーパラメータ基本値および調整係数を用いて、ステップS15で合算された誤差勾配をニューラルネットワークの重みに反映させ、ニューラルネットワークの重みを仮更新する。なお、ステップS16,S17,S18はtry_updateフェーズに相当する。
【0130】
図15は、機械学習の手順例を示すフローチャート(続き)である。
(S19)GPU116は、データセットから共通の入力データ2を抽出する。
(S20)GPU116は、入力データ2に含まれる特徴量をニューラルネットワークに入力し、ニューラルネットワークから出力された推論結果と入力データ2に含まれる教師ラベルとを比較して、入力データ2に対する現時点の推論精度を算出する。なお、ステップS19,S20はforward2フェーズに相当する。
【0131】
(S21)GPU116は、他のGPUと通信し、全てのGPUのforward2フェーズの推論精度を収集する。ここでは、MPIのAllGather通信、ブロードキャスト通信、AllReduce通信などを利用できる。
【0132】
(S22)GPU116は、ステップS21で収集された推論精度の中から最高の推論精度を特定し、最高の推論精度を送信したプロセスのランクをベストランクと判定する。なお、ステップS21,S22はannounceフェーズに相当する。
【0133】
(S23)GPU116は、基本値テーブル151からハイパーパラメータ基本値を読み出し、調整係数テーブル152からベストランクに対応する調整係数を読み出す。
(S24)GPU116は、ステップS23で読み出したハイパーパラメータ基本値および調整係数を用いて、ステップS15で合算された誤差勾配をニューラルネットワークの重みに反映させ、ニューラルネットワークの重みを本更新する。このとき、ステップS16で退避しておいた仮更新前の重みを基準として本更新が行われる。なお、ステップS23,S24はrevert_updateフェーズに相当する。
【0134】
(S25)GPU116は、ステップS12~S24を所定回数繰り返したか判断する。所定回数は、例えば、ハイパーパラメータとしてユーザから与えられる。所定回数繰り返した場合はステップS26に進み、それ以外の場合はステップS12に戻る。
【0135】
(S26)GPU116は、機械学習を終了する。GPU116は、CPU111からの要求に応じて、機械学習の結果をCPU111に転送する。機械学習の結果には、例えば、最終的なニューラルネットワークの重みと、そのニューラルネットワークの推論精度の情報と、ランク毎の選択回数の情報が含まれる。
【0136】
図16は、機械学習のデータ入出力例を示す図である。
このデータ入出力例は、GPUメモリ117の使用方法の一例である。
forward1フェーズにおいて、GPU116は、自ランクの入力データ161(入力データ1)と共通の重み171(重み1)をGPUメモリ117から読み出し、自ランクの推論精度174(推論精度1)をGPUメモリ117に書き込む。backwardフェーズにおいて、GPU116は、推論精度174をGPUメモリ117から読み出し、自ランクの誤差勾配176(誤差勾配1)をGPUメモリ117に書き込む。
【0137】
communicateフェーズにおいて、GPU116は、誤差勾配176をGPUメモリ117から読み出し、共通の誤差勾配177(誤差勾配2)をGPUメモリ117に書き込む。誤差勾配177は、複数のGPUの誤差勾配を合算したものである。try_updateフェーズにおいて、GPU116は、重み171と誤差勾配177と自ランクの調整係数163をGPUメモリ117から読み出し、自ランクの重み172(重み2)をGPUメモリ117に書き込む。
【0138】
forward2フェーズにおいて、GPU116は、重み172と共通の入力データ162(入力データ2)をGPUメモリ117から読み出し、自ランクの推論精度175(推論精度2)をGPUメモリ117に書き込む。announceフェーズにおいて、GPU116は、推論精度175をGPUメモリ117から読み出す。revert_updateフェーズにおいて、GPU116は、重み171と誤差勾配177と共通の調整係数164を読み出し、共通の重み173(重み3)をGPUメモリ117に書き込む。調整係数164は、ベストランクに対応する調整係数である。
【0139】
次に、第2の実施の形態の機械学習の変形例について説明する。
図17は、機械学習の他のフェーズ例を示す図である。
前述の
図6の説明では、GPU116,116-1,116-2,116-3が7つのフェーズを逐次的に実行することとした。特に、GPU116,116-1,116-2,116-3は、backwardフェーズを実行し、backwardフェーズの完了を待ってcommunicateフェーズを開始することとした。
【0140】
これに対して、backwardフェーズとcommunicateフェーズを融合することが考えられる。backwardフェーズでは、ニューラルネットワークの出力層から入力層に向かって一方向にエッジの誤差勾配が決定していく。入力層に近いエッジの誤差勾配を計算している時点で、出力層に近いエッジの誤差勾配は確定している。この確定した誤差勾配については、GPU間で早期に共有することが可能である。また、誤差勾配の計算とGPU間通信とは互いに独立に実行することが可能である。
【0141】
そこで、backwardフェーズとcommunicateフェーズを融合し、GPU毎の誤差勾配の計算とGPU間の誤差勾配の合算を並列化する。すなわち、GPU116,116-1,116-2,116-3は、出力層に近い方から誤差勾配の計算を開始し、ある層の誤差勾配の計算が終了すると、1つ前の層の誤差勾配の計算と並列に、計算が終了した層の誤差勾配を他のGPUに送信する。これは、本来の誤差勾配ベクトルを分割してGPU間で送信することに相当する。これにより、backwardフェーズとcommunicateフェーズが融合されて学習時間が短縮される。
【0142】
第2の実施の形態の情報処理装置100によれば、複数のGPUを用いて異なるデータブロックに対する異なる誤差勾配が並列に算出され、それら複数のGPUの誤差勾配が合算される。よって、複数のデータブロックに対する誤差勾配の算出を逐次的に行う場合よりも、ニューラルネットワークの重みの学習を高速化できる。
【0143】
また、合算した誤差勾配をニューラルネットワークの重みに反映させる際、学習率に関するハイパーパラメータとしてGPUによって異なる値が使用され、GPUによって異なる重みに仮更新される。仮更新された重みに基づいて共通のデータブロックに対する推論精度が評価され、最良のハイパーパラメータ値が推定される。そして、推定した最良のハイパーパラメータ値に基づいて、複数のGPUの重みが本更新される。
【0144】
これにより、1回の機械学習の中で、学習率に関するハイパーパラメータの探索を兼ねることができる。よって、ハイパーパラメータ探索を効率化でき、様々なハイパーパラメータの値を変えながら機械学習を再実行する反復回数を削減することができる。その結果、ハイパーパラメータ探索が収束するまでのトータルの学習時間を短縮できる。また、ニューラルネットワークの推論精度を効率的に向上させることができる。
【0145】
また、複数のGPUの間で擬似的にハイパーパラメータ値を変えるため、ランクと調整係数との対応関係が予め定義される。ランクに応じた調整係数を、機械学習の中で不変の基本値に乗じることで、GPUに応じてハイパーパラメータ値が基本値から変動する。これにより、複数のGPUそれぞれのハイパーパラメータ値を効率的に調整できる。
【0146】
また、try_updateフェーズでは、更新前の重みが退避され、revert_updateフェーズでは、更新前の重みとベストランクに対応する調整係数から重みの更新がやり直される。これにより、重みの本更新が効率化される。
【0147】
例えば、更新前の重みを退避しない方法として、最高の推論精度が得られたGPUの重みを他のGPUにブロードキャストして各GPUの重みを上書きする方法も考えられる。しかし、ニューラルネットワークは多数の重みを含むため、重みベクトルのブロードキャストは通信負荷が高い。これに対して、第2の実施の形態では、GPU間で推論精度を通知すればよく、重みベクトルは送信しなくてよいため通信負荷が低くなる。また、各GPUの重みを事後的に修正するための差分情報を送信する方法も考えられる。しかし、重みは小数点以下の桁数が大きい数値であるため、有効桁数の関係でGPU間で修正結果が一致しなくリスクがある。これに対して、第2の実施の形態では、複数のGPUが同一の数値から同一の手順で重みを再計算するため、分散処理によっても重みを統一できる。
【符号の説明】
【0148】
10 情報処理装置
11,11-1 演算部
12,12-1 記憶部
13,13-1 モデル
14,15,15-1,16 重み
17,17-1,18 データ
19,19-1 ハイパーパラメータ値