(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-05
(45)【発行日】2022-12-13
(54)【発明の名称】情報処理装置、情報処理方法、情報処理プログラム
(51)【国際特許分類】
G06N 3/08 20060101AFI20221206BHJP
G06F 9/38 20060101ALI20221206BHJP
G06F 7/499 20060101ALI20221206BHJP
【FI】
G06N3/08
G06F9/38 370C
G06F7/499 101
(21)【出願番号】P 2019067701
(22)【出願日】2019-03-29
【審査請求日】2021-12-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100147164
【氏名又は名称】向山 直樹
(72)【発明者】
【氏名】伊藤 真紀子
(72)【発明者】
【氏名】依田 勝洋
(72)【発明者】
【氏名】兼森 渉
【審査官】武田 広太郎
(56)【参考文献】
【文献】米国特許出願公開第2018/0107451(US,A1)
【文献】特開2018-010618(JP,A)
【文献】米国特許出願公開第2017/0323196(US,A1)
【文献】特開2018-106463(JP,A)
【文献】特開2019-032833(JP,A)
【文献】国際公開第2018/155232(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/08
G06F 9/38
G06F 7/499
(57)【特許請求の範囲】
【請求項1】
深層学習を実行する情報処理装置であって、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第1層の演算の演算結果である複数の第1固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第1統計情報を取得する取得部と、
第2層の演算について、前記第1層の複数の出力データに対して所定の規則の演算を実行する実行部と、
前記所定の規則と前記第1統計情報に基づいて第2統計情報を取得し、前記第2層の演算の演算結果である複数の第2固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第2統計情報に基づいて決定する制御部と
を備えることを特徴とする情報処理装置。
【請求項2】
前記所定の規則の演算は、前記第1層の前記複数の出力データのうち所定の割合のデータに0を乗算し、前記所定の割合のデータ以外の前記第1層の前記複数の出力データに前記所定の割合から求められる係数を乗算することであり、
前記第2統計情報は、前記係数に基づいて前記第1統計情報をシフトすることで取得される
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記所定の規則の演算は、前記第1層の前記複数の出力データのうち0より小さい値を有するデータの値に0を乗算する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記所定の規則の演算は、前記第1層の前記複数の出力データを複数のグループに分け、前記複数のグループのうち所定のグループの最大値を求め、前記所定のグループに属する前記第1層の前記複数の出力データの値各々を前記所定のグループの最大値に変更する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項5】
取得部は、第3層の演算の演算結果である複数の第3固定小数点数データ各々についての最上位ビットの位置の分布又は最下位ビットの位置の分布についての第3統計情報を更に取得し、
前記所定の規則の演算は、前記第1層の前記複数の出力データと前記第3層の複数の出力データとを連接し、
前記第2統計情報は、前記第1統計情報と前記第3統計情報とを加算することで得られる
ことを特徴とする請求項1に記載の情報処理装置。
【請求項6】
深層学習を実行する情報処理方法であって、
コンピュータが、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第1層の演算の演算結果である複数の第1固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第1統計情報を取得し、
第2層の演算について、前記第1層の前記複数の出力データに対して所定の規則の演算を実行し、
前記所定の規則と前記第1統計情報に基づいて第2統計情報を取得し、
前記第2層の演算の演算結果である複数の第2固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第2統計情報に基づいて決定する
ことを特徴とする情報処理方法。
【請求項7】
深層学習を実行する情報処理プログラムであって、
コンピュータに、
前記深層学習を実行するためのニューラルネットワークの複数の層の演算において、
第1層の演算の演算結果である複数の第1固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非ゼロの最下位ビットの位置の分布についての第1統計情報を取得する取得処理と、
第2層の演算について、前記第1層の前記複数の出力データに対して所定の規則の演算を実行する実行処理と、
前記所定の規則と前記第1統計情報に基づいて第2統計情報を取得する第2取得処理と、
前記第2層の演算の演算結果である複数の第2固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを前記第2統計情報に基づいて決定する決定処理と
を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法、情報処理プログラムに関する。
【背景技術】
【0002】
深層学習(Deep Learning)は、多層のニューラルネットワークを用いた機械学習である。深層学習の一例であるディープニューラルネットワーク(Deep Neural Network、以下DNNと称する)は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、1または複数のノードを持ち、各ノードは値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアス等のパラメータを持つ。
【0003】
DNNにおいて、各層のノードの値は、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力として次の層のノードの値がその層の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【0004】
DNNの演算を実行するDNNプロセッサは、演算処理対象の一つである画像データが比較的少ないビット数であるので、固定小数点演算器により演算を行うことがある。この場合、浮動小数点演算器を使用しないので、演算に要する消費電力を抑えることができる。また、浮動小数点演算器よりも回路構成が簡単な固定小数点演算器を用いることは、DNNプロセッサの構成をより少ない回路規模で実現できることを意味する。
【0005】
しかしながら、固定小数点数はビット数が固定であるので、浮動小数点数に比べるとダイナミックレンジが狭い。そのため、演算によりオーバーフローが発生し演算結果の値が飽和することがあり、逆に、アンダーフローにより下位ビットが切り捨てられることがある。この場合、演算結果の精度の低下を招く。
【0006】
そこで、DNNの演算において、演算により求められた演算結果データの小数点位置を動的に調整する動的固定小数点(Dynamic Fixed Point)が提案されている。また、小数点位置を動的に調整するための方法として、各層の演算結果の中間データについて有効な最上位ビットの位置の分布を示す統計情報を取得し、取得した統計情報に基づいて中間データの固定小数点位置を最適な位置に調整する方法が知られている(例えば、以下の特許文献1を参照)。また、固定小数点演算に関しては、以下の特許文献2~4がある。
【先行技術文献】
【特許文献】
【0007】
【文献】特開2018-124681号公報
【文献】特開2012-203566号公報
【文献】特開2009-271598号公報
【文献】特開平07-084975号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
各層の演算結果の有効桁数の分布を示す統計情報を取得し、最適な小数点位置に調整することで演算精度を維持する方法において、DNNの各層で統計情報を取得することで、演算量が多くなっている。DNNの処理においては、各層の演算を繰り返すことで学習処理を行なうため、各層の演算量の増加は、学習処理にかかる時間の増加につながる。
【0009】
一つの側面では、本発明は、演算精度を維持しつつ演算量を低減した情報処理装置、情報処理方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
一つの様態によると、深層学習を実行する情報処理装置であって、深層学習を実行するためのニューラルネットワークの複数の層の演算において、第1層の演算の演算結果である複数の第1固定小数点数データ各々についての非符号の最上位ビットの位置の分布又は非符号の最下位ビットの位置の分布についての第1統計情報を取得する取得部と、第2層の演算について、第1層の複数の出力データに対して所定の規則の演算を実行する実行部と、所定の規則と第1統計情報に基づいて第2統計情報を取得し、第2層の演算の演算結果である複数の第2固定小数点数データをレジスタに格納する場合にビット幅を制限するためのビットレンジを第2統計情報に基づいて決定する制御部とを備えることを特徴とする情報処理装置が、提供される。
【発明の効果】
【0011】
一つの側面では、DNNの演算精度を維持しつつ演算量を減らすことができる。
【図面の簡単な説明】
【0012】
【
図1】ディープニューラルネットワーク(DNN)の一例を示す図である。
【
図2】DNNの学習処理の一例のフローチャートを示す図である。
【
図4】
図3に示すホストマシン30の詳細を示す図である。
【
図5】
図3に示すDNN実行マシン40の詳細を示す図である。
【
図6】ホストマシン30とDNN実行マシン40による深層学習処理の概略を示すシーケンスチャートの図である。
【
図7】深層学習の一例のフローチャートを示す図である。
【
図8】
図7に示す動的固定小数点数による学習の処理のうち、S61とS63の詳細を説明する図である。
【
図9】深層学習の順伝播処理と逆伝播処理とを説明する図である。
【
図10】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【
図11】中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。
【
図12】
図7に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。
【
図13】本実施形態にかかる深層学習のフローチャートを示す図である。
【
図14】
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第1例を説明する図である(第1実施形態)。
【
図15】
図13に示すフローチャートのうちS133の詳細な処理の第1例を示すフローチャートの図である(第1実施形態)。
【
図16】
図16は、ドロップアウト層の処理前後の最上位ビットの位置の分布の例を示す図である。
【
図17】DNNプロセッサ43の構成例を示す図である。
【
図18】DNNプロセッサ43による統計情報の取得、集約、格納の処理を示すフローチャートの図である。
【
図19】統計情報取得器ST_ACの論理回路例を示す図である。
【
図20】統計情報取得器ST_ACが取得する演算出力データのビットパターンを示す図である。
【
図21】統計情報集約器ST_AGR_1の論理回路例を示す図である。
【
図22】統計情報集約器ST_AGR_1の動作を説明する図である。
【
図23】第2の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。
【
図24】
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第2例を説明する図である(第2実施形態)。
【
図25】
図13に示すフローチャートのうちS133の詳細な処理の第2例を示すフローチャートの図である(第2実施形態)。
【
図26】
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第3例を説明する図である(第3実施形態)。
【
図27】
図13に示すフローチャートのうちS133の詳細な処理の第3例を示すフローチャートの図である(第3実施形態)。
【
図28】深層学習の一例における、二重の飽和・丸め処理を説明する図である。
【
図29】
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第4例を説明する図である(第4実施形態)。
【
図30】
図13に示すフローチャートのうちS133の詳細な処理の第4例を示すフローチャートの図である(第4実施形態)。
【発明を実施するための形態】
【0013】
図1は、ディープニューラルネットワーク(DNN)の一例を示す図である。
図1のDNNは、例えば、画像を入力し、入力画像の内容(例えば数字)に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。DNNは、入力層INPUT、第1の畳み込み層Conv_1、第1のプーリング層Pool_1、第2の畳み込み層Conv_2、第2のプーリング層Pool_2、第1の全結合層fc1、第2の全結合層fc2、出力層OUTPUTを有する。各層は、単数または複数のノードを有する。
【0014】
畳み込み層Conv_1は、入力層INPUT内の複数のノードに入力された例えば画像の画素データにノード間の重み等を積和演算し、畳み込み層Conv_1内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。畳み込み層Conv_2も同様である。
【0015】
プーリング層Pool_1は、前の層である畳み込み層Conv_1の局所的なノードから定まる値をノードとする層であり、例えば、局所的なノードの最大の値を自分のノードの値とすることで、画像のわずかな変化を吸収する。
【0016】
出力層OUTPUTは、ソフトマックス関数等を用いてノードの値から各カテゴリに属する確率を求める。
【0017】
図2は、DNNの学習処理の一例のフローチャートを示す図である。学習処理は、例えば、入力データと、入力データからDNNが算出する出力の正解データとを有する複数の教師データを使用して、DNN内の重み等のパラメータを最適化する。
図2の例では、ミニバッチ法により、一対一で対応する入力データと教師データの複数の組を複数のミニバッチに分割し、各ミニバッチに分割された複数の入力データと、入力データに対応する教師データを入力する。そして、それぞれの入力データに対してDNNが出力した出力データと教師データとの差分(誤差)を小さくするように重み等のパラメータを最適化する。
【0018】
DNNは、複数の層をハードウエア回路で構成し、各層の演算をハードウエア回路が実行するようにしてもよい。または、DNNは、DNNの各層の演算を実行するプロセッサに、各層の演算を実行させるプログラムを実行させるようにしてもよい。
図2において説明されるDNNの処理は、後述するホストマシンとDNN実行マシンによって実行されるようにしてもよい。
【0019】
図2に示されるとおり、事前の準備として、複数の入力データと教師データを並び替え(S1)、並び替えた複数の入力データと教師データを複数のミニバッチに分割する(S2)。
【0020】
そして、分割した複数のミニバッチそれぞれに対して、順伝播処理S6と、誤差評価S7と、逆伝播処理S8と、パラメータ更新S9とを繰り返す。全てのミニバッチの学習が終了すると(S11:YES)、所定回数に達するまで(S12:NO)、同じ入力データについて、処理S1~S2、S6~S9、S11を繰り返し実行する。
【0021】
また、所定回数に達するまで同じ学習データで処理S1~S2、S6~S9を繰り返すことに代えて、学習結果の評価値、例えば、出力データと教師データとの差分(誤差)が一定の範囲に収まったことで、処理を終了することも行われる。
【0022】
順伝播処理S6では、DNNの入力側から出力側に向かって各層の演算が順番に実行される。
図1の例で説明すると、第1の畳み込み層Conv_1が、入力層INPUTに入力された1つのミニバッチが有する複数の入力データを、エッジの重み等で畳み込み演算を行い、複数の演算出力データを生成する。そして、第1のプーリング層Pool_1が、畳み込み層Conv_1の演算結果の局所性を弱める処理を行う。さらに、第2の畳み込み層Conv_2と第2のプーリング層Pool_2が、上記と同様の処理を行う。最後に、全結合層fc1、fc2が、全エッジの重み等で畳み込み演算を行い、出力層OUTPUTに出力データを出力する。
【0023】
次に、誤差評価S7にて、DNNの出力データと教師データの差分が誤差として演算される。そして、誤差をDNNの出力側から入力側に伝播する逆伝播処理S8が実行される。逆伝播処理S8では、誤差を出力側から入力側に伝播すると共に、伝播された各層の誤差をパラメータで微分し、勾配降下法でパラメータの変更データが演算される。そして、パラメータ更新S9では、勾配降下法で求めたパラメータの変更値で現在のパラメータが更新され、各層の重み等が最適値方向に更新される。
【0024】
図3は、深層学習システムの一例を示す図である。深層学習システムは、ホストマシン30とDNN実行マシン40とを有し、例えば、専用インターフェースを介してホストマシン30とDNN実行マシン40とが接続される。また、ホストマシン30には利用者端末50がアクセス可能にされ、利用者は、利用者端末50からホストマシン30にアクセスし、DNN実行マシン40を操作し、深層学習を実行する。ホストマシン30は、利用者端末50からの指示に従い、DNN実行マシン40が実行するプログラムを作成し、DNN実行マシン40に送信する。そして、DNN実行マシン40は送信されたプログラムを実行し、深層学習を実行する。
【0025】
図4は、
図3に示すホストマシン30の詳細を示す図である。ホストマシン30は、CPU等のホストプロセッサ31と、DNN実行マシン40と接続するための高速入出力インターフェース32と、SDRAM等のメインメモリ33と、内部バス34とを有する。さらに、内部バス34に接続された大容量のHDD等の補助記憶装置35と、利用者端末50と接続するための低速入出力インターフェース36とを有する。
【0026】
ホストマシン30のホストプロセッサ31は、補助記憶装置35に記憶されているプログラムがメインメモリ33に展開されたプログラムを実行する。高速入出力インターフェース32は、例えば、PCI Express等のホストプロセッサ31とDNN実行マシン40とを接続するインターフェースである。メインメモリ33は、プロセッサが実行するプログラムやデータを記憶する。メインメモリ33は、例えば、SDRAMである。
【0027】
内部バス34は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース36は、例えば、USB等利用者端末50のキーボードやマウスとの接続を行うか、または、イーサーネットのネットワークとの接続を行う。
【0028】
補助記憶装置35には、図示されるとおり、DNN学習プログラムと、入力データ及び教師データが記憶される。ホストプロセッサ31は、DNN学習プログラムを実行して、例えば、学習プログラムと入力データ及び教師データをDNN実行マシン40に送信し、DNN実行マシン40に学習プログラムを実行させる。
【0029】
図5は、
図3に示すDNN実行マシン40の詳細を示す図である。DNN実行マシン40は、ホストマシン30との通信を中継する高速入出力インターフェース41と、ホストマシン30からの指令やデータに基づいて対応する処理を実行する制御部42とを有する。また、DNN実行マシン40は、DNNプロセッサ43と、メモリアクセスコントローラ44と、内部メモリ45を有する。
【0030】
DNNプロセッサ43は、ホストマシン30から送信されたプログラムとデータに基づいて、プログラムを実行し、深層学習の処理を実行する。DNNプロセッサ43は、固定小数点演算を実行するDNNプロセッサ43_1と、浮動小数点演算を実行するDNNプロセッサ43_2とを有する。ただし、浮動小数点演算を実行するDNNプロセッサ43_2はなくてもよい。
【0031】
固定小数点演算を実行するDNNプロセッサ43_1は、DNN内で演算される演算結果や学習により更新されるパラメータ等の中間データと、メモリ内のデータ等の有効な最上位ビットや有効な最下位ビットの数についての統計情報を取得する統計情報取得回路を有する。固定小数点演算を実行するDNNプロセッサ43_1は、学習を実行しながら演算により求められる中間データの統計情報を取得し、統計情報に基づいて中間データの固定小数点位置を最適な位置に調整する。
【0032】
高速入出力インターフェース41は、例えば、PCI Expressであり、ホストマシン30との通信を中継する。
【0033】
制御部42は、ホストマシン30から送信されるプログラムやデータを内部メモリ45に記憶し、ホストマシン30からの指令に応答して、DNNプロセッサ43にプログラムの実行を指示する。メモリアクセスコントローラ44は、制御部42からのアクセス要求とDNNプロセッサ43からのアクセス要求に応答して、内部メモリ45へのアクセス処理を制御する。
【0034】
内部メモリ45は、DNNプロセッサ43が実行するプログラム、処理対象データ、処理結果のデータ等を記憶する。内部メモリ45は、例えば、SDRAMや、より高速のGDR5や広帯域のHBM2等である。
【0035】
図6は、ホストマシンとDNN実行マシン40による深層学習処理の概略を示すシーケンスチャートの図である。ホストマシン30は、DNN実行マシン40に、深層学習の学習プログラムを送信し(S31)、1ミニバッチ分の入力データを送信し(S32_1)、学習プログラム実行指示を送信する(S33)。
【0036】
これらの送信に応答して、DNN実行マシン40は、入力データと学習プログラムを内部メモリ45に記憶し、学習プログラム実行指示に応答して、内部メモリ45に記憶した入力データについて学習プログラムを実行する(S40)。学習プログラムの実行は、DNNプロセッサ43により行われる。ホストマシン30は、次回の1ミニバッチ分の入力データを送信してから(S32_2)、DNN実行マシン40による学習プログラムの実行完了まで待機する。この場合、DNN実行マシン40に入力データを格納する領域を2つ用意する。
【0037】
DNN実行マシン40は、学習プログラムの実行が完了すると、学習プログラム実行終了の通知をホストマシン30に送信する(S41)。ホストマシン30は、学習プログラムが参照する入力データ領域を切り替えて、学習プログラム実行指示を送信する(S33)。そして、DNN実行マシン40が学習プログラムを実行し(S40)、学習プログラム実行終了通知を送信する(S41)。これを繰り返してDNNの学習を進める。
【0038】
DNNの学習は、DNNの順方向に各層の演算(順伝播処理)を実行し、出力層の出力データと正解データとの誤差をDNNの逆方向に伝播して各層の誤差を演算し、誤差を小さくするパラメータの変更データを算出し(逆伝播処理)、パラメータの変更データによりパラメータを更新する処理(パラメータ更新)を有する。これらのDNNの学習処理を、全てDNN実行マシン40が実行してもよく、また、一部の処理をホストマシン30で実行してもよい。
【0039】
図7は、深層学習の一例のフローチャートを示す図である。深層学習の一例では、各層の各中間データの値の分布の統計情報を保存し、保存した各層の統計情報に基づいて各層の各中間データの固定小数点位置を調整する。
図7における固定小数点位置の調整は、
図2の処理S6及びS8で行われる。
【0040】
まず、DNNプロセッサ43が、各中間データ(各層の演算結果、パラメータ等)の初期小数点位置を決定する(S50)。初期小数点位置の決定は、浮動小数点数による事前学習や、ユーザの指定によって行われる。浮動小数点数により事前学習を行う場合、DNN内の中間データは浮動小数点数となるので、中間データの大きさに対応した指数部が生成され、固定小数点数のように小数点位置を調整する必要はない。そして、浮動小数点数の中間データに基づいて、各中間データの固定小数点数の最適な小数点位置が決定される。
【0041】
次に、DNNプロセッサ43が、ミニバッチ学習を実行しながら、各中間データの分布についての統計情報を取得・保存する(S61)。DNNプロセッサ43に含まれる固定小数点演算を実行するDNNプロセッサ43_1は、固定小数点演算器の演算出力等の有効ビットの分布等の統計情報を取得する統計情報取得回路を有する。DNNプロセッサ43に統計情報取得処理付の演算命令を実行させることで、ミニバッチ学習中に中間データの統計情報を取得し保存することができる。このミニバッチ学習をK回実行するたびに(S10:YES)、中間データの分布の各層の統計情報に基づいて、DNN内の各中間データの固定小数点位置を調整する(S63)。
【0042】
上記のDNNプロセッサ43内の統計情報取得回路と、分布についての各層の統計情報に基づく固定小数点位置の調整方法については、後で詳述する。
【0043】
そして、DNNプロセッサ43は、全ミニバッチの学習が終了するまで(S11:NO)、S61、S10、S63を繰り返す。全ミニバッチの学習が終了すると(S11:YES)、所定回数に達するまで(S12:NO)、S50に戻って全ミニバッチ学習を繰り返す。なお、
図7中の処理S11、S12は、
図2の処理S11、S12と同等である。
【0044】
図8は、
図7に示す動的固定小数点数による学習の処理のうち、S61とS63の詳細を説明する図である。S61では、DNNプロセッサ43が、ミニバッチ学習をK回繰り返し実行する。各ミニバッチ学習では、DNNプロセッサ43が、ミニバッチの複数の入力データ及び教師データについて、順伝播処理と、逆伝播処理と、各層を順番にパラメータを更新する処理を実行しながら、各処理における各層の中間データの分布についての統計情報を取得し、保存する。
【0045】
また、学習の処理S63では、DNNプロセッサ43が、保存した統計情報に含まれる複数の中間データの有効ビットの分布に基づいて、各層の各中間データの最適な小数点位置を決定し更新する。
【0046】
図9は、深層学習の順伝播処理と逆伝播処理とを説明する図である。順伝播処理では、DNNプロセッサ43内の固定小数点演算器が、入力側に近い層L1のノードのデータX
0-X
nにリンクの重みW
ijを乗じ、バイアスbを加算した値を累積加算して、出力側に近い層L2のノードの出力データZ
0-Z
j…を演算する。さらに、層L2の活性化関数により出力データZ
0-Z
j…に対する活性化関数の出力データU
0-U
j…を演算する。層L1、L2での演算が、入力側から出力側にわたって繰り返される。
【0047】
一方、逆伝播処理では、DNNプロセッサ43内の固定小数点演算器が、出力側に近い層L6の誤差(出力データと正解データの差分または伝播された差分)δ0
(6)-δi
(6)-δn
(6)から、入力側に近い層L5の誤差δ0
(5)-δj
(5)…を演算する。そして、層L5の誤差δ0
(5)-δi
(5)-δn
(5)を重みWij等のパラメータで微分した値の傾きの方向に応じて、重みの差分更新データΔWijを演算する。層L6、L5での演算が、出力側から入力側にわたって繰り返される。
【0048】
さらに、各層を順番にパラメータを更新する処理では、既存の重みWijに差分更新データΔWijを加算して、更新された重みWijを演算する。
【0049】
図9に示される、層L2の出力データZ
0-Z
j…及び活性化関数の出力データU
0-U
j…、層L6、L5での誤差δ
0
(6)-δ
i
(6)-δ
n
(6) 、誤差δ
0
(5)-δ
j
(5)…、及び重みの差分更新データΔW
ij、更新された重みW
ijは、DNNの中間データである。これらの中間データの小数点位置を最適な位置に調整することで、各中間データの演算精度を高くすることができ、学習の精度を高くできる。
【0050】
図10、
図11は、中間データの分布についての統計情報と、分布に基づく小数点位置の調整方法を示す図である。後述するとおり、DNNプロセッサ43は、固定小数点演算器を有し、各演算器の出力や内部メモリ45内に記憶されている演算結果データ等の中間データの有効ビットの分布についての統計情報を取得する統計情報取得回路を有する。
【0051】
中間データの有効ビットの分布についての統計情報は、例えば、以下の通りである。
(1)非符号となる最上位ビットの位置の分布
(2)非ゼロとなる最下位ビットの位置の分布
(3)非符号となる最上位ビットの位置の最大値
(4)非ゼロとなる最下位ビットの位置の最小値
(1)非符号となる最上位ビットの位置とは、中間データの有効ビットの最上位ビットの位置である。非符号とは、符号ビットが0(正)であれば「1」、1(負)であれば「0」である。(2)非ゼロとなる最下位ビットの位置とは、中間データの有効ビットの最下位ビットの位置である。符号ビットが0(正)であれば「1」の最下位ビットの位置、符号ビットが1(負)の場合も「1」の最下位ビットの位置である。符号ビットが1の場合、符号ビット以外のビットは2の補数で表され、2の補数を元の数に変換する処理に1を減算して、1、0を0、1に反転する処理が含まれる。そのため、「1」の最下位ビットは、1を減算することで「0」になり、ビット反転で「1」になるので、有効ビットの最下位ビットの位置となる。
【0052】
(3)非符号となる最上位ビットの位置の最大値は、複数の中間データそれぞれの有効ビットの最上位ビットの位置のうち、最大の位置である。同様に、(4)非ゼロとなる最下位ビットの位置の最小値は、複数の中間データそれぞれの有効ビットの最下位ビットの位置のうち、最小の位置である。
【0053】
図10、
図11には、一例として、(1)非符号となる最上位ビットの位置の分布を示すヒストグラムが示される。横軸は、ヒストグラムのビンに対応する中間データの有効最上位ビットのべき乗(2の対数値)を示し、ビンの高さは各ビンの有効最上位ビットを有する中間データの数である。
図10の例では、ビン数が-25~+13までの合計39である。
【0054】
分布の最上位のビンは、(3)非符号となる最上位ビットの位置の最大値に対応する。
【0055】
16ビットの固定小数点数の場合、符号ビットを除くビット数は15ビットである。そして、固定小数点数のフォーマットをQn.mと表現する。Qn.mは、nビットの整数部と、mビットの小数部を意味する。小数点位置は整数部と小数部との間に位置する。小数点位置とビット幅が固定であるとき、整数部を表現するビット数と小数部を表現するビット数の情報を有する固定小数点数フォーマットを決定することは、データの桁に対する小数点位置を決定することと対応する。また、固定小数点数フォーマットを決定することは、演算結果である中間データを出力として格納する場合に、中間データよりも小さいビット幅で制限をかけることに対応する。演算結果データのビット幅を制限する際の、値を飽和・切り捨て処理をせずに表現可能な桁の範囲を、本実施形態ではビットレンジと呼ぶ。
【0056】
一方、非符号となる最上位ビットの位置の分布の広がり(ヒストグラムのビンの数)は、複数の中間データに依存して変化する。
図10のヒストグラムの分布の広がりは、-22のビンから+10のビンまで、ビン数が22+10+1=33となり、固定小数点数の15ビット(固定小数点数で表現可能な領域)内には収まっていない。この表現可能な領域の15ビットより上位のビットは、オーバーフローとなり飽和処理され、下位のビットはアンダーフローとなり切り捨て処理される。一方、
図11のヒストグラムは、-13のビンから-2のビンまで、ビン数が12となり、固定小数点数の15ビット内に収まっている。
【0057】
そこで、ヒストグラムである統計情報に基づく小数点位置の決定方法は、ヒストグラムの横幅(ビン数)が15ビットを超えて表現可能な領域(15ビット)に収まらない場合(
図10)と、収まる場合(
図11)とで異なる。
【0058】
図10のヒストグラムの横幅(ビン数)33が15ビットを超えて表現可能な領域(15ビット)に収まらない場合、以下のように固定小数点数フォーマット(小数点位置)を決定する。すなわち、ヒストグラムの上位ビット側のデータ数の全データ数に対する割合が所定の閾値r_max未満を満たす、上位ビット側の最大ビット数Bmaxを決定し、決定したBmaxより下位側に固定小数点数フォーマットを決定する。
図10に示すように、決定したBmaxより上位側にはビンが含まれる、すなわち、新たに決定した固定小数点数フォーマットでは表現できないデータが存在することになる。
図10では、新たに決定した固定小数点数フォーマットでは表現できないデータ領域を斜線のビンで示している。本実施形態の小数点位置の決定方法では、データのオーバーフローを許容することで、最上位ビットの位置が極端に上位側にある外れ値データを無視し、表現可能な領域に収まるデータ数を増加させることができる。
【0059】
図10の例では、既存の固定小数点数フォーマットQ5.10が-10~+4のビットを収容しているのに対して、更新後の固定小数点数フォーマットをQ3.12が-12~+3のビットを収容するように変更される。この変更により、有効ビットの最上位ビットが+3~+10の中間データは、オーバーフローにより値が飽和されるが、有効ビットの最上位ビットが-11、-12の中間データは少なくとも最上位ビットについては切り捨てられない。
【0060】
図11の例では、既存の固定小数点数フォーマットQ4.11が、ヒストグラムの上位ビット側にずれているので、更新後の固定小数点数フォーマットをQ1.14に変更する。Q1.14の場合は、ヒストグラムのピークの位置にフォーマットQ1.14の中央ビットが位置する。これにより、有効ビットの最上位ビットが-12、-13、-14の中間データは少なくとも最上位ビットについては切り捨てられない。
【0061】
図12は、
図7に示すフローチャートのうち、S63の詳細な処理を示すフローチャートの図である。S63の詳細な処理では、条件により決定される中間データの分布の統計情報に基づいて、DNN内の各中間データの固定小数点位置を調整する。以下、
図12を用いて説明するS63の詳細な処理は、全てホストマシン30のポストプロセッサ31が実行してもよく、また、一部の処理をDNN実行マシン40のDNNプロセッサ43で実行してもよい。
【0062】
S10が終了したことを契機に処理が開始され、S61にて保存された各層の統計情報から、統計情報の最大値ubを求める(S631)。統計情報の最大値ubは、例えば、前述した非符号となる最上位ビットの位置の最大値と対応する。次に、S61にて保存された各層の統計情報から、統計情報の最小値lbを求める(S632)。統計情報の最小値lbは、例えば、非符号となる最上位ビットの位置の最小値と対応する。次に、分布の広がりub-lb+1を求める(S633)。ub-lb+1は、統計情報の最大値と最小値の幅を示す。次に、分布の広がりub-lb+1が、符号ビットを除くビット幅Nより大きいか否かを判定する(S634)。この判定は、ヒストグラムの横幅(ビン数)が表現可能な領域に収まらない場合(
図10)と、収まる場合(
図11)との場合分けに対応する。
【0063】
分布の広がりub-lb+1が、符号ビットを除くビット幅Nより大きくない場合(S634:NO)、分布の中心(ub-lb+1)/2とビット幅の中心N/2に基づいて整数部の桁数nを決定する(S635)。整数部の桁数nは、固定小数点数のフォーマットQn.mで表現されるnビットの整数部に対応する。分布の広がりが、符号ビットを除くビット幅Nより大きい場合(S634:YES)、オーバーフロー率が既定値r_maxを超える桁を求める関数に基づいて整数部の桁数nを決定する(S636)。次に、S635またはS636にて求められた整数部の桁数nとビット幅Nに基づいて小数部の桁数mを決定する(S637)。整数部の桁数mは、固定小数点数のフォーマットQn.mで表現されるmビットの小数部に対応する。
【0064】
[第1実施形態にかかる深層学習の固定小数点位置の調整]
第1実施形態にかかる深層学習の統計情報の取得方法について、
図13~
図16を用いて説明する。
【0065】
第1実施形態にかかる深層学習は、DNNの層としてドロップアウト層Dropoutを有する。第1実施形態にかかる深層学習では、ドロップアウト層Dropoutの固定小数点位置の調整において、ドロップアウト層Dropoutの前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第1実施形態にかかる深層学習には、ドロップアウト層Dropoutにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【0066】
図13は、本実施形態にかかる深層学習のフローチャートを示す図である。本実施形態にかかる深層学習は、
図7にて説明される深層学習に対して、共通の符号を用いる処理は同等だが、以下の点で異なる。
図7にて説明されるフローチャートのS61にて各層の各中間データの値の分布を統計情報として取得・保存する処理の代わりに、各層の統計情報を取得・保存するが特定の層については統計情報を取得しない処理を行う(S131)。
図7にて説明されるフローチャートのS63にて各層の各統計情報に基づいて各層の固定小数点位置を調整する代わりに、条件により決定される統計情報に基づいて各層の固定小数点数位置を調整する(S133)。
【0067】
ドロップアウト層は、ドロップアウト比率に従って前層の出力を0とし、残りの出力をドロップアウト比率に基づいて定数倍して出力を行うことで、DNNの過学習を防ぐことを目的とする層である。ドロップアウト層の処理を実行する処理回路は、DNNプロセッサ43に含まれる。ドロップアウト層Dropoutの処理は、ドロップアウト比率rで1を有し、残りは0の配列となるマスクデータmを作成し、前層の出力xに対し乗算または値のセレクトを行い、得られた乗算結果に対して係数kを乗算することで、ドロップアウト層Dropoutの出力yを得る。係数kはドロップアウト比率rに基づいて下記式(1)で表される。
【0068】
【0069】
kが2のべき乗(2^q:qは整数)である場合、2進数の桁シフトに対応する値pとして用いることができる。値pは、係数kに基づいて下記式(2)で表される。
【0070】
【0071】
図14は、
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第1例を説明する図である。
【0072】
図15は、
図13に示すフローチャートのうちS133の詳細な処理の第1例を示すフローチャートの図である。以下、
図15を用いて説明するS133の詳細な処理は、全てDNN実行マシン40が実行してもよく、また、一部の処理をホストマシン30で実行してもよい。
【0073】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、ドロップアウト層であるか否かを判定する(S1331)。固定小数点位置を調整する層がドロップアウト層でない場合(S1331:NO)、調整する層の統計情報を後ろの処理で用いることを決定する(S1332)。調整する層がドロップアウト層である場合(S1331:YES)、調整する層の前層の統計情報を後ろの処理で用いることを決定する(S1333)。調整する層の前層は、順伝播処理の場合は調整する層よりも入力層側の層であり、逆伝播処理の場合は調整する層よりも出力層側の層である。次に、ドロップアウト層の処理で用いられるドロップアウト比率kから、値pを求める(S1334)。値pは、前述の通り、2進数の桁シフトに対応する値である。次に、S1334にて求められた値pを用いて統計情報をシフトし、シフトされた統計情報を後ろの処理で用いることを決定する(S1335)。統計情報のシフトは、ヒストグラムのビンの値に値pを加算することに相当する。
【0074】
次に、決定された統計情報に基づいて層の各中間データの固定小数点位置を調整する(S1336)。S1336は、
図7、
図12にて説明したS63と、条件により決定される統計情報を用いること以外はS63と同等である。
【0075】
そして、全層の固定小数点位置の調整が終了するまで(S1337:NO)、S1331~S1336を繰り返す。全層の固定小数点位置の調整が終了すると(S1337:YES)、S11に進む。
【0076】
図16は、ドロップアウト層の処理前後の最上位ビットの位置の分布の例を示す図である。ドロップアウト層は前述の処理回路を用いて、所定の規則に従って演算を行う。ドロップアウト層の所定の規則とは、前層の出力に対してドロップアウト比率rのデータに0を乗算して出力し、残りのデータにkを乗算して出力することである。処理によるデータの変化、すなわち、ドロップアウト層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【0077】
ドロップアウト層の処理によって前層(
図14の例ではConv_2)の出力は、ドロップアウト比率rのデータに0が乗算され、残りのデータには係数kが乗算される。乗算された係数kによるデータの桁数の変化、すなわち最上位ビットの位置の分布がシフトする桁数は、前層から入力されるデータにかかわらず上記式(1)、式(2)で示される値pから予測できる。例えば、ドロップアウト比率r=1/2のときは、係数k=2、値p=1となる。
図16の(A)のヒストグラムは、ドロップアウト層の処理前のデータの最上位ビットの位置の分布を示す。
図16の(B)のヒストグラムは、ドロップアウト層の処理後のデータの最上位ビットの位置の分布を示す。
図16の(A)のヒストグラムに対して、
図16の(B)のヒストグラムは、全部のビンの高さが半分となり、全部のビンが1桁上位にシフトしている。ビンの高さの変化は、各ビンのデータ数の変化であり、ドロップアウト比率r=1/2を乗じたことに相当する。ビンのシフトは、横軸であるデータの最上位ビットの位置の変化であり、係数k=2を残りのデータに乗算したことにより、データ全体の最上位ビットの桁が1桁上位にシフトしたことに相当する。
【0078】
ここで、
図16の(A)のヒストグラムは、ドロップアウト層の前層(
図14の例ではConv_2)の中間データにおける統計情報に相当する。
図16の(B)のヒストグラムは、
図16の(A)のヒストグラムを値pシフトしたものに相当する。ビンの高さの変化による、分布の最大値と最小値が変化するケースは少ない。よって、ドロップアウト層において処理されるデータの有する最上位ビットは、
図16の(B)のヒストグラムと同じ傾向を示す。ドロップアウト層の前層の統計情報を値pだけシフトした第2統計情報に基づいて適切な小数点位置を設定可能となる。このため、ドロップアウト層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【0079】
[固定小数点DNNプロセッサの構成と統計情報の取得]
次に、本実施形態にかかる固定小数点DNNプロセッサ43の構成と統計情報の取得について説明する。
【0080】
図17は、DNNプロセッサ43の構成例を示す図である。DNNプロセッサ43は、命令制御部INST_CONと、レジスタファイルREG_FLと、特別レジスタSPC_REGと、スカラー演算ユニットSC_AR_UNIT、ベクトル演算ユニットVC_AR_UNITと、統計情報集約器ST_AGR_1、ST_AGR_2とを有する。
【0081】
DNNプロセッサ43は、ベクトル演算ユニットVC_AR_UNIT内に固定小数点数を演算する整数演算器INTと、浮動小数点数を演算する浮動小数点演算器FPとを有する。つまり、DNNプロセッサ43は、固定小数点演算を実行するDNNプロセッサ43_1と浮動小数点演算を実行するDNNプロセッサ43_2とを有する。
【0082】
また、DNNプロセッサ43には、メモリアクセスコントローラ44を介して、命令用メモリ45_1とデータ用メモリ45_2とが接続される。メモリアクセスコントローラ44は、命令用メモリアクセスコントローラ44_1と、データ用メモリアクセスコントローラ44_2とを有する。
【0083】
命令制御部INST_CONは、例えば、プログラムカウンタPCと、命令デコーダDECを有する。命令制御部INST_CONは、プログラムカウンタPCのアドレスに基づいて命令を命令用メモリ45_1からフェッチし、命令デコーダDECがフェッチした命令をデコードし、演算ユニットに発行する。
【0084】
レジスタファイルREG_FLは、スカラー演算ユニットSC_AR_UNITが使用する、スカラーレジスタファイルSC_REG_FLとスカラーアキュムレートレジスタSC_ACCとを有する。さらに、レジスタファイルREG_FLは、ベクトル演算ユニットVC_AR_UNITが使用する、ベクトルレジスタファイルVC_REG_FLと、ベクトルアキュムレートレジスタVC_ACCとを有する。
【0085】
スカラーレジスタファイルSC_REG_FLは、例えば、それぞれ32ビットのスカラーレジスタSR0-SR31と、例えば、それぞれ32ビット+αビットのスカラーアキュムレートレジスタSC_ACCとを有する。
【0086】
ベクトルレジスタファイルVC_REG_FLは、例えば、それぞれ32ビットのレジスタを8要素の数を有するREGn0-REGn7を、8セットREG00-REG07~REG70-REG77有する。また、ベクトルアキュムレートレジスタVC_ACCは、例えば、それぞれ32ビット+αビットのレジスタを8要素の数有するA_REG0~A_REG7を有する。
【0087】
スカラー演算ユニットSC_AR_UNITは、1組の整数演算器INTと、データ変換器D_CNVと、統計情報取得器ST_ACとを有する。データ変換器D_CNVは、整数演算器INTが出力する固定小数点数の出力データを浮動小数点数に変換する。スカラー演算ユニットSC_AR_UNITは、スカラーレジスタファイルSC_REG_FL内のスカラーレジスタSR0-SR31とスカラーアキュムレートレジスタSC_ACCとを使用して演算を実行する。例えば、整数演算器INTは、スカラーレジスタSR0-SR31のいずれかに格納されている入力データを演算し、その出力データを別のレジスタに格納する。また、整数演算器INTは、積和演算を実行する場合、積和演算の結果をスカラーアキュムレートレジスタSC_ACCに格納する。スカラー演算ユニットSC_AR_UNITの演算結果は、スカラーレジスタファイルSC_REG_FL、スカラーアキュムレートレジスタSC_ACC、データ用メモリ45_2のいずれかに格納される。
【0088】
ベクトル演算ユニットVC_AR_UNITは、8要素(エレメント)の演算ユニットEL0-EL7を有する。各エレメントEL0-EL7は、整数演算器INTと、浮動小数点演算器FPと、データ変換器D_CNVとを有する。ベクトル演算ユニットは、例えば、ベクトルレジスタファイルVC_REG_FL内のいずれかのセットの8エレメントのレジスタREGn0-REGn7を入力し、8エレメントの演算器で演算を並列に実行し、その演算結果を他のセットの8エレメントのレジスタREGn0-REGn7に格納する。
【0089】
また、データ変換器D_CNVは、演算の結果、データ用メモリ45_2からの読み出し結果等で得られる固定小数点数データをシフトする。データ変換器D_CNVは、命令デコーダDECがフェッチした命令に指定されるシフト量Sだけ固定小数点数データをシフトする。データ変換器D_CNVによるシフトは、固定小数点数のフォーマットに対応した小数点位置を調整することに相当する。また、データ変換器D_CNVは、シフトとともに、固定小数点数データの上位ビットの飽和処理及び下位ビットの丸めを実行する。データ変換器D_CNVは、例えば、入力を40ビットの演算結果とし、下位ビットを小数部として丸めを行なう丸め処理部と、算術シフトを実行するシフタと飽和処理を行なう飽和処理部を有する。
【0090】
そして、データ変換器D_CNVは、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、オーバーフローが発生する場合、符号ビットが正を示すときは正の最大値、符号ビットが負を示すときは負の最大値で値を置き換える。また、データ変換器D_CNVは、右シフト時、上位ビット(符号ビットより下位のビット)に符号ビットを埋め込む。そして、データ変換器D_CNVは、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイルREG_FLのレジスタと同一のビット幅で出力する。データ変換部は固定小数点数データの小数点位置を調整する回路の一例である。
【0091】
また、ベクトル演算ユニットVC_AR_UNITは、8エレメントの演算器でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレートレジスタVC_ACCの8エレメントのレジスタA_REG0~A_REG7に格納する。
【0092】
ベクトルレジスタREGn0-REGn7及びベクトルアキュムレートレジスタA_REG0~A_REG7は、演算対象データのビット数が32ビット、16ビット、8ビットかに応じて、演算エレメント数が8、16、32と増加する。
【0093】
ベクトル演算ユニットVC_AR_UNITは、8エレメントの整数演算器INTの出力データの統計情報をそれぞれ取得する8つの統計情報取得器ST_ACを有する。統計情報は、整数演算器INTの出力データの非符号となる最上位ビットの位置情報である。統計情報は、後述する
図20で説明するビットパターンBPとして取得される。統計情報取得器ST_ACは、整数演算器INTの出力データに加えて、データ用メモリ45_2内のデータや、スカラーレジスタファイルSC_REG_FLやスカラーアキュムレートレジスタSC_ACC内のデータを入力し、その統計情報を取得するようにしてもよい。
【0094】
統計情報レジスタファイルST_REG_FLは、後述する
図23に示すとおり、例えばそれぞれ32ビット×40エレメントの統計情報レジスタSTR0-STR39を、例えば8セットSTR0_0-STR0_39~STR7_0-STR7_39を有する。
【0095】
スカラーレジスタSR0-SR31には、例えば、アドレスやDNNのパラメータ等が格納される。また、ベクトルレジスタREG00-REG07~REG70-REG77には、ベクトル演算ユニットVC_AR_UNITの入力データや出力データが格納される。そして、ベクトルアキュムレートレジスタVC_ACCには、ベクトルレジスタ同士の乗算結果や加算結果が格納される。
【0096】
統計情報レジスタSTR0_0-STR0_39~STR7_0-STR7_39には、最大で8種類のヒストグラムの複数のビンに属するデータの数が格納される。整数演算器INTの出力データが40ビットの場合、40ビットそれぞれに非符号となる最上位ビットを有するデータ数が、例えば、統計情報レジスタSTR0_0-STR0_39に格納される。
【0097】
スカラー演算ユニットSC_AR_UNITは、四則演算、シフト演算、分岐、ロード・ストア等を有する。前述したとおり、スカラー演算ユニットSC_AR_UNITは、整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【0098】
ベクトル演算ユニットVC_AR_UNITは、浮動小数点演算、整数演算、ベクトルアキュムレートレジスタVC_ACCを用いた積和演算等を実行する。また、ベクトル演算ユニットVC_AR_UNITは、ベクトルアキュムレートレジスタVC_ACCのクリア、積和演算(MAC: Multiply and Accumulate)、累積加算、ベクトルレジスタファイルVC_REG_FLへの転送等を実行する。さらに、ベクトル演算ユニットVC_AR_UNITは、ロードとストアも実行する。前述したとおり、ベクトル演算ユニットVC_AR_UNITは、8エレメントそれぞれの整数演算器INTの出力データから非符号となる最上位ビットの位置を有する統計情報を取得する統計情報取得器ST_ACを有する。
【0099】
[統計情報の取得、集約、格納]
次に、DNNプロセッサ43による、演算出力データの統計情報の取得、集約、格納について、説明する。統計情報の取得、集約、格納は、ホストプロセッサ31から送信される命令であり、DNNプロセッサ43が実行する命令をトリガにして実行される。したがって、ホストプロセッサ31は、DNNの各層の演算命令に加えて、統計情報の取得、集約、格納を実行する命令を、DNNプロセッサ43に送信する。または、ホストプロセッサ31は、各層の演算のために、統計情報の取得、集約、格納の処理付の演算命令をDNNプロセッサ43に送信する。
【0100】
図18は、DNNプロセッサ43による統計情報の取得、集約、格納の処理を示すフローチャートの図である。まず、ベクトル演算ユニットVC_AR_UNIT内の8つの統計情報取得器ST_ACが、整数演算器INTが出力する各層の演算による中間データの非符号となる最上位ビット位置を示すビットパターンをそれぞれ出力する(S170)。ビットパターンについては、後述する。
【0101】
次に、統計情報集約器ST_AGR_1が、8つのビットパターンの各ビットの「1」を加算して集約する(S171)。
【0102】
さらに、統計情報集約器ST_AGR_2が、統計情報レジスタファイルST_REG_FL内の統計情報レジスタ内の値に、S171で加算して集約した値を加算し、統計情報レジスタファイルST_REG_FLに格納する(S172)。
【0103】
上記の処理S170、S171、S172は、ベクトル演算ユニットVC_AR_UNIT内の8つのエレメントEL0-EL7による各層の演算の結果である中間データが生成されるたびに、繰り返される。
【0104】
深層学習の処理では、K回のミニバッチ内の複数の中間データについて、上記の統計情報の取得、集約、格納処理が完了すると、統計情報レジスタファイルST_REG_FLには、K回のミニバッチ内の複数の中間データの非符号となる最上位ビットのヒストグラムの各ビンの数である統計情報が生成される。これにより、K回のミニバッチ内の中間データの非符号となる最上位ビットの位置の合計が、ビット別に集計される。この統計情報に基づいて、各中間データの小数点位置が調整される。
【0105】
各層の中間データの小数点位置の調整は、例えば、ホストマシン30のホストプロセッサ31によって行われる。統計情報レジスタSTR0_0-STR0_39に格納される各層の統計情報がホストマシン30のデータ用メモリ45_2に書き込まれ、ホストプロセッサ31は演算を行い
図12にて説明される処理を実行する。ホストプロセッサ31は、新たに決定した小数点位置と現在の小数点位置との差分を求め、シフト量Sとしてデータ用メモリ45_2に書き込む。
【0106】
[統計情報の取得]
図19は、統計情報取得器ST_ACの論理回路例を示す図である。また、
図20は、統計情報取得器が取得する演算出力データのビットパターンBPを示す図である。統計情報取得器ST_ACは、整数演算器INTが出力するNビット(N=40)の中間データ(例えば順伝播処理では畳み込み演算の演算出力データ、逆伝播処理では誤差や重みの更新差分)in[39:0]を入力し、非符号となる最上位ビットの位置を「1」で示しそれ以外を「0」で示すビットパターン出力out[39:0]を出力する。
【0107】
図20に示されるとおり、統計情報取得器ST_ACは、中間データである入力in[39:0]について、非符号(符号ビットと異なる1または0)となる最上位ビットの位置で「1」をとり、それ以外の位置で「0」をとる出力out[39:0]をビットパターンBPとして出力する。但し、入力in[39:0]の全ビットが、符号ビットと同じ場合は、例外的に最上位ビットを「1」にする。
図20に、統計情報取得器ST_ACの真理値表が示される。
【0108】
この真理値表によれば、最初の2行は、入力in[39:0]の全ビットが符号ビット「1」、「0」と一致する例であり、出力out[39:0]の最上位ビットout[39]が「1」(0x8000000000)である。次の2行は、入力in[39:0]の38ビットin[38]が符号ビット「1」、「0」と異なる例であり、出力out[39:0]の38ビットout[38]が「1」、それ以外が「0」である。最も下の2行は、入力in[39:0]の0ビットin[0]が符号ビット「1」、「0」と異なる例であり、出力out[39:0]の0ビットout[0]が「1」、それ以外が「0」である。
【0109】
図19に示す論理回路図は、以下のようにして非符号である最上位ビットの位置を検出する。まず、符号ビットin[39]とin[38]が不一致の場合、EOR38の出力が「1」となり、出力out[38]が「1」になる。EOR38の出力が「1」となると、論理和OR37-OR0と論理積AND37-AND0、 反転ゲートINVにより、他の出力out[39]、out[38:0]は「0」となる。
【0110】
また、符号ビットin[39]がin[38]と一致、in[37]と不一致の場合、EOR38の出力が「0」、EOR37の出力が「1」となり、出力out[37]が「1」になる。EOR37の出力が「1」となると、論理和OR36-OR0と論理積AND36-AND0、 反転ゲートINVにより、他の出力out[39:38]、out[36:0]は「0」となる。以下、同様である。
【0111】
図19、
図20から理解できるとおり、統計情報取得器ST_ACは、演算出力である中間データの符号ビットと異なる「1」または「0」の最上位ビットの位置を含む分布情報をビットパターンBPとして出力する。
【0112】
[統計情報の集約]
図21は、統計情報集約器ST_AGR_1の論理回路例を示す図である。また、
図22は、統計情報集約器ST_AGR_1の動作を説明する図である。統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITで取得される8つの統計情報であるビットパターンBP_0~BP_7を入力し、8つのビットパターンBP_0~BP_7の各ビットの「1」を加算した出力out0~out39を出力する。ビットパターンBP_0~BP_7は、それぞれ40ビットであり、out0~out39は、例えば、それぞれ4ビットである。
【0113】
図21の論理回路に示すとおり、統計情報集約器ST_AGR_1は、ベクトル演算ユニットVC_AR_UNITの統計情報取得器ST_ACそれぞれが取得した各ビットパターンBP_0~BP_7の各ビットの「1」を、加算回路SGM_0-SGM_39で加算し、加算結果を出力out0~out39として生成する。
図22の出力に示されるとおり、出力はout0~out39である。出力の各ビットは、要素数をカウントできるようにlog
2(要素数=8)+1ビットであり、要素数が8の場合は4ビットとなる。
【0114】
統計情報集約器ST_AGR_1は、スカラー演算ユニットSC_AR_UNIT内の統計情報取得器ST_ACが取得した1つのビットパターンBPをそのまま出力することもできる。そのために、加算回路SGM_0-SGM_39の出力か、スカラー演算ユニットSC_AR_UNITのビットパターンBPかのいずれかを選択するセレクタSELを有する。
【0115】
図23は、第2の統計情報集約器ST_AGR_2と統計情報レジスタファイルST_REG_FLの例を示す図である。第2の統計情報集約器ST_AGR_2は、第1の統計情報集約器ST_AGR_1が集約した出力out0~out39の各ビットの値を、統計情報レジスタファイルST_REG_FL内の1つのレジスタセットの値に加算し、格納する。
【0116】
統計情報レジスタファイルST_REG_FLは、例えば、40個の32ビットレジスタSTRn_39~STRn_0 を8セット(n=0~7)有する。したがって、8種類のヒストグラムのそれぞれ40ビンの数を格納できる。今仮に、集約対象の統計情報がn=0の40個の32ビットレジスタSTR0_39~STR0_0に格納されるとする。第2の統計情報集約器ST_ARG_2は、40個の32ビットレジスタSTR0_39~STR0_0に格納される累積加算値それぞれに、第1の統計情報集約器ST_AGR_1が集計した集約値in[39:0]のそれぞれの値を加算する加算器ADD_39~ADD_0を有する。そして、加算器ADD_39~ADD_0の出力が、40個の32ビットレジスタSTR0_39~STR0_0に再格納される。これにより、40個の32ビットレジスタSTR0_39~STR0_0に、対象のヒストグラムの各ビンのサンプル数が格納される。
【0117】
図17、
図19、
図21、
図23に示した演算ユニット内に設けられた統計情報取得器ST_AC、統計情報集約器ST_AGR_1、 ST_AGR_2のハードウエア回路により、DNNの各層で演算される中間データの非符号となる最上位ビットの位置(有効ビットの最上位ビットの位置)の分布(ヒストグラムの各ビンのサンプル数)を取得することができる。
【0118】
非符号となる最上位ビットの位置の分布以外に、非ゼロとなる最下位ビットの位置の分布についても、上記と同様の方法でDNNプロセッサ43のハードウエア回路により取得できる。さらに、非符号となる最上位ビット位置の最大値、非ゼロとなる最下位ビット位置の最小値も同様に取得できる。
【0119】
DNNプロセッサ43のハードウエア回路により統計情報を取得できるので、深層学習での中間データの固定小数点位置の調整を、わずかな工数の増加で実現できる。
【0120】
[第2実施形態にかかる深層学習の固定小数点位置の調整]
第2実施形態にかかる深層学習の統計情報の取得方法について、
図24、
図25を用いて説明する。
【0121】
第2実施形態にかかる深層学習は、DNNの層としてReLU層ReLUを有する。第2実施形態にかかる深層学習では、ReLU層ReLUの固定小数点位置の調整において、ReLU層ReLUの前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第2実施形態にかかる深層学習には、ReLU層ReLUにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【0122】
ReLU(Rectified Linear Unit)層は、前層の出力のうち0より小さい値の出力を0とし、0位上の値の出力をそのままの値で出力を行うことで、DNNの過学習を防ぐことを目的とする層である。ReLU層の処理を実行する処理回路は、DNNプロセッサ43に含まれる。ReLU層ReLUの処理は、前層の出力xに対し0以上か否か判定し、判定結果によって出力xか0かの値のセレクトを行い、ReLU層ReLUの出力yを得る。
【0123】
図24は、
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第2例を説明する図である。
【0124】
図25は、
図13に示すフローチャートのうちS133の詳細な処理の第2例を示すフローチャートの図である。以下、第1実施形態と説明が共通する部分は説明を省略する。
【0125】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、ReLU層であるか否かを判定する(S2331)。調整する層がReLU層である場合(S2331:YES)、調整する層の前層の統計情報を後ろの処理で用いることを決定する(S2333)。
【0126】
ReLU層は、ドロップアウト層と同様に前述の処理回路を用いて、所定の規則に従って演算を行う。ReLU層の所定の規則とは、前層の出力のうち0より小さい値を有するデータの値を0に変更し、前層の出力のうち0以上の値を有するデータの値はそのまま出力することである。処理によるデータの変化、すなわち、ReLU層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【0127】
ReLU層の処理によって前層(
図24の例ではConv_2)の出力は、0より小さい値を有するデータの値は0に変更され、0以上の値を有するデータの値はそのまま出力される。0より小さい値を有するデータが0に切り上げられるようになるため、正のデータにおいては最大値及び最小値は変化しない。前層から入力されるデータにかかわらず、ReLU層の処理後の中間データの分布の範囲は、ReLU層の前層(
図24の例ではConv_2)の中間データにおける統計情報の範囲と一致する。ReLU層の前層の統計情報を第2統計情報とし、第2統計情報に基づいて適切な小数点位置を設定可能となる。このため、ReLU層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【0128】
[第3実施形態にかかる深層学習の固定小数点位置の調整]
第3実施形態にかかる深層学習の統計情報の取得方法について、
図26、
図27を用いて説明する。
【0129】
第3実施形態にかかる深層学習は、DNNの層としてプーリング層Pool_1、Pool_2を有する。第3実施形態にかかる深層学習では、プーリング層Pool_1、Pool_2の固定小数点位置の調整において、プーリング層Pool_1、Pool_2の前層で取得された統計情報に基づいて固定小数点位置の調整を行う。第3実施形態にかかる深層学習には、プーリング層Pool_1、Pool_2における統計情報の取得を省略可能とし、演算量を低減できる効果がある。
【0130】
プーリング層の処理を実行する処理回路は、DNNプロセッサ43に含まれる。プーリング層Pool_1、Pool_2の処理は、前層の複数の出力xのうち局所的な値、例えば、所定の画素の範囲(カーネル)の最大値を選択し、プーリング層Pool_1、Pool_2の出力yを得る。
【0131】
図26は、
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第3例を説明する図である。
【0132】
図27は、
図13に示すフローチャートのうちS133の詳細な処理の第3例を示すフローチャートの図である。以下、第2実施形態と説明が共通する部分は説明を省略する。
【0133】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、プーリング層であるか否かを判定する(S3331)。調整する層がプーリング層である場合(S3331:YES)、調整する層の前層の統計情報を後ろの処理で用いることを決定する(S3333)。
【0134】
プーリング層は、ドロップアウト層と同様に前述の処理回路を用いて、所定の規則に従って演算を行う。プーリング層の所定の規則とは、前層の出力のカーネルごとの最大値を選択し、カーネルに属するデータをそのカーネルの最大値に変更することである。処理によるデータの変化、すなわち、プーリング層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【0135】
プーリング層の処理が最大値を求める場合、プーリング層の処理によって前層(
図26の例ではConv_1、Conv_2)の出力は、カーネルごとの最大値に変更される。すべてのデータがカーネルごとの最大値に切り上げられるようになるため、前層の最大値以上の値は出力されない。プーリング層の処理後の中間データの分布の最大値は、プーリング層の前層(
図26の例ではConv_1、Conv_2)の中間データにおける統計情報の最大値と一致する。前層の出力の最大値を表現可能であれば良いため、プーリング層の前層の統計情報を第2統計情報とし、第2統計情報に基づいて適切な小数点位置を設定可能となる。このため、プーリング層の統計情報を取得することを省略することが可能となる。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【0136】
[第4実施形態にかかる深層学習の固定小数点位置の調整]
第4実施形態にかかる深層学習の統計情報の取得方法について、
図28~
図30を用いて説明する。
【0137】
第4実施形態にかかる深層学習は、DNNの層としてConcat層Concatを有する。第4実施形態にかかる深層学習では、Concat層Concatの固定小数点位置の調整において、Concat層Concatに接続される前層すべてで取得された統計情報に基づいて固定小数点位置の調整を行う。また、Concat層Concatの前層の固定小数点位置の調整において、Concat層Concatに接続される前層すべてで取得された統計情報に基づいて固定小数点位置の調整を行う。第4実施形態にかかる深層学習には、Concat層Concatにおける統計情報の取得を省略可能とし、演算量を低減できる効果がある。また、すべての前層及びConcat層Concatの小数点位置を一致させることができ、演算精度が下がることを防ぐ効果がある。
【0138】
Concat層Concatの処理を実行する処理回路は、DNNプロセッサ43に含まれる。Concat層Concatの処理は、DNNの途中でデータを分割されそれぞれ別の層で計算されたデータを連接(Concatenation)することである。
【0139】
Concat層Concatにて連接される分割されたデータは、それぞれ別の前層にて計算されるため、深層学習の一例にかかる学習処理ではそれぞれの前層の計算結果に基づいて小数点位置が決定される。前層にて決定された2つの小数点位置は一致しない場合が多い。また、Concat層Concatの小数点位置を前層の最大値が表現範囲に含まれるように調整しようとすると、二重の飽和・丸め処理によって損失データが増加する。
【0140】
図28は、深層学習の一例における、二重の飽和・丸め処理を説明する図である。
図28に示される各長方形は、入出力データの桁を示す。また、
図28に示される黒丸は、固定小数点の小数点位置を示す。前層1の出力61、前層2の出力62は、前層1及び前層2にて計算された値がスカラーアキュムレートレジスタSC_ACCに格納されている状態のデータを示す。前層1からの入力63、前層2からの入力64は、前層1の出力61、前層2の出力62にそれぞれ飽和・丸め処理を行い、Concat層Concatに入力されるデータを示す。Concat層の出力65、66は、前層1からの入力63、前層2からの入力64にそれぞれ飽和・丸め処理を行い、Concat層Concatにて出力されるデータを示す。前層1、前層2は、Concat層Concatに接続される前層である。
【0141】
前層1の出力61及び前層2の出力62は、前層1及び前層2にて決定された小数点位置に基づいて飽和・丸め処理が行われ、小数点位置に対応する表現範囲から外れる桁の値は失われる。Concat層の出力65は、Concat層Concatにて決定された小数点位置に基づいて飽和・丸め処理が行われ、小数点位置に対応する表現範囲から外れる桁の値は失われる。
図28の例では、前層1の小数点位置はQ5.2、前層2の小数点位置はQ3.4、Concat層Concatの小数点位置はQ4.3である。
【0142】
前層1、前層2及びConcat層Concatの間で小数点位置が異なることで、前層1の出力61及び前層2の出力62からConcat層の出力65が演算されるまでに、二重の飽和・丸め処理が行われ表現範囲から外れ値が失われる桁の値が存在する。
【0143】
前層1の出力61の斜線の桁は、前層1の小数点位置Q5.2に基づいて丸め処理が行われ、Concat層Concatの小数点位置Q4.3に基づいて最下位ビットに「0」が補完される。前層1の出力61から二重の飽和・丸め処理を行いConcat層の出力65を出力するまでに、斜線の桁の値が失われる。
【0144】
前層2の出力62の斜線の桁は、前層2の小数点位置Q3.4に基づいて飽和処理が行われ、Concat層Concatの小数点位置Q4.3に基づいて最上位ビット、すなわち符号ビットに隣接するビットに正の値が補完される。飽和処理は、例えば、前層2の出力62が正の場合は、表現範囲の最大値に値が飽和される。前層2の出力62から二重の飽和・丸め処理を行いConcat層の出力66を出力するまでに、斜線の桁の値が失われる。
【0145】
図29は、
図13に示す動的固定小数点数による学習の処理のうちS131とS133の詳細の第4例を説明する図である。
【0146】
図30は、
図13に示すフローチャートのうちS133の詳細な処理の第4例を示すフローチャートの図である。以下、第2実施形態と説明が共通する部分は説明を省略する。
【0147】
S10が終了したことを契機に処理が開始され、固定小数点位置を調整する層について、次の層がConcat層であるか否かを判定する(S4330)。調整する層の次の層がConcat層である場合(S4330:YES)、Concat層に接続される前層すべて(
図29の例ではConv_2、Conv_3)で取得された統計情報(
図29の例では統計情報1、統計情報2)をレジスタから取得する(S4333)。次に、S4333にて取得した統計情報すべてを加算する(
図29の例では統計情報1+統計情報2)(S4334)。統計情報の加算は、DNNプロセッサ43に含まれるスカラー演算ユニットSC_AR_UNITによって行われる。次に、S4334にて加算した統計情報を後ろの処理で用いることを決定する(S4335)。調整する層の次の層がConcat層でない場合(S4330:NO)、固定小数点位置を調整する層についてConcat層であるか否かを判定する(S4331)。調整する層がConcat層である場合(S4331:YES)、S4333~S4335を実行する。Concat層において後ろの処理で用いる統計情報として、Concat層の前層で用いることに決定された統計情報と同じものを用いることにしても良い。また、Concat層の固定小数点位置を、前層で調整された固定小数点位置と同じものを用いることにしても良い。
【0148】
Concat層は、所定の規則に従って演算を行う。Concat層の所定の規則とは、前層の出力を連接することである。処理によるデータの変化、すなわち、Concat層の処理前後のデータの最上位ビットの位置の分布の変化は、所定の規則から予測可能である。
【0149】
Concat層Concatの処理によって前層(
図29の例ではConv_2、Conv_3)の出力は、連接され1つのデータ群として扱われる。例えば、前層1のデータ群と前層2のデータ群とが連接されるため、前層1の統計情報1と前層2の統計情報2とを加算した統計情報はConcat層Concatの処理後の中間データにおける分布に対応する。Concat層Concatの前層すべての統計情報を加算した統計情報に基づいて適切な小数点位置を設定可能となる。このため、Concat層Concatの統計情報を取得することを省略することが可能となる。また、すべての前層及びConcat層Concatの間で小数点位置を一致させることができ、前層の出力からConcat層Concatの出力が演算されるまでに、二重の飽和・丸め処理が行われず値が失われることを防止する。適切な小数点位置の設定により演算の精度を保ちつつ、効率的に演算量を低減させることが可能である。
【符号の説明】
【0150】
30:ホストマシン
31:ホストプロセッサ
32:高速入出力インターフェース
33:メインメモリ
34:内部バス
35:補助記憶装置
36:低速入出力インターフェース
40:DNN実行マシン
41:高速入出力インターフェース
42:制御部
43:DNNプロセッサ
43_1:固定小数点演算を実行するDNNプロセッサ
43_2:浮動小数点演算を実行するDNNプロセッサ
44:メモリアクセスコントローラ
44_1:命令用メモリアクセスコントローラ
44_2:データ用メモリアクセスコントローラ
45:内部メモリ
45_1:命令用メモリ
45_2:データ用メモリ
50:利用者端末
61:前層1の出力
62:前層2の出力
63:前層1からの入力
64:前層2からの入力
65、66: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:統計情報集約器