以下に、本発明にかかる情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法の実施例を図面に基づいて詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下に示す実施例は、矛盾を起こさない範囲で適宜組み合わせてもよい。
[ディープラーニングの説明]
ディープラーニングについて説明する。図1は、ディープラーニングの処理の流れの一例を模式的に示した図である。
ディープラーニングでは、識別対象に関する教師あり学習を行うことにより、ニューラルネットワークに自動的に識別対象の特徴を学習する。ディープラーニングでは、特徴を学習したニューラルネットワークを用いて識別対象を識別する。例えば、ディープラーニングでは、識別対象が写った大量の画像を学習用の画像として教師あり学習を行うことにより、画像に写った識別対象の特徴をニューラルネットワークに自動的に学習する。ディープラーニングでは、このように特徴を学習したニューラルネットワークを用いることで画像に写った識別対象を識別できる。
脳には、多数のニューロン(神経細胞)が存在する。各ニューロンは、他のニューロンから信号を受け取り、他のニューロンへ信号を受け渡す。脳は、この信号の流れによって、様々な情報処理を行う。ニューラルネットワークは、このような脳の機能の特性を計算機上で実現したモデルである。ニューラルネットワークは、脳のニューロンを模したユニットを階層的に結合している。ユニットは、ノードとも呼ばれる。各ユニットは、他のユニットからデータを受け取り、データにパラメータ(重み)を適用して他のユニットへ受け渡す。ニューラルネットワークは、ユニットのパラメータを学習によって変化させて受け渡すデータを変化させることで様々な識別対象を識別(認識)できる。以下では、ニューラルネットワークで伝送されるデータをニューロンデータと呼ぶ。
図1には、ニューラルネットワークの一例として、画像の認識に用いられる畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)の一例が示されている。以下では、ニューラルネットワークとして、畳み込みニューラルネットワークにより画像の認識を行う場合を例に説明する。
ニューラルネットワークは、階層構造を持った階層ニューラルネットワークであり、入力層と出力層との間に複数の中間層を有し得る。複数の中間層は、例えば、畳み込み層、活性化関数層、プーリング層、全結合層、及びソフトマックス層を含む。各層の数及び位置は、図1に例示したものに限定されず、要求されるアーキテクチャに応じて随時変更され得る。すなわち、ニューラルネットワークの階層構造や各層の構成は、識別する対象などに応じて、設計者が予め定めることができる。
ニューラルネットワークでは、画像の識別を行う場合、図1に示すように、左から右へ各中間層の処理を行うことで画像に写った識別対象の特徴を抽出し、最後に出力層で画像に写った識別対象の識別(カテゴライズ)を行う。この処理をフォワード処理又は認識処理と呼ぶ。一方、ニューラルネットワークでは、画像の学習を行う場合、識別した結果と正解との誤差を求め、図1に示すように、右から左へニューラルネットワークに逆伝播させ、各中間層のパラメータ(重み)を変更する。この処理をバックワード処理又は学習処理と呼ぶ。
次に、各中間層の演算について説明する。畳み込み層では、入力したニューロンデータの畳み込み演算(畳み込み処理)を行い、入力ニューロンデータの特徴を抽出する。図2Aは、畳み込み演算の一例を模式的に示した図である。図2Aの例では、入力したN×Nピクセルの画像の畳み込み演算をする場合を示している。畳み込み層では、N×Nピクセルの画像の各画素の値をそれぞれニューロンデータとして、それぞれパラメータが設定されたm×mのサイズのフィルタと畳み込み(convolution)を計算することで、次層への出力用のニューロンデータを作成する。
活性化関数層では、畳み込み層で抽出された特徴を強調する。すなわち、活性化関数層では、活性化関数σに出力用のニューロンデータを通過させることで、発火(activation)をモデル化する。発火とは、ニューロンから出力される信号の値がある値を超えるときに出力される信号が他のニューロンに伝達される現象をいう。
例えば、畳み込み層(Conv1, Conv2)では、以下の式(1)に示すような畳み込み演算を行い、その演算結果に対して、活性化関数層(ReLU1, ReLU2)では、以下の式(2)に示すような活性化関数σの演算を行う。
ここで、yL−1 (i+a)(j+b)は、入力となるニューロンデータであり、図2Aに示すN×Nピクセルの画像(層L−1)yL−1の(i+a,j+b)の画素のデータである。wabは、図2Aに示すm×mのフィルタwの重みを表す各パラメータである。xL ijは、畳み込み演算された(i,j)の画素のデータである。yL ijは、xL ijに活性化関数σを適用し、所定のバイアスbLを加えた結果としてユニットULi(層L)の出力となり、さらに次の層L+1の入力ともなるニューロンデータである。
活性化関数層(ReLU1, ReLU2)で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、ReLU(Rectified Linear Unit:ランプ関数)を用いることができる。図2Bは、活性化関数σの一例(ReLU)を模式的に示した図である。図2Bの例では、入力xがゼロ未満の場合、出力yにはゼロが出力される。また、入力xがゼロを超えた場合、出力yには入力xの値が出力される。
プーリング層では、入力したニューロンデータの間引きを行う。図2Cは、間引きの一例を模式的に示した図である。例えば、N×Nピクセルの画像がニューロンデータとして入力される。プーリング層では、N×Nピクセルのニューロンデータから、(N/k)×(N/k)のニューロンデータに間引く。例えば、k×kの領域ごとに、最大値を取り出すMax-Poolingにより、間引きを行う。間引きは、その他、何れの手法で行ってもよい。例えば、k×kの領域の平均値を取り出すAverage-Poolingで、間引きを行ってもよい。また、プーリング層では、間引きを行うk×kの領域を一部重複させてもよく、重複させずに隣接させて間引きを行ってもよい。
例えば、プーリング層(Pool1, Pool2)では、以下の式(3)に示すようなMax-Poolingを行う。
ここで、関数maxは、図2Cに示す(i,j)の画素からそれぞれk画素の範囲の領域内で最大値のニューロンデータを出力する関数である。yL i,Jは、ユニットULiの出力となるニューロンデータである。
全結合層では、抽出された特徴を結合して特徴を示す変数を生成する。すなわち、全結合層では、識別を行う対象数に応じて、入力したニューロンデータを全結合した全結合の演算を行う。例えば、N×Nピクセルの画像がニューロンデータとして入力される。全結合層は、N×Nピクセルのニューロンデータ全てを、それぞれ重み(パラメータ)と掛け合わせることで、次層への出力用のニューロンデータを作成する。
ソフトマックス層は、全結合層で生成された変数を確率に変換する。すなわち、ソフトマックス層は、正規化するような活性化関数σに出力用のニューロンデータを通過させる演算を行うことで、発火をモデル化する。
図2Dは、全結合の一例を模式的に示した図である。図2Dの例は、識別を行う対象数をi個とした場合にj個のニューロンデータをそれぞれ全結合してi個のニューロンデータを得る場合の一例を示している。例えば、全結合層(Fully-conn1)では、以下の式(4)に示すような全結合の演算を行い、その演算結果に対して、ソフトマックス層(Softmax)では、以下の式(5)に示すような演算を行う。
ここで、yL−1 jは、ユニットUL−1の出力であり、ユニットULの入力となるニューロンデータである。wL−1 jiは、yL−1 jとyL iに対応した重みを表すパラメータである。xL iは、重み付け演算されたデータである。yL iは、xL iに活性化関数σを適用し、所定のバイアスbL iを加えた結果のユニットULiの出力となるニューロンデータである。
ソフトマックス層(Softmax)で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、Softmax関数を用いることができる。ニューラルネットワークによる演算結果のニューロンデータは、実数となる。ソフトマックス層は、結果の識別を行いやすいように演算結果のニューロンデータを正規化する。
例えば、ソフトマックス層(Softmax)は、Softmax関数などの活性化関数を用いて演算結果のニューロンデータを0〜1の範囲に正規化する。Softmax関数は、ロジスティック関数を一般化したものであり、任意の実数を持つn次元ベクトルxを、(0,1)区間の実数で和が1になるようなn次元ベクトルσ(x)に正規化する。例えば、出力層では、以下の式(6)に示すSoftmax関数の演算を行う。
これにより、ニューラルネットワークによる演算結果のn個のニューロンデータxiは、それぞれの認識対象iである確率σ(x)の確率分布に変換される。ソフトマックス層(Softmax)による演算結果のニューロンデータは、出力層に出力され、出力層で識別が行われる。
例えば、画像に写った識別対象が10種類の何れであるかの識別を行う場合、演算結果として10個のニューロンデータが全結合層からソフトマックス層を経由して出力層に出力される。出力層は、確率分布が最も大きいニューロンデータに対応する画像の種類を識別結果とする。また、学習を行う場合、出力層は、認識結果と正解とを比較して誤差を求める。例えば、出力層は、交差エントロピー誤差関数を利用して目的の確率分布(正解)との誤差を求める。例えば、出力層は、以下の式(7)に示す誤差関数の演算を行う。
ここで、tiは、目的の分布であり、認識対象iが正解である場合、1とし、その他の場合0とする。yiは、ニューラルネットワークによる演算された認識対象iの確率σ(xi)である。
ディープラーニングでは、教師あり学習を行うことにより、ニューラルネットワークに自動的に特徴を学習させる。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解とを比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更して最適解に近づけていく。
次に、誤差の計算の一例を説明する。例えば、誤差逆伝播法では、認識時におけるニューロンデータの誤差として、以下の式(8)に示す誤差関数の偏微分の演算を行う。
誤差逆伝播法では、出力層(Output)におけるパラメータの誤差の勾配を以下の式(9)から計算する。なお、Softmax関数の演算を行うソフトマックス層(Softmax)では、式(8)の結果が式(9)の誤差の勾配となる。
また、誤差逆伝播法では、出力層(Output)での誤差から入力への誤差の勾配を部分微分を用いて計算する。例えば、ReLUなどの活性化関数の演算を行う活性化関数層(ReLU1, ReLU2)では、以下の式(10−1)から入力の誤差の勾配を計算する。σ’(x)は、σ(x)をxで偏微分したものであり、以下の式(10−2)から求められる。xは、認識時で使用した値を用いる。σ’(x)を、式(10−1)に代入すると誤差の勾配(∂E/∂xL i)が求まる。
また、誤差逆伝播法では、演算にパラメータ(重み)を有する層についてはパラメータの誤差の勾配を計算する。例えば、式(4)に示す全結合の演算では、以下の式(11−1)からパラメータの誤差の勾配を計算する。また、式(1)に示す畳み込み演算では、以下の式(11−2)からパラメータの誤差の勾配を計算する。なお、偏微分の連鎖律を用いて計算すると得られるyL iは、認識時に使用した値を用いる。
また、誤差逆伝播法では、前の層(L−1層)への誤差の勾配を算出する。例えば、前の層が全結合の演算を行う層である場合は、以下の式(12−1)から前の層への誤差の勾配を算出する。また、前の層が畳み込み演算を行う層である場合は、以下の式(12−2)から前の層への誤差の勾配を算出する。なお、偏微分の連鎖律を用いて計算すると得られるwL ijは、認識時に使用した値を用いる。また、前の層がMax-Poolingを行うプーリング層(Pool1, Pool2)である場合は、認識時にk×kの領域の最大値を取った場所に対して誤差の勾配(∂E/∂xL i)を加算する。なお、k×kの領域のその他の場所に対しては、何も行わない。
誤差の計算では、ニューラルネットワークに逆伝播させ、ニューラルネットワークの最上位の層である入力層(Input)に到達するまで各中間層の誤差の勾配の計算を繰り返す。例えば、出力層(Output)での誤差から入力への誤差の勾配を式(10−1)を用いて計算する。例えば、式(10−1)に示す入力の誤差は、下層が出力層の場合、式(9)の誤差の勾配を代入して求める。また、式(10−1)に示す入力の誤差は、下層が出力層以外の場合、式(12−1)、(12−2)から算出される誤差の勾配を代入して求める。また、例えば、式(11−1)に示すパラメータの誤差の勾配は、式(10−1)から算出される誤差を代入して求める。また、例えば、式(12−1)に示す前の層への誤差は、式(10−1)から算出される誤差を代入して求める。そして、誤差の計算では、誤差に応じて全層のパラメータを更新する。
ニューラルネットワークは、図1、図2A〜図2Dに例示したような画像認識に用いられるほか、音声認識、言語認識などの様々な認識処理に適用され得る。この認識処理の高精度化を図るために、ニューラルネットワークの層数が増加されニューラルネットワークが巨大化されることがある。ニューラルネットワークが巨大化されると、ディープラーニングの計算量が膨大になりやすいが、GPU(Graphics Processing Unit)や専用チップなどのアクセラレータ(アクセラレータボード)で演算を行うことにより、処理を高速化できる。このとき、アクセラレータ(アクセラレータボード)をホスト(マザーボード)と通信可能に接続してホスト上のメモリ(ホストメモリ)を用いながらディープラーニングを行うと、処理の速度が通信路のデータ転送の速度により制約される。アクセラレータとホストとのデータ転送はアクセラレータ内のデータ転送に比べて低速であるため、アクセラレータ内のローカルメモリ上で処理する方が、処理を高速化できる。
アクセラレータ内のローカルメモリは、高い性能を出すために消費電力やチップ面積に限りがある。すなわち、アクセラレータ内のローカルメモリの記憶容量は、ホストメモリの記憶容量に比べて限られている。例えば、ホストメモリの記憶容量が数百GBであるのに対して、アクセラレータ内のローカルメモリの記憶容量は、16GBであり、可能なニューラルネットワークサイズが制限される。
それに対して、ニューラルネットワークにおける少なくとも一部の中間層に対して、インプレイス(in-place)処理を行うことで、メモリ使用量をある程度削減できる。インプレイス処理では、中間層が、同一のメモリ領域を入力及び出力に共用可能なように構成される。すなわち、インプレイス処理では、中間層に対する入力と出力とで同一のメモリ領域が割り当てられる。割り当てられたメモリ領域では、中間層への入力ニューロンデータが出力ニューロンデータで上書きされ得る。例えば、図3に示すように、ニューラルネットワークを構成できる。図3は、インプレイス処理を行う中間層を含むニューラルネットワークの計算の流れの一例を示す図である。
図3の例は、ニューラルネットワークとして、畳み込みニューラルネットワークの学習を行う際の各データと処理の順序を示している。ニューラルネットワークは、各層が順に並んだ階層構造とされている。ニューラルネットワークは、入力層(Input)、第1の畳み込み層(Conv1)、第1の活性化関数層(ReLU1)、第2の畳み込み層(Conv2)、第2の活性化関数層(ReLU2)、第1のプーリング層(Pool1)、第1の全結合層(Fully-conn1)、第3の活性化関数層(ReLU3)の各層を順に含む。ニューラルネットワークは、第2の全結合層(Fully-conn2)、ソフトマックス層(Softmax)、出力層(Output)の各層をさらに順に含む。図3では、インプレイス処理を行う中間層が活性化関数層(ReLU1, ReLU2, ReLU3)である場合が例示されている。
図3において、「data」は、各層のニューロンデータのデータサイズを示している。「param」は、各層のパラメータのデータサイズを示している。「gdata」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「gparam」は、各層のパラメータの誤差の勾配のデータサイズを示している。なお、矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
ニューラルネットワークの学習を行う場合、認識処理が行われ、その後、学習処理が行われる。認識処理では、学習対象の画像を識別する処理が行われる。すなわち、認識処理では、学習対象の画像に対して数字の「1」〜「9」の順に各層の処理が行われ、処理結果が出力される。
例えば、数字の「1」に示すように、入力層(Input)から受けたニューロンデータに対して第1の畳み込み層(Conv1)で畳み込み演算が行われ、演算結果にパラメータを適用して第1の活性化関数層(ReLU1)へ入力される。
数字の「2」に示すように、第1の活性化関数層(ReLU1)でインプレイス処理が行われる。すなわち、第1の活性化関数層(ReLU1)用に確保されたメモリ領域に入力ニューロンデータが格納され、その入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められる。出力ニューロンデータは、メモリ領域における入力ニューロンデータに上書きされるとともに、第2の畳み込み層(Conv2)へ出力される。
数字の「3」に示すように、第1の活性化関数層(ReLU1)の出力ニューロンデータが第2の畳み込み層(Conv2)へ入力されると、第2の畳み込み層(Conv2)で畳み込み演算が行われ、演算結果にパラメータを適用して第2の活性化関数層(ReLU2)へ入力される。
数字の「4」に示すように、第2の活性化関数層(ReLU2)でインプレイス処理が行われる。すなわち、第2の活性化関数層(ReLU2)用に確保されたメモリ領域に入力ニューロンデータが格納され、その入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められる。出力ニューロンデータは、メモリ領域における入力ニューロンデータに上書きされるとともに、第1のプーリング層(Pool1)へ出力される。
数字の「5」に示すように、第2の活性化関数層(ReLU2)の出力ニューロンデータが第1のプーリング層(Pool1)へ入力されると、第1のプーリング層(Pool1)で間引きが行われ、間引き結果が第1の全結合層(Fully-conn1)へ入力される。
数字の「6」に示すように、第1のプーリング層(Pool1)の出力ニューロンデータが第1の全結合層(Fully-conn1)へ入力されると、パラメータを適用しながら全結合の演算が行われ、演算結果が第3の活性化関数層(ReLU3)へ入力される。
数字の「7」に示すように、第3の活性化関数層(ReLU3)でインプレイス処理が行われる。すなわち、第3の活性化関数層(ReLU3)用に確保されたメモリ領域に入力ニューロンデータが格納され、その入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められる。出力ニューロンデータは、メモリ領域における入力ニューロンデータに上書きされるとともに、第2の全結合層(Fully-conn2)へ出力される。
数字の「8」に示すように、第3の活性化関数層(ReLU3)の出力ニューロンデータが第2の全結合層(Fully-conn2)へ入力されると、パラメータを適用しながら全結合の演算が行われ、演算結果がソフトマックス層(Softmax)へ入力される。
数字の「9」に示すように、ソフトマックス層(Softmax)でSoftmax関数などの活性化関数を用いた演算が行われ、演算結果が出力層(Output)へ入力される。
次に、認識処理の処理結果からパラメータを更新する学習処理が行われる。例えば、学習処理では、数字の「10」に示すように識別結果と正解とを比較して誤差を求める。Labelは、学習対象の画像の正解を示す。そして、学習処理では、認識結果と正解との誤差を、数字の「11」〜「21」の順に各層の誤差の勾配を算出する処理が行われる。そして、学習処理では、数字の「22」に示すように各階層のパラメータを変更する処理が行われる。なお、パラメータの変更は、各階層ごとに誤差の勾配が算出されたタイミングで行ってもよい。
ここで、インプレイス処理を行わない各中間層のニューロンデータの誤差の勾配(gdata)は、前の層の誤差の勾配(gdata)と、認識時のパラメータ(param)とから算出され得る。例えば、第2の全結合層(Fully-conn2)では、「11」に示すように、ソフトマックス層の誤差の勾配(gdata)と第2の全結合層のパラメータ(param)とからニューロンデータの誤差の勾配(gdata)が算出されている。インプレイス処理を行わない各中間層のパラメータの誤差の勾配(gparam)は、前の層の誤差の勾配(gdata)と、認識時のニューロンデータ(data)とから算出され得る。例えば、第2の全結合層では、「12」に示すように、ソフトマックス層の誤差の勾配(gdata)と、第3の活性化関数層のニューロンデータ(data)とからパラメータの誤差の勾配(gparam)が算出されている。
一方、インプレイス処理を行う各中間層のニューロンデータの誤差の勾配(gdata)は、前の層の誤差の勾配(gdata)と認識時のニューロンデータ(data)とから算出され、誤差の勾配(gdata)のメモリ領域に格納される。
例えば、第3の活性化関数層(ReLU3)では、「13」に示すように、「11」のメモリ領域に格納された第2の全結合層(Fully-conn2)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。そして、第3の活性化関数層(ReLU3)のニューロンデータの誤差の勾配(gdata)は、誤差の勾配(gdata)のメモリ領域に格納される。
例えば、第2の活性化関数層(ReLU2)では、「17」に示すように、「16」のメモリ領域に格納された第1のプーリング層(Pool1)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。そして、第2の活性化関数層(ReLU2)のニューロンデータの誤差の勾配(gdata)は、誤差の勾配(gdata)のメモリ領域に格納される。
例えば、第1の活性化関数層(ReLU1)では、「20」に示すように、「19」のメモリ領域に格納された第2の畳み込み層(Conv2)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。そして、第1の活性化関数層(ReLU1)のニューロンデータの誤差の勾配(gdata)は、誤差の勾配(gdata)のメモリ領域に格納される。
このように、ニューラルネットワークの学習では、認識時のパラメータおよびニューロンデータを使用する。このため、図3に示すディープラーニングでは、学習を行う場合、学習用の入力ニューロンデータを認識した際のニューロンデータ(data)とパラメータ(param)とを記憶する。また、図3に示すディープラーニングでは、学習を行う場合、ニューロンデータの誤差の勾配(gdata)とパラメータの誤差の勾配(gparam)も記憶する。このように、学習時には、使用メモリ量が増加する。
例えば、層ごとにメモリ量を解析して計算順序を工夫することにより学習時の使用メモリ量の削減を図る第1の方法を考える。第1の方法では、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、パラメータの誤差を算出したのち、ニューロンデータの誤差を算出する制御を行う。ニューラルネットワークに第1の方法が適用できれば、認識時のニューロンデータ記憶領域を上書しつつ処理できるため、使用メモリ量を削減できる。
しかし、図3に示すニューラルネットワークでは、インプレイス処理を行う中間層のニューロンデータを、第1の方法による使用メモリ量削減の対象とすることが困難である。例えば、活性化関数層(ReLU1, ReLU2, ReLU3)用に確保されたメモリ領域では、入力ニューロンデータが出力ニューロンデータで上書きされる。このため、第1の方法を適用するために、入力ニューロンデータを退避しておくメモリ領域を追加すると、使用メモリ量が増加してしまう。すなわち、入力ニューロンデータと同じサイズのメモリ領域を追加すると、インプレイス処理による使用メモリ量削減の効果が失われ得る。
あるいは、例えば、階層ニューラルネットワークの層間データを共有することにより学習時の使用メモリ量の削減を図る第2の方法を考える。第2の方法では、ニューロンデータとパラメータがメモリ領域に保持される層については、ニューロンデータとパラメータのうち、使用メモリ量の小さい方の誤差の勾配を算出してメモリ領域に保持する。そして、使用メモリ量の大きい方の誤差の勾配を算出して認識処理のデータを保持したメモリ領域に上書きする。ニューラルネットワークに第2の方法が適用できれば、学習時における使用メモリ量を削減できる。
しかし、図3に示すニューラルネットワークでは、インプレイス処理を行う中間層のニューロンデータを、第2の方法による使用メモリ量削減の対象とすることが困難である。例えば、活性化関数層(ReLU1, ReLU2, ReLU3)用に確保されたメモリ領域では、入力ニューロンデータが出力ニューロンデータで上書きされる。このため、第2の方法を適用するために、入力ニューロンデータを退避しておくメモリ領域を追加すると、使用メモリ量が増加してしまう。すなわち、入力ニューロンデータと同じサイズのメモリ領域を追加すると、インプレイス処理による使用メモリ量削減の効果が失われ得る。
そこで、実施例1では、インプレイス処理が可能な中間層への入力ニューロンデータの符号を示す特性データを認識処理時にバッファ領域に格納し、その特性データを用いて学習処理時に前段の中間層に関する誤差を計算する。すなわち、認識処理において、インプレイス処理が可能な中間層では、メモリ領域に格納された入力ニューロンデータを出力ニューロンデータで上書きせずに残しておく。そして、入力ニューロンデータの符号ビットに対応した容量で追加のバッファ領域を確保し、符号ビットを特性データとして追加のバッファ領域に格納しておく。学習処理において、インプレイス処理が可能な中間層では、入力ニューロンデータに特性データ(符号ビット)を掛けて出力ニューロンデータを生成して誤差に関する計算を行う。これにより、追加のメモリ使用量を抑制でき、メモリ使用を効率化できる。例えば、情報処理装置10を次のように構成する。
[情報処理装置の構成]
実施例1に係る情報処理装置10の構成について説明する。図4は、情報処理装置の機能的な構成を概略的に示した図である。情報処理装置10は、ディープラーニングを用いて各種の対象の認識を行う認識装置である。例えば、情報処理装置10は、サーバコンピュータなどのコンピュータである。情報処理装置10は、1台のコンピュータとして実装してもよく、また、複数台のコンピュータによるコンピュータシステムとして実装してもよい。すなわち、以下に説明するディープラーニングは、複数台のコンピュータによる情報処理システムで処理を分散して実行してもよい。なお、本実施例では、情報処理装置10を1台のコンピュータとした場合を例として説明する。本実施例では、情報処理装置10が、画像の認識を行う場合を例に説明する。
図4に示すように情報処理装置10は、記憶部20と、マザーボード21と、アクセラレータボード22とを有する。なお、情報処理装置10は、上記の機器以外の他の機器を有してもよい。例えば、情報処理装置10は、各種の操作を受け付ける入力部や各種の情報を表示する表示部などを有してもよい。
記憶部20は、ハードディスク、SSD(Solid State Drive)などの記憶装置である。マザーボード21は、情報処理装置10の主機能を担う部品が装着された基板である。アクセラレータボード22は、情報処理装置10の処理能力を高めるために、追加して利用するハードウェアが搭載された基板である。アクセラレータボード22は、複数設けてもよい。なお、本実施例では、アクセラレータボード22を1つ設けた場合を例として説明する。
記憶部20とマザーボード21とアクセラレータボード22は、データを転送可能なバス23で接続されている。例えば、記憶部20とマザーボード21は、SATA(Serial ATA)、SAS(Serial Attached SCSI)などのバス23Aで接続されている。また、マザーボード21とアクセラレータボード22は、PCI(Peripheral Component Interconnect)Expressなどのバス23Bで接続されている。
ディープラーニングは、演算を大量に行う。このため、情報処理装置10では、GPU(Graphics Processing Unit)や専用チップなどのアクセラレータを用いたアクセラレータボード22で演算を行うことにより、処理の高速化を行っている。
記憶部20は、OS(Operating System)や、後述する各種の処理を実行する各種プログラムを記憶する。さらに、記憶部20は、各種情報を記憶する。例えば、記憶部20は、入力ニューロンデータ40と、定義情報41と、パラメータ情報42と、スナップショット情報43とを記憶する。なお、記憶部20は、その他の各種の情報を記憶してもよい。
入力ニューロンデータ40は、ニューラルネットワークへの入力対象とされたデータである。例えば、教師あり学習を行う場合、入力ニューロンデータ40は、学習用のデータである。例えば、画像に写った識別対象の特徴をニューラルネットワークに学習させる場合、入力ニューロンデータ40は、様々な識別対象が写った大量の画像と、識別対象が何であるかの正解を示すラベルを対応付けたデータである。また、ニューラルネットワークによる識別を行う場合、入力ニューロンデータ40は、識別対象とされたデータである。例えば、画像に写った識別対象を識別する場合、入力ニューロンデータ40は、識別対象とされた画像のデータである。
定義情報41は、ニューラルネットワークに関する情報を記憶したデータである。例えば、定義情報41には、ニューラルネットワークの階層構造や各階層のユニットの構成、ユニットの接続関係などのニューラルネットワークの構成を示す情報が記憶される。画像の認識を行う場合、定義情報41には、例えば、設計者等によって定められた畳み込みニューラルネットワークの構成を示す情報が記憶される。
パラメータ情報42は、ニューラルネットワークの各層の演算で用いられる重み値などのパラメータの値を記憶したデータである。パラメータ情報42に記憶されたパラメータの値は、初期状態では、所定の初期値とされ、学習に応じて更新される。
スナップショット情報43は、入力ニューロンデータを所定の件数ごとに分けて、学習のバッチ処理を繰り返す場合、途中の処理状態に関する情報を記憶したデータである。
マザーボード21は、メモリ30と、演算部31とを有する。
メモリ30は、例えば、RAM(Random Access Memory)などの半導体メモリである。メモリ30は、演算部31で実行される処理の情報や処理で使用される各種の情報を記憶する。
演算部31は、情報処理装置10全体を制御するデバイスである。演算部31としては、CPU(Central Processing Unit)、MPU(Micro Processing Unit)等の電子回路を採用できる。演算部31は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部31は、全体制御部50と、メモリ量計算部51とを有する。
全体制御部50は、ディープラーニングに関する処理全体を制御する。全体制御部50は、ディープラーニングの処理開始の指示を受け付けると、記憶部20からディープラーニングに関する各種のプログラムや各種情報を読み出す。例えば、全体制御部50は、ディープラーニングの処理を制御する各種のプログラムを読み出す。また、全体制御部50は、定義情報41、パラメータ情報42を読み出す。全体制御部50は、定義情報41、パラメータ情報42に基づいてニューラルネットワークの構成を特定し、ニューラルネットワークの認識処理、学習処理の処理順序を決定する。なお、全体制御部50は、学習処理を開始するタイミングで学習処理の処理順序を決定してもよい。
全体制御部50は、記憶部20から入力ニューロンデータ40を所定の件数ごとに分けて読み出す。そして、全体制御部50は、読み出した入力ニューロンデータ40や認識処理、学習処理に関する情報をアクセラレータボード22にオフロードする。そして、全体制御部50は、アクセラレータボード22を制御して、アクセラレータボード22にニューラルネットワークの認識処理、学習処理を実行させる。
メモリ量計算部51は、ディープラーニングでデータの記憶に使用される使用メモリ量を算出する。例えば、メモリ量計算部51は、定義情報41に基づいて、ニューラルネットワークの各層で、ニューロンデータ、パラメータ、ニューロンデータの誤差およびパラメータの誤差の記憶に使用される使用メモリ量を算出する。
アクセラレータボード22は、メモリ60と、演算部61とを有する。
メモリ60は、例えば、RAMなどの半導体メモリである。メモリ60は、演算部61で実行される処理の情報や処理で使用される各種の情報を記憶する。
演算部61は、アクセラレータボード22を制御するデバイスである。演算部61としては、GPU(Graphics Processing Unit)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)等の電子回路を採用できる。演算部61は、全体制御部50からの制御に応じて、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部61は、認識制御部70と、学習制御部71とを有する。
認識制御部70は、ニューラルネットワークの認識処理を制御する。例えば、認識制御部70は、マザーボード21からオフロードされた入力ニューロンデータをニューロンデータとして、処理順序に従い認識処理を実行する。認識制御部70は、ニューロンデータに対して、ニューラルネットワークの各層の演算を行い、当該ニューラルネットワークの各層のニューロンデータとパラメータをそれぞれメモリ60に保持する。
このとき、インプレイス処理が可能な中間層について、認識制御部70は、中間層に対するバッファ領域としてメモリ60内に追加のメモリ領域を確保し、中間層への入力ニューロンデータの特性に応じた特性データを追加のメモリ領域に格納する。特性データは、例えば、入力ニューロンデータがfloat型のデータである場合、入力ニューロンデータの符号ビットとすることができる。認識制御部70は、ニューロンデータ用のメモリ領域における入力ニューロンデータをそのまま残しておく。
学習制御部71は、ニューラルネットワークの学習処理を制御する。例えば、学習制御部71は、認識処理による識別結果と正解との誤差を求め、処理順序に従い、誤差をニューラルネットワークに伝播させる学習処理を実行する。学習制御部71は、誤差からニューラルネットワークの各層の誤差の勾配を算出してパラメータを学習する。
このとき、インプレイス処理が可能な中間層について、学習制御部71は、バッファ領域(追加のメモリ領域)に格納された特性データを使用して、中間層に関する誤差を算出する。すなわち、学習制御部71は、インプレイス処理が可能な中間層のニューロンデータ用のメモリ領域から入力ニューロンデータを読み出し、バッファ領域から特性データ(符号ビット)を読み出す。学習制御部71は、入力ニューロンデータに特性データ(符号ビット)を掛けて出力ニューロンデータを生成し、生成された出力ニューロンデータを用いてその中間層の前段からの入力ニューロンデータに関する誤差(gdata, gparam)を計算する。
例えば、誤差の勾配の計算では、上記の式(9)、式(10−1)に示すように、活性化関数σ(x)をxで偏微分したσ’(x)が用いられる。σ’(x)の値は、図5に示すように、入力xの符号を示す符号ビットの値と一致させることができる。図5は、実施例1における活性化関数と特性データとの関係を示す図である。また、入力xに活性化関数σを適用した得られる出力yは、図6に示すように、入力xに符号ビットの値を掛けることによっても得られる。図6は、実施例1における入力配列と出力配列と特性データ配列との関係を示す図である。そのため、認識処理時に、入力ニューロンデータと符号ビットとを退避しておけば、学習処理時に、入力ニューロンデータと符号ビットとを掛けることで認識処理時の出力ニューロンデータを再現できることが分かる。
また、例えば、図6に示すように、入力ニューロンデータと出力ニューロンデータとがそれぞれfloat型の32ビットのデータであるのに対して、特性データ(符号ビット)をbool型の1ビットのデータにしてそのビット数を抑制できる。そのため、特性データ(符号ビット)を格納するメモリ領域として、例えば、フェイルビットマップを格納するメモリ領域を流用でき、情報処理装置10によるメモリ使用を効率化できる。例えば、特性データ配列(ビットマップ配列)のメモリ量は、入力配列・出力配列の各メモリ量の約1/32とすることができる。また、特性データは、フェイルビットマップを格納するメモリ領域に格納し得ることから、ビットマップデータとも呼ぶことができる。
例えば、情報処理装置10では、図7に示すように、以下の点で図3に示すニューラルネットワークの計算と異なる計算が行われる。図7は、実施例1におけるニューラルネットワークの計算の流れの一例を示す図である。図7では、インプレイス処理が可能な中間層が活性化関数層(ReLU1, ReLU2, ReLU3)である場合が例示されている。
図7において、「buff」は、インプレイス処理を行う中間層用のバッファ領域として確保される追加のメモリ領域に格納される特性データ(符号ビット)のデータサイズを示している。
ニューラルネットワークの学習を行う場合、認識制御部70は、学習対象の画像を識別する認識処理を実行する。図7に示すように、認識制御部70は、数字の「1」〜「10」の順に各層の処理を行い、処理結果を出力する。このとき、インプレイス処理が可能な中間層について、認識制御部70は、中間層に対するバッファ領域としてメモリ60内に追加のメモリ領域を確保し、中間層への入力ニューロンデータの特性に応じた特性データを追加のメモリ領域に格納する。
例えば、数字の「2」に示すように、第1の活性化関数層(ReLU1)のデータ用に確保されたメモリ領域に入力ニューロンデータ(data)が格納され、入力ニューロンデータの符号を示す特性データ(buff)がバッファ用のメモリ領域に格納される。特性データのデータサイズは1ビットに抑制できる。第1の活性化関数層(ReLU1)では、入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められ第2の畳み込み層(Conv2)へ出力される。
例えば、数字の「4」に示すように、第2の活性化関数層(ReLU2)のデータ用に確保されたメモリ領域に入力ニューロンデータ(data)が格納され、入力ニューロンデータの符号を示す特性データ(buff)がバッファ用のメモリ領域に格納される。特性データのデータサイズは1ビットに抑制できる。第2の活性化関数層(ReLU2)では、入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められ第1のプーリング層(Pool1)へ出力される。
例えば、数字の「7」に示すように、第3の活性化関数層(ReLU3)のデータ用に確保されたメモリ領域に入力ニューロンデータ(data)が格納され、入力ニューロンデータの符号を示す特性データ(buff)がバッファ用のメモリ領域に格納される。特性データのデータサイズは1ビットに抑制できる。第3の活性化関数層(ReLU3)では、入力ニューロンデータに対して活性化関数を適用して出力ニューロンデータが求められ第2の全結合層(Fully-conn2)へ出力される。
次に、学習制御部71が、認識処理の識別結果の誤差からパラメータを更新する学習処理を実行する。
ここで、インプレイス処理を行わない各中間層のニューロンデータの誤差の勾配(gdata)は、前の層の誤差の勾配(gdata)と、認識時のパラメータ(param)とから算出される。例えば、第2の全結合層(Fully-conn2)では、「11」に示すように、ソフトマックス層の誤差の勾配(gdata)と第2の全結合層のパラメータ(param)とからニューロンデータの誤差の勾配(gdata)が算出される。インプレイス処理を行わない各中間層のパラメータの誤差の勾配(gparam)は、前の層の誤差の勾配(gdata)と、認識時のニューロンデータ(data)とから算出され得る。例えば、第2の全結合層では、「12」に示すように、ソフトマックス層の誤差の勾配(gdata)と、第3の活性化関数層のニューロンデータ(data)とからパラメータの誤差の勾配(gparam)が算出されている。
一方、インプレイス処理が可能である各中間層のニューロンデータの誤差の勾配(gdata)は、前の層の誤差の勾配(gdata)と認識時のニューロンデータ(data)とから算出され、そのニューロンデータ(data)のメモリ領域に上書きで格納される。
例えば、第3の活性化関数層(ReLU3)では、「13」に示すように、第2の全結合層(Fully-conn2)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。第2の全結合層(Fully-conn2)の誤差の勾配(gdata)は、「11」で求められたものである。認識時のニューロンデータ(data)は、ニューロンデータ(data)のメモリ領域に格納された入力ニューロンデータとバッファ領域に格納された特性データ(buff)とから再現された出力ニューロンデータである。そして、第3の活性化関数層(ReLU3)のニューロンデータの誤差の勾配(gdata)は、そのニューロンデータ(data)のメモリ領域に上書きで格納される。
例えば、第2の活性化関数層(ReLU2)では、「17」に示すように、第1のプーリング層(Pool1)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。第1のプーリング層(Pool1)の誤差の勾配(gdata)は、「16」で求められたものである。認識時のニューロンデータ(data)は、ニューロンデータ(data)のメモリ領域に格納された入力ニューロンデータとバッファ領域に格納された特性データ(buff)とから再現された出力ニューロンデータである。そして、第2の活性化関数層(ReLU2)のニューロンデータの誤差の勾配(gdata)は、そのニューロンデータ(data)のメモリ領域に上書きで格納される。
例えば、第1の活性化関数層(ReLU1)では、「20」に示すように、第2の畳み込み層(Conv2)の誤差の勾配(gdata)と認識時のニューロンデータ(data)とからニューロンデータの誤差の勾配(gdata)が算出される。第2の畳み込み層(Conv2)の誤差の勾配(gdata)は、「19」で求められたものである。認識時のニューロンデータ(data)は、ニューロンデータ(data)のメモリ領域に格納された入力ニューロンデータとバッファ領域に格納された特性データ(buff)とから再現された出力ニューロンデータである。そして、第1の活性化関数層(ReLU1)のニューロンデータの誤差の勾配(gdata)は、そのニューロンデータ(data)のメモリ領域に上書きで格納される。
本実施例の学習処理では、図7に破線で示したメモリ領域を削減でき、学習時におけるメモリ使用を効率化できる。これにより、例えば、アクセラレータボード22で一度に実行可能なバッチサイズが増加する。これにより、本実施例で説明した学習時における使用メモリ量の削減を適用した場合、入力ニューロンデータの学習にかかる時間を短縮できる。
[処理の流れ]
次に、情報処理装置10が実行する情報処理方法における処理の流れについて説明する。図8は、実施例1に係る情報処理方法の一例を示すフローチャートである。この情報処理方法は、所定のタイミング、例えば、管理者から処理開始が指示されたタイミングで実行される。
例えば、活性化関数層(ReLU1, ReLU2, ReLU3)がいずれもパラメータを使用しない場合について例示的に説明する。
図8に示すように、全体制御部50は、定義情報41、パラメータ情報42を読み出す(S1)。全体制御部50は、定義情報41、パラメータ情報42に基づいて、ハイパーパラメータ(学習率、モーメンタム、バッチサイズ、最大反復回数など)を特定し(S2)、学習実行の繰り返し回数max_iterを取得する。そして、全体制御部50は、定義情報41、パラメータ情報42に基づいて、ニューラルネットワークの構成を特定し(S3)、層数nを取得する。
メモリ量計算部51は、定義情報41に基づいて、認識および学習の際にニューラルネットワークの各層で、ニューロンデータおよびパラメータの誤差の記憶に使用される使用メモリ量のデータサイズを算出する(S4)。すなわち、メモリ量計算部51は、層数をカウントするためのパラメータiを1に初期化し(S5)、i層目がインプレイス処理の中間層であるか否か判断する(S6)。
メモリ量計算部51は、i層目がインプレイス処理の中間層でない場合(S6でNo)、「x+w+Δx+Δw」をi層目に必要なメモリ量として確保する(S7)。「x」は、入力xのデータサイズを示し、「w」は、パラメータwのデータサイズを示し、「Δx」は、入力誤差Δxのデータサイズを示し、「Δw」は、パラメータ誤差Δwのデータサイズを示す。メモリ量計算部51は、i層目がインプレイス処理の中間層である場合(S6でYes)、「x+w+Δw+Δb」をi層目に必要なメモリ量として確保する(S8)。「x」は、入力xのデータサイズを示し、「w」は、パラメータwのデータサイズを示し、「Δw」は、パラメータ誤差Δwのデータサイズを示し、「Δb」は、入力xの符号ビットのデータサイズを示す。このとき、入力xの符号ビットのデータサイズは、入力誤差Δxのデータサイズより小さい(Δb<Δxが成り立つ)。なお、メモリ量計算部51は、i層目がパラメータを使用しない層である場合、パラメータwのデータサイズの計算や、パラメータ誤差Δwのデータサイズの計算を省略できる。
メモリ量計算部51は、パラメータiを1加算する(S9)。メモリ量計算部51は、パラメータiがニューラルネットワークの層数n以上になるまでS6〜S9の処理を繰り返す。
パラメータiがニューラルネットワークの層数n以上になると、全体制御部50は、アクセラレータボード22を制御して、算出されたデータサイズの記憶領域をメモリ60に確保する(S11)。また、全体制御部50は、学習実行の回数をカウントするためのパラメータiterを1に初期化する(S12)。
全体制御部50は、記憶部20から入力ニューロンデータ40を所定の件数ごとに分けて読み出す。そして、全体制御部50は、読み出したデータや認識処理、学習処理に関する情報をアクセラレータボード22にオフロードし、ニューラルネットワークの学習を開始し(S13)、認識処理(S14)と学習処理(S21)とを行う。
認識処理(S14)において、認識制御部70は、層数をカウントするためのパラメータiを1に初期化する(S15)。認識制御部70は、マザーボード21からオフロードされたデータから未処理の1件分のデータを読み出す。そして、認識制御部70は、読み出したデータをニューロンデータとし、ニューロンデータに対して、ニューラルネットワークの順にi層目の演算を行い、演算結果をメモリ60に保持する(S16)。認識制御部70は、i層目がインプレイス処理の中間層であるか否か判断する(S17)。認識制御部70は、i層目がインプレイス処理の中間層でない場合(S17でNo)、演算結果をニューロンデータ用のメモリ領域に格納して処理をS19へ進める。認識制御部70は、i層目がインプレイス処理の中間層である場合(S17でYes)、入力ニューロンデータの符号ビットをバッファ領域に格納する(S18)。認識制御部70は、パラメータiの値を1加算する(S19)。認識制御部70は、パラメータiがニューラルネットワークの層数n以上になるまでS16〜S19の処理を繰り返す。パラメータiがニューラルネットワークの層数n以上になると、認識処理(S14)から学習処理(S21)へ移行する。
学習処理(S21)において、学習制御部71は、ニューラルネットワークの最終層の識別結果と正解との誤差を算出する(S22)。学習制御部71は、i層目がインプレイス処理の中間層であるか否か判断する(S23)。学習制御部71は、i層目がインプレイス処理の中間層である場合(S23でYes)、バッファ領域に格納された符号ビットを用いてニューロンデータの誤差の勾配を計算し、ニューロンデータ用のメモリ領域に上書きで格納する(S24)。学習制御部71は、i層目がインプレイス処理の中間層でない場合(S23でNo)、パラメータの誤差の勾配を計算してメモリ60に保持する(S25)。なお、i層目がパラメータを使用しない層である場合、学習制御部71は、S25の処理を省略してもよい。そして、学習制御部71は、ニューロンデータの誤差の勾配を計算してメモリ60に保持する(S26)。学習制御部71は、パラメータiの値を1減算する(S27)。学習制御部71は、パラメータiが0以下になるまでS23〜S27の処理を繰り返す。パラメータiが0以下になると、学習制御部71は、ニューラルネットワークの全層について、各層ごとに、パラメータの誤差の勾配に基づいて、パラメータを更新し(S29)、学習処理(S21)を終了する。
全体制御部50は、パラメータiterが学習実行の繰り返し回数max_iter以上になるまで、パラメータiterを1加算(S31)しながら、S13〜S29の処理を繰り返す。全体制御部50は、パラメータiterが学習実行の繰り返し回数max_iter以上になると、処理結果をスナップショット情報43およびパラメータ情報42に保存し(S32)、処理を終了する。
[効果]
上述してきたように、本実施例に係る情報処理装置10は、インプレイス処理が可能な中間層への入力ニューロンデータの符号を示す特性データを認識処理時にバッファ領域に格納し、その特性データを用いて学習処理時に中間層に関する誤差を計算する。すなわち、認識処理において、インプレイス処理が可能な中間層では、メモリ領域に格納された入力ニューロンデータを出力ニューロンデータで上書きせずに残しておく。そして、入力ニューロンデータの符号ビットに対応した容量で追加のバッファ領域を確保し、符号ビットを特性データとして追加のバッファ領域に格納しておく。学習処理において、インプレイス処理が可能な中間層では、入力ニューロンデータに特性データ(符号ビット)を掛けて出力ニューロンデータを生成してその中間層の前段からの入力ニューロンデータに関する誤差(gdata)を計算する。これにより、追加のメモリ使用量を抑制でき、メモリ使用を効率化できる。
また、本実施例に係る情報処理装置10は、追加のバッファ領域の記憶容量については、ニューロンデータの入力及び出力で共用可能なメモリ領域の記憶容量より小さい。これにより、追加のメモリ使用量を抑制でき、メモリ使用を効率化できる。
また、本実施例に係る情報処理装置10は、追加のバッファ領域に格納される特性データは、入力ニューロンデータの符号ビットを含む。これにより、追加のバッファ領域の記憶容量を、ニューロンデータの入力及び出力で共用可能なメモリ領域の記憶容量より小さくできる。
次に、実施例3について説明する。実施例3に係る情報処理装置10の構成は、図4に示した実施例1に係る情報処理装置10の構成と略同様であるため、主に異なる部分について説明する。
学習制御部71は、メモリ量計算部51により算出された各層のパラメータの誤差の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量を特定する。そして、学習制御部71は、学習処理を開始する際に、パラメータ誤差用の記憶領域として、特定した使用メモリ量に対応したメモリ領域を確保する。学習制御部71は、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、順に次の処理を行う。学習制御部71は、パラメータの誤差を算出してパラメータ誤差用の記憶領域に当該パラメータの誤差を上書して保持する。次に、学習制御部71は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する。次に、学習制御部71は、パラメータ誤差用の記憶領域に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する。
例えば、情報処理装置10では、図11に示すように、各中間層については、実施例1と同様の処理に加えて、追加的な制御を行う。追加的な制御は、パラメータを使用する層ごとに、パラメータの誤差を算出してパラメータ誤差用の記憶領域90に当該パラメータの誤差を上書して保持する制御を含む。図11は、実施例3におけるニューラルネットワークの計算の流れの一例を示す図である。
例えば、学習制御部71は、活性化関数層(ReLU3)の場合、数字の「15」に示すように、パラメータの誤差を算出し、算出したパラメータの誤差をメモリ60のパラメータ誤差用の記憶領域90に保持させる。次に、学習制御部71は、数字の「16」に示すように、ニューロンデータの誤差を算出してメモリ60の認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持させる。次に、学習制御部71は、数字の「17」に示すように、パラメータ誤差用の記憶領域90に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新させる。これにより、図7に示したニューラルネットワークの計算と比較して、各中間層では、ニューロンデータの誤差の勾配を記憶するメモリ領域をさらに削減できる。
本実施例の学習処理では、図11に破線で示したメモリ領域を削減でき、学習時におけるメモリ使用を効率化できる。これにより、例えば、アクセラレータボード22で一度に実行可能なバッチサイズが増加する。これにより、本実施例で説明した学習時における使用メモリ量の削減を適用した場合、入力ニューロンデータの学習にかかる時間を短縮できる。
[処理の流れ]
次に、情報処理装置10が実行する情報処理方法における処理の流れについて説明する。図12は、実施例3に係る情報処理方法の一例を示すフローチャートである。実施例3における情報処理方法は、実施例1における情報処理方法に対して、基本的に同様であるが、以下の点で異なる処理が行われる。
例えば、活性化関数層(ReLU1, ReLU2, ReLU3)がいずれもパラメータを使用せず、他の各中間層がパラメータを使用する場合について例示的に説明する。
メモリ量計算部51は、パラメータiがニューラルネットワークの層数n以上になるまでS5〜S9の処理を繰り返す。パラメータiがニューラルネットワークの層数n以上になると、全体制御部50は、算出されたデータサイズの記憶領域をメモリ60に確保する(S51)。この際、全体制御部50は、算出された各層のパラメータの誤差の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量を特定する。そして、全体制御部50は、パラメータ誤差用の記憶領域90として、特定した使用メモリ量に対応したメモリ領域を確保する。
学習処理(S21)において、学習制御部71は、i層目がインプレイス処理の中間層でない場合(S23でNo)、パラメータの誤差の勾配を計算してメモリ60のパラメータ誤差用の記憶領域90に保持する(S52)。なお、i層目がパラメータを使用しない層である場合、学習制御部71は、S52の処理を省略してもよい。そして、学習制御部71は、ニューロンデータの誤差の勾配を計算し、ニューラルネットワークのi層目のニューロンデータを記憶したメモリ60の記憶領域に上書き保存する(S53)。そして、学習制御部71は、パラメータ誤差用の記憶領域90に保持されたパラメータの誤差を用いて認識処理にて保持したi層目のパラメータを更新する(S54)。
[効果]
上述してきたように、本実施例に係る情報処理装置10は、ニューラルネットワークの各層のパラメータの誤差の使用メモリ量を計算する。情報処理装置10は、算出された各層の使用メモリ量のうち、使用メモリ量の最も大きい層の使用メモリ量に対応したメモリ領域を確保する。情報処理装置10は、学習処理において、ニューロンデータおよびパラメータがメモリ領域に保持される層については、層ごとに、以下の処理を順に行うように制御を行う。最初に、情報処理装置10は、パラメータの誤差を算出して確保したメモリ領域に当該パラメータの誤差を上書して保持する。次に、情報処理装置10は、ニューロンデータの誤差を算出して認識処理のニューロンデータを保持するメモリ領域に当該ニューロンデータの誤差を上書して保持する。次に、情報処理装置10は、確保したメモリ領域に保持されたパラメータの誤差を用いて認識処理にて保持したパラメータを更新する。これにより、情報処理装置10は、学習時における使用メモリ量をより削減できる。
なお、上記各実施例では、ニューラルネットワークにより画像に写った識別対象を識別する場合を例示した。しかしながら、これらに限定されるものではない。例えば、識別対象は、音声など、ニューラルネットワークが識別対象とするものであれば何れであってもよい。
また、上記各実施例では、ニューラルネットワークとして、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)を用いた場合を例示した。しかしながら、これらに限定されるものではない。例えば、ニューラルネットワークは、RNN(Recurrent Neural Network)などの時系列を学習・認識可能なニューラルネットワークであってもよい。RNNは、CNNの拡張であり、CNNと同じく誤差逆伝播法を行うため、本実施例と同様の処理を適用できる。
また、上記各実施例では、1台の情報処理装置10で認識処理および学習処理を実行する場合を例示した。しかしながら、これらに限定されるものではない。例えば、複数台の情報処理装置10により認識処理および学習処理を実行する情報処理システムとして構成してもよい。例えば、入力ニューロンデータをミニバッチ法で処理する場合、次のように処理してもよい。すなわち、情報処理システムは、入力ニューロンデータをM件ごとに分けて、別な情報処理装置10で認識処理および学習処理を実行し、それぞれで算出されたパラメータの誤差を収集してパラメータを更新するようにしてもよい。
また、上記各実施例では、マザーボード21の演算部31にメモリ量計算部51を設けた場合を例示した。しかしながら、これらに限定されるものではない。例えば、アクセラレータボード22の演算部61にメモリ量計算部51を設けてもよい。そして、アクセラレータボード22の演算部61のメモリ量計算部51が、ニューラルネットワークの各層で、ニューロンデータおよびパラメータの記憶に使用される使用メモリ量を算出してもよい。
また、上記各実施例では、認識処理の開始の前に、認識処理と学習処理で使用する使用メモリ量を計算する場合を例示した。しかしながら、これらに限定されるものではない。例えば、認識処理の開始の前に、認識処理で使用する使用メモリ量を計算し、認識処理の終了後、学習処理の開始の前に、学習処理で使用する使用メモリ量を計算してもよい。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71の各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
[情報処理プログラム]
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、情報処理プログラムを実行するコンピュータシステムの一例を説明する。図13は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
図13に示すように、コンピュータ400は、CPU(Central Processing Unit)410、HDD(Hard Disk Drive)420、RAM(Random Access Memory)440を有する。これら400〜440の各部は、バス500を介して接続される。
HDD420には上記の全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71と同様の機能を発揮する情報処理プログラム420Aが予め記憶される。なお、情報処理プログラム420Aについては、適宜分離してもよい。
また、HDD420は、各種情報を記憶する。例えば、HDD420は、記憶部20と同様に、OSや各種プログラム、各種情報を記憶する。
そして、CPU410が、情報処理プログラム420AをHDD420から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、情報処理プログラム420Aは、全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71と同様の動作を実行する。
なお、上記した情報処理プログラム420Aについては、必ずしも最初からHDD420に記憶させることを要しない。また、例えば、情報処理プログラム420Aは、コンピュータ400に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に記憶させてもよい。そして、コンピュータ400がこれらからプログラムを読み出して実行するようにしてもよい。
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ400に接続される「他のコンピュータ(又はサーバ)」などにプログラムを記憶させておく。そして、コンピュータ400がこれらからプログラムを読み出して実行するようにしてもよい。