(57)【要約】      （修正有）【課題】事前学習を固定小数点演算で高精度に実行する学習プログラムを提供する。【解決手段】ディープニューラルネットワークの深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、深層学習は、ディープニューラルネットワークの各層の処理を所定方向に繰り返す事前学習を有する。事前学習での各層の処理は、各層の演算により求められる中間データの固定小数点数の小数点位置を仮決めし、仮決めした小数点位置の固定小数点数で、各層の演算を実行して中間データを求めると共に、中間データのビットの分布を有する統計情報を取得し、統計情報に基づいて、中間データの小数点位置を決定し、少なくとも１つの中間データにおいて、決定した小数点位置と仮決めした小数点位置の差が所定の閾値を超える場合、決定した小数点位置の固定小数点数で、各層の演算を再度実行する。【選択図】図９
2020077143.tif 000002
【特許請求の範囲】
【請求項１】
ディープニューラルネットワークの深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
前記深層学習は、
前記ディープニューラルネットワークの各層の処理を所定方向に繰り返す事前学習を有し、
前記事前学習での各層の処理は、
（ａ）前記各層の演算により求められる中間データの固定小数点数の小数点位置を仮決めし、
（ｂ）前記仮決めした小数点位置の固定小数点数で、前記各層の演算を実行して前記中間データを求めると共に、前記中間データのビットの分布を有する統計情報を取得し、
（ｃ）前記統計情報に基づいて、前記中間データの小数点位置を決定し、
（ｄ）少なくとも１つの前記中間データにおいて、前記決定した小数点位置と前記仮決めした小数点位置の差が所定の閾値を超える場合、前記決定した小数点位置の固定小数点数で、前記各層の演算を再度実行することを含む、学習プログラム。
【請求項２】
前記処理（ｂ）を複数の教師データについて実行し、前記複数の教師データそれぞれにより生成された複数の中間データの非符号の最上位ビットの位置の分布を、前記統計情報として取得する、請求項１に記載の学習プログラム。
【請求項３】
前記処理（ｄ）では、所定数または所定割合以上の中間データの前記差が前記所定の閾値を超える場合、前記各層の演算の再実行を行う、請求項１に記載の学習プログラム。
【請求項４】
前記深層学習は、更に、
前記ディープニューラルネットワークの各層の処理を所定方向に繰り返す本番学習を有し、
前記本番学習の各層の処理は、
（ｅ）前記事前学習で決定した小数点位置の固定小数点数で、前記各層の演算を実行して前記中間データを求めると共に、前記中間データのビットの分布を有する統計情報を取得し、
（ｆ）前記統計情報に基づいて、前記中間データの小数点位置を調整することを含む、請求項１に記載の学習プログラム。
【請求項５】
前記深層学習の複数の教師データが、複数のミニバッチ学習それぞれの複数の学習データに分割され、
前記事前学習での前記処理（ｂ）は、第１の回数のミニバッチ学習の複数の教師データについて実行され、
前記深層学習での前記処理（ｅ）は、前記第１の回数より多い第２の回数のミニバッチ学習の複数の教師データについて実行される、請求項４に記載の学習プログラム。
【請求項６】
前記所定方向は、前記ディープニューラルネットワークの各層の順方向、逆方向、または順方向及びその後の逆方向のうち、いずれかである、請求項１または５に記載の学習プログラム。
【請求項７】
ディープニューラルネットワークの深層学習の方法であって、
前記深層学習は、
前記ディープニューラルネットワークの各層の処理を所定方向に繰り返す事前学習を有し、
前記事前学習での前記各層の処理は、
（ａ）前記各層の演算により求められる中間データの固定小数点数の小数点位置を仮決めし、
（ｂ）前記仮決めした小数点位置の固定小数点数で、前記各層の演算を実行して前記中間データを求めると共に、前記中間データのビットの分布を有する統計情報を取得し、
（ｃ）前記統計情報に基づいて、前記中間データの小数点位置を決定し、
（ｄ）少なくとも１つの前記中間データにおいて、前記決定した小数点位置と前記仮決めした小数点位置の差が所定の閾値を超える場合、前記決定した小数点位置の固定小数点数で、前記各層の演算を再度実行することを含む、学習方法。
【請求項８】
メモリと、
前記メモリにアクセス可能な固定小数点の演算処理装置とを有し、
前記固定小数点の演算処理装置は、
ディープニューラルネットワークの各層の処理を所定方向に繰り返す事前学習を有する深層学習を実行し、
前記事前学習での前記各層の処理は、
（ａ）前記各層の演算により求められる中間データの固定小数点数の小数点位置を仮決めし、
（ｂ）前記仮決めした小数点位置の固定小数点数で、前記各層の演算を実行して前記中間データを求めると共に、前記中間データのビットの分布を有する統計情報を取得し、
（ｃ）前記統計情報に基づいて、前記中間データの小数点位置を決定し、
（ｄ）少なくとも１つの前記中間データにおいて、前記決定した小数点位置と前記仮決めした小数点位置の差が所定の閾値を超える場合、前記決定した小数点位置の固定小数点数で、前記各層の演算を再度実行することを含む、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，学習プログラム、学習方法、情報処理装置に関する。
【背景技術】
【０００２】
深層学習（Deep Learning、以下DLと称する）は、多層のニューラルネットワークを用いた機械学習である。深層学習の一例であるディープニューラルネットワーク（Deep Neural Network、以下DNNと称する）は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、１または複数のノードを持ち、各ノードは値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアスなどの変数（またはパラメータ）を持つ。
【０００３】
DNNにおいて、各層のノードの値は、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力として次の層のノードの値がその層の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【０００４】
DNNの演算を実行するDNNプロセッサは、演算処理対象の一つである画像データが比較的少ないビット数であるので、固定小数点演算器により演算を行うことがある。この場合、浮動小数点演算器を使用しないので、演算に要する消費電力を抑えることができる。また、浮動小数点演算器よりも回路構成が簡単な固定小数点演算器を用いることは、DNNプロセッサの構成をより少ない回路規模で実現できることを意味する。
【０００５】
しかしながら、固定小数点数はビット数が固定であるので、浮動小数点数に比べるとダイナミックレンジが狭い。そのため、演算によりオーバーフローが発生し演算結果の値が飽和することがあり、逆に、アンダーフローにより下位ビットが切り捨てられることがある。この場合、演算結果の精度の低下を招く。
【０００６】
そこで、DNNの演算において、演算により求められた演算結果データの小数点位置を動的に調整する動的固定小数点（Dynamic Fixed Point）が提案されている。例えば、以下の特許文献１などである。また、固定小数点演算に関しては、以下の特許文献２−３がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１８−１２４６８１号公報
【特許文献２】特開２０１２−２０３５６６号公報
【特許文献３】特開２００９−２７１５９８号公報
【特許文献４】特開平０７−０８４９７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
動的固定小数点法は、DNNの本番学習中に、各層の演算を実行し、その演算結果の有効桁の分布に基づいて演算結果の固定小数点の位置を調整する。これにより、上記のオーバーフローやアンダーフローの発生を抑制し、演算精度を高くできる。一方、事前学習では最適な固定小数点が未調整であるため、DNNの入力データや各層の出力データやパラメータ（例えば重みやバイアス）を浮動小数点数とし、浮動小数点演算器で事前学習を実行する場合がある。
【０００９】
事前学習を浮動小数点数で実行すれば、固定小数点数で演算した場合に生じる演算結果のオーバーフローやアンダーフローが発生せず、各層の出力データやパラメータなどの中間データの精度が低下することを防止できる。そして、浮動小数点演算器による演算結果の指数部の値に基づいて、中間データの固定小数点を最適な位置に調整することができる。それにより、調整された固定小数点数で固定小数点演算器により本番学習が開始される。
【００１０】
しかしながら、DNNの演算を実行するDNNプロセッサに固定小数点演算器に加えて浮動小数点演算器を搭載し、DNNの事前学習を浮動小数点演算器で実行することは、浮動小数点演算器のハードウエアが必要となり、また、浮動小数点演算器による消費電力の増大を招く。
【００１１】
そこで，本実施の形態の第1の側面の目的は，事前学習を固定小数点演算で高精度に実行する学習プログラム、学習方法、情報処理装置を提供することにある。
【課題を解決するための手段】
【００１２】
本実施の形態の第１の側面は，ディープニューラルネットワークの深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
前記深層学習は、
前記ディープニューラルネットワークの各層の処理を所定方向に繰り返す事前学習を有し、
前記事前学習での各層の処理は、
（ａ）前記各層の演算により求められる中間データの固定小数点数の小数点位置を仮決めし、
（ｂ）前記仮決めした小数点位置の固定小数点数で、前記各層の演算を実行して前記中間データを求めると共に、前記中間データのビットの分布を有する統計情報を取得し、
（ｃ）前記統計情報に基づいて、前記中間データの小数点位置を決定し、
（ｄ）少なくとも１つの前記中間データにおいて、前記決定した小数点位置と前記仮決めした小数点位置の差が所定の閾値を超える場合、前記決定した小数点位置の固定小数点数で、前記各層の演算を再度実行することを含む、学習プログラム、である。
【発明の効果】
【００１３】
第１の側面によれば，事前学習を固定小数点演算で高精度に実行できる。
【図面の簡単な説明】
【００１４】
【図１】ディープニューラルネットワーク（DNN）の構成例を示す図である。
【図２】DNNの学習処理の一例のフローチャートを示す図である。
【図３】本実施の形態におけるディープラーニング（DL）システムの構成例を示す図である。
【図４】ホストマシン３０の構成例を示す図である。
【図５】DNN実行マシンの構成例を示す図である。
【図６】ホストマシンとDNN実行マシンによるディープラーニング処理の概略を示すシーケンスチャートの図である。
【図７】本実施例に対する比較例の深層学習（DL）のフローチャートを示す図である。
【図８】図７の比較例の深層学習の複数のプロセッサによる処理のフローチャートを示す図である。
【図９】第１の実施の形態における深層学習のフローチャートを示す図である。
【図１０】図９の深層学習の複数のプロセッサによる処理のフローチャートを示す図である。
【図１１】動的固定少数数による本番学習の処理S61,S63を説明する図である。
【図１２】本番学習での順伝播処理と逆伝播処理とを説明する図である。
【図１３】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【図１４】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【図１５】本実施の形態における事前学習の詳細なフローチャートを示す図である。
【図１６】本実施の形態における事前学習の詳細なフローチャートを示す図である。
【図１７】DNNプロセッサ４３の構成例を示す図である。
【図１８】DNNプロセッサによる統計情報の取得、集約、格納の処理を示すフローチャートの図である。
【図１９】統計情報取得器ST_ACの論理回路例を示す図である。
【図２０】統計情報取得器が取得する演算出力データのビットパターンを示す図である。
【図２１】統計情報集約器ST_AGR_1の論理回路例を示す図である。
【図２２】統計情報集約器ST_AGR_1の動作を説明する図である。
【図２３】第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルの例を示す図である。
【図２４】第２の実施の形態における複数のプロセッサによる深層学習のフローチャートを示す図である。
【図２５】第２の実施の形態における事前学習の順伝播処理と逆伝播処理の詳細なフローチャートを示す図である。
【発明を実施するための形態】
【００１５】
図１は、ディープニューラルネットワーク（DNN）の構成例を示す図である。図１のDNNは、例えば、画像を入力し、入力画像の内容（例えば数字）に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。DNNは、入力層INPUT、第１の畳み込み層Conv_1、第１のプーリング層Pool_1、第２の畳み込み層Conv_2、第２のプーリング層Pool_2、第１の全結合層fc1、第２の全結合層fc2、出力層OUTPUTを有する。各層は、単数または複数のノードを有する。
【００１６】
畳み込み層Conv_1は、入力層INPUT内の複数のノードに入力された例えば画像の画素データにノード間の重み等を積和演算し、畳み込み層Conv_1内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。畳み込み層Conv_2も同様である。
【００１７】
プーリング層Pool_1は、前の層である畳み込み層Conv_1の局所的なノードから定まる値をノードとする層であり、例えば、局所的なノードの最大の値を自分のノードの値とすることで、画像のわずかな変化を吸収する。
【００１８】
出力層OUTPUTは、ソフトマックス関数などを用いてノードの値から各カテゴリに属する確率を求める。
【００１９】
図２は、DNNの学習処理の一例のフローチャートを示す図である。学習処理は、例えば、入力データと、入力データからDNNが算出する出力の正解データとを有する複数の教師データを使用して、DNN内の重み等のパラメータを最適化する。図２の例では、ミニバッチ法により、複数の教師データを複数のミニバッチに分割し、各ミニバッチの複数の教師データの入力データを入力する。そして、それぞれの入力データに対してDNNが出力した出力データと正解データとの差分（誤差）の二乗和を小さくするように重み等のパラメータを最適化する。
【００２０】
図２に示されるとおり、事前の準備として、複数の教師データを並び替え（S1）、並び替えた複数の教師データを複数のミニバッチに分割する（S2）。
【００２１】
そして、学習S5では、分割した複数のミニバッチそれぞれに対して、順伝播処理S6と、誤差評価S7と、逆伝播処理S8と、パラメータ更新S9とを繰り返す。全てのミニバッチの処理が終了すると（S11のYES）、指定回数に達するまで（S12のNO）、同じ教師データについて、処理S1-S2,S5-S9,S11を繰り返し実行する。
【００２２】
また、指定回数に達するまで同じ学習データで処理S1-S2,S5-S9を繰り返すことに代えて、学習結果の評価値、例えば、出力データと正解データとの差分（誤差）の二乗和が一定の範囲に収まったことで、学習処理を終了することも行われる。
【００２３】
順伝播処理S6では、DNNの入力側から出力側に向かって各層の演算が順番に実行される。図１の例で説明すると、第1の畳み込み層Conv_1が、入力層INPUTに入力された１つのミニバッチが有する複数の教師データの入力データを、エッジの重み等で畳み込み演算を行い、複数の演算出力データを生成する。そして、第1のプーリング層Pool_1が、畳み込み層Conv_1の演算結果の局所性を弱める処理を行う。さらに、第２の畳み込み層Conv_2と第２のプーリング層Pool_2が、上記と同様の処理を行う。最後に、全結合層fc1,fc2が、全エッジの重み等で畳み込み演算を行い、出力層OUTPUTに出力データを出力する。
【００２４】
次に、誤差評価処理S7は、DNNの出力データと正解データの差分の二乗和を誤差として演算する。そして、誤差をDNNの出力側から入力側に伝搬する逆伝播処理S8を実行する。この逆伝播処理では、誤差を出力側から入力側に伝播すると共に、伝播された各層の誤差をパラメータで微分し、勾配降下法でパラメータの変更データを演算する。そして、パラメータ更新処理S9は、勾配降下法で求めたパラメータの変更値で現在のパラメータを更新し、各層の重み等を最適値方向に更新する。
【００２５】
DNNは、複数の層をハードウエア回路で構成し、各層の演算をハードウエア回路が実行するようにしてもよい。または、DNNは、DNNの各層の演算を実行するプロセッサに、各層の演算を実行させるプログラムを実行させるようにしてもよい。
【００２６】
図３は、本実施の形態におけるディープラーニング（DL）システムの構成例を示す図である。DLシステムは、ホストマシン３０とDNN実行マシン４０とを有し、例えば、専用インターフェースを介してホストマシン３０とDNN実行マシン４０とが接続される。また、ホストマシン３０には利用者端末５０がアクセス可能にされ、利用者は、利用者端末５０からホストマシン３０にアクセスし、DNN実行マシン４０を操作し、ディープラーニングを実行する。ホストマシン３０は、利用者端末からの指示に従い、DL実行マシンが実行するプログラムを作成し、DNN実行マシンに送信する。そして、DNN実行マシンは送信されたプログラムを実行し、ディープラーニングを実行する。
【００２７】
DNN実行マシン４０は、固定小数点演算を実行するDNNプロセッサ４３＿１と、浮動小数点演算を実行するDNNプロセッサ４３＿２を有する。本実施の形態では、浮動小数点演算を実行するDNNプロセッサ４３＿１はなくてもよい。
【００２８】
本実施の形態では、事前学習を固定小数点演算を実行するDNNプロセッサ４３＿１により実行し、DNNの中間データの固定小数点位置を決定し、本番学習も固定小数点演算を実行するDNNプロセッサ４３＿１により実行する。
【００２９】
固定小数点演算を実行するDNNプロセッサ４３＿１は、DNN内で演算される演算結果や学習により更新される変数等の中間データと、メモリ内のデータなどの有効な最上位ビットや有効な最下位ビットの数についての統計情報を取得する統計情報取得回路を有する。DNNプロセッサ４３＿１は、事前学習及び本番学習それぞれで、学習を実行しながら演算により求められる中間データの統計情報を取得し、統計情報に基づいて中間データの固定小数点位置を最適な位置に調整する。
【００３０】
図４は、ホストマシン３０の構成例を示す図である。ホストマシン３０は、プロセッサ３１と、DNN実行マシン４０と接続するための高速入出力インターフェース３２と、メインメモリ３３と、内部バス３４とを有する。さらに、内部バス３４に接続された大容量のHDDなどの補助記憶装置３５と、利用者端末５０と接続するための低速入出力インターフェース３６とを有する。
【００３１】
ホストマシン３０のプロセッサ３１は、補助記憶装置３５に記憶されているプログラムがメインメモリ３３に展開されたプログラムを実行する。高速入出力インターフェース３２は、例えば、PCI Expressなどのプロセッサ３１とLD実行マシンのハードウエアとを接続するインターフェースである。メインメモリ３３は、プロセッサが実行するプログラムやデータを記憶し、例えば、SDRAMである。
【００３２】
内部バス３４は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース３６は、例えば、USBなど利用者端末のキーボードやマウスとの接続を行い、または、イーサーネットのネットワークとの接続を行う。
【００３３】
補助記憶装置３５には、図示されるとおり、DNN学習プログラムと、教師データが記憶される。DNN学習プログラムには、事前学習プログラムと本番学習プログラムとが含まれる。プロセッサ３１は、DNN学習プログラムを実行して、例えば、事前学習プログラムと教師データをDNN実行マシンに送信し、DNN実行マシンに事前学習プログラムを実行させる。また、プロセッサ３１は、DNN学習プログラムを実行して、本番学習プログラムと教師データをDNN実行マシンに送信し、DNN実行マシンに本番学習プログラムを実行させる。
【００３４】
図５は、DNN実行マシンの構成例を示す図である。DNN実行マシン４０は、ホストマシン３０との通信を中継する高速入出力インターフェース４１と、ホストマシン３０からの指令やデータに基づいて対応する処理を実行する制御部４２とを有する。また、DNN実行マシン４０は、DNNプロセッサ４３と、メモリアクセスコントローラ４４と、内部のメモリ４５を有する。
【００３５】
DNNプロセッサ４３は、ホストマシンから送信されたプログラムとデータに基づいて、プログラムを実行し、ディープラーニングの処理を実行する。DNNプロセッサ４３は、前述したとおり、固定小数点演算を実行するDNNプロセッサ４３＿１と、浮動小数点演算を実行するDNNプロセッサ４３＿２とを有する。ただし、浮動小数点演算を実行するDNNプロセッサ４３＿２はなくてもよい。
【００３６】
高速入出力インターフェース４１は、例えば、PCI Expressであり、ホストマシン３０との通信を中継する。
【００３７】
制御部４２は、ホストマシンから送信されるプログラムやデータをメモリ４５に記憶し、ホストマシンからの指令に応答して、DNNプロセッサにプログラムの実行を指示する。メモリアクセスコントローラ４４は、制御部４２からのアクセス要求とDNNプロセッサ４３からのアクセス要求に応答して、メモリ４５へのアクセス処理を制御する。
【００３８】
内部のメモリ４５は、DNNプロセッサが実行するプログラム、処理対象データ、処理結果のデータなどを記憶する。例えば、SDRAMや、より高速のGDR5や広帯域のHBM2などである。
【００３９】
図４で説明したとおり、ホストマシン３０が、DNN実行マシン４０に事前学習プログラムと教師データを送信し、更に、本番学習プログラムと教師データを送信する。これらのプログラムとデータは、内部メモリ４５に格納される。そして、ホストマシン３０からの実行指示に応答して、DNN実行マシンの固定小数点プロセッサが、事前学習プログラムと本番学習プログラムをそれぞれ実行する。
【００４０】
図６は、ホストマシンとDNN実行マシンによるディープラーニング処理の概略を示すシーケンスチャートの図である。ホストマシン３０は、DNN実行マシン４０に、ディープラーニングの学習プログラム（事前学習及び本番学習）を送信し（S31）、1ミニバッチ分の教師データの入力データを送信し（S32）、学習プログラム実行指示を送信する（S33）。
【００４１】
これらの送信に応答して、DNN実行マシン４０は、教師データと学習プログラムを内部のメモリ４５に記憶し、学習プログラム実行指示に応答して、メモリ４５に記憶した教師データについて学習プログラムを実行する（S40）。学習プログラムの実行は、DNNプロセッサ４３＿１により行われる。この間、ホストマシン３０は、DL実行マシンによる学習プログラムの実行完了まで待機する。
【００４２】
DNN実行マシン４０は、ディープラーニングの学習プログラムの実行が完了すると、学習プログラム実行終了の通知をホストマシン３０に送信する（S41）。
【００４３】
ホストマシン３０は、次の1ミニバッチ分の教師データの入力データを送信し（S32）、学習プログラム実行指示を送信する(S33)。そして、DNN実行マシン４０が学習プログラムを実行し（S40）、終了通知を送信する（S41）これを繰り返してディープラーニングの学習を進める。
【００４４】
DNNの学習は、DNNの順方向に各層の演算（順伝播処理）を実行し、出力層の出力データと正解データとの誤差をDNNの逆方向に伝播して各層の誤差を演算し、誤差を小さくする変数の変更データを算出し（逆伝播処理）、変数の変更データにより変数を更新する処理（パラメータ更新）を有する。これらのDNNの学習処理を、全てDNN実行マシン４０が実行してもよく、また、一部の処理をホストマシン３０で実行してもよい。
【００４５】
［比較例による深層学習］
図７は、本実施例に対する比較例の深層学習（DL）のフローチャートを示す図である。比較例では、浮動小数点演算を実行するDNNプロセッサが事前学習を実行し、固定小数点演算を実行するDNNプロセッサが本番学習を実行する。
【００４６】
まず、DNNプロセッサが、浮動小数点数による事前学習を実行し、各中間データ（各層の演算結果、パラメータ等）の初期小数点位置を決定する（S50）。浮動小数点数により事前学習を行う場合、DNN内の中間データは浮動小数点数となるので、中間データの大きさに対応した指数部が生成され、固定小数点数のように小数点位置を調整する必要はない。そして、浮動小数点数の中間データに基づいて、各中間データの固定小数点数の最適な小数点位置が決定される。
【００４７】
次に、DNNプロセッサが、固定小数点数による本番学習を開始する（S5）。本番学習では、DNNプロセッサが、ミニバッチ学習を実行しながら、各中間データの分布についての統計情報を取得・保存する（S61）。固定小数点演算を実行するDNNプロセッサは、固定小数点演算器の演算出力などの有効ビットの分布などの統計情報を取得する統計情報取得回路を有する。したがって、プロセッサに統計情報取得処理付の演算命令を実行させることで、ミニバッチ学習中に中間データの統計情報を取得し保存することができる。このミニバッチ学習をＫ回実行するたびに（S10のYES）、中間データの分布の統計情報に基づいて、DNN内の各中間データの固定小数点位置を調整する（S63）。
【００４８】
上記のプロセッサ内の統計情報取得回路と、分布についての統計情報に基づく固定小数点位置の調整方法については、後で詳述する。
【００４９】
そして、DNNプロセッサは、全ミニバッチの学習が終了するまで（S11のNO）、S61,S10,S63を繰り返す。全ミニバッチの学習が終了すると（S11のYES）、所定回数に達するまで（S12のNO）、最初のS50に戻って全ミニバッチ学習を繰り返す。なお、図７中の処理S11,S12は、図２の処理S11,S12と同等である。
【００５０】
図８は、図７の比較例の深層学習の複数のプロセッサによる処理のフローチャートを示す図である。図７の処理と同じ処理には同じ処理番号を付した。まず、ホストプロセッサ３１が、DNNの重みとバイアスなどのパラメータの初期値を生成する（S70）。初期値は浮動小数点数である。
【００５１】
そして、ホストプロセッサ３１が、浮動小数点プロセッサによる事前学習プログラムを呼び出し（S51）、それに応答して、浮動小数点演算を実行するDNNプロセッサ４３＿２が、事前学習を実行する（S52)。浮動小数点演算による事前学習は、例えば、複数回のミニバッチ学習の実行を含む。
【００５２】
さらに、ホストプロセッサ３１は、事前学習で求められた中間データの浮動小数点数に基づいて、固定小数点数の初期小数点位置を決定し、中間データの浮動小数点数を固定小数点数に変換するプログラムを読み出す（S53）。これに応答して、浮動小数点演算を実行するDNNプロセッサ４３＿２が、中間データの浮動小数点数を固定小数点数に変換する（S54）。浮動小数点プロセッサ４３＿２は、浮動小数点数を整数に変換する回路を内蔵し、これを用いてプログラムにて浮動小数点数を固定小数点数に変換する。
【００５３】
次に、ホストプロセッサ３１が、動的固定小数点数による本番学習のプログラムを呼び出し、各データとそれらの小数点位置情報を固定小数点プロセッサ４３＿１に送信する（S71）。これに応答して、固定小数点演算を実行するDNNプロセッサ４３＿１が、固定小数点数の小数点を動的に調整しながら行う本番学習を実行する（S5）。
【００５４】
［第１の実施の形態における深層学習］
図９は、第１の実施の形態における深層学習のフローチャートを示す図である。本実施の形態では、事前学習と本番学習が固定小数点演算を実行するDNNプロセッサにより実行される。
【００５５】
最初に、ホストプロセッサは、教師データの入力データ、DNN内の重みやバイアスなどのパラメータの初期値から、初期小数点位置を決定する（S80）。そして、ホストプロセッサが、初期値を固定小数点化する。
【００５６】
次に、固定小数点演算を実行するDNNプロセッサ４３＿１が、事前学習を開始する（S81）。事前学習では、DNNプロセッサが、DNN内の中間データ（畳み込み層の出力データ、プーリング層の出力データ、全結合層の出力データ、出力層の出力データ、各層の重みやバイアスなどのパラメータ、パラメータの更新値など）の小数点位置を決定しながら事前学習を実行する。
【００５７】
事前学習では、固定小数点DNNプロセッサ４３＿１が、DNNの各層を順番に、各層の中間データの小数点位置を決定しながら、順伝播処理を実行する（S81_1）。順伝播処理は、各層の演算を入力層から出力層に向かって順に実行する処理である。
【００５８】
次に、事前学習では、固定小数点DNNプロセッサが、DNNの各層を逆順に、各層の中間データの小数点位置を決定しながら、逆伝播処理を実行する（S81_2）。逆伝播処理は、出力層の出力データと正解データとの誤差（差分）から、DNNの各層の誤差を出力層から入力層に向かって逆順に求め、各層の誤差を最小化するパラメータの変更差分データを求める処理である。
【００５９】
最後に、事前学習では、固定小数点DNNプロセッサが、各層を順番に、パラメータを変更差分データで更新し、更新されたパラメータの小数点位置を更新する（S81_3）。
【００６０】
上記の事前学習では、中間データについて仮の小数点位置を決定しておく。そして、固定小数点DNNプロセッサ４３＿１が、事前学習で各層の演算を実行しながら中間データの分布についての統計情報を取得する。更に、固定小数点DNNプロセッサが、各層において、統計情報の分布情報に基づいて、中間データの最適な小数点位置を決定する。後述するとおり、順伝播と逆伝播での各層の中間データの最適な小数点位置を決定した後、決定した小数点位置が仮の小数点位置と一致しない場合、または閾値以上異なる場合、決定した小数点位置の固定小数点数で、各層の演算を再度実行する。これにより、事前学習中の各層の中間データの精度を高くすることができる。
【００６１】
事前学習が完了後、固定小数点DNNプロセッサが、本番学習を開始する（S5）。本番学習の処理S61,S10,S63,S11,S12は、図７と同じである。
【００６２】
すなわち、本番学習では、図７に示したとおり、固定小数点DNNプロセッサが、中間データの統計情報を取得しながら、順伝播処理S6、誤差評価S7、逆伝播処理S8及びパラメータ（重みやバイアス等）の更新S9を、Ｋ回のミニバッチの複数の教師データについて実行する。そして、固定小数点DNNプロセッサが、Ｋ回のミニバッチ学習で取得した中間データの統計情報に基づいて、中間データの小数点位置を調整する（S63）。また、固定小数点DNNプロセッサが、Ｋ回のミニバッチ学習S61と中間データの小数点位置の調整S63を実行しながら、全ミニバッチの学習が終了するまで繰り返し実行する（S11）。全ミニバッチの学習が終了したら（S11のYES）、所定回数に達するまで処理S80〜S11を繰り返し実行する。
【００６３】
上記の固定小数点数による事前学習は、深層学習の教師データを分割した望ましくは１つのミニバッチまたは複数のミニバッチの複数の教師データについて実行する。そして、順伝播処理と逆伝播処理の各層で統計情報に基づいて中間データの小数点位置を調整する。これに対して、本番学習では、Ｋ個のミニバッチの複数の教師データについて学習を実行するたびに、中間データの分布についての統計情報に基づいて中間データの小数点位置を調整する。そして、本番学習では、Ｋ回のミニバッチ学習及び中間データの小数点位置の調整を実行しながらDNNが所望の状態になるまで（所定回数に達するまでまたは誤差が基準値未満に収束するまで）繰り返し実行する。全ミニバッチの学習が終了したら、学習率を更新し、教師データを並べ替えて本学習を繰り返し実行する。
【００６４】
図１０は、図９の深層学習の複数のプロセッサによる処理のフローチャートを示す図である。図９の処理と同じ処理には同じ処理番号を付した。
【００６５】
まず、ホストプロセッサ３１が、DNNの重みとバイアスなどのパラメータの初期値を生成する（S70）。初期値は浮動小数点数である。次に、ホストプロセッサが、入力データと、重みやバイアス等のパラメータの初期小数点位置を決定し、固定小数点数に変換（固定小数点化）する（S80_1）。入力データやパラメータは浮動小数点数であるので、ホストプロセッサは、その指数部に基づいて、または最大値及び最小値に基づいて、最適な固定小数点位置を決定する。
【００６６】
そして、ホストプロセッサ３１が、固定小数点DNNプロセッサによる事前学習プログラムを呼び出し（S80_2）、それに応答して、固定小数点DNNプロセッサ４３＿１が、事前学習プログラムを実行して事前学習を行う（S81)。固定小数点演算による事前学習は、例えば、１回または数回のミニバッチ学習の実行を含み、図９の処理S81_1,S81_2,S81_3を含む。また、事前学習は、動的固定小数点数により行われ、各層の演算と共に各層の中間データの小数点位置が決定される。詳細は後述するが、固定小数点DNNプロセッサが、中間データの分布についての統計情報を取得し、中間データの分布に基づいて最適な小数点位置を決定する。
【００６７】
次に、ホストプロセッサが、固定小数点DNNプロセッサによる本番学習プログラムを呼び出し（S71）、それに応答して、固定小数点DNNプロセッサ４３＿１が、動的固定小数点数による本番学習プログラムを実行して本番学習を行う（S5）。動的固定小数点数による本番学習は、Ｋ回のミニバッチ学習を全ミニバッチ学習終了まで繰り返し、図９の処理S61,S10,S63,S11,S12を含む。この動的固定小数点数による本番学習は、比較例と同じであるので、説明を省略する。
【００６８】
［動的固定小数点数による本番学習の概略］
動的固定小数点数による本番学習については、日本公開公報（特開2018-124681号公報）に開示されていて、本明細書に本公報の開示を引用により含める。
【００６９】
図１１は、動的固定少数数による本番学習の処理S61,S63を説明する図である。図９に示した本番学習の処理S61では、固定小数点DNNプロセッサが、ミニバッチ学習をＫ回繰り返し実行する。各ミニバッチ学習では、プロセッサが、ミニバッチの複数の教師データについて、順伝播処理と、逆伝播処理と、各層を順番にパラメータを更新する処理を実行しながら、各処理における各層の中間データの分布についての統計情報を取得し、保存する。
【００７０】
次に、本番学習の処理S63では、固定小数点DNNプロセッサが、保存した統計情報に含まれる複数の中間データの有効ビットの分布に基づいて、各層の各中間データの最適な小数点位置を決定し更新する。
【００７１】
図１２は、本番学習での順伝播処理と逆伝播処理とを説明する図である。順伝播処理では、プロセッサ内の固定小数点演算器が、入力側に近い層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は、DNNの中間データである。これらの中間データの小数点位置を最適な位置に調整することで、各中間データの演算精度を高くすることができ、本番学習の精度を高くできる。
【００７５】
図１３，図１４は、中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。後述するとおり、固定小数点DNNプロセッサは、固定小数点演算器を有し、各演算器の出力やメモリ４５内に記憶されている演算結果データなどの中間データの有効ビットの分布についての統計情報を取得する統計情報取得回路を有する。
【００７６】
中間データの有効ビットの分布についての統計情報は、例えば、以下の通りである。
（１）非符号となる最上位ビットの位置の分布
（２）非ゼロとなる最下位ビットの位置の分布
（３）非符号となる最上位ビットの位置の最大値
（４）非ゼロとなる最下位ビットの位置の最小値
（１）非符号となる最上位ビットの位置とは、中間データの有効ビットの最上位ビットの位置である。非符号とは、符号ビットが０（正）であれば「１」、１（負）であれば「０」である。（２）非ゼロとなる最下位ビットの位置とは、中間データの有効ビットの最下位ビットの位置である。符号ビットが０（正）であれば「１」の最下位ビットの位置、符号ビットが１（負）の場合も「１」の最下位ビットの位置である。符号ビットが１の場合、符号ビット以外のビットは２の補数で表され、２の補数を元の数に変換する処理に１を減算して、１，０を０，１に反転する処理が含まれる。そのため、「１」の最下位ビットは、１を減算することで「０」になり、ビット反転で「１」になるので、有効ビットの最下位ビットの位置となる。
【００７７】
（３）非符号となる最上位ビットの位置の最大値は、複数の中間データそれぞれの有効ビットの最上位ビットの位置のうち、最大の位置である。同様に、（４）非ゼロとなる最下位ビットの位置の最小値は、複数の中間データそれぞれの有効ビットの最下位ビットの位置のうち、最小の位置である。
【００７８】
図１３、図１４には、一例として、（１）非符号となる最上位ビットの位置の分布を示すヒストグラムが示される。横軸は、ヒストグラムのビンに対応する中間データの有効最上位ビットのべき乗（２の対数値）を示し、縦軸は、各ビンの有効最上位ビットを有する中間データの数である。この例では、ビン数が−１５〜＋２４までの合計４０である。
【００７９】
分布の最上位のビンは、（３）非符号となる最上位ビットの位置の最大値に対応する。
【００８０】
尚、図１３，図１４の横軸に示した数値は、出力データの小数部の最下位ビットからの相対的なビットの位置を意味する。「１」は出力データ最下位ビットより１つ上位の桁を意味し、「−1」は出力データ最下位ビットより1つ下位の桁を意味する。
【００８１】
１６ビットの固定小数点数の場合、符号ビットを除くビット数は１５ビットである。そして、固定小数点数のフォーマットをQn.mと表現する。Qn.mは、ｎビットの整数部と、ｍビットの小数部を意味する。小数点位置は整数部と小数部との間に位置する。
【００８２】
一方、非符号となる最上位ビットの位置の分布の広がり（ヒストグラムのビンの数）は、複数の中間データに依存して変化する。図１３のヒストグラムの分布の広がりは、−１２のビンから＋２０のビンまで、ビン数が１２＋２０＝３２となり、固定小数点数の１５ビット（固定小数点数で表現可能な領域）内には収まっていない。この表現可能な領域の１５ビットより上位のビットは、オーバーフローとなり飽和処理され、下位のビットはアンダーフローとなり切り捨て処理される。一方、図１４のヒストグラムは、０のビンから＋１２のビンまで、ビン数が１２となり、固定小数点数の１５ビット内に収まっている。
【００８３】
そこで、ヒストグラムである統計情報に基づく小数点位置の決定方法は、ヒストグラムの横幅（ビン数）が１５ビットを超えて表現可能な領域（１５ビット）に収まらない場合（図１３）と、収まる場合（図１４）とで異なる。
【００８４】
図１３のヒストグラムの横幅（ビン数）３２が１５ビットを超えて表現可能な領域（１５ビット）に収まらない場合、以下のように固定小数点数フォーマット（小数点位置）を決定する。すなわち、ヒストグラムの上位ビット側のデータ数の全データ数に対する割合が所定の閾値rmax未満を満たす、上位ビット側の最大ビット数BMAXを決定し、決定したビット数BMAXより低いビットに固定小数点数フォーマットを決定する。つまり、決定したビット数BMAX内のデータのオーバーフローによる飽和を許容する。
【００８５】
図１３の例では、既存の固定小数点数フォーマットQ5.10が０〜＋１５のビットを収容しているのに対して、更新後の固定小数点数フォーマットをQ3.12と−２〜＋１３のビットを収容するように変更される。この変更により、有効ビットの最上位ビットが＋１３〜＋２２の中間データは、オーバーフローにより値が飽和されるが、有効ビットの最上位ビットが−１，―２の中間データは少なくとも最上位ビットについては切り捨てられない。
【００８６】
図１４の例では、既存の固定小数点数フォーマットQ4.11が、ヒストグラムの上位ビット側にずれているので、更新後の固定小数点数フォーマットをQ1.14に変更する。Q1.14の場合は、ヒストグラムのピークの位置にフォーマットQ1.14の中央ビットが位置する。これにより、有効ビットの最上位ビットが１，０，＋１の中間データは少なくとも最上位ビットについては切り捨てられない。
【００８７】
図９、図１０の事前学習では、中間データの初期の小数点位置を仮に決定しておき、ミニバッチ学習の順伝播処理、逆伝播処理、パラメータの更新処理それぞれで、中間データの分布についての統計情報を取得する。そして、統計情報に基づいて、図１３、図１４と同様の方法で、中間データの小数点位置を決定する。
【００８８】
順伝播処理、逆伝播処理それぞれで、統計情報に基づいて決定した小数点位置が仮決定した小数点位置と不一致、又は閾値以上異なる場合、統計情報に基づいて決定した小数点位置で再度、ミニバッチ学習の順伝播処理、逆伝播処理を実行する。このように再度実行することで、順伝播処理結果の精度を高くでき、次の逆伝播処理の精度も高くでき、更に、パラメータの更新処理の精度を高くできる。
【００８９】
［本実施の形態における事前学習の詳細］
図１５、図１６は、本実施の形態における事前学習の詳細なフローチャートを示す図である。図１５は、図９の処理S80の詳細を示す。図１６は、図９の処理S81, S81_1, S81_2, S81_3の詳細を示す。
【００９０】
図１５には、深層学習の初期値の初期小数点位置の決定と固定小数点化の処理S80と、事前学習S81と、本番学習S5が示される。処理S80（S80_1）では、DNNの初期値として与えられる入力データ、各層の重みやバイアスなどのパラメータを固定小数点数に変換する。そのために、ホストプロセッサは、入力データ、重みやバイアスなどのパラメータそれぞれについて、最大値と最小値を取得し（S100）、最大値と最小値のうち絶対値が大きい値についてオーバーフローにより飽和しないような整数部のビット数を決定する（S101）。
【００９１】
例えば、絶対値が+2.25の場合、log2(2.25)=1.169925001であるので、整数部が２ビットであれば、最大値が0b11＝3であるので、絶対値+2.25がオーバーフローすることはない。つまり、整数部２ビット、小数部１３ビットのフォーマットQ2.13に初期小数点位置が決定される。
【００９２】
そして、ホストプロセッサは、入力データ、重みやバイアスなどのパラメータそれぞれを、浮動小数点数から、上記の決定したフォーマットQn.mの固定小数点数に変換する（S102）。
【００９３】
図１６には、事前学習S81の順伝播処理S81_1、逆伝播処理S81_2、各層の重みやバイアスなどのパラメータの更新処理S81_3の詳細な処理が示される。事前学習S81では、１回または数回のミニバッチ学習が行われる。
【００９４】
固定小数点DNNプロセッサは、順伝播処理S81_1では、DNNの各層を順番に以下の処理を繰り返す。まず、DNNプロセッサは、各層の中間データの仮小数点位置をQn.mと決定する（S110）。この仮小数点位置の決定は、例えば、図１５での入力データ等の小数点位置と同じにする。畳み込み層では、入力データに重みを乗算しバイアスを加算した値を累積加算して中間データを生成するので、中間データの仮の小数点位置として有効と考えられる。
【００９５】
次に、固定小数点DNNプロセッサは、対象の層の順伝播演算を実行し、演算で求められた中間データの統計情報を取得する（S111）。この順伝播演算は、図１２で説明した通りである。順伝播演算は、好ましくは１回のミニバッチの教師データ分実行される。但し、１回のミニバッチの教師データを数回に分けて実行されてもよい。または、２回以上のミニバッチの教師データ分実行されてもよい。そして、固定小数点DNNプロセッサは、演算された複数の中間データの統計情報に基づいて、その複数の中間データに最適な小数点位置Qn’.m’を決定する（S112）。この最適な小数点位置の決定処理は、図１３，図１４で説明した通りである。
【００９６】
さらに、固定小数点DNNプロセッサは、仮小数点位置Qn.mと決定した小数点位置Qn’.m’とを比較し（S113）、不一致の場合（S113のNO）、決定した小数点位置Qn’.m’を小数点位置Qn.mに置き換えて、順伝播処理を再度実行する（S114）。この再実行された順伝播処理S114で求めた中間データは、処理S111で求めた中間データに上書きされる。この決定した小数点位置による順伝播処理を実行することで、対象の層の中間データの精度を高くできる。仮小数点位置Qn.mと決定した小数点位置Qn’.m’とが一致の場合（S113のYES）、処理S114の実行は行わない。
【００９７】
判定S113は、一致するか否かではなく、仮小数点位置Qn.mと決定した小数点位置Qn’.m’の差分が閾値未満であるか否かの判定でもよい。  
【００９８】
各層の順伝播処理で複数の中間データが求められる場合、判定S113では、（１）全ての中間データの仮小数点位置と決定小数点位置が一致するか否か（即ち、少なくとも一つの中間データで不一致となるか否か）、（２）所定数の中間データの仮小数点位置と決定小数点位置が一致するか否か、（３）特定の中間データで一致するか否か、など順伝搬処理の精度を高めるのに適した判定を行うのが好ましい。また、一致するか否かではなく、仮小数点位置Qn.mと決定した小数点位置Qn’.m’の差分が閾値未満であるか否かの判定でもよい。
【００９９】
固定小数点DNNプロセッサは、上記の処理S110〜S114を、DNNの各層について順番に繰り返し実行する。全層について処理S110〜S114を行うと、プロセッサは、逆伝播処理S81_2を実行する。
【０１００】
固定小数点DNNプロセッサは、逆伝播処理S81_2では、DNNの各層を逆順に以下の処理を繰り返す。各層の中間データ（誤差や重み等の差分値）の仮小数点位置をQn.mと決定する（S120）。この仮小数点位置の決定も、例えば、図１５で決定した入力データの小数点位置と同じにする。
【０１０１】
次に、固定小数点DNNプロセッサは、対象の層の逆伝播演算を実行し、演算で求められた中間データの統計情報を取得する（S121）。この逆伝播演算は、図１２で説明した通りである。逆伝播演算も、１回のまたは数回のミニバッチの教師データ分実行される。そして、固定小数点DNNプロセッサは、演算された複数の中間データの統計情報に基づいて、その複数の中間データに最適な小数点位置Qn’.m’を決定する（S122）。
【０１０２】
さらに、固定小数点DNNプロセッサは、仮小数点位置Qn.mと決定した小数点位置Qn’.m’とを比較し（S123）、不一致の場合（S123のNO）、決定した小数点位置Qn’.m’を小数点位置Qn.mに置き換えて、逆伝播処理を再度実行する（S124）。この再実行の逆伝播処理で求めた中間データは、処理S121で求めた中間データに上書きされる。この決定した小数点位置による逆伝播処理を再実行することで、対象の層の中間データ（誤差や重み等の差分値）の精度を高くできる。一致の場合（S123のYES）、処理S124の実行は行わない。
【０１０３】
判定S123は、前述の判定S113で説明した（１）〜（３）の判定でもよい。また、一致したか否かは、差分が閾値未満か否かの判定でもよい。
【０１０４】
次に、固定小数点DNNプロセッサは、各層を順番に、以下の処理を繰り返す。すなわち、プロセッサは、逆伝播処理S81_2で求めておいた各層の重みやバイアスの差分更新値ΔWij, Δbを、元の重みやバイアスに加算して重みやバイアスの更新を行い、更新後の重みやバイアスの統計情報を取得する（S130）。そして、更新後の重みやバイアスの小数点位置Qn’.m’を統計情報に基づいて決定し更新する（S131）。全層の重みやバイアスなどのパラメータの更新とその小数点位置更新が完了すると、事前学習が終了し、プロセッサは、本番学習に移動する。
【０１０５】
本番学習では、プロセッサは、Ｋ回のミニバッチ学習を行うたびに、ミニバッチ学習中に取得した統計情報に基づいて、中間データの小数点位置の調整を実行する。本番学習での中間データの小数点位置の調整を行う条件は、事前学習での調整を行う条件（仮小数点位置Qn.mと決定した小数点位置Qn’.m’とが不一致の場合）とは異なり、調整前の小数点位置と決定した小数点位置とが所定の閾値rmax以上異なるという条件でもよい。
【０１０６】
［固定小数点DNNプロセッサの構成と統計情報の取得］
次に、本実施の形態における固定小数点DNNプロセッサの構成と統計情報の取得について説明する。
【０１０７】
図１７は、DNNプロセッサ４３の構成例を示す図である。DNNプロセッサまたはDNN演算処理装置４３は、命令制御部INST_CONと、レジスタファイルREG_FLと、特別レジスタSPC_REGと、スカラー演算ユニットSC_AR_UNIT、ベクトル演算ユニットVC_AR_UNITと、統計情報集約器ST_AGR_1、ST_AGR_2とを有する。
【０１０８】
DNNプロセッサ４３は、ベクトル演算ユニット内に固定小数点数を演算する整数演算器INTと、浮動小数点数を演算する浮動小数点演算器FPとを有する。つまり、DNNプロセッサ４３は、固定小数点DNNプロセッサ４３＿１と浮動小数点DNNプロセッサ４３＿２とを有する。
【０１０９】
また、DNNプロセッサ４３には、メモリアクセスコントローラ（MAC）４４を介して、命令用メモリ45_1とデータ用メモリ45_2とが接続される。MAC４４は、命令用のMAC44_1と、データ用のMAC44_2とを有する。
【０１１０】
命令制御部INST_CONは、例えば、プログラムカウンタPCと、命令デコーダDECなどを有する。命令制御部は、プログラムカウンタPCのアドレスに基づいて命令を命令用メモリ45_1からフェッチし、命令デコーダDECがフェッチした命令をデコードし、演算ユニットに発行する。
【０１１１】
レジスタファイル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を有する。
【０１１４】
スカラー演算ユニット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に格納する。スカラー演算ユニットの演算結果は、スカラーレジスタ、スカラーアキュムレートレジスタ、データ用メモリ45_2のいずれかに格納される。
【０１１５】
ベクトル演算ユニットVC_AR_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_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を有する。
【０１２４】
［統計情報の取得、集約、格納］
次に、DNNプロセッサによる、演算出力データの統計情報の取得、集約、格納について、説明する。統計情報の取得、集約、格納は、ホストプロセッサから送信される命令であり、DNNプロセッサが実行する命令をトリガにして実行される。したがって、ホストプロセッサは、DNNの各層の演算命令に加えて、統計情報の取得、集約、格納を実行する命令を、DNNプロセッサに送信する。または、ホストプロセッサは、各層の演算のために、統計情報の取得、集約、格納の処理付の演算命令をDNNプロセッサに送信する。
【０１２５】
図１８は、DNNプロセッサによる統計情報の取得、集約、格納の処理を示すフローチャートの図である。まず、ベクトル演算ユニット内の８つの統計情報取得器ST_ACが、整数演算器INTが出力する各層の演算による中間データの非符号となる最上位ビット位置を示すビットパターンをそれぞれ出力する（S170）。ビットパターンについては、後述する。
【０１２６】
次に、統計情報集約器ST_AGR_1が、８つのビットパターンの各ビットの「１」を加算して集約する（S171）。
【０１２７】
さらに、統計情報集約器ST_AGR_2が、統計情報レジスタファイルST_REG_FL内の統計情報レジスタ内の値に、S171で加算して集約した値を加算し、統計情報レジスタに格納する（S172）。
【０１２８】
上記の処理S170,S171,S172は、ベクトル演算ユニット内の８つのエレメント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を入力し、８つのビットパターンの各ビットの「１」を加算した出力out0〜out39を出力する。ビットパターンBP_0〜BP_7は、それぞれ４０ビットであり、out0〜out39は、例えば、それぞれ4ビットである。
【０１３８】
図２１の論理回路に示すとおり、統計情報集約器ST_AGR_1は、ベクトル演算ユニットの統計情報取得回路ST_ACそれぞれが取得した各ビットパターンBP_0〜BP_7の各ビットの「１」を、加算回路SGM_0-SGM_39で加算し、加算結果を出力out0〜out39として生成する。図２２の出力に示されるとおり、出力はout0〜out39である。出力の各ビットは、要素数をカウントできるようにlog2(要素数＝８)＋１ビットであり、要素数が８の場合は４ビットとなる。
【０１３９】
統計情報集約器ST_AGR_1は、スカラー演算ユニット内の統計情報取得回路ST_ACが取得した１つのビットパターンBPをそのまま出力することもできる。そのために、加算回路SGM_0-SGM_39の出力か、スカラー演算ユニットのビットパターンかのいずれかを選択するセレクタSELを有する。
【０１４０】
図２３は、第２の統計情報集約器ST_AGR_2と統計情報レジスタファイルの例を示す図である。第２の統計情報集約器ST_AGR_2は、第１の統計情報集約器ST_AGR_1が集約した出力out0〜out39の各ビットの値を、統計情報レジスタファイル内の１つのレジスタセットの値に加算し、格納する。
【０１４１】
統計情報レジスタファイル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のハードウエア回路により、DNNの各層で演算される中間データの非符号となる最上位ビットの位置（有効ビットの最上位ビットの位置）の分布（ヒストグラムの各ビンのサンプル数）を取得することができる。
【０１４３】
非符号となる最上位ビットの位置の分布以外に、非ゼロとなる最下位ビットの位置の分布についても、上記と同様の方法でDNNプロセッサのハードウエア回路により取得できる。さらに、非符号となる最上位ビット位置の最大値、非ゼロとなる最下位ビット位置の最小値も同様に取得できる。
【０１４４】
DNNプロセッサのハードウエア回路により統計情報を取得できるので、事前学習での中間データの小数点位置の調整や、本番学習での中間データの小数点位置の調整を、わずかな工数の増加で実現できる。
【０１４５】
［第２の実施の形態］
本実施の形態の事前学習では、DNN内の重みやバイアスなどの中間データの小数点位置を仮に決定し、１回または数回のミニバッチ学習を実行しながら中間データの統計情報を取得し、統計情報に基づいて中間データの小数点位置を最適な位置に設定し、同じ教師データでミニバッチ学習を再実行する。
【０１４６】
事前学習は、深層学習の初期に実行されるので、統計情報に基づく小数点位置の調整による小数点位置の変動幅が比較的大きい。小数点位置調整による変動幅が大きいということは、調整前の小数点位置では、固定小数点数にオーバーフローやアンダーフローが発生していることを意味する。
【０１４７】
そこで、第２の実施の形態では、事前学習で小数点位置の調整による変動幅が許容範囲より大きいか否かを判定し、変動幅が大きい場合にミニバッチ学習を再実行し、DNNの各層で行われたミニバッチ学習の再実行の回数が所定の閾値未満になるまで、事前学習を繰り返し行う。
【０１４８】
図２４は、第２の実施の形態における複数のプロセッサによる深層学習のフローチャートを示す図である。図１０と同じ処理には同じ番号を付した。
【０１４９】
まず、ホストプロセッサ３１が、DNNの重みとバイアスなどのパラメータの初期値を生成する（S70）。初期値は浮動小数点数である。次に、ホストプロセッサが、入力データと、重みやバイアス等のパラメータを含む中間データの初期小数点位置を決定し、固定小数点数に変換（固定小数点化）する（S80_1）。入力データやパラメータは浮動小数点数であるので、ホストプロセッサは、その指数部に基づいて、または最大値及び最小値に基づいて、最適な固定小数点位置を決定する。
【０１５０】
そして、ホストプロセッサ３１が、固定小数点DNNプロセッサによる事前学習プログラムを呼び出し（S80_2）、それに応答して、固定小数点DNNプロセッサ４３＿１が、事前学習を実行する（S81)。固定小数点演算による事前学習は、例えば、１回または数回のミニバッチ学習の実行を含み、図９の処理S81_1,S81_2,S81_3を含む。また、事前学習は、動的固定小数点数により行われ、統計情報に基づき各中間データの小数点位置が決定される。
【０１５１】
第２の実施の形態では、DNNプロセッサ４３＿１が、事前学習S81で決定した小数点位置の変動幅が所定の許容範囲以上の場合に行ったミニバッチ学習の再実行の回数を、ホストプロセッサに送信する。ホストプロセッサは、このミニバッチ学習の再実行の回数が所定の閾値以上の場合、再度事前学習を呼び出す(S80_2)。これに応答して、DNNプロセッサ４３＿１は、事前学習を再度実行する（S81）。一方、ホストプロセッサは、ミニバッチ学習の再実行の回数が所定の閾値未満になると、固定小数点DNNプロセッサによる本番学習プログラムを呼び出す（S71）。それに応答して、固定小数点DNNプロセッサ４３＿１が、動的固定小数点数による本番学習を実行する（S5）。ミニバッチ学習の再実行の回数が所定の閾値未満になった場合、中間データの小数点位置の変動幅が小さくなったことを意味するので、事前学習を終了して本番学習に移行する。
【０１５２】
本番学習での小数点位置を更新するか否かの条件を、調整前の小数点位置と統計情報で決定した決定後の小数点位置との差が所定の許容値rmax以上にしてもよい。また、事前学習での小数点位置を更新するか否かの条件を、本番学習とは異なり、前記差が所定の許容値rmax’以上にしてもよい。
【０１５３】
図２５は、第２の実施の形態における事前学習の順伝播処理と逆伝播処理の詳細なフローチャートを示す図である。図２５は、前述の図１６に対応し、同じ処理には同じ番号を付した。図２５では、図１６の順伝播処理と逆伝播処理を一部改良している。図２５において順伝播処理S81_1内の処理S110_A、S113_A, S113_Bと、逆伝播処理81_2内の処理S120_A、S123_A, S123_Bとが、図１６と異なり、それ以外の処理は図１６と同じである。以下、図１６と異なる処理について説明する。
【０１５４】
DNNプロセッサは、各層を順番に順伝播処理を実行する（S81_1）。DNNプロセッサは、初回の事前学習では、DNNの重みやバイアスなどのパラメータは各層の出力データなどの中間データの小数点位置Qn.mを仮に決定し、２回目以降の事前学習では、前回に決定済みの小数点位置Qn.mに設定する（S110_A）。
【０１５５】
DNNプロセッサは、順伝播演算及び統計取得S111と、統計情報に基づく小数点位置Qn’.m’の決定S112の後、決定前後の小数点位置の変動幅を｜ｍ−ｍ’｜に設定し（S113_A）、変動幅が許容値(rmax’)未満か否か判定する（S113_B）。DNNプロセッサは、変動幅が許容値未満でない場合（S113_BのNO）、小数点位置Qn.mを調整後の小数点位置Qn’.m’に更新し、順伝播処理演算を再実行する（S114）。逆に、変動幅が許容値未満の場合（S113_BのYES）、小数点位置Qn.mを変更せず順伝播処理演算の再実行も行わず、逆伝播処理S81_2に進む。
【０１５６】
そして、逆伝播処理S81_2中の処理S120_A, 123_A, 123_Bは、上記の順伝播処理での処理S110_A、S113_A, S113_Bと同様である。
【０１５７】
DNNプロセッサは、各層を順番に逆伝播処理で求めた重みやバイアス等のパラメータの差分更新値を既存の値に加算して、重みやバイアスを更新する（S81_3）。そして、順伝播処理と逆伝播処理で実行した演算の再実行の回数を、ホストプロセッサに出力する（S132）。
【０１５８】
以上の通り、本実施の形態によれば、固定小数点プロセッサが、事前学習を実行し、所定のデータの固定小数点数の小数点位置をデータの統計情報に基づいて決定する。そして、固定小数点プロセッサが、本番学習で、事前学習で決定した固定小数点の小数点位置の固定小数点数で、複数回のミニバッチ学習を実行する。本番学習でも、データの統計情報に基づいて所定のデータの固定小数点数の小数点位置を動的に調整する。したがって、浮動小数点プロセッサによる事前学習を行う必要がなくなり、浮動小数点プロセッサによる消費電力を抑制することができる。また、他に浮動小数点数演算を行う必要がない場合、浮動小数点プロセッサのハードウエアを削減できる。
【０１５９】
本実施の形態によれば、事前学習では、DNNの順伝播処理の各層の演算と、逆伝播処理の各層の演算それぞれで、データの統計情報に基づいてデータの小数点位置を決定し、事前学習の初めに仮に決めた小数点位置と決定した小数点位置の差分が許容値以上であれば、決定した小数点位置で各層の演算を再実行する。これにより、その後の各層の演算の精度を高くすることができる。
【符号の説明】
【０１６０】
３０：ホストマシン
３１：ホストプロセッサ
４０：DNN実行マシン
４３＿１，４３＿２：DNNプロセッサ
４３＿１：固定小数点プロセッサ、DNNプロセッサ
ST_AC：統計情報取得回路
INT：固定小数点演算器
FP：浮動小数点演算器
S81(S81_1,S81_2,S81_3)：動的固定小数点数による事前学習
S5（S61,S10,S63,S11,S12）：動的固定小数点数による本番学習
【図１】
2020077143.tif 000003
【図２】
2020077143.tif 000004
【図３】
2020077143.tif 000005
【図４】
2020077143.tif 000006
【図５】
2020077143.tif 000007
【図６】
2020077143.tif 000008
【図７】
2020077143.tif 000009
【図８】
2020077143.tif 000010
【図９】
2020077143.tif 000011
【図１０】
2020077143.tif 000012
【図１１】
2020077143.tif 000013
【図１２】
2020077143.tif 000014
【図１３】
2020077143.tif 000015
【図１４】
2020077143.tif 000016
【図１５】
2020077143.tif 000017
【図１６】
2020077143.tif 000018
【図１７】
2020077143.tif 000019
【図１８】
2020077143.tif 000020
【図１９】
2020077143.tif 000021
【図２０】
2020077143.tif 000022
【図２１】
2020077143.tif 000023
【図２２】
2020077143.tif 000024
【図２３】
2020077143.tif 000025
【図２４】
2020077143.tif 000026
【図２５】
2020077143.tif 000027
【手続補正書】
【提出日】平成30年12月12日(2018.12.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリと、
前記メモリにアクセス可能な演算処理装置とを有し、
前記演算処理装置は、
ニューラルネットワークの各層における処理を所定方向に実行し、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して前記演算処理装置の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記演算処理装置の演算を実行し、前記演算処理装置の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての第１統計情報を取得し、
（ｃ）前記第１統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定し、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納すること
を含む情報処理装置。
【請求項２】
前記差が第１閾値を超える場合に、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することを決定する請求項１に記載の情報処理装置。
【請求項３】
前記複数の第１固定小数点数データは、複数のデータ群に分けられ、前記（ｂ）においては前記演算処理装置の演算が前記複数のデータ群の各々に対して実行され、前記（ｃ）においては前記第２ビットレンジが前記複数のデータ群の各々について決定され、前記（ｄ）において前記複数のデータ群の各々について決定された前記第２ビットレンジ各々と前記第１ビットレンジとの差の各々が第２閾値を超えるか否かを判定し、前記第２閾値を超えると判定された場合が所定数または所定割合以上であれば、前記演算処理装置の演算の再実行を行う、請求項１に記載の情報処理装置。
【請求項４】
前記層における処理は、前記層における処理を前記第１固定小数点数データに対して実行した後に、
（ｅ）複数の第３固定小数点数データに対して前記演算処理装置の演算を実行し、前記演算処理装置の演算の結果である前記複数の第４固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第４固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布を有する第２統計情報を取得し、
（ｆ）前記第２統計情報に基づいて前記複数の第４複数の固定小数点数データを前記レジスタに格納する際にビット幅を制限するための第３ビットレンジを決定することを含む、請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記複数の第３固定小数点数データの数は、前記複数の第１固定小数点数データの数よりも多い、請求項４に記載の情報処理装置。
【請求項６】
前記所定方向は、前記ニューラルネットワークの各層の順方向、逆方向、または順方向及びその後の逆方向のうち、いずれかである、請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
ニューラルネットワークの深層学習の方法であって、
前記深層学習は、
前記ニューラルネットワークの各層における処理を所定方向に実行し、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行し、前記所定の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての統計情報を取得し、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定し、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納すること
を含む学習方法。
【請求項８】
ニューラルネットワークの深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
前記深層学習は、
ニューラルネットワークの各層における処理を所定方向に実行する深層学習を実行し、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行し、前記所定の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての統計情報を取得し、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定し、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納すること
を含む学習プログラム。
【手続補正書】
【提出日】平成30年12月20日(2018.12.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワークを用いた深層学習を実行する情報処理装置であって、
メモリと、
前記メモリにアクセス可能な演算処理装置とを有し、
前記演算処理装置は、
前記ニューラルネットワークの複数の層の処理を、所定方向に実行し、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して前記演算処理装置の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記演算処理装置の演算を実行し、前記演算処理装置の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての第１統計情報を取得し、
（ｃ）前記第１統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定し、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納する
処理を含むことを特徴とする情報処理装置。
【請求項２】
前記差が第１閾値を超える場合に、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することを決定する請求項１に記載の情報処理装置。
【請求項３】
前記複数の第１固定小数点数データは、複数のデータ群に分けられ、前記（ｂ）においては前記演算処理装置の演算が前記複数のデータ群の各々に対して実行され、前記（ｃ）においては前記第２ビットレンジが前記複数のデータ群の各々について決定され、前記（ｄ）において前記複数のデータ群の各々について決定された前記第２ビットレンジ各々と前記第１ビットレンジとの差の各々が第２閾値を超えるか否かを判定し、前記第２閾値を超えると判定された場合が所定数または所定割合以上であれば、前記演算処理装置の演算の再実行を行う、請求項１に記載の情報処理装置。
【請求項４】
前記層における処理は、前記層における処理を前記第１固定小数点数データに対して実行した後に、
（ｅ）複数の第３固定小数点数データに対して前記演算処理装置の演算を実行し、前記演算処理装置の演算の結果である複数の第４固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第４固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布を有する第２統計情報を取得し、
（ｆ）前記第２統計情報に基づいて前記複数の第４複数の固定小数点数データを前記レジスタに格納する際にビット幅を制限するための第３ビットレンジを決定することを含む、請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記複数の第３固定小数点数データの数は、前記複数の第１固定小数点数データの数よりも多い、請求項４に記載の情報処理装置。
【請求項６】
前記所定方向は、前記ニューラルネットワークの各層の順方向、逆方向、または順方向及びその後の逆方向のうち、いずれかである、請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
ニューラルネットワークの複数の層の処理を所定方向に実行することによって深層学習を実行する方法であって、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行し、前記所定の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての統計情報を取得し、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定し、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納する
処理を含むことを特徴とする方法。
【請求項８】
ニューラルネットワークの複数の層の処理を所定方向に実行させることによって深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
前記層における処理は、前記プログラムが前記コンピュータに、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第１ビットレンジを決定させ、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行させ、前記所定の演算の結果である前記複数の第２固定小数点数データのビット幅を前記第１ビットレンジによって制限して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての最上位ビットの位置または最下位ビットの位置の分布についての統計情報を取得させ、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際にビット幅を制限するための第２ビットレンジを決定させ、
（ｄ）前記第１ビットレンジと前記第２ビットレンジとの差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定させ、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データのビット幅を前記第２ビットレンジによって制限して前記レジスタに格納させる
処理を含むことを特徴とするプログラム。
【手続補正書】
【提出日】平成31年4月2日(2019.4.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワークを用いた深層学習を実行する情報処理装置であって、
メモリと、
前記メモリにアクセス可能な演算処理装置とを有し、
前記演算処理装置は、
前記ニューラルネットワークの複数の層の処理を、所定方向に実行し、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して前記演算処理装置の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際に飽和処理及び切り捨て処理を実行する範囲を設定するための第１小数点位置を決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記演算処理装置の演算を実行し、前記演算処理装置の演算の結果である前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第１小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての非符号となる最上位ビットの位置または非ゼロとなる最下位ビットの位置の分布についての第１統計情報を取得し、
（ｃ）前記第１統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際に前記飽和処理及び前記切り捨て処理を実行する範囲を設定するための第２小数点位置を決定し、
（ｄ）前記第１小数点位置と前記第２小数点位置との差に基づき、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することによって得られた前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第２小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納する
処理を含むことを特徴とする情報処理装置。
【請求項２】
前記差が第１閾値を超える場合に、前記複数の第１固定小数点数データに対して前記演算処理装置の演算を再度実行することを決定する請求項１に記載の情報処理装置。
【請求項３】
ニューラルネットワークの複数の層の処理を所定方向に実行することによって深層学習を実行する方法であって、
前記層における処理は、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際に飽和処理及び切り捨て処理を実行する範囲を設定するための第１小数点位置を決定し、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行し、前記所定の演算の結果である前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第１小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての非符号となる最上位ビットの位置または非ゼロとなる最下位ビットの位置の分布についての統計情報を取得し、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際に前記飽和処理及び前記切り捨て処理を実行する範囲を設定するための第２小数点位置を決定し、
（ｄ）前記第１小数点位置と前記第２小数点位置との差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定し、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第２小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納する
処理を含むことを特徴とする方法。
【請求項４】
ニューラルネットワークの複数の層の処理を所定方向に実行させることによって深層学習をコンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
前記層における処理は、前記プログラムが前記コンピュータに、
（ａ）複数の第１固定小数点数データに対して所定の演算を実行した結果である複数の第２固定小数点数データをレジスタに格納する際に飽和処理及び切り捨て処理を実行する範囲を設定するための第１小数点位置を決定させ、
（ｂ）前記複数の第１固定小数点数データに対して前記所定の演算を実行させ、前記所定の演算の結果である前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第１小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納すると共に、前記複数の第２固定小数点数データ各々についての非符号となる最上位ビットの位置または非ゼロとなる最下位ビットの位置の分布についての統計情報を取得させ、
（ｃ）前記統計情報に基づいて前記複数の第２固定小数点数データをレジスタに格納する際に前記飽和処理及び前記切り捨て処理を実行する範囲を設定するための第２小数点位置を決定させ、
（ｄ）前記第１小数点位置と前記第２小数点位置との差に基づき、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行するか否かを決定させ、再度実行すると決定された場合は、前記複数の第１固定小数点数データに対して前記所定の演算を再度実行することによって得られた前記複数の第２固定小数点数データに対して前記飽和処理及び前記切り捨て処理を前記第２小数点位置によって設定された前記範囲に基づいて実行して前記レジスタに格納させる
処理を含むことを特徴とするプログラム。