以下、本発明の実施形態について図面を参照して説明する。まず、本発明の学習方法の概略を説明する。図1(a)は、入力層と出力層との間に1つ以上の中間層を含むニューラルネットワークにおける一般的な学習方法およびそのための回路構成の例を示す説明図であり、図1(b)は、本発明による学習方法およびそのための回路構成の例を示す説明図である。
図1(a)に示す例では、汎用用途の学習アルゴリズムに対応すべく、大規模学習回路90を用いて、所定の判別モデルであるニューラルネットワーク全体を学習する。
なお、図1では、回路に付した吹き出しに、ニューラルネットワークの学習過程における処理の方向およびその範囲を模式的に示している。吹き出し内において、符号51(図中の丸)はニューラルネットワークにおけるニューロンに相当するユニットを表す。また、符号52(図中のユニット間を結ぶ線)は、ユニット間結合を表す。また、符号53(図中の右向きの太線矢印)は、推論処理およびその範囲を表す。また、符号54(図中の左向きの太線矢印)は、パラメタ更新処理およびその範囲を表す。なお、図1では、各ユニットへの入力が前段の層のユニットの出力となるフィードフォワード型のニューラルネットワークの例を示しているが、各ユニットへの入力はこれに限らない。例えば、時系列情報を保持している場合には、リカレント型のニューラルネットワークのように、各ユニットへの入力に、前の時刻における前段の層のユニットの出力を含めることも可能である。なお、そのような場合も、推論処理の方向は、入力層から出力層へと向かう方向(順方向)であるとみなされる。このように入力層から所定の順番で行われる推論処理は「順伝搬」とも呼ばれる。一方、パラメタ更新処理の方向は、特に限定されない。図中のパラメタ更新処理のように、出力層から入力層へと向かう方向(逆方向)であってもよい。なお、図中のパラメタ更新処理の方向は、誤差逆伝搬法の例であるが、パラメタ更新処理は誤差逆伝搬法に限定されない。例えば、パラメタ更新処理がSTDP(Spike Timing Dependent Plasticity)等であってもよい。
ニューラルネットワークに限らず、深層学習におけるモデルの学習方法の例としては、次のような学習方法が挙げられる。まず、入力層に学習用データを入力した後、出力層までの各層で順方向に各ユニットの出力を計算する推論処理を行う(順伝搬:図中の矢印53参照)。次いで、出力層からの出力(最終出力)と学習用データで示される入力と出力の関係等とから算出される誤差に基づいて、その誤差を最小化するように、出力層から第1層までの各層を逆方向に辿って、層内の各ユニットの出力を計算するためのパラメタを更新するパラメタ更新処理を行う(逆伝搬:図中の矢印54参照)。
図1(a)に示すように、モデル全体を学習対象とした場合、パラメタ更新処理で、入力層より後段の全ての層(第1層~第n層)において層内の各ユニットの出力を計算するためのパラメタ(例えば、層内の各ユニットと他の層のユニットを結合するユニット結合の重み等)を更新する。このようなパラメタ更新処理を、例えば学習用データを替えながら複数回繰り返すことにより、高い認識率を有する学習済みモデルを生成できる。図1(a)では、そのような学習を行う演算回路の実現例として、上記の推論処理とパラメタ更新処理とを高い演算精度で行う大規模学習回路90が示されている。しかし、推論処理やパラメタ更新処理の演算精度が高いほど、またその処理の計算範囲が広いほど、誤差関数の展開項数が増えて回路が大規模化するため、消費電力が非常に増大する。
一方、本発明では、図1(b)に示すように、モデルの一部のみを学習対象とする。なお、ここでいう学習は、上記と同様、より実際の学習処理である、パラメタ更新処理を指す。モデルの一部のみを学習対象とした場合、順伝搬までは上記と同様に行う。その上で、出力層からの出力(最終出力)と学習用データで示される入力と出力の関係等とから算出される誤差に基づいて、指定されたユニット(例えば、出力層である第n層から第k層までの各層内のユニット)についてのみ、当該ユニットの出力を計算するためのパラメタ(例えば、他ユニットとの結合にかかる重み等)を更新するパラメタ更新処理を行う。
図1(b)では、そのような学習を行う演算回路10の実現例として、高い演算精度で指定された一部のユニットのパラメタ更新処理を行う高精度演算回路12と、高精度演算回路12よりも低い演算精度で少なくとも指定されたユニットの推論処理を行う低精度演算回路11とを組み合わせた例が示されている。このような2つの異なる演算精度を有する演算回路を備えた上で、高精度演算回路12に対しては、例えば、高精度演算が必要な一部のユニットについてパラメタ更新処理を行わせ、低精度演算回路11に対しては、高精度演算が必要でない他の処理を行わせる。このようにして1つの学習用データに対する学習演算の中で、推論処理の少なくとも一部を低い演算精度で実施し、かつパラメタ更新処理の少なくとも一部を高い演算精度で実施するとともに、高い演算精度で実施するパラメタ更新処理の範囲を最適化することで、コンピュータ資源を効率化(低消費電力等)しつつ、十分な演算精度を確保する。
なお、図1(b)では出力側の一部の層をパラメタの更新を行う範囲(実際の学習範囲)とする例を示したが、パラメタの更新範囲は出力側の層に限られず、例えば、第1層~第n層のうちの奇数層や偶数層などといった個別的な指定も可能である。また、図1(b)では、パラメタ更新処理自体の範囲を制限する例を示したが、パラメタ更新処理自体の範囲は制限せず、高演算精度で実施するパラメタ更新処理の範囲を制限してもよい。すなわち、全てのユニットのうちの一部のユニットについてのみ高演算精度でパラメタ更新処理を行い、それ以外のユニットについては低い演算精度でパラメタ更新処理を行うことも可能である。なお、パラメタ更新処理の対象として、高精度演算により実施されるユニットと、低精度演算により実施されるユニットと、実施されないユニット(その際、パラメタは固定される)の3種類に分けることも可能である。
また、高精度演算と低精度演算の対象とする処理の分け方の他の例としては、全てのユニットの推論処理を低精度演算で行い、かつ全てのユニットのパラメタ更新処理を高精度演算で行うことも可能である。また、例えば、全てのユニットの推論処理を低精度演算で行い、かつ一部のユニットのパラメタ更新処理を高精度演算で行うことも可能である。その場合、高精度演算の対象外とされた残りの一部のユニットについては、低精度演算でパラメタ更新処理を行ってもよいし、パラメタ更新処理の対象外としてもよい。また、例えば、一部のユニットについては推論処理およびパラメタ更新処理を低精度演算で行い、残りの一部のユニットについては推論処理およびパラメタ更新処理を高精度演算で行うことも可能である。
換言すると、本発明による学習方法は、学習装置が、相対的に低い演算精度を有する低精度演算回路と、相対的に高い演算精度を有する高精度演算回路とを備え、低精度演算回路に少なくとも一部のユニットの推論処理を行わせ、かつ高精度演算回路に少なくとも一部のユニットのパラメタ更新処理を行わせるものであればよい。その上で、残りの一部のユニットの推論処理については低精度演算回路で行ってもよいし、高精度演算回路で行ってもよい。また、上記の残りの一部のユニットのパラメタ更新処理については低精度演算回路で行ってもよいし、処理そのものを省略してもよい。どのユニットについて高精度の推論処理の対象とするか低精度の推論処理の対象とするかや、どのユニットについて高精度のパラメタ更新処理の対象とするか低精度のパラメタ更新処理の対象とするかもしくは処理対象外とするか等については、特に限定されない。
なお、上記は、異なる演算精度を有する2つの演算回路を利用する場合の例であるが、例えば、異なる演算精度を有する2以上の演算回路を利用する場合も基本的に同様である。すなわち、ある一部のユニットの推論処理を行う演算回路の演算精度に対して、より高い演算精度を有する演算回路にてある一部のユニットのパラメタ更新処理が行われる構成であれば、他の一部のユニットの推論処理およびパラメタ更新処理が具体的にどの演算回路で行われるかまたは処理自体が行われないかは特に限定されない。
図2は、1つのユニットに着目したときの当該ユニットの入出力および他ユニットとの結合の例を示す説明図である。図2(a)に1つのユニットの入出力の例、(b)に2層に並べられたユニット間の結合の例を示す。図2(a)に示すように、1つのユニットに対して4つの入力(x1~x4)と1つの出力(z)があった場合に、当該ユニットの動作は例えば、式(1A)のように表される。ここで、f()は活性化関数を表している。
z=f(u) ・・・(1A)
ただし、u=a+w1x1+w2x2+w3x3+w4x4 ・・・(1B)
式(1B)において、aは切片、w1~w4は各入力(x1~x4)に対応した重み等のパラメタを表す。
一方、図2(b)に示すように、2層に並べられた層間で各ユニットが結合されている場合、後段の層に着目すると、当該層内の各ユニットへの入力(それぞれx1~x4)に対する当該各ユニットの出力(z1~z4)は、例えば、次のように表される。なお、iは同一層内のユニットの識別子(本例ではi=1~3)である。
zi=f(ui) ・・・(2A)
ただし、ui=a+wi,1x1+wi,2x2+wi,3x3+wi,4x4 ・・・(2B)
以下では、式(2B)を単純化して、zi=Σwi,k*xkと記す場合がある。なお、切片aは省略した。なお、切片aを値1の定数項の係数(パラメタの1つ)とみなすことも可能である。ここで、kは当該層における各ユニットへの入力、より具体的にはその入力を行う他のユニットの識別子を表す。このとき、当該層における各ユニットへの入力が前段の層の各ユニットの出力のみである場合には、上述の簡略式を、ui
(L)=Σwi,k
(L)*zk
(L-1)と記すことも可能である。なお、Lは層の識別子を表す。これらの式において、wi,kが、当該層(第L層)における各ユニットiのパラメタ、より具体的には、各ユニットiと他のユニットkとの結合(ユニット間結合)の重みに相当する。以下では、ユニットを特に区別せず、ユニットの出力値を決める関数(活性化関数)を簡略化して、z=Σw*xと記す場合がある。
上記の例において、あるユニットについて入力xから出力zを求める計算が、当該ユニットにおける推論処理に相当する。このとき、パラメタwは固定される。一方、あるユニットについてパラメタwを求める計算が当該ユニットにおけるパラメタ更新処理に相当する。
[学習装置]
図3は、第1の実施形態の学習装置の構成例を示すブロック図である。図3に示す学習装置100は、学習前モデル記憶部101と、学習用データ記憶部102と、学習処理部106と、学習後モデル記憶部107とを備える。
学習前モデル記憶部101は、学習前のモデルの情報を記憶する。学習前のモデルの情報には、パラメタの初期値が含まれていてもよい。
学習用データ記憶部102は、モデルの学習に用いるデータである学習用データを記憶する。なお、学習用データの形式は特に問わない。
学習処理部106は、学習用データ記憶部102に記憶された学習用データを用いて、学習前モデル記憶部101に記憶されているモデルの学習を行う。
本実施形態の学習処理部106は、少なくとも高効率推論処理部103aと高精度パラメタ更新処理部104bと制御部105とを含む。なお、学習処理部106は、図3に示すように、さらに高精度推論処理部103bと高効率パラメタ更新処理部104aを含んでいてもよい。
高効率推論処理部103aは、指定された層またはユニットを対象とする推論処理を、第1の演算精度で行う。
高精度パラメタ更新処理部104bは、指定された層、ユニットまたはパラメタを対象とするパラメタ更新処理を、第1の演算精度よりも高い演算精度の第2の演算精度で行う。
制御部105は、学習処理を実施する各処理部(本例では、高効率推論処理部103a、高精度推論処理部103b、高効率パラメタ更新処理部104aおよび高精度パラメタ更新処理部104b)を制御して、必要な学習処理を実施させる。制御部105は、より具体的には、学習前のモデルおよび学習用データの読み込み、学習処理を実施する各処理部へ演算の指示を行うことによる学習処理にかかる演算精度の切替制御を行う。演算の指示には、演算対象とするユニットの指定や演算に必要なパラメータの入力が含まれる。
学習後モデル記憶部107は、学習後のモデルの情報を記憶する。学習後のモデルの情報には、各ユニットの更新後のパラメタの値が含まれていてもよい。
また、図4は、学習処理部106のハードウエア構成の例を示す構成図である。図4に示すように、学習処理部106は、低精度演算回路11と、高精度演算回路12と、メモリ13と、制御装置14とがそれぞれバス15を介して接続された演算処理装置等により実現されてもよい。なお、高精度演算回路12は、低精度演算回路11よりも高い演算精度で演算が可能な回路であればよい。
その場合において、高効率推論処理部103aおよび高効率パラメタ更新処理部104aは、例えば、低精度演算回路11により実現されてもよい。また、高精度推論処理部103bおよび高精度パラメタ更新処理部104bは、例えば、高精度演算回路12により実現されてもよい。また、制御部105は、例えば、制御装置14により実現されてもよい。
本例において、低精度演算回路11と高精度演算回路12はそれぞれバス15を介して接続されており、バス15を介してお互いの演算結果を通知するなどのデータのやり取りを行うことができる。なお、バス15にはさらにメモリ13が接続されていてもよく、その場合、低精度演算回路11と高精度演算回路12がそれぞれメモリ13を介してデータのやりとりを行うことも可能である。その場合、メモリ13は通信路の一部として扱われる。なお、メモリ13は、On-chip memoryとして、低精度演算回路11および高精度演算回路12と同一のチップ上に実装されてもよい。すなわち、低精度演算回路11、高精度演算回路12およびメモリ13が、チップ内で内部接続されていてもよい。また、メモリ13は、Off-chip memoryとして、低精度演算回路11や高精度演算回路12と同一のチップ上に実装されなくてもよい。すなわち、外部メモリインタフェースを介して外部接続されていてもよい。
本実施形態では、学習処理(特に、推論処理およびパラメタ更新処理)を実施する処理部が実際に演算に用いる数字データの値域の広さ・細かさの尺度(より具体的には、その処理部を実現する演算回路におけるビット幅および小数点の取り扱い等で定まる数字データの値域の広さ・細かさの尺度)を、「精度」または「演算精度」と呼ぶ。低精度演算回路11における演算精度である低演算精度と高精度演算回路12における演算精度である高演算精度の組み合わせの例としては、例えば、図5に示すような組み合わせが挙げられる。図5は、低精度演算回路11における演算精度である低演算精度と高精度演算回路12における演算精度である高演算精度の組み合わせの例を示す説明図である。
なお、低精度演算回路11における演算精度と高精度演算回路12における演算精度の組み合わせは、図5に示すものに限定されない。例えば、低精度演算回路11における演算精度(低演算精度)を、固定少数点の{1,2,8,16}ビットのいずれかまたは整数の{1,2,8,16}ビットのいずれかとし、高精度演算回路12における演算精度(高演算精度)を、固定小数点の{2,8,16,32}ビット、浮動小数点の{9,16,32}ビットのいずれかまたはpower of 2の浮動小数点の{8,16,24,32}ビットのいずれかとしてもよい。ただし、高演算精度は、低演算精度に比べて、高精度(例えば、数字データの値域がより広い、数値データの値域がより細かいなど、表現可能な有効桁数がより大きい)であるものとする。
また、図6は、学習装置100にかかるコンピュータの構成例を示す概略ブロック図である。コンピュータ1000は、プロセッサ1008と、主記憶装置1002と、補助記憶装置1003と、インタフェース1004と、ディスプレイ装置1005と、入力デバイス1006とを備える。また、プロセッサ1008は、CPU1001や、GPU1007などの各種演算・処理装置を含んでいてもよい。
学習装置100は、例えば、図6に示すようなコンピュータ1000に実装されてもよい。その場合、学習装置100(特に、制御部105)の動作は、プログラムの形式で補助記憶装置1003に記憶されていてもよい。CPU1001は、プログラムを補助記憶装置1003から読み出して主記憶装置1002に展開し、そのプログラムに従って学習装置100における所定の処理を実施する。なお、CPU1001は、プログラムに従って動作する情報処理装置の一例であり、コンピュータ1000は、CPU(Central Processing Unit)以外にも、例えば、MPU(Micro Processing Unit)やMCU(Memory Control Unit)やGPU(Graphics Processing Unit)を備えていてもよい。
図6では、コンピュータ1000が、CPU1001に加えて、上記の低精度演算回路11および高精度演算回路12を実装するGPU1007をさらに備える例が示されているが、低精度演算回路11および高精度演算回路12が他のプロセッサや演算装置(後述するMAC(multiplier-accumulator)や乗算器ツリーやALU(Arthmetic Logic Unit)アレイ等)により実装される場合は本例の限りではなく、当該他のプロセッサや演算装置を備えていればよい。また、低精度演算回路11および高精度演算回路12は異なるチップに実装されてもよく、具体的なチップ構成は特に限定されない。
補助記憶装置1003は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例として、インタフェース1004を介して接続される磁気ディスク、光磁気ディスク、CD-ROM、DVD-ROM、半導体メモリ等が挙げられる。また、このプログラムが通信回線によってコンピュータ1000に配信される場合、配信を受けたコンピュータは1000がそのプログラムを主記憶装置1002に展開し、学習装置100における所定の処理を実行してもよい。
また、プログラムは、学習装置100における所定の処理の一部を実現するためのものであってもよい。さらに、プログラムは、補助記憶装置1003に既に記憶されている他のプログラムとの組み合わせで学習装置100における所定の処理を実現する差分プログラムであってもよい。
インタフェース1004は、他の装置との間で情報の送受信を行う。また、ディスプレイ装置1005は、ユーザに情報を提示する。また、入力デバイス1006は、ユーザからの情報の入力を受け付ける。
また、学習装置100における処理内容によっては、コンピュータ1000の一部の要素は省略可能である。例えば、コンピュータ1000がユーザに情報を提示しないのであれば、ディスプレイ装置1005は省略可能である。例えば、コンピュータ1000がユーザから情報入力を受け付けないのであれば、入力デバイス1006は省略可能である。
また、上記の各構成要素の一部または全部は、汎用または専用の回路(Circuitry)、プロセッサ等やこれらの組み合わせによって実施される。これらは単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。また、上記の各構成要素の一部又は全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
上記の各構成要素の一部又は全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
[回路構成]
次に、少なくとも高効率推論処理部103aの実装例とされる推論回路の構成をいくつか例示する。高効率推論処理部103aは、例えば、指定された層の各ユニットまたは指定されたユニットについて、当該ユニットへの入力を受け付けると、当該ユニットの出力を計算する推論処理を所定の低演算精度で行い、計算結果を出力してもよい。そのとき、高効率推論処理部103aは、ユニットの出力を計算する際に用いる入力の値および他の変数(重みや切片等のパラメタ)の値を入力として受け付けて、上記の処理を行ってもよい。以下、推論処理で行われる演算を推論演算という場合がある。
以下では、推論演算を行うための回路を「推論回路」と呼び、特に、高精度パラメタ更新処理部104bが行うパラメタ更新演算の演算精度よりも低い演算精度で推論演算を行うための回路を「高効率推論回路」と呼ぶ。このようにして、推論回路の演算精度をできるだけ低く、少なくとも高精度パラメタ更新処理部104bが行うパラメタ更新演算の演算精度よりも低くする(例えば、ビット幅を32ビットから16ビットにする、浮動小数点演算を固定少数点演算にする等)ことで、消費電力を低減する。なお、高効率推論回路と区別するために、高精度パラメタ更新処理部104bが行うパラメタ更新演算の演算精度と同じ演算精度で推論演算を行うための回路を「高精度推論回路」と呼ぶ場合がある。上述した高精度推論処理部(図示せず)は、そのような高精度推論回路により実現されてもよい。
以下に示す推論回路の構成は、推論演算が高精度で行われるか低精度で行われる回路かを問わず実現可能である。すなわち、高効率推論処理部103aと高精度推論処理部103bの違いが、当該処理部の動作を実装した演算回路において演算に用いる各変数、加算器、乗算器の精度のみであってもよい。
推論回路の最も単純な例は、乗算器と加算器を組み合わせた乗加算器(MAC)221を1つ備えた構成である(図7(a)の演算回路22a参照)。なお、符号21はバスを表している。
MAC221は、乗算器と、加算器と、3つの入力を保持する記憶素子と、1つの出力を保持する記憶素子とを含んでいてもよい(図7(b)参照)。図7(b)に示すMAC221は、3つの変数a,w,xを受け付けると、1つの出力変数z=a+w*xを計算する演算回路の例である。本例において、zがユニットの出力、a、wがパラメタ(推論処理では固定)、xがユニットの入力に相当する。このような構成において、当該回路の演算精度は、当該回路が含む乗算器や加算器のビット幅および小数点の取り扱い(浮動小数点か固定小数点か等)により決定される。例えば、高効率推論処理部103aが演算回路22aにより実現される場合、当該回路が含むMAC221における各変数(a,w,x,z)、加算器および乗算器による演算が低演算精度(第1の演算精度)に対応していればよい。このとき、当該回路における各変数、加算および乗算のすべてが同じ精度である必要はない(以下、同様)。例えば、各変数、加算および乗算のいずれかで用いられる精度が、高精度パラメタ更新処理部104bを実現する演算回路の各変数、加算および乗算のいずれかで用いられる精度よりも低ければよい。
図8~10は、推論演算用の演算回路(推論回路)の他の例を示す概略構成図である。推論回路は、例えば、図8に示す演算回路22bのように、複数のMAC221を並列に接続した構成(いわゆるGPUの構成)であってもよい。このような構成においても、当該回路の演算精度は、当該回路に含まれる乗算器や加算器のビット幅および小数点の取り扱い(浮動小数点か固定小数点か等)により決定される。
また、推論回路は、例えば図9に示す演算回路22cのように、メモリ層222を介して複数の乗加算ツリー223が並列に接続された構成であってもよい。図9に示す乗加算ツリー223は、4つの乗算器と2つの加算器と1つの加算器がツリー状に接続された構成の回路である。なお、図9に示す演算回路22cの一例は、非特許文献3にも開示されている。このような構成においても、当該回路の演算精度は、当該回路に含まれる乗算器や加算器のビット幅および小数点の取り扱い(浮動小数点か固定小数点か等)により決定される。
また、推論回路は、例えば図10に示す演算回路22dのように、メモリ層222を介して複数のALU224がアレイ状に接続された構成(シストリックアレイ構成)であってもよい。なお、図10に示す演算回路22dの一例は、非特許文献1にも開示されている。このような構成においても、当該回路の演算精度は、当該回路に含まれる乗算器や加算器のビット幅および小数点の取り扱い(浮動小数点か固定小数点か等)により決定される。
なお、例えば、高効率推論処理部103aが図8~図10に示した演算回路22b、演算回路22cまたは演算回路22dにより実現される場合、当該回路において演算に用いられる各変数、加算器または乗算器による演算が低演算精度(第1の演算精度)に対応していればよい。
一方、例えば、高精度推論処理部103bが演算回路22a,演算回路22b、演算回路22cまたは演算回路22dにより実現される場合、当該回路において演算に用いられる各変数、加算器または乗算器による演算が高演算精度(第2の演算精度)に対応していればよい。
次に、少なくとも高精度パラメタ更新処理部104bの実装例とされるパラメタ更新用回路の構成をいくつか例示する。高精度パラメタ更新処理部104bは、例えば、指定された層の各ユニットにおける各パラメタ、指定されたユニットにおける各パラメタまたは指定されたパラメタについて、当該パラメタを調整パラメータとして含む誤差関数などの目的関数の最適化問題を解いて該調整パラメータを更新するパラメタ更新処理を所定の高演算精度で行い、更新後の値を出力してもよい。そのとき、高精度パラメタ更新処理部104bは、最適化問題を解く際に用いる変数の値(更新前のパラメタの値を含みうる)をパラメータとして受け付けて、上記の処理を行ってもよい。以下、パラメタ更新処理で行われる演算をパラメタ更新演算という場合がある。
以下では、パラメタ更新演算を行うための回路を「パラメタ更新回路」と呼び、特に、高効率推論処理部103aが行う推論演算の演算精度よりも高い演算精度で思い学習演算を行うための回路を「高精度パラメタ更新回路」と呼ぶ。なお、高精度パラメタ更新回路と区別するために、高効率推論処理部103aが行う推論演算の演算精度と同じ演算精度でパラメタ更新演算を行うための回路を「高効率パラメタ更新回路」と呼ぶ場合がある。上述した高効率パラメタ更新処理部(図示せず)は、そのような高効率パラメタ更新回路により実現されてもよい。
以下に示すパラメタ更新回路の構成は、パラメタ更新演算が高精度で行われるか低精度で行われる回路かを問わず実現可能である。すなわち、高効率パラメタ更新処理部104aと高精度パラメタ更新処理部104bの違いが、当該処理部の動作を実装した演算回路において演算に用いる各変数、加算器または乗算器の精度のみであってもよい。
パラメタ更新回路の最も単純な例は、推論回路と同様、乗算器と加算器を組み合わせた乗加算器(MAC)221を1つ備えた構成である(図7(a)の演算回路22a,図7(b)のMAC221等参照)。また、パラメタ更新回路は、例えば、図8~10に示す演算回路22b、演算回路22c、演算回路22dによっても実現できる。すなわち、図7~図10に示す演算回路は、パラメタ更新演算用の演算回路の例でもある。
例えば、高精度パラメタ更新処理部104bが演算回路22a,演算回路22b、演算回路22cまたは演算回路22dにより実現される場合、当該回路において演算に用いられる各変数、加算器および乗算器による演算が高演算精度(第2の演算精度)に対応していればよい。このとき、各変数、加算および乗算のすべてが同じ精度である必要はなく、当該回路においてパラメタ更新演算に用いられる各変数、加算および乗算のいずれかの精度が、高効率推論処理部103aを実現する演算回路において推論演算に用いられる各変数、加算および乗算のいずれかの精度よりも高ければよい。
一方、例えば、高効率パラメタ更新処理部104aが演算回路22a,演算回路22b、演算回路22cまたは演算回路22dにより実現される場合、当該回路において演算に用いられる各変数、加算器および乗算器による演算が低演算精度(第1の演算精度)に対応していればよい。
[動作]
次に、本実施形態の学習装置100の動作を説明する。図11は、本実施形態の学習装置100の動作の例を示すフローチャートである。図11に示す動作は、例えば、制御部105による制御に基づいて実行される。
図11に示す例では、まず、制御部105が、学習前モデル記憶部101から学習前モデルを読み出すとともに、学習用データ記憶部102から学習用データを読み出す(ステップS11)。
次いで、制御部105は、必要に応じて高効率推論処理部103aおよび高精度推論処理部103bを制御して、第1層~第n層までの全ての層に含まれる各ユニットについて順に推論処理を実施する(ステップS12:順伝搬)。このとき、制御部105は、少なくとも一部のユニットの推論処理を高効率推論処理部103aに実施させる。なお、制御部105は、全てのユニットの推論処理を高効率推論処理部103aに実施させてもよいし、一部のユニットの推論処理を高効率推論処理部103aに実施させてもよい。順伝搬で、高効率推論処理部103aに一部のユニットの推論処理を実施させる場合、制御部105は、残りのユニットの推論処理を高精度推論処理部103bに実施させてもよい。
高効率推論処理部103aおよび高精度推論処理部103bは、制御部105からの指示に応じて、指定された層またはユニットの推論処理を実施する。
次いで、制御部105は、必要に応じて高効率パラメタ更新処理部104aおよび高精度パラメタ更新処理部104bを制御して、各層のユニットの出力を計算するためのパラメタのうちの所定のパラメタについて、パラメタ更新処理を実施する(ステップS13:パラメタ更新処理)。このとき、制御部105は、少なくとも一部のパラメタについてパラメタ更新処理を高精度パラメタ更新処理部104bに実施させる。なお、制御部105は、全てのパラメタのパラメタ更新処理を高精度パラメタ更新処理部104bに実施させてもよいし、一部のパラメタのパラメタ更新処理を高精度パラメタ更新処理部104bに実施させてもよい。パラメタ更新処理で、高精度パラメタ更新処理部104bに一部のパラメタのパラメタ更新処理のみを実施させる場合、制御部105は、残りのパラメタの全てのパラメタ更新処理を高効率パラメタ更新処理部104aに実施させてもよいし、残りのパラメタの一部のパラメタ更新処理を高効率パラメタ更新処理部104aに実施させてもよい。なお、後者の場合、一部のパラメタについてはパラメタ更新処理自体が省略される。
高効率パラメタ更新処理部104aおよび高精度パラメタ更新処理部104bは、制御部105からの指示に応じて、指定されたパラメタのパラメタ更新処理を実施する。
最後に、制御部105は、ステップS13で更新されたパラメタを含む学習済みモデルを学習後モデル記憶部107に記憶する(ステップS14)。
上記動作の他のバリエーションとして、例えば、複数の学習用データが保持されている場合には、学習用データの数分、ステップS11~ステップS14の動作を繰り返してもよい。なお、その場合、1つ前の学習用データに対する学習結果としての学習済みモデルが、次の学習用データに対する学習の学習前モデルとして使用される。
また、例えば、複数の学習用データが保持されている場合において、学習用データの数分、ステップS12~ステップS13の動作を繰り返し行うことも可能である。
さらには、学習用データの数に関わらず、同じ学習用データを使って上記のステップS11~ステップS14の繰り返し動作またはステップS12~ステップS14の繰り返し動作を、複数回繰り返すことも可能である(epoch処理)。
また、ステップS12の順伝搬で、例えば、低演算精度で推論処理を行う範囲(低精度推論範囲)を、予め定めておくだけでなく、ユーザから指定できるようにしたり、学習用データ毎やepoch処理の繰り返し毎に変化させることも可能である。
また、ステップS13のパラメタ更新処理で、例えば、高演算精度でパラメタ更新処理を行う範囲(高精度パラメタ更新範囲)を全結合層のみに限定してもよい。また、例えば、高精度パラメタ更新範囲、低演算精度でパラメタ更新処理を行う範囲(低精度パラメタ更新範囲)、パラメタ更新処理を行わない範囲を、予め定めておくだけでなく、ユーザから指定できるようにしたり、処理の度(学習用データ毎やepoch処理の繰り返し毎)に変化させることも可能である。
また、図12および図13は、本実施形態の学習装置100のより具体的な動作例を示すフローチャートである。なお、図12および図13に示す動作例は、学習装置100を構成するハードウエアに着目して各ステップの動作を例示した例である。なお、ハードウエア構成は図4に示す構成とした。
図12に示す例では、まず高効率推論処理部103aとしての低精度演算回路11が、制御部105としての制御装置14からの指示に応じて、学習用データ・学習前モデルをメモリ13から読み出す(ステップS111)。
次いで、該低精度演算回路11が、順伝搬の一部(本例では第1層~第(k-1)層までの各層に含まれる各ユニットの出力を計算する推論演算)を低演算精度で実施する(ステップS112)。そして、低精度演算回路11は、ステップS112の演算結果(本例では、第k-1層の各ユニットからの出力)をメモリ13に保存する(ステップS113)。
なお、本例では、学習前モデルは、入力層を第0層、出力層を第n層として、第0層から第n層までのn+1層の多層構造のニューラルネットワークであるとする。また、上記の第(k-1)層は、入力層(第0層)よりも後段でかつ出力層(第n層)よりも前段の中間層とする。すなわち、kは、0<k-1<nを満たす整数とする。
次いで、高精度推論処理部103bとしての高精度演算回路12が、制御装置14の指示に応じて、ステップS113で保存された演算結果(第k-1層の各ユニットからの出力)を読み出す(ステップS211)。
そして、該高精度演算回路12は、順伝搬の続き(本例では、第k層~第n層までの各層に含まれる各ユニットの出力を計算する推論演算)を高演算精度で実施する(ステップS212)。
次いで、高精度パラメタ更新処理部104bとしての高精度演算回路12が、制御装置14の指示に応じて、一部の層(本例では第k層~第n層までの各層)に含まれる各ユニットにおけるパラメタ(他ユニットとの結合重み等)を更新するためのパラメタ更新演算を高演算精度で実施する(ステップS212)。そして、高精度演算回路12は、ステップS212の演算結果(本例では、第k層~第n層の各層に含まれる各ユニットにおける更新後のパラメタ)をメモリ13に保存する(ステップS213)。
なお、ステップS213で演算結果として保存された更新後のパラメタが、上述した学習済みモデルに相当する。
図12に示す例は、まず低精度演算回路11が、高効率推論処理部103aとして、一部の層について推論処理を行った上で、高精度演算回路12が、高精度パラメタ更新処理部104bとして、残りの層について推論処理とパラメタ更新処理とを行う動作例である。
また、図13に示す例では、まず高効率推論処理部103aとしての低精度演算回路11が、制御部105としての制御装置14からの指示に応じて、学習用データ・学習前モデルをメモリ13から読み出す(ステップS121)。
次いで、該低精度演算回路11が、順伝搬(本例では第1層~第n層までの各層に含まれる各ユニットの出力を計算する推論演算)を低演算精度で実施する(ステップS122)。そして、低精度演算回路11は、ステップS122の演算結果(本例では、出力層である第n層のユニットからの出力)をメモリ13に保存する(ステップS123)。
なお、本例でも、学習前モデルは、入力層を第0層、出力層を第n層として、第0層から第n層までのn+1層の多層構造のニューラルネットワークであるとする。
次いで、高精度推論処理部103bとしての高精度演算回路12が、制御装置14の指示に応じて、ステップS123で保存された演算結果(出力層である第n層のユニットからの出力)を読み出す(ステップS221)。
次いで、該高精度演算回路12は、制御装置14の指示に応じて、一部の層(本例では第k層~第n層までの各層)に含まれる各ユニットにおけるパラメタ(他ユニットとの結合重み等)を更新するためのパラメタ更新演算を高演算精度で実施する(ステップS222)。そして、高精度演算回路12は、ステップS222の演算結果(本例では、第k層~第n層の各層に含まれる各ユニットにおける更新後のパラメタ)をメモリ13に保存する(ステップS223)。
なお、ステップS223で演算結果として保存された更新後のパラメタが、上述した学習済みモデルに相当する。
図13に示す例は、低精度演算回路11が、高効率推論処理部103aとして、全ての層について推論処理を行った上で、高精度演算回路12が、高精度パラメタ更新処理部104bとして、一部の層についてパラメタ更新処理を行う動作例である。
なお、図12のステップS213や図13のステップS223の後に、さらに、低精度演算回路11が、高効率パラメタ更新処理部104aとして、図14に示すような動作を行うことも可能である。
すなわち、低精度演算回路11が、高効率パラメタ更新処理部104aとして、メモリ13に保存されていた第k層~第n層の各層に含まれる各ユニットにおける更新後のパラメタを読み出す(ステップS231)。
次いで、該低精度演算回路11が、残りの層(本例では、第1層~第(k-1)層までの各層)に含まれる各ユニットにおけるパラメタ(他ユニットとの結合重み等)を更新するためのパラメタ更新演算を低演算精度で実施する(ステップS232)。そして、低精度演算回路11は、ステップS232の演算結果(本例では、第1層~第(k-1)層の各層に含まれる各ユニットにおける更新後のパラメタ)をメモリ13に保存する(ステップS233)。
本例の場合、ステップS213またはステップS223で演算結果として保存された更新後のパラメタとステップS233で演算結果として保存された更新後のパラメタとが、上述した学習済みモデルに相当する。
なお、図12~図14に示す動作は、1つの学習用データに対する学習処理の例である。したがって、複数の学習用データが保持されている場合には、学習用データの数分、上記動作や上記動作に含まれる各演算ステップを繰り返すことも可能である。また、学習用データの数に関わらず、同じ学習用データを使って上記動作または上記動作に含まれる各演算ステップを、複数回繰り返すことも可能である(epoch処理)。また、上記動作において高精度パラメタ更新範囲とされる第k層~第n層は全結合層であってもよいし、kをユーザが指定したり、処理の度に変化させることも可能である。
以上のように、本実施形態によれば、学習アルゴリズムの演算処理を、推論処理とパラメタ更新処理とに分け、推論処理の少なくとも一部を低演算精度で演算し、かつパラメタ更新処理の少なくとも一部を高演算精度で演算することで、高演算精度を必要とする演算部分を最適化できるので、消費電力を低減しつつ十分な精度での学習が可能になる。
次に、本発明の概要を説明する。図15は、本発明の学習装置の概要を示すブロック図である。図15に示す学習装置500は、層状に結合された2以上のユニットで構成される所定の判別モデルを学習する学習装置であって、学習手段501を備える。
学習手段501(例えば、学習処理部106)は、学習用データが入力されると、前記判別モデルの各ユニットの出力を所定の順番で計算する推論処理と、前記推論処理の結果に基づいて、前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理とを行う。
また、学習手段501は、高効率推論手段502と、高精度パラメタ更新手段503とを含む。
高効率推論手段502(例えば、高効率推論処理部103a)は、推論処理において行われる演算のうちの指定された演算を、第1の演算精度で実施する。
高精度パラメタ更新手段503(例えば、高精度パラメタ更新処理部104b)は、パラメタ更新処理において行われる演算のうちの指定された演算を、前記第1の演算精度よりも高い第2の演算精度で実施する。
このような構成により、高演算精度を必要とする演算部分を最適化することで、学習時における演算精度の確保と演算に必要なコンピュータ資源の効率化(ひいては低消費電力化)とを両立できる。
また、図16は、本発明の学習装置の他の構成を示す構成図である。図16に示す学習装置600は、低精度演算回路601と、高精度演算回路602と、制御装置603とを備える。
低精度演算回路601(例えば、低精度演算回路11)は、相対的に低い演算精度で所定の演算を行う。
高精度演算回路602(例えば、高精度演算回路12)は、相対的に高い演算精度で所定の演算を行う。
制御装置603(例えば、制御装置14)は、学習用データが入力されると、前記判別モデルの各ユニットの出力を所定の順番で計算する推論処理において行われる少なくとも一部の演算を前記低精度演算回路に実行させ、かつ前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理において行われる少なくとも一部の演算を前記高精度演算回路に実行させる。
このような構成によっても、高演算精度を必要とする演算部分を最適化することで、学習時における演算精度の確保と演算に必要なコンピュータ資源の効率化(ひいては低消費電力化)とを両立できる。
なお、上記の実施形態は以下の付記のようにも記載できる。
(付記1)層状に結合された2以上のユニットで構成される所定の判別モデルを学習する学習装置であって、学習用データが入力されると、前記判別モデルの各ユニットの出力を所定の順番で計算する推論処理と、前記推論処理の結果に基づいて、前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理とを行う学習手段を備え、前記学習手段は、前記推論処理において行われる演算のうちの指定された演算を、第1の演算精度で実施する高効率推論手段と、前記パラメタ更新処理において行われる演算のうちの指定された演算を、前記第1の演算精度よりも高い第2の演算精度で実施する高精度パラメタ更新手段とを含むことを特徴とする学習装置。
(付記2)前記高精度パラメタ更新手段は、前記パラメタ更新処理において行われる演算のうち、指定された層に属するユニットまたは指定されたユニットの出力を計算する際に用いられるパラメタを更新するための演算のみを、前記第2の演算精度で実施する付記1に記載の学習装置。
(付記3)前記高効率推論手段は、前記推論処理において行われるすべての演算を、前記第1の演算精度で実施する付記1または付記2に記載の学習装置。
(付記4)前記学習手段は、前記パラメタ更新処理において行われる演算のうちの指定された演算を、前記第1の演算精度で実施する高効率パラメタ更新手段をさらに含み、前記高精度パラメタ更新手段は、前記パラメタ更新処理において行われる演算のうち、指定された層に属するユニットまたは指定されたユニットの出力を計算する際に用いられるパラメタを更新するための演算のみを、前記第2の演算精度で実施し、前記高効率パラメタ更新手段は、前記パラメタ更新処理において行われる演算のうち、前記高精度パラメタ更新手段が実施する演算以外の演算を、前記第1の演算精度で実施する付記1から付記3のうちのいずれかに記載の学習装置。
(付記5)前記学習手段は、前記推論処理において行われる演算のうちの指定された演算を、前記第2の演算精度で実施する高精度推論手段をさらに含み、前記高効率推論手段は、前記推論処理において行われる演算のうち、指定された層に属するユニットまたは指定されたユニットの出力を計算するための演算のみを、前記第1の演算精度で実施し、前記高精度推論手段は、前記推論処理において行われる演算のうち、前記高効率推論手段が実施する演算以外の演算を、前記第2の演算精度を実施する付記1から付記4のうちのいずれかに記載の学習装置。
(付記6)前記推論処理および前記パラメタ更新処理において行われる演算の実施先を制御する制御部を備える付記1から付記5のうちのいずれかに記載の学習装置。
(付記7)相対的に高い演算精度で所定の演算を行う高精度演算回路と、相対的に低い演算精度で所定の演算を行う低精度演算回路と、学習用データが入力されると、層状に結合された2以上のユニットで構成される判別モデルの各ユニットの出力を所定の順番で計算する推論処理において行われる少なくとも一部の演算を前記低精度演算回路に実行させ、かつ前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理において行われる少なくとも一部の演算を前記高精度演算回路に実行させる制御装置とを備えることを特徴とする学習装置。
(付記8)学習用データが入力されると、層状に結合された2以上のユニットで構成される判別モデルの各ユニットの出力を所定の順番で計算する推論処理において行われる演算のうちの指定された演算を、相対的に低い演算精度で実行する低精度演算回路と、前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理において行われる演算のうちの指定された演算を、相対的に高い演算精度で実行する高精度演算回路とを備えることを特徴とする学習回路。
(付記9)学習用データが入力されると、前記判別モデルの各ユニットの出力を所定の順番で計算する推論処理と、前記推論処理の結果に基づいて、前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理とを行い、前記推論処理において行われる少なくとも一部の演算を、相対的に低い演算精度を有する低精度演算回路に実行させ、かつ前記パラメタ更新処理において行われる少なくとも一部の演算を、相対的に高い演算精度を有する高精度演算回路に実行させることを特徴とする学習方法。
(付記10)コンピュータに、学習用データが入力されると、層状に結合された2以上のユニットで構成される判別モデルの各ユニットの出力を所定の順番で計算する推論処理と、前記推論処理の結果に基づいて、前記各ユニットの出力の計算に用いられるパラメタの少なくとも一部を更新するパラメタ更新処理とを実行させ、前記推論処理で、前記各ユニットの出力を計算するために実行する演算のうちの少なくとも一部の演算を、相対的に低い演算精度を有する低精度演算回路に実行させ、前記パラメタ更新処理で、前記パラメタを更新するために実行する演算のうちの少なくとも一部の演算を、相対的に高い演算精度を有する高精度演算回路に実行させるための学習プログラム。
以上、実施形態および実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。