(57)【要約】【課題】複数のノードを用いて畳み込みニューラルネットワークシステム用の重みを学習する学習システムの学習時間および／またはミニバッチサイズを予測する予測装置、予測方法および予測プログラムを提供する。【解決手段】それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測装置であって、畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測部を備える予測装置が提供される。【選択図】図６
2018018422.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測装置であって、
畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測部を備える予測装置。
【請求項２】
前記予測部は、下記（１）式に基づいて前記学習時間を予測する、請求項１に記載の予測装置。
ＴEpoch＝（ＮFile×ＴGPU）／（ＮNode×ＮGPU×ＮSubbatch）  ・・・（１）
ここで、ＴEpochは前記学習時間、ＮNodeは前記ノード台数、ＮSubbatchは前記サブバッチ数、ＮFileは総学習データ数、ＮGPUは各ノードが有するＧＰＵ数、ＴGPUは各ＧＰＵが１回の重み更新量を算出するのに要する時間。
【請求項３】
前記予測部は、下記（２）式に基づいて平均ミニバッチサイズを予測する、請求項１または２に記載の予測装置。
ＮBatch＝（ＮNode×ＮGPU×ＮSubbatch×ＴAllreduce）／ＴGPU ・・・（２）
ここで、ＮBatchは前記平均ミニバッチサイズ、ＮNodeは前記ノード台数、ＮSubbatchは前記サブバッチ数、ＮGPUは各ノードが有するＧＰＵ数、ＴGPUは各ＧＰＵが１回の重み更新量を算出するのに要する時間、ＴAllreduceは前記ＣＰＵが通信を行って重みを更新するのに要する時間。
【請求項４】
前記ＴAllreduceは、前記ＣＰＵが通信を行って重みを更新するのに必要な各処理に要する時間の総和である、請求項３に記載の予測装置。
【請求項５】
前記ＴGPUは、前記ＣＰＵが重み更新量を算出するのに必要な各処理に要する時間の総和である、請求項２乃至４のいずれかに記載の予測装置。
【請求項６】
前記各処理に要する時間は、前記サブバッチ数についての一次関数で与えられる、請求項４または５に記載の予測装置。
【請求項７】
複数の前記サブバッチ数について、前記各処理に要する時間を計測してフィッティングを行うことにより、前記一次関数を定める定数を算出するパラメータ算出部を備える、請求項６に記載の予測装置。
【請求項８】
前記予測部によって予測された前記平均ミニバッチサイズが予め定めた範囲に収まるか否かを判定する判定部を備える請求項１乃至７のいずれかに記載の予測装置。
【請求項９】
前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記学習時間が最小となる組を特定する、請求項８に記載の予測装置。
【請求項１０】
前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記ノード台数が最小となる組を特定する、請求項８に記載の予測装置。
【請求項１１】
前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記ノード台数と前記学習時間との積が最小となる組を特定する、請求項８に記載の予測装置。
【請求項１２】
それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測方法であって、
畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測方法。
【請求項１３】
それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測プログラムであって、コンピュータを、
畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測手段として機能させる予測プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳み込みニューラルネットワークシステムの重みを更新する学習システムにおける学習時間および／または平均ミニバッチサイズを予測する予測装置、予測方法および予測プログラムに関する。
【背景技術】
【０００２】
画像認識の分野において、一般物体認識と呼ばれる問題がある。これは、画像の中に存在する鳥や車といった物体の種別（クラス）を推定する問題である。近年、一般物体認識問題の認識性能の改善が目覚ましい。これは、とりわけ層数の多い、畳み込みニューラルネットワーク（例えば、非特許文献１）によるところが大きい。
【０００３】
画像認識の分野では、過去様々な認識アルゴリズムが提案されてきたが、学習データが膨大になるにつれ、畳み込みニューラルネットワークが他のアルゴリズムの認識性能を上回る傾向となっている。畳み込みニューラルネットワークは、モデルの表現能力が高い反面、学習データの特徴に過度に特化してしまう「過学習」と呼ばれる問題があることが従来指摘されてきた。しかしながら、近年の学習データ量が、過学習の問題の回避を可能にするレベルにまで増大しつつあることが背景にある。
【０００４】
畳み込みニューラルネットワークは認識性能において大きな利点があるが、学習時間が長大であるという弱点を併せ持っている。学習とは、ニューラルネットワークにおける重みやバイアスといったパラメータを最適化する処理である。ソーシャルネットワークに関するデータや、自動運転に関係するデータなどは、今後とも増加の一途をたどるものの一例であるが、いつか学習時間が膨大になりすぎて、実質的な時間内に学習が終了しない可能性も充分に考えられる。場合によっては、学習に年単位の時間を要することも考えられる。こうなった場合、製品化は現実的ではなく、認識性能で劣る畳み込みニューラルネットワーク以外のアルゴリズムの使用を余儀なくされることにもなり兼ねない。すなわち、ニューラルネットワーク学習の抜本的高速化は、産業応用にとって極めて重要な課題である。
【０００５】
上記の課題に対応すべく、ＣＰＵやＧＰＵを備えた複数の計算機（ノードとも呼ばれる）を通信路で接続した計算機クラスタを利用して学習システムを構築し、学習を分散処理させることで、学習時間を大幅に短縮する検討が試みられている（例えば、非特許文献１〜５）。適切な学習システムを構築するためには、学習システムの構成と学習時間との関係を予測できるのが望ましい。
【０００６】
また、学習手法の１つとして勾配法が知られているが、その際に全学習データを用いるのではなく、一部の学習データのみを用いるミニバッチ確率的勾配法（以下、単にミニバッチ学習という）が近年では広く使われている。ミニバッチとは、１回の重み更新に使用される学習データの集合を指し、ミニバッチサイズとはミニバッチを構成するデータの個数を指す。
【０００７】
ミニバッチサイズには適正な範囲があり、これを逸脱すると、学習の収束が遅くなることや、認識精度が悪くなることなどの問題が生じる可能性が高まることが知られている（例えば、非特許文献２、３、５）。そのため、計算機クラスタを用いてミニバッチ学習を行う際には、学習システムの構成と、ミニバッチサイズとの関係を予測できるのが望ましい。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Ren Wu, Shengen Yan, Yi Shan, Qingqing Dang, and Gang Sun, "Deep Image: Scaling up Image Recognition", arXiv:1501.02876, 2015.
【非特許文献２】D. Amodei, et. al, "Deep Speech 2: End-to-End Speech Recognition in English and Mandarin", arXiv:1512.02595, 2015.
【非特許文献３】S. Zhang, C. Zhang, Z. You, R. Zheng, and B. Xu, "Asynchronous stochastic gradient descent for dnn training", Acoustics, Speech and Signal Processing (ICASSP), 2013 IEEE International Conference on, pages 6660.6663, May 2013.
【非特許文献４】Forrest N. Iandola, Khalid Ashraf, Mattthew W. Moskewicz, Kurt Keutzer, "FireCaffe: near-linear acceleration of deep neural network training on compute clusters", arXiv:1511.00175, 2015.
【非特許文献５】S. Gupta, W. Zhang, and J. Milthorpe, "Model Accuracy and Runtime Tradeo in Distributed Deep Learning", arXiv:1509.04210, 2015.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明はこのような問題点に鑑みてなされたものであり、本発明の課題は、複数のノードを用いて畳み込みニューラルネットワークシステム用の重みを学習する学習システムの学習時間および／またはミニバッチサイズを予測する予測装置、予測方法および予測プログラムを提供することである。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測装置であって、畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測部を備える予測装置が提供される。
【００１１】
前記予測部は、下記（１）式に基づいて前記学習時間を予測してもよい。
ＴEpoch＝（ＮFile×ＴGPU）／（ＮNode×ＮGPU×ＮSubbatch）  ・・・（１）
ここで、ＴEpochは前記学習時間、ＮNodeは前記ノード台数、ＮSubbatchは前記サブバッチ数、ＮFileは総学習データ数、ＮGPUは各ノードが有するＧＰＵ数、ＴGPUは各ＧＰＵが１回の重み更新量を算出するのに要する時間である。
【００１２】
前記予測部は、下記（２）式に基づいて平均ミニバッチサイズを予測してもよい。
ＮBatch＝（ＮNode×ＮGPU×ＮSubbatch×ＴAllreduce）／ＴGPU ・・・（２）
ここで、ＮBatchは前記平均ミニバッチサイズ、ＮNodeは前記ノード台数、ＮSubbatchは前記サブバッチ数、ＮGPUは各ノードが有するＧＰＵ数、ＴGPUは各ＧＰＵが１回の重み更新量を算出するのに要する時間、ＴAllreduceは前記ＣＰＵが通信を行って重みを更新するのに要する時間である。
【００１３】
前記ＴAllreduceは、前記ＣＰＵが通信を行って重みを更新するのに必要な各処理に要する時間の総和であってもよい。
前記ＴGPUは、前記ＣＰＵが重み更新量を算出するのに必要な各処理に要する時間の総和であってもよい。
【００１４】
前記各処理に要する時間は、前記サブバッチ数についての一次関数で与えられてもよい。
この場合、複数の前記サブバッチ数について、前記各処理に要する時間を計測してフィッティングを行うことにより、前記一次関数を定める定数を算出するパラメータ算出部を備えるのが望ましい。
【００１５】
前記予測部によって予測された前記平均ミニバッチサイズが予め定めた範囲に収まるか否かを判定する判定部を備えてもよい。
この場合、前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記学習時間が最小となる組を特定してもよい。
あるいは、前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記ノード台数が最小となる組を特定してもよい。
また、前記判定部は、前記平均ミニバッチサイズが予め定めた範囲に収まる前記ノード台数および前記サブバッチ数の組のうち、前記ノード台数と前記学習時間との積が最小となる組を特定してもよい。
【００１６】
本発明の別の態様によれば、それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測方法であって、畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測方法が提供される。
【００１７】
本発明の別の態様によれば、それぞれがＣＰＵおよびＧＰＵを有する複数のノードから構成され、前記ＣＰＵが前記ＧＰＵを用いて複数の学習データに基づく畳み込みニューラルネットワーク用の重み更新量を算出するとともに、ノード間で前記重み更新量を通信して重みを更新する学習システムにおける学習時間および／または１回の重み更新に用いられる平均学習データ数である平均ミニバッチサイズを予測する予測プログラムであって、コンピュータを、畳み込みニューラルネットワーク構造を示すパラメータと、ノード台数と、各ＧＰＵに一括処理させる学習データ数であるサブバッチ数と、に基づいて、前記学習時間および／または前記平均ミニバッチサイズを予測する予測手段として機能させる予測プログラムが提供される。
【発明の効果】
【００１８】
学習システムの学習時間および／またはミニバッチサイズを予測できる。
【図面の簡単な説明】
【００１９】
【図１】畳み込みニューラルネットワークの構造の一例を模式的に示す図。
【図２】ミニバッチ学習を行う学習システムのハードウェア構成の一例を示すブロック図。
【図３】図２の学習システムにおける学習スレッドおよびＡＲスレッドの処理動作の詳細を例示するフロー図。
【図４Ａ】学習スレッドの詳細アルゴリズムを示す擬似プログラム。
【図４Ｂ】ＡＲスレッドの詳細アルゴリズムを示す擬似プログラム。
【図５】学習スレッドおよびＡＲスレッドの処理タイミングを模式的に説明する図。
【図６】予測装置の概略構成を示すブロック図。
【図７】予測部３１の構成例を示すブロック図。
【図８】ＣＮＮの詳細アルゴリズムを示す擬似プログラム。
【発明を実施するための形態】
【００２０】
以下、本発明に係る実施形態について、図面を参照しながら具体的に説明する。
まずは、畳み込みニューラルネットワーク（Convolutional Neural Network：ＣＮＮ）および重みの学習について説明する。次いで、複数のノード（計算機クラスタ）を用いてミニバッチ学習を行う学習システムを説明する。その上で、学習時間やミニバッチサイズを予測する手法を詳しく説明する。
【００２１】
図１は、畳み込みニューラルネットワークの構造の一例を模式的に示す図である。ＣＮＮは、１または複数の畳み込み部２１およびプーリング部２２の組と、多層ニューラルネットワーク構造２３とを備えている。初段の畳み込み部２１に認識対象の画像が入力される。そして、多層ニューラルネットワーク構造２３から認識結果が出力される。
【００２２】
畳み込み部２１は、入力される画像信号（初段の畳み込み部２１にあっては認識（あるいは学習）対象の画像、２段目以降の畳み込み部２１にあっては後述する特徴マップ）に対してフィルタ２１ａを適用して畳み込みを行い、次いで非線形写像を行う。フィルタ２１ａは複数ピクセルの要素を持つ重みであり、各重みはバイアスを含んでいてもよい。
【００２３】
プーリング部２２は、畳み込み部２１からの画像信号の解像度を下げるプーリング操作を行い、特徴マップを生成する。
【００２４】
多層ニューラルネットワーク構造２３は、入力層２３１と、１または複数の隠れ層２３２と、出力層２３３とを有する。入力層２３１には最終段のプーリング部２２からの特徴マップが入力される。隠れ層２３２は重みを用いて積和演算を行う。出力層２３３はＣＮＮ処理の最終結果を出力する。
【００２５】
畳み込み部２１におけるフィルタ２１ａの重みや、隠れ層２３２における重みがニューラルネットワーク用のパラメータである。本実施形態では、これらの重みＷを短時間で学習することを目的としている。学習とは、認識対象の画像が入力されたときにＣＮＮが理想の出力を返すよう、重みを更新することをいう。
【００２６】
学習には、認識の対象となる画像と、それに対する理想的な出力値の組である学習データが用いられる。学習に先立ち、ＣＮＮの出力がどの程度理想的な出力値から離れているかを定量化した関数（例えば二乗誤差やクロスエントロピー）を定義し、全学習データ分だけ足し合わせたコスト関数Ｅ（Ｗ）を用意する。コスト関数Ｅ（Ｗ）は重みＷの関数であり、コスト関数Ｅ（Ｗ）が小さいほどよいＣＮＮであるといえる。学習とは、重みＷを更新することで、コスト関数Ｅ（Ｗ）を小さくする処理とも言える。
【００２７】
本実施形態では、コスト関数Ｅ（Ｗ）を最小化する手法として、誤差逆伝搬法と呼ばれる勾配法の一種を使用する。誤差逆伝搬法は重みの更新を多数回繰り返すものであり、一回の更新は下記（１）式で表される。
Ｗ←Ｗ−ｒ＊ｄＷ  ・・・（１）
ｒは学習係数と呼ばれるスカラ量であり、更新の度に小さな値にしてもよいし、常に一定の値であってもよい。ｄＷはコスト関数の重みに対する微分を表したものである。すなわち、重みの更新には、現時点での重みＷと、微分値ｄＷとが用いられる。
【００２８】
ここで、一回の重み更新において、全学習データを用いて算出された微分値ｄＷを用いる方法を「バッチ学習」といい、一部の学習データを用いて算出された微分値ｄＷの近似値を用いる方法を「ミニバッチ学習」という。近年では、ミニバッチ学習を採用することが一般的である。その理由は、ミニバッチ学習は、バッチ学習と比較して、多くの場合収束速度が速く、さらには汎化性能（学習データに含まれない画像に対する識別性能）が高いためである。
【００２９】
通常、ミニバッチ学習を採用する場合、ミニバッチサイズをあらかじめ決定しておく必要がある。ミニバッチサイズとは、１回の重み更新（微分値ｄＷの算出）に使用する学習データの個数を指す。適切なミニバッチサイズは、問題依存ではあるが、少ない時で１、多い時でおよそ１０００、といった事例がある。経験的に、ミニバッチサイズには適切な値があり、このサイズを大きく超えると、収束が遅くなったり、汎化性能が劣化したりするデメリットがあることが知られている。すなわち、必ずしもミニバッチサイズを大きくすればよい、というわけではない。また、適切なミニバッチサイズは、全学習データの数を遥かに下回ることもまたよく知られている。
【００３０】
図２は、ミニバッチ学習を行う学習システムのハードウェア構成の一例を示すブロック図である。学習システムはインターコネクトによって接続されたＮNode個のノード１から構成される。そして、任意のノード１間でデータ通信が可能である。
【００３１】
ノード１はハードウェアとしての単位であり、例えば１台の計算機である。また、ノード１は複数のプロセス（プログラム）を並列に処理できる。具体的には、ノード１は、１つのＣＰＵ（Central Processing Unit）１１と、ＮGPU個（同図では２つ）のＧＰＵ（Graphics Processing Unit）１２と、ＳＳＤ（Solid State Drive）などのストレージ１３とを有する。なお、１つのノード１が有するＧＰＵ１２の個数ＮGPUは全ノード１で共通とする。
【００３２】
ＣＰＵ１１は、ＡＲスレッドと、ＮGPU個の学習スレッドを実行する。学習スレッドは、ＧＰＵ１２を用い、他のＧＰＵ１２とは非同期で、重み更新量（上記（１）式の微分値ｄＷに対応）を算出する処理である。重み更新量の算出には、自学習スレッドのみが使用する学習データ（ストレージ１３に格納されている）を用いてＧＰＵ１２での学習を繰り返し、学習結果である重み更新量をホストメモリ上のバッファＧｒａｄＢｕｆに積算する。なお、バッファＧｒａｄＢｕｆは学習スレッドごと（言い換えるとＧＰＵ１２ごと）に設けられる。
【００３３】
また、ＡＲスレッドは、各ＧＰＵ１２によって算出された重み更新量を他のノード１と通信することにより、重みを更新するとともに他のノード１と重みを同期させる処理である。より具体的には、ＡＲスレッドは、学習スレッドとは非同期に、各バッファＧｒａｄＢｕｆの値を用いて加算Ａｌｌｒｅｄｕｃｅ通信を行い、重みを更新してホストメモリ上のバッファＡＲＲｅｓｕｌｔＢｕｆに格納する。なお、バッファＡＲＲｅｓｕｌｔＢｕｆはＡＲスレッドごと（言い換えるとノード１ごと）に設けられる。
【００３４】
学習スレッドは学習の度にバッファＡＲＲｅｓｕｌｔＢｕｆが更新されているか確認し、更新されている場合はその値を最新の重みとして使用する。
【００３５】
ここで、各ＧＰＵ１２（言い換えると、各学習スレッド）に一括処理させる学習データの数をサブバッチ数ＮSubbatchとする。全学習データは学習開始前に各ノード１のストレージ１３に分割して格納しておくこととする。具体的には、ストレージ１３には、アクセスされるＧＰＵ１２によって学習処理に用いられる学習データが格納されている。
【００３６】
なお、図２はあくまで一例にすぎず、例えばノード１内のＣＰＵ１１やＧＰＵ１２の数は任意である。また、ストレージ１３は各ノード１に対して外付けであってもよいし、全ノード１からアクセス可能な１つのストレージ１３に全学習データが格納されていてもよく、いずれにしても、各ノード１は学習データを高速に扱うことができる。
【００３７】
図３は、図２の学習システムにおける学習スレッドおよびＡＲスレッドの処理動作の詳細を例示するフロー図である。同図では、１つのノード１が３つのＧＰＵ１２を有する例を示している。また、図４Ａおよび図４Ｂは、それぞれ学習スレッドおよびＡＲスレッドの詳細アルゴリズムを示す擬似プログラムである。
【００３８】
学習スレッドは次の各処理を他の学習スレッドとは非同期で繰り返し行う（図３および図４Ａ参照）。
【００３９】
［Ｓ１：ＬｏｃｋＡＲＲｅｓｕｌｔ＿ＧＰＵ］
バッファＡＲＲｅｓｕｌｔＢｕｆの排他制御を獲得するまで待機する。なお、本処理に要する時間をＴLockARResult_GPUと表記し、他の処理も同様とする。
【００４０】
［Ｓ２：ＦｅｔｃｈＡＲＲｅｓｕｌｔ］
前回のＦｅｔｃｈＡＲＲｅｓｕｌｔの後に、バッファＡＲＲｅｓｕｌｔＢｕｆが更新されている場合、パラメータＷｅｉｇｈｔｓにバッファＡＲＲｅｓｕｌｔＢｕｆの値をコピーする。
【００４１】
［Ｓ３：ＬｏａｄＩｍａｇｅ］
ストレージ１３からサブバッチ数ＮSubbatch個の学習データを読み込む。
【００４２】
［Ｓ４：ＤｅｆｏｒｍＩｍａｇｅ］
読み込んだ学習データの画像に対して、透視投影変換、射影変換、弾性ひずみ（Elastic distortion）、レンズ効果、クロッピング、左右反転、ＲＧＢ値に対する乱数乗算などの変形を加える。
【００４３】
［Ｓ５：ＣＮＮ］
変形後の学習データに対して、畳み込み演算および逆拡散計算を行う。本処理の詳細は後述する。
【００４４】
［Ｓ６：ＣｏｍｐｕｔｅＵｐｄａｔｅＶａｌ］
上記のパラメータＷｅｉｇｈｔｓおよび逆拡散計算による勾配に基づいて、微分値すなわち重み更新量Ｇｒａｄを計算する。
【００４５】
［Ｓ７：ＬｏｃｋＧｒａｄｉｅｎｔ＿ＧＰＵ］
バッファＧｒａｄＢｕｆの排他制御を獲得するまで待機する。
【００４６】
［Ｓ８：ＵｐｄａｔｅＧｒａｄｉｅｎｔ］
前回のＵｐｄａｔｅＧｒａｄｉｅｎｔの後に、バッファＧｒａｄＢｕｆが更新されている場合、ＣｏｍｐｕｔｅＵｐｄａｔｅＶａｌで得られた重み更新量ＧｒａｄをバッファＧｒａｄＢｕｆにコピーし、更新されていない場合、バッファＧｒａｄＢｕｆに加算する。
【００４７】
以上説明した学習スレッドが１回の学習処理（つまり重み更新量Ｇｒａｄの算出）を行うのに要する時間ＴGPUは上記Ｓ１〜Ｓ８に示す各処理に要する時間の総和であり、下記（２）式で表される。
ＴGPU＝
ＴLockARResult_GPU  ＋
＋ＴFetchARResult  ＋
ＴLoadImage  ＋
ＴDeformImage  ＋
ＴCNN  ＋
ＴComputeUpdateVal  ＋
ＴLockGradient_GPU  ＋
ＴUpdateGradient  ・・・（２）
【００４８】
一方、ＡＲスレッドは次の各処理を学習スレッドとは非同期で繰り返し行う（図３および図４Ｂ参照）。
【００４９】
［Ｓ１１：ＬｏｃｋＧｒａｄｉｅｎｔ＿ＡＲ］
バッファＧｒａｄＢｕｆの排他制御を獲得するまで待機する。
【００５０】
［Ｓ１２：ＳｕｍＧｒａｄｉｅｎｔ］
学習スレッドによって格納されたバッファＧｒａｄＢｕｆが更新されている場合、その総和をパラメータＳｅｎｄＢｕｆに代入する。
【００５１】
［Ｓ１３：ＵｐｄａｔｅＯｌｄＷｅｉｇｈｔｓ］
ＭＰＩランクをｎ（ｎ＝０〜ＮNode−１）としたとき、バッファＡＲＲｅｓｕｌｔＢｕｆに格納された最新の値の｛ＮParam×ｎ／ＮNode｝〜｛ＮParam×（ｎ＋１）／ＮNode｝番目の要素をバッファＯｌｄＷｅｉｇｈｔｓにコピーする。ここで、ＮParamは学習すべき全重み数である。
【００５２】
［Ｓ１４：ＡｄｄＭｏｍｅｎｔｕｍ］
バッファＳｅｎｄＢｕｆに、パラメータＯｌｄＷｅｉｇｈｔｓと、前回の重み更新量との差分に関するパラメータＤｅｌｔａＷｅｉｇｈｔｓを加算する。
【００５３】
［Ｓ１５：ＭＰＩ＿Ａｌｌｒｅｄｕｃｅ］
Ａｌｌｒｅｄｕｃｅ命令を発行してバッファＳｅｎｄＢｕｆを全ノードで加算し、その結果をバッファＲｅｃｖＢｕｆに代入する。この時点で、バッファＲｅｃｖＢｕｆには更新された重みが格納される。
【００５４】
［Ｓ１６：ＵｐｄａｔｅＭｏｍｅｎｔｕｍ］
バッファＲｅｃｖＢｕｆおよびパラメータＯｌｄＷｅｉｇｈｔｓを用いて、重み更新前後の差分をパラメータＤｅｌｔａＷｅｉｇｈｔｓに代入する。
【００５５】
［Ｓ１７：ＬｏｃｋＡＲＲｅｓｕｌｔ＿ＡＲ］
バッファＡＲＲｅｓｕｌｔＢｕｆの排他制御を獲得するまで待機する。
【００５６】
［Ｓ１８：ＵｐｄａｔｅＡＲＲｅｓｕｌｔ］
バッファＲｅｃｖＢｕｆをバッファＡＲＲｅｓｕｌｔＢｕｆにコピーする。
【００５７】
以上説明したＡＲスレッドがＡｌｌｒｅｄｕｃｅ命令を発行して重み更新を１回行うのに要する時間ＴAllreduceは上記Ｓ１１〜Ｓ１８の各時間の総和であり、下記（３）式で表される。
ＴAllreduce＝
ＴLockGradient_AR  ＋
ＴSumGradient  ＋
ＴUpdateOldWeights  ＋
ＴAddMomentum  ＋
ＴMPI_Allreduce  ＋
ＴUpdateMomentum  ＋
ＴLockARResult_AR  ＋
ＴUpdateARResult  ・・・（３）
【００５８】
図５は、学習スレッドおよびＡＲスレッドの処理タイミングを模式的に説明する図である。説明を簡略化するために、ノードが２つ（ＮNode＝２）あり、そのそれぞれが３つのＧＰＵを有する（ＮGPU＝３）こととしている。
【００５９】
各四角が各学習スレッドにおいて行われる１回の学習処理を示しており、図３および図４ＡのステップＳ１〜Ｓ８の処理に対応している。各学習処理に要する時間は上記（２）式に示すＴGPUである。一方、一点鎖線の枠がＡＲスレッドにおいて行われる１回の通信処理を示しており、図３および図４ＢのステップＳ１１〜Ｓ１８の処理に対応している。各通信処理に要する時間は上記（３）式に示すＴAllreduceである。
【００６０】
図５では、ＴAllreduce：ＴGPU＝３：１としている。そのため、例えば、符号５１で示す通信処理では、符号５２，５３で示す２つの学習処理によって得られた学習結果を用いて重みが更新される。他の通信処理でも、いずれか２つの学習スレッドによって得られた学習結果が用いられる。
【００６１】
より一般的には、ＧＰＵ１２の総数がＮNode×ＮGPU個であることを考慮し、１回の通信処理では下記（４）式に示す数の学習スレッドによって得られた学習結果が用いられる。
ＮNode×ＮGPU×ＴAllreduce／ＴGPU  ・・・（４）
【００６２】
したがって、各学習スレッドに一括処理させる学習データ数すなわちサブバッチ数をＮSubbatchとすると、１回の重み更新に用いられる学習データ数すなわち平均ミニバッチサイズＮBatchは下記（５）式で表される。
ＮBatch＝（ＮNode×ＮGPU×ＮSubbatch×ＴAllreduce）／ＴGPU  ・・・（５）
【００６３】
また、総数ＮFileの全学習データを処理するのに要する学習時間ＴEpochは、ミニバッチサイズＮBatchの学習データを処理するのに要する時間がＴAllreduceであることから、下記（６）式で表される。
ＴEpoch＝ＮFile×ＴAllreduce／ＮBatch
＝（ＮFile×ＴGPU）／（ＮNode×ＮGPU×ＮSubbatch）  ・・・（６）
【００６４】
なお、学習時間ＴEpochは「エポック時間」で表される。エポックとは、学習に使用したデータ量に関する単位である。１エポックとは総数ＮFileの全学習データ１回分の学習処理を行うことを意味し、ｎエポックとは全学習データｎ回分の学習処理を行うことを意味する。そして、「１エポック時間」を１エポックの学習処理に必要な時間と定義する。なお、通常は、目的関数の収束までに、多数のエポック、例えば１００エポック程度を要する。
【００６５】
以上を踏まえ、本実施形態では、上記（５），（６）式に基づき、ノード台数ＮNode、サブバッチ数ＮSubbatchから学習時間ＴEpochおよび／または平均ミニバッチサイズＮBatchを予測するものとする。
【００６６】
図６は、予測装置の概略構成を示すブロック図である。この予測装置は、ハードウェアで構成されてもよいし、コンピュータが所定のプログラムを実行することによって実現されてもよい。
【００６７】
予測装置は予測部３１を備えている。予測部３１には、ＮＮ構造を示すパラメータ、ノード台数ＮNode、および、各ＧＰＵに一括処理させる学習データ数すなわちサブバッチ数ＮSubbatchが入力変数として入力される。
【００６８】
そして、予測部３１は、予測モデル式を用い、入力変数に基づいて学習時間ＴEpochおよび平均ミニバッチサイズＮBatchを予測し、出力変数として出力する。なお、予測部３１は学習時間ＴEpochおよび平均ミニバッチサイズＮBatchの一方を予測してもよいが、以下では両方を予測するものとする。
【００６９】
予測装置はパラメータ算出部３２を備えていてもよい。パラメータ算出部３２は、学習システムの構成から、上記のＴGPUおよびＴAllreduceを算出に必要なパラメータα，βを算出する。その詳細はＴGPUおよびＴAllreduceの算出と合わせて後述する。
【００７０】
さらに、予測装置は判定部３３を備えていてもよい。判定部３３は、算出された平均ミニバッチサイズＮBatchが適切か否か、より具体的には、平均ミニバッチサイズＮBatchが予め定められた適切な範囲に収まっているか否かを判定する。
【００７１】
また、判定部３３は、与えられたＮＮ構造に対して、平均ミニバッチサイズＮBatchが適切となるノード台数ＮNodeおよびサブバッチ数ＮSubbatchの適切な組（望ましくはすべての組）を特定してもよい。
【００７２】
そのような適切な組の中で、判定部３３は学習時間ＴEpochが最適（最小）となる組を特定してもよい。これにより、最速で適切な重みを学習できる。
【００７３】
また、そのような適切な組の中で、判定部３３はノード台数ＮNodeが最小となる組を特定してもよい。これにより、最小のノード台数で適切な重みを学習できる。
【００７４】
あるいは、そのような適切な組の中で、判定部３３はノード時間（ノード台数ＮNodeと学習時間ＴEpochとの積）が最小となる組を特定してもよい。これにより、ノード時間すなわちリソース占有時間を抑えて、適切な重みを学習できる。
【００７５】
図７は、予測部３１の構成例を示すブロック図である。予測部３１は、ＮParam算出部４１と、ＴGPU・ＴAllreduce算出部４２と、ＴEpoch算出部４３と、ＮBatch算出部４４とを有する。ＴEpoch算出部４３は上記（６）式に基づいて学習時間ＴEpochを算出する。ＮBatch算出部４４は上記（５）式に基づいて平均ミニバッチサイズＮBatchを算出する。以下、ＮParam算出部４１およびＴGPU・ＴAllreduce算出部４２について主に説明する。
【００７６】
ＴAllreduce，ＴGPUは学習すべき総重み数ＮParamに依存する。そこで、ＮParam算出部４１は総重み数ＮParamを算出する。総重み数ＮParamはＮＮ構造によって定まり、例えば以下の（７）式に基づいて算出できる。
【数１】
2018018422.tif 000003
ここで、Ｌｃは畳み込みレイヤ数、ｍｌはｌ層目のマップ数（但しｍ０は入力層のマップ数）、ｃは畳み込みフィルタサイズ、Ｌは総レイヤ数、ｘｌはｌ層目のマップサイズであり（図１参照）、これらが予測部３１にＮＮ構造を示すパラメータとして入力される。言い換えると、ＮＮ構造を示すパラメータとは、総重み数ＮParamを定めるためのパラメータである。
【００７７】
ＴGPU・ＴAllreduce算出部４２は、総重み数ＮParamおよび上記（２），（３）式に基づいてＴGPUおよびＴAllreduceを算出する。
まずは、上記（２）式に基づくＴGPUの算出について説明する。
【００７８】
［ＴLockARResult_GPU］
ＴLockARResult_GPUは各学習スレッドのロック時間の総和であり、下記（２Ａ）式で表される。
【数２】
2018018422.tif 000004
なお、ＴFetchARResultは次の（２Ｂ）式で表され、ＴUpdateARResultは後述する（３Ｅ）式で表される。
【００７９】
［ＴFetchARResult］
ＴFetchARResultは前回のＦｅｔｃｈＡＲＲｅｓｕｌｔの後に、バッファＡＲＲｅｓｕｌｔＢｕｆが更新されているか否かに依存する。更新されている確率は、ＴAllreduce＞ＴGPUであればＴGPU／ＴAllreduceであり、ＴAllreduce＜ＴGPUであれば１と仮定できる。よって、ＴFetchARResultは下記（２Ｂ）式で表される。
ＴFetchARResult  ＝  α１×ＮParam×ｍｉｎ（ＴGPU／ＴAllreduce，１）
・・・（２Ｂ）
ここで、α１は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００８０】
［ＴLoadImage］
ＴLoadImageはストレージ１３からサブバッチ数ＮSubbatch個の学習データを読み込むのに要する時間であり、下記（２Ｃ）式で表される。
ＴLoadImage  ＝  α２×ＮSubbatch＋β２  ・・・（２Ｃ）
ここで、α２，β２は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００８１】
［ＴDeformImage］
ＴDeformImageはサブバッチ数ＮSubbatch個の学習データに変形を加えるのに要する時間であり、下記（２Ｄ）式で表される。
ＴDeformImage  ＝  α３×ＮSubbatch＋β３  ・・・（２Ｄ）
ここで、α３，β３は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００８２】
［ＴCNN］
ＴCNNは畳み込み演算および逆拡散計算、具体的には図８に示すアルゴリズムを実行するのに要する時間である。
【００８３】
［Ｓ２１：ｉｍ２ｃｏｌ］
画像を列ベクトルに変換する。ｌ層目におけるこの処理に要する時間は、上記ｌ層目のマップサイズｘlおよびマップ数ｍlならびに畳み込みフィルタサイズｃを用いて下記（２Ｅ１’）式で表される。
Ｔim2col_l＝α１１l×ｘl×ｃ2×ｍl-1×ＮSubbatch＋β１１l
・・・（２Ｅ１’）
ここで、α１１l，β１１lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１）式で表される。
【数３】
2018018422.tif 000005
【００８４】
［Ｓ２２：ｃｏｎｖｏｌｕｔｉｏｎ］
列ベクトルに対して畳み込みを行う。ｌ層目におけるこの処理に要する時間は下記（２Ｅ２’）式で表される。
Ｔconvolution_l＝α１２l×ｘl2×ＮSubbatch×ｍl×ｃ2×ｍl-1＋β１２l
・・・（２Ｅ２’）
ここで、α１２l，β１２lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ２）式で表される。
【数４】
2018018422.tif 000006
【００８５】
［Ｓ２３：ｆｃ］
全結合処理を行う。より詳しくは、特徴マップの全要素を使った線形結合と活性化処理であり、全結合層が複数層連続する場合には、線形結合と活性化処理とが繰り返される。ｌ層目におけるこの処理に要する時間は下記（２Ｅ３’）式で表される。
Ｔfc_l＝α１３l×ＮSubbatch×ｍl×ｘl-12×ｍl-1＋β１３l  ・・・（２Ｅ３’）
ここで、α１３l，β１３lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ３）式で表される。
【数５】
2018018422.tif 000007
【００８６】
［Ｓ２４：ａｃｔｉｖａｔｉｏｎ］
バイアスの加算および活性化処理であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ４’）式で表される。
Ｔactivation_l＝α１４l×ｘl2×ｍl×ＮSubbatch＋β１４l  ・・・（２Ｅ４’）
ここで、α１４l，β１４lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ４）式で表される。
【数６】
2018018422.tif 000008
【００８７】
［Ｓ２５：ｐｏｏｌｉｎｇ］
プーリング処理であり、ｌ層目におけるこの処理に要する時間は、ｌ層目のプーリンググリッドサイズｐｌを用いて下記（２Ｅ５’）式で表される。
Ｔpooling_l＝α１５l×ｐl2×ｘl2×ｍl×ＮSubbatch＋β１５l
・・・（２Ｅ５’）
ここで、α１５l，β１５lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ５）式で表される。
【数７】
2018018422.tif 000009
【００８８】
［Ｓ２６：ｃ２ｆ］
列ベクトル画像に再変換する。この処理に要する時間は下記（２Ｅ６）式で表される。
Ｔc2f＝α１６×ｘl2×ｍl×ＮSubbatch＋β１６  ・・・（２Ｅ６）
ここで、α１６，β１６は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００８９】
［Ｓ２７：ｂｉａｓ］
バイアスの加算であり、この処理に要する時間は下記（２Ｅ７）式で表される。
Ｔbias＝α１７×ｍL×ＮSubbatch＋β１７  ・・・（２Ｅ７）
ここで、α１７，β１７は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００９０】
［Ｓ２８：ｓｏｆｔｍａｘ］
ソフトマックス処理であり、この処理に要する時間は下記（２Ｅ８）式で表される。
Ｔsoftmax＝α１８×ｍL×ＮSubbatch  ・・・（２Ｅ８）
ここで、α１８は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００９１】
［Ｓ２９：ｓｏｆｔｍａｘ＿Ｂ］
コスト関数の、ソフトマックス関数の入力に対する微分計算であり、この処理に要する時間は下記（２Ｅ９）式で表される。
Ｔsoftmax_B＝α１９×ｍL×ＮSubbatch  ・・・（２Ｅ９）
ここで、α１９は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００９２】
［Ｓ３０：ｄｅｄｘ＿ｆｃ］
将来のベクトルに対する逆拡散処理であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１０’）式で表される。
Ｔdedx_fc_l＝α２０l×ＮSubbatch×ｘl2×ｍl×ｍl+1＋β２０l
・・・（２Ｅ１０’）
ここで、α２０l，β２０lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１０）式で表される。
【数８】
2018018422.tif 000010
【００９３】
［Ｓ３１：ｄｅｄｘ＿ｃｏｎｖ］
将来のベクトルに対する逆拡散処理であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１１’）式で表される。
Ｔdedx_conv＝α２１l×ｘl+12×ＮSubbatch×ｃ2×ｍl×ｍl+1＋β２１l
・・・（２Ｅ１１’）
ここで、α２１l，β２１lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１１）式で表される。
【数９】
2018018422.tif 000011
【００９４】
［Ｓ３２：ｃ２ｆ＿Ｂ］
ｃ２ｆの逆演算であり、この処理に要する時間は下記（２Ｅ１２）式で表される。
Ｔc2f_B＝α２２×ｘl2×ｍl×ＮSubbatch＋β２２  ・・・（２Ｅ１２）
ここで、α２２，β２２は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【００９５】
［Ｓ３３：ｉｍ２ｃｏｌ＿Ｂ］
ｉｍ２ｃｏｌの逆演算であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１３’）式で表される。
Ｔim2col_B_l＝α２３l×ｘl2×ｃ2×ｍl×ＮSubbtach＋β２３l
・・・（２Ｅ１３’）
ここで、α２３l，β２３lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１３）式で表される。
【数１０】
2018018422.tif 000012
【００９６】
［Ｓ３４：ｐｏｏｌｉｎｇ＿Ｂ］
プーリングの逆演算であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１４’）式で表される。
Ｔpooling_B＝α２４l×ｘl2×ｍl×ＮSubbatch＋β２４l  ・・・（２Ｅ１４’）
ここで、α２４l，β２４lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１４）式で表される。
【００９７】
【数１１】
2018018422.tif 000013
【００９８】
［Ｓ３５：ａｃｔｉｖａｔｉｏｎ＿Ｂ］
コスト関数の、活性化関数の入力に対する微分計算であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１５’）式で表される。
Ｔactivation_B＝α２５l×ｘl2×ｍl×ＮSubbatch＋β２５l
・・・（２Ｅ１５’）
ここで、α２５l，β２５lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１５）式で表される。
【数１２】
2018018422.tif 000014
【００９９】
［Ｓ３６：ｄｅｄｗ］
コスト関数の、重みに対する微分計算であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１６’）式で表される。
Ｔdedw_l＝α２６l×ｃl-12×ｍl-1×ｍl×ｘl2×ＮSubbatch
＋β２６l  ・・・（２Ｅ１６’）
ここで、α２６l，β２６lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１６）式で表される。
【数１３】
2018018422.tif 000015
【０１００】
［Ｓ３７：ｄｅｄｂ］
コスト関数の、バイアスに対する微分計算であり、ｌ層目におけるこの処理に要する時間は下記（２Ｅ１７’）式で表される。
Ｔdedb_l＝α２７l×ｍl×ｘl2×ＮSubbatch＋β２７l  ・・・（２Ｅ１７’）
ここで、α２７l，β２７lは学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
そして、本処理に要する合計時間は下記（２Ｅ１７）式で表される。
【数１４】
2018018422.tif 000016
【０１０１】
以上から、ＴＮＮは上記（２Ｅ１）〜（２Ｅ１７）式の総和であり、下記（２Ｅ）式で表される。
ＴCNN＝
Ｔim2col  ＋
Ｔconvolution  ＋
Ｔfc  ＋
Ｔactivation  ＋
Ｔpooling  ＋
Ｔc2f  ＋
Ｔbias  ＋
Ｔsoftmax  ＋
Ｔsoftmax_B  ＋
Ｔdedx_fc  ＋
Ｔdedx_conv  ＋
Ｔc2f_B  ＋
Ｔim2col_B  ＋
Ｔpooling_B  ＋
Ｔactivation_B  ＋
Ｔdedw  ＋
Ｔdedb  ・・・（２Ｅ）
【０１０２】
上記（２）式に戻って説明を続ける。
［ＴComputeUpdateVal］
ＴComputeUpdateValは長さＮParamのベクトル同士の演算に要する時間であり、下記（２Ｆ）式で表される。
ＴComputeUpdateVal＝α４×ＮParam  ・・・（２Ｆ）
ここで、α４は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１０３】
［ＴLockGradient_GPU］
ＴLockGradient_GPUは下記（２Ｇ）式で表される。
ＴLockGradient_GPU＝（ＴSumGradient／ＮGPU）2／（２×ＴAllreduce）
・・・（２Ｇ）
なお、ＴSumGradientは後述する（３Ｂ）式で表される。
【０１０４】
［ＴUpdateGradient］
ＴUpdateGradientは主にホストメモリへの転送時間であり、下記（２Ｈ）式で表される。
ＴUpdateGradient＝α５×ＮParam  ・・・（２Ｈ）
ここで、α５は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
続いて、上記（３）式に基づくＴAllreduceの算出について説明する。
【０１０５】
［ＴLockGradient_AR］
ＴLockGradient_ARはＴLockARResult_GPUと同様に下記（３Ａ）式で表される。
ＴLockTrResutl_A＝ＮGPU×ＴUpdateGradient2／（２×ＴGPU）
・・・（３Ａ）
【０１０６】
［ＴSumGradient］
ＴSumGradientはＴFetchARResultと同様に考えることができ、下記（３Ｂ）式で表される。
ＴSumGradient＝α３１×ＮGPU×ＮParam×ｍｉｎ（ＴAllreduce/ＴGPU，１）
・・・（３Ｂ）
ここで、α３１は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１０７】
［ＴUpdateOldWeights］
ＴUpdateOldWeightsはＮNodeに反比例した長さのベクトル計算を行うため、下記（３Ｃ）式で表される。
ＴSumGradient＝α３２×ＮParam／ＮNode  ・・・（３Ｃ）
ここで、α３２は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１０８】
［ＴAddMomentum］
ＴAddMomentumはＮNodeに反比例した長さのベクトル計算を行うため、下記（３Ｄ）式で表される。
ＴAddMomentum＝α３３×ＮParam／ＮNode  ・・・（３Ｄ）
ここで、α３３は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１０９】
［ＴMPI_Allreduce］
ＴMPI_AllreduceはＡｌｌｒｅｄｕｃｅによる足し合わせを２ノードずつ行うとして、下記（３Ｅ）式で表される。
ＴMPI_Allreduce＝（α３４×ｌｏｇ2ＮNode＋β３４）×ＮParam
・・・（３Ｅ）
ここで、α３４，β３４は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１１０】
［ＴUpdateMomentum］
ＴUpdateMomentumはＮNodeに反比例した長さのベクトル計算を行うため、下記（３Ｆ）式で表される。
ＴUpdateMomentum＝α３５×ＮParam／ＮNode  ・・・（３Ｆ）
ここで、α３５は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１１１】
［ＴLockARResult_AR］
ＴLockARResult_ARはＴLockGradient_ARと同様に下記（３Ｇ）式で表される。
ＴLockARResult_AR＝ＮGPU×ＴFetchARResult2／（２×ＴGPU）
・・・（３Ｇ）
【０１１２】
［ＴUpdateARResult］
ＴUpdateARResultは長さＮParamの配列のメモリコピーであるから、下記（３Ｅ）式で表される。
ＴUpdateARResult＝α３６×ＮParam  ・・・（３Ｅ）
ここで、α３６は学習システムに応じた固定パラメータであり、パラメータ算出部３２によって予め算出されている。
【０１１３】
以上の数式の各α，β（添え字は省略）が確定していれば、上記（２），（２Ａ）〜（２Ｈ），（３），（３Ａ）〜（３Ｅ）式を連立させることでＴGPU，ＴAllreduceが算出される。例えば、ＴGPU，ＴAllreduceに任意の初期値を入れて反復的に更新し、更新差分が十分に小さくなるまで更新を続けることで、ＴGPU，ＴAllreduceが得られる。あるいは、別の数値解法を用いてＴGPU，ＴAllreduceを得てもよい。
【０１１４】
続いて、パラメータ算出部３２によるα，βの算出法を説明する。添え字に関わらずα，βの算出法は共通するので、上記（２Ｅ６）式におけるＴｃ２ｆ用のα１６，β１６を代表して説明する。
【０１１５】
上記（２Ｅ６）式において、Ｔc2fはＮSubbatchについての一次関数で与えられる。そこで、少なくとも２通りのＮSubbatchを指定して所与の学習システムによりｃ２ｆを実行し、その所要時間Ｔc2fを計測する。そして、線形回帰を行うことで、α１６，β１６を算出できる。なお、β１６は理想的には０であるが、関数の呼び出しなどのオーバーヘッドがあることも考慮して設定される定数である。
【０１１６】
他のα，βについてもＮSubbatchについての一次関数となっているから、同様にして算出可能である。
【０１１７】
α，βは学習システム（計算機クラスタ）の性能を表現しており、学習システムが変わらなければ一定値である。よって、同じ学習システムを使い続ける限り、予めα，βを算出しておけばよく、平均ミニバッチサイズＮBatchや学習時間ＴEpochを算出する度に算出する必要はない。逆に言うと、学習システムが変わった場合には、α，βを算出し直す必要がある。
【０１１８】
以上のようにして、予めパラメータ算出部３２によって算出されたα，βから、ＴGPU・ＴAllreduce算出部４２（図６）はＴGPU，ＴAllreduceを算出できる。そして、ＴEpoch算出部４３およびＮBatch算出部４４は、それぞれ上記（６），（５）式に基づいて、学習時間ＴEpochおよび平均ミニバッチサイズＮBatchを算出できる。
【０１１９】
このように、本実施形態では、予測モデル式に所与のＣＮＮ構造を入力することで、平均ミニバッチサイズＮBatchや学習時間ＴＥｐｏｃｈを予測できる。そのため、適正なミニバッチサイズや学習時間が得られる学習システム、より具体的には、ノード台数やサブバッチ数を設計できる。
【０１２０】
上述した実施形態は、本発明が属する技術分野における通常の知識を有する者が本発明を実施できることを目的として記載されたものである。上記実施形態の種々の変形例は、当業者であれば当然になしうることであり、本発明の技術的思想は他の実施形態にも適用しうることである。したがって、本発明は、記載された実施形態に限定されることはなく、特許請求の範囲によって定義される技術的思想に従った最も広い範囲とすべきである。
【符号の説明】
【０１２１】
１  ノード
１１  ＣＰＵ
１２  ＧＰＵ
１３  ストレージ
２１  畳み込み層
２２  プーリング部
２３  多層ニューラルネットワーク構造
３１  予測部
３２  パラメータ算出部
４１  ＮParam算出部
４２  ＴGPU・ＴAllreduce算出部
４３  ＴEpoch算出部
４４  ＮＢａｔｃｃｈ算出部
【図１】
2018018422.tif 000017
【図２】
2018018422.tif 000018
【図３】
2018018422.tif 000019
【図４Ａ】
2018018422.tif 000020
【図４Ｂ】
2018018422.tif 000021
【図５】
2018018422.tif 000022
【図６】
2018018422.tif 000023
【図７】
2018018422.tif 000024
【図８】
2018018422.tif 000025