(57)【要約】【課題】データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減する。【解決手段】実施形態の情報処理装置は、メモリと、制御部とを有する。制御部は、ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、いずれか一層又は所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータをメモリへ格納するタイミングについて、第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内にメモリへの転送が完了するタイミングを決定する。また、制御部は、ニューラルネットワークの各層の計算を順に行う際に、決定したタイミングに基づいて第１の層の計算に関するデータを前記メモリへ格納する。【選択図】図５
2020102108.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータの前記メモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する制御部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、前記第１の層に対して直近に計算を行う層から順に前記一または複数の第２の層における計算時間の総時間と、前記第１の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第１の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第１の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記計算は、バックワード処理に関する計算であることを特徴とする請求項１〜３のいずれか一項に記載の情報処理装置。
【請求項５】
前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする請求項１〜４のいずれか一項に記載の情報処理装置。
【請求項６】
ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項７】
ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理プログラムおよび情報処理方法に関する。
【背景技術】
【０００２】
近年、多層構造のニューラルネットワークを用いた機械学習が注目されている。このような多層構造のニューラルネットワークを用いた機械学習は、ディープラーニング（深層学習）とも呼ばれる。ディープラーニングは、ニューラルネットワークの多階層化が進んでおり、多くの分野で有効性が確認されている。例えば、ディープラーニングは、画像・音声の認識において人間に匹敵するほど高い認識精度を発揮している。
【０００３】
ディープラーニングでは、計算量が膨大であるためアクセラレータによる高速化が行われている。アクセラレータ上のメモリ容量には限りがあり、このメモリ容量は、数ＴＢ（テラバイト）のホストメモリに比べて、例えば、〜１６ＧＢ（ギガバイト）程度のものである。このため、ある計算タイミングで使用されていないメモリ領域は、アクセラレータからホスト側に退避させる。そして、ニューラルネットワークの各層の計算開始時に、別の層のニューロンデータをホスト−アクセラレータ間で転送して再度読み込むようにすることで、アクセラレータにおけるメモリ使用量を削減している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−１３８８６７号公報
【特許文献２】特開２００９−８０６９３号公報
【非特許文献】
【０００５】
【非特許文献１】Minsoo  Rhu,  et  al.  "vDNN:  Virtualized  deep  neural  networks  for  scalable,  memory-efficient  neural  network  design."  The  49th  Annual  IEEE/ACM  International  Symposium  on  Microarchitecture  (MICRO-49),  2016
【非特許文献２】Tianqi  Chen,  et  al.  "Training  deep  nets  with  sublinear  memory  cost."  arXiv  preprint  arXiv:1604.06174  (2016)
【非特許文献３】Song  Han,  Huizi  Mao,  and  William  J.  Dally.  "Deep  compression:  Compressing  deep  neural  networks  with  pruning,  trained  quantization  and  huffman  coding."  arXiv  preprint  arXiv:1510.00149  (2015)
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の従来技術では、ホスト−アクセラレータ間のデータ転送に要する転送時間が計算時間より大きくなる層で待ち時間が生じる場合があるという問題がある。
【０００７】
具体的には、ディープラーニングは、ニューラルネットワークの多階層化により、使用メモリ量が大きくなっており、学習時に使用メモリ量がさらに増加する。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解とを比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更する。このため、学習時には、使用メモリ量が増加してデータ転送に要する転送時間が長くなり、転送時間が計算時間より大きくなる層で待ち時間が生じることがある。
【０００８】
１つの側面では、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することを可能とする情報処理装置、情報処理プログラムおよび情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、情報処理装置は、メモリと、制御部とを有する。制御部は、ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、いずれか一層又は所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータをメモリへ格納するタイミングについて、第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内にメモリへの転送が完了するタイミングを決定する。また、制御部は、ニューラルネットワークの各層の計算を順に行う際に、決定したタイミングに基づいて第１の層の計算に関するデータを前記メモリへ格納する。
【発明の効果】
【００１０】
本発明の１実施態様によれば、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、ディープラーニングの処理の流れの一例を模式的に示した図である。
【図２−１】図２−１は、畳み込み演算の一例を模式的に示した図である。
【図２−２】図２−２は、活性化関数の一例（ＲｅＬＵ）を模式的に示した図である。
【図２−３】図２−３は、間引きの一例を模式的に示した図である。
【図２−４】図２−４は、全結合の一例を模式的に示した図である。
【図３】図３は、プリフェッチを行う中間層を含むニューラルネットワークの計算の流れの一例を示す図である。
【図４】図４は、実施形態にかかる情報処理装置の機能的な構成を概略的に示した図である。
【図５】図５は、実施形態にかかる情報処理装置の動作例を示すフローチャートである。
【図６】図６は、プリフェッチのタイミングの決定方法の一例を示すフローチャートである。
【図７】図７は、メモリ量の計算方法の一例を示すフローチャートである。
【図８】図８は、メモリ使用領域の一例を示す説明図である。
【図９】図９は、ＤＮＮ学習実行の一例を示すフローチャートである。
【図１０−１】図１０−１は、プリフェッチの一例を説明する説明図である。
【図１０−２】図１０−２は、プリフェッチの一例を説明する説明図である。
【図１０−３】図１０−３は、プリフェッチの一例を説明する説明図である。
【図１１−１】図１１−１は、推定値を用いたシミュレーションの一例を説明する説明図である。
【図１１−２】図１１−２は、推定値を用いたシミュレーションの一例を説明する説明図である。
【図１２】図１２は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、実施形態にかかる情報処理装置、情報処理プログラムおよび情報処理方法を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する情報処理装置、情報処理プログラムおよび情報処理方法は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
【００１３】
［ディープラーニングの説明］
ディープラーニングについて説明する。図１は、ディープラーニングの処理の流れの一例を模式的に示した図である。
【００１４】
ディープラーニングでは、識別対象に関する教師あり学習を行うことにより、ニューラルネットワークに自動的に識別対象の特徴を学習する。ディープラーニングでは、特徴を学習したニューラルネットワークを用いて識別対象を識別する。例えば、ディープラーニングでは、識別対象が写った大量の画像を学習用の画像として教師あり学習を行うことにより、画像に写った識別対象の特徴をニューラルネットワークに自動的に学習する。ディープラーニングでは、このように特徴を学習したニューラルネットワークを用いることで画像に写った識別対象を識別できる。
【００１５】
脳には、多数のニューロン（神経細胞）が存在する。各ニューロンは、他のニューロンから信号を受け取り、他のニューロンへ信号を受け渡す。脳は、この信号の流れによって、様々な情報処理を行う。ニューラルネットワークは、このような脳の機能の特性を計算機上で実現したモデルである。ニューラルネットワークは、脳のニューロンを模したユニットを階層的に結合している。ユニットは、ノードとも呼ばれる。各ユニットは、他のユニットからデータを受け取り、データにパラメータ（重み）を適用して他のユニットへ受け渡す。ニューラルネットワークは、ユニットのパラメータを学習によって変化させて受け渡すデータを変化させることで様々な識別対象を識別（認識）できる。以下では、ニューラルネットワークで伝送されるデータをニューロンデータと呼ぶ。
【００１６】
図１には、ニューラルネットワークの一例として、画像の認識に用いられる畳み込みニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）の一例が示されている。以下では、ニューラルネットワークとして、畳み込みニューラルネットワークにより画像の認識を行う場合を例に説明する。
【００１７】
ニューラルネットワークは、階層構造を持った階層ニューラルネットワークであり、入力層と出力層との間に複数の中間層を有し得る。複数の中間層は、例えば、畳み込み層、活性化関数層、プーリング層、全結合層、及びソフトマックス層を含む。各層の数及び位置は、図１に例示したものに限定されず、要求されるアーキテクチャに応じて随時変更され得る。すなわち、ニューラルネットワークの階層構造や各層の構成は、識別する対象などに応じて、設計者が予め定めることができる。
【００１８】
ニューラルネットワークでは、画像の識別を行う場合、図１に示すように、左から右へ各中間層の処理を行うことで画像に写った識別対象の特徴を抽出し、最後に出力層で画像に写った識別対象の識別（カテゴライズ）を行う。この処理をフォワード（ＦＷＤ）処理又は認識処理と呼ぶ。一方、ニューラルネットワークでは、画像の学習を行う場合、識別した結果と正解との誤差を求め、図１に示すように、右から左へニューラルネットワークに逆伝播させ、各中間層のパラメータ（重み）を変更する。この処理をバックワード（ＢＷＤ）処理又は学習処理と呼ぶ。
【００１９】
次に、各中間層の演算について説明する。畳み込み層では、入力したニューロンデータの畳み込み演算（畳み込み処理）を行い、入力ニューロンデータの特徴を抽出する。図２−１は、畳み込み演算の一例を模式的に示した図である。図２−１の例では、入力したＮ×Ｎピクセルの画像の畳み込み演算をする場合を示している。畳み込み層では、Ｎ×Ｎピクセルの画像の各画素の値をそれぞれニューロンデータとして、それぞれパラメータが設定されたｍ×ｍのサイズのフィルタと畳み込み（convolution）を計算することで、次層への出力用のニューロンデータを作成する。
【００２０】
活性化関数層では、畳み込み層で抽出された特徴を強調する。すなわち、活性化関数層では、活性化関数σに出力用のニューロンデータを通過させることで、発火（activation）をモデル化する。発火とは、ニューロンから出力される信号の値がある値を超えるときに出力される信号が他のニューロンに伝達される現象をいう。
【００２１】
例えば、畳み込み層（Conv1,  Conv2）では、以下の式（１）に示すような畳み込み演算を行い、その演算結果に対して、活性化関数層（ReLU1,  ReLU2）では、以下の式（２）に示すような活性化関数σの演算を行う。
【００２２】
【数１】
2020102108.tif 000003
【００２３】
ここで、ｙＬ−１（ｉ＋ａ）（ｊ＋ｂ）は、入力となるニューロンデータであり、図２−１に示すＮ×Ｎピクセルの画像（層Ｌ−１）ｙＬ−１の（ｉ＋ａ，ｊ＋ｂ）の画素のデータである。ｗａｂは、図２−１に示すｍ×ｍのフィルタｗの重みを表す各パラメータである。ｘＬｉｊは、畳み込み演算された（ｉ，ｊ）の画素のデータである。ｙＬｉｊは、ｘＬｉｊに活性化関数σを適用し、所定のバイアスｂＬを加えた結果としてユニットＵＬｉ（層Ｌ）の出力となり、さらに次の層Ｌ＋１の入力ともなるニューロンデータである。
【００２４】
活性化関数層（ReLU1,  ReLU2）で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、ＲｅＬＵ（Rectified  Linear  Unit：ランプ関数）を用いることができる。図２−２は、活性化関数σの一例（ＲｅＬＵ）を模式的に示した図である。図２−２の例では、入力ｘがゼロ未満の場合、出力ｙにはゼロが出力される。また、入力ｘがゼロを超えた場合、出力ｙには入力ｘの値が出力される。
【００２５】
プーリング層では、入力したニューロンデータの間引きを行う。図２−３は、間引きの一例を模式的に示した図である。例えば、Ｎ×Ｎピクセルの画像がニューロンデータとして入力される。プーリング層では、Ｎ×Ｎピクセルのニューロンデータから、（Ｎ／ｋ）×（Ｎ／ｋ）のニューロンデータに間引く。例えば、ｋ×ｋの領域ごとに、最大値を取り出すMax-Poolingにより、間引きを行う。間引きは、その他、何れの手法で行ってもよい。例えば、ｋ×ｋの領域の平均値を取り出すAverage-Poolingで、間引きを行ってもよい。また、プーリング層では、間引きを行うｋ×ｋの領域を一部重複させてもよく、重複させずに隣接させて間引きを行ってもよい。
【００２６】
例えば、プーリング層（Pool1,  Pool2）では、以下の式（３）に示すようなMax-Poolingを行う。
【００２７】
【数２】
2020102108.tif 000004
【００２８】
ここで、関数ｍａｘは、図２−３に示す（ｉ，ｊ）の画素からそれぞれｋ画素の範囲の領域内で最大値のニューロンデータを出力する関数である。ｙＬｉ，Ｊは、ユニットＵＬｉの出力となるニューロンデータである。
【００２９】
全結合層では、抽出された特徴を結合して特徴を示す変数を生成する。すなわち、全結合層では、識別を行う対象数に応じて、入力したニューロンデータを全結合した全結合の演算を行う。例えば、Ｎ×Ｎピクセルの画像がニューロンデータとして入力される。全結合層は、Ｎ×Ｎピクセルのニューロンデータ全てを、それぞれ重み（パラメータ）と掛け合わせることで、次層への出力用のニューロンデータを作成する。
【００３０】
ソフトマックス層は、全結合層で生成された変数を確率に変換する。すなわち、ソフトマックス層は、正規化するような活性化関数σに出力用のニューロンデータを通過させる演算を行うことで、発火をモデル化する。
【００３１】
図２−４は、全結合の一例を模式的に示した図である。図２−４の例は、識別を行う対象数をｉ個とした場合にｊ個のニューロンデータをそれぞれ全結合してｉ個のニューロンデータを得る場合の一例を示している。例えば、全結合層（Fully-conn1）では、以下の式（４）に示すような全結合の演算を行い、その演算結果に対して、ソフトマックス層（Softmax）では、以下の式（５）に示すような演算を行う。
【００３２】
【数３】
2020102108.tif 000005
【００３３】
ここで、ｙＬ−１ｊは、ユニットＵＬ−１の出力であり、ユニットＵＬの入力となるニューロンデータである。ｗＬ−１ｊｉは、ｙＬ−１ｊとｙＬｉに対応した重みを表すパラメータである。ｘＬｉは、重み付け演算されたデータである。ｙＬｉは、ｘＬｉに活性化関数σを適用し、所定のバイアスｂＬｉを加えた結果のユニットＵＬｉの出力となるニューロンデータである。
【００３４】
ソフトマックス層（Softmax）で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、Softmax関数を用いることができる。ニューラルネットワークによる演算結果のニューロンデータは、実数となる。ソフトマックス層は、結果の識別を行いやすいように演算結果のニューロンデータを正規化する。
【００３５】
例えば、ソフトマックス層（Softmax）は、Softmax関数などの活性化関数を用いて演算結果のニューロンデータを０〜１の範囲に正規化する。Softmax関数は、ロジスティック関数を一般化したものであり、任意の実数を持つｎ次元ベクトルｘを、（０，１）区間の実数で和が１になるようなｎ次元ベクトルσ（ｘ）に正規化する。例えば、出力層では、以下の式（６）に示すSoftmax関数の演算を行う。
【００３６】
【数４】
2020102108.tif 000006
【００３７】
これにより、ニューラルネットワークによる演算結果のｎ個のニューロンデータｘｉは、それぞれの認識対象ｉである確率σ（ｘ）の確率分布に変換される。ソフトマックス層（Softmax）による演算結果のニューロンデータは、出力層に出力され、出力層で識別が行われる。
【００３８】
例えば、画像に写った識別対象が１０種類の何れであるかの識別を行う場合、演算結果として１０個のニューロンデータが全結合層からソフトマックス層を経由して出力層に出力される。出力層は、確率分布が最も大きいニューロンデータに対応する画像の種類を識別結果とする。また、学習を行う場合、出力層は、認識結果と正解とを比較して誤差を求める。例えば、出力層は、交差エントロピー誤差関数を利用して目的の確率分布（正解）との誤差を求める。例えば、出力層は、以下の式（７）に示す誤差関数の演算を行う。
【００３９】
【数５】
2020102108.tif 000007
【００４０】
ここで、ｔｉは、目的の分布であり、認識対象ｉが正解である場合、１とし、その他の場合０とする。ｙｉは、ニューラルネットワークによる演算された認識対象ｉの確率σ（ｘｉ）である。
【００４１】
ディープラーニングでは、教師あり学習を行うことにより、ニューラルネットワークに自動的に特徴を学習させる。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解とを比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更して最適解に近づけていく。
【００４２】
次に、誤差の計算の一例を説明する。例えば、誤差逆伝播法では、認識時におけるニューロンデータの誤差として、以下の式（８）に示す誤差関数の偏微分の演算を行う。
【００４３】
【数６】
2020102108.tif 000008
【００４４】
誤差逆伝播法では、出力層（Output）におけるパラメータの誤差の勾配を以下の式（９）から計算する。なお、Softmax関数の演算を行うソフトマックス層（Softmax）では、式（８）の結果が式（９）の誤差の勾配となる。
【００４５】
【数７】
2020102108.tif 000009
【００４６】
また、誤差逆伝播法では、出力層（Output）での誤差から入力への誤差の勾配を部分微分を用いて計算する。例えば、ＲｅＬＵなどの活性化関数の演算を行う活性化関数層（ReLU1,  ReLU2）では、以下の式（１０−１）から入力の誤差の勾配を計算する。σ’(ｘ)は、σ(ｘ)をｘで偏微分したものであり、以下の式（１０−２）から求められる。ｘは、認識時で使用した値を用いる。σ’(ｘ)を、式（１０−１）に代入すると誤差の勾配（∂Ｅ／∂ｘＬｉ）が求まる。
【００４７】
【数８】
2020102108.tif 000010
【００４８】
また、誤差逆伝播法では、演算にパラメータ（重み）を有する層についてはパラメータの誤差の勾配を計算する。例えば、式（４）に示す全結合の演算では、以下の式（１１−１）からパラメータの誤差の勾配を計算する。また、式（１）に示す畳み込み演算では、以下の式（１１−２）からパラメータの誤差の勾配を計算する。なお、偏微分の連鎖律を用いて計算すると得られるｙＬｉは、認識時に使用した値を用いる。
【００４９】
【数９】
2020102108.tif 000011
【００５０】
また、誤差逆伝播法では、前の層（Ｌ−１層）への誤差の勾配を算出する。例えば、前の層が全結合の演算を行う層である場合は、以下の式（１２−１）から前の層への誤差の勾配を算出する。また、前の層が畳み込み演算を行う層である場合は、以下の式（１２−２）から前の層への誤差の勾配を算出する。なお、偏微分の連鎖律を用いて計算すると得られるｗＬｉｊは、認識時に使用した値を用いる。また、前の層がMax-Poolingを行うプーリング層（Pool1,  Pool2）である場合は、認識時にｋ×ｋの領域の最大値を取った場所に対して誤差の勾配（∂Ｅ／∂ｘＬｉ）を加算する。なお、ｋ×ｋの領域のその他の場所に対しては、何も行わない。
【００５１】
【数１０】
2020102108.tif 000012
【００５２】
誤差の計算では、ニューラルネットワークに逆伝播させ、ニューラルネットワークの最上位の層である入力層（Input）に到達するまで各中間層の誤差の勾配の計算を繰り返す。例えば、出力層（Output）での誤差から入力への誤差の勾配を式（１０−１）を用いて計算する。例えば、式（１０−１）に示す入力の誤差は、下層が出力層の場合、式（９）の誤差の勾配を代入して求める。また、式（１０−１）に示す入力の誤差は、下層が出力層以外の場合、式（１２−１）、（１２−２）から算出される誤差の勾配を代入して求める。また、例えば、式（１１−１）に示すパラメータの誤差の勾配は、式（１０−１）から算出される誤差を代入して求める。また、例えば、式（１２−１）に示す前の層への誤差は、式（１０−１）から算出される誤差を代入して求める。そして、誤差の計算では、誤差に応じて全層のパラメータを更新する。
【００５３】
ニューラルネットワークは、図１、図２−１〜図２−４に例示したような画像認識に用いられるほか、音声認識、言語認識などの様々な認識処理に適用され得る。この認識処理の高精度化を図るために、ニューラルネットワークの層数が増加されニューラルネットワークが巨大化されることがある。ニューラルネットワークが巨大化されると、ディープラーニングの計算量が膨大になりやすいが、ＧＰＵ（Graphics  Processing  Unit）や専用チップなどのアクセラレータ（アクセラレータボード）で演算を行うことにより、処理を高速化できる。このとき、アクセラレータ（アクセラレータボード）をホスト（マザーボード）と通信可能に接続してホスト上のメモリ（ホストメモリ）を用いながらディープラーニングを行うと、処理の速度が通信路のデータ転送の速度により制約される。アクセラレータとホストとのデータ転送はアクセラレータ内のデータ転送に比べて低速であるため、アクセラレータ内のローカルメモリ上で処理する方が、処理を高速化できる。
【００５４】
アクセラレータ内のローカルメモリは、高い性能を出すために消費電力やチップ面積に限りがある。すなわち、アクセラレータ内のローカルメモリの記憶容量は、ホストメモリの記憶容量に比べて限られている。例えば、ホストメモリの記憶容量が数百ＧＢであるのに対して、アクセラレータ内のローカルメモリの記憶容量は、１６ＧＢであり、可能なニューラルネットワークサイズが制限される。
【００５５】
それに対して、ニューラルネットワークにおける少なくとも一部の中間層について、ある計算タイミングで使用されていないメモリ領域をアクセラレータからホスト側に退避させる。そして、ニューラルネットワークの各層の計算開始時に、別の層のニューロンデータをホスト−アクセラレータ間で転送（プリフェッチ）して再度読み込むようにする。
【００５６】
具体的には、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータの、アクセラレータのメモリへの転送時間とに基づき、所定の層（第１の層）の計算に関するデータをアクセラレータのメモリへ格納するタイミングを決定する。より具体的には、第１の層よりも先に計算を行う一または複数の第２の層における計算時間の総時間内にメモリへの転送が完了するタイミングを決定する。そして、ニューラルネットワークの各層の計算を順に行う際に、決定したタイミングに基づいて第１の層の計算に関するデータをアクセラレータのメモリへ格納する。このようにプリフェッチすることで、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することができる。なお、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータのアクセラレータのメモリへの転送時間ではなく、複数の層のいずれか一層のみ又は所定数の層の各々について予め推定した計算時間と、当該複数の層のいずれか一層のみ又は所定数の層の各々に対する計算に関するデータのアクセラレータのメモリへの転送時間とに基づき、所定の層の計算に関するデータをアクセラレータのメモリへ格納するタイミングを決定しても良い。
【００５７】
図３は、プリフェッチを行う中間層を含むニューラルネットワークの計算の流れの一例を示す図である。図３の例は、ニューラルネットワークとして、畳み込みニューラルネットワークの学習を行う際の各データと処理の順序を示している。ニューラルネットワークは、各層が順に並んだ階層構造とされている。ニューラルネットワークは、入力層（Input）、第１の畳み込み層（Conv1）、第１の活性化関数層（ReLU1）、第２の畳み込み層（Conv2）、第２の活性化関数層（ReLU2）、第２のプーリング層（Pool2）、第１の全結合層（FC1:Fully-Ｃonn1）、第３の活性化関数層（ReLU3）の各層を順に含む。ニューラルネットワークは、第２の全結合層（FC2:Fully-Ｃonn2）、ソフトマックス層（Softmax）、出力層（Output）の各層をさらに順に含む。また、図３では、インプレイス処理を行う中間層が活性化関数層（ReLU1,  ReLU2,  ReLU3）である場合が例示されている。
【００５８】
図３において、「ニューロン（ｘ）」は、各層のニューロンデータのデータサイズを示している。「パラメータ（Ｗ、ｂ）」は、各層のパラメータのデータサイズを示している。「ニューロン誤差（ΔＸ）」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「パラメータ誤差（ΔＷ，Δｂ）」は、各層のパラメータの誤差の勾配のデータサイズを示している。なお、矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【００５９】
図３に示すように、ニューラルネットワークの学習を行う場合、フォワード（ＦＷＤ）処理（認識処理）が行われ、その後、バックワード（ＢＷＤ）処理（学習処理）が行われる。認識処理では、学習対象の画像を識別する処理が行われる。すなわち、認識処理では、学習対象の画像に対して数字の「１」〜「９」の順に各層の処理が行われ、処理結果が出力される。
【００６０】
次に、認識処理の処理結果からパラメータを更新する学習処理が行われる。例えば、学習処理では、数字の「１０」に示すように識別結果と正解とを比較して誤差を求める。Labelは、学習対象の画像の正解を示す。そして、学習処理では、認識結果と正解との誤差を、数字の「１１」〜「２１」の順に各層の誤差の勾配を算出する処理が行われる。そして、学習処理では、数字の「２２」に示すように各階層のパラメータを変更する処理が行われる。なお、パラメータの変更は、各階層ごとに誤差の勾配が算出されたタイミングで行ってもよい。
【００６１】
ここで、ＦＷＤ時に使用済みのメモリ領域をアクセラレータからホストのメモリに退避する。そして、ＢＷＤにおいて各層の計算時までに退避したデータをホストからアクセラレータにプリフェッチしてアクセラレータのメモリ使用量を削減する。具体的には、各層について予め推定したメモリへの転送時間と、計算時間とに基づいて、第１の層よりも先に計算を行う一または複数の第２の層における計算時間の総時間内に第１の層のプリフェッチが完了するタイミングを決定する。そして、決定したタイミングで第１の層のプリフェッチを行い、プリフェッチにおける転送時間が計算時間により隠蔽されるようにする。図３の例では、ＢＷＤのＦＣ１層の計算時に、計算時間により転送時間が隠蔽されるように２層手前（ReLu2，Pool2）までプリフェッチしている。これにより、データ転送により待ち時間が生じることを抑止できる。
【００６２】
［情報処理装置の構成］
次に、上記のディープラーニングに関する処理を実行する情報処理装置について説明する。図４は、実施形態にかかる情報処理装置の機能的な構成を概略的に示した図である。
【００６３】
図４に示す情報処理装置１０は、ディープラーニングを用いて各種の対象の認識を行う認識装置である。例えば、情報処理装置１０は、サーバコンピュータなどのコンピュータである。情報処理装置１０は、１台のコンピュータとして実装してもよく、また、複数台のコンピュータによるコンピュータシステムとして実装してもよい。すなわち、以下に説明するディープラーニングは、複数台のコンピュータによる情報処理システムで処理を分散して実行してもよい。なお、本実施形態では、情報処理装置１０を１台のコンピュータとした場合を例として説明する。また、本実施形態では、情報処理装置１０が、画像の認識を行う場合を例に説明する。
【００６４】
図４に示すように、情報処理装置１０は、記憶部２０と、マザーボード２１と、アクセラレータボード２２とを有する。なお、情報処理装置１０は、上記の機器以外の他の機器を有してもよい。例えば、情報処理装置１０は、各種の操作を受け付ける入力部や各種の情報を表示する表示部などを有してもよい。
【００６５】
記憶部２０は、ハードディスク、ＳＳＤ（Solid  State  Drive）などの記憶装置である。マザーボード２１は、情報処理装置１０の主機能を担う部品が装着された基板である。アクセラレータボード２２は、情報処理装置１０の処理能力を高めるために、追加して利用するハードウェアが搭載された基板である。アクセラレータボード２２は、複数設けてもよい。なお、本実施形態では、アクセラレータボード２２を１つ設けた場合を例として説明する。
【００６６】
記憶部２０とマザーボード２１とアクセラレータボード２２は、データを転送可能なバス２３で接続されている。例えば、記憶部２０とマザーボード２１は、ＳＡＴＡ（Serial  ATA）、ＳＡＳ（Serial  Attached  SCSI）などのバス２３Ａで接続されている。また、マザーボード２１とアクセラレータボード２２は、ＰＣＩ（Peripheral  Component  Interconnect）Ｅｘｐｒｅｓｓなどのバス２３Ｂで接続されている。
【００６７】
ディープラーニングは、演算を大量に行う。このため、情報処理装置１０では、ＧＰＵ（Graphics  Processing  Unit）や専用チップなどのアクセラレータを用いたアクセラレータボード２２で演算を行うことにより、処理の高速化を行っている。
【００６８】
記憶部２０は、ＯＳ（Operating  System）や、後述する各種の処理を実行する各種プログラムを記憶する。さらに、記憶部２０は、各種情報を記憶する。例えば、記憶部２０は、入力データ４０と、定義情報４１と、パラメータ情報４２と、スナップショット情報４３とを記憶する。なお、記憶部２０は、その他の各種の情報を記憶してもよい。
【００６９】
入力データ４０は、ニューラルネットワークへの入力対象とされたデータである。例えば、教師あり学習を行う場合、入力データ４０は、学習用のデータである。例えば、画像に写った識別対象の特徴をニューラルネットワークに学習させる場合、入力データ４０は、様々な識別対象が写った大量の画像と、識別対象が何であるかの正解を示すラベルを対応付けたデータである。また、ニューラルネットワークによる識別を行う場合、入力データ４０は、識別対象とされたデータである。例えば、画像に写った識別対象を識別する場合、入力データ４０は、識別対象とされた画像のデータである。
【００７０】
定義情報４１は、ニューラルネットワークに関する情報を記憶したデータである。例えば、定義情報４１には、ニューラルネットワークの階層構造や各階層のユニットの構成、ユニットの接続関係などのニューラルネットワークの構成を示す情報が記憶される。画像の認識を行う場合、定義情報４１には、例えば、設計者等によって定められた畳み込みニューラルネットワークの構成を示す情報が記憶される。また、定義情報４１には、ニューラルネットワークの各層について予め計測した計算時間と、各層の計算に関するデータの、アクセラレータボード２２のメモリ６０への転送時間とを示す情報が記憶される。また、定義情報４１には、上記の計算時間および転送時間の予測に関する計算モデルの情報が記憶されてもよい。
【００７１】
パラメータ情報４２は、ニューラルネットワークの各層の演算で用いられる重み値などのパラメータの値を記憶したデータである。パラメータ情報４２に記憶されたパラメータの値は、初期状態では、所定の初期値とされ、学習に応じて更新される。
【００７２】
スナップショット情報４３は、入力データ４０を所定の件数ごとに分けて、学習のバッチ処理を繰り返す場合、途中の処理状態に関する情報を記憶したデータである。
【００７３】
マザーボード２１は、メモリ３０と、演算部３１とを有する。
【００７４】
メモリ３０は、例えば、ＲＡＭ（Random  Access  Memory）などの半導体メモリである。メモリ３０は、演算部３１で実行される処理の情報や処理で使用される各種の情報を記憶する。
【００７５】
演算部３１は、情報処理装置１０全体を制御するデバイスである。演算部３１としては、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等の電子回路を採用できる。演算部３１は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部３１は、全体制御部５０と、メモリ量計算部５１とを有する。
【００７６】
全体制御部５０は、ディープラーニングに関する処理全体を制御する。全体制御部５０は、ディープラーニングの処理開始の指示を受け付けると、記憶部２０からディープラーニングに関する各種のプログラムや各種情報を読み出す。例えば、全体制御部５０は、ディープラーニングの処理を制御する各種のプログラムを読み出す。また、全体制御部５０は、定義情報４１、パラメータ情報４２を読み出す。全体制御部５０は、定義情報４１、パラメータ情報４２に基づいてニューラルネットワークの構成を特定し、ニューラルネットワークの認識処理、学習処理の処理順序を決定する。なお、全体制御部５０は、学習処理を開始するタイミングで学習処理の処理順序を決定してもよい。
【００７７】
全体制御部５０は、記憶部２０から入力データ４０を所定の件数ごとに分けて読み出す。そして、全体制御部５０は、読み出した入力データ４０や認識処理、学習処理に関する情報をアクセラレータボード２２に転送してメモリ６０に格納する。そして、全体制御部５０は、アクセラレータボード２２を制御して、アクセラレータボード２２にニューラルネットワークの認識処理、学習処理を実行させる。
【００７８】
例えば、全体制御部５０は、ニューラルネットワークの各層について予め推定したメモリへの転送時間と、計算時間とを定義情報４１より取得する。次いで、全体制御部５０は、取得した転送時間と、計算時間とに基づいて、第１の層よりも先に計算を行う一または複数の第２の層における計算時間の総時間内に第１の層のプリフェッチが完了するタイミングを決定する。そして、全体制御部５０は、決定したタイミングで第１の層のデータをアクセラレータボード２２のメモリ６０に格納（プリフェッチ）し、プリフェッチにおける転送時間が計算時間により隠蔽されるようにする。
【００７９】
メモリ量計算部５１は、ディープラーニングでデータの記憶に使用される使用メモリ量を算出する。例えば、メモリ量計算部５１は、定義情報４１に基づいて、ニューラルネットワークの各層で、ニューロンデータ、パラメータ、ニューロンデータの誤差およびパラメータの誤差の記憶に使用される使用メモリ量を算出する。
【００８０】
アクセラレータボード２２は、メモリ６０と、演算部６１とを有する。
【００８１】
メモリ６０は、例えば、ＲＡＭなどの半導体メモリである。メモリ６０は、演算部６１で実行される処理の情報や処理で使用される各種の情報を記憶する。
【００８２】
演算部６１は、アクセラレータボード２２を制御するデバイスである。演算部６１としては、ＧＰＵ（Graphics  Processing  Unit）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field-Programmable  Gate  Ａrray）等の電子回路を採用できる。演算部６１は、全体制御部５０からの制御に応じて、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部６１は、認識制御部７０と、学習制御部７１とを有する。
【００８３】
認識制御部７０は、ニューラルネットワークの認識処理を制御する。例えば、認識制御部７０は、マザーボード２１から格納されたデータをニューロンデータとして、処理順序に従い認識処理を実行する。認識制御部７０は、ニューロンデータに対して、ニューラルネットワークの各層の演算を行い、当該ニューラルネットワークの各層のニューロンデータとパラメータをそれぞれメモリ６０に保持する。
【００８４】
学習制御部７１は、ニューラルネットワークの学習処理を制御する。例えば、学習制御部７１は、マザーボード２１から格納されたデータをもとに、認識処理による識別結果と正解との誤差を求め、処理順序に従い、誤差をニューラルネットワークに伝播させる学習処理を実行する。学習制御部７１は、誤差からニューラルネットワークの各層の誤差の勾配を算出してパラメータを学習する。
【００８５】
［処理の流れ］
次に、情報処理装置１０が実行する情報処理方法における処理の流れについて説明する。図５は、実施形態にかかる情報処理装置１０の動作例を示すフローチャートである。この情報処理方法は、所定のタイミング、例えば、管理者から処理開始が指示されたタイミングで実行される。
【００８６】
図５に示すように、処理が開始されると、全体制御部５０は、アクセラレータボード２２のデバイス情報（メモリ６０の容量、空き領域など）を取得する（Ｓ１）。次いで、全体制御部５０は、定義情報４１、パラメータ情報４２を読み出して、ハイパーパラメータ（学習率、モーメンタム、バッチサイズ、最大反復回数など）と、ＤＮＮ（ディープラ・ニューラル・ネットワーク）の構成を読み込む（Ｓ２）。例えば、全体制御部５０は、学習実行の繰り返し回数ｍａｘ＿ｉｔｅｒを取得する。また、全体制御部５０は、定義情報４１、パラメータ情報４２に基づいて、ニューラルネットワークの構成を特定し、ＤＮＮの層数ｎを取得する。また、メモリ量計算部５１は、定義情報４１に基づいて、認識および学習の際にニューラルネットワークの各層で、ニューロンデータおよびパラメータの誤差の記憶に使用される使用メモリ量のデータサイズを算出する。
【００８７】
次いで、全体制御部５０は、定義情報４１を参照し、ニューラルネットワークの各層の計算時間と、転送時間を推定する（Ｓ３）。この計算時間と、転送時間について、全体制御部５０は、予め計測しておいたデータを定義情報４１より読み出して推定してもよい。また、全体制御部５０は、公知の計算モデルを用いて計算時間および転送時間の推定を行ってもよい。具体的には、定義情報４１より計算モデルに関する情報を読み出し、読み出した計算モデルを用いて各層の計算時間と、転送時間を推定する。
【００８８】
例えば、計算モデルによる所定の層（ｉ）における計算時間（Ｃｉ）と、転送時間（ｍｉ）との推定は、次の式（１３）、（１４）のとおりとなる。
【００８９】
【数１１】
2020102108.tif 000013
【００９０】
【数１２】
2020102108.tif 000014
【００９１】
ここで、αＨ２Ｄ、αｃｏｎｖは、メモリ・演算器のスループットを表す値である。βＨ２Ｄ、βｃｏｎｖは、メモリ・演算器のレイテンシを表す値である。このαＨ２Ｄ、βＨ２Ｄ、αｃｏｎｖ、βｃｏｎｖの値は、実行環境で事前に測定された値が定義情報４１に記憶される。また、Ｃｉにおける上の添字は、層の種類（畳み込み層（ｃｏｎｖ）、プーリング層（ｐｏｏｌ）、全結合層（ｆｃ）、ソフトマックス層（ｓｏｆｔｍａｘ）…）を示す。
【００９２】
次いで、全体制御部５０は、推定した各層（ｉ）における計算時間（Ｃｉ）と、転送時間（ｍｉ）とに基づき、ニューラルネットワークの各層（ｉ）におけるプリフェッチのタイミングを決定する（Ｓ４）。
【００９３】
なお、本実施形態において、各層のプリフェッチは、ニューロン（ｘ）のデータ（図３参照）を対象とする。このように、ニューロン（ｘ）をプリフェッチの対象とするのは、ニューロン（ｘ）の方がパラメータ（Ｗ、ｂ）に比べてデータサイズが大きいことが多いためである。なお、パラメータ（Ｗ、ｂ）についても、ニューロン（ｘ）と同様にプリフェッチを行ってもよい。ただし、パラメータ（Ｗ、ｂ）をプリフェッチする場合は、ＢＷＤの後にＷとΔＷ、ｂとΔｂを用いてパラメータ更新をすることとなる。このため、各層のＢＷＤの直後にその層のパラメータ更新をするか、全層のＢＷＤが終了した後にパラメータの更新のために再度Ｗ、ΔＷ、ｂ、Δｂをメモリ６０に読み込むこととなる。
【００９４】
なお、全体制御部５０は、最終層のＢＷＤのニューロン（ｘ）は、メモリ６０への退避対象外（学習開始前に確保済み）とする。１層目のＢＷＤの計算時間はプリフェッチに影響を与えないものとする。
【００９５】
ここで、各層（ｉ）におけるプリフェッチのタイミング決定について詳細に説明する。図６は、プリフェッチのタイミングの決定方法の一例を示すフローチャートである。
【００９６】
図６に示すように、アクセラレータボード２２のメモリ６０については、Ｍｄｅｖｉｃｅをデバイスのメモリ容量とする。また、Ｍｏｆｆは、メモリ退避可能なメモリ量とする。Ｍｌｏａｄは、メモリ退避対象外のニューロン（ｘ）のメモリ量であり、Σｉ（メモリ退避対象外のｘｉ）とする。よって、ニューロン（ｘ）に使用可能なメモリ量（Ｍｘ）は、Ｍｏｆｆ＋Ｍｌｏａｄである。また、Ｍｐａｒａｍは、ニューロン（ｘ）以外のパラメータのメモリ量である。ニューロン（ｘ）以外のパラメータ等は、メモリ６０に予め格納されていることから、Ｍｐａｒａｍ＝Σｉ（Ｗｉ＋ｂｉ＋ΔＷｉ＋Δｂｉ）とする。
【００９７】
処理が開始されると、全体制御部５０は、処理に関する変数の初期化を行う（Ｓ１１）。具体的には、全体制御部５０は、転送時間（ｍ）の層番号（ｉ）、計算時間（ｃ）の層番号（ｋ）を初期化する。例えば、転送時間（ｍ）の層番号（ｉ）については、ＢＷＤにおいて各層（「Conv1」、「Conv2」、「Pool2」、「FC1」、「ReLU3」、「FC2」、「Softmax」、「Output」（図３参照））を左から順にプリフェッチの対象として、ｉ＝１とする。また、計算時間（ｃ）の層番号（ｋ）については、プリフェッチの対象とする層より先に計算を行う層（図３の例ではＢＷＤにおいて右側の層）が対象となるので、ｉ＝１に対してｋ＝２とする。
【００９８】
また、全体制御部５０は、ニューロン（ｘ）に使用可能なメモリ量（Ｍｘ）、メモリ退避対象外のニューロン（ｘ）のメモリ量（Ｍｌｏａｄ）、ｊ層目の開始時にプリフェッチするニューロン（ｘ）の記憶（ｐｒｅ（ｊ））を初期化する。例えば、Ｍｘは、Ｍｄｅｖｉｃｅ−Σｊ（Ｗｊ＋ｂｊ＋ΔＷｊ＋Δｂｊ）とする。また、ＭｌｏａｄはＭｌｏａｄ＝ｘｎとする。ｐｒｅ（ｊ）は、ｐｒｅ（ｊ）＝０（∀ｊ）とする。
【００９９】
次いで、全体制御部５０は、退避可能なメモリ領域（Ｍｏｆｆ）を計算する（Ｓ１２）。具体的には、全体制御部５０は、Ｍｏｆｆ←Ｍｘ−Ｍｌｏａｄ−ｍａｘｊ｛ｘｊ＋Δｘｊ＋Δｘｊ＋１｝＋Σｌ≧ｊ｛ｘｌ’＝ｐｒｅ（ｌ）｜ｌ’＜ｊ｝を計算する。
【０１００】
次いで、全体制御部５０は、ｘｉ＞Ｍｏｆｆであるか否かを判定し、ｉ層目のニューロン（ｘ）のデータ量が退避可能なメモリ量を上回っているか否かを判定する（Ｓ１３）。
【０１０１】
ｉ層目のデータ量が退避可能なメモリ量を上回っている場合（Ｓ１３：ＹＥＳ）、全体制御部５０は、ｘｉ≦Ｍｏｆｆを満たすまでＭｌｏａｄに含まれるニューロン（ｘ）をメモリ退避対象に変更する（Ｓ１４）。具体的には、メモリ退避対象外のニューロン（ｘ）をメモリ退避・プリフェッチ対象（メモリ退避可能）として変更する。このＳ１４の処理を行うことで、ｉ層目のニューロン（ｘ）に対するＢＷＤがメモリ不足となることがないようにする。
【０１０２】
次いで、全体制御部５０は、ｉ層目のニューロン（ｘ）の転送時間（ｍｉ）と、ｉ層よりも先に計算を行うｋ層目の計算時間（ｃｋ）とを比較し、ｍｉ≦ｃｋであるか否かを判定する（Ｓ１５）。
【０１０３】
ｍｉ≦ｃｋであり、転送時間のほうが計算時間よりも小さい場合（Ｓ１５：ＹＥＳ）、計算時間で転送時間が隠蔽される。よって、全体制御部５０は、ｋ層目のＢＷＤ開始時にニューロン（ｘｉ）をプリフェッチするものと記憶する（Ｓ１６）。
【０１０４】
次いで、全体制御部５０は、ｋ層目のＢＷＤで隠蔽可能なプリフェッチの転送時間を計算時間（ｃｋ）より差し引き（ｃｋ←ｃｋ−ｍｉ）、ｉをインクリメント（ｉ←ｉ＋１）する（Ｓ１７）。
【０１０５】
次いで、全体制御部５０は、ｉ＝ｋであるか否かを判定する（Ｓ１８）。メモリ転送の層番号（ｉ）が計算の層番号（ｋ）まで達した場合（Ｓ１８：ＹＥＳ）、これ以上ｋ層目のＢＷＤで隠蔽するものはないので、全体制御部５０は、計算の層番号（ｋ）を１つ進め（Ｓ１９）、Ｓ２３へ処理を進める。メモリ転送の層番号（ｉ）が計算の層番号（ｋ）まで達していない場合（Ｓ１８：ＮＯ）、全体制御部５０は、計算の層番号（ｋ）を進めることなくＳ２３へ処理を進める。
【０１０６】
Ｓ１５において、転送時間のほうが計算時間よりも大きい場合（Ｓ１５：ＮＯ）、計算時間で転送時間が隠蔽されないため、より手前の層（ｋ＋１かそれよりも手前）からプリフェッチを開始することとなる。このとき、ｋ層目のＢＷＤの計算時間も隠蔽時間に含まれることになるので、全体制御部５０は、隠蔽すべき転送時間（ｍｉ）からｋ層目の計算時間（ｃｋ）を差し引き（ｍｉ←ｍｉ−ｃｋ）、計算の層番号（ｋ）をインクリメント（ｋ←ｋ＋１）する（Ｓ２０）。
【０１０７】
次いで、全体制御部５０は、ｋ＝ｎであるか否かを判定する（Ｓ２１）。一番手前の層（ｋ＝ｎ）から転送時間が隠蔽されない場合（Ｓ２１：ＹＥＳ）、計算時間による隠蔽が無理である。この場合、全体制御部５０は、ニューロン（ｘｉ）をＢＷＤ開始前にメモリ領域を確保して、メモリ退避対象外としてメモリ６０に記憶する（Ｓ２２）。このとき、全体制御部５０は、Ｍｌｏａｄ←Ｍｌｏａｄ＋ｘｉ、ｋ←ｉ＋２、ｉ←ｉ＋１とする。
【０１０８】
なお、ｋ＝ｎでない場合（Ｓ２１：ＮＯ）、全体制御部５０は、Ｓ２２の処理をスキップしてＳ２３へ処理を進める。
【０１０９】
Ｓ２３において、全体制御部５０は、ｉ＝ｎであるか否かを判定する。ｉ＝ｎであり、転送時間の層番号（ｉ）が一番手前の層（ｎ）まで到達した場合（Ｓ２３：ＹＥＳ）、全体制御部５０は、処理を終了する。到達していない場合（Ｓ２３：ＮＯ）、全体制御部５０は、Ｓ１２に戻り処理を継続する。
【０１１０】
図５に戻り、Ｓ４に次いで、メモリ量計算部５１は、学習に必要なメモリ量を計算する（Ｓ５）。図７は、メモリ量の計算方法の一例を示すフローチャートである。
【０１１１】
図７に示すように、処理が開始されると、メモリ量計算部５１は、層番号（ｉ）をｉ←１とし、ｉ層目にＢＷＤ時にプリフェッチするメモリ量を計算する（Ｓ３１）。具体的には、メモリ量計算部５１は、ｐｒｅ（ｉ）←ｉ層目のＢＷＤ時にプリフェッチするｘの総和として計算する。
【０１１２】
次いで、メモリ量計算部５１は、ｉ層目のＢＷＤのメモリ使用量（ｍ＿ｂｗｄｉ）を計算する（Ｓ３２）。具体的には、メモリ量計算部５１は、ｍ＿ｂｗｄｉ＝ｘｉ＋Δｘｉ＋Δｘｉ＋１＋Σｊ≧ｉ｛ｘｊ’＝ｐｒｅ（ｊ）｜ｊ’＜ｉ｝として計算する。
【０１１３】
次いで、メモリ量計算部５１は、ｉをインクリメント（ｉ←ｉ＋１）し、ｉ＜ｎであるか否かを判定する（Ｓ３３）。ｉ＜ｎである場合（Ｓ３３：ＹＥＳ）、メモリ量計算部５１は、Ｓ３２へ処理を戻す。
【０１１４】
ｉ＜ｎでない場合（Ｓ３３：ＮＯ）、メモリ量計算部５１は、学習実行に必要なメモリ量を計算し（Ｓ３４）、処理を終了する。具体的には、メモリ量計算部５１は、ｍ＝ｍａｘ｛ｍ＿ｂｗｄｉ｝＋Σｉ（メモリ退避対象外のｘｉ）＋Σｉ（Ｗｉ＋ｂｉ＋ΔＷｉ＋Δｂｉ）として計算する。
【０１１５】
上記のメモリ量の計算では、退避対象とするメモリ領域のうち、（ＢＷＤ時に）最大のメモリ使用量となる層でのメモリ領域の総和が求められる。図８は、メモリ使用領域の一例を示す説明図である。図８では、ＢＷＤ３層目計算時におけるメモリ使用領域を例示している。図８の例において、ＢＷＤ３層目計算時におけるメモリ使用領域の総和は、ｘ１＋ｘ２＋ｘ３＋Δｘ３＋Δｘ４となる。
【０１１６】
図５に戻り、全体制御部５０は、学習に必要なメモリ量をメモリ６０より確保する（Ｓ６）。ここで、全体制御部５０は、Ｓ５において計算したメモリ使用量をメモリ６０より一括で確保する。そして、全体制御部５０は、確保したメモリ６０のメモリ領域から、パラメータおよび退避対象外（学習開始前に確保）とするメモリ領域へのポインタを静的に割り当てる。なお、退避対象とするメモリ領域については、予め確保されたメモリ領域から、そのメモリ領域の使用時（プリフェッチ時）にポインタを割り当て、使用後にポインタを開放（メモリ退避）するものとする。
【０１１７】
次いで、全体制御部５０は、確保されたメモリ領域を用いてメモリ退避およびプリフェッチを行い、アクセラレータボード２２によるＤＮＮ学習を実行する（Ｓ７）。
【０１１８】
図９は、ＤＮＮ学習実行の一例を示すフローチャートである。図９に示すように、処理が開始されると、全体制御部５０は、学習実行の回数をカウントするためのパラメータ（ｉｔｅｒ）を１に初期化する。
【０１１９】
次いで、全体制御部５０は、記憶部２０から入力データ４０を所定の件数ごとに分けて読み出す。そして、全体制御部５０は、読み出したデータや認識処理、学習処理に関する情報をアクセラレータボード２２にオフロードし、ニューラルネットワークの学習を開始し（Ｓ４１）、認識処理（Ｓ４２〜Ｓ４６）と学習処理（Ｓ４７〜Ｓ５４）とを行う。
【０１２０】
認識処理が開始されると、認識制御部７０は、層数をカウントするためのパラメータｉを１に初期化し、マザーボード２１からオフロードされたデータから未処理の１件分のデータを読み出す。そして、認識制御部７０は、読み出したデータをニューロンデータとし、ニューロンデータに対して、ニューラルネットワークの順にｉ層目のＦＷＤを実行する（Ｓ４２）。
【０１２１】
次いで、認識制御部７０は、ｉ層目のニューロン（ｘｉ）がメモリ退避対象であるか否かを判定する（Ｓ４３）。Ｓ２２において、メモリ退避対象外と記憶されていなければメモリ退避対象である。メモリ退避対象である場合（Ｓ４３：ＹＥＳ）、認識制御部７０は、メモリ６０におけるニューロン（ｘｉ）のメモリ領域を開放し（Ｓ４４）、Ｓ４５へ処理を進める。メモリ退避対象外である場合（Ｓ４３：ＮＯ）、認識制御部７０は、ニューロン（ｘｉ）のメモリ領域を開放することなく、Ｓ４５へ処理を進める。
【０１２２】
Ｓ４５において、認識制御部７０は、ｉ＜ｎであるか否かを判定する（Ｓ４５）。ｉ＜ｎである場合（Ｓ４５：ＹＥＳ）、認識制御部７０は、ｉをインクリメントしてＳ４２へ処理を戻し、次の層に関するＦＷＤを継続する。
【０１２３】
ｉ＜ｎでない場合（Ｓ４５：ＮＯ）、認識制御部７０は、Ｆｏｒｗａｒｄの最終層の結果（誤差の値）を出力し（Ｓ４６）、認識処理を終了する。
【０１２４】
学習処理が開始されると、学習制御部７１は、ＢＷＤにおける計算対象のｉ層について、前層でのメモリプリフェッチが完了するまで処理の開始を待つ（Ｓ４７）。ここで、全体制御部５０は、ｉ層目のＢＷＤ時に指定されたニューロン（ｘ）をメモリ６０にプリフェッチする（Ｓ４８）。
【０１２５】
学習制御部７１は、ｉ層目のＢＷＤを（メモリプリフェッチと非同期的に）実行する（Ｓ４９）。次いで、学習制御部７１は、メモリ６０におけるΔｘｉ＋１のメモリ領域を開放し（Ｓ５０）、ニューロン（ｘｉ）がメモリ退避対象であるか否かを判定する（Ｓ５１）。
【０１２６】
Ｓ２２において、メモリ退避対象外と記憶されていなければメモリ退避対象である。メモリ退避対象である場合（Ｓ５１：ＹＥＳ）、学習制御部７１は、メモリ６０におけるニューロン（ｘｉ）のメモリ領域を開放し（Ｓ５２）、Ｓ５３へ処理を進める。メモリ退避対象外である場合（Ｓ５１：ＮＯ）、学習制御部７１は、ニューロン（ｘｉ）のメモリ領域を開放することなく、Ｓ５３へ処理を進める。
【０１２７】
Ｓ５３において、学習制御部７１は、ｉをデクリメントし、ｉ＞０であるか否かを判定する（Ｓ５３）。ｉ＞０である場合（Ｓ５３：ＹＥＳ）、学習制御部７１は、Ｓ４７へ処理を戻し、次の層に関するＢＷＤを継続する。
【０１２８】
ｉ＞０でない場合（Ｓ５３：ＮＯ）、学習制御部７１は、ニューラルネットワークの全層について、各層ごとに、パラメータの誤差の勾配に基づいて、パラメータを更新する（Ｓ５４）。
【０１２９】
次いで、全体制御部５０は、パラメータｉｔｅｒが学習実行の繰り返し回数ｍａｘ＿ｉｔｅｒ未満であるか否かを判定する（Ｓ５５）。繰り返し回数未満である場合（Ｓ５５：ＹＥＳ）、全体制御部５０は、パラメータｉｔｅｒに１を加算してＳ４１へ処理を戻す。繰り返し回数未満でない場合（Ｓ５５：ＮＯ）、全体制御部５０は、処理を終了する。
【０１３０】
図５に戻り、Ｓ７に次いで、全体制御部５０は、Ｓ７の処理結果をスナップショット情報４３およびパラメータ情報４２に書き込み（Ｓ８）、処理を終了する。
【０１３１】
図１０−１〜図１０−３は、プリフェッチの一例を説明する説明図である。なお、図１０−１〜図１０−３における網掛けの四角は、どの層のＢＷＤ開始時にどの層のニューロン（ｘ）がプリフェッチされるかの対応関係を表している。また、黒塗りの四角は、メモリ退避対象外（事前にロードし、メモリ６０上に保持する）のデータを示す。
【０１３２】
図１０−１に示すように、ケースＣ１では、どの層においても、転送時間（１）が計算時間（２）で隠蔽される。したがって、ケースＣ１では、各層の１層手前でプリフェッチが行われる。
【０１３３】
図１０−２に示すように、ケースＣ２では、転送時間（２）より計算時間（１）が短いので、各層の１層手前でのプリフェッチでは転送時間が計算時間で隠蔽されない。この場合、情報処理装置１０は、総計算時間が転送時間（ｍｉ）と釣り合う層までｋの値を増やす。そして、ｃ７の開始時にｘ３、ｃ５の開始時にｘ２、ｃ３の開始時にｘ１のプリフェッチを開始する。なお、プリフェッチしきれない層（ｘ４，ｘ５，ｘ７）はメモリ退避対象外とする。
【０１３４】
図１０−３に示すように、ケースＣ３は、途中に転送時間が隠蔽されない層がある場合の一例である。このようなケースＣ３において、情報処理装置１０は、ｋの値を増やしても転送時間が隠蔽されない層（ｘ４，ｘ６）はメモリ退避対象外とし、次層以降でプリフェッチを行うものとする。
【０１３５】
図１１−１、図１１−２は、推定値を用いたシミュレーションの一例を説明する説明図である。図１１−１に示すように、各層の転送時間（ｍ）および計算時間（ｃ）はテーブルＴ１のとおりである。この結果、ケースＣ４のとおり、最終層以外の全ての層でニューロン（ｘ）は、計算時間により転送時間が隠蔽されつつ、プリフェッチされる。したがって、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータボード２２のメモリ使用量の削減を実現することができる。
【０１３６】
具体的には、図１１−２のグラフＧ１に示すように、メモリ最大使用時（Ｃｏｎｖ１のＢＷＤ実行時）に２５．５％のメモリ使用量を削減（平均５３．２％のメモリ使用量を削減）している。なお、今回のシミュレーションでは、８層のＤＮＮを用いているが、通常１５層〜１５０層程度のＤＮＮが用いられる。したがって、１５層〜１５０層程度のＤＮＮでは、さらに削減率が増加することが期待される。
【０１３７】
以上のように、情報処理装置１０の全体制御部５０は、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータのメモリ６０への転送時間とに基づいて、第１の層の計算に関するデータをメモリ６０へ格納するタイミングを決定する。具体的には、全体制御部５０は、第１の層よりも先に計算を行う一または複数の第２の層における計算時間の総時間内にメモリ６０への転送が完了するタイミングを決定する。そして、全体制御部５０は、決定したタイミングに基づいて第１の層の計算に関するデータをメモリ６０へ格納する。
【０１３８】
これにより、情報処理装置１０では、一または複数の第２の層における計算時間内で、第１の層の計算に関するデータがメモリ６０に格納される。すなわち、第１の層の計算に関するデータの転送時間が、第１の層よりも先に計算を行う一または複数の第２の層における計算時間により隠蔽される。したがって、情報処理装置１０は、データ転送による待ち時間が生じることを抑止しつつ、ホスト側にデータを退避させてアクセラレータボード２２におけるメモリ６０の使用量を削減することができる。
【０１３９】
また、全体制御部５０は、第１の層に対して直近に計算を行う層から順に、一または複数の第２の層における計算時間の総時間と、第１の層の計算に関するデータの転送時間とを比較する。次いで、全体制御部５０は、計算時間の総時間よりも転送時間が小さくなる層の計算開始時を、第１の層の計算に関するデータをメモリ６０へ格納するタイミングと決定する。
【０１４０】
これにより、情報処理装置１０は、計算時間によりデータの転送時間を隠蔽することが可能な直近の層の計算開始時より第１の層の計算に関するデータをメモリ６０へ格納するので、メモリ６０を効率的に使用することができる。
【０１４１】
また、全体制御部５０は、一または複数の第２の層における計算時間の総時間と、第１の層の計算に関するデータの転送時間との比較において、計算時間の総時間よりも転送時間が小さくなる層が見つからない場合、ニューラルネットワークの各層の計算に先立って第１の層の計算に関するデータをメモリ６０に格納する。
【０１４２】
これにより、情報処理装置１０は、データ転送による待ち時間が生じることをより確実に抑止できる。例えば、第１の層よりも先に計算を行う層の数が少ない場合は、計算時間よりもデータの転送時間が大きくなることがある。このような場合、情報処理装置１０は、ニューラルネットワークの各層の計算に先立って第１の層の計算に関するデータをメモリ６０に格納するので、計算時にデータ転送による待ち時間が生じることを抑止できる。
【０１４３】
なお、上記の実施形態では、ニューラルネットワークにより画像に写った識別対象を識別する場合を例示した。しかしながら、これらに限定されるものではない。例えば、識別対象は、音声など、ニューラルネットワークが識別対象とするものであれば何れであってもよい。
【０１４４】
また、上記の実施形態では、ニューラルネットワークとして、畳み込みニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）を用いた場合を例示した。しかしながら、これらに限定されるものではない。例えば、ニューラルネットワークは、ＲＮＮ（Recurrent  Neural  Network）などの時系列を学習・認識可能なニューラルネットワークであってもよい。ＲＮＮは、ＣＮＮの拡張であり、ＣＮＮと同じく誤差逆伝播法を行うため、本実施形態と同様の処理を適用できる。
【０１４５】
また、上記の実施形態では、１台の情報処理装置１０で認識処理および学習処理を実行する場合を例示した。しかしながら、これらに限定されるものではない。例えば、複数台の情報処理装置１０により認識処理および学習処理を実行する情報処理システムとして構成してもよい。例えば、入力ニューロンデータをミニバッチ法で処理する場合、次のように処理してもよい。すなわち、情報処理システムは、入力ニューロンデータをＭ件ごとに分けて、別な情報処理装置１０で認識処理および学習処理を実行し、それぞれで算出されたパラメータの誤差を収集してパラメータを更新するようにしてもよい。
【０１４６】
また、上記の実施形態では、マザーボード２１の演算部３１にメモリ量計算部５１を設けた場合を例示した。しかしながら、これらに限定されるものではない。例えば、アクセラレータボード２２の演算部６１にメモリ量計算部５１を設けてもよい。そして、アクセラレータボード２２の演算部６１のメモリ量計算部５１が、ニューラルネットワークの各層で、ニューロンデータおよびパラメータの記憶に使用される使用メモリ量を算出してもよい。
【０１４７】
また、上記の実施形態では、認識処理の開始の前に、認識処理と学習処理で使用する使用メモリ量を計算する場合を例示した。しかしながら、これらに限定されるものではない。例えば、認識処理の開始の前に、認識処理で使用する使用メモリ量を計算し、認識処理の終了後、学習処理の開始の前に、学習処理で使用する使用メモリ量を計算してもよい。
【０１４８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１の各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部又は任意の一部が、ＣＰＵ及び該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１４９】
［情報処理プログラム］
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、情報処理プログラムを実行するコンピュータシステムの一例を説明する。図１２は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【０１５０】
図１２に示すように、コンピュータ４００は、ＣＰＵ（Central  Processing  Unit）４１０、ＨＤＤ（Hard  Disk  Drive）４２０、ＲＡＭ（Random  Access  Memory）４４０を有する。これら４００〜４４０の各部は、バス５００を介して接続される。
【０１５１】
ＨＤＤ４２０には上記の全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１と同様の機能を発揮する情報処理プログラム４２０Ａが予め記憶される。なお、情報処理プログラム４２０Ａについては、適宜分離してもよい。
【０１５２】
また、ＨＤＤ４２０は、各種情報を記憶する。例えば、ＨＤＤ４２０は、記憶部２０と同様に、ＯＳや各種プログラム、各種情報を記憶する。
【０１５３】
そして、ＣＰＵ４１０が、情報処理プログラム４２０ＡをＨＤＤ４２０から読み出して実行することで、上記の実施形態の各処理部を実行するプロセスを動作させる。すなわち、このプロセスは、全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１と同様の動作を実行する。
【０１５４】
なお、上記した情報処理プログラム４２０Ａについては、例えば、コンピュータ４００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させてもよい。そして、コンピュータ４００がこれらから情報処理プログラム４２０Ａを読み出して実行するようにしてもよい。
【０１５５】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４００に接続される「他のコンピュータ（又はサーバ）」などに情報処理プログラム４２０Ａを記憶させておく。そして、コンピュータ４００がこれらから情報処理プログラム４２０Ａを読み出して実行するようにしてもよい。
【０１５６】
以上の実施形態に関し、さらに以下の付記を開示する。
【０１５７】
（付記１）メモリと、
ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータの前記メモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する制御部と、
を有することを特徴とする情報処理装置。
【０１５８】
（付記２）前記制御部は、前記第１の層に対して直近に計算を行う層から順に前記一または複数の第２の層における計算時間の総時間と、前記第１の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第１の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記１に記載の情報処理装置。
【０１５９】
（付記３）前記制御部は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第１の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記２に記載の情報処理装置。
【０１６０】
（付記４）前記計算は、バックワード処理に関する計算であることを特徴とする付記１〜３のいずれか一に記載の情報処理装置。
【０１６１】
（付記５）前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記１〜４のいずれか一に記載の情報処理装置。
【０１６２】
（付記６）ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【０１６３】
（付記７）前記決定する処理は、前記第１の層に対して直近に計算を行う層から順に前記一または複数の第２の層における計算時間の総時間と、前記第１の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第１の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記６に記載の情報処理方法。
【０１６４】
（付記８）前記格納する処理は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第１の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記７に記載の情報処理方法。
【０１６５】
（付記９）前記計算は、バックワード処理に関する計算であることを特徴とする付記６〜８のいずれか一に記載の情報処理方法。
【０１６６】
（付記１０）前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記６〜９のいずれか一に記載の情報処理方法。
【０１６７】
（付記１１）ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第１の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第１の層よりも先に計算を行う一の層の計算時間または複数の第２の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第１の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【０１６８】
（付記１２）前記決定する処理は、前記第１の層に対して直近に計算を行う層から順に前記一または複数の第２の層における計算時間の総時間と、前記第１の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第１の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記１１に記載の情報処理プログラム。
【０１６９】
（付記１３）前記格納する処理は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第１の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記１２に記載の情報処理プログラム。
【０１７０】
（付記１４）前記計算は、バックワード処理に関する計算であることを特徴とする付記１１〜１３のいずれか一に記載の情報処理プログラム。
【０１７１】
（付記１５）前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記１１〜１４のいずれか一に記載の情報処理プログラム。
【符号の説明】
【０１７２】
１０…情報処理装置
２０…記憶部
２１…マザーボード
２２…アクセラレータボード
２３、２３Ａ、２３Ｂ…バス
３０…メモリ
３１…演算部
４０…入力データ
４１…定義情報
４２…パラメータ情報
４３…スナップショット情報
５０…全体制御部
５１…メモリ量計算部
６０…メモリ
６１…演算部
７０…認識制御部
７１…学習制御部
４００…コンピュータ
４１０…ＣＰＵ
４２０…ＨＤＤ
４２０Ａ…情報処理プログラム
４４０…ＲＡＭ
５００…バス
Ｃ１〜Ｃ４…ケース
Ｇ１…グラフ
Ｔ１…テーブル
【図１】
2020102108.tif 000015
【図２−１】
2020102108.tif 000016
【図２−２】
2020102108.tif 000017
【図２−３】
2020102108.tif 000018
【図２−４】
2020102108.tif 000019
【図３】
2020102108.tif 000020
【図４】
2020102108.tif 000021
【図５】
2020102108.tif 000022
【図６】
2020102108.tif 000023
【図７】
2020102108.tif 000024
【図８】
2020102108.tif 000025
【図９】
2020102108.tif 000026
【図１０−１】
2020102108.tif 000027
【図１０−２】
2020102108.tif 000028
【図１０−３】
2020102108.tif 000029
【図１１−１】
2020102108.tif 000030
【図１１−２】
2020102108.tif 000031
【図１２】
2020102108.tif 000032