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