(57)【要約】【課題】各層の有効桁数の分布を示す統計情報に基づいて小数点位置を調整する方法において、ＮＮの各層で統計情報を取得すると、繰り返し演算により演算量が膨大になる。本発明は、ＮＮの演算精度を維持しつつ演算量を低減することを目的とする。【解決手段】深層学習を実行する情報処理装置であって、深層学習を実行するためのＮＮの複数の層の演算において、第１層の演算結果各々について非符号ビットの位置の分布についての第１統計情報を取得する取得部と、第２層の演算について、第１層の出力データに対して所定の規則の演算を実行する実行部と、所定の規則と第１統計情報に基づいて第２統計情報を取得し、第２層の演算結果をレジスタに格納する場合にビット幅を制限するためのビットレンジを第２統計情報に基づいて決定する制御部とを備えることを特徴とする情報処理装置が提供される。【選択図】図１３
2020166674.tif 000002
【特許請求の範囲】
【請求項１】
深層学習を実行する情報処理装置であって、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第１層の演算の演算結果である複数の第１固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第１統計情報を取得する取得部と、
第２層の演算について、前記第１層の複数の出力データに対して所定の規則の演算を実行する実行部と、
前記所定の規則と前記第１統計情報に基づいて第２統計情報を取得し、前記第２層の演算の演算結果である複数の第２固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第２統計情報に基づいて決定する制御部と
を備えることを特徴とする情報処理装置。
【請求項２】
前記所定の規則の演算は、前記第１層の前記複数の出力データのうち所定の割合のデータに０を乗算し、前記所定の割合のデータ以外の前記第１層の前記複数の出力データに前記所定の割合から求められる係数を乗算することであり、
前記第２統計情報は、前記係数に基づいて前記第１統計情報をシフトすることで取得される
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記所定の規則の演算は、前記第１層の前記複数の出力データのうち０より小さい値を有するデータの値に０を乗算する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記所定の規則の演算は、前記第１層の前記複数の出力データを複数のグループに分け、前記複数のグループのうち所定のグループの最大値を求め、前記所定のグループに属する前記第１層の前記複数の出力データの値各々を前記所定のグループの最大値に変更する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
取得部は、第３層の演算の演算結果である複数の第３固定小数点数データ各々についての最上位ビットの位置の分布又は最下位ビットの位置の分布についての第３統計情報を更に取得し、
前記所定の規則の演算は、前記第１層の前記複数の出力データと前記第３層の複数の出力データとを連接し、
前記第２統計情報は、前記第１統計情報と前記第３統計情報とを加算することで得られる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項６】
深層学習を実行する情報処理方法であって、
コンピュータが、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第１層の演算の演算結果である複数の第１固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第１統計情報を取得し、
第２層の演算について、前記第１層の前記複数の出力データに対して所定の規則の演算を実行し、
前記所定の規則と前記第１統計情報に基づいて第２統計情報を取得し、
前記第２層の演算の演算結果である複数の第２固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第２統計情報に基づいて決定する
ことを特徴とする情報処理方法。
【請求項７】
深層学習を実行する情報処理プログラムであって、
コンピュータに、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第１層の演算の演算結果である複数の第１固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第１統計情報を取得する取得処理と、
第２層の演算について、前記第１層の前記複数の出力データに対して所定の規則の演算を実行する実行処理と、
前記所定の規則と前記第１統計情報に基づいて第２統計情報を取得する第２取得処理と、
前記第２層の演算の演算結果である複数の第２固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第２統計情報に基づいて決定する決定処理と
を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、情報処理プログラムに関する。
【背景技術】
【０００２】
深層学習（Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ）は、多層のニューラルネットワークを用いた機械学習である。深層学習の一例であるディープニューラルネットワーク（Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以下ＤＮＮと称する）は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、１または複数のノードを持ち、各ノードは値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアス等のパラメータを持つ。
【０００３】
ＤＮＮにおいて、各層のノードの値は、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力として次の層のノードの値がその層の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【０００４】
ＤＮＮの演算を実行するＤＮＮプロセッサは、演算処理対象の一つである画像データが比較的少ないビット数であるので、固定小数点演算器により演算を行うことがある。この場合、浮動小数点演算器を使用しないので、演算に要する消費電力を抑えることができる。また、浮動小数点演算器よりも回路構成が簡単な固定小数点演算器を用いることは、ＤＮＮプロセッサの構成をより少ない回路規模で実現できることを意味する。
【０００５】
しかしながら、固定小数点数はビット数が固定であるので、浮動小数点数に比べるとダイナミックレンジが狭い。そのため、演算によりオーバーフローが発生し演算結果の値が飽和することがあり、逆に、アンダーフローにより下位ビットが切り捨てられることがある。この場合、演算結果の精度の低下を招く。
【０００６】
そこで、ＤＮＮの演算において、演算により求められた演算結果データの小数点位置を動的に調整する動的固定小数点（Ｄｙｎａｍｉｃ  Ｆｉｘｅｄ  Ｐｏｉｎｔ）が提案されている。また、小数点位置を動的に調整するための方法として、各層の演算結果の中間データについて有効な最上位ビットの位置の分布を示す統計情報を取得し、取得した統計情報に基づいて中間データの固定小数点位置を最適な位置に調整する方法が知られている（例えば、以下の特許文献１を参照）。また、固定小数点演算に関しては、以下の特許文献２〜４がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１８−１２４６８１号公報
【特許文献２】特開２０１２−２０３５６６号公報
【特許文献３】特開２００９−２７１５９８号公報
【特許文献４】特開平０７−０８４９７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
各層の演算結果の有効桁数の分布を示す統計情報を取得し、最適な小数点位置に調整することで演算精度を維持する方法において、ＤＮＮの各層で統計情報を取得することで、演算量が多くなっている。ＤＮＮの処理においては、各層の演算を繰り返すことで学習処理を行なうため、各層の演算量の増加は、学習処理にかかる時間の増加につながる。
【０００９】
一つの側面では、本発明は、演算精度を維持しつつ演算量を低減した情報処理装置、情報処理方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
一つの様態によると、深層学習を実行する情報処理装置であって、深層学習を実行するためのニューラルネットワークの複数の層の演算において、第１層の演算の演算結果である複数の第１固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非符号の最下位ビットの位置の分布についての第１統計情報を取得する取得部と、第２層の演算について、第１層の複数の出力データに対して所定の規則の演算を実行する実行部と、所定の規則と第１統計情報に基づいて第２統計情報を取得し、第２層の演算の演算結果である複数の第２固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを第２統計情報に基づいて決定する制御部とを備えることを特徴とする情報処理装置が、提供される。
【発明の効果】
【００１１】
一つの側面では、ＤＮＮの演算精度を維持しつつ演算量を減らすことができる。
【図面の簡単な説明】
【００１２】
【図１】ディープニューラルネットワーク（ＤＮＮ）の一例を示す図である。
【図２】ＤＮＮの学習処理の一例のフローチャートを示す図である。
【図３】深層学習システムの一例を示す図である。
【図４】図３に示すホストマシン３０の詳細を示す図である。
【図５】図３に示すＤＮＮ実行マシン４０の詳細を示す図である。
【図６】ホストマシン３０とＤＮＮ実行マシン４０による深層学習処理の概略を示すシーケンスチャートの図である。
【図７】深層学習の一例のフローチャートを示す図である。
【図８】図７に示す動的固定小数点数による学習の処理のうち、S61とS63の詳細を説明する図である。
【図９】深層学習の順伝播処理と逆伝播処理とを説明する図である。
【図１０】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【図１１】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【図１２】図７に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。
【図１３】本実施形態にかかる深層学習のフローチャートを示す図である。
【図１４】図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第１例を説明する図である（第１実施形態）。
【図１５】図１３に示すフローチャートのうちS133の詳細な処理の第１例を示すフローチャートの図である（第１実施形態）。
【図１６】図１６は、ドロップアウト層の処理前後の最上位ビットの位置の分布の例を示す図である。
【図１７】ＤＮＮプロセッサ４３の構成例を示す図である。
【図１８】ＤＮＮプロセッサ４３による統計情報の取得、集約、格納の処理を示すフローチャートの図である。
【図１９】統計情報取得器ST_ACの論理回路例を示す図である。
【図２０】統計情報取得器ST_ACが取得する演算出力データのビットパターンを示す図である。
【図２１】統計情報集約器ST_AGR_1の論理回路例を示す図である。
【図２２】統計情報集約器ST_AGR_1の動作を説明する図である。
【図２３】第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。
【図２４】図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第２例を説明する図である（第２実施形態）。
【図２５】図１３に示すフローチャートのうちS133の詳細な処理の第２例を示すフローチャートの図である（第２実施形態）。
【図２６】図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第３例を説明する図である（第３実施形態）。
【図２７】図１３に示すフローチャートのうちS133の詳細な処理の第３例を示すフローチャートの図である（第３実施形態）。
【図２８】深層学習の一例における、二重の飽和・丸め処理を説明する図である。
【図２９】図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第４例を説明する図である（第４実施形態）。
【図３０】図１３に示すフローチャートのうちS133の詳細な処理の第４例を示すフローチャートの図である（第４実施形態）。
【発明を実施するための形態】
【００１３】
図１は、ディープニューラルネットワーク（ＤＮＮ）の一例を示す図である。図１のＤＮＮは、例えば、画像を入力し、入力画像の内容（例えば数字）に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。ＤＮＮは、入力層ＩＮＰＵＴ、第１の畳み込み層Ｃｏｎｖ＿１、第１のプーリング層Ｐｏｏｌ＿１、第２の畳み込み層Ｃｏｎｖ＿２、第２のプーリング層Ｐｏｏｌ＿２、第１の全結合層ｆｃ１、第２の全結合層ｆｃ２、出力層ＯＵＴＰＵＴを有する。各層は、単数または複数のノードを有する。
【００１４】
畳み込み層Ｃｏｎｖ＿１は、入力層ＩＮＰＵＴ内の複数のノードに入力された例えば画像の画素データにノード間の重み等を積和演算し、畳み込み層Ｃｏｎｖ＿１内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。畳み込み層Ｃｏｎｖ＿２も同様である。
【００１５】
プーリング層Ｐｏｏｌ＿１は、前の層である畳み込み層Ｃｏｎｖ＿１の局所的なノードから定まる値をノードとする層であり、例えば、局所的なノードの最大の値を自分のノードの値とすることで、画像のわずかな変化を吸収する。
【００１６】
出力層ＯＵＴＰＵＴは、ソフトマックス関数等を用いてノードの値から各カテゴリに属する確率を求める。
【００１７】
図２は、ＤＮＮの学習処理の一例のフローチャートを示す図である。学習処理は、例えば、入力データと、入力データからＤＮＮが算出する出力の正解データとを有する複数の教師データを使用して、ＤＮＮ内の重み等のパラメータを最適化する。図２の例では、ミニバッチ法により、一対一で対応する入力データと教師データの複数の組を複数のミニバッチに分割し、各ミニバッチに分割された複数の入力データと、入力データに対応する教師データを入力する。そして、それぞれの入力データに対してＤＮＮが出力した出力データと教師データとの差分（誤差）を小さくするように重み等のパラメータを最適化する。
【００１８】
ＤＮＮは、複数の層をハードウエア回路で構成し、各層の演算をハードウエア回路が実行するようにしてもよい。または、ＤＮＮは、ＤＮＮの各層の演算を実行するプロセッサに、各層の演算を実行させるプログラムを実行させるようにしてもよい。図２において説明されるＤＮＮの処理は、後述するホストマシンとＤＮＮ実行マシンによって実行されるようにしてもよい。
【００１９】
図２に示されるとおり、事前の準備として、複数の入力データと教師データを並び替え（S1）、並び替えた複数の入力データと教師データを複数のミニバッチに分割する（S2）。
【００２０】
そして、分割した複数のミニバッチそれぞれに対して、順伝播処理S6と、誤差評価S7と、逆伝播処理S8と、パラメータ更新S9とを繰り返す。全てのミニバッチの学習が終了すると（S11:YES）、所定回数に達するまで（S12:NO）、同じ入力データについて、処理S1〜S2、S6〜S9、S11を繰り返し実行する。
【００２１】
また、所定回数に達するまで同じ学習データで処理S1〜S2、S6〜S9を繰り返すことに代えて、学習結果の評価値、例えば、出力データと教師データとの差分（誤差）が一定の範囲に収まったことで、処理を終了することも行われる。
【００２２】
順伝播処理S6では、ＤＮＮの入力側から出力側に向かって各層の演算が順番に実行される。図１の例で説明すると、第１の畳み込み層Ｃｏｎｖ＿１が、入力層ＩＮＰＵＴに入力された１つのミニバッチが有する複数の入力データを、エッジの重み等で畳み込み演算を行い、複数の演算出力データを生成する。そして、第１のプーリング層Ｐｏｏｌ＿１が、畳み込み層Ｃｏｎｖ＿１の演算結果の局所性を弱める処理を行う。さらに、第２の畳み込み層Ｃｏｎｖ＿２と第２のプーリング層Ｐｏｏｌ＿２が、上記と同様の処理を行う。最後に、全結合層ｆｃ１、ｆｃ２が、全エッジの重み等で畳み込み演算を行い、出力層ＯＵＴＰＵＴに出力データを出力する。
【００２３】
次に、誤差評価S7にて、ＤＮＮの出力データと教師データの差分が誤差として演算される。そして、誤差をＤＮＮの出力側から入力側に伝播する逆伝播処理S8が実行される。逆伝播処理S8では、誤差を出力側から入力側に伝播すると共に、伝播された各層の誤差をパラメータで微分し、勾配降下法でパラメータの変更データが演算される。そして、パラメータ更新S9では、勾配降下法で求めたパラメータの変更値で現在のパラメータが更新され、各層の重み等が最適値方向に更新される。
【００２４】
図３は、深層学習システムの一例を示す図である。深層学習システムは、ホストマシン３０とＤＮＮ実行マシン４０とを有し、例えば、専用インターフェースを介してホストマシン３０とＤＮＮ実行マシン４０とが接続される。また、ホストマシン３０には利用者端末５０がアクセス可能にされ、利用者は、利用者端末５０からホストマシン３０にアクセスし、ＤＮＮ実行マシン４０を操作し、深層学習を実行する。ホストマシン３０は、利用者端末５０からの指示に従い、ＤＮＮ実行マシン４０が実行するプログラムを作成し、ＤＮＮ実行マシン４０に送信する。そして、ＤＮＮ実行マシン４０は送信されたプログラムを実行し、深層学習を実行する。
【００２５】
図４は、図３に示すホストマシン３０の詳細を示す図である。ホストマシン３０は、ＣＰＵ等のホストプロセッサ３１と、ＤＮＮ実行マシン４０と接続するための高速入出力インターフェース３２と、ＳＤＲＡＭ等のメインメモリ３３と、内部バス３４とを有する。さらに、内部バス３４に接続された大容量のＨＤＤ等の補助記憶装置３５と、利用者端末５０と接続するための低速入出力インターフェース３６とを有する。
【００２６】
ホストマシン３０のホストプロセッサ３１は、補助記憶装置３５に記憶されているプログラムがメインメモリ３３に展開されたプログラムを実行する。高速入出力インターフェース３２は、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ等のホストプロセッサ３１とＤＮＮ実行マシン４０とを接続するインターフェースである。メインメモリ３３は、プロセッサが実行するプログラムやデータを記憶する。メインメモリ３３は、例えば、ＳＤＲＡＭである。
【００２７】
内部バス３４は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース３６は、例えば、ＵＳＢ等利用者端末５０のキーボードやマウスとの接続を行うか、または、イーサーネットのネットワークとの接続を行う。
【００２８】
補助記憶装置３５には、図示されるとおり、ＤＮＮ学習プログラムと、入力データ及び教師データが記憶される。ホストプロセッサ３１は、ＤＮＮ学習プログラムを実行して、例えば、学習プログラムと入力データ及び教師データをＤＮＮ実行マシン４０に送信し、ＤＮＮ実行マシン４０に学習プログラムを実行させる。
【００２９】
図５は、図３に示すＤＮＮ実行マシン４０の詳細を示す図である。ＤＮＮ実行マシン４０は、ホストマシン３０との通信を中継する高速入出力インターフェース４１と、ホストマシン３０からの指令やデータに基づいて対応する処理を実行する制御部４２とを有する。また、ＤＮＮ実行マシン４０は、ＤＮＮプロセッサ４３と、メモリアクセスコントローラ４４と、内部メモリ４５を有する。
【００３０】
ＤＮＮプロセッサ４３は、ホストマシン３０から送信されたプログラムとデータに基づいて、プログラムを実行し、深層学習の処理を実行する。ＤＮＮプロセッサ４３は、固定小数点演算を実行するＤＮＮプロセッサ４３＿１と、浮動小数点演算を実行するＤＮＮプロセッサ４３＿２とを有する。ただし、浮動小数点演算を実行するＤＮＮプロセッサ４３＿２はなくてもよい。
【００３１】
固定小数点演算を実行するＤＮＮプロセッサ４３＿１は、ＤＮＮ内で演算される演算結果や学習により更新されるパラメータ等の中間データと、メモリ内のデータ等の有効な最上位ビットや有効な最下位ビットの数についての統計情報を取得する統計情報取得回路を有する。固定小数点演算を実行するＤＮＮプロセッサ４３＿１は、学習を実行しながら演算により求められる中間データの統計情報を取得し、統計情報に基づいて中間データの固定小数点位置を最適な位置に調整する。
【００３２】
高速入出力インターフェース４１は、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓであり、ホストマシン３０との通信を中継する。
【００３３】
制御部４２は、ホストマシン３０から送信されるプログラムやデータを内部メモリ４５に記憶し、ホストマシン３０からの指令に応答して、ＤＮＮプロセッサ４３にプログラムの実行を指示する。メモリアクセスコントローラ４４は、制御部４２からのアクセス要求とＤＮＮプロセッサ４３からのアクセス要求に応答して、内部メモリ４５へのアクセス処理を制御する。
【００３４】
内部メモリ４５は、ＤＮＮプロセッサ４３が実行するプログラム、処理対象データ、処理結果のデータ等を記憶する。内部メモリ４５は、例えば、ＳＤＲＡＭや、より高速のＧＤＲ５や広帯域のＨＢＭ２等である。
【００３５】
図６は、ホストマシンとＤＮＮ実行マシン４０による深層学習処理の概略を示すシーケンスチャートの図である。ホストマシン３０は、ＤＮＮ実行マシン４０に、深層学習の学習プログラムを送信し（S31）、１ミニバッチ分の入力データを送信し（S32_1）、学習プログラム実行指示を送信する（S33）。
【００３６】
これらの送信に応答して、ＤＮＮ実行マシン４０は、入力データと学習プログラムを内部メモリ４５に記憶し、学習プログラム実行指示に応答して、内部メモリ４５に記憶した入力データについて学習プログラムを実行する（S40）。学習プログラムの実行は、ＤＮＮプロセッサ４３により行われる。ホストマシン３０は、次回の１ミニバッチ分の入力データを送信してから（S32_2）、ＤＮＮ実行マシン４０による学習プログラムの実行完了まで待機する。この場合、ＤＮＮ実行マシン４０に入力データを格納する領域を２つ用意する。
【００３７】
ＤＮＮ実行マシン４０は、学習プログラムの実行が完了すると、学習プログラム実行終了の通知をホストマシン３０に送信する（S41）。ホストマシン３０は、学習プログラムが参照する入力データ領域を切り替えて、学習プログラム実行指示を送信する(S33)。そして、ＤＮＮ実行マシン４０が学習プログラムを実行し（S40）、学習プログラム実行終了通知を送信する（S41）。これを繰り返してＤＮＮの学習を進める。
【００３８】
ＤＮＮの学習は、ＤＮＮの順方向に各層の演算（順伝播処理）を実行し、出力層の出力データと正解データとの誤差をＤＮＮの逆方向に伝播して各層の誤差を演算し、誤差を小さくするパラメータの変更データを算出し（逆伝播処理）、パラメータの変更データによりパラメータを更新する処理（パラメータ更新）を有する。これらのＤＮＮの学習処理を、全てＤＮＮ実行マシン４０が実行してもよく、また、一部の処理をホストマシン３０で実行してもよい。
【００３９】
図７は、深層学習の一例のフローチャートを示す図である。深層学習の一例では、各層の各中間データの値の分布の統計情報を保存し、保存した各層の統計情報に基づいて各層の各中間データの固定小数点位置を調整する。図７における固定小数点位置の調整は、図２の処理S6及びS8で行われる。
【００４０】
まず、ＤＮＮプロセッサ４３が、各中間データ（各層の演算結果、パラメータ等）の初期小数点位置を決定する（S50）。初期小数点位置の決定は、浮動小数点数による事前学習や、ユーザの指定によって行われる。浮動小数点数により事前学習を行う場合、ＤＮＮ内の中間データは浮動小数点数となるので、中間データの大きさに対応した指数部が生成され、固定小数点数のように小数点位置を調整する必要はない。そして、浮動小数点数の中間データに基づいて、各中間データの固定小数点数の最適な小数点位置が決定される。
【００４１】
次に、ＤＮＮプロセッサ４３が、ミニバッチ学習を実行しながら、各中間データの分布についての統計情報を取得・保存する（S61）。ＤＮＮプロセッサ４３に含まれる固定小数点演算を実行するＤＮＮプロセッサ４３＿１は、固定小数点演算器の演算出力等の有効ビットの分布等の統計情報を取得する統計情報取得回路を有する。ＤＮＮプロセッサ４３に統計情報取得処理付の演算命令を実行させることで、ミニバッチ学習中に中間データの統計情報を取得し保存することができる。このミニバッチ学習をＫ回実行するたびに（S10:YES）、中間データの分布の各層の統計情報に基づいて、ＤＮＮ内の各中間データの固定小数点位置を調整する（S63）。
【００４２】
上記のＤＮＮプロセッサ４３内の統計情報取得回路と、分布についての各層の統計情報に基づく固定小数点位置の調整方法については、後で詳述する。
【００４３】
そして、ＤＮＮプロセッサ４３は、全ミニバッチの学習が終了するまで（S11:NO）、S61、S10、S63を繰り返す。全ミニバッチの学習が終了すると（S11:YES）、所定回数に達するまで（S12:NO）、S50に戻って全ミニバッチ学習を繰り返す。なお、図７中の処理S11、S12は、図２の処理S11、S12と同等である。
【００４４】
図８は、図７に示す動的固定小数点数による学習の処理のうち、S61とS63の詳細を説明する図である。S61では、ＤＮＮプロセッサ４３が、ミニバッチ学習をＫ回繰り返し実行する。各ミニバッチ学習では、ＤＮＮプロセッサ４３が、ミニバッチの複数の入力データ及び教師データについて、順伝播処理と、逆伝播処理と、各層を順番にパラメータを更新する処理を実行しながら、各処理における各層の中間データの分布についての統計情報を取得し、保存する。
【００４５】
また、学習の処理S63では、ＤＮＮプロセッサ４３が、保存した統計情報に含まれる複数の中間データの有効ビットの分布に基づいて、各層の各中間データの最適な小数点位置を決定し更新する。
【００４６】
図９は、深層学習の順伝播処理と逆伝播処理とを説明する図である。順伝播処理では、ＤＮＮプロセッサ４３内の固定小数点演算器が、入力側に近い層L1のノードのデータX0−Xnにリンクの重みWijを乗じ、バイアスｂを加算した値を累積加算して、出力側に近い層L2のノードの出力データZ0−Zj…を演算する。さらに、層L2の活性化関数により出力データZ0−Zj…に対する活性化関数の出力データU0−Uj…を演算する。層L1、L2での演算が、入力側から出力側にわたって繰り返される。
【００４７】
一方、逆伝播処理では、ＤＮＮプロセッサ４３内の固定小数点演算器が、出力側に近い層L6の誤差（出力データと正解データの差分または伝播された差分）δ0(6)−δi(6)−δn(6)から、入力側に近い層L5の誤差δ0(5)−δj(5)…を演算する。そして、層L5の誤差δ0(5)−δi(5)−δn(5)を重みWij等のパラメータで微分した値の傾きの方向に応じて、重みの差分更新データΔWijを演算する。層L6、L5での演算が、出力側から入力側にわたって繰り返される。
【００４８】
さらに、各層を順番にパラメータを更新する処理では、既存の重みWijに差分更新データΔWijを加算して、更新された重みWijを演算する。
【００４９】
図９に示される、層L2の出力データZ0−Zj…及び活性化関数の出力データU0−Uj…、層L6、L5での誤差δ0(6)−δi(6)−δn(6) 、誤差δ0(5)−δj(5)…、及び重みの差分更新データΔWij、更新された重みWijは、ＤＮＮの中間データである。これらの中間データの小数点位置を最適な位置に調整することで、各中間データの演算精度を高くすることができ、学習の精度を高くできる。
【００５０】
図１０、図１１は、中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。後述するとおり、ＤＮＮプロセッサ４３は、固定小数点演算器を有し、各演算器の出力や内部メモリ４５内に記憶されている演算結果データ等の中間データの有効ビットの分布についての統計情報を取得する統計情報取得回路を有する。
【００５１】
中間データの有効ビットの分布についての統計情報は、例えば、以下の通りである。
（１）非符号となる最上位ビットの位置の分布
（２）非ゼロとなる最下位ビットの位置の分布
（３）非符号となる最上位ビットの位置の最大値
（４）非ゼロとなる最下位ビットの位置の最小値
（１）非符号となる最上位ビットの位置とは、中間データの有効ビットの最上位ビットの位置である。非符号とは、符号ビットが０（正）であれば「１」、１（負）であれば「０」である。（２）非ゼロとなる最下位ビットの位置とは、中間データの有効ビットの最下位ビットの位置である。符号ビットが０（正）であれば「１」の最下位ビットの位置、符号ビットが１（負）の場合も「１」の最下位ビットの位置である。符号ビットが１の場合、符号ビット以外のビットは２の補数で表され、２の補数を元の数に変換する処理に１を減算して、１、０を０、１に反転する処理が含まれる。そのため、「１」の最下位ビットは、１を減算することで「０」になり、ビット反転で「１」になるので、有効ビットの最下位ビットの位置となる。
【００５２】
（３）非符号となる最上位ビットの位置の最大値は、複数の中間データそれぞれの有効ビットの最上位ビットの位置のうち、最大の位置である。同様に、（４）非ゼロとなる最下位ビットの位置の最小値は、複数の中間データそれぞれの有効ビットの最下位ビットの位置のうち、最小の位置である。
【００５３】
図１０、図１１には、一例として、（１）非符号となる最上位ビットの位置の分布を示すヒストグラムが示される。横軸は、ヒストグラムのビンに対応する中間データの有効最上位ビットのべき乗（２の対数値）を示し、ビンの高さは各ビンの有効最上位ビットを有する中間データの数である。図１０の例では、ビン数が−２５〜＋１３までの合計３９である。
【００５４】
分布の最上位のビンは、（３）非符号となる最上位ビットの位置の最大値に対応する。      
【００５５】
１６ビットの固定小数点数の場合、符号ビットを除くビット数は１５ビットである。そして、固定小数点数のフォーマットをＱｎ．ｍと表現する。Ｑｎ．ｍは、ｎビットの整数部と、ｍビットの小数部を意味する。小数点位置は整数部と小数部との間に位置する。小数点位置とビット幅が固定であるとき、整数部を表現するビット数と小数部を表現するビット数の情報を有する固定小数点数フォーマットを決定することは、データの桁に対する小数点位置を決定することと対応する。また、固定小数点数フォーマットを決定することは、演算結果である中間データを出力として格納する場合に、中間データよりも小さいビット幅で制限をかけることに対応する。演算結果データのビット幅を制限する際の、値を飽和・切り捨て処理をせずに表現可能な桁の範囲を、本実施形態ではビットレンジと呼ぶ。
【００５６】
一方、非符号となる最上位ビットの位置の分布の広がり（ヒストグラムのビンの数）は、複数の中間データに依存して変化する。図１０のヒストグラムの分布の広がりは、−２２のビンから＋１０のビンまで、ビン数が２２＋１０＋１＝３３となり、固定小数点数の１５ビット（固定小数点数で表現可能な領域）内には収まっていない。この表現可能な領域の１５ビットより上位のビットは、オーバーフローとなり飽和処理され、下位のビットはアンダーフローとなり切り捨て処理される。一方、図１１のヒストグラムは、−１３のビンから−２のビンまで、ビン数が１２となり、固定小数点数の１５ビット内に収まっている。
【００５７】
そこで、ヒストグラムである統計情報に基づく小数点位置の決定方法は、ヒストグラムの横幅（ビン数）が１５ビットを超えて表現可能な領域（１５ビット）に収まらない場合（図１０）と、収まる場合（図１１）とで異なる。
【００５８】
図１０のヒストグラムの横幅（ビン数）３３が１５ビットを超えて表現可能な領域（１５ビット）に収まらない場合、以下のように固定小数点数フォーマット（小数点位置）を決定する。すなわち、ヒストグラムの上位ビット側のデータ数の全データ数に対する割合が所定の閾値ｒ＿ｍａｘ未満を満たす、上位ビット側の最大ビット数Ｂｍａｘを決定し、決定したＢｍａｘより下位側に固定小数点数フォーマットを決定する。図１０に示すように、決定したＢｍａｘより上位側にはビンが含まれる、すなわち、新たに決定した固定小数点数フォーマットでは表現できないデータが存在することになる。図１０では、新たに決定した固定小数点数フォーマットでは表現できないデータ領域を斜線のビンで示している。本実施形態の小数点位置の決定方法では、データのオーバーフローを許容することで、最上位ビットの位置が極端に上位側にある外れ値データを無視し、表現可能な領域に収まるデータ数を増加させることができる。
【００５９】
図１０の例では、既存の固定小数点数フォーマットＱ５．１０が−１０〜＋４のビットを収容しているのに対して、更新後の固定小数点数フォーマットをＱ３．１２が−１２〜＋３のビットを収容するように変更される。この変更により、有効ビットの最上位ビットが＋３〜＋１０の中間データは、オーバーフローにより値が飽和されるが、有効ビットの最上位ビットが−１１、−１２の中間データは少なくとも最上位ビットについては切り捨てられない。
【００６０】
図１１の例では、既存の固定小数点数フォーマットＱ４．１１が、ヒストグラムの上位ビット側にずれているので、更新後の固定小数点数フォーマットをＱ１．１４に変更する。Ｑ１．１４の場合は、ヒストグラムのピークの位置にフォーマットＱ１．１４の中央ビットが位置する。これにより、有効ビットの最上位ビットが−１２、−１３、−１４の中間データは少なくとも最上位ビットについては切り捨てられない。
【００６１】
図１２は、図７に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。S63の詳細な処理では、条件により決定される中間データの分布の統計情報に基づいて、ＤＮＮ内の各中間データの固定小数点位置を調整する。以下、図１２を用いて説明するS63の詳細な処理は、全てホストマシン３０のポストプロセッサ３１が実行してもよく、また、一部の処理をＤＮＮ実行マシン４０のＤＮＮプロセッサ４３で実行してもよい。
【００６２】
S10が終了したことを契機に処理が開始され、S61にて保存された各層の統計情報から、統計情報の最大値ｕｂを求める（S631）。統計情報の最大値ｕｂは、例えば、前述した非符号となる最上位ビットの位置の最大値と対応する。次に、S61にて保存された各層の統計情報から、統計情報の最小値ｌｂを求める（S632）。統計情報の最小値ｌｂは、例えば、非符号となる最上位ビットの位置の最小値と対応する。次に、分布の広がりｕｂ−ｌｂ＋１を求める（S633）。ｕｂ−ｌｂ＋１は、統計情報の最大値と最小値の幅を示す。次に、分布の広がりｕｂ−ｌｂ＋１が、符号ビットを除くビット幅Ｎより大きいか否かを判定する（S634）。この判定は、ヒストグラムの横幅（ビン数）が表現可能な領域に収まらない場合（図１０）と、収まる場合（図１１）との場合分けに対応する。
【００６３】
分布の広がりｕｂ−ｌｂ＋１が、符号ビットを除くビット幅Ｎより大きくない場合（S634:NO）、分布の中心(ｕｂ−ｌｂ＋１)／２とビット幅の中心Ｎ／２に基づいて整数部の桁数nを決定する（S635）。整数部の桁数ｎは、固定小数点数のフォーマットＱｎ．ｍで表現されるｎビットの整数部に対応する。分布の広がりが、符号ビットを除くビット幅Nより大きい場合（S634:YES）、オーバーフロー率が既定値ｒ＿ｍａｘを超える桁を求める関数に基づいて整数部の桁数ｎを決定する（S636）。次に、S635またはS636にて求められた整数部の桁数ｎとビット幅Ｎに基づいて小数部の桁数ｍを決定する（S637）。整数部の桁数ｍは、固定小数点数のフォーマットＱｎ．ｍで表現されるｍビットの小数部に対応する。
【００６４】
［第１実施形態にかかる深層学習の固定小数点位置の調整］
第１実施形態にかかる深層学習の統計情報の取得方法について、図１３〜図１６を用いて説明する。
【００６５】
第１実施形態にかかる深層学習は、ＤＮＮの層としてドロップアウト層Ｄｒｏｐｏｕｔを有する。第１実施形態にかかる深層学習では、ドロップアウト層Ｄｒｏｐｏｕｔの固定小数点位置の調整において、ドロップアウト層Ｄｒｏｐｏｕｔの前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第１実施形態にかかる深層学習には、ドロップアウト層Ｄｒｏｐｏｕｔにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【００６６】
図１３は、本実施形態にかかる深層学習のフローチャートを示す図である。本実施形態にかかる深層学習は、図７にて説明される深層学習に対して、共通の符号を用いる処理は同等だが、以下の点で異なる。図７にて説明されるフローチャートのS61にて各層の各中間データの値の分布を統計情報として取得・保存する処理の代わりに、各層の統計情報を取得・保存するが特定の層については統計情報を取得しない処理を行う（S131）。図７にて説明されるフローチャートのS63にて各層の各統計情報に基づいて各層の固定小数点位置を調整する代わりに、条件により決定される統計情報に基づいて各層の固定小数点数位置を調整する（S133）。
【００６７】
ドロップアウト層は、ドロップアウト比率に従って前層の出力を０とし、残りの出力をドロップアウト比率に基づいて定数倍して出力を行うことで、ＤＮＮの過学習を防ぐことを目的とする層である。ドロップアウト層の処理を実行する処理回路は、ＤＮＮプロセッサ４３に含まれる。ドロップアウト層Ｄｒｏｐｏｕｔの処理は、ドロップアウト比率ｒで１を有し、残りは０の配列となるマスクデータｍを作成し、前層の出力ｘに対し乗算または値のセレクトを行い、得られた乗算結果に対して係数ｋを乗算することで、ドロップアウト層Ｄｒｏｐｏｕｔの出力ｙを得る。係数ｋはドロップアウト比率ｒに基づいて下記式（１）で表される。
【００６８】
【数１】
2020166674.tif 000003
【００６９】
ｋが２のべき乗（２＾ｑ：ｑは整数）である場合、２進数の桁シフトに対応する値ｐとして用いることができる。値ｐは、係数ｋに基づいて下記式（２）で表される。
【００７０】
【数２】
2020166674.tif 000004
【００７１】
図１４は、図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第１例を説明する図である。
【００７２】
図１５は、図１３に示すフローチャートのうちS133の詳細な処理の第１例を示すフローチャートの図である。以下、図１５を用いて説明するS133の詳細な処理は、全てＤＮＮ実行マシン４０が実行してもよく、また、一部の処理をホストマシン３０で実行してもよい。
【００７３】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、ドロップアウト層であるか否かを判定する（S1331）。固定小数点位置を調整する層がドロップアウト層でない場合（S1331:NO）、調整する層の統計情報を後ろの処理で用いることを決定する（S1332）。調整する層がドロップアウト層である場合（S1331：YES）、調整する層の前層の統計情報を後ろの処理で用いることを決定する（S1333）。調整する層の前層は、順伝播処理の場合は調整する層よりも入力層側の層であり、逆伝播処理の場合は調整する層よりも出力層側の層である。次に、ドロップアウト層の処理で用いられるドロップアウト比率ｋから、値ｐを求める（S1334）。値ｐは、前述の通り、２進数の桁シフトに対応する値である。次に、S1334にて求められた値ｐを用いて統計情報をシフトし、シフトされた統計情報を後ろの処理で用いることを決定する（S1335）。統計情報のシフトは、ヒストグラムのビンの値に値ｐを加算することに相当する。
【００７４】
次に、決定された統計情報に基づいて層の各中間データの固定小数点位置を調整する（S1336）。S1336は、図７、図１２にて説明したS63と、条件により決定される統計情報を用いること以外はS63と同等である。
【００７５】
そして、全層の固定小数点位置の調整が終了するまで（S1337:NO）、S1331〜S1336を繰り返す。全層の固定小数点位置の調整が終了すると（S1337:YES）、S11に進む。
【００７６】
図１６は、ドロップアウト層の処理前後の最上位ビットの位置の分布の例を示す図である。ドロップアウト層は前述の処理回路を用いて、所定の規則に従って演算を行う。ドロップアウト層の所定の規則とは、前層の出力に対してドロップアウト比率ｒのデータに０を乗算して出力し、残りのデータにｋを乗算して出力することである。処理によるデータの変化、すなわち、ドロップアウト層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【００７７】
ドロップアウト層の処理によって前層（図１４の例ではＣｏｎｖ＿２）の出力は、ドロップアウト比率ｒのデータに０が乗算され、残りのデータには係数ｋが乗算される。乗算された係数ｋによるデータの桁数の変化、すなわち最上位ビットの位置の分布がシフトする桁数は、前層から入力されるデータにかかわらず上記式（１）、式（２）で示される値ｐから予測できる。例えば、ドロップアウト比率ｒ＝１／２のときは、係数ｋ＝２、値ｐ＝１となる。図１６の（Ａ）のヒストグラムは、ドロップアウト層の処理前のデータの最上位ビットの位置の分布を示す。図１６の（Ｂ）のヒストグラムは、ドロップアウト層の処理後のデータの最上位ビットの位置の分布を示す。図１６の（Ａ）のヒストグラムに対して、図１６の（Ｂ）のヒストグラムは、全部のビンの高さが半分となり、全部のビンが１桁上位にシフトしている。ビンの高さの変化は、各ビンのデータ数の変化であり、ドロップアウト比率ｒ＝１／２を乗じたことに相当する。ビンのシフトは、横軸であるデータの最上位ビットの位置の変化であり、係数ｋ＝２を残りのデータに乗算したことにより、データ全体の最上位ビットの桁が１桁上位にシフトしたことに相当する。
【００７８】
ここで、図１６の（Ａ）のヒストグラムは、ドロップアウト層の前層（図１４の例ではＣｏｎｖ＿２）の中間データにおける統計情報に相当する。図１６の（Ｂ）のヒストグラムは、図１６の（Ａ）のヒストグラムを値ｐシフトしたものに相当する。ビンの高さの変化による、分布の最大値と最小値が変化するケースは少ない。よって、ドロップアウト層において処理されるデータの有する最上位ビットは、図１６の（Ｂ）のヒストグラムと同じ傾向を示す。ドロップアウト層の前層の統計情報を値ｐだけシフトした第２統計情報に基づいて適切な小数点位置を設定可能となる。このため、ドロップアウト層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【００７９】
［固定小数点ＤＮＮプロセッサの構成と統計情報の取得］
次に、本実施形態にかかる固定小数点ＤＮＮプロセッサ４３の構成と統計情報の取得について説明する。
【００８０】
図１７は、ＤＮＮプロセッサ４３の構成例を示す図である。ＤＮＮプロセッサ４３は、命令制御部INST_CONと、レジスタファイルREG_FLと、特別レジスタSPC_REGと、スカラー演算ユニットSC_AR_UNIT、ベクトル演算ユニットVC_AR_UNITと、統計情報集約器ST_AGR_1、ST_AGR_2とを有する。
【００８１】
ＤＮＮプロセッサ４３は、ベクトル演算ユニットVC_AR_UNIT内に固定小数点数を演算する整数演算器INTと、浮動小数点数を演算する浮動小数点演算器FPとを有する。つまり、ＤＮＮプロセッサ４３は、固定小数点演算を実行するＤＮＮプロセッサ４３＿１と浮動小数点演算を実行するＤＮＮプロセッサ４３＿２とを有する。
【００８２】
また、ＤＮＮプロセッサ４３には、メモリアクセスコントローラ４４を介して、命令用メモリ４５＿１とデータ用メモリ４５＿２とが接続される。メモリアクセスコントローラ４４は、命令用メモリアクセスコントローラ４４＿１と、データ用メモリアクセスコントローラ４４＿２とを有する。
【００８３】
命令制御部INST_CONは、例えば、プログラムカウンタPCと、命令デコーダDECを有する。命令制御部INST_CONは、プログラムカウンタPCのアドレスに基づいて命令を命令用メモリ４５＿１からフェッチし、命令デコーダDECがフェッチした命令をデコードし、演算ユニットに発行する。
【００８４】
レジスタファイルREG_FLは、スカラー演算ユニットSC_AR_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を有する。
【００８７】
スカラー演算ユニットSC_AR_UNITは、１組の整数演算器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、データ用メモリ４５＿２のいずれかに格納される。
【００８８】
ベクトル演算ユニットVC_AR_UNITは、８要素（エレメント）の演算ユニットEL0-EL7を有する。各エレメントEL0-EL7は、整数演算器INTと、浮動小数点演算器FPと、データ変換器D_CNVとを有する。ベクトル演算ユニットは、例えば、ベクトルレジスタファイルVC_REG_FL内のいずれかのセットの８エレメントのレジスタREGn0-REGn7を入力し、８エレメントの演算器で演算を並列に実行し、その演算結果を他のセットの８エレメントのレジスタREGn0-REGn7に格納する。
【００８９】
また、データ変換器D_CNVは、演算の結果、データ用メモリ４５＿２からの読み出し結果等で得られる固定小数点数データをシフトする。データ変換器D_CNVは、命令デコーダDECがフェッチした命令に指定されるシフト量Ｓだけ固定小数点数データをシフトする。データ変換器D_CNVによるシフトは、固定小数点数のフォーマットに対応した小数点位置を調整することに相当する。また、データ変換器D_CNVは、シフトとともに、固定小数点数データの上位ビットの飽和処理及び下位ビットの丸めを実行する。データ変換器D_CNVは、例えば、入力を４０ビットの演算結果とし、下位ビットを小数部として丸めを行なう丸め処理部と、算術シフトを実行するシフタと飽和処理を行なう飽和処理部を有する。
【００９０】
そして、データ変換器D_CNVは、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、オーバーフローが発生する場合、符号ビットが正を示すときは正の最大値、符号ビットが負を示すときは負の最大値で値を置き換える。また、データ変換器D_CNVは、右シフト時、上位ビット（符号ビットより下位のビット）に符号ビットを埋め込む。そして、データ変換器D_CNVは、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイルREG_FLのレジスタと同一のビット幅で出力する。データ変換部は固定小数点数データの小数点位置を調整する回路の一例である。
【００９１】
また、ベクトル演算ユニットVC_AR_UNITは、８エレメントの演算器でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレートレジスタVC_ACCの８エレメントのレジスタA_REG0〜A_REG7に格納する。
【００９２】
ベクトルレジスタREGn0-REGn7及びベクトルアキュムレートレジスタA_REG0〜A_REG7は、演算対象データのビット数が３２ビット、１６ビット、８ビットかに応じて、演算エレメント数が８、１６、３２と増加する。
【００９３】
ベクトル演算ユニットVC_AR_UNITは、８エレメントの整数演算器INTの出力データの統計情報をそれぞれ取得する８つの統計情報取得器ST_ACを有する。統計情報は、整数演算器INTの出力データの非符号となる最上位ビットの位置情報である。統計情報は、後述する図２０で説明するビットパターンBPとして取得される。統計情報取得器ST_ACは、整数演算器INTの出力データに加えて、データ用メモリ４５＿２内のデータや、スカラーレジスタファイルSC_REG_FLやスカラーアキュムレートレジスタSC_ACC内のデータを入力し、その統計情報を取得するようにしてもよい。
【００９４】
統計情報レジスタファイルST_REG_FLは、後述する図２３に示すとおり、例えばそれぞれ３２ビット×４０エレメントの統計情報レジスタSTR0-STR39を、例えば８セットSTR0_0-STR0_39〜STR7_0-STR7_39を有する。
【００９５】
スカラーレジスタSR0-SR31には、例えば、アドレスやＤＮＮのパラメータ等が格納される。また、ベクトルレジスタREG00-REG07〜REG70-REG77には、ベクトル演算ユニットVC_AR_UNITの入力データや出力データが格納される。そして、ベクトルアキュムレートレジスタVC_ACCには、ベクトルレジスタ同士の乗算結果や加算結果が格納される。
【００９６】
統計情報レジスタSTR0_0-STR0_39〜STR7_0-STR7_39には、最大で８種類のヒストグラムの複数のビンに属するデータの数が格納される。整数演算器INTの出力データが４０ビットの場合、４０ビットそれぞれに非符号となる最上位ビットを有するデータ数が、例えば、統計情報レジスタSTR0_0-STR0_39に格納される。
【００９７】
スカラー演算ユニットSC_AR_UNITは、四則演算、シフト演算、分岐、ロード・ストア等を有する。前述したとおり、スカラー演算ユニットSC_AR_UNITは、整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【００９８】
ベクトル演算ユニットVC_AR_UNITは、浮動小数点演算、整数演算、ベクトルアキュムレートレジスタVC_ACCを用いた積和演算等を実行する。また、ベクトル演算ユニットVC_AR_UNITは、ベクトルアキュムレートレジスタVC_ACCのクリア、積和演算（MAC: Multiply and Accumulate）、累積加算、ベクトルレジスタファイルVC_REG_FLへの転送等を実行する。さらに、ベクトル演算ユニットVC_AR_UNITは、ロードとストアも実行する。前述したとおり、ベクトル演算ユニットVC_AR_UNITは、８エレメントそれぞれの整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【００９９】
［統計情報の取得、集約、格納］
次に、ＤＮＮプロセッサ４３による、演算出力データの統計情報の取得、集約、格納について、説明する。統計情報の取得、集約、格納は、ホストプロセッサ３１から送信される命令であり、ＤＮＮプロセッサ４３が実行する命令をトリガにして実行される。したがって、ホストプロセッサ３１は、ＤＮＮの各層の演算命令に加えて、統計情報の取得、集約、格納を実行する命令を、ＤＮＮプロセッサ４３に送信する。または、ホストプロセッサ３１は、各層の演算のために、統計情報の取得、集約、格納の処理付の演算命令をＤＮＮプロセッサ４３に送信する。
【０１００】
図１８は、ＤＮＮプロセッサ４３による統計情報の取得、集約、格納の処理を示すフローチャートの図である。まず、ベクトル演算ユニットVC_AR_UNIT内の８つの統計情報取得器ST_ACが、整数演算器INTが出力する各層の演算による中間データの非符号となる最上位ビット位置を示すビットパターンをそれぞれ出力する（S170）。ビットパターンについては、後述する。
【０１０１】
次に、統計情報集約器ST_AGR_1が、８つのビットパターンの各ビットの「１」を加算して集約する（S171）。
【０１０２】
さらに、統計情報集約器ST_AGR_2が、統計情報レジスタファイルST_REG_FL内の統計情報レジスタ内の値に、S171で加算して集約した値を加算し、統計情報レジスタファイルST_REG_FLに格納する（S172）。
【０１０３】
上記の処理S170、S171、S172は、ベクトル演算ユニットVC_AR_UNIT内の８つのエレメントEL0-EL7による各層の演算の結果である中間データが生成されるたびに、繰り返される。
【０１０４】
深層学習の処理では、Ｋ回のミニバッチ内の複数の中間データについて、上記の統計情報の取得、集約、格納処理が完了すると、統計情報レジスタファイルST_REG_FLには、Ｋ回のミニバッチ内の複数の中間データの非符号となる最上位ビットのヒストグラムの各ビンの数である統計情報が生成される。これにより、Ｋ回のミニバッチ内の中間データの非符号となる最上位ビットの位置の合計が、ビット別に集計される。この統計情報に基づいて、各中間データの小数点位置が調整される。
【０１０５】
各層の中間データの小数点位置の調整は、例えば、ホストマシン３０のホストプロセッサ３１によって行われる。統計情報レジスタSTR0_0-STR0_39に格納される各層の統計情報がホストマシン３０のデータ用メモリ４５＿２に書き込まれ、ホストプロセッサ３１は演算を行い図１２にて説明される処理を実行する。ホストプロセッサ３１は、新たに決定した小数点位置と現在の小数点位置との差分を求め、シフト量Sとしてデータ用メモリ４５＿２に書き込む。
【０１０６】
［統計情報の取得］
図１９は、統計情報取得器ST_ACの論理回路例を示す図である。また、図２０は、統計情報取得器が取得する演算出力データのビットパターンBPを示す図である。統計情報取得器ST_ACは、整数演算器INTが出力するNビット（N=40）の中間データ（例えば順伝播処理では畳み込み演算の演算出力データ、逆伝播処理では誤差や重みの更新差分）in[39:0]を入力し、非符号となる最上位ビットの位置を「１」で示しそれ以外を「０」で示すビットパターン出力out[39:0]を出力する。
【０１０７】
図２０に示されるとおり、統計情報取得器ST_ACは、中間データである入力in[39:0]について、非符号（符号ビットと異なる１または０）となる最上位ビットの位置で「１」をとり、それ以外の位置で「０」をとる出力out[39:0]をビットパターンBPとして出力する。但し、入力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は、演算出力である中間データの符号ビットと異なる「１」または「０」の最上位ビットの位置を含む分布情報をビットパターンBPとして出力する。
【０１１２】
［統計情報の集約］
図２１は、統計情報集約器ST_AGR_1の論理回路例を示す図である。また、図２２は、統計情報集約器ST_AGR_1の動作を説明する図である。統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITで取得される８つの統計情報であるビットパターンBP_0〜BP_7を入力し、８つのビットパターンBP_0〜BP_7の各ビットの「１」を加算した出力out0〜out39を出力する。ビットパターンBP_0〜BP_7は、それぞれ４０ビットであり、out0〜out39は、例えば、それぞれ4ビットである。
【０１１３】
図２１の論理回路に示すとおり、統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITの統計情報取得器ST_ACそれぞれが取得した各ビットパターンBP_0〜BP_7の各ビットの「１」を、加算回路SGM_0-SGM_39で加算し、加算結果を出力out0〜out39として生成する。図２２の出力に示されるとおり、出力はout0〜out39である。出力の各ビットは、要素数をカウントできるようにlog2(要素数＝８)＋１ビットであり、要素数が８の場合は４ビットとなる。
【０１１４】
統計情報集約器ST_AGR_1は、スカラー演算ユニットSC_AR_UNIT内の統計情報取得器ST_ACが取得した１つのビットパターンBPをそのまま出力することもできる。そのために、加算回路SGM_0-SGM_39の出力か、スカラー演算ユニットSC_AR_UNITのビットパターンBPかのいずれかを選択するセレクタSELを有する。
【０１１５】
図２３は、第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。第２の統計情報集約器ST_AGR_2は、第１の統計情報集約器ST_AGR_1が集約した出力out0〜out39の各ビットの値を、統計情報レジスタファイルST_REG_FL内の１つのレジスタセットの値に加算し、格納する。
【０１１６】
統計情報レジスタファイルST_REG_FLは、例えば、４０個の３２ビットレジスタSTRn_39〜STRn_0 を８セット(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のハードウエア回路により、ＤＮＮの各層で演算される中間データの非符号となる最上位ビットの位置（有効ビットの最上位ビットの位置）の分布（ヒストグラムの各ビンのサンプル数）を取得することができる。
【０１１８】
非符号となる最上位ビットの位置の分布以外に、非ゼロとなる最下位ビットの位置の分布についても、上記と同様の方法でＤＮＮプロセッサ４３のハードウエア回路により取得できる。さらに、非符号となる最上位ビット位置の最大値、非ゼロとなる最下位ビット位置の最小値も同様に取得できる。
【０１１９】
ＤＮＮプロセッサ４３のハードウエア回路により統計情報を取得できるので、深層学習での中間データの固定小数点位置の調整を、わずかな工数の増加で実現できる。
【０１２０】
［第２実施形態にかかる深層学習の固定小数点位置の調整］
第２実施形態にかかる深層学習の統計情報の取得方法について、図２４、図２５を用いて説明する。
【０１２１】
第２実施形態にかかる深層学習は、ＤＮＮの層としてReLU層ReLUを有する。第２実施形態にかかる深層学習では、ReLU層ReLUの固定小数点位置の調整において、ReLU層ReLUの前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第２実施形態にかかる深層学習には、ReLU層ReLUにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【０１２２】
ReLU（Rectified Linear Unit）層は、前層の出力のうち０より小さい値の出力を０とし、０位上の値の出力をそのままの値で出力を行うことで、ＤＮＮの過学習を防ぐことを目的とする層である。ReLU層の処理を実行する処理回路は、ＤＮＮプロセッサ４３に含まれる。ReLU層ReLUの処理は、前層の出力ｘに対し０以上か否か判定し、判定結果によって出力ｘか０かの値のセレクトを行い、ReLU層ReLUの出力ｙを得る。
【０１２３】
図２４は、図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第２例を説明する図である。
【０１２４】
図２５は、図１３に示すフローチャートのうちS133の詳細な処理の第２例を示すフローチャートの図である。以下、第１実施形態と説明が共通する部分は説明を省略する。
【０１２５】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、ReLU層であるか否かを判定する（S2331）。調整する層がReLU層である場合（S2331：YES）、調整する層の前層の統計情報を後ろの処理で用いることを決定する（S2333）。
【０１２６】
ReLU層は、ドロップアウト層と同様に前述の処理回路を用いて、所定の規則に従って演算を行う。ReLU層の所定の規則とは、前層の出力のうち０より小さい値を有するデータの値を０に変更し、前層の出力のうち０以上の値を有するデータの値はそのまま出力することである。処理によるデータの変化、すなわち、ReLU層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【０１２７】
ReLU層の処理によって前層（図２４の例ではＣｏｎｖ＿２）の出力は、０より小さい値を有するデータの値は０に変更され、０以上の値を有するデータの値はそのまま出力される。０より小さい値を有するデータが０に切り上げられるようになるため、正のデータにおいては最大値及び最小値は変化しない。前層から入力されるデータにかかわらず、ReLU層の処理後の中間データの分布の範囲は、ReLU層の前層（図２４の例ではＣｏｎｖ＿２）の中間データにおける統計情報の範囲と一致する。ReLU層の前層の統計情報を第２統計情報とし、第２統計情報に基づいて適切な小数点位置を設定可能となる。このため、ReLU層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【０１２８】
［第３実施形態にかかる深層学習の固定小数点位置の調整］
第３実施形態にかかる深層学習の統計情報の取得方法について、図２６、図２７を用いて説明する。
【０１２９】
第３実施形態にかかる深層学習は、ＤＮＮの層としてプーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２を有する。第３実施形態にかかる深層学習では、プーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２の固定小数点位置の調整において、プーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２の前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第３実施形態にかかる深層学習には、プーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２における統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【０１３０】
プーリング層の処理を実行する処理回路は、ＤＮＮプロセッサ４３に含まれる。プーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２の処理は、前層の複数の出力ｘのうち局所的な値、例えば、所定の画素の範囲（カーネル）の最大値を選択し、プーリング層Ｐｏｏｌ＿１、Ｐｏｏｌ＿２の出力ｙを得る。
【０１３１】
図２６は、図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第３例を説明する図である。
【０１３２】
図２７は、図１３に示すフローチャートのうちS133の詳細な処理の第３例を示すフローチャートの図である。以下、第２実施形態と説明が共通する部分は説明を省略する。
【０１３３】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、プーリング層であるか否かを判定する（S3331）。調整する層がプーリング層である場合（S3331：YES）、調整する層の前層の統計情報を後ろの処理で用いることを決定する（S3333）。
【０１３４】
プーリング層は、ドロップアウト層と同様に前述の処理回路を用いて、所定の規則に従って演算を行う。プーリング層の所定の規則とは、前層の出力のカーネルごとの最大値を選択し、カーネルに属するデータをそのカーネルの最大値に変更することである。処理によるデータの変化、すなわち、プーリング層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【０１３５】
プーリング層の処理が最大値を求める場合、プーリング層の処理によって前層（図２６の例ではＣｏｎｖ＿１、Ｃｏｎｖ＿２）の出力は、カーネルごとの最大値に変更される。すべてのデータがカーネルごとの最大値に切り上げられるようになるため、前層の最大値以上の値は出力されない。プーリング層の処理後の中間データの分布の最大値は、プーリング層の前層（図２６の例ではＣｏｎｖ＿１、Ｃｏｎｖ＿２）の中間データにおける統計情報の最大値と一致する。前層の出力の最大値を表現可能であれば良いため、プーリング層の前層の統計情報を第２統計情報とし、第２統計情報に基づいて適切な小数点位置を設定可能となる。このため、プーリング層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【０１３６】
［第４実施形態にかかる深層学習の固定小数点位置の調整］
第４実施形態にかかる深層学習の統計情報の取得方法について、図２８〜図３０を用いて説明する。
【０１３７】
第４実施形態にかかる深層学習は、ＤＮＮの層としてConcat層Concatを有する。第４実施形態にかかる深層学習では、Concat層Concatの固定小数点位置の調整において、Concat層Concatに接続される前層すべてで取得された統計情報に基づいて固定小数点位置の調整を行う。また、Concat層Concatの前層の固定小数点位置の調整において、Concat層Concatに接続される前層すべてで取得された統計情報に基づいて固定小数点位置の調整を行う。第４実施形態にかかる深層学習には、Concat層Concatにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。また、すべての前層及びConcat層Concatの小数点位置を一致させることができ、演算精度が下がることを防ぐ効果がある。
【０１３８】
Concat層Concatの処理を実行する処理回路は、ＤＮＮプロセッサ４３に含まれる。Concat層Concatの処理は、ＤＮＮの途中でデータを分割されそれぞれ別の層で計算されたデータを連接（Concatenation）することである。
【０１３９】
Concat層Concatにて連接される分割されたデータは、それぞれ別の前層にて計算されるため、深層学習の一例にかかる学習処理ではそれぞれの前層の計算結果に基づいて小数点位置が決定される。前層にて決定された２つの小数点位置は一致しない場合が多い。また、Concat層Concatの小数点位置を前層の最大値が表現範囲に含まれるように調整しようとすると、二重の飽和・丸め処理によって損失データが増加する。
【０１４０】
図２８は、深層学習の一例における、二重の飽和・丸め処理を説明する図である。図２８に示される各長方形は、入出力データの桁を示す。また、図２８に示される黒丸は、固定小数点の小数点位置を示す。前層１の出力６１、前層２の出力６２は、前層１及び前層２にて計算された値がスカラーアキュムレートレジスタSC_ACCに格納されている状態のデータを示す。前層１からの入力６３、前層２からの入力６４は、前層１の出力６１、前層２の出力６２にそれぞれ飽和・丸め処理を行い、Concat層Concatに入力されるデータを示す。Concat層の出力６５、６６は、前層１からの入力６３、前層２からの入力６４にそれぞれ飽和・丸め処理を行い、Concat層Concatにて出力されるデータを示す。前層１、前層２は、Concat層Concatに接続される前層である。
【０１４１】
前層１の出力６１及び前層２の出力６２は、前層１及び前層２にて決定された小数点位置に基づいて飽和・丸め処理が行われ、小数点位置に対応する表現範囲から外れる桁の値は失われる。Concat層の出力６５は、Concat層Concatにて決定された小数点位置に基づいて飽和・丸め処理が行われ、小数点位置に対応する表現範囲から外れる桁の値は失われる。図２８の例では、前層１の小数点位置はＱ５．２、前層２の小数点位置はＱ３．４、Concat層Concatの小数点位置はＱ４．３である。
【０１４２】
前層１、前層２及びConcat層Concatの間で小数点位置が異なることで、前層１の出力６１及び前層２の出力６２からConcat層の出力６５が演算されるまでに、二重の飽和・丸め処理が行われ表現範囲から外れ値が失われる桁の値が存在する。
【０１４３】
前層１の出力６１の斜線の桁は、前層１の小数点位置Ｑ５．２に基づいて丸め処理が行われ、Concat層Concatの小数点位置Ｑ４．３に基づいて最下位ビットに「０」が補完される。前層１の出力６１から二重の飽和・丸め処理を行いConcat層の出力６５を出力するまでに、斜線の桁の値が失われる。
【０１４４】
前層２の出力６２の斜線の桁は、前層２の小数点位置Ｑ３．４に基づいて飽和処理が行われ、Concat層Concatの小数点位置Ｑ４．３に基づいて最上位ビット、すなわち符号ビットに隣接するビットに正の値が補完される。飽和処理は、例えば、前層２の出力６２が正の場合は、表現範囲の最大値に値が飽和される。前層２の出力６２から二重の飽和・丸め処理を行いConcat層の出力６６を出力するまでに、斜線の桁の値が失われる。
【０１４５】
図２９は、図１３に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第４例を説明する図である。
【０１４６】
図３０は、図１３に示すフローチャートのうちS133の詳細な処理の第４例を示すフローチャートの図である。以下、第２実施形態と説明が共通する部分は説明を省略する。
【０１４７】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、次の層がConcat層であるか否かを判定する（S4330）。調整する層の次の層がConcat層である場合（S4330：YES）、Concat層に接続される前層すべて（図２９の例ではＣｏｎｖ＿２、Ｃｏｎｖ＿３）で取得された統計情報（図２９の例では統計情報１、統計情報２）をレジスタから取得する（S4333）。次に、S4333にて取得した統計情報すべてを加算する（図２９の例では統計情報１＋統計情報２）（S4334）。統計情報の加算は、ＤＮＮプロセッサ４３に含まれるスカラー演算ユニットSC_AR_UNITによって行われる。次に、S4334にて加算した統計情報を後ろの処理で用いることを決定する（S4335）。調整する層の次の層がConcat層でない場合（S4330：NO）、固定小数点位置を調整する層についてConcat層であるか否かを判定する（S4331）。調整する層がConcat層である場合（S4331：YES）、S4333〜S4335を実行する。Concat層において後ろの処理で用いる統計情報として、Concat層の前層で用いることに決定された統計情報と同じものを用いることにしても良い。また、Concat層の固定小数点位置を、前層で調整された固定小数点位置と同じものを用いることにしても良い。
【０１４８】
Concat層は、所定の規則に従って演算を行う。Concat層の所定の規則とは、前層の出力を連接することである。処理によるデータの変化、すなわち、Concat層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【０１４９】
Concat層Concatの処理によって前層（図２９の例ではＣｏｎｖ＿２、Ｃｏｎｖ＿３）の出力は、連接され１つのデータ群として扱われる。例えば、前層１のデータ群と前層２のデータ群とが連接されるため、前層１の統計情報１と前層２の統計情報２とを加算した統計情報はConcat層Concatの処理後の中間データにおける分布に対応する。Concat層Concatの前層すべての統計情報を加算した統計情報に基づいて適切な小数点位置を設定可能となる。このため、Concat層Concatの統計情報を取得することを省略することが可能となる。また、すべての前層及びConcat層Concatの間で小数点位置を一致させることができ、前層の出力からConcat層Concatの出力が演算されるまでに、二重の飽和・丸め処理が行われず値が失われることを防止する。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【符号の説明】
【０１５０】
３０：ホストマシン
３１：ホストプロセッサ
３２：高速入出力インターフェース
３３：メインメモリ
３４：内部バス
３５：補助記憶装置
３６：低速入出力インターフェース
４０：ＤＮＮ実行マシン
４１：高速入出力インターフェース
４２：制御部
４３：ＤＮＮプロセッサ
４３＿１：固定小数点演算を実行するＤＮＮプロセッサ
４３＿２：浮動小数点演算を実行するＤＮＮプロセッサ
４４：メモリアクセスコントローラ
４４＿１：命令用メモリアクセスコントローラ
４４＿２：データ用メモリアクセスコントローラ
４５：内部メモリ
４５＿１：命令用メモリ
４５＿２：データ用メモリ
５０：利用者端末
６１：前層１の出力
６２：前層２の出力
６３：前層１からの入力
６４：前層２からの入力
６５、６６：Concat層の出力
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：統計情報集約器
【図１】
2020166674.tif 000005
【図２】
2020166674.tif 000006
【図３】
2020166674.tif 000007
【図４】
2020166674.tif 000008
【図５】
2020166674.tif 000009
【図６】
2020166674.tif 000010
【図７】
2020166674.tif 000011
【図８】
2020166674.tif 000012
【図９】
2020166674.tif 000013
【図１０】
2020166674.tif 000014
【図１１】
2020166674.tif 000015
【図１２】
2020166674.tif 000016
【図１３】
2020166674.tif 000017
【図１４】
2020166674.tif 000018
【図１５】
2020166674.tif 000019
【図１６】
2020166674.tif 000020
【図１７】
2020166674.tif 000021
【図１８】
2020166674.tif 000022
【図１９】
2020166674.tif 000023
【図２０】
2020166674.tif 000024
【図２１】
2020166674.tif 000025
【図２２】
2020166674.tif 000026
【図２３】
2020166674.tif 000027
【図２４】
2020166674.tif 000028
【図２５】
2020166674.tif 000029
【図２６】
2020166674.tif 000030
【図２７】
2020166674.tif 000031
【図２８】
2020166674.tif 000032
【図２９】
2020166674.tif 000033
【図３０】
2020166674.tif 000034