(57)【要約】【課題】正規化演算を高速化する演算処理装置、学習プログラム及び学習方法を提供する。【解決手段】  演算器と、演算器が出力する演算出力データを格納するレジスタと、演算出力データまたは被正規化データのいずれかの対象データから、対象データの非符号となる最上位ビットの位置を示すビットパターンを生成する統計取得部と、正の符号ビットを持つ複数の対象データのビットパターンが示す非符号となる最上位ビットの位置の各ビットの第１の数と、負の符号ビットを持つ複数の対象データのビットパターンが示す非符号となる最上位ビットの位置の各ビットの第２の数とを、それぞれ別々に加算し、正の統計情報または負の統計情報、または正及び負の統計情報の両方を生成する統計集約部とを有する、演算処理装置。【選択図】図１７
2020067897.tif 000002
【特許請求の範囲】
【請求項１】
演算器と、
前記演算器が出力する演算出力データを格納するレジスタと、
前記演算出力データまたは被正規化データのいずれかの対象データから、前記対象データの非符号となる最上位ビットの位置を示すビットパターンを生成する統計取得部と、
正の符号ビットを持つ複数の対象データの前記ビットパターンが示す前記非符号となる最上位ビットの位置の各ビットの第１の数と、負の符号ビットを持つ複数の対象データの前記ビットパターンが示す前記非符号となる最上位ビットの位置の各ビットの第２の数とを、それぞれ別々に加算し、正の統計情報または負の統計情報、または正及び負の統計情報の両方を生成する統計集約部とを有する、演算処理装置。
【請求項２】
前記統計集約部は、正の符号ビットを持つ複数の対象データ及び負の符号ビットを持つ複数の対象データそれぞれの前記ビットパターンが示す前記非符号となる最上位ビットの位置の各ビットの第３の数を加算し、正及び負のトータル統計情報を生成する、請求項１に記載の演算処理装置。
【請求項３】
前記統計集約部は、正の符号ビット、負の符号ビットのいずれかを示す制御ビットに基づいて、前記第１の数または前記第２の数を加算し、正の統計情報または負の統計情報を生成する、請求項１に記載の演算処理装置。
【請求項４】
前記演算器は、ディープ・ニューラルネットワークの入力層の複数のノードそれぞれの入力データに、前記入力層と出力層の間の前記ノードに対応するエッジの重みを乗算して乗算値を求め、前記乗算値を累積加算して前記出力層の複数のノードに前記演算出力データをそれぞれ算出し、
前記統計取得部は、前記演算器が算出する前記演算出力データについて、前記ビットパターンを生成し、
前記演算器は、前記演算出力データを前記レジスタに格納する、請求項１に記載の演算処理装置。
【請求項５】
前記演算器は、前記演算出力データを、前記正の統計情報及び負の統計情報が有する前記非符号となる最上位ビットの位置に対応する近似値に置き換えて、前記第1の数及び第２の数に基づいて、前記演算出力データの平均値を算出する、請求項１に記載の演算処理装置。
【請求項６】
前記演算器は、前記演算出力データを前記非符号となる最上位ビットの位置に対応する近似値に置き換えて前記演算出力データの分散値を算出する、請求項５に記載の演算処理装置。
【請求項７】
前記演算器は、前記演算出力データから前記平均値を減算し、前記減算した値を前記分散値の平方根で除算して、前記演算出力データの正規化演算を行う、請求項６に記載の演算処理装置。
【請求項８】
前記演算器は、前記被正規化データを、前記正の統計情報及び負の統計情報が有する前記非符号となる最上位ビットの位置に対応する近似値に置き換えて、前記第1の数及び第２の数に基づいて、前記被正規化データの平均値を算出する、請求項１に記載の演算処理装置。
【請求項９】
前記演算器は、前記被正規化データを前記非符号となる最上位ビットの位置に対応する近似値に置き換えて前記被正規化データの分散値を算出する、請求項８に記載の演算処理装置。
【請求項１０】
前記演算器は、前記被正規化データから前記平均値を減算し、前記減算した値を前記分散値の平方根で除算して、前記被正規化データの正規化演算を行う、請求項９に記載の演算処理装置。
【請求項１１】
ディープ・ニューラルネットワークの学習処理をコンピュータに実行させるコンピュータ読み取り可能な学習プログラムであって、前記学習処理は、
演算器が出力する複数の演算出力データまたは被正規化データのいずれかの対象データの非符号となる最上位ビットの位置の各ビットの数を各ビンの数とするヒストグラムの統計データをメモリから読み出し、
各ビンに属する前記対象データを、前記非符号となる最上位ビットの位置に対応する近似値に置き換えて、前記対象データの平均値及び分散値を算出し、
前記平均値及び分散値に基づいて、前記対象データの正規化演算を行う、ことを有する学習プログラム。
【請求項１２】
ディープ・ニューラルネットワークの学習処理をプロセッサに実行させる学習方法であって、前記学習処理は、
演算器が出力する複数の演算出力データまたは被正規化データのいずれかの対象データの非符号となる最上位ビットの位置の各ビットの数を各ビンの数とするヒストグラムの統計データをメモリから読み出し、
各ビンに属する前記対象データを、前記非符号となる最上位ビットの位置に対応する近似値に置き換えて、前記対象データの平均値及び分散値を算出し、
前記平均値及び分散値に基づいて、前記対象データの正規化演算を行う、ことを有する学習方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、学習プログラム及び学習方法に関する。
【背景技術】
【０００２】
深層学習（Deep Learning、以下DLと称する）は、多層のニューラルネットワークを用いた機械学習である。ディープ・ニューラルネットワーク（Deep Neural Network、以下DNNと称する）は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、１または複数のノードを持ち、各ノードは値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアスと呼ばれる変数（パラメータ）を持つ。
【０００３】
DNNにおいて、各層のノードの値は、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力として次の層のノードの値が別の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【０００４】
DNNにおいて、前の層の出力データをその平均と分散に基づいて正規化する正規化層を、前の層との間に挿入し、学習処理単位（ミニバッチ）毎に出力データを正規化するバッチノーマライゼーション（バッチ正規化）が行われる。正規化層を挿入することで、出力データの分布の偏りが補正されるため、NDD全体の学習が効率的に進行する。例えば、画像データを入力データとするDNNは、しばしば、畳み込み演算を行う畳み込み層（コンボリューション層）の後ろに正規化層を有する。
【０００５】
また、DNNにおいて、入力データを正規化することも行われる。この場合、入力層の直後に正規化層を設け、学習単位毎に入力データを正規化し、正規化された入力データについて学習を実行する。これにより、入力データの分布の偏りが補正され、DNN全体の学習が効率的に進行する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−１２０６０９号公報
【特許文献２】特開平０７−１２１６５６号公報
【特許文献３】特開２０１８−１２４６８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年のDNNでは、DNNの認識性能を向上させるために学習データが増加する傾向にある。そのため、DNNの計算負荷が増大し、学習時間の増加と、DNNの演算を実行するコンピュータのメモリの負荷の増大が課題となっている。
【０００８】
この課題は、正規化層の演算負荷にも同様に当てはまる。例えば、除算正規化の演算では、データの値の平均を求め、平均に基づいてデータの値の分散を求め、データの値に対して平均と分散に基づく正規化演算を行う。学習データの増加に伴い、ミニバッチ数が増大すると、正規化演算の計算負荷の増大が学習時間の増加等を招くことになる。
【０００９】
そこで，本実施の形態の第1の側面の目的は，正規化演算を高速化する演算処理装置、学習プログラム及び学習方法を提供することにある。
【課題を解決するための手段】
【００１０】
本実施の形態の第１の側面は，演算器と、
前記演算器が出力する演算出力データを格納するレジスタと、
前記演算出力データまたは被正規化データのいずれかの対象データから、前記対象データの非符号となる最上位ビットの位置を示すビットパターンを生成する統計取得部と、
正の符号ビットを持つ複数の対象データの前記ビットパターンが示す前記非符号となる最上位ビットの位置の各ビットの第１の数と、負の符号ビットを持つ複数の対象データの前記ビットパターンが示す前記非符号となる最上位ビットの位置の各ビットの第２の数とを、それぞれ別々に加算し、正の統計情報または負の統計情報、または正及び負の統計情報の両方を生成する統計集約部とを有する、演算処理装置である。
【発明の効果】
【００１１】
第１の側面によれば，正規化演算を高速化することができる。
【図面の簡単な説明】
【００１２】
【図１】ディープ・ニューラルネットワーク（DNN）の構成例を示す図である。
【図２】DNNの学習処理の一例のフローチャートを示す図である。
【図３】畳み込み層の演算を説明する図である。
【図４】畳み込み演算の演算式を示す図である。
【図５】全結合層の演算を説明する図である。
【図６】バッチ正規化層での正規化を説明する図である。
【図７】ミニバッチ正規化演算のフローチャートを示す図である。
【図８】本実施の形態における畳み込み層とバッチ正規化層（１）の処理を示すフローチャートである。
【図９】統計情報を説明する図である。
【図１０】本実施の形態におけるバッチ正規化処理のフローチャートを示す図である。
【図１１】本実施の形態における畳み込み層とバッチ正規化層の処理をベクトル演算器により行うフローチャートを示す図である。
【図１２】本実施の形態における畳み込み層とバッチ正規化層の処理を別々に行うフローチャートを示す図である。
【図１３】本実施の形態におけるディープラーニング（DL）システムの構成例を示す図である。
【図１４】ホストマシン３０の構成例を示す図である。
【図１５】DL実行マシンの構成例を示す図である。
【図１６】ホストマシンとDL実行マシンによるディープラーニング処理の概略を示すシーケンスチャートの図である。
【図１７】DL実行プロセッサ４３の構成例を示す図である。
【図１８】図１７のDL実行プロセッサにより実行される畳み込み演算と正規化演算のフローチャートを示す図である。
【図１９】図１８の畳み込み演算と統計情報の更新の処理S51の詳細を示すフローチャート図である。
【図２０】DL実行プロセッサによる統計情報の取得、集約、格納の処理を示すフローチャートの図である。
【図２１】統計情報取得器ST_ACの論理回路例を示す図である。
【図２２】統計情報取得器が取得する演算出力データのビットパターンを示す図である。
【図２３】統計情報集約器ST_AGR_1の論理回路例を示す図である。
【図２４】統計情報集約器ST_AGR_1の動作を説明する図である。
【図２５】第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルの例を示す図である。
【図２６】DL実行プロセッサによる平均の演算処理の一例を示すフローチャートの図である。
【図２７】DL実行プロセッサによる分散の演算処理の一例を示すフローチャートの図である。
【発明を実施するための形態】
【００１３】
図１は、ディープ・ニューラルネットワーク（DNN）の構成例を示す図である。図１のDNNは、例えば、画像を入力し、入力画像の内容（例えば数字）に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。DNNは、入力層１０、畳み込み層１１、バッチ正規化層１２、活性化関数層１３、畳み込み層などの隠れ層１４、全結合層１５、バッチ正規化層１６，活性化関数層１７，隠れ層１８，全結合層１９、ソフトマックス関数層２０を有する。ソフトマックス関数層２０は出力層に対応する。各層は、単数または複数のノードを有する。畳み込み層の出力側にプーリング層が挿入される場合もある。
【００１４】
畳み込み層１１は、入力層１０内の複数のノードに入力された例えば画像の画素データに、ノード間の重み等を積和演算して、畳み込み層１１内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。
【００１５】
バッチ正規化層１２は、畳み込み層１１内の複数のノードに出力された出力画像の画素データを正規化して例えば分布の偏りを抑制する。そして、活性化関数層１３は、正規化された画素データを活性化関数に入力し、その出力を生成する。バッチ正規化層１６も同様の正規化演算を行う。
【００１６】
前述したとおり、出力画像の画素データの分布を正規化することで、画素データの分布の偏りが補正され、DNN全体の学習が効率的に進行する。
【００１７】
図２は、DNNの学習処理の一例のフローチャートを示す図である。学習処理は、例えば、入力データと、入力データをDNNに入力して算出される出力の正解データとを有する複数の教師データを使用して、DNN内の重み等のパラメータを最適化する。図２の例は、ミニバッチ法により、複数の教師データを複数のミニバッチに分割し、各ミニバッチの複数の教師データの入力データを入力し、それぞれの入力データに対してDNNが出力した出力データと正解データとの差分（誤差）の二乗和がなるべく小さくなるように重み等のパラメータを最適化する。
【００１８】
図２に示されるとおり、事前の準備として、複数の教師データを並び替え（S1）、並び替えた複数の教師データを複数のミニバッチに分割する（S2）。そして、学習処理は、分割した複数のミニバッチそれぞれに対して（S3のNO）、順伝播処理S4と、誤差評価S5と、逆伝播処理S6と、パラメータ更新処理S7とを繰り返す。全てのミニバッチの処理が終了すると（S3のYES）、学習処理は、学習率を更新し（S8）、指定回数に達するまで（S9のNO）、同じ教師データについて、処理S1-S7を繰り返し実行する。
【００１９】
また、指定回数に達するまで同じ学習データで所定S1-S7を繰り返すことに代えて、学習結果の評価値、例えば、出力データと正解データとの差分（誤差）の二乗和が一定の範囲に収まったことで、学習処理を終了することも行われる。
【００２０】
順伝播処理S4では、DNNの入力側から出力側に向かって各層の演算が順番に実行される。図１の例で説明すると、畳み込み層１１が、入力層１０に入力された１つのミニバッチが有する複数の教師データの入力データを、エッジの重みで畳み込み演算を行い、複数の演算出力データを生成する。そして、正規化層１２が、複数の演算出力データを正規化し、分布の偏りを補正する。または、隠れ層１４が畳み込み層とすると、正規化された複数の演算出力データを畳み込み演算して複数の演算出力データを生成し、バッチ正規化層１６が同様に正規化処理を行う。上記の演算が、DNNの入力側から出力側に向かって実行される。
【００２１】
次に、誤差評価処理S5は、DNNの出力データと正解データの差分の二乗和を誤差として演算する。そして、誤差をDNNの出力側から入力側に逆伝播する。パラメータ更新処理S7は、逆伝播された各層の誤差をできるだけ小さくするよう、各層の重み等を最適化する。重み等の最適化は勾配降下法により重み等を変化させることで行われる。
【００２２】
DNNは、複数の層をハードウエア回路で構成し、各層の演算をハードウエア回路が実行するようにしてもよい。または、DNNは、DNNの各層の演算を実行するプロセッサに、各層の演算を実行させるプログラムを実行させる構成でもよい。
【００２３】
図３は、畳み込み層の演算を説明する図である。図４は、畳み込み演算の演算式を示す図である。畳み込み層の演算は、例えば、入力画像IMG_inにフィルタWを畳み込む演算を行い、畳み込んだ積和演算結果にバイアスｂを加算する。図３では、Cチャネルの入力画像IMG_inに各フィルタWを畳み込み、各バイアスｂを加算し、Dチャネルの出力画像IMG_outが生成されている。従って、フィルタWとバイアスｂはそれぞれDチャネル分有する。
【００２４】
図４に示される畳み込み演算式によれば、画像番号nのチャネルｃの座標(Y,X)=(j-q+v, i-p+u）の画素の値xn,j-q+v,i-p+u,cに、フィルタWの各画素値（重み）wv,u,c,dを、フィルタサイズV*Uとチャネル数Cだけ積和演算し、バイアスｂdを加算し、チャネル番号ｄの出力画像IMG_outの座標（j,i）の画素値zn,j,i,dを出力する。つまり、画像番号ｎの画像はチャネル数Cの画像を含み、畳み込み演算では、画像番号ｎ毎に、各チャネルの二次元の画素をチャネル数C分積和演算され、画像番号ｎの出力画像が生成される。また、フィルタwとバイスbが複数チャネルｄある場合、画像番号ｎの出力画像はチャネルｄ分の画像を有する。
【００２５】
DNNの入力層にはチャネル数Cの入力画像が入力され、畳み込み層での演算によりフィルタ数d、バイアス数d個の出力画像が出力される。同様に、DNNの中間層に設けられる畳み込み層でも、その前段の層にはチャネル数Cの画像が入力され、畳み込み層での演算によりフィルタ数d、バイアス数d個の出力画像が出力される。
【００２６】
図５は、全結合層の演算を説明する図である。全結合層は、入力側の層の全ノードx0-xcと出力側の層の全ノードz0-zdとがすべて結合し、入力側の層の全ノードの値x0-xcと各結合のエッジの重みwc,dを積和し、それぞれのバイアスbdを加算して、出力側の層の全ノードの値z0-zcを出力する。
【００２７】
図６は、バッチ正規化層での正規化を説明する図である。図６には、正規化前のヒストグラムN1と正規化後のヒストグラムN2とが示される。正規化前のヒストグラムN1は、中心０に対して左側の分布が偏っているが、正規化後のヒストグラムN2は、中心０に対して左右対称の分布になっている。
【００２８】
DNN内において、正規化層は、正規化層の前の層の複数の出力データをその平均と分散に基づいて正規化する層である。図６の例では、平均を０、分散を１にスケーリングする正規化である。そして、バッチ正規化層は、DNNの学習処理単位であるミニバッチ毎に、複数の出力データの平均と分散を演算し、複数の出力データを平均と分散に基づいて正規化する。
【００２９】
図７は、ミニバッチ正規化演算のフローチャートを示す図である。図７の正規化演算は、除算正規化の例である。正規化演算には、除算正規化の他に出力データから出力データの平均を減じる減算正規化もある。
【００３０】
図７において、全学習データが複数のミニバッチに分割される。ミニバッチ内の畳み込み演算の演算出力データの値をxiとし、１つのミニバッチ内の演算出力データの総サンプル数をMとする（S10）。図７の正規化演算では、まず、対象の１つのミニバッチ内の全データxi（i=1〜M）を加算してデータ数Mで除算して、平均μBを求める（S11）。この平均を求める演算では１ミニバッチ内の全データ数M回の加算とMの除算が必要になる。次に、正規化演算では、各データの値xiから平均μBを減じた差分の二乗を求め、二乗の値を累積加算して、分散σ2Bを求める（S12）。この演算では、全データ数M分の減算、二乗の乗算、加算が必要になる。そして、上記の平均μBと分散σ2Bとに基づいて、図示される演算により全出力データそれぞれを正規化する（S13, S14）。この正規化の演算では、全出力データ数M分の減算と除算と、標準偏差を求めるための平方根の演算とが必要になる。
【００３１】
このようにバッチ正規化に必要な演算量が多いので、学習全体の演算量も多くなる。例えば、出力データの数がMの場合、平均を求める演算では、加算がM回、除算が１回必要である。また、分散を求める演算では加算が２M回、乗算がM回、除算が１回必要であり、M個の出力データを平均と分散に基づいて正規化する場合、減算がM回、除算がM回、平方根を求めるのが１回必要になる。
【００３２】
また、画像サイズがH×Hで、チャネル数がDで、バッチ内の画像数がKの場合、正規化対象の出力データの総数は、H*H*D*Kとなるので、上記の演算量は非常に大きくなる。
【００３３】
なお、正規化処理は、DNN内の畳み込み層などの出力データに行う場合以外に、学習データの入力データに行う場合もある。その場合の入力データの総数は、教師データのチャネル数C分の入力画像の画素数H*Hを教師データ数K倍した数になり、H*H*C*Kとなる。
【００３４】
本実施の形態では、演算器による演算出力データまたは入力データのような被正規化データのいずれかを、対象データと称する。本実施の形態では、この対象データの統計情報を取得し、正規化の演算を簡略化する。
【００３５】
［本実施の形態］
以下に説明する実施の形態は、正規化に必要な演算量を減らす方法に関する。
【００３６】
図８は、本実施の形態における畳み込み層とバッチ正規化層（１）の処理を示すフローチャートである。この処理は、ディープラーニング（DL）実行プロセッサにより行われる。ディープラーニングはDNNにより行われる。また、図８の例は、DL実行プロセッサ内のスカラー演算器により実行される例である。
【００３７】
畳み込み層とバッチ正規化層の演算S14は、１ミニバッチ内の全出力画像の各画素の値（出力データ）を求める畳み込み演算を、１ミニバッチ内の出力データ数分繰り返し実行する（S141）。ここで１ミニバッチ内の出力データ数とは、１ミニバッチ内の複数の教師データの各入力画像から生成された全出力画像の画素の数である。
【００３８】
まず、DL実行プロセッサ内のスカラー演算器が、入力画像の画素値である入力データとフィルタの重みとバイアスによる畳み込み演算を実行し、出力画像の１つの画素の値（演算出力データ）を算出する（S142）。次に、DL実行プロセッサが、正の演算出力データと負の演算出力データの統計情報をそれぞれ取得し、取得した正と負の統計情報を取得済みの正と負の統計情報の累積加算値にそれぞれ加算する（S143）。上記の畳み込み演算S142と統計情報の取得及び累積加算S143は、DNN演算プログラムに基づき、DL実行プロセッサのスカラー演算器などのハードウエアにより行う。
【００３９】
１ミニバッチ内の出力データ分の処理S142,S143が終了すると、DL実行プロセッサが、各演算出力データの値を、統計情報の各ビンの近似値に置き換えて、正規化演算を実行し、正規化された出力データを出力する（S144）。同じビンに属する演算出力データの値が近似値に置き換えられるので、近似値とビンに属するデータ数に基づいて、正規化に必要な出力データの平均や分布の演算を簡単に行うことができる。この処理S144は、バッチ正規化層の演算である。
【００４０】
図９は、統計情報を説明する図である。演算出力データの統計情報は、演算出力データXの底を２とする対数（log2X）に基づくヒストグラムの各ビンの数である。本実施の形態では、上記の処理S143で説明したとおり、演算出力データを正の数と負の数に分け、それぞれの集合について、ヒストグラムの各ビンの数を累積加算する。演算出力データXの底を２とする対数（log2X）は、演算出力データXが２進数の場合、出力データXの桁番号（ビット番号）を意味する。したがって、出力データXが２０ビットの２進数の場合、ヒストグラムは２０個のビンを有する。図９にはこの例が示される。
【００４１】
図９は、正または負の演算出力データのヒストグラムの例を示す。ヒストグラムの複数のビンは、横軸が、出力データXの底を２とする対数log2X（出力データのビット番号）に対応し、各ビンの数は、縦軸のサンプル数（演算出力データ数）に対応する。横軸の負の値は、演算出力データの小数点以下の非符号となる最上位ビットに対応し、横軸の正の値は、演算出力データの整数部の非符号となる最上位ビットに対応する。
【００４２】
例えば、横軸のビンの数２０（-8〜+11）は、２進数の演算出力データの２０ビットに対応する。横軸の「３」のビンは、符号ビットを加えた演算出力データ（固定小数点数）の
「0 0000 0000 1000.0000 0000〜0 0000 0000 1111.1111 1111」内のデータが含まれる。この場合、演算出力データの非符号となる最上位ビットの位置が「３」に対応する。「３」のビンの演算出力データの近似値は、例えば「0 0000 0000 1000.0000 0000〜0 0000 0000 1111.1111 1111」内の最小値であるe3（＝１０進数の１０）とする。
【００４３】
ここで、非符号とは、符号ビット０（正）または１（負）とは異なる１または０の意味である。正の数では符号ビットが０であるので非符号は１になる。負の数では符号ビットが１であるので非符号は０になる。
【００４４】
演算出力データが固定小数点表現の場合、ヒストグラムの横軸の各ビンは、非符号となる最上位ビットの位置に対応する。この場合、各演算出力データがどのビンに属するかを検出することは、演算出力ビットの非符号となる最上位ビットを検出するだけであり容易である。一方、演算出力データが浮動小数点表現の場合、ヒストグラムの横軸の各ビンは、仮数部の値（桁数）に対応する。この場合も、各演算出力データがどのビンに属するかを検出するのは容易である。
【００４５】
本実施の形態では、図９に示す出力データの桁に対応するヒストグラムの各ビンの数を統計情報として取得し、正規化処理に必要な出力データの平均や分散を、各ビンの近似値と統計情報（ビン内のデータ数）を使用して求める。具体的には、各ビンに属する出力データを、符号ビットが正なら＋２e+i、負なら−２e+iの近似値に近似する。ここで、iは、非符号となる最上位ビットのビット位置、つまりヒストグラムの横軸の値を示す。各ビンに属する出力データを、前述の近似値で近似することで、平均や分散を求める演算を簡素化することができる。それにより、正規化処理のプロセッサの負荷を軽減でき、学習の処理負荷を軽減でき、学習時間を短くできる。
【００４６】
図９のヒストグラムのビン「３」に属する出力データを全て近似値２３に近似すると、ビン３に属する出力データの値の和は、ビンに属するデータ数が１６４７とすれば、以下の演算で求めることができる。
Σ（23＝＜X＜24）＝1647 * 23
【００４７】
図１０は、本実施の形態におけるバッチ正規化処理のフローチャートを示す図である。まず、バッチ正規化を実行するプロセッサは、ヒストグラムの統計情報を初期値として入力する（S20）。統計情報は、ヒストグラムのスケール（最小ビットの値のべき数）e、ビン数N、出力データの総サンプル数M、i-1番目のビンの正及び負の近似値＋２e+i、−２e+i、正及び負の対象データそれぞれのヒストグラム（ビンに属するデータ数）Sp[N], Sn[N]などである。
【００４８】
正の対象データのヒストグラム（ビンに属するデータ数）Sp[N]は、
2e+i≦X＜2e+i+1
に属するデータの数である。
【００４９】
また、負の対象データのヒストグラム（ビンに属するデータ数）Sn[N]は、
-2e+i+1＜X≦-2e+i
に属するデータの数である。
【００５０】
次に、プロセッサは、ミニバッチのデータの平均を求める（S21）。平均μを求める演算式は、図１０のS21に示される。この演算式では、正及び負の対象データそれぞれのヒストグラム（ビンに属するデータ数）Sp[N], Sn[N]を減じ、近似値２e+iを乗じたものを、１ミニバッチ内のビン数N分加算し、最後に総サンプル数Mで除算する。したがって、プロセッサは、１ミニバッチ内のビン数N分の加算を２回行い（加算を２N回）、乗算を１回行い（乗算をN回）、除算を１回行う。
【００５１】
さらに、プロセッサは、ミニバッチのデータの分散σを求める（S22）。分散を求める演算式は、図１０のS22に示される。この演算式では、正の近似値２e+iから平均μを減じて二乗したものをビン内のデータ数Sp[N]で乗算し、同様に負の近似値-２e+iから平均μを減じて二乗したものをビン内のデータ数Sn[N]で乗算し、互いに加算し、累積する。最後にデータの総サンプル数Mで除算する。したがって、プロセッサは、加減算が４N回、乗算が４N回、除算が１回行う。
【００５２】
そして、プロセッサは、対象データxiを、平均μと分散σに基づいて、図１０中のS23に示した演算式で正規化する（S23、S24）。各データxiの正規化に、減算と除算と、分散から標準偏差を求める平方根の演算が必要であり、プロセッサは、減算、除算、平方根をそれぞれN回行う。
【００５３】
図１１は、本実施の形態における畳み込み層とバッチ正規化層の処理をベクトル演算器により行うフローチャートを示す図である。図８で説明したスカラー演算器により行う処理と異なり、処理S142Aで、ベクトル演算器のN要素それぞれが、入力データ、フィルタの重み、バイアスから、出力画像の各画素の値（出力データ）を算出する。同様に、処理S143Aでベクトル演算器のN要素それぞれの出力データの統計情報を取得し、取得した統計情報を累積加算する。処理S142A,S143Aの処理は、ベクトル演算器が行うことを除くと、図８の処理S142,S143と同じである。
【００５４】
従って、図１１では、ベクトル演算器のN要素が並列に処理S132の演算を実行するので、図８のスカラー演算器による演算より演算時間が短い。
【００５５】
図１２は、本実施の形態における畳み込み層とバッチ正規化層の処理を別々に行うフローチャートを示す図である。図１２は、図８と同様にスカラー演算器により演算をする例である。
【００５６】
図１２では、図８と異なり、プロセッサは、処理S141,S142で、出力画像の各画素の値（出力データ）を求める畳み込み演算を１ミニバッチ内の出力データ数分繰り返す。これらの出力データはそれぞれメモリに記憶される。次に、プロセッサは、処理S141A、S143で、メモリに記憶した出力データを読み出し、出力データの統計情報を取得し、累積加算し、統計情報をレジスタまたはメモリに記憶する。最後に、プロセッサは、処理S144で、各出力データの値を、各ビンの近似値に置き換えて、正規化演算を実行し、正規化された出力データを出力する。正規化された出力データはメモリに記憶される。上記の各処理S142,S143,S144は、図８と同じである。
【００５７】
図１２の畳み込み演算処理S142は、図１１で説明したように、ベクトル演算器のN要素で並列に行っても良い。その場合、処理S143でも、ベクトル演算器のN要素それぞれから出力される畳み込み演算の出力データから統計情報が取得され、集約され、累積加算される。
【００５８】
図１３は、本実施の形態におけるディープラーニング（DL）システムの構成例を示す図である。DLシステムは、ホストマシン３０とDL実行マシン４０とを有し、例えば、専用インターフェースを介してホストマシン３０とDL実行マシン４０とが接続される。また、ホストマシン３０には利用者端末５０がアクセス可能にされ、利用者は、利用者端末５０からホストマシン３０にアクセスし、DL実行マシン４０を操作し、ディープラーニングを実行する。ホストマシン３０は、利用者端末からの指示に従い、DL実行マシンが実行するプログラムを作成し、DL実行マシンに送信する。そして、DL実行マシンは送信されたプログラムを実行し、ディープラーニングを実行する。
【００５９】
図１４は、ホストマシン３０の構成例を示す図である。ホストマシン３０は、プロセッサ３１と、DL実行マシン４０と接続するための高速入出力インターフェース３２と、メインメモリ３３と、内部バス３４とを有する。さらに、内部バス３４に接続された大容量のHDDなどの補助記憶装置３５と、利用者端末５０と接続するための低速入出力インターフェース３６とを有する。
【００６０】
ホストマシン３０は、補助記憶装置３５に記憶されているプログラムがメインメモリ３３に展開されたプログラムを実行する。補助記憶装置３５には、図示されるとおり、DLの実行プログラムと、教師データが記憶される。プロセッサ３１は、DLの実行プログラムと教師データをDL実行マシンに送信し、DL実行マシンに実行させる。
【００６１】
高速入出力インターフェース３２は、例えば、PCI Expressなどのプロセッサ３１とLD実行マシンのハードウエアとを接続するインターフェースである。メインメモリ３３は、プロセッサが実行するプログラムやデータを記憶し、例えば、SDRAMである。
【００６２】
内部バス３４は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース３６は、例えば、USBなど利用者端末のキーボードやマウスとの接続を行い、または、イーサーネットのネットワークとの接続を行う。
【００６３】
図１５は、DL実行マシンの構成例を示す図である。DL実行マシン４０は、ホストマシン３０との通信を中継する高速入出力インターフェース４１と、ホストマシン３０からの指令やデータに基づいて対応する処理を実行する制御部４２とを有する。また、DL実行マシン４０は、DL実行プロセッサ４３と、メモリアクセスコントローラ４４と、内部のメモリ４５を有する。
【００６４】
DL実行プロセッサ４３は、ホストマシンから送信されたDLの実行プログラムとデータに基づいて、プログラムを実行し、ディープラーニングの処理を実行する。高速入出力インターフェース４１は、例えば、PCI Expressであり、ホストマシン３０との通信を中継する。
【００６５】
制御部４２は、ホストマシンから送信されるプログラムやデータをメモリ４５に記憶し、ホストマシンからの指令に応答して、DL実行プロセッサによるプログラムの実行を指示する。メモリアクセスコントローラ４４は、制御部４２からのアクセス要求とDL実行プロセッサ４３からのアクセス要求に応答して、メモリ４５へのアクセス処理を制御する。
【００６６】
内部のメモリ４５は、DL実行プロセッサが実行するプログラム、処理対象データ、処理結果のデータなどを記憶する。例えば、SDRAMや、より高速のGDR5や広帯域のHBM2などである。
【００６７】
図１４で説明したとおり、ホストマシン３０が、DL実行マシン４０にDLの実行プログラムと教師データを送信する。これらの実行プログラムと教師データは、内部メモリ４５に格納される。そして、ホストマシン３０からの実行指示に応答して、DL実行マシン４０のDL実行プロセッサプロセッサ４３が、実行プログラムを実行する。
【００６８】
図１６は、ホストマシンとDL実行マシンによるディープラーニング処理の概略を示すシーケンスチャートの図である。ホストマシン３０は、DL実行マシン４０に、教師データの入力データを送信し（S30）、ディープラーニングの実行プログラム（学習プログラム）を送信し（S31）、プログラム実行指示を送信する（S32）。
【００６９】
これらの送信に応答して、DL実行マシン４０は、入力データと実行プログラムを内部のメモリ４５に記憶し、プログラム実行指示に応答して、メモリ４５に記憶した入力データについて実行プログラム（学習プログラム）の実行を行う（S40）。この間、ホストマシン３０は、DL実行マシンによる学習プログラムの実行完了まで待機する（S33）。
【００７０】
DL実行マシン４０は、ディープラーニングのプログラムの実行が完了すると、プログラム実行終了の通知をホストマシン３０に送信し（S41）、出力データをホストマシン３０に送信する（S42）。この出力データがDNNの出力データの場合、ホストマシン３０が出力データと正解データとの誤差を小さくするようにDNNのパラメータ（重み等）を最適化する処理を実行する。または、DL実行マシン４０がDNNのパラメータを最適化する処理を行い、DL実行マシンが送信する出力データが最適化されたDNNのパラメータ（重み等）の場合、ホストマシン３０は、最適化されたパラメータを記憶する。
【００７１】
図１７は、DL実行プロセッサ４３の構成例を示す図である。DL実行プロセッサまたはDL実行演算処理装置４３は、命令制御部INST_CONと、レジスタファイルREG_FLと、特別レジスタSPC_REGと、スカラー演算ユニットSC_AR_UNIT、ベクトル演算ユニットVC_AR_UNITと、統計情報集約器ST_AGR_1、ST_AGR_2とを有する。
【００７２】
また、DL実行プロセッサ４３には、メモリアクセスコントローラ（MAC）４４を介して、命令用メモリ45_1とデータ用メモリ45_2とが接続される。MAC４４は、命令用のMAC44_1と、データ用のMAC44_2とを有する。
【００７３】
命令制御部INST_CONは、例えば、プログラムカウンタPCと、命令デコーダDECなどを有する。命令制御部は、プログラムカウンタPCのアドレスに基づいて命令を命令用メモリ45_1からフェッチし、命令デコーダDECがフェッチした命令をデコードし、演算ユニットに発行する。
【００７４】
スカラー演算ユニットSC_AR_UNITは、1組の整数演算器INTと、データ変換器D_CNVと、統計情報取得器ST_ACとを有する。データ変換器は、整数演算器INTが出力する固定小数点数の出力データを浮動小数点数に変換する。スカラー演算ユニットSC_AR_UNITは、スカラーレジスタファイルSC_REG_FL内のスカラーレジスタSR0-SR31とスカラーアキュムレートレジスタSC_ACCとを使用して演算を実行する。例えば、整数演算器INTは、スカラーレジスタSR0-SR31のいずれかに格納されている入力データを演算し、その出力データを別のレジスタに格納する。また、整数演算器INTは、積和演算を実行する場合、積和演算の結果をスカラーアキュムレートレジスタSC_ACCに格納する。
【００７５】
レジスタファイルREG_FLは、スカラー演算ユニットSC_AG_UNITが使用する、前述のスカラーレジスタファイルSC_REG_FLとスカラーアキュムレートレジスタSC_ACCとを有する。さらに、レジスタファイルREG_FLは、ベクトル演算ユニットVC_AR_UNITが使用する、ベクトルレジスタファイルVC_REG_FLと、ベクトルアキュムレートレジスタVC_ACCとを有する。
【００７６】
スカラーレジスタファイルSC_REG_FLは、例えば、それぞれ３２ビットのスカラーレジスタSR0-SR31と、例えば、それぞれ３２×２ビット＋αビットのスカラーアキュムレートレジスタSC_ACCとを有する。
【００７７】
ベクトルレジスタファイルVC_REG_FLは、例えば、それぞれ３２ビットのレジスタを８要素の数有するREGn0-REGn7を、８セットREG00-REG07〜REG70-REG77有する。また、ベクトルアキュムレートレジスタVC_ACCは、例えば、それぞれ３２×２ビット＋αビットのレジスタを８要素の数有するA_REG0〜A_REG7を有する。
【００７８】
ベクトル演算ユニットVC_AT_UNITは、８要素（エレメント）の演算ユニットEL0-EL7を有する。各エレメントEL0-EL7は、整数演算器INTと、浮動小数点演算器FPと、データ変換器D_CNVとを有する。ベクトル演算ユニットは、例えば、ベクトルレジスタファイルVC_REG_FL内のいずれかのセットの８エレメントのレジスタREGn0-REGn7を入力し、８エレメントの演算器で演算を並列に実行し、その演算結果を他のセットの８エレメントのレジスタREGn0-REGn7に格納する。
【００７９】
また、ベクトル演算ユニットは、８エレメントの演算器でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレートレジスタVC_ACCの８エレメントのレジスタA_REG0〜A_REG7に格納する。
【００８０】
ベクトルレジスタREGn0-REGn7及びベクトルアキュムレートレジスタA_REG0〜A_REG7は、演算対象データのビット数が３２ビット、１６ビット、８ビットかに応じて、演算エレメント数が８，１６，３２と増加する。
【００８１】
ベクトル演算ユニットは、８エレメントの整数演算器INTの出力データの統計情報をそれぞれ取得する８つの統計情報取得器ST_ACを有する。統計情報は、整数演算器INTの正及び負の出力データの非符号となる最上位ビットの位置情報である。統計情報は、後述する図２１で説明するビットパターンとして取得される。
【００８２】
統計情報レジスタファイルST_REG_FLは、後述する図２５に示すとおり、例えばそれぞれ３２ビット×４０エレメントの統計情報レジスタSTR0-STR39を、例えば８セットSTR0_0-STR0_39〜STR7_0-STR7_39有する。
【００８３】
スカラーレジスタSR0-SR31には、例えば、アドレスやDNNのパラメータなどが格納される。また、ベクトルレジスタREG00-REG07〜REG70-REG77には、ベクトル演算ユニットの演算データが格納される。そして、ベクトルアキュムレートレジスタVC_ACCには、ベクトルレジスタ同士の乗算結果や加算結果が格納される。統計情報レジスタSTR0_0-STR0_39〜STR7_0-STR7_39には、最大で８種類のヒストグラムの複数のビンに属するデータの数が格納される。整数演算器INTの出力データが４０ビットの場合、４０ビットそれぞれに対応するビンに属するデータ数が、例えば、統計情報レジスタSTR0_0-STR0_39に格納される。
【００８４】
スカラー演算ユニットSC_AR_UNITは、四則演算、シフト演算、分岐、ロード・ストアなどを有する。前述したとおり、スカラー演算ユニットは、整数演算器INTの出力データからヒストグラムのビンの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【００８５】
ベクトル演算ユニットVC_AR_UNITは、浮動小数点演算、整数演算、ベクトルアキュムレートレジスタを用いた積和演算などを実行する。また、ベクトル演算ユニットは、ベクトルアキュムレートレジスタのクリア、積和演算（MAC: Multiply and Accumulate）、累積加算、ベクトルレジスタへの転送などを実行する。さらに、ベクトル演算ユニットは、ロードとストアも実行する。前述したとおり、ベクトル演算ユニットは、８エレメントそれぞれの整数演算器INTの出力データからヒストグラムのビンの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【００８６】
［DL実行プロセッサによる畳み込み演算及び正規化演算］
図１８は、図１７のDL実行プロセッサにより実行される畳み込み演算と正規化演算のフローチャートを示す図である。図１８は、図８及び図１１の処理における正規化演算S144についてより詳細な処理を示している。
【００８７】
DL実行プロセッサは、統計情報レジスタファイルST_REG_FL内のレジスタセットに記憶されている正値の統計情報と負値の統計情報をクリアする（S50）。そして、DL実行プロセッサは、DNNの複数の層について順方向伝播しながら、例えば、畳み込み演算を実行しながら、畳込み演算出力データの正値の統計情報と負値の統計情報を更新する（S51）。
【００８８】
畳み込み演算は、例えば、ベクトル演算ユニット内の８要素の整数演算器INTとベクトルアキュムレートレジスタVC_ACCにより実行される。整数演算器INTは、畳み込み演算の積和演算を実行しその演算出力データをアキュムレートレジスタに記憶することを、繰り返し実行する。畳み込み演算は、スカラー演算ユニットSC_AR_UNIT内の整数演算器INTとスカラーアキュムレートレジスタSC_ACCにより実行されてもよい。
【００８９】
そして、統計情報取得器ST_ACが、整数演算器INTから出力される畳み込み演算の出力データの非符号である最上位ビットの位置を示すビットパターンを出力する。さらに、統計情報集約器ST_AC_1とST_AC_2とが、正値の非符号である最上位ビットの数を演算の出力データの全ビット別に加算し、更に、負値の非符号である最上位ビットの数を演算の出力データの全ビット別に加算し、それぞれの累積加算値を統計情報レジスタファイルST_REG_FL内の１つのセットのレジスタに格納する。１つのセットのレジスタは、畳み込み演算の出力データの全ビット数のレジスタからなり、後述する図２５でその具体例を説明する。
【００９０】
次に、DL実行プロセッサは、S52,S53,S54の正規化演算を実行する。DL実行プロセッサは、正値と負値の統計情報から演算出力データの平均と分散を求める（S52）。平均と分散の演算は、図１０で説明したとおりである。この場合、畳み込み演算の出力データが全て正値の場合は、正値の統計情報から平均と分散を求めることができる。逆に、畳み込み演算の出力データが全て負値の場合は、負値の統計情報から平均と分散を求めることができる。
【００９１】
次に、DL実行プロセッサは、畳み込み演算の出力データそれぞれから、平均を減算し、分散＋εの平方根で除算して、正規化出力データを算出する（S53）。この正規化演算も、図１０で説明したとおりである。
【００９２】
さらに、DL実行プロセッサは、S53で求めた正規化出力データそれぞれに、学習済みパラメータγを乗算し、学習済みパラメータβを加算して、分布を元のスケールに戻す（S54）。
【００９３】
図１９は、図１８の畳み込み演算と統計情報の更新の処理S51の詳細を示すフローチャート図である。図１９の例は、図１１に示したDL実行プロセッサのベクトル演算ユニットによるベクトル演算の例である。
【００９４】
DL実行プロセッサは、１つのミニバッチ内の畳み込み演算の全出力データを生成するまで、処理D61,S62,S63を繰り返す（S60）。DL実行プロセッサでは、ベクトル演算ユニット内の８つの要素EL0-EL7の整数演算器INTが、ベクトルレジスタの８つの要素ごとに畳み込み演算を実行し、８つの演算の出力データを、ベクトルアキュムレートレジスタVC_ACCの８つの要素に格納する(S61)。
【００９５】
次に、ベクトル演算ユニット内の８つの要素EL0-EL7それぞれの８つの統計情報取得器ST_ACと統計情報集約器ST_AGR_1,ST_AGR_2が、アキュムレートレジスタに格納される８つの出力データのうち、正の出力データの統計情報を集約し、統計情報レジスタファイル内の１つの統計情報レジスタ内の値に加算して格納する（S62）。
【００９６】
同様に、ベクトル演算ユニット内の８つの要素EL0-EL7それぞれの８つの統計情報取得器ST_ACと統計情報集約器ST_AGR_1,ST_AGR_2が、アキュムレートレジスタに格納される８つの出力データのうち、負の出力データの統計情報を集約し、統計情報レジスタファイル内の１つの統計情報レジスタ内の値に加算して格納する（S63）。
【００９７】
上記の処理S61,S62,S63を１つのミニバッチ内の畳み込み演算の全出力データを生成するまで繰り返すことで、DL実行プロセッサは、全出力データについて各出力データの非符号である最上位ビットの数を各ビット別に集計する。したがって、統計情報レジスタファイルの１つの統計情報レジスタは、図２５に示すとおり、アキュムレートレジスタの４０ビット別の数を格納する４０個のレジスタを有する。
【００９８】
［統計情報の取得、集約、格納］
次に、DL実行プロセッサによる、演算出力データの統計情報の取得、集約、格納について、説明する。統計情報の取得、集約、格納は、ホストプロセッサから送信され命令であり、DL実行プロセッサが実行する命令をトリガにして実行される。したがって、ホストプロセッサは、DNNの各層の演算命令に加えて、統計情報の取得、集約、格納を実行する命令を、DL実行プロセッサに送信する。
【００９９】
図２０は、DL実行プロセッサによる統計情報の取得、集約、格納の処理を示すフローチャートの図である。まず、ベクトル演算ユニット内の８つの統計情報取得器ST_ACが、整数演算器INTが出力する畳み込み演算の演算出力データの非符号となる最上位ビット位置を示すビットパターンをそれぞれ出力する（S70）。
【０１００】
次に、統計情報集約器ST_AGR_1が、８つのビットパターンの各ビットの「１」を、正または負の符号別に、加算して集約する。または、統計情報集約器ST_AGR_1は、８つのビットパターンの各ビットの「１」を、正と負の両符号について、加算して集約する（S71）。
【０１０１】
さらに、統計情報集約器ST_AGR_2が、統計情報レジスタファイルST_REG_FL内の統計情報レジスタ内の値に、S71で加算して集約した値を加算し、統計情報レジスタに格納する（S72）。
【０１０２】
上記の処理S70,S71,S72は、ベクトル演算ユニット内の８つのエレメントEL0-EL7による畳み込み演算の結果である演算出力データが生成されるたびに、繰り返される。１つのバッチ内のすべての演算出力データが生成され、上記の統計情報の取得、集約、格納処理が完了すると、統計情報レジスタには、１ミニバッチ内の全演算出力データの非符号となる最上位ビットのヒストグラムの各ビンの数である統計情報が生成される。これにより、１ミニバッチ内の演算出力データの非符号となる最上位ビットの位置の合計が、ビット別に集計される。
【０１０３】
［統計情報の取得］
図２１は、統計情報取得器ST_ACの論理回路例を示す図である。また、図２２は、統計情報取得器が取得する演算出力データのビットパターンを示す図である。統計情報取得器ST_ACは、整数演算器INTが出力するNビット（N=40）の例えば畳み込み演算の演算出力データin[39:0]を入力し、非符号となる最上位ビットの位置を「１」でそれ以外を「０」で示すビットパターン出力out[39:0]を出力する。
【０１０４】
図２２に示されるとおり、統計情報取得器ST_ACは、演算出力データである入力in[39:0]について、非符号（符号ビットと異なる１または０）となる最上位ビットの位置で「１」をとり、それ以外の位置で「０」をとる出力out[39:0]をパターンビットとして出力する。但し、入力in[39:0]の全ビットが、符号ビットと同じ場合は、例外的に最上位ビットを「１」にする。図２２に、統計情報取得器ST_ACの真理値表が示される。
【０１０５】
この真理値表によれば、最初の２行は、入力in[39:0]の全ビットが符号ビット「１」、「０」と一致する例であり、出力out[39:0]の最上位ビットout[39]が「１」(0x8000000000)である。次の２行は、入力in[39:0]の３８ビットin[38]が符号ビット「１」、「０」と異なる例であり、出力out[39:0]の３８ビットout[38]が「１」、それ以外が「０」である。最も下の２行は、入力in[39:0]の０ビットin[0]が符号ビット「１」、「０」と異なる例であり、出力out[39:0]の０ビットout[0]が「１」、それ以外が「０」である。
【０１０６】
図２１に示す論理回路図は、以下のようにして非符号である最上位ビットの位置を検出する。まず、符号ビットin[39]とin[38]が不一致の場合、EOR38の出力が「１」となり、出力out[38]が「１」になる。EOR38の出力が「１」となると、論理和OR37-OR0と論理積AND37-AND0, 反転ゲートINVにより、他の出力out[39],out[38:0]は「０」となる。
【０１０７】
また、符号ビットin[39]がin[38]と一致、in[37]と不一致の場合、EOR38の出力が「０」、EOR37の出力が「１」となり、出力out[37]が「１」になる。EOR37の出力が「１」となると、論理和OR36-OR0と論理積AND36-AND0, 反転ゲートINVにより、他の出力out[39:38],out[36:0]は「０」となる。以下、同様である。
【０１０８】
図２１,図２２から理解できるとおり、統計情報取得器ST_ACは、演算出力データの符号ビットと異なる「１」または「０」の最上位ビットの位置を含む分布情報をビットパターンとして出力する。
【０１０９】
［統計情報の集約］
図２３は、統計情報集約器ST_AGR_1の論理回路例を示す図である。また、図２４は、統計情報集約器ST_AGR_1の動作を説明する図である。統計情報集約器ST_AGR_1は、８つの統計情報であるビットパターンBP_0〜BP_7を、命令が指定する制御値である、第１の選択フラグsel（符号ビット「０」ならsel=0, 「１」ならsel=1）と、第２の選択フラグall（正または負ならall=0、正及び負のすべてならall=1）とに基づいて選択し、選択されたビットパターンの各ビットの「１」を加算した出力out[39:0]を出力する。統計情報集約器ST_AGR_1に入力されるビットパターンBP_0〜BP_7は、それぞれ４０ビットであり、
BP_0〜BP_7＝in[0][39:0]〜in[7][39:0]
である。各ビットパターンBPには、その符号ビットｓが付加される。符号ビットｓは、図１７において、整数演算器INTが出力するSGNである。
【０１１０】
従って、統計情報集約器ST_AGR_1の入力は、図２４に示されるとおり、ビットパターンin[39:0]、符号ｓ、正または負を指定する符号セレクト制御値sel、正と負の全てか否かを示す全セレクト制御値allである。符号セレクト制御値selと全セレクト制御値allの論理値表が図２３に示される。
【０１１１】
この論理値表によれば、符号セレクト制御値sel=0であれば、全セレクト制御値all=0となり、統計情報集約器は、制御値sel=0と一致する符号ｓ=0を有する正値のビットパターンBPの各ビットの１の数を累積加算し、統計情報の集約値を出力[39:0]として出力する。一方、符号セレクト制御値sel=1であれば、全セレクト制御値all=0となり、統計情報集約器は、制御値sel=1と一致する符号ｓ=1を有する負値のビットパターンBPの各ビットの１の数を累積加算し、統計情報の集約値を出力[39:0]として出力する。更に、全セレクト制御値all=1の場合、統計情報集約器は、全ビットパターンBPの各ビットの１の数を累積加算し、統計情報の集約値を出力[39:0]として出力する。
【０１１２】
図２３の論理回路に示すとおり、８エレメントに対応するビットパターンBP_0〜BP_7それぞれに、符号セレクト制御値selと符号ｓとが一致するか否かを検出するEOR100-EOR107とインバータINV100-INV107と、符号セレクト制御値selと符号ｓが一致する場合と、全セレクト制御値all=1の場合に、「１」を出力する論理和OR100-OR107を有する。統計情報集約器ST_AGR_1は、論理和OR100-OR107の出力が「１」になるビットパターンBPの各ビットの「１」を、加算回路SGM_0-SGM_39で加算し、加算結果を出力out[39:0]として生成する。
【０１１３】
図２４の出力に示されるとおり、出力は、符号セレクト制御値selに基づき、sel=0の場合の正の集約値out_p[39:0]と、sel=1の場合の負の集約値out_n[39:0]のいずれかになる。出力の各ビットは、最大値８をカウントできるようにlog2(要素数＝８)＋１ビットであり、要素数が８の場合は４ビットとなる。
【０１１４】
図２５は、第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルの例を示す図である。第２の統計情報集約器ST_AGR_2は、第１の統計情報集約器ST_AGR_1が集約した出力out[39:0]の各ビットの値を、統計情報レジスタファイル内の１つのレジスタセットの値に加算し、格納する。
【０１１５】
統計情報レジスタファイルST_REG_FLは、例えば、４０個の３２ビットレジスタSTRn_39〜STRn_0 をnセット(n=0〜7)有する。したがって、ｎ種類のヒストグラムのそれぞれ４０ビンの数を格納できる。今仮に、集約対象の統計情報がn=0の４０個の３２ビットレジスタSTR0_39〜STR0_0に格納されるとする。第２の統計情報集約器ST_ARG_2は、４０個の３２ビットレジスタSTR0_39〜STR0_0に格納される累積加算値それぞれに、第１の統計情報集約器ST_AGR_1が集計した集約値in[39:0]のそれぞれの値を加算する加算器ADD_39〜ADD_0を有する。そして、加算器ADD_39〜ADD_0の出力が、４０個の３２ビットレジスタSTR0_39〜STR0_0に再格納される。これにより、４０個の３２ビットレジスタSTR0_39〜STR0_0に、対象のヒストグラムの各ビンのサンプル数が格納される。
【０１１６】
図１７及び図２１乃至図２５に示した演算ユニット内に設けられた統計情報取得器ST_AC、統計情報集約器ST_AGR_1, ST_AGR_2のハードウエア回路により、例えば、畳込み演算結果の演算出力データの２進数の各ビットの分布（ヒストグラムの各ビンのサンプル数）を取得することができる。したがって、図１０に示したように、バッチ正規化処理での平均と分散を簡単な演算により求めることができる。
【０１１７】
［平均と分散の演算例］
以下、ベクトル演算ユニットによる演算出力データの平均と分散の演算例について説明する。ベクトル演算ユニットは、一例として８要素の演算器を有し、８要素のデータを並列に演算する。また、本実施の形態では、各演算出力データの値を、非符号となる最上位ビットiに対応する近似値+２e+i、-２e+iとして、平均と分散を演算する。平均と分散の演算式は、図１０のS21、S22で説明したとおりである。
【０１１８】
図２６は、DL実行プロセッサによる平均の演算処理の一例を示すフローチャートの図である。DL実行プロセッサは、浮動小数点ベクトルレジスタＡに統計情報である非符号となる最上位ビットのヒストグラムの最小の８つのビンの近似値2e, 2e+1,…, 2e+7をロードする(S70)。さらに、DL実行プロセッサは、浮動小数点ベクトルレジスタＣの全８要素を０にクリアする（S71）。
【０１１９】
次に、DL実行プロセッサは、全ての統計情報について演算が終了するまで（S72のNO）、以下の処理を行う。まず、DL実行プロセッサは、浮動小数点ベクトルレジスタB1に正値の統計情報の最小ビット側の８要素をロードし（S73）、浮動小数点ベクトルレジスタB2に負値の統計情報の最小ビット側の８要素をロードする（S74）。
【０１２０】
図９に示したヒストグラム（統計情報）は、横軸に−８〜＋１１の２０ビットに対応する２０個のビンを有し、この場合の最小ビット側の８要素とは、−８〜−１の８個のビンそれぞれのサンプル数を意味する。８要素で構成されるベクトル演算器に対応して、最小ビット側の８要素が浮動小数点ベクトルレジスタB1,B2にそれぞれロードされる。
【０１２１】
そして、ベクトル演算ユニットVC_AR_UNITの８要素の浮動小数点演算器FPが、レジスタＡ、Ｂ１、Ｂ２の８要素のデータそれぞれについてＡ×（Ｂ１−Ｂ２）を演算し、その８要素の演算結果を、浮動小数点ベクトルレジスタＣの各要素に加算する（S75）。これにより、ヒストグラムの最小ビット側の８つのビンについての演算が終わる。
【０１２２】
そこで、ヒストグラムの次の８つのビン（０〜＋７の８個のビン）について演算を行うために、DL実行プロセッサは、ベクトル演算ユニット内の８要素の浮動小数点演算器により、浮動小数点ベクトルレジスタＡの各要素に28を乗算する（S76）。そして、DL実行プロセッサは、処理S72-S76を実行する。処理S73,S74では、それぞれのレジスタＢ１，Ｂ２に、正値の統計情報の次の８要素（次の８つのビンのサンプル数）と、負値の統計情報の次の８要素（次の８つのビンのサンプル数）がロードされる。
【０１２３】
図９の例では、ヒストグラムの次の４つのビン（＋８〜＋１１）について、処理S72-S76が実行されると、全ての統計情報の演算が終了し（S72のYES）、DL実行プロセッサは、浮動小数点ベクトルレジスタＣ内の全ての８要素を加算し、加算値をサンプル数Ｍで除算して、平均を出力する。
【０１２４】
上記の演算は、ベクトル演算ユニット内の８要素の浮動小数点演算器FPで行ったが、ベクトル演算ユニット内の８要素の整数演算器INTで十分なビット数を処理できる場合は、整数演算器で演算してもよい。
【０１２５】
図２７は、DL実行プロセッサによる分散の演算処理の一例を示すフローチャートの図である。DL実行プロセッサは、浮動小数点ベクトルレジスタＡに統計情報である非符号となる最上位ビットのヒストグラムの最小の８つのビンの近似値2e, 2e+1,…, 2e+7をロードする(S80)。さらに、DL実行プロセッサは、浮動小数点ベクトルレジスタＣの全８要素を０にクリアする（S81）。
【０１２６】
次に、DL実行プロセッサは、全ての統計情報について演算が終了するまで（S82のNO）、以下の処理を行う。まず、DL実行プロセッサは、レジスタＡの８つの近似値Ａそれぞれと平均値の差をそれぞれ二乗し、浮動小数点ベクトルレジスタＡ１の８要素に演算結果を格納する（S83）。また、DL実行プロセッサは、レジスタＡの８つの近似値のマイナス−Ａそれぞれと平均値の差をそれぞれ二乗し、浮動小数点ベクトルレジスタＡ２の８要素に演算結果を格納する（S84）。
【０１２７】
そして、DL実行プロセッサは、浮動小数点ベクトルレジスタB1に正値の統計情報の最小ビット側の８要素をロードし（S85）、浮動小数点ベクトルレジスタB2に負値の統計情報の最小ビット側の８要素をロードする（S86）。
【０１２８】
さらに、DL実行プロセッサでは、ベクトル演算ユニットの８要素の浮動小数点演算器が、レジスタＡ１とＢ１の８要素のデータの乗算と、レジスタＡ２とＢ２の８要素のデータの乗算と、両乗算値の加算を行い、８要素の加算結果をレジスタＣの８要素のデータにそれぞれ加算して、レジスタＣの８要素に格納する（S87）。これにより、ヒストグラムの最小ビット側の８つのビンについての演算が終わる。
【０１２９】
そこで、ヒストグラムの次の８つのビン（０〜＋７の８個のビン）について演算を行うために、DL実行プロセッサは、ベクトル演算ユニット内の８要素の浮動小数点演算器により、浮動小数点ベクトルレジスタＡの各要素に28を乗算する（S88）。そして、DL実行プロセッサは、処理S82-S88を実行する。処理S83,S84では、レジスタＡ内の新たな近似値2e+8, 2e+9,…, 2e+15について演算される。また、処理S85,S86では、それぞれのレジスタＢ１，Ｂ２に、正値の統計情報の次の８要素（次の８つのビンのサンプル数）と、負値の統計情報の次の８要素（次の８つのビンのサンプル数）がロードされる。
【０１３０】
図９の例では、ヒストグラムの次の４つのビン（＋８〜＋１１）について、処理S82-S88が実行されると、全ての統計情報の演算が終了し（S82のYES）、DL実行プロセッサは、浮動小数点ベクトルレジスタＣ内の全ての８要素のデータを加算し、加算値をサンプル数Ｍで除算して、分散を出力する。
【０１３１】
上記の演算も、ベクトル演算ユニット内の８要素の浮動小数点演算器FPで行ったが、ベクトル演算ユニット内の８要素の整数演算器INTで十分なビット数を処理できる場合は、整数演算器で演算してもよい。
【０１３２】
最後に、ベクトル演算ユニット内の８要素の浮動小数点演算器FPは、全ての演算出力データについて８個ずつ、図７の処理S13に示した正規化演算を実行し、正規化した演算出力データをベクトルレジスタまたはメモリに書き込む。
【０１３３】
［正規化演算の変形例］
上記の実施の形態では、正規化演算の例として、演算出力データｘの平均と分散を求め、演算出力データｘから平均を減じ、分散の二乗の平方根（標準偏差）で除す除算正規化を説明した。しかし、正規化演算の別の例として、演算出力データの平均を求め、演算出力データから平均を減じる減算正規化にも、本実施の形態を適用できる。
【０１３４】
［正規化演算対象のデータ例］
上記の実施の形態では、演算器の演算出力データｘに正規化する例を説明した。しかし、ミニバッチの複数の入力データを正規化する場合にも、本実施の形態を適用できる。この場合は、複数の入力データの統計情報を取得し集約したヒストグラムの各ビンのサンプル数と近似値を使用して平均値の演算を簡略化できる。
【０１３５】
本明細書では、正規化対象のデータ（被正規化データまたは対象データ）は、演算出力データ、入力データなどを含む。
【０１３６】
［ヒストグラムのビンの例］
上記の実施の形態では、演算出力データXの底を２とする対数（log2X）をビンの単位とした。しかし、上記対数の２倍（２×log2X）をビンの単位としても良い。その場合は、演算出力データXの非符号となる最上位の偶数ビットの分布（ヒストグラム）を統計情報として取得し、各ビンの範囲は2e+2i〜2e+2(i+1)（ｉは０以上の整数）となり、近似値は2e+2iとなる。
【０１３７】
［近似値の例］
上記の実施の形態では、各ビンの近似値を非符号となる最上位ビットの値2e+iにしている。しかし、各ビンの範囲2e+i〜2e+i+1（ｉは０以上の整数）の場合、近似値を（2e+i＋2e+i+1）/2としてもよい。
【０１３８】
以上説明したとおり、本実施の形態によれば、DNN内の入力データや中間データ（演算出力データ）の非符号となる最上位ビットの分布（ヒストグラム）を統計情報として取得し、正規化演算で求める平均や分散を、ヒストグラムの各ビンの近似値+2e+i, -2e+iと、各ビンのデータ数とで簡単に演算することができる。したがって、プロセッサの正規化演算に要する消費電力を削減でき、学習に必要な時間を短くできる。
【符号の説明】
【０１３９】
４３：DL実行プロセッサ、演算処理装置
VC_AR_UNIT：ベクトル演算ユニット
INT：整数演算器
FP：浮動小数点演算器
ST_AC：統計情報取得器
ST_AGR_1, ST_AGR_2：統計情報集約器
ST_REG_FL：統計情報レジスタファイル
BP：ビットパターン
【図１】
2020067897.tif 000003
【図２】
2020067897.tif 000004
【図３】
2020067897.tif 000005
【図４】
2020067897.tif 000006
【図５】
2020067897.tif 000007
【図６】
2020067897.tif 000008
【図７】
2020067897.tif 000009
【図８】
2020067897.tif 000010
【図９】
2020067897.tif 000011
【図１０】
2020067897.tif 000012
【図１１】
2020067897.tif 000013
【図１２】
2020067897.tif 000014
【図１３】
2020067897.tif 000015
【図１４】
2020067897.tif 000016
【図１５】
2020067897.tif 000017
【図１６】
2020067897.tif 000018
【図１７】
2020067897.tif 000019
【図１８】
2020067897.tif 000020
【図１９】
2020067897.tif 000021
【図２０】
2020067897.tif 000022
【図２１】
2020067897.tif 000023
【図２２】
2020067897.tif 000024
【図２３】
2020067897.tif 000025
【図２４】
2020067897.tif 000026
【図２５】
2020067897.tif 000027
【図２６】
2020067897.tif 000028
【図２７】
2020067897.tif 000029