(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-25
(45)【発行日】2023-10-03
(54)【発明の名称】情報処理装置、情報処理方法、情報処理プログラム
(51)【国際特許分類】
G06N 3/063 20230101AFI20230926BHJP
【FI】
G06N3/063
(21)【出願番号】P 2019178727
(22)【出願日】2019-09-30
【審査請求日】2022-06-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100147164
【氏名又は名称】向山 直樹
(72)【発明者】
【氏名】坂井 靖文
【審査官】北川 純次
(56)【参考文献】
【文献】特開2019-148896(JP,A)
【文献】特開2019-74951(JP,A)
【文献】特開2018-124681(JP,A)
【文献】米国特許出願公開第2019/0228293(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02-3/10
G06F 9/30-9/38
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークの学習を実行する情報処理装置であって、
複数の入力データ各々に対して所定の演算を実行することで、前記所定の演算の結果である複数の第1演算結果データを生成する演算部と、
前記複数の第1演算結果データ各々についての非符号となる最上位ビットの桁の分布についての統計情報を取得する統計情報取得部と、
所定のデータ型に基づいて前記複数の第1演算結果データを格納するレジスタと、
所定のビット幅で演算結果データを表現する第1データ型及び第2データ型のうち、前記第1データ型よりも狭いビット幅を有する前記第2データ型に基づいて前記複数の第1演算結果データに対し飽和処理又は丸め処理を実行することで複数の第2演算結果データを生成し、
前記統計情報に基づいて、前記複数の第1演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第1総和を算出し、
前記統計情報に基づいて、前記複数の第2演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第2総和を算出し、
前記第1総和と前記第2総和の差分である第1量子化差分を算出し、
算出した前記第1量子化差分が所定の閾値未満である場合に、前記複数の第2演算結果データを前記レジスタに格納する制御部と
を備えることを特徴とする情報処理装置。
【請求項2】
前記飽和処理は、前記複数の第1演算結果データのうち、前記第1データ型よりも狭いビット幅の最大桁よりも大きい桁に前記最上位ビットが分布するデータを、前記最大桁に前記最上位ビットが分布する値のデータに変更する処理であり、
前記丸め処理は、前記複数の第1演算結果データのうち、前記第1データ型よりも狭いビット幅の最小桁よりも小さい桁に前記最上位ビットが分布するデータを、前記最小桁に前記最上位ビットが分布する値に変更する処理である
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記制御部は、前記第1量子化差分が前記所定の閾値以上となる場合に、前記複数の第1演算結果データを前記レジスタに格納する
ことを特徴とする請求項1又は2に記載の情報処理装置。
【請求項4】
第1の桁の範囲に基づいて前記複数の第1演算結果データに対し前記飽和処理又は前記丸め処理を実行することで複数の第3演算結果データを生成し、
前記統計情報に基づいて、前記複数の第3演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第3総和を算出し、
前記第1総和と前記第3総和の差分である第2量子化差分を算出し、
前記第1の桁の範囲と同じビット幅を有する第2の桁の範囲に基づいて前記複数の第1演算結果データに対し前記飽和処理又は前記丸め処理を実行することで複数の第4演算結果データを生成し、
前記統計情報に基づいて、前記複数の第4演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第4総和を算出し、
前記第1総和と前記第4総和の差分である第3量子化差分を算出し、
前記第2量子化差分と前記第3量子化差分とを比較し、前記第1の桁の範囲と前記第2の桁の範囲のうち量子化差分が小さくなる方の前記桁の範囲に基づいて前記複数の第1演算結果データに対し前記飽和処理又は前記丸め処理を実行することを決定する
ことを特徴とする請求項1~3いずれか1項に記載の情報処理装置。
【請求項5】
前記制御部は、順次入力される複数の入力データに対しそれぞれ得られる複数の前記統計情報それぞれから算出される複数の前記第1量子化差分のうち、少なくとも2つの前記第1量子化差分間の差分に基づいて前記所定の閾値を決定する
ことを特徴とする請求項1~4いずれか1項に記載の情報処理装置。
【請求項6】
前記第1データ型は浮動小数点数を用いるデータ型であり、前記第2データ型は固定小数点数を用いるデータ型である
ことを特徴とする請求項1~5いずれか1項に記載の情報処理装置。
【請求項7】
ニューラルネットワークの推論を実行する情報処理装置であって、
複数の入力データ各々に対して所定の演算を実行することで、前記所定の演算の結果である複数の第1演算結果データを生成する演算部と、
前記複数の第1演算結果データ各々についての非符号となる最上位ビットの桁の分布についての統計情報を取得する統計情報取得部と、
所定のデータ型に基づいて演算結果データを格納するレジスタと、
所定のビット幅で演算結果データを表現する第1データ型及び第2データ型のうち、前記第1データ型よりも狭いビット幅を有する前記第2データ型に基づいて前記複数の第1演算結果データに対し飽和処理又は丸め処理を実行することで複数の第2演算結果データを生成し、
前記統計情報に基づいて、前記複数の第1演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第1総和を算出し、
前記統計情報に基づいて、前記複数の第2演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第2総和を算出し、
前記第1総和と前記第2総和の差分である第1量子化差分を算出し、
算出した前記第1量子化差分を所定の閾値と比較し、前記第1量子化差分が所定の閾値未満である場合に、前記複数の第2演算結果データを前記レジスタに格納する制御部と
を備えることを特徴とする情報処理装置。
【請求項8】
複数の入力データ各々に対して所定の演算を実行する演算部と、所定のデータ型に基づいて前記演算部による演算結果データを格納するレジスタとを有し、ニューラルネットワークの学習を実行する情報処理装置が、
前記演算部により複数の入力データ各々に対して所定の演算を実行することで、前記所定の演算の結果である複数の第1演算結果データを生成し、
前記複数の第1演算結果データ各々についての非符号となる最上位ビットの桁の分布についての統計情報を取得し、
所定のビット幅で演算結果データを表現する第1データ型及び第2データ型のうち、前記第1データ型よりも狭いビット幅を有する前記第2データ型に基づいて前記複数の第1演算結果データに対し飽和処理又は丸め処理を実行することで複数の第2演算結果データを生成し、
前記統計情報に基づいて、前記複数の第1演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第1総和を算出し、
前記統計情報に基づいて、前記複数の第2演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第2総和を算出し、
前記第1総和と前記第2総和の差分である第1量子化差分を算出し、
算出した前記第1量子化差分を所定の閾値と比較し、前記第1量子化差分が所定の閾値未満である場合に、前記複数の第2演算結果データを前記レジスタに格納する
ことを特徴とする情報処理方法。
【請求項9】
複数の入力データ各々に対して所定の演算を実行する演算部と、所定のデータ型に基づいて前記演算部による演算結果データを格納するレジスタとを有し、ニューラルネットワークの学習を実行する情報処理装置に、
前記演算部により複数の入力データ各々に対して所定の演算を実行することで、前記所定の演算の結果である複数の第1演算結果データを生成し、
前記複数の第1演算結果データ各々についての非符号となる最上位ビットの桁の分布についての統計情報を取得し、
所定のビット幅で演算結果データを表現する第1データ型及び第2データ型のうち、前記第1データ型よりも狭いビット幅を有する前記第2データ型に基づいて前記複数の第1演算結果データに対し飽和処理又は丸め処理を実行することで複数の第2演算結果データを生成し、
前記統計情報に基づいて、前記複数の第1演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第1総和を算出し、
前記統計情報に基づいて、前記複数の第2演算結果データにおける前記桁に前記最上位ビットが分布するデータの数と前記桁の値とを前記桁ごとにそれぞれ乗算した値を足し合わせた第2総和を算出し、
前記第1総和と前記第2総和の差分である第1量子化差分を算出し、
算出した前記第1量子化差分を所定の閾値と比較し、前記第1量子化差分が所定の閾値未満である場合に、前記複数の第2演算結果データを前記レジスタに格納する
ことを実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法、情報処理プログラムに関する。
【背景技術】
【0002】
機械学習の一例であるニューラルネットワーク(Neural Network、以下NNと称する)は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、1または複数のノードを持ち、各ノードは入力されたデータ等の値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアス等のパラメータを持つ。
【0003】
NNにおいて、各層のノードの値は、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力データとして次の層のノードの値がその層の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【0004】
データを入出力する際には、値を所定のデータ型で表現して記憶装置に読み書きを行う。このとき、値を表現するデータ型の表現可能な値の範囲、つまり表現範囲が広いほど必要なビット幅が増加する。例えば、浮動小数点数を用いるデータ型を用いると、表現範囲が広い代わりに必要なビット幅が大きくなり、記憶装置の使用容量及び演算量が増加する。
【0005】
NNの演算量を減らすために、値の表現に必要なビット幅が狭いデータ型を用いる、量子化という手法が用いられる。例えば、固定小数点数を用いるデータ型では小数点位置を固定した表現により、仮数部と指数部の表現が必要な浮動小数点数に比べ表現に必要なビット幅を低減している。ただし、固定小数点数のデータ型は表現可能な範囲が浮動小数点数に比べて狭いため、演算により値の桁数が増えた場合に、表現範囲から外れるオーバーフローが発生し演算結果の値の上位ビットが飽和されること、アンダーフローが発生し下位ビットが丸められることがある。この場合、演算結果の精度の低下を招く場合がある。
【0006】
そのため、NNの演算において、演算により求められた演算結果データの小数点位置を動的に調整する動的固定小数点(Dynamic Fixed Point)が提案されている。また、適切な小数点位置を決定するための方法として、非符号の最上位ビットの統計情報を取得し、統計情報に基づいて既定の閾値を用いた条件を満たす小数点位置を設定する方法が知られている。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平07-084975号公報
【文献】特開2012-203566号公報
【文献】特開2009-271598号公報
【文献】特開2018-124681号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
従来のNNの量子化手法では、学習及び推論を開始する前にユーザが量子化を行う変数を指定している。量子化してもNNの認識率の劣化が少なくなるような変数は、特定の層や、特定の変数により決定することは困難である。これは、NNに入力するデータの数、サイズや、層の接続関係等、複数のNNの設計条件によって変数が非線形的に変化するためである。ユーザによる量子化対象の変数の決定は、量子化を行っても精度が極端に低下しない特定の変数を経験則から選ぶことで行うことが考えられる。
【0009】
所定の変数について量子化が可能か否かは、狭い表現範囲でも演算結果データを表すテンソルに含まれる要素の値の分布、すなわち演算結果データの値の分布をカバーでき、NNの認識精度を維持できるか否かによる。演算結果データの値の分布が狭い場合には量子化は可能であるが、分布が広すぎる場合には量子化による誤差が大きくなり極端に精度が下がるため、量子化ができない。例えば、学習の初期では演算結果データの値の変化が大きく演算結果データの値の分布が広くなる場合があるため、浮動小数点数で表現された値を固定小数点数で表現する際に最適な小数点位置を決定しても、NNの認識精度が下がることを防ぐことができない。
【0010】
一つの側面では、本発明は、NNの認識精度を維持しつつ演算量を低減した情報処理装置、情報処理方法、情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
一つの様態によると、ニューラルネットワークの学習を実行する情報処理装置であって、複数入力データ各々に対して所定の演算を実行することで、所定の演算の結果である複数の第1演算結果データを生成する演算部と、複数の第1演算結果データ各々についての非符号となる最上位ビットの桁の分布についての統計情報を取得する統計情報取得部と、所定のデータ型に基づいて複数の第1演算結果データを格納するレジスタと、所定のビット幅で演算結果データを表現する第1データ型及び第2データ型のうち、第1データ型よりも狭いビット幅を有する第2データ型に基づいて複数の第1演算結果データに対し飽和処理又は丸め処理を実行することで複数の第2演算結果データを生成し、統計情報に基づいて、複数の第1演算結果データにおける桁に最上位ビットが分布するデータの数と桁の値とを桁ごとにそれぞれ乗算した値を足し合わせた第1総和を算出し、統計情報に基づいて、複数の第2演算結果データにおける桁に最上位ビットが分布するデータの数と桁の値とを桁ごとにそれぞれ乗算した値を足し合わせた第2総和を算出し、第1総和と第2総和の差分である第1量子化差分を算出し、算出した第1量子化差分が所定の閾値未満である場合に、複数の第2演算結果データをレジスタに格納することを制御する制御部とを備えることを特徴とする情報処理装置が、提供される。
【発明の効果】
【0012】
一つの側面では、NNの認識精度を維持しつつ演算量を減らすことができる。
【図面の簡単な説明】
【0013】
【
図1】ニューラルネットワーク(NN)の一例を示す図である。
【
図2】NNの学習処理のフローチャートの一例を示す図である。
【
図4】
図3に示すホストマシン30の詳細を示す図である。
【
図5】
図3に示すNN実行マシン40の詳細を示す図である。
【
図6】ホストマシン30とNN実行マシン40による学習処理の概略を示すシーケンスチャートの図である。
【
図7】学習の一例のフローチャートを示す図である。
【
図8】
図7に示す学習の処理のうち、S61とS63の詳細を説明する図である。
【
図9】学習の順伝播処理と逆伝播処理とを説明する図である。
【
図10】演算結果データの値の分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【
図11】演算結果データの値の分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【
図12】
図7に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。
【
図13】第1実施形態にかかる学習のフローチャートを示す図である。
【
図14】
図13に示すフローチャートのうちS203の詳細な処理を示すフローチャートの図である。
【
図15】第1実施形態にかかる学習におけるNNの認識精度を示す図である。
【
図16】第1実施形態にかかる学習におけるNNの演算量を示す図である。
【
図17】学習において演算結果データの値の分布が広すぎない場合の飽和処理又は丸め処理を説明する図である。
【
図18】学習において演算結果データの値の分布が広すぎる場合の飽和処理又は丸め処理を説明する図である。
【
図19】第1実施形態における学習において演算結果データの値の分布が広すぎない場合に飽和処理又は丸め処理を行った場合の量子化誤差を示す図である。
【
図20】第1実施形態における学習において演算結果データの値の分布が広すぎる場合に飽和処理又は丸め処理を行った場合の量子化誤差を示す図である。
【
図21】NNプロセッサ43の構成例を示す図である。
【
図22】NNプロセッサ43による統計情報の取得、集約、格納の処理を示すフローチャートの図である。
【
図23】統計情報取得器ST_ACの論理回路例を示す図である。
【
図24】統計情報取得器ST_ACが取得する演算結果データのビットパターンを示す図である。
【
図25】統計情報集約器ST_AGR_1の論理回路例を示す図である。
【
図26】統計情報集約器ST_AGR_1の動作を説明する図である。
【
図27】第2の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。
【発明を実施するための形態】
【0014】
図1は、ニューラルネットワーク(NN)の一例を示す図である。
図1のNNは、例えば、画像を入力し、入力画像の内容(例えば数字)に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。NNは、入力層INPUT、第1の畳み込み層Conv_1、第1のプーリング層Pool_1、第2の畳み込み層Conv_2、第2のプーリング層Pool_2、第1の全結合層fc1、第2の全結合層fc2、出力層OUTPUTを有する。各層は、単数または複数のノードを有する。
【0015】
第1の畳み込み層Conv_1は、入力層INPUT内の複数のノードに入力された例えば画像の画素データにノード間の重み等を積和演算し、第1の畳み込み層Conv_1内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。第2の畳み込み層Conv_2も同様である。
【0016】
第1のプーリング層Pool_1は、前の層である第1の畳み込み層Conv_1の局所的なノードから定まる値をノードとする層であり、例えば、局所的なノードの最大の値を自分のノードの値とすることで、画像のわずかな変化を吸収する。
【0017】
出力層OUTPUTは、ソフトマックス関数等を用いてノードの値から各カテゴリに属する確率を求める。
【0018】
図2は、NNの学習処理のフローチャートの一例を示す図である。学習処理は、例えば、複数の入力データと、入力データに基づいてNNが算出する出力データの正解となる複数の教師データを使用して、NN内の重み等の変数を最適化する。
図2の例では、ミニバッチ法により、一対一で対応する入力データと教師データの複数の組み合わせを複数のミニバッチに分割し、各ミニバッチに分割された複数の入力データと、入力データに対応する複数の教師データを入力する。そして、それぞれの入力データに対してNNが出力した出力データと、入力データに対応する教師データとの誤差を小さくするように重み等の変数を最適化する。
【0019】
NNは、複数の層をハードウエア回路で構成し、各層の演算をハードウエア回路が実行するようにしてもよい。または、NNは、NNの各層の演算を実行するプロセッサに、各層の演算を実行させるプログラムを実行させるようにしてもよい。
図2において説明されるNNの処理は、後述するホストマシンとNN実行マシンによって実行されるようにしてもよい。
【0020】
図2に示されるとおり、事前の準備として、一対一で対応する入力データと教師データの複数の組み合わせを並び替え(S1)、重み等のNNを構成する変数のうち量子化する変数を決定し(S2)、並び替えた複数の入力データと複数の教師データを複数のミニバッチに分割する(S3)。そして、学習では、分割した複数のミニバッチそれぞれに対して、量子化処理S4と、順伝播処理S5と、誤差評価S6と、逆伝播処理S7と、変数更新S8とを繰り返す。全てのミニバッチの処理が終了すると(S9:YES)、所定回数に達するまで(S10:NO)、同じ入力データと教師データの組み合わせについて、処理S1~S9を繰り返し実行する。
【0021】
また、所定回数に達するまで同じ入力データと教師データの組み合わせで処理S1~S9を繰り返すことに代えて、学習結果の評価値、例えば、出力データと教師データとの誤差が一定の範囲に収まったことで、学習処理を終了することも行われる。
【0022】
NNの学習処理の一例では、S2における量子化対象の決定は、ユーザが学習前に指定した変数を量子化対象とすることで行われる。また、S2について、学習を繰り返し実行する経過に合わせて量子化対象とする変数を変更してもよい。
【0023】
量子化処理S4では、S2にて量子化対象と決定された変数について量子化の処理を行う。例えば、入力層と隠れ層では32ビットで浮動小数点数表現を行うFP32のデータ型を使用し、出力層では8ビットで整数表現を行うINT8のデータ型を用いて量子化を行う。
【0024】
順伝播処理S5では、NNの入力層から出力層に向かって各層の演算が順番に実行される。
図1の例で説明すると、第1の畳み込み層Conv_1が、入力層INPUTに入力された1つのミニバッチが有する複数の入力データを、エッジの重み等で畳み込み演算を行い、複数の演算結果データを生成する。そして、第1のプーリング層Pool_1が、第1の畳み込み層Conv_1の演算結果の局所性を弱める処理を行う。さらに、第2の畳み込み層Conv_2と第2のプーリング層Pool_2が、上記と同様の処理を行う。最後に、全結合層fc1、fc2が、全エッジの重み等で畳み込み演算を行い、出力層OUTPUTに出力データを出力する。
【0025】
次に、誤差評価S6にて、NNの出力データと対応する教師データの誤差が演算される。そして、S6にて演算された誤差をNNの出力層から入力層に伝播する逆伝播処理S7が実行される。逆伝播処理S7では、誤差を出力層から入力層に伝播させることで、各層の重み等の変数により誤差が偏微分される。そして、変数更新S8では、S7で求めた変数による誤差の偏微分結果で現在の変数が更新され、各層の重み等が最適値方向に更新される。
【0026】
図3は、学習システムの一例を示す図である。学習システムは、ホストマシン30とNN実行マシン40とを有し、例えば、専用インターフェースを介してホストマシン30とNN実行マシン40とが接続される。また、ホストマシン30には利用者端末50がアクセス可能にされ、利用者は、利用者端末50からホストマシン30にアクセスし、NN実行マシン40を操作し、学習を実行する。ホストマシン30は、利用者端末50からの指示に従い、NN実行マシン40が実行するプログラムを作成し、NN実行マシン40に送信する。そして、NN実行マシン40は送信されたプログラムを実行し、NNの学習を実行する。
【0027】
図4は、
図3に示すホストマシン30の詳細を示す図である。ホストマシン30は、CPU等のホストプロセッサ31と、NN実行マシン40と接続するための高速入出力インターフェース32と、SDRAM等のメインメモリ33と、内部バス34とを有する。さらに、内部バス34に接続された大容量のHDD等の補助記憶装置35と、利用者端末50と接続するための低速入出力インターフェース36とを有する。
【0028】
ホストマシン30のホストプロセッサ31は、補助記憶装置35に記憶されているプログラムがメインメモリ33に展開されたプログラムを実行する。高速入出力インターフェース32は、例えば、PCI Express等のホストプロセッサ31とNN実行マシン40とを接続するインターフェースである。メインメモリ33は、プロセッサが実行するプログラムやデータを記憶する。
【0029】
内部バス34は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース36は、例えば、USB等で利用者端末50のキーボードやマウスとの接続を行うか、または、イーサネット(登録商標)のネットワークとの接続を行う。
【0030】
補助記憶装置35には、NN学習プログラムと、入力データ及び教師データが記憶される。ホストプロセッサ31は、NN学習プログラムを実行して、例えば、学習プログラムと入力データ及び教師データをNN実行マシン40に送信し、NN実行マシン40に学習プログラムを実行させる。
【0031】
図5は、
図3に示すNN実行マシン40の詳細を示す図である。NN実行マシン40は、ホストマシン30との通信を中継する高速入出力インターフェース41と、ホストマシン30からの指令やデータに基づいて対応する処理を実行する制御部42とを有する。また、NN実行マシン40は、NNプロセッサ43と、メモリアクセスコントローラ44と、内部メモリ45を有する。
【0032】
NNプロセッサ43は、ホストマシン30から送信されたプログラムとデータに基づいて、プログラムを実行し、学習の処理を実行する。NNプロセッサ43は、固定小数点演算を実行するNNプロセッサ43_1と、浮動小数点演算を実行するNNプロセッサ43_2とを有する。ただし、浮動小数点演算を実行するNNプロセッサ43_2はなくてもよい。
【0033】
固定小数点演算を実行するNNプロセッサ43_1は、NN内で演算される演算結果や学習により更新される変数等の演算結果データと、メモリ内のデータ等の有効な最上位ビットや有効な最下位ビットの数についての統計情報を取得する統計情報取得回路を有する。固定小数点演算を実行するNNプロセッサ43_1は、学習を実行しながら演算により求められる演算結果データの統計情報を取得し、統計情報に基づいて演算結果データの固定小数点位置を最適な位置に調整する。
【0034】
高速入出力インターフェース41は、例えば、PCI Expressであり、ホストマシン30との通信を中継する。
【0035】
制御部42は、ホストマシン30から送信されるプログラムやデータを内部メモリ45に記憶し、ホストマシン30からの指令に応答して、NNプロセッサ43にプログラムの実行を指示する。メモリアクセスコントローラ44は、制御部42からのアクセス要求とNNプロセッサ43からのアクセス要求に応答して、内部メモリ45へのアクセス処理を制御する。
【0036】
内部メモリ45は、NNプロセッサ43が実行するプログラム、処理対象データ、処理結果のデータ等を記憶する。内部メモリ45は、例えば、SDRAMや、より高速のGDR5や広帯域のHBM2等である。
【0037】
図6は、ホストマシン30とNN実行マシン40による学習処理の概略を示すシーケンスチャートの図である。ホストマシン30は、NN実行マシン40に、学習プログラムを送信し(S31)、1ミニバッチ分の入力データを送信し(S32_1)、学習プログラム実行指示を送信する(S33_1)。
【0038】
これらの送信に応答して、NN実行マシン40は、入力データと学習プログラムを内部メモリ45に記憶し、学習プログラム実行指示に応答して、内部メモリ45に記憶した入力データについて学習プログラムを実行する(S40_1)。学習プログラムの実行は、NNプロセッサ43により行われる。ホストマシン30は、次回の1ミニバッチ分の入力データを送信してから(S32_2)、NN実行マシン40による学習プログラムの実行完了まで待機する。この場合、NN実行マシン40に入力データを格納する領域を2つ用意する。
【0039】
NN実行マシン40は、学習プログラムの実行が完了すると、学習プログラム実行終了の通知をホストマシン30に送信する(S41_1)。ホストマシン30は、学習プログラムが参照する入力データ領域を切り替えて、学習プログラム実行指示を送信する(S33_2)。そして、NN実行マシン40が学習プログラムを実行し(S40_2)、終了通知を送信する(S41_2)。これを繰り返してNNの学習を進める。
【0040】
NNの学習は、NNの順方向に各層の演算(順伝播処理)を実行し、出力層の出力データと教師データとの誤差をNNの逆方向に伝播して各層の変数による誤差の偏微分を演算し(逆伝播処理)、各層の変数による誤差の偏微分結果により変数を更新する処理(変数更新)を有する。これらのNNの学習処理を、全てNN実行マシン40が実行してもよく、また、一部の処理をホストマシン30で実行してもよい。
【0041】
図7は、学習の一例のフローチャートを示す図である。学習の一例では、各層の各演算結果データの値の分布の統計情報を保存し、保存した各層の統計情報に基づいて各層の各演算結果データの固定小数点位置を調整する。
【0042】
まず、NNプロセッサ43が、各演算結果データ(各層の演算結果、変数等)の初期小数点位置を決定する(S60)。初期小数点位置の決定は、浮動小数点数による事前学習や、ユーザの指定によって行われる。浮動小数点数により事前学習を行う場合、NN内の演算結果データは浮動小数点数となるので、演算結果データの大きさに対応した指数部が生成され、固定小数点数のように小数点位置を調整する必要はない。そして、浮動小数点数の演算結果データに基づいて、各演算結果データの固定小数点数の最適な小数点位置が決定される。
【0043】
次に、NNプロセッサ43が、ミニバッチ学習を実行しながら、各演算結果データの値の分布についての統計情報を取得・保存する(S61)。NNプロセッサ43に含まれる固定小数点演算を実行するNNプロセッサ43_1は、固定小数点演算器の演算結果等の有効ビットの分布等の統計情報を取得する統計情報取得回路を有する。NNプロセッサ43に統計情報取得処理付の演算命令を実行させることで、ミニバッチ学習中に演算結果データの統計情報を取得し保存することができる。ミニバッチ学習をK回実行するまで(S62:NO)、S61を繰り返す。ミニバッチ学習をK回実行すると(S62:YES)、演算結果データの値の分布の各層の統計情報に基づいて、NN内の各演算結果データの固定小数点位置を調整する(S63)。
【0044】
上記のNNプロセッサ43内の統計情報取得回路と、分布についての各層の統計情報に基づく固定小数点位置の調整方法については、後で詳述する。
【0045】
そして、NNプロセッサ43は、全ミニバッチの学習が終了するまで(S64:NO)、S61、S62、S63を繰り返す。全ミニバッチの学習が終了すると(S64:YES)、所定回数に達するまで(S65:NO)、最初のS60に戻って全ミニバッチ学習を繰り返す。
【0046】
図7にて説明する学習の一例では、演算結果データの値の分布の統計情報を保存し、保存した統計情報に基づいて演算結果データの固定小数点位置を調整する場合を説明したが、この場合に限られるものではない。例えば、固定小数点位置は、他のデータ型に対応する量子化範囲と置き換えても良い。例えば、演算結果データは、NNの各層の他の変数に置き換えても良い。例えば、値の分布の統計情報は、値の最大値や平均値等、他の統計情報に置き換えても良い。
【0047】
図8は、
図7に示す学習の処理のうち、S61とS63の詳細を説明する図である。S61では、NNプロセッサ43が、ミニバッチ学習をK回繰り返し実行する。各ミニバッチ学習では、NNプロセッサ43が、ミニバッチの複数の入力データ及び教師データについて、順伝播処理と、逆伝播処理と、各層を順番に変数を更新する処理を実行しながら、各処理における各層の演算結果データの値の分布についての統計情報を取得し、保存する。
【0048】
また、S63では、NNプロセッサ43が、保存した統計情報に含まれる複数の演算結果データの有効ビットの分布に基づいて、各層の各演算結果データの最適な小数点位置を決定し更新する。
【0049】
図9は、学習の順伝播処理と逆伝播処理とを説明する図である。順伝播処理では、NNプロセッサ43内の固定小数点演算器が、入力層に近い層L1のノードのデータX
0-X
nにエッジの重みW
ijを乗じ、バイアスを加算した値を累積加算して、出力層に近い層L2のノードに入力するデータZ
0-Z
j…を演算する。さらに、層L2の活性化関数により出力データZ
0-Z
j…に対する活性化関数の出力データU
0-U
j…を演算する。層L1、L2での演算が、入力層から出力層にわたって繰り返される。
【0050】
一方、逆伝播処理では、NNプロセッサ43内の固定小数点演算器が、出力層に近い層L6の変数による出力層の出力データと教師データの誤差の偏微分結果δ0
(6)-δi
(6)-δn
(6)から、入力層に近い層L5の偏微分δ0
(5)-δj
(5)…を演算する。そして、層L5の偏微分δ0
(5)-δj
(5)…を重みWij等の変数で偏微分した値に応じて、重みの更新データΔWijを演算する。層L6、L5での演算が、出力層から入力層にわたって繰り返される。
【0051】
さらに、各層を順番に変数を更新する処理では、既存の重みWijから更新データΔWijを減算して、更新された重みWijを演算する。
【0052】
図9に示される、層L2への入力データZ
0-Z
j…及び活性化関数の出力データU
0-U
j…、層L6、L5での偏微分結果δ
0
(6)-δ
i
(6)-δ
n
(6)、及びδ
0
(5)-δ
j
(5)…、及び重みの更新データΔW
ij、更新された重みW
ijは、NNの演算結果データである。これらの演算結果データの小数点位置を最適な位置に調整することで、各演算結果データの演算精度を高くすることができ、学習の精度を高くできる。
【0053】
図10、
図11は、演算結果データの値の分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。後述するとおり、NNプロセッサ43は、固定小数点演算器を有し、各演算器の出力や内部メモリ45内に記憶されている演算結果データの有効ビットの分布についての統計情報を取得する統計情報取得回路を有する。
【0054】
演算結果データの有効ビットの分布についての統計情報は、例えば、以下の通りである。
(1)非符号となる最上位ビットの位置の分布
(2)非ゼロとなる最下位ビットの位置の分布
(3)非符号となる最上位ビットの位置の最大値
(4)非ゼロとなる最下位ビットの位置の最小値
(1)非符号となる最上位ビットの位置とは、演算結果データの有効ビットの最上位ビットの位置である。非符号とは、符号ビットが0(正)であれば「1」、1(負)であれば「0」である。(2)非ゼロとなる最下位ビットの位置とは、演算結果データの有効ビットの最下位ビットの位置である。符号ビットが0(正)であれば「1」の最下位ビットの位置、符号ビットが1(負)の場合も「1」の最下位ビットの位置である。符号ビットが1の場合、符号ビット以外のビットは2の補数で表され、2の補数を元の数に変換する処理に1を減算して、1、0を0、1に反転する処理が含まれる。そのため、「1」の最下位ビットは、1を減算することで「0」になり、ビット反転で「1」になるので、有効ビットの最下位ビットの位置となる。
【0055】
(3)非符号となる最上位ビットの位置の最大値は、複数の演算結果データそれぞれの有効ビットの最上位ビットの位置のうち、最大の位置である。同様に、(4)非ゼロとなる最下位ビットの位置の最小値は、複数の演算結果データそれぞれの有効ビットの最下位ビットの位置のうち、最小の位置である。
【0056】
図10、
図11には、一例として、(1)非符号となる最上位ビットの位置の分布を示すヒストグラムが示される。横軸は、ヒストグラムのビンに対応する演算結果データの有効最上位ビットのべき乗(2の対数値)を示し、ビンの高さは各ビンの有効最上位ビットを有する演算結果データの数である。
図10の例では、非符号となる最上位ビットの位置の分布の広がり(ヒストグラムのビンの数)は、-25のビンから+13のビンまで、ビン数が25+13+1=39である。分布の最上位のビンは、(3)非符号となる最上位ビットの位置の最大値に対応する。16ビットの固定小数点数の場合、符号ビットを除くビット数は15ビットである。そして、固定小数点数のフォーマットをQn.mと表現する。Qn.mは、nビットの整数部と、mビットの小数部を意味する。小数点位置は整数部と小数部との間に位置する。小数点位置とビット幅が固定であるとき、整数部を表現するビット数と小数部を表現するビット数の情報を有する固定小数点数フォーマットを決定することは、データ値の桁に対する小数点位置を決定することと対応する。また、固定小数点数フォーマットを決定することは、演算結果である演算結果データを出力データとして格納する場合に、演算結果データよりも小さいビット幅で制限をかけることに対応する。演算結果データのビット幅を制限する際の、値を飽和・丸めをさせずに表現可能な桁の範囲を、第1実施形態ではビットレンジと呼ぶ。
【0057】
一方、非符号となる最上位ビットの位置の分布の広がり(ヒストグラムのビンの数)は、複数の演算結果データに依存して変化する。
図10のヒストグラムの分布の広がりは、-22のビンから+10のビンまで、ビン数が33となり、固定小数点数の15ビット(固定小数点数で表現可能な領域)内には収まっていない。この表現可能な領域の15ビットより上位のビットは、オーバーフローとなり飽和処理され、下位のビットはアンダーフローとなり丸め処理される。ここで、飽和処理は、複数の演算結果データのうち、固定小数点数のビット幅の最大桁よりも大きい桁、例えば、表現可能な領域の15ビットより上位に最上位ビットが分布するデータを、最大桁に最上位ビットが分布する値のデータに変更する処理である。また、丸め処理は、複数の演算結果データのうち、固定小数点数のビット幅の最小桁よりも小さい桁、例えば、表現可能な領域の15ビットより下位に最上位ビットが分布するデータを、最小桁に最上位ビットが分布する値のデータに変更する処理である。
【0058】
一方、
図11のヒストグラムは、-13のビンから-2のビンまで、ビン数が12となり、固定小数点数の15ビット内に収まっている。
【0059】
そこで、ヒストグラムである統計情報に基づく小数点位置の決定方法は、ヒストグラムの横幅(ビン数)が15ビットを超えて表現可能な領域(15ビット)に収まらない場合(
図10)と、収まる場合(
図11)とで異なる。
【0060】
図10のヒストグラムの横幅(ビン数)33が15ビットを超えて表現可能な領域(15ビット)に収まらない場合、以下のように固定小数点数フォーマット(小数点位置)を決定する。すなわち、ヒストグラムの上位ビット側のデータ数の全データ数に対する割合が所定の閾値r_max未満を満たす、上位ビット側の最大ビット数Bmaxを決定し、決定したBmaxより下位側に固定小数点数フォーマットを決定する。
図10に示すように、決定したBmaxより上位側にはビンが含まれる、すなわち、新たに決定した固定小数点数フォーマットでは表現できないデータの値が存在することになる。第1実施形態の小数点位置の決定方法では、データ値のオーバーフローを許容することで、最上位ビットの位置が極端に上位側にある外れ値データを無視し、表現可能な領域に収まるデータ数を増加させることができる。
【0061】
図10の例では、既存の固定小数点数フォーマットQ5.10が-10~+4のビットを収容しているのに対して、更新後の固定小数点数フォーマットをQ3.12が-12~+2のビットを収容するように変更される。この変更により、有効ビットの最上位ビットが+3~+10の演算結果データは、オーバーフローにより値が飽和されるが、有効ビットの最上位ビットが-11、-12の演算結果データは少なくとも最上位ビットについては丸められない。
【0062】
図11の例では、既存の固定小数点数フォーマットQ4.11が、ヒストグラムの上位ビット側にずれているので、更新後の固定小数点数フォーマットをQ1.14に変更する。Q1.14の場合は、ヒストグラムのピークの位置、すなわちヒストグラムの最頻値の位置にフォーマットQ1.14の中央ビットが位置する。これにより、有効ビットの最上位ビットが-12、-13、-14の演算結果データは少なくとも最上位ビットについては丸められない。
【0063】
図12は、
図7に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。S63の詳細な処理では、条件により決定される演算結果データの値の分布の統計情報に基づいて、NN内の各演算結果データの固定小数点位置を調整する。以下、
図12を用いて説明するS63の詳細な処理は、全てホストマシン30のポストプロセッサが実行してもよく、また、一部の処理をNN実行マシン40のNNプロセッサ43で実行してもよい。
【0064】
S62が終了したことを契機に処理が開始され、S61にて保存された各層の統計情報から、統計情報の最大値ubを求める(S631)。統計情報の最大値ubは、例えば、前述した非符号となる最上位ビットの位置の最大値と対応する。次に、S61にて保存された各層の統計情報から、統計情報の最小値lbを求める(S632)。統計情報の最小値lbは、例えば、非符号となる最上位ビットの位置の最小値と対応する。次に、分布の広がりub-lb+1を求める(S633)。ub-lb+1は、統計情報の最大値と最小値の幅を示す。次に、分布の広がりub-lb+1が、符号ビットを除くビット幅Nより大きいか否かを判定する(S634)。この判定は、ヒストグラムの横幅(ビン数)が表現可能な領域に収まらない場合(
図10)と、収まる場合(
図11)との場合分けに対応する。
【0065】
分布の広がりub-lb+1が、符号ビットを除くビット幅Nより大きくない場合(S634:NO)、分布の中心(ub-lb+1)/2とビット幅の中心N/2に基づいて整数部の桁数nを決定する(S635)。整数部の桁数nは、固定小数点数のフォーマットQn.mで表現されるnビットの整数部に対応する。分布の広がりが、符号ビットを除くビット幅Nより大きい場合(S634:YES)、オーバーフロー率が既定値r_maxを超える桁を求める関数に基づいて整数部の桁数nを決定する(S636)。次に、S635またはS636にて求められた整数部の桁数nとビット幅Nに基づいて小数部の桁数mを決定する(S637)。小数部の桁数mは、固定小数点数のフォーマットQn.mで表現されるmビットの小数部に対応する。
【0066】
[第1実施形態にかかる学習における量子化対象の決定]
第1実施形態にかかる学習における量子化対象の変数のデータ型の決定方法について説明する。第1実施形態にかかる学習では、NNの各層の各変数について量子化を行うか否か、つまり、値の表現に必要なビット幅が狭いデータ型を用いるか否かを決定する。第1実施形態にかかる学習には、NNの認識精度を保ちつつ、NNの演算量を低減できる効果がある。
【0067】
図13は、第1実施形態にかかる学習のフローチャートを示す図である。第1実施形態にかかる学習は、
図2にて説明される学習に対して、共通の符号を用いる処理は同等だが、以下の点で異なる。
図2にて説明されるフローチャートのS2にて量子化する変数の決定を行うとき、狭いビット幅のデータ型で量子化を行った場合の変数の量子化誤差について所定の閾値との比較を行い、変数の値を出力するときに用いるデータ型を決定する。S2の処理は、所定の入力データ及び教師データについてのミニバッチ学習が1回以上終了し
図2で説明されるS10からS1に戻った際に実行される。S2の処理を実行する際、ミニバッチ学習における量子化範囲の更新間隔K回ごとの統計情報が、変数ごとに保存され蓄積されている。ミニバッチ学習における量子化範囲の更新間隔K回ごとの統計情報は、学習を繰り返すことで得られる複数の統計情報とも呼ぶ。
【0068】
S1が終了したことを契機に処理が開始され、ホストプロセッサ31が、変数について所定の量子化範囲を決定する(S203)。量子化範囲の決定は、
図10や
図11にて説明した分布の統計情報に基づく方法や、量子化誤差に基づく方法で行って良い。量子化誤差に基づいて量子化範囲を決定する方法は後述する。
【0069】
次に、ホストプロセッサ31が、狭いビット幅のデータ型、S203にて決定した量子化範囲で量子化処理を行った場合の全ての変数の量子化誤差を保存した統計情報に基づいて算出する(S205)。量子化処理は、S203にて決定した量子化範囲に基づいて量子化処理を行うことを含む。ポストプロセッサ31は、狭いビット幅のデータ型は、変数のデータを出力するときに用いるデータ型の候補から選ばれる。データ型の候補は、例えば、8ビットで整数表現を行うINT8のデータ型と、32ビットで浮動小数点数表現を行うFP32のデータ型である。
【0070】
次に、ホストプロセッサ31が、所定の閾値を決定する(S206)。所定の閾値は、ユーザ指定としても良いし、S61にて保存した統計情報に基づいて決定しても良い。統計情報に基づいて所定の閾値を決定する場合、統計情報に基づいて算出された量子化誤差の変化に基づいて決定する。所定の閾値は、例えば、全量子化誤差の平均値に基づいて決定しても良い。統計情報に基づいて算出された量子化誤差の変化に基づいて決定することで、入力データに対応する量子化対象の変数を決定する閾値を調整できるため、より精度の高い量子化対象の決定が可能となる。
【0071】
次に、ホストプロセッサ31が、S205にて算出した量子化誤差が所定の閾値未満か否か判定する(S207)。量子化誤差が所定の閾値未満である場合(S207:YES)、量子化誤差の算出に用いた狭いビット幅のデータ型を変数の出力に用いることを決定する(S209)。量子化誤差が所定の閾値未満でない場合(S207:NO)、狭いビット幅のデータ型よりも広いビット幅を有するデータ型を変数の出力に用いることを決定する(S211)。
【0072】
そして、全変数のデータ型を決定するまで(S213:NO)、S206~S211を繰り返す。全変数のデータ型の決定が終了すると(S213:YES)、S3に進む。
【0073】
図14は、
図13に示すフローチャートのうちS203の詳細な処理を示すフローチャートの図である。以下、
図14を用いて説明するS203の詳細な処理は、全てホストマシン30が実行してもよく、また、一部の処理をNN実行マシン40で実行してもよい。
【0074】
S1が終了したことを契機に処理が開始され、変数を狭いビット幅のデータ型で量子化する場合の量子化範囲候補を決定する(S2031)。
【0075】
次に、S2031にて決定した量子化範囲候補で量子化処理を行った場合の変数の量子化誤差を、S61にて保存した統計情報に基づいて算出する(S2033)。量子化誤差の算出の方法は、S205と同様である。
【0076】
全ての量子化範囲候補で量子化誤差を算出するまで(S2035:NO)、S2031~S2033を繰り返す。全ての量子化範囲候補で量子化誤差を算出すると(S2035:YES)、S2037に進む。
【0077】
そして、算出された量子化誤差が最小値となる量子化範囲候補を量子化範囲として決定する(S2037)。
【0078】
図15は、第1実施形態にかかる学習におけるNNの認識精度を示す図である。図のグラフは、NN(ImageNet, resnet-50)による学習結果を示し、縦軸はNNの認識率、横軸はNNの学習回数を示す。
図15に示される点線は、NNの全ての変数をFP32に固定して学習させた場合を示す。
図15に示される一点鎖線は、NNの全ての変数をINT8に固定して学習させた場合を示す。
図15に示される実線は、INT8を用いる変数を第1実施形態にかかる学習の方法で決定し、学習させた場合を示す。
図15に示されるように、第1実施形態の方法に対応する実線は、表現範囲の広いデータ型であるFP32を全ての変数に用いた点線と同等の認識率となっている。対して、一点鎖線は、認識率が極端に低下している。
【0079】
図16は、第1実施形態にかかる学習におけるNNの演算量を示す図である。
図16のグラフは、NN(ImageNet, resnet-50)による演算量を示す。
図16の左側のグラフは、NNの全ての変数をFP32に固定して学習させた比較例を示す。
図16の右側のグラフは、INT8を用いる変数を第1実施形態にかかる学習の方法で決定し、学習させた場合を示す。
図16に示されるように、第1実施形態の方法に対応する右側のグラフは、左側のグラフに対し約60%の演算量となっている。
【0080】
図15、
図16より、第1実施形態にかかる学習における量子化対象の変数のデータ型の決定を行うことによって、NNの認識精度を維持しつつ演算量を減らすことができることが分かる。第1実施形態にかかる学習の方法を用いることで、変数の分布に対して量子化可能な変数を動的に選択し、量子化対象とする変数を選択する。
【0081】
ここで、量子化可能な変数とは、狭い表現範囲のデータ型で量子化しても量子化誤差が極端に大きくならない変数である。経験則や事前学習で量子化対象の変数を決定するときは量子化可能となる変数は学習の初期からデータの値の分布が広すぎない特定の変数に限られる。対して、例えば、学習の初期では値の変化が大きくデータの値の分布が広くなるが、学習が進むにつれてデータの値の分布の広がりが収まっていく傾向の変数がある。例えば、2つの変数の乗算を実行する層では、分布の変動が演算実行前後で大きく変化しない場合がある。
【0082】
第1実施形態にかかる学習における量子化対象の決定を行うことによって、例えば、学習の進捗に合わせて量子化対象とする変数を増やすことが可能となり、NNの認識精度の維持と演算量の低減を両立することができる。
【0083】
ここで、変数のデータの値の分布に基づいて量子化可能なケースと量子化できないケースについて
図17~
図20を用いて説明する。
【0084】
図17は、学習において演算結果データの値の分布が広すぎない場合の量子化処理を説明する図である。
図17は、ヒストグラムで表される複数の演算結果データの値の分布において、
図17下部に示される量子化範囲で飽和処理又は丸め処理を行った場合の複数の演算結果データの値の分布の変化を示す。a
iは、有効最上位ビットの桁の重みを示す。a
iは、例えば、2
n-2、2
n-1、2
n、2
n+1、2
n+2のようにべき乗(2の対数値)の値をそれぞれ有する。b
iは、複数の演算結果データのうち有効最上位ビットがa
iの桁に分布するデータの数を示す。
図17のヒストグラムの分布の広がりはa
1~a
11であり、量子化範囲はa
3~a
9である。ここで、a
1~a
11に有効最上位ビットが分布する複数の演算結果データの値の分布についてa
3~a
9の量子化範囲で飽和処理又は丸め処理を行うと、a
1、a
2に有効最上位ビットが分布するデータは、飽和処理により量子化範囲の最大値a
3の値を有するデータに変更され、a
10、a
11に有効最上位ビットが分布するデータは丸め処理により量子化範囲の最小値a
9の値を有するデータとなる。
図17に示される点線の長方形は飽和処理又は丸め処理の対象となったヒストグラムのビンを示し、網掛けの長方形は飽和処理又は丸め処理されたヒストグラムのビンを示し、これらは量子化誤差に対応する。量子化誤差を量子化前後の値の差分で表す場合、量子化誤差はa
iとb
iを用いて下記式(1)で表される。ここで、Wは量子化前の変数のベクトル、W
Qは量子化後の変数のベクトルを表す。
【0085】
【0086】
また、量子化誤差は、量子化範囲から外れるa1、a2、a10、a11のデータについてのみ計算することで、下記式(2)で近似して表されても良い。
【0087】
【0088】
表現範囲内の誤差は量子化範囲から外れるa1、a2、a10、a11のデータについての誤差よりも十分小さいため、近似した量子化誤差を用いることで、認識精度を維持しつつ量子化誤差算出にかかる演算量を低減させることができる。
【0089】
また、量子化誤差として二乗誤差を用いても良く、下記式(3)で表される。
【0090】
【0091】
図18は、学習において演算結果データの値の分布が広すぎる場合の量子化処理を説明する図である。
図18のヒストグラムの分布の広がりは
図17に示すヒストグラムの分布、すなわちa
1~a
11より広く、
図18中の3点リーダは図示されたビンの分布の外側に表される1個以上の他のビンを省略していることを示すものである。量子化範囲は
図17と同様にa
3~a
9である。ここで、演算結果データの値の分布についてa
3~a
9の量子化範囲で飽和処理又は丸め処理を行うと、a
1、a
2と、a
1の外側の範囲のデータが飽和処理により量子化範囲の最大値a
3の値を有するデータとなる。また、a
10、a
11と、a
10の外側の範囲のデータが丸め処理により量子化範囲の最小値a
9の値を有するデータとなる。
図18に示される点線の長方形は飽和処理又は丸め処理の対象となったヒストグラムのビンを示し、網掛けの長方形は飽和処理又は丸め処理されたヒストグラムのビンを示し、これらは量子化誤差に対応する。網掛けの長方形は、
図17に対して面積が大きくなっている。このことから、飽和処理又は丸め処理の対象となるデータの数が多くなっていることが示され、量子化誤差が極端に大きくなることが分かる。
【0092】
図19は、第1実施形態における学習において演算結果データの値の分布が広すぎない場合に飽和処理又は丸め処理を行った場合の量子化誤差を示す図である。
図19のグラフは、学習回数と量子化誤差の関係を示し、縦軸は算出された量子化誤差の大きさ、横軸はNNの学習回数を示す。
図19のグラフ中の点線は、所定の閾値を示すものである。
【0093】
図20は、第1実施形態における学習において演算結果データの値の分布が広すぎる場合に飽和処理又は丸め処理を行った場合の学習回数と量子化誤差の関係を示す図である。
図20の点線は、
図19と対応する位置に所定の閾値を示すものである。
【0094】
図19に示される量子化誤差の大きさは閾値未満となり、
図20に示される量子化誤差の大きさは閾値以上となる。演算結果データの値の分布が広すぎない場合には、量子化範囲から外れる飽和・丸め対象となるデータ数が少なくなり、量子化誤差が大きくならない。一方で、演算結果データの値の分布が広い場合には、量子化範囲から外れる飽和・丸め対象となるデータ数が多くなり、量子化誤差が大きくなる。
【0095】
第1実施形態にかかるNNの学習を説明したが、学習処理に限られるものではなく、統計情報に基づいて算出された量子化誤差に基づいてデータ型を決定することはNNの推論についても適用することができる。
【0096】
[固定小数点NNプロセッサの構成と統計情報の取得]
次に、第1実施形態にかかるNNプロセッサ43の構成と統計情報の取得について説明する。
【0097】
図21は、NNプロセッサ43の構成例を示す図である。NNプロセッサ43は、命令制御部INST_CONと、レジスタファイルREG_FLと、特別レジスタSPC_REGと、スカラー演算ユニットSC_AR_UNIT、ベクトル演算ユニットVC_AR_UNITと、統計情報集約器ST_AGR_1、ST_AGR_2とを有する。
【0098】
NNプロセッサ43は、ベクトル演算ユニットVC_AR_UNIT内に固定小数点数を演算する整数演算器INTと、浮動小数点数を演算する浮動小数点演算器FPとを有する。つまり、NNプロセッサ43は、固定小数点演算を実行するNNプロセッサ43_1と浮動小数点演算を実行するNNプロセッサ43_2とを有する。
【0099】
また、NNプロセッサ43には、メモリアクセスコントローラ44を介して、命令用メモリ45_1とデータ用メモリ45_2とが接続される。メモリアクセスコントローラ44は、命令用メモリアクセスコントローラ44_1と、データ用メモリアクセスコントローラ44_2とを有する。
【0100】
命令制御部INST_CONは、例えば、プログラムカウンタPCと、命令デコーダDECを有する。命令制御部INST_CONは、プログラムカウンタPCのアドレスに基づいて命令を命令用メモリ45_1からフェッチし、命令デコーダDECがフェッチした命令をデコードし、演算ユニットに発行する。
【0101】
レジスタファイルREG_FLは、スカラー演算ユニットSC_AR_UNITが使用する、スカラーレジスタファイルSC_REG_FLとスカラーアキュムレートレジスタSC_ACCとを有する。さらに、レジスタファイルREG_FLは、ベクトル演算ユニットVC_AR_UNITが使用する、ベクトルレジスタファイルVC_REG_FLと、ベクトルアキュムレートレジスタVC_ACCとを有する。
【0102】
スカラーレジスタファイルSC_REG_FLは、例えば、それぞれ32ビットのスカラーレジスタSR0-SR31と、例えば、それぞれ32ビット+αビットのスカラーアキュムレートレジスタSC_ACCとを有する。
【0103】
ベクトルレジスタファイルVC_REG_FLは、例えば、それぞれ32ビットのレジスタを8要素の数有するREGn0-REGn7を、8セット有する。また、ベクトルアキュムレートレジスタVC_ACCは、例えば、それぞれ32ビット+αビットのレジスタを8要素の数有するA_REG0-A_REG7を有する。
【0104】
スカラー演算ユニットSC_AR_UNITは、1組の整数演算器INTと、データ変換器D_CNVと、統計情報取得器ST_ACとを有する。データ変換器D_CNVは、整数演算器INTが出力する固定小数点数の出力データを浮動小数点数に変換する。スカラー演算ユニットSC_AR_UNITは、スカラーレジスタファイルSC_REG_FL内のスカラーレジスタSR0-SR31とスカラーアキュムレートレジスタSC_ACCとを使用して演算を実行する。例えば、整数演算器INTは、スカラーレジスタSR0-SR31のいずれかに格納されている入力データを演算し、その出力データを別のレジスタに格納する。また、整数演算器INTは、積和演算を実行する場合、積和演算の結果をスカラーアキュムレートレジスタSC_ACCに格納する。スカラー演算ユニットSC_AR_UNITの演算結果は、スカラーレジスタファイルSC_REG_FL、スカラーアキュムレートレジスタSC_ACC、データ用メモリ45_2のいずれかに格納される。
【0105】
ベクトル演算ユニットVC_AR_UNITは、8要素(エレメント)の演算ユニットEL0-EL7を有する。各エレメントEL0-EL7は、整数演算器INTと、浮動小数点演算器FPと、データ変換器D_CNVとを有する。ベクトル演算ユニットVC_AR_UNITは、例えば、ベクトルレジスタファイルVC_REG_FL内のいずれかのセットの8エレメントのレジスタREGn0-REGn7を入力し、8エレメントの演算器で演算を並列に実行し、その演算結果を他のセットの8エレメントのレジスタREGn0-REGn7に格納する。
【0106】
また、データ変換器D_CNVは、演算の結果、データ用メモリ45_2からの読み出し結果等で得られる固定小数点数データをシフトする。データ変換器D_CNVは、命令デコーダDECがフェッチした命令に指定されるシフト量Sだけ固定小数点数データをシフトする。データ変換器D_CNVによるシフトは、固定小数点数のフォーマットに対応した小数点位置を調整することに相当する。また、データ変換器D_CNVは、シフトとともに、固定小数点数データの上位ビットの飽和処理及び下位ビットの丸め処理を実行する。データ変換器D_CNVは、例えば、入力を40ビットの演算結果とし、下位ビットを小数部として丸め処理を行う丸め処理部と、算術シフトを実行するシフタと飽和処理を行う飽和処理部を有する。
【0107】
そして、データ変換器D_CNVは、左シフト時、上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビット廃棄し、下位ビットに0を埋め込む。また、データ変換器D_CNVは、右シフト時、上位ビット(符号ビットより下位のビット)に符号ビットを埋め込む。そして、データ変換器D_CNVは、上記のように丸め処理、シフト、飽和処理によって得られるデータを、レジスタファイルREG_FLのレジスタと同一のビット幅で出力する。データ変換部は固定小数点数データの小数点位置を調整する回路の一例である。
【0108】
また、ベクトル演算ユニットVC_AR_UNITは、8エレメントの演算器でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレートレジスタVC_ACCの8エレメントのレジスタA_REG0-A_REG7に格納する。
【0109】
ベクトルレジスタREGn0-REGn7及びベクトルアキュムレートレジスタA_REG0-A_REG7は、演算対象データのビット幅が32ビット、16ビット、8ビットかに応じて、演算エレメント数が8、16、32と増加する。
【0110】
ベクトル演算ユニットVC_AR_UNITは、8エレメントの整数演算器INTの出力データの統計情報をそれぞれ取得する8つの統計情報取得器ST_ACを有する。統計情報は、整数演算器INTの出力データの非符号となる最上位ビットの位置情報である。統計情報は、後述する
図24で説明するビットパターンBPとして取得される。統計情報取得器ST_ACは、整数演算器INTの出力データに加えて、データ用メモリ45_2内のデータや、スカラーレジスタファイルSC_REG_FLやスカラーアキュムレートレジスタSC_ACC内のデータを入力し、その統計情報を取得するようにしてもよい。
【0111】
統計情報レジスタファイルST_REG_FLは、後述する
図27に示すとおり、例えばそれぞれ32ビット×40エレメントの統計情報レジスタSTRn_0-STRn_39を、例えば8セット有する。
【0112】
スカラーレジスタSR0-SR31には、例えば、アドレスやNNの変数等が格納される。また、ベクトルレジスタREG00-REG77には、ベクトル演算ユニットVC_AR_UNITの入力データや出力データが格納される。そして、ベクトルアキュムレートレジスタVC_ACCには、ベクトルレジスタ同士の乗算結果や加算結果が格納される。
【0113】
統計情報レジスタSTR0_0-STR0_39-STR7_0-STR7_39には、最大で8種類のヒストグラムの複数のビンに属するデータの数が格納される。整数演算器INTの出力データが40ビットの場合、40ビットそれぞれに非符号となる最上位ビットを有するデータ数が、例えば、統計情報レジスタSTR0_0-STR0_39に格納される。
【0114】
スカラー演算ユニットSC_AR_UNITは、四則演算、シフト演算、分岐、ロード・ストア等を有する。前述したとおり、スカラー演算ユニットSC_AR_UNITは、整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【0115】
ベクトル演算ユニットVC_AR_UNITは、浮動小数点演算、整数演算、ベクトルアキュムレートレジスタVC_ACCを用いた積和演算等を実行する。また、ベクトル演算ユニットVC_AR_UNITは、ベクトルアキュムレートレジスタVC_ACCのクリア、積和演算、累積加算、ベクトルレジスタファイルVC_REG_FLへの転送等を実行する。さらに、ベクトル演算ユニットVC_AR_UNITは、ロードとストアも実行する。前述したとおり、ベクトル演算ユニットVC_AR_UNITは、8エレメントそれぞれの整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【0116】
[統計情報の取得、集約、格納]
次に、NNプロセッサ43による、演算結果データの統計情報の取得、集約、格納について、説明する。統計情報の取得、集約、格納は、ホストプロセッサ31から送信される命令であり、NNプロセッサ43が実行する命令をトリガにして実行される。したがって、ホストプロセッサ31は、NNの各層の演算命令に加えて、統計情報の取得、集約、格納を実行する命令を、NNプロセッサ43に送信する。または、ホストプロセッサ31は、各層の演算のために、統計情報の取得、集約、格納の処理付の演算命令をNNプロセッサ43に送信する。
【0117】
図22は、NNプロセッサ43による統計情報の取得、集約、格納の処理を示すフローチャートの図である。まず、ベクトル演算ユニットVC_AR_UNIT内の8つの統計情報取得器ST_ACが、整数演算器INTが出力する各層の演算による演算結果データの非符号となる最上位ビット位置を示すビットパターンをそれぞれ出力する(S170)。ビットパターンについては、後述する。
【0118】
次に、統計情報集約器ST_AGR_1が、8つのビットパターンの各ビットの「1」を加算して集約する(S171)。
【0119】
さらに、統計情報集約器ST_AGR_2が、統計情報レジスタファイルST_REG_FL内の統計情報レジスタ内の値に、S171で加算して集約した値を加算し、統計情報レジスタに格納する(S172)。
【0120】
上記の処理S170、S171、S172は、ベクトル演算ユニットVC_AR_UNIT内の8つのエレメントEL0-EL7による各層の演算の結果である演算結果データが生成されるたびに、繰り返される。
【0121】
学習の処理では、K回のミニバッチ内の複数の演算結果データについて、上記の統計情報の取得、集約、格納処理が完了すると、統計情報レジスタファイルST_REG_FLには、K回のミニバッチ内の複数の演算結果データの非符号となる最上位ビットのヒストグラムの各ビンの数である統計情報が生成される。これにより、K回のミニバッチ内の演算結果データの非符号となる最上位ビットの位置の合計が、ビット別に集計される。この統計情報に基づいて、各演算結果データの小数点位置が調整される。
【0122】
各層の演算結果データの小数点位置の調整は、例えば、ホストマシン30のホストプロセッサ31によって行われる。統計情報レジスタSTR0_0-STR0_39に格納される各層の統計情報がホストマシン30のデータ用メモリ45_2に書き込まれ、ホストプロセッサ31は演算を行い
図22にて説明される処理を実行する。ホストプロセッサ31は、新たに決定した小数点位置と現在の小数点位置との差分を求め、シフト量Sとしてデータ用メモリ45_2に書き込む。
【0123】
[統計情報の取得]
図23は、統計情報取得器ST_ACの論理回路例を示す図である。また、
図24は、統計情報取得器ST_ACが取得する演算結果データのビットパターンBPを示す図である。統計情報取得器ST_ACは、整数演算器INTが出力するNビット(N=40)の演算結果データ(例えば順伝播処理では畳み込み演算の演算結果データ、逆伝播処理では誤差や重みの更新差分)in[39:0]を入力し、非符号となる最上位ビットの位置を「1」で示しそれ以外を「0」で示すビットパターン出力out[39:0]を出力する。
【0124】
図24に示されるとおり、統計情報取得器ST_ACは、演算結果データである入力in[39:0]について、非符号(符号ビットと異なる1または0)となる最上位ビットの位置で「1」をとり、それ以外の位置で「0」をとる出力out[39:0]をビットパターンBPとして出力する。但し、入力in[39:0]の全ビットが、符号ビットと同じ場合は、例外的に最上位ビットを「1」にする。
図24に、統計情報取得器ST_ACの真理値表が示される。
【0125】
この真理値表によれば、最初の2行は、入力in[39:0]の全ビットが符号ビット「1」、「0」と一致する例であり、出力out[39:0]の最上位ビットout[39]が「1」(0x8000000000)である。次の2行は、入力in[39:0]の38ビットin[38]が符号ビット「1」、「0」と異なる例であり、出力out[39:0]の38ビットout[38]が「1」、それ以外が「0」である。最も下の2行は、入力in[39:0]の0ビットin[0]が符号ビット「1」、「0」と異なる例であり、出力out[39:0]の0ビットout[0]が「1」、それ以外が「0」である。
【0126】
図23に示す論理回路図は、以下のようにして非符号である最上位ビットの位置を検出する。まず、符号ビットin[39]とin[38]が不一致の場合、EOR38の出力が「1」となり、出力out[38]が「1」になる。EOR38の出力が「1」となると、論理和OR37-OR0と論理積AND37-AND0、反転ゲートINVにより、他の出力out[39]、out[38:0]は「0」となる。
【0127】
また、符号ビットin[39]がin[38]と一致、in[37]と不一致の場合、EOR38の出力が「0」、EOR37の出力が「1」となり、出力out[37]が「1」になる。EOR37の出力が「1」となると、論理和OR36-OR0と論理積AND36-AND0、反転ゲートINVにより、他の出力out[39:38]、out[36:0]は「0」となる。以下、同様である。
【0128】
図23、
図24から理解できるとおり、統計情報取得器ST_ACは、演算結果である演算結果データの符号ビットと異なる「1」または「0」の最上位ビットの位置を含む分布情報をビットパターンBPとして出力する。
【0129】
[統計情報の集約]
図25は、統計情報集約器ST_AGR_1の論理回路例を示す図である。また、
図26は、統計情報集約器ST_AGR_1の動作を説明する図である。統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITで取得される8つの統計情報であるビットパターンBP_0-BP_7を入力し、8つのビットパターンBP_0-BP_7の各ビットの「1」を加算した出力out[0]-out[39]を出力する。ビットパターンBP_0-BP_7は、それぞれ40ビットであり、out[0]-out[39]は、例えば、それぞれ4ビットである。
【0130】
図25の論理回路に示すとおり、統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITの統計情報取得器ST_ACそれぞれが取得した各ビットパターンBP_0-BP_7の各ビットの「1」を、加算回路SGM_0-SGM_39で加算し、加算結果を出力out[0]-out[39]として生成する。
図26の出力に示されるとおり、出力はout[0]-out[39]である。出力の各ビットは、要素数をカウントできるようにlog
2(要素数=8)+1ビットであり、要素数が8の場合は4ビットとなる。
【0131】
統計情報集約器ST_AGR_1は、スカラー演算ユニットSC_AR_UNIT内の統計情報取得器ST_ACが取得した1つのビットパターンBPをそのまま出力することもできる。そのために、加算回路SGM_0-SGM_39の出力か、スカラー演算ユニットSC_AR_UNITのビットパターンBPかのいずれかを選択するセレクタSELを有する。
【0132】
図27は、第2の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。第2の統計情報集約器ST_AGR_2は、第1の統計情報集約器ST_AGR_1が集約した出力out[0]-out[39]の各ビットの値を、統計情報レジスタファイルST_REG_FL内の1つのレジスタセットの値に加算し、格納する。
【0133】
統計情報レジスタファイルST_REG_FLは、例えば、40個の32ビットレジスタSTRn_39-STRn_0を8セット(n=0~7)有する。したがって、8種類のヒストグラムのそれぞれ40ビンの数を格納できる。今仮に、集約対象の統計情報がn=0の40個の32ビットレジスタSTR0_39-STR0_0に格納されるとする。第2の統計情報集約器ST_AGR_2は、40個の32ビットレジスタSTR0_39-STR0_0に格納される累積加算値それぞれに、第1の統計情報集約器ST_AGR_1が集計した集約値in[39:0]のそれぞれの値を加算する加算器ADD_39-ADD_0を有する。そして、加算器ADD_39-ADD_0の出力が、40個の32ビットレジスタSTR0_39-STR0_0に再格納される。これにより、40個の32ビットレジスタSTR0_39-STR0_0に、対象のヒストグラムの各ビンのサンプル数が格納される。
【0134】
図21、
図23、
図25、
図27に示した演算ユニット内に設けられた統計情報取得器ST_AC、統計情報集約器ST_AGR_1、ST_AGR_2のハードウエア回路により、NNの各層で演算される演算結果データの非符号となる最上位ビットの位置(有効ビットの最上位ビットの位置)の分布(ヒストグラムの各ビンのサンプル数)を取得することができる。
【0135】
非符号となる最上位ビットの位置の分布以外に、非ゼロとなる最下位ビットの位置の分布についても、上記と同様の方法でNNプロセッサ43のハードウエア回路により取得できる。さらに、非符号となる最上位ビット位置の最大値、非ゼロとなる最下位ビット位置の最小値も同様に取得できる。
【0136】
NNプロセッサ43のハードウエア回路により統計情報を取得できるので、学習での演算結果データの固定小数点位置の調整を、わずかな工数の増加で実現できる。
【符号の説明】
【0137】
30:ホストマシン
31:ホストプロセッサ
32:高速入出力インターフェース
33:メインメモリ
34:内部バス
35:補助記憶装置
36:低速入出力インターフェース
40:NN実行マシン
41:高速入出力インターフェース
42:制御部
43:NNプロセッサ
43_1:固定小数点演算を実行するNNプロセッサ
43_2:浮動小数点演算を実行するNNプロセッサ
44:メモリアクセスコントローラ
44_1:命令用メモリアクセスコントローラ
44_2:データ用メモリアクセスコントローラ
45:内部メモリ
45_1:命令用メモリ
45_2:データ用メモリ
50:利用者端末
INST_CON:命令制御部
PC:プログラムカウンタ
DEC:命令デコーダ
REG_FL:レジスタファイル
SPC_REG:特別レジスタ
SC_REG_FL:スカラーレジスタファイル
SC_ACC:スカラーアキュムレートレジスタ
VC_REG_FL:ベクトルレジスタファイル
VC_ACC:ベクトルアキュムレートレジスタ
ST_REG_FL:統計情報レジスタファイル
SC_AR_UNIT:スカラー演算ユニット
VC_AR_UNIT:ベクトル演算ユニット
INT:整数演算器
FP:浮動小数点演算器
ST_AC:統計情報取得器
D_CNV:データ変換器
SEL:セレクタ
BP:ビットパターン
ST_AGR_1、ST_AGR_2:統計情報集約器