(57)【要約】【課題】学習時におけるメモリ使用を効率化する。【解決手段】認識制御部は、入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を制御する。学習制御部は、認識結果の誤差からニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う。【選択図】図７
2018085063.tif 000002
【特許請求の範囲】
【請求項１】
入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を制御する認識制御部と、
前記認識制御部による認識結果の誤差から前記ニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う学習制御部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記学習制御部は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出して新たなメモリ領域に保持したのち、ニューロンデータの誤差を算出して前記認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記学習制御部は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、前記認識処理にて保持した当該層のニューロンデータおよび当該層の前層のニューロンデータから前記パラメータの誤差を算出し、当該層のパラメータおよび当該層の前層のニューロンデータから前記ニューロンデータの誤差を算出する、
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記ニューラルネットワークの各層のパラメータの誤差の使用メモリ量を計算するメモリ量計算部をさらに有し
前記学習制御部は、前記メモリ量計算部により算出された各層の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量に対応したメモリ領域を確保し、前記学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、パラメータの誤差を算出して前記確保したメモリ領域に当該パラメータの誤差を上書して保持し、ニューロンデータの誤差を算出して前記認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持し、前記確保したメモリ領域に保持されたパラメータの誤差を用いて前記認識処理にて保持した前記パラメータを更新する制御を順に行う、
ことを特徴とする請求項１〜３の何れか１つに記載の情報処理装置。
【請求項５】
入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を制御する認識制御部と、
前記認識制御部による認識結果の誤差から前記ニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う学習制御部と、
を有することを特徴とする情報処理システム。
【請求項６】
入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を行い、
認識結果の誤差から前記ニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項７】
入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を行い、
認識結果の誤差から前記ニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う、
処理をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法
に関する。
【背景技術】
【０００２】
近年、多層構造のニューラルネットワークを用いた機械学習が注目されている。このような多層構造のニューラルネットワークを用いた機械学習は、ディープラーニング（深層学習）とも呼ばれる。ディープラーニングは、ニューラルネットワークの多階層化が進んでおり、多くの分野で有効性が確認されている。例えば、ディープラーニングは、画像・音声の認識において人間に匹敵するほど高い認識精度を発揮している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−３１０７００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ディープラーニングでは、教師あり学習を行うことにより、ニューラルネットワークに自動的に特徴を学習する。しかしながら、ディープラーニングは、ニューラルネットワークの多階層化により、使用メモリ量が大きくなっており、学習時に使用メモリ量がさらに増加する。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解と比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更する。このため、学習時には、使用メモリ量が増加する。例えば、学習には、誤差の勾配を保存するため、認識のみの場合の２倍超にデータ量が増加し、使用メモリ量が２倍超に増加する場合もある。
【０００５】
一つの側面では、学習時におけるメモリ使用を効率化できる情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの態様では、情報処理装置は、認識制御部と、学習制御部とを有する。認識制御部は、入力したニューロンデータに対して、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する認識処理を制御する。学習制御部は、認識結果の誤差からニューラルネットワークの各層のパラメータを学習する学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う。
【発明の効果】
【０００７】
本発明の一の実施態様によれば、学習時におけるメモリ使用を効率化できるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、ディープラーニングの処理の流れの一例を模式的に示した図である。
【図２Ａ】図２Ａは、畳み込み演算の一例を模式的に示した図である。
【図２Ｂ】図２Ｂは、ＲｅＬＵの一例を模式的に示した図である。
【図２Ｃ】図２Ｃは、間引きの一例を模式的に示した図である。
【図２Ｄ】図２Ｄは、全結合の一例を模式的に示した図である。
【図３】図３は、従来のニューラルネットワークの計算の流れの一例を示す図である。
【図４】図４は、ＬｅＮｅｔの処理の流れの一例を模式的に示した図である。
【図５】図５は、従来の使用メモリ量の一例を示す図である。
【図６】図６は、情報処理装置の機能的な構成を概略的に示した図である。
【図７】図７は、実施例１に係るニューラルネットワークの計算の流れの一例を示す図である。
【図８】図８は、実施例１に係る認識処理の手順の一例を示すフローチャートである。
【図９】図９は、実施例２に係るニューラルネットワークの計算の流れの一例を示す図である。
【図１０】図１０は、実施例２に係る認識処理の手順の一例を示すフローチャートである。
【図１１】図１１は、従来のモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。
【図１２】図１２は、従来の使用メモリ量の一例を示す図である。
【図１３】図１３は、実施例１を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。
【図１４】図１４は、実施例２を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。
【図１５】図１５は、実施例２を適用したモーメンタム法を用いたニューラルネットワークによる使用メモリ量の一例を示す図である。
【図１６】図１６は、ニューラルネットワークの計算の流れの一例を示す図である。
【図１７】図１７は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下に、本発明にかかる情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法の実施例を図面に基づいて詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下に示す実施例は、矛盾を起こさない範囲で適宜組み合わせてもよい。
【実施例１】
【００１０】
［従来のディープラーニングの説明］
最初、従来のディープラーニングについて説明する。図１は、ディープラーニングの処理の流れの一例を模式的に示した図である。ディープラーニングでは、識別対象に関する教師あり学習を行うことにより、ニューラルネットワークに自動的に識別対象の特徴を学習する。ディープラーニングでは、特徴を学習したニューラルネットワークを用いて識別対象を識別する。例えば、ディープラーニングでは、識別対象が写った大量の画像を学習用の画像として教師あり学習を行うことにより、画像に写った識別対象の特徴をニューラルネットワークに自動的に学習する。ディープラーニングでは、このように特徴を学習したニューラルネットワークを用いることで画像に写った識別対象を識別できる。脳には、多数のニューロン（神経細胞）が存在する。各ニューロンは、他のニューロンから信号を受け取り、他のニューロンへ信号を受け渡す。脳は、この信号の流れによって、様々な情報処理を行う。ニューラルネットワークは、このような脳の機能の特性を計算機上で実現したモデルである。ニューラルネットワークは、脳のニューロンを模したユニットを階層的に結合している。ユニットは、ノードとも呼ばれる。各ユニットは、他のユニットからデータを受け取り、他のユニットへデータを受け渡す。ニューラルネットワークは、ユニットのパラメータを学習によって変化させて受け渡すデータを変化させることで様々な識別対象を識別（認識）できる。以下では、ニューラルネットワークを伝送されるデータをニューロンデータと呼ぶ。図１には、ニューラルネットワークの一例として、画像の認識に用いられる畳み込みニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）の一例が示されている。以下では、ニューラルネットワークとして、畳み込みニューラルネットワークにより画像の認識を行う場合を例に説明する。ニューラルネットワークは、階層構造とされており、畳み込み（convolution）層とプーリング（sub-sampling）層と全結合（fully-connected）層とを有する。図１の例では、畳み込み層とプーリング層を交互に２回設けているが、さらに多く設けてもよい。また、全結合層は、複数設けられていてもよい。ニューラルネットワークの階層構造や各層の構成は、識別する対象などに応じて、設計者が予め定めている。
【００１１】
ニューラルネットワークでは、画像の識別を行う場合、図１に示すように、左から右へ畳み込み層とプーリング層とを交互に複数回繰り返すことで画像に写った識別対象の特徴を抽出し、最後に全結合層で画像に写った識別対象の識別（カテゴライズ）を行う。一方、ニューラルネットワークでは、画像の学習を行う場合、識別した結果と正解との誤差を求め、図１に示すように、右から左へニューラルネットワークに逆伝播させ、畳み込みニューラルネットワークの各階層のパラメータを変更する。
【００１２】
次に、各層の演算について説明する。畳み込み層では、入力したニューロンデータの畳み込み演算を行う。図２Ａは、畳み込み演算の一例を模式的に示した図である。図２Ａの例では、入力したＮ×Ｎpixelの画像の畳み込み演算をする場合を示している。畳み込み層では、Ｎ×Ｎpixelの画像の各画素の値をそれぞれニューロンデータとして、それぞれパラメータが設定されたｍ×ｍのサイズのフィルタと畳み込み（convolution)を計算することで、次層への出力用のニューロンデータを作成する。また、畳み込み層では、非線形活性化関数σに出力用のニューロンデータを通過させることで、発火（activation）をモデル化する。発火とは、ニューロンから出力される信号の値がある値を超えるときに出力される信号が他のニューロンに伝達される現象をいう。
【００１３】
例えば、畳み込み層では、以下の式（１）に示す畳み込み演算を行い、演算結果に対して、以下の式（２）に示す非線形活性化関数σの演算を行う。
【００１４】
【数１】
2018085063.tif 000003
【００１５】
ここで、ｙｌ−１（ｉ＋ａ）（ｊ＋ｂ）は、入力となるニューロンデータであり、図２Ａに示すＮ×Ｎpixelの画像ｙｌ−１の（ｉ＋ａ，ｊ＋ｂ）の画素のデータである。ｗａｂは、図２Ａに示すｍ×ｍのフィルタｗの重みを表す各パラメータである。ｘｌｉｊは、畳み込み演算された（ｉ，ｊ）の画素のデータである。ｙｌｉｊは、ｘｌｉｊに非線形活性化関数σを適用し、所定のバイアスｂｌを加えた結果としてユニットＵｌｉの出力となり、さらに次の層の入力ともなるニューロンデータである。
【００１６】
非線形活性化関数σとしては、例えば、ＲｅＬＵ（ランプ関数）を用いることができる。図２Ｂは、ＲｅＬＵの一例を模式的に示した図である。図２Ｂの例では、入力Ｘがゼロ未満の場合、出力Ｙにはゼロが出力される。また、入力Ｘがゼロを超えた場合、出力Ｙには入力Ｘの値が出力される。
【００１７】
プーリング層では、入力したニューロンデータの間引きを行う。図２Ｃは、間引きの一例を模式的に示した図である。例えば、Ｎ×Ｎpixelの画像がニューロンデータとして入力される。プーリング層では、Ｎ×Ｎpixelのニューロンデータから、Ｎ／ｋ×Ｎ／ｋのニューロンデータに間引く。例えば、ｋ×ｋの領域ごとに、最大値を取り出すMax-Poolingにより、間引きを行う。間引きは、その他、何れの手法で行ってもよい。例えば、ｋ×ｋの領域の平均値を取り出すAverage-Poolingで、間引きを行ってもよい。また、プーリング層では、間引きを行うｋ×ｋの領域を一部重複させてもよく、重複させずに隣接させて間引きを行ってもよい。
【００１８】
例えば、プーリング層では、以下の式（３）に示すMax-Poolingを行う。
【００１９】
【数２】
2018085063.tif 000004
【００２０】
ここで、関数ｍａｘは、図２Ｃに示す（ｉ，ｊ）の画素からそれぞれｋ画素の範囲の領域内で最大値のニューロンデータを出力する関数である。ｙｌｉＪは、ユニットＵｌｉの出力となるニューロンデータである。
【００２１】
全結合層では、識別を行う対象数に応じて、入力したニューロンデータを全結合した全結合の演算を行う。例えば、Ｎ×Ｎpixelの画像がニューロンデータとして入力される。全結合層は、Ｎ×Ｎpixelのニューロンデータ全てを、それぞれ重み（パラメータ）と掛け合わせることで、次層への出力用のニューロンデータを作成する。また、全結合層は、非線形活性化関数σに出力用のニューロンデータを通過させる演算を行うことで、発火をモデル化する。
【００２２】
図２Ｄは、全結合の一例を模式的に示した図である。図２Ｄの例は、識別を行う対象数をｉ個とした場合にｊ個のニューロンデータをそれぞれ全結合してｉ個のニューロンデータを得る場合の一例を示している。例えば、全結合層では、以下の式（４）に示す全結合の演算を行い、演算結果に対して以下の式（５）の演算を行う。
【００２３】
【数３】
2018085063.tif 000005
【００２４】
ここで、ｙｌ−１Ｊは、ユニットＵｌ−１の出力であり、ユニットＵｌの入力なるニューロンデータである。ｗｌ−１ｊｉは、ｙｌ−１Ｊとｙｌｉに対応した重みを表すパラメータである。ｘｌｉは、重み付け演算されたデータである。ｙｌｉは、ｘｌｉに非線形活性化関数σを適用し、所定のバイアスｂｌｉを加えた結果のユニットＵｌｉの出力となるニューロンデータである。
【００２５】
非線形活性化関数σとしては、例えば、ＲｅＬＵを用いることができる。
【００２６】
ニューラルネットワークによる演算結果のニューロンデータは、識別層に出力され、識別層で識別が行われる。例えば、図１に示した畳み込みニューラルネットワークによる演算結果のニューロンデータは、識別層に出力され、識別層で画像の識別が行われる。例えば、画像に写った識別対象が１０種類の何れであるかの識別を行う場合、全結合層では、演算結果として１０個のニューロンデータを出力する。識別層では、最も大きいニューロンデータに対応する画像の種類を識別結果とする。また、学習を行う場合、認識結果と正解と比較して誤差を求める。
【００２７】
ところで、ニューラルネットワークによる演算結果のニューロンデータは、実数となる。識別層は、結果の識別を行いやすいように演算結果のニューロンデータを正規化する。例えば、識別層は、Softmax関数などの活性化関数を用いて演算結果のニューロンデータを０〜１の範囲に正規化する。Softmax関数は、ロジスティック関数を一般化したものであり、任意の実数を持つｎ次元ベクトルｘを、（０，１）区間の実数で和が１になるようなｎ次元ベクトルσ（ｘ）に正規化する。例えば、識別層では、以下の式（６）に示すSoftmax関数の演算を行う。
【００２８】
【数４】
2018085063.tif 000006
【００２９】
これにより、ニューラルネットワークによる演算結果のｎ個のニューロンデータｘｉは、それぞれの認識対象ｉである確率σ（ｘ）の確率分布に変換される。識別層は、確率分布が最も大きいニューロンデータに対応する画像の種類を識別結果とする。また、学習を行う場合、識別層は、認識結果と正解と比較して誤差を求める。例えば、識別層は、交差エントロピー誤差関数を利用して目的の確率分布(正解)との誤差を求める。例えば、識別層は、以下の式（７）に示す誤差関数の演算を行う。
【００３０】
【数５】
2018085063.tif 000007
【００３１】
ここで、ｔｉは、目的の分布であり、認識対象ｉが正解である場合、１とし、その他の場合０とする。ｙｉは、ニューラルネットワークによる演算された認識対象ｉの確率σ（ｘｉ）である。
【００３２】
ディープラーニングでは、教師あり学習を行うことにより、ニューラルネットワークに自動的に特徴を学習する。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解と比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更して最適解に近づけていく。
【００３３】
次に、誤差の計算の一例を説明する。例えば、誤差逆伝播法では、認識時とニューロンデータの誤差として、以下の式（８）に示す誤差関数の偏微分の演算を行う。
【００３４】
【数６】
2018085063.tif 000008
【００３５】
誤差逆伝播法では、出力層Ｌにおけるパラメータの誤差の勾配を以下の式（９）から計算する。なお、Softmax関数の演算を行う識別層では、式（８）の結果が式（９）の誤差の勾配となる。
【００３６】
【数７】
2018085063.tif 000009
【００３７】
また、誤差逆伝播法では、出力層Ｌでの誤差から入力への誤差の勾配を部分微分を用いて計算する。例えば、ＲｅＬＵなどの活性化関数の演算を行う層では、以下の式（１０−１）から入力の誤差の勾配を計算する。σ’(ｘ)は、以下の式（１０−２）から求める。ｘは、認識時で使用した値を用いる。σ’(ｘ)を、式（１０−１）に代入すると誤差の勾配（∂Ｅ／∂ｘｌｉ）が求まる。活性化関数がない場合は式（１０−１）、（１０−２）の演算をスキップする。
【００３８】
【数８】
2018085063.tif 000010
【００３９】
また、誤差逆伝播法では、演算にパラメータ（重み）を有する層についてはパラメータの誤差の勾配を計算する。例えば、式（４）に示す全結合の演算では、以下の式（１１−１）からパラメータの誤差の勾配を計算する。また、式（１）に示す畳み込み演算では、以下の式（１１−２）からパラメータの誤差の勾配を計算する。なお、偏微分の連鎖律を用いて計算すると得られるｙｌｉは、認識時に使用した値を用いる。
【００４０】
【数９】
2018085063.tif 000011
【００４１】
また、誤差逆伝播法では、前の層（Ｌ−１層）への誤差の勾配を算出する。例えば、前の層が全結合の演算を行う層である場合は、以下の式（１２−１）から前の層への誤差の勾配を算出する。また、前の層が畳み込み演算を行う層である場合は、以下の式（１２−２）から前の層への誤差の勾配を算出する。なお、偏微分の連鎖律を用いて計算すると得られるｗｌｉｊは、認識時に使用した値を用いる。また、前の層がMax-Poolingを行う層である場合は、認識時にｋ×ｋの領域の最大値を取った場所に対して誤差の勾配（∂Ｅ／∂ｘｌｉ）を加算する。なお、ｋ×ｋの領域のその他の場所に対しては、何も行わない。
【００４２】
【数１０】
2018085063.tif 000012
【００４３】
誤差の計算では、ニューラルネットワークに逆伝播させ、ニューラルネットワークの最上位の層に到達するまで各層の誤差の勾配の計算を繰り返す。例えば、Ｌ層での誤差から入力への誤差の勾配を式（１０−１）を用いて計算する。例えば、式（１０−１）に示す入力の誤差は、下層が識別層の場合、式（９）の誤差の勾配を代入して求める。また、式（１０−１）に示す入力の誤差は、下層が識別層以外の場合、式（１２−１）、（１２−２）から算出される誤差の勾配を代入して求める。また、例えば、式（１１−１）に示すパラメータの誤差の勾配は、式（１０−１）から算出される誤差を代入して求める。また、例えば、式（１２−１）に示す前の層への誤差は、式（１０−１）から算出される誤差を代入して求める。そして、誤差の計算では、誤差に応じて全層のパラメータを更新する。
【００４４】
ここで、従来のニューラルネットワークの計算の流れの一例を説明する。図３は、従来のニューラルネットワークの計算の流れの一例を示す図である。図３の例は、ニューラルネットワークとして、畳み込みニューラルネットワークの学習を行う際の各データと処理の順序を示している。ニューラルネットワークは、各層が順に並んだ階層構造とされている。ニューラルネットワークは、第１の畳み込み層（Conv1）、第１のプーリング層（Pool1）、第２の畳み込み層（Conv2）、第２のプーリング層（Pool2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）、識別層（Softmax）が順に並んでいる。「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。「gdata」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「gparam」は、各層のパラメータの誤差の勾配のデータサイズを示している。なお、第１のプーリング層、第２のプーリング層および識別層は、演算にパラメータを用いないため、「param」、「gparam」が無い状態とされている。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【００４５】
ニューラルネットワークの学習を行う場合、最初に、学習対象の画像を識別する認識処理が行われる。例えば、認識処理では、学習対象の画像に対して数字の「１」〜「７」の順に各層の処理が行われ、処理結果が出力（Output）される。そして、ニューラルネットワークの学習を行う場合、次に、認識処理の処理結果からパラメータを更新する学習処理が行われる。例えば、学習処理では、数字の「８」に示すように識別結果と正解とを比較して誤差を求める。Labelは、学習対象の画像の正解を示す。そして、学習処理では、認識結果と正解との誤差を、数字の「９」〜「１７」の順に各層の誤差の勾配を算出する処理が行われる。そして、学習処理では、数字の「１８」に示すように各階層のパラメータを変更する処理が行われる。なお、パラメータの変更は、各階層ごとに誤差の勾配を算出されたタイミングで行ってもよい。
【００４６】
ここで、各層のニューロンデータの誤差の勾配（gdata）は、前の層の誤差の勾配（gdata）と、認識時のパラメータ（param）とから算出される。例えば、第２の全結合層では、「９」に示すように、識別層の誤差の勾配（gdata）と、第２の全結合層のパラメータ（param）とからニューロンデータの誤差の勾配（gdata）が算出されている。また、各層のパラメータの誤差の勾配（gparam）は、前の層の誤差の勾配（gdata）と、認識時のニューロンデータ（data）とから算出される。例えば、第２の全結合層では、「１０」に示すように、識別層の誤差の勾配（gdata）と、第２の全結合層のニューロンデータ（data）とからパラメータの誤差の勾配（gparam）が算出されている。このように、ニューラルネットワークの学習では、認識時のパラメータおよびニューロンデータを使用する。このため、従来のディープラーニングでは、学習を行う場合、学習用の入力データを認識した際のニューロンデータ（data）とパラメータ（param）とを記憶する。また、従来のディープラーニングでは、学習を行う場合、ニューロンデータの誤差の勾配（gdata）とパラメータの誤差の勾配（gparam）も記憶する。このように、学習時には、使用メモリ量が増加する。
【００４７】
ディープラーニングでは、大量の画像を学習用の入力データとして学習を行う場合、全ての入力データを一度にまとめて反復学習処理させる方法がある。しかし、学習用の入力データは、データ数が非常に多い場合がある。例えば、学習用の入力データは、データ数が数万〜数百万件となる場合がある。ディープラーニングでは、入力データを一度にまとめて反復学習処理させた場合、全ての処理が完了して復帰するまでの時間が長くなる。また、ディープラーニングでは、入力データの１件ごとにニューラルネットワークの各層の演算結果が保持されるため、使用メモリ量が多くなる。そこで、入力データを所定の件数ごとに分けて、学習のバッチ処理を繰り返すミニバッチ法がある。ミニバッチ法では、例えば、入力データをＭ件ごとに分けて、確率的なバッチ反復を行う。この場合、例えば、以下の式（１３）を用いてパラメータを更新する。
【００４８】
【数１１】
2018085063.tif 000013
【００４９】
ここで、Ｗｔは、更新前のパラメータの値である。Ｗｔ＋１は、更新後のパラメータの値である。ηは、演算された誤差を更新前のパラメータに反映させる割合を示す学習率である。
【００５０】
ここで、従来の使用メモリ量の一例を説明する。例えば、ＬｅＣｕｎらによるＬｅＮｅｔの構成のニューラルネットワークを用いた場合の使用メモリ量を説明する。図４は、ＬｅＮｅｔの処理の流れの一例を模式的に示した図である。図４の例では、２８×２８pixelの画像がニューロンデータとして入力（Input）される。第１の畳み込み層（Convolution1）では、２８×２８pixelのニューロンデータに対して、５×５のサイズの２０個のフィルタによりそれぞれ畳み込み演算を行って、２４×２４pixelの２０個のニューロンデータを算出する。次に、第１のプーリング層（Pooling1）では、２４×２４pixelの２０個のニューロンデータに対して、２×２の領域ごとに最大値を取り出すMax-Poolingを行い、１２×１２pixelの２０個のニューロンデータを算出する。次に、第２の畳み込み層（Convolution2）では、１２×１２pixelの２０個のニューロンデータに対して、５×５のサイズの５０個のフィルタによりそれぞれ畳み込み演算を行って、８×８pixelの５０個のニューロンデータを算出する。次に、第２のプーリング層（Pooling2）では、８×８pixelの５０個のニューロンデータに対して、２×２の領域ごとに最大値を取り出すMax-Poolingを行い、４×４pixelの５０個のニューロンデータを算出する。次に、第１の全結合層（Fully-Connected1）では、ニューラルネットワークでは、４×４pixelの５０個のニューロンデータに対して、５００個のユニットにそれぞれ全結合し、それぞれのユニットでＲｅＬＵの演算を行って５００個のニューロンデータを算出する。次に、第２の全結合層（Fully-Connected2）では、ニューラルネットワークでは、５００個のニューロンデータに対して、１０個のユニットにそれぞれ全結合し、Softmax関数の演算を行って１０個のニューロンデータを算出する。
【００５１】
図５は、従来の使用メモリ量の一例を示す図である。図５の例は、入力データを６４件ごとに分けて（バッチサイズＭ＝６４）、図４に示したニューラルネットワークの処理を実行した場合の使用メモリ量を示している。
【００５２】
例えば、画像の認識時、入力（Input）としては、ニューロンデータの記憶に５０，１７６バイトのメモリが使用される。第１の畳み込み層（Convolution1）では、ニューロンデータの記憶に７３７，２８０バイトのメモリが使用され、パラメータの記憶に５００バイトのメモリが使用される。第１のプーリング層（Pooling1）では、ニューロンデータの記憶に１８４，３２０バイトのメモリが使用される。第２の畳み込み層（Convolution2）では、ニューロンデータの記憶に２０４，８００バイトのメモリが使用され、パラメータの記憶に２５，０００バイトのメモリが使用される。第２のプーリング層（Pooling2）では、ニューロンデータの記憶に５１，２００バイトのメモリが使用される。第１の全結合層（Fully-Connected1）では、ニューロンデータの記憶に３２，０００バイトのメモリが使用され、パラメータの記憶に４００，０００バイトのメモリが使用される。第２の全結合層（Fully-Connected2）では、ニューロンデータの記憶に６４０バイトのメモリが使用され、パラメータの記憶に５，０００バイトのメモリが使用される。また、Softmax関数の処理では、ニューロンデータの記憶に６４０バイトのメモリが使用される。よって、画像の認識では、バッチサイズＭ＝６４である場合、それぞれを６４倍（４バイトを乗算）した結果、合計、ニューロンデータの記憶に５．０４Ｍバイトのメモリが使用され、パラメータの記憶に１．７２Ｍバイトのメモリが使用される。
【００５３】
また、学習時には、画像の認識時と同様のサイズのメモリが使用される。すなわち、学習時にも、合計、ニューロンデータの記憶に５．０４Ｍバイトのメモリが使用され、パラメータの記憶に１．７２Ｍバイトのメモリが使用される。
【００５４】
実施例１では、このような学習時における使用メモリ量を削減してディープラーニングを行う情報処理装置を説明する。
【００５５】
［情報処理装置の構成］
実施例１に係る情報処理装置１０の構成について説明する。図６は、情報処理装置の機能的な構成を概略的に示した図である。情報処理装置１０は、ディープラーニングを用いて各種の対象の認識を行う認識装置である。例えば、情報処理装置１０は、サーバコンピュータなどのコンピュータである。情報処理装置１０は、１台のコンピュータとして実装してもよく、また、複数台のコンピュータによるコンピュータシステムとして実装してもよい。すなわち、以下に説明するディープラーニングは、複数台のコンピュータによる情報処理システムで処理を分散して実行してもよい。なお、本実施例では、情報処理装置１０を１台のコンピュータとした場合を例として説明する。本実施例では、情報処理装置１０が、画像の認識を行う場合を例に説明する。
【００５６】
図６に示すように情報処理装置１０は、記憶部２０と、マザーボード２１と、アクセラレータボード２２とを有する。なお、情報処理装置１０は、上記の機器以外の他の機器を有してもよい。例えば、情報処理装置１０は、各種の操作を受け付ける入力部や各種の情報を表示する表示部などを有してもよい。
【００５７】
記憶部２０は、ハードディスク、ＳＳＤ（Solid  State  Drive）などの記憶装置である。マザーボード２１は、情報処理装置１０の主機能を担う部品が装着された基板である。アクセラレータボード２２は、情報処理装置１０の処理能力を高めるために、追加して利用するハードウェアが搭載された基板である。アクセラレータボード２２は、複数設けてもよい。なお、本実施例では、アクセラレータボード２２を１つ設けた場合を例として説明する。
【００５８】
記憶部２０とマザーボード２１とアクセラレータボード２２は、データを転送可能なバス２３で接続されている。例えば、記憶部２０とマザーボード２１は、ＳＡＴＡ(SerialATA)、ＳＡＳ(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）等の電子回路を採用できる。演算部６１は、全体制御部５０からの制御に応じて、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部６１は、認識制御部７０と、学習制御部７１とを有する。
【００７４】
認識制御部７０は、ニューラルネットワークの認識処理を制御する。例えば、認識制御部７０は、マザーボード２１からオフロードされた入力データをニューロンデータとして、処理順序に従い認識処理を実行する。例えば、認識制御部７０は、ニューロンデータに対して、ニューラルネットワークの各層の演算を行い、当該ニューラルネットワークの各層のニューロンデータとパラメータをそれぞれメモリ６０に保持する。
【００７５】
学習制御部７１は、ニューラルネットワークの学習処理を制御する。例えば、学習制御部７１は、認識処理による識別結果と正解との誤差を求め、処理順序に従い、誤差をニューラルネットワークに伝播させる学習処理を実行する。例えば、学習制御部７１は、誤差からニューラルネットワークの各層の誤差の勾配を算出してパラメータを学習する。この際、学習制御部７１は、ニューロンデータとパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する。例えば、学習制御部７１は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、最初に、パラメータの誤差を算出する。学習制御部７１は、算出したパラメータの誤差をメモリ６０の新たなメモリ領域に保持する制御を行う。次に、学習制御部７１は、ニューロンデータの誤差を算出する。学習制御部７１は、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持する制御を行う。
【００７６】
ここで、本実施例のニューラルネットワークの計算の流れの一例を説明する。図７は、実施例１に係るニューラルネットワークの計算の流れの一例を示す図である。図７は、図３と同様のニューラルネットワークの処理を本実施例の情報処理装置１０により実施した場合の計算の流れを示している。ニューラルネットワークは、各層が順に並んだ階層構造とされている。ニューラルネットワークは、第１の畳み込み層（Conv1）、第１のプーリング層（Pool1）、第２の畳み込み層（Conv2）、第２のプーリング層（Pool2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）、識別層（Softmax）が順に並んでいる。「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。「gdata」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「gparam」は、各層のパラメータの誤差の勾配のデータサイズを示している。なお、第１のプーリング層、第２のプーリング層および識別層は、演算にパラメータを用いないため、「param」、「gparam」が無い状態とされている。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【００７７】
ニューラルネットワークの学習を行う場合、認識制御部７０は、学習対象の画像を識別する認識処理を実行する。例えば、認識制御部７０は、図３に示した従来のニューラルネットワークの計算と同様に、数字の「１」〜「７」の順に各層の処理を行い、処理結果を出力（Output）する。例えば、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）では、ニューロンデータとパラメータとに基づいてそれぞれ算出した畳み込み量をメモリ６０にそれぞれ保持する処理を実行する。また、第１のプーリング層（Pool1）、第２のプーリング層（Pool2）では、メモリ６０に保持された前の層の畳み込み量に対して間引き処理をそれぞれ行った間引き後の畳み込み量をメモリ６０のメモリ領域にそれぞれ保持する処理を実行する。また、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）では、メモリ６０に保持された前の層の畳み込み量の全てに対して、メモリ６０に保持した各層の重みをそれぞれ積算した出力結果をメモリ６０にそれぞれ保持する処理を実行する。また、識別層（Softmax）では、メモリ６０に保持された前の層の出力結果を正規化し、正規化した出力結果でメモリ６０に保持する処理を実行する。
【００７８】
ニューラルネットワークの学習を行う場合、次に、学習制御部７１が、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。例えば、認識制御部７０は、図３に示した従来のニューラルネットワークの計算と同様に、数字の「８」に示すように識別結果と正解と比較して誤差を求める。そして、認識制御部７０は、数字の「９」〜「１７」の順に各層の誤差の勾配を算出する。そして、認識制御部７０は、数字の「１８」に示すように各階層のパラメータを変更する。なお、各階層のパラメータの変更は、各層ごとに、誤差の勾配が算出された後のタイミングで行ってもよい。また、第１の畳み込み層（Conv1）は、入力側の最上位の層であり、パラメータの学習のために隣りの層へニューロンデータの誤差の勾配を伝達する必要がない。このため、第１の畳み込み層（Conv1）では、ニューロンデータの誤差の勾配を算出する処理を省略してもよい。図７の例では、第１の畳み込み層（Conv1）のニューロンデータの誤差の勾配を算出する処理を省略している。
【００７９】
例えば、学習制御部７１は、メモリ６０に保持した識別層（Softmax）の出力結果に基づき計算した出力結果の誤差の勾配を、メモリ６０の識別層（Softmax）の出力結果を保持したメモリ領域に上書きして保持する。これにより、従来と比較して、識別層（Softmax）の誤差の勾配を記憶するメモリ領域を削減できる。
【００８０】
また、学習制御部７１は、ニューロンデータとパラメータがメモリ領域に保持される層については、パラメータの誤差を算出し、算出したパラメータの誤差をメモリ６０の新たなメモリ領域に保持する制御を行う。次に、学習制御部７１は、ニューロンデータの誤差を算出する。学習制御部７１は、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持する制御を行う。図７の例では、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）は、ニューロンデータとパラメータをメモリ領域に保持している。これらの層について、学習制御部７１は、パラメータの誤差を算出してメモリ６０の新たなメモリ領域に保持する。その後、学習制御部７１は、ニューロンデータの誤差を算出してメモリ６０の認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。例えば、学習制御部７１は、第２の全結合層（Fully-conn2）の場合、数字の「９」に示すように、識別層の誤差の勾配（gdata）と、第２の全結合層のニューロンデータ（data）とからパラメータの誤差を算出する。学習制御部７１は、算出したパラメータの誤差をメモリ６０の新たなメモリ領域に保持する制御を行う。次に、学習制御部７１は、数字の「１０」に示すように、識別層の誤差の勾配（gdata）と、第２の全結合層のパラメータ（param）とからニューロンデータの誤差を算出する。学習制御部７１は、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持する制御を行う。これにより、図３に示した従来のニューラルネットワークの計算と比較して、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）および第２の全結合層（Fully-conn2）では、ニューロンデータの誤差の勾配を記憶するメモリ領域を削減できる。
【００８１】
また、学習制御部７１は、パラメータが無く、ニューロンデータがメモリ領域に保持される層については、ニューロンデータの誤差の勾配を算出する。そして、学習制御部７１は、メモリ６０に保持された認識処理のニューロンデータのメモリ領域に、算出したニューロンデータの誤差の勾配を上書きする制御を行う。図７の例では、第１のプーリング層（Pool1）および第２のプーリング層（Pool2）は、ニューロンデータをメモリ領域に保持している。学習制御部７１は、第１のプーリング層（Pool1）および第２のプーリング層（Pool2）については、ニューロンデータの誤差の勾配を算出する。そして、学習制御部７１は、数字の「１３」、「１６」に示すように、メモリ６０に保持された認識処理のニューロンデータのメモリ領域に、ニューロンデータの誤差の勾配を上書きする。これにより、図３に示した従来のニューラルネットワークの計算と比較して、第１のプーリング層（Pool1）および第２のプーリング層（Pool2）では、ニューロンデータの誤差の勾配を記憶するメモリ領域を削減できる。
【００８２】
アクセラレータボード２２は、一般的に、搭載されるメモリ６０の記憶容量が小さい。アクセラレータボード２２の一例として、NVIDIA社のGeForce  GTX  TITAN  Xは、搭載されるメモリの記憶容量が１２ＧＢである。
【００８３】
ディープラーニングは、ニューラルネットワークの多階層化により、使用メモリ量が大きくなっており、学習時に使用メモリ量がさらに増加する。このため、ディープラーニングでは、ニューラルネットワークの計算の処理をアクセラレータボードで行う場合、アクセラレータボードのローカルメモリの記憶容量によって処理が制限される場合がある。例えば、ディープラーニングでは、１件の処理での使用メモリ量が多いほど、アクセラレータボードが一度のバッチで処理可能な件数が減少するため、入力データの学習にかかる時間が増加する。
【００８４】
そこで、アクセラレータボード２２からマザーボード２１にデータを退避しながら学習処理を実行することが考えられる。例えば、アクセラレータボード２２からマザーボード２１へ処理済みのデータを退避し、マザーボード２１からアクセラレータボード２２へ次の処理のデータを転送しつつ学習処理を実行することが考えられる。しかし、アクセラレータボード２２とマザーボード２１間のデータの転送に時間がかかり、入力データの学習にかかる時間が増加する。
【００８５】
一方、本実施例の学習処理は、学習時におけるメモリ使用を効率化できる。これにより、例えば、アクセラレータボード２２で一度に実行可能なバッチサイズＭが増加する。これにより、本実施例で説明した学習時における使用メモリ量の削減を適用した場合、入力データの学習にかかる時間を短縮できる。
【００８６】
［処理の流れ］
次に、実施例１に係る情報処理装置１０が実行する認識処理の流れについて説明する。図８は、実施例１に係る認識処理の手順の一例を示すフローチャートである。この認識処理は、所定のタイミング、例えば、管理者から処理開始が指示されたタイミングで実行される。
【００８７】
図８に示すように、全体制御部５０は、定義情報４１、パラメータ情報４２を読み出す（Ｓ１０）。全体制御部５０は、定義情報４１、パラメータ情報４２に基づいてニューラルネットワークの構成を特定する（Ｓ１１）。メモリ量計算部５１は、定義情報４１に基づいて、認識および学習の際にニューラルネットワークの各層で、ニューロンデータおよびパラメータの誤差の記憶に使用される使用メモリ量のデータサイズを算出する（Ｓ１２）。
【００８８】
全体制御部５０は、アクセラレータボード２２を制御して、算出されたデータサイズの記憶領域をメモリ６０に確保する（Ｓ１３）。
【００８９】
全体制御部５０は、記憶部２０から入力データ４０を所定の件数ごとに分けて読み出す。そして、全体制御部５０は、読み出したデータや認識処理、学習処理に関する情報をアクセラレータボード２２にオフロードし、ニューラルネットワークの学習を開始する（Ｓ１４）。
【００９０】
認識制御部７０は、パラメータｉを１に初期化する（Ｓ１５）。認識制御部７０は、マザーボード２１からオフロードされたデータから未処理の１件分のデータを読み出す。そして、認識制御部７０は、読み出したデータをニューロンデータとし、ニューロンデータに対して、ニューラルネットワークの順にｉ層目の演算を行い、演算結果をメモリ６０に保持する（Ｓ１６）。認識制御部７０は、パラメータｉの値を１加算する（Ｓ１７）。
【００９１】
認識制御部７０は、パラメータｉの値がニューラルネットワークの層数ｎ以下か否かを判定する（Ｓ１８）。パラメータｉの値がニューラルネットワークの層数ｎ以下の場合（Ｓ１８肯定）、上述したＳ１６の処理へ移行する。
【００９２】
一方、パラメータｉの値がニューラルネットワークの層数ｎ以下では無い場合（Ｓ１８否定）、学習制御部７１は、ニューラルネットワークの最終層の識別結果と正解との誤差を算出する（Ｓ１９）。
【００９３】
学習制御部７１は、ニューラルネットワークのｉ層目の計算にパラメータが使用されているか判定する（Ｓ２０）。例えば、図７の例では、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）は、ニューロンデータとパラメータをメモリ領域に保持している。
【００９４】
ニューラルネットワークのｉ層目の計算にパラメータが使用されている場合（Ｓ２０肯定）、学習制御部７１は、パラメータの誤差の勾配を計算してメモリ６０に保持する（Ｓ２１）。そして、学習制御部７１は、ニューロンデータの誤差の勾配を計算し、ニューラルネットワークのｉ層目のニューロンデータを記憶したメモリ６０の記憶領域に上書き保存する（Ｓ２２）。
【００９５】
一方、ニューラルネットワークのｉ層目の計算にパラメータが使用されていない場合（Ｓ２０否定）、学習制御部７１は、ニューロンデータの誤差の勾配を計算してメモリ６０に保持する（Ｓ２３）。
【００９６】
学習制御部７１は、パラメータｉの値から１減算する（Ｓ２４）。認識制御部７０は、パラメータｉの値が１以上であるか否かを判定する（Ｓ２５）。パラメータｉの値が１以上である場合（Ｓ２５肯定）、上述したＳ２０の処理へ移行する。
【００９７】
一方、パラメータｉの値が１以上では無い場合（Ｓ２５否定）、学習制御部７１は、ニューラルネットワークの全層について、各層ごとに、パラメータの誤差の勾配に基づいて、パラメータを更新する（Ｓ２６）。
【００９８】
学習制御部７１は、オフロードされたデータ全件の処理が完了したか否かを判定する（Ｓ２７）。オフロードされたデータ全件の処理が完了していない場合（Ｓ２７否定）、上述したＳ１５の処理へ移行する。
【００９９】
一方、オフロードされたデータ全件の処理が完了した場合（Ｓ２７肯定）、全体制御部５０は、処理結果をスナップショット情報４３およびパラメータ情報４２に保存する（Ｓ２８）。
【０１００】
全体制御部５０は、入力データ４０全件の学習が完了したか否かを判定する（Ｓ２９）。入力データ４０全件の処理が完了していない場合（Ｓ２９否定）、上述したＳ１４の処理へ移行する。
【０１０１】
一方、入力データ４０全件の処理が完了した場合（Ｓ２９肯定）、処理を終了する。
【０１０２】
［効果］
上述してきたように、本実施例に係る情報処理装置１０は、入力したニューロンデータに対して、認識処理を制御する。例えば、情報処理装置１０は、パラメータによる重み付け演算を含む階層型のニューラルネットワークの演算を行い、当該ニューラルネットワークの各層のニューロンデータおよびパラメータをそれぞれメモリ領域に保持する制御を行う。また、情報処理装置１０は、認識結果の誤差からニューラルネットワークの各層のパラメータを学習する学習処理を制御する。例えば、情報処理装置１０は、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う。これにより、情報処理装置１０は、認識時のニューロンデータ記憶領域を上書しつつ処理できるため、メモリ使用を効率化できる。
【０１０３】
また、本実施例に係る情報処理装置１０は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出して新たなメモリ領域に保持する。次に、情報処理装置１０は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。これにより、情報処理装置１０は、学習時における使用メモリ量を削減できる。
【０１０４】
また、本実施例に係る情報処理装置１０は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、認識処理にて保持した当該層のニューロンデータおよび当該層の前層のニューロンデータからパラメータの誤差を算出する。また、情報処理装置１０は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、当該層のパラメータおよび当該層の前層のニューロンデータからニューロンデータの誤差を算出する。これにより、情報処理装置１０は、ニューロンデータおよびパラメータがメモリ領域に保持される層のパラメータの誤差およびニューロンデータの誤差を算出できる。
【実施例２】
【０１０５】
次に、実施例２について説明する。実施例２に係る情報処理装置１０の構成は、図６に示した実施例１に係る情報処理装置１０の構成と略同様であるため、主に異なる部分について説明する。
【０１０６】
メモリ量計算部５１は、定義情報４１に基づいて、ニューラルネットワークの各層で、ニューロンデータ、パラメータ、ニューロンデータの誤差およびパラメータの誤差の記憶に使用される使用メモリ量を算出する。
【０１０７】
学習制御部７１は、メモリ量計算部５１により算出された各層のパラメータの誤差の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量を特定する。そして、学習制御部７１は、学習処理を開始する際に、パラメータ誤差用の記憶領域として、特定した使用メモリ量に対応したメモリ領域を確保する。学習制御部７１は、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、順に次の処理を行う。学習制御部７１は、パラメータの誤差を算出してパラメータ誤差用の記憶領域に当該パラメータの誤差を上書して保持する。次に、学習制御部７１は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する。次に、学習制御部７１は、パラメータ誤差用の記憶領域に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する。
【０１０８】
ここで、本実施例のニューラルネットワークの計算の流れの一例を説明する。図９は、実施例２に係るニューラルネットワークの計算の流れの一例を示す図である。図９は、図３および図７と同様のニューラルネットワークの処理を本実施例の情報処理装置１０により実施した場合の計算の流れを示している。ニューラルネットワークは、図３および図７と同様の階層構造とされている。「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【０１０９】
ニューラルネットワークの学習を行う場合、認識制御部７０は、学習対象の画像を識別する認識処理を実行する。例えば、認識制御部７０は、図７に示した実施例１のニューラルネットワークの計算と同様に、数字の「１」〜「７」の順に各層の処理を行い、処理結果を出力（Output）する。
【０１１０】
ニューラルネットワークの学習を行う場合、学習制御部７１は、パラメータ誤差用の記憶領域９０をメモリ６０に確保する。そして、学習制御部７１は、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。この際、学習制御部７１は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、パラメータの誤差を算出してパラメータ誤差用の記憶領域９０に当該パラメータの誤差を上書して保持する制御を行う。次に、学習制御部７１は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。次に、学習制御部７１は、パラメータ誤差用の記憶領域９０に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する制御を行う。
【０１１１】
例えば、認識制御部７０は、図７に示した実施例１のニューラルネットワークの計算と同様に、数字の「８」に示すように識別結果と正解と比較して誤差を求める。そして、認識制御部７０は、数字の「９」〜「２１」の順に、各層ごとに、パラメータの誤差の勾配を算出し、ニューロンデータの誤差の勾配を算出した後、パラメータを更新する。なお、第１の畳み込み層（Conv1）は、入力側の最上位の層であり、パラメータの学習のために隣りの層へニューロンデータの誤差の勾配を伝達する必要がない。このため、第１の畳み込み層（Conv1）では、ニューロンデータの誤差の勾配を算出する処理を省略してもよい。図９の例では、第１の畳み込み層（Conv1）のニューロンデータの誤差の勾配を算出する処理を省略している。
【０１１２】
例えば、図７の例では、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）は、ニューロンデータとパラメータをメモリ領域に保持している。これらの層について、学習制御部７１は、層ごとに、パラメータの誤差を算出してパラメータ誤差用の記憶領域９０に当該パラメータの誤差を上書して保持する制御を行う。例えば、学習制御部７１は、第２の全結合層（Fully-conn2）の場合、数字の「９」に示すように、パラメータの誤差を算出し、算出したパラメータの誤差をメモリ６０のパラメータ誤差用の記憶領域９０に保持させる。次に、学習制御部７１は、数字の「１０」に示すように、ニューロンデータの誤差を算出してメモリ６０の認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持させる。次に、学習制御部７１は、数字の「１１」に示すように、パラメータ誤差用の記憶領域９０に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新させる。これにより、図３および図７に示したニューラルネットワークの計算と比較して、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）および第２の全結合層（Fully-conn2）では、ニューロンデータの誤差の勾配を記憶するメモリ領域をさらに削減できる。
【０１１３】
［処理の流れ］
次に、実施例２に係る情報処理装置１０が実行する認識処理の流れについて説明する。図１０は、実施例２に係る認識処理の手順の一例を示すフローチャートである。実施例２に係る認識処理は、図７に示した認識処理と一部の処理が同一であるため、同一の処理については同一の符号を付し、異なる処理について新たな符号を付している。
【０１１４】
全体制御部５０は、アクセラレータボード２２を制御して、算出されたデータサイズの記憶領域をメモリ６０に確保する（Ｓ５０）。この際、学習制御部７１は、Ｓ１２において算出された各層のパラメータの誤差の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量を特定する。そして、学習制御部７１は、パラメータ誤差用の記憶領域９０として、特定した使用メモリ量に対応したメモリ領域を確保する。
【０１１５】
また、ニューラルネットワークのｉ層目の計算にパラメータが使用されている場合（Ｓ２０肯定）、学習制御部７１は、パラメータの誤差の勾配を計算してメモリ６０のパラメータ誤差用の記憶領域９０に保持する（Ｓ５１）。そして、学習制御部７１は、ニューロンデータの誤差の勾配を計算し、ニューラルネットワークのｉ層目のニューロンデータを記憶したメモリ６０の記憶領域に上書き保存する（Ｓ５２）。そして、学習制御部７１は、パラメータ誤差用の記憶領域９０に保持されたパラメータの誤差を用いて認識処理にて保持したｉ層目のパラメータを更新する（Ｓ５３）。
【０１１６】
［効果］
上述してきたように、本実施例に係る情報処理装置１０は、ニューラルネットワークの各層のパラメータの誤差の使用メモリ量を計算する。情報処理装置１０は、算出された各層の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量に対応したメモリ領域を確保する。情報処理装置１０は、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、以下の処理を順に行うように制御を行う。最初に、情報処理装置１０は、パラメータの誤差を算出して確保したメモリ領域に当該パラメータの誤差を上書して保持する。次に、情報処理装置１０は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する。次に、情報処理装置１０は、確保したメモリ領域に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する。これにより、情報処理装置１０は、学習時における使用メモリ量をより削減できる。
【実施例３】
【０１１７】
さて、これまで開示の装置に関する実施例について説明したが、開示の技術は上述した実施例以外にも、種々の異なる形態にて実施されてもよい。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１１８】
例えば、情報処理装置１０は、学習に、例えば、モーメンタム法等の確率的勾配降下法（ＳＧＴ（stochastic  gradient  descent））など、その他手法を用いてもよい。例えば、モーメンタム法では、パラメータの値Ｗｔ＋１を、誤差の勾配▽Ｅ（Ｗ）と前周のパラメータｖｔの線形和により更新する。例えば、前周のパラメータｖｔおよびＷｔを用いて、以下の式（１４−１）、（１４−２）から、ｔ＋１周における更新後のパラメータｖｔ＋１およびＷｔ＋１を計算する。
【０１１９】
【数１２】
2018085063.tif 000014
【０１２０】
ここで、αは、学習率であり、誤差の勾配への重みづけ倍率である。μは、モーメンタムであり、前周に更新されたパラメータへの重みづけ倍率である。
【０１２１】
ここで、従来のモーメンタム法を用いたニューラルネットワークの計算の流れの一例を説明する。図１１は、従来のモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。ニューラルネットワークは、図３および図７と同様の階層構造とされている。「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。「gdata」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「gparam」は、各層のパラメータの誤差の勾配のデータサイズを示している。「history」は、前周の誤差情報のデータサイズを示している。なお、第１のプーリング層、第２のプーリング層および識別層は、演算にパラメータを用いないため、「param」、「gparam」が無い状態とされている。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【０１２２】
ニューラルネットワークの学習を行う場合、最初に、学習対象の画像を識別する認識処理が行われる。例えば、認識処理では、学習対象の画像に対して数字の「１」〜「７」の順に各層の処理が行われ、処理結果が出力（Output）される。そして、ニューラルネットワークの学習を行う場合、次に、認識処理の処理結果からパラメータを更新する学習処理が行われる。例えば、学習処理では、数字の「８」に示すように識別結果と正解と比較して誤差を求める。Labelは、学習対象の画像の正解を示す。そして、学習処理では、認識結果と正解との誤差を、数字の「９」〜「１７」の順に各層の誤差の勾配を算出する処理が行われる。そして、学習処理では、数字の「１８」、「１９」に示すように各階層のパラメータを変更する処理が行われる。
【０１２３】
例えば、学習処理の際の各層で以下の式（１５−１）からパラメータの誤差を計算する。
gw  =  bottom_x  ×  top_gx      ・・・（１５−１）
【０１２４】
そして、各層のパラメータの更新する差分を以下の式（１５−２）、（１５−３）から計算する。
v  ＝  momentum  ×  v  −  lr  ×  gw      ・・・（１５−２）
gw  ＝  v                                  ・・・（１５−３）
【０１２５】
そして、以下の式（１５−４）により各層のパラメータを更新してもよい。
w  ＝w  −  gw      ・・・（１５−４）
【０１２６】
ここで、wは、パラメータのデータである。
xは、ニューロンデータである。
gwは、パラメータの誤差データである。
gxは、ニューロンデータの誤差データである。
bottom_xは、下位層（出力側の隣りの層）のx(ニューロンデータ)である。
top_gxは、上位層（入力側の隣りの層）のgx(ニューロンデータの誤差データ)である。
momentumは、モーメンタムを表し、μに相当する。
lrは、学習率を表し、αに相当する。
【０１２７】
なお、誤差の大きさが閾値を超える場合に、誤差を閾値以下に抑えて学習を行ってもよい。Clip  Gradientsによる学習処理を行う場合、学習処理の際の各層で上述の式（１５−１）からパラメータの誤差を計算する。そして、各層の誤差の二乗和を求め、誤差の二乗和を閾値以下に抑えて学習を行ってもよい。例えば、学習処理の最後に、各層で以下の式（１６−１）から誤差の二乗和（l2_norm）を計算する。そして、以下の式（１６−２）から更新用のパラメータの誤差データを算出してもよい。
l2_norm  ＝Σ（gw  ×  gw)        ・・・（１６−１）
if（l2_norm  ＞  clip_gradients)｛
scale_factor  ＝  clip_gradients  ／  l2_norm
gw  ＝  gw  ×  scale_factor
｝                              ・・・（１６−２）
【０１２８】
ここで、clip_gradientsは、閾値である。
【０１２９】
また、過学習を防ぐための制約を加えて学習を行ってもよい。制約には、例えば、Ｌ１正則化やＬ２正則化がある。例えば、学習処理の最後に、各層で以下の式（１７−１）、（１７−２）からパラメータの誤差データを計算してもよい。
ld  ＝  lambda  ×  w        ・・・（１７−１）
gw  ＝  gw  ＋  ld          ・・・（１７−２）
【０１３０】
図１２は、従来の使用メモリ量の一例を示す図である。図１２の例は、入力データを６４件ごとに分けて（バッチサイズＭ＝６４）、図１１に示したニューラルネットワークの処理を実行した場合の使用メモリ量を示している。図１２の例では、階層ニューラルネットワークの学習時に合計使用メモリ量が２倍超に増加する。
【０１３１】
このようなモーメンタム法を用いたニューラルネットワークの計算に、実施例１または実施例２を適用してもよい。
【０１３２】
最初に、実施例１を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を説明する。図１３は、実施例１を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。図１３は、図１１と同様のモーメンタム法を用いたニューラルネットワークの処理を本実施例の情報処理装置１０により実施した場合の計算の流れを示している。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【０１３３】
ニューラルネットワークの学習を行う場合、認識制御部７０は、学習対象の画像を識別する認識処理を実行する。例えば、認識制御部７０は、図１１に示した従来のニューラルネットワークの計算と同様に、数字の「１」〜「７」の順に各層の処理を行い、処理結果を出力（Output）する。そして、学習制御部７１が、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。例えば、認識制御部７０は、数字の「８」に示すように識別結果と正解と比較して誤差を求める。そして、認識制御部７０は、数字の「９」〜「１８」に示すように、順に各層の誤差の勾配を算出しつつ、パラメータを変更する。
【０１３４】
例えば、学習制御部７１は、メモリ６０に保持した識別層（Softmax）の出力結果に基づき計算した出力結果の誤差の勾配を、メモリ６０の識別層（Softmax）の出力結果を保持したメモリ領域に上書きして保持する。これにより、従来と比較して、識別層（Softmax）の誤差の勾配を記憶するメモリ領域を削減できる。
【０１３５】
また、学習制御部７１は、ニューロンデータとパラメータがメモリ領域に保持される層については、パラメータの誤差を算出し、算出したパラメータの誤差をメモリ６０の新たなメモリ領域に保持する制御を行う。次に、学習制御部７１は、ニューロンデータの誤差を算出し、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持する制御を行う。図１３の例では、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）は、ニューロンデータとパラメータをメモリ領域に保持している。これらの層について、学習制御部７１は、パラメータの誤差を算出してメモリ６０の新たなメモリ領域に保持する。その後、学習制御部７１は、ニューロンデータの誤差を算出してメモリ６０の認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。例えば、学習制御部７１は、第２の全結合層（Fully-conn2）の場合、数字の「９」に示すように、パラメータの誤差を算出する。学習制御部７１は、算出したパラメータの誤差をメモリ６０の新たなメモリ領域に保持する制御を行う。次に、学習制御部７１は、数字の「１０」に示すように、ニューロンデータの誤差を算出する。学習制御部７１は、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持する制御を行う。これにより、図１１に示した従来のニューラルネットワークの計算と比較して、第１の畳み込み層、第２の畳み込み層、第１の全結合層、第２の全結合層でニューロンデータの誤差を記憶するメモリ領域を削減できる。
【０１３６】
次に、実施例２を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を説明する。図１４は、実施例２を適用したモーメンタム法を用いたニューラルネットワークの計算の流れの一例を示す図である。図１４は、図１１と同様のモーメンタム法を用いたニューラルネットワークの処理を本実施例の情報処理装置１０により実施した場合の計算の流れを示している。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【０１３７】
ニューラルネットワークの学習を行う場合、認識制御部７０は、学習対象の画像を識別する認識処理を実行する。例えば、認識制御部７０は、図１１に示した従来のニューラルネットワークの計算と同様に、数字の「１」〜「７」の順に各層の処理を行い、処理結果を出力（Output）する。そして、学習制御部７１が、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。例えば、認識制御部７０は、数字の「８」に示すように識別結果と正解と比較して誤差を求める。そして、認識制御部７０は、数字の「９」〜「２６」に示すように、層ごとに、順に各層の誤差の勾配を算出しつつ、パラメータを変更する。
【０１３８】
例えば、学習制御部７１は、メモリ６０に保持した識別層（Softmax）の出力結果に基づき計算した出力結果の誤差の勾配を、メモリ６０の識別層（Softmax）の出力結果を保持したメモリ領域に上書きして保持する。これにより、従来と比較して、識別層（Softmax）の誤差の勾配を記憶するメモリ領域を削減できる。
【０１３９】
また、学習制御部７１は、各層のパラメータの誤差の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量のパラメータ誤差用の記憶領域９０をメモリ６０に確保する。そして、学習制御部７１は、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。この際、学習制御部７１は、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、パラメータの誤差を算出してパラメータ誤差用の記憶領域９０に当該パラメータの誤差を上書して保持する制御を行う。次に、学習制御部７１は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。次に、学習制御部７１は、パラメータ誤差用の記憶領域９０に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する制御を行う。図１４の例では、第１の畳み込み層（Conv1）、第２の畳み込み層（Conv2）、第１の全結合層（Fully-conn1）、第２の全結合層（Fully-conn2）は、ニューロンデータとパラメータをメモリ領域に保持している。これらの層について、学習制御部７１は、パラメータの誤差を算出してメモリ６０の新たなメモリ領域に保持する。その後、学習制御部７１は、ニューロンデータの誤差を算出してメモリ６０の認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する制御を行う。例えば、学習制御部７１は、第２の全結合層（Fully-conn2）の場合、数字の「９」に示すように、パラメータの誤差を算出する。学習制御部７１は、算出したパラメータの誤差をメモリ６０のパラメータ誤差用の記憶領域９０に保持させる。次に、学習制御部７１は、数字の「１０」に示すように、ニューロンデータの誤差を算出する。学習制御部７１は、算出したニューロンデータの誤差をメモリ６０の認識処理のニューロンデータを保持するメモリ領域に上書して保持させる。次に、学習制御部７１は、数字の「１１」、「１２」に示すように、パラメータ誤差用の記憶領域９０に保持されたパラメータの誤差および前周の誤差を用いて認識処理にて保持したパラメータを更新させる。これにより、情報処理装置１０は、各層のパラメータの誤差を記憶する記憶領域を共用できるため、学習時におけるメモリ使用を効率化できる。この結果、情報処理装置１０は、学習時における使用メモリ量を削減することができる。
【０１４０】
実施例１、実施例２を適用したニューラルネットワークでは、学習処理の際の各層の処理で、パラメータの誤差を以下の式（１８）から計算し、パラメータの値を更新してもよい。
w  ＝  w  −  lr  ×  Σ(bottom_x  ×  top_gx)    ・・・（１８）
【０１４１】
また、パラメータの誤差を以下の式（１９−１）から計算し、式（１９−２）によりパラメータの値を更新してもよい。
v  ＝  momentum  ×  v  −  lr  ×  Σ(bottom_x  ×  top_gx)    ・（１９−１）
w  ＝  w  −v                                  ・・・（１９−２）
【０１４２】
ここで、Σは、ミニバッチ数分の誤差に対してパラメータの更新を繰り返すことを表している。
【０１４３】
効果の一例を説明する。例えば、図１４に示した、実施例２を適用したモーメンタム法を用いたニューラルネットワークを計算した場合の効果の一例を説明する。図１５は、実施例２を適用したモーメンタム法を用いたニューラルネットワークによる使用メモリ量の一例を示す図である。図１５の例は、入力データを６４件ごとに分けて（バッチサイズＭ＝６４）、図１４に示したニューラルネットワークの処理を実行した場合の使用メモリ量を示している。図１５に示すように、情報処理装置１０は、学習時の使用メモリ量を大幅に削減する。例えば、図１５の例は、全体として使用メモリ量が、図１２の例と比較して、３３．９％（＝（１５２５４４４８−１００８８２２４）／１５２５４４４８）削減できる。
【０１４４】
また、上記各実施例では、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する場合を例示した。しかしながら、これらに限定されるものではない。例えば、学習制御部７１は、学習処理において、ニューロンデータとパラメータがメモリ領域に保持される層については、各層ごとに、次のように処理を行ってもよい。学習制御部７１は、各層ごとに、ニューロンデータとパラメータのうち、使用メモリ量の小さい方の誤差の勾配を算出してメモリ領域に保持する。その後、学習制御部７１は、使用メモリ量の大きい方の誤差の勾配を算出して認識処理のデータを保持したメモリ領域に上書きする制御を行ってもよい。すなわち、学習制御部７１は、ニューロンサイズとパラメータサイズのうち、小さい方の誤差を先に計算し、後続の誤差計算結果を認識時のメモリ領域に上書することで、メモリ量を削減してもよい。学習制御部７１は、このような学習処理において、各層のニューロンサイズとパラメータサイズの小さい方の誤差メモリ領域を利用し、それらの誤差メモリ領域のうち最大のものを学習用メモリ領域として確保するようにしてもよい。上記のニューラルネットワークの計算の流れの一例を説明する。図１６は、ニューラルネットワークの計算の流れの一例を示す図である。図１６は、ニューラルネットワークの処理を本実施例の情報処理装置１０により実施した場合の計算の流れを示している。ニューラルネットワークは、図３および図７と同様の階層構造とされている。「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。ニューラルネットワークの学習を行う場合、認識制御部７０は、学習対象の画像を識別する認識処理を実行する。例えば、認識制御部７０は、図７に示した実施例１のニューラルネットワークの計算と同様に、数字の「１」〜「７」の順に各層の処理を行い、処理結果を出力（Output）する。ニューラルネットワークの学習を行う場合、学習制御部７１は、学習用の記憶領域９１Ａ、９１Ｂをメモリ６０に確保する。例えば、学習制御部７１は、各層のニューロンデータとパラメータのうち、使用メモリ量がそれぞれ最も大きい使用メモリ量に対応した記憶領域９１Ａ、９１Ｂを確保する。そして、学習制御部７１は、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。例えば、認識制御部７０は、数字の「８」〜「２１」の順に、各層ごとに、パラメータの誤差の勾配を算出し、ニューロンデータの誤差の勾配を算出した後、パラメータを更新するようにしてもよい。
【０１４５】
また、上記各実施例では、ニューラルネットワークにより画像に写った識別対象を識別する場合を例示した。しかしながら、これらに限定されるものではない。例えば、識別対象は、音声など、ニューラルネットワークが識別対象とするものであれば何れであってもよい。
【０１４６】
また、上記各実施例では、ニューラルネットワークとして、畳み込みニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）を用いた場合を例示した。しかしながら、これらに限定されるものではない。例えば、ニューラルネットワークは、ＲＮＮ（Recurrent  Neural  Network）などの時系列を学習・認識可能なニューラルネットワークであってもよい。ＲＮＮは、ＣＮＮの拡張であり、ＣＮＮと同じく誤差逆伝播を行うため、本実施例と同様の処理を適用できる。
【０１４７】
また、上記各実施例では、１台の情報処理装置１０で認識処理および学習処理を実行する場合を例示した。しかしながら、これらに限定されるものではない。例えば、複数台の情報処理装置１０により認識処理および学習処理を実行する情報処理システムとして構成してもよい。例えば、入力データをミニバッチ法で処理する場合、情報処理システムは、入力データをＭ件ごとに分けて、別な情報処理装置１０で認識処理および学習処理を実行し、それぞれで算出されたパラメータの誤差を収集してパラメータを更新するようにしてもよい。
【０１４８】
また、上記各実施例では、マザーボード２１の演算部３１にメモリ量計算部５１を設けた場合を例示した。しかしながら、これらに限定されるものではない。例えば、アクセラレータボード２２の演算部６１にメモリ量計算部５１を設けてもよい。そして、アクセラレータボード２２の演算部６１のメモリ量計算部５１が、ニューラルネットワークの各層で、ニューロンデータおよびパラメータの記憶に使用される使用メモリ量を算出してもよい。
【０１４９】
また、上記各実施例では、識別処理の開始の前に、識別処理と学習処理で使用する使用メモリ量を計算する場合を例示した。しかしながら、これらに限定されるものではない。例えば、識別処理の開始の前に、識別処理で使用する使用メモリ量を計算し、識別処理の終了後、学習処理の開始の前に、学習処理で使用する使用メモリ量を計算してもよい。
【０１５０】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１の各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部又は任意の一部が、ＣＰＵ及び該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１５１】
［情報処理プログラム］
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、情報処理プログラムを実行するコンピュータシステムの一例を説明する。図１７は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【０１５２】
図１７に示すように、コンピュータ４００は、ＣＰＵ（Central  Processing  Unit）４１０、ＨＤＤ（Hard  Disk  Drive）４２０、ＲＡＭ（Random  Access  Memory）４４０を有する。これら４００〜４４０の各部は、バス５００を介して接続される。
【０１５３】
ＨＤＤ４２０には上記の全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１と同様の機能を発揮する情報処理プログラム４２０Ａが予め記憶される。なお、情報処理プログラム４２０Ａについては、適宜分離してもよい。
【０１５４】
また、ＨＤＤ４２０は、各種情報を記憶する。例えば、ＨＤＤ４２０は、記憶部２０と同様に、ＯＳや各種プログラム、各種情報を記憶する。
【０１５５】
そして、ＣＰＵ４１０が、情報処理プログラム４２０ＡをＨＤＤ４２０から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、情報処理プログラム４２０Ａは、全体制御部５０、メモリ量計算部５１、認識制御部７０および学習制御部７１と同様の動作を実行する。
【０１５６】
なお、上記した情報処理プログラム４２０Ａについては、必ずしも最初からＨＤＤ４２０に記憶させることを要しない。また、例えば、情報処理プログラム４２０Ａは、コンピュータ４００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させてもよい。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１５７】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４００に接続される「他のコンピュータ（又はサーバ）」などにプログラムを記憶させておく。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１５８】
１０  情報処理装置
２０  記憶部
２１  マザーボード
２２  アクセラレータボード
３０  メモリ
３１  演算部
４０  入力データ
４１  定義情報
４２  パラメータ情報
４３  スナップショット情報
５０  全体制御部
５１  メモリ量計算部
６０  メモリ
６１  演算部
７０  認識制御部
７１  学習制御部
【図１】
2018085063.tif 000015
【図２Ａ】
2018085063.tif 000016
【図２Ｂ】
2018085063.tif 000017
【図２Ｃ】
2018085063.tif 000018
【図２Ｄ】
2018085063.tif 000019
【図３】
2018085063.tif 000020
【図４】
2018085063.tif 000021
【図５】
2018085063.tif 000022
【図６】
2018085063.tif 000023
【図７】
2018085063.tif 000024
【図８】
2018085063.tif 000025
【図９】
2018085063.tif 000026
【図１０】
2018085063.tif 000027
【図１１】
2018085063.tif 000028
【図１２】
2018085063.tif 000029
【図１３】
2018085063.tif 000030
【図１４】
2018085063.tif 000031
【図１５】
2018085063.tif 000032
【図１６】
2018085063.tif 000033
【図１７】
2018085063.tif 000034