(57)【要約】      （修正有）【課題】ニューラルネットワークのパラメータを量子化する装置及びその方法を提供する。【解決手段】方法は、ニューラルネットワークが学習又は推論する過程において使用される浮動小数点フォーマットのパラメータを獲得し、固定小数点フォーマットの小数部長を適用し、固定小数点から捨てられるビット値のうち最も高い桁のビット値による固定小数点の四捨五入を行うために、整数ＡＬＵを使用して演算を行い、該演算結果に基いて、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化する。【選択図】図５
2019079531.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワーク量子化装置において、ニューラルネットワークのパラメータを量子化する方法において、
前記ニューラルネットワークが学習又は推論する過程で使用される浮動小数点フォーマットのパラメータを獲得する段階と、
固定小数点フォーマットの小数部長を適用し、前記固定小数点から捨てられるビット値のうち最も高い桁のビット値による前記固定小数点の四捨五入を行うために、整数ＡＬＵを使用して演算を行う段階と、
前記演算結果に基いて、前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータに量子化する段階と、を含む方法。
【請求項２】
前記演算を行う段階は、
前記獲得された浮動小数点フォーマットのパラメータから、符号、第１指数値及び第１仮数値を抽出する段階と、
前記第１指数値、バイアス定数及び前記小数部長を利用し、前記小数部長が適用された第２指数値を算出する段階と、
前記第２指数値に基いて、前記第１仮数値に対してビット操作演算及び整数演算を行い、第２仮数値を算出する段階と、を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記小数部長が適用された第２指数値を算出する段階は、
前記第１指数値から、浮動小数点形式によって決定される前記バイアス定数を減じる整数演算を行う段階と、
前記演算結果に、前記小数部長を加える整数演算を行うことにより、前記第２指数値を算出する段階と、を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記第２仮数値を算出する段階は、
前記第１仮数値の前桁にビット値１を追加し、前記第１仮数値をアップデートする段階と、
前記第１仮数値のビット数と前記第２指数値とを比較する段階と、
前記比較結果に基いて、前記アップデートされた第１仮数値を右側にシフトする段階と、を含むことを特徴とする請求項２に記載の方法。
【請求項５】
前記第２仮数値を算出する段階は、
前記比較結果、前記第２指数値が前記第１仮数値のビット数より小さい場合、四捨五入の結果を決定するために、浮動小数点形式によって決定される所定数から、前記第２指数値を減じた値ほど、前記アップデートされた第１仮数値を右側にシフトする段階と、
前記シフトされた第１仮数値から、四捨五入の結果を決定する要素である最小有効ビット（ＬＳＢ）値を抽出する段階と、
前記シフトされた第１仮数値を１つだけ右側にさらにシフトし、前記抽出されたＬＳＢ値を加えて四捨五入を行うことにより、前記第２仮数値を算出する段階と、をさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記量子化する段階は、
前記算出された第２仮数値のビット数と、前記固定小数点フォーマットのビット数とが同一になるように調整する段階と、
前記調整された第２仮数値に前記符号を適用し、前記浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化する段階と、を含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記第２仮数値を算出する段階は、
前記比較結果、前記第２指数値が前記第１仮数値のビット数より大きいか、あるいはそれと同じである場合、前記第２指数値と、前記固定小数点のビット幅から２を減じた値を比較する段階と、
前記第２指数値が固定小数点のビット幅から２を減じた値より大きい場合、前記固定小数点のフォーマットを変更した後、前記演算をさらに進め、
前記第２指数値が固定小数点のビット幅から２を減じた値より小さいか、あるいはそれと同じである場合、前記第２指数値と前記第１仮数値のビット数との差ほど、前記アップデートされた第１仮数値を左側にシフトし、前記左側にシフトされた第１仮数値に前記符号を適用し、前記浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化する段階と、をさらに含むことを特徴とする請求項４に記載の方法。
【請求項８】
前記浮動小数点フォーマットが単精度である場合、前記バイアス定数は、１０進数１２７であり、前記第１仮数値のビットの数は、１０進数２３であり、前記所定数は、１０進数２２であり、
前記浮動小数点フォーマットが倍精度である場合、前記バイアス定数は、１０進数１０２３であり、前記第１仮数値のビット数は、１０進数５２であり、前記所定数は、１０進数５１であることを特徴とする請求項５に記載の方法。
【請求項９】
前記方法は、
前記ニューラルネットワークを構成するレイヤにおいて、前記浮動小数点フォーマットのパラメータを入力として受信するレイヤの処理条件に基いて、前記量子化された固定小数点フォーマットのパラメータを、前記浮動小数点フォーマットに変換する段階と、
前記浮動小数点フォーマットに変換されたパラメータを前記レイヤの入力として提供する段階と、
前記レイヤで処理された前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータにさらに量子化するために前記演算を行う段階と、をさらに含むことを特徴とする請求項１ないし８のうちの何れか一項に記載の方法。
【請求項１０】
ニューラルネットワークのパラメータを量子化するニューラルネットワーク量子化装置において、
少なくとも１つのプログラムが保存されたメモリと、
前記少なくとも１つのプログラムを実行することにより、前記ニューラルネットワークのパラメータを量子化するプロセッサと、を含み、
前記プロセッサは、
前記ニューラルネットワークが学習又は推論する過程で使用される浮動小数点フォーマットのパラメータを獲得し、
固定小数点フォーマットの小数部長を適用し、前記固定小数点から捨てられるビット値のうち最も高い桁のビット値による前記固定小数点の四捨五入を行うために、整数ＡＬＵを使用して演算を行い、
前記演算結果に基いて、前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータに量子化するニューラルネットワーク量子化装置。
【請求項１１】
前記プロセッサは、
前記獲得された浮動小数点フォーマットのパラメータから、符号、第１指数値及び第１仮数値を抽出し、
前記第１指数値、バイアス定数及び前記小数部長を利用し、前記小数部長が適用された第２指数値を算出し、
前記第２指数値に基いて、前記第１仮数値に対してビット操作演算及び整数演算を行い、第２仮数値を算出することを特徴とする請求項１０に記載のニューラルネットワーク量子化装置。
【請求項１２】
前記プロセッサは、
前記第１指数値から、浮動小数点形式によって決定される前記バイアス定数を減じる整数演算を行い、
前記演算結果に前記小数部長を加える整数演算を行うことにより、前記第２指数値を算出することを特徴とする請求項１１に記載のニューラルネットワーク量子化装置。
【請求項１３】
前記プロセッサは、
前記第１仮数値の前桁にビット値１を追加し、前記第１仮数値をアップデートし、
前記第１仮数値のビット数と前記第２指数値とを比較し、
前記比較結果に基いて、前記アップデートされた第１仮数値を右側にシフトすることを特徴とする請求項１１に記載のニューラルネットワーク量子化装置。
【請求項１４】
前記プロセッサは、
前記比較結果、前記第２指数値が前記第１仮数値のビット数より小さい場合、四捨五入の結果を決定するために、浮動小数点形式によって決定される所定数から、前記第２指数値を減じた値ほど、前記アップデートされた第１仮数値を右側にシフトし、
前記シフトされた第１仮数値から、四捨五入の結果を決定する要素である最小有効ビット（ＬＳＢ）値を抽出し、
前記シフトされた第１仮数値を１つだけ右側にさらにシフトし、前記抽出されたＬＳＢ値を加えて四捨五入を行うことにより、前記第２仮数値を算出することを特徴とする請求項１３に記載のニューラルネットワーク量子化装置。
【請求項１５】
前記プロセッサは、
前記算出された第２仮数値のビット数と、前記固定小数点フォーマットのビット数とが同一になるように調整し、
前記調整された第２仮数値に前記符号を適用し、前記浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することを特徴とする請求項１４に記載のニューラルネットワーク量子化装置。
【請求項１６】
前記プロセッサは、
前記比較結果、前記第２指数値が前記第１仮数値のビット数より大きいか、あるいはそれと同じである場合、前記第２指数値と、前記固定小数点のビット幅から２を減じた値とを比較し、
前記第２指数値が固定小数点のビット幅から２を減じた値より大きい場合、前記固定小数点のフォーマットを変更した後、前記演算をさらに行い、
前記第２指数値が固定小数点のビット幅から２を減じた値より小さいか、あるいはそれと同じである場合、前記第２指数値と前記第１仮数値のビット数との差ほど、前記アップデートされた第１仮数値を左側にシフトし、前記左側にシフトされた第１仮数値に前記符号を適用し、前記浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することを特徴とする請求項１３に記載のニューラルネットワーク量子化装置。
【請求項１７】
前記浮動小数点フォーマットが単精度である場合、前記バイアス定数は、１０進数１２７であり、前記第１仮数値のビットの数は、１０進数２３であり、前記所定数は、１０進数２２であり、
前記浮動小数点フォーマットが倍精度である場合、前記バイアス定数は、１０進数１０２３であり、前記第１仮数値のビット数は、１０進数５２であり、前記所定数は、１０進数５１であることを特徴とする請求項１４に記載のニューラルネットワーク量子化装置。
【請求項１８】
前記プロセッサは、
前記ニューラルネットワークを構成するレイヤにおいて、前記浮動小数点フォーマットのパラメータを入力として受信するレイヤの処理条件に基いて、前記量子化された固定小数点フォーマットのパラメータを、前記浮動小数点フォーマットに変換し、
前記浮動小数点フォーマットに変換されたパラメータを前記レイヤの入力として提供し、
前記レイヤで処理された前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータにさらに量子化するために前記演算を行うことを特徴とする請求項１０ないし１７のうちの何れか一項に記載のニューラルネットワーク量子化装置。
【請求項１９】
請求項１ないし９のうちいずれか一項に記載の方法をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークのパラメータを量子化する装置及びその方法に関する。
【背景技術】
【０００２】
ニューラルネットワーク（neural  network）の動作原理は、生物学的な脳をモデリングしたコンピュータ科学的アーキテクチャ（computational  architecture）を基礎としている。ニューラルネットワーク技術の発展により、多種の電子システムにおいて、ニューラルネットワークを活用して入力データを分析し、有効な情報を抽出している。
【０００３】
最近では、深層神経網（ＤＮＮ：deep  neural  network）を低電力で効率的に使用するためのハードウェア加速器に対する研究が活発に進められている。ニューラルネットワークを処理する装置は、複雑な入力データに対する多量の演算を必要とする。
【０００４】
特に、低電力でさほど性能が高くないデバイスにおいて、ニューラルネットワークを利用して、大量の入力データをリアルタイムに分析し、所望する情報を抽出するためには、ニューラルネットワークに係わる演算を効率的に処理することが要求される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１９８８０４号公報
【特許文献２】特開２０１２−２０８８４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、ニューラルネットワークのパラメータを量子化する装置及びその方法を提供するところにある。また、前記方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体を提供するところにある。解決しようとする技術的課題は、前述のような技術的課題に限定されるものではなく、さらに他の技術的課題も存在する。
【課題を解決するための手段】
【０００７】
前述の技術的課題を達成するための技術的手段として、本開示の第１側面は、ニューラルネットワークが学習又は推論する過程で使用される浮動小数点（floating  point）フォーマットのパラメータを獲得する段階；固定小数点（fixed  point）フォーマットの小数部（fraction）長を適用し、前記固定小数点から捨てられるビット値のうち最も高い桁のビット値による前記固定小数点の四捨五入を行うために、整数算術演算論理ユニット（integer  arithmetic  logic  unit：ＡＬＵ）を使用して演算を行う段階；及び前記演算結果に基いて、前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータに量子化する段階；を含むニューラルネットワーク量子化装置において、ニューラルネットワークのパラメータを量子化する方法を提供することができる。
【０００８】
また、本開示の第２側面は、少なくとも１つのプログラムが保存されたメモリ；及び前記少なくとも１つのプログラムを実行することにより、前記ニューラルネットワークのパラメータを量子化するプロセッサと、を含み、前記プロセッサは、前記ニューラルネットワークが学習又は推論する過程で使用される浮動小数点フォーマットのパラメータを獲得し、固定小数点フォーマットの小数部長を適用し、前記固定小数点から捨てられるビット値のうち最も高い桁のビット値による前記固定小数点の四捨五入を行うために、整数ＡＬＵを使用して演算を行い、前記演算結果に基いて、前記浮動小数点フォーマットのパラメータを、前記固定小数点フォーマットのパラメータに量子化する、ニューラルネットワークのパラメータを量子化するニューラルネットワーク量子化装置を提供することができる。
【０００９】
また、本開示の第３側面は、第１側面の方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態によるニューラルネットワークにおいて、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化する例示について説明する図面である。
【図２】一実施形態によるニューラルネットワークにおいて行われる演算について説明するための図面である。
【図３】一実施形態によるニューラルネットワーク推論器のハードウェア構成を図示したブロック図である。
【図４】一実施形態による浮動小数点及び固定小数点について説明するための図面である。
【図５】一実施形態によるニューラルネットワーク量子化装置において、ニューラルネットワークのパラメータを量子化する方法のフローチャートである。
【図６】一実施形態によって、浮動小数点を固定小数点に量子化する過程において、ビット操作及び整数演算が行われる例示について説明するための図面である。
【図７】一実施形態によって、浮動小数点を固定小数点に量子化する過程において、四捨五入及びビット数調整が行われる例示について説明するための図面である。
【図８】一実施形態による浮動小数点実数を、固定小数点整数に量子化する過程について説明するための図面である。
【図９】一実施形態による浮動小数点実数を、固定小数点整数に量子化する過程について説明するための図面である。
【図１０】一実施形態による浮動小数点実数を、固定小数点整数に量子化する過程について説明するための図面である。
【発明を実施するための形態】
【００１１】
本明細書で多様なところに出てくる「一部実施形態において」または「一実施形態において」というような語句は、必ずしもいずれも同一実施形態を示すものではない。
【００１２】
本開示の一部実施形態は、機能的なブロック構成、及び多様な処理段階によっても示される。そのような機能ブロックの一部または全部は、特定機能を遂行する多様な個数のハードウェア構成及び／またはソフトウェア構成によっても具現される。例えば、本開示の機能ブロックは、１以上のマイクロプロセッサによって具現されたり、所定機能のための回路構成によって具現されたりもする。また、例えば、本開示の機能ブロックは、多様なプログラミング言語またはスクリプティング言語によっても具現される。該機能ブロックは、１以上のプロセッサで実行されるアルゴリズムによっても具現される。また、本開示は、電子的な環境設定、信号処理及び／またはデータ処理などのために、従来技術を採用することができる。「メカニズム」、「要素」、「手段」及び「構成」のような用語は、広義に使用され、機械的であって物理的な構成としてだけに限定されるものではない。
【００１３】
また、図面に図示された構成要素間の連結線または連結部材は、機能的な連結、及び／または物理的または回路的な連結を例示的に示したものに過ぎない。実際の装置においては、代替可能であったり追加されたりする多様な機能的な連結、物理的な連結または回路連結により、構成要素間の連結が示される。
【００１４】
以下、添付された図面を参照し、本開示について詳細に説明する。
【００１５】
図１は、一実施形態によるニューラルネットワークにおいて、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化する例示について説明する図面である。
【００１６】
図１を参照すれば、ニューラルネットワーク学習器１０は、ニューラルネットワークを生成したり、ニューラルネットワークを訓練（train）（または、学習（learn））させたり、浮動小数点フォーマットのニューラルネットワークを、固定小数点フォーマットのニューラルネットワークに量子化したり、ニューラルネットワークを再訓練（retrain）したりする機能のような多様なプロセッシング機能を有するコンピューティングデバイスに該当する。例えば、ニューラルネットワーク学習器１０は、ＰＣ（personal  computer）、サーバデバイス、モバイルデバイスなどの多種のデバイスでもっても具現される。
【００１７】
ニューラルネットワーク学習器１０は、与えられた初期ニューラルネットワークを反復的に訓練（学習）させることにより、訓練されたニューラルネットワーク１１を生成することができる。このとき、初期ニューラルネットワークは、ニューラルネットワークの処理正確度確保次元において、浮動小数点フォーマットのパラメータ、例えば、３２ビット浮動小数点精度（３２bit  floating  point  precision）のパラメータを有することができる。ここで、該パラメータは、例えば、ニューラルネットワークの入出力アクティベーション、ウェート、バイアスのようなニューラルネットワークに入出力される多種のデータを含んでもよい。該ニューラルネットワークの反復的な訓練が進められることにより、該ニューラルネットワークの浮動小数点パラメータは、与えられた入力に対し、さらに正確な出力を演算するために調整される（tuned）。
【００１８】
ニューラルネットワーク学習器１０は、訓練されたニューラルネットワーク１１を、ニューラルネットワーク推論器２０のようなハードウェア加速器に伝達することができる。ニューラルネットワーク推論器２０は、モバイルデバイス、埋め込み（embedded）デバイスなどにも含まれる。ニューラルネットワーク推論器２０は、ニューラルネットワーク２１駆動のための専用ハードウェアであり、比較的、低電力または低性能でもっても具現されるために、浮動小数点演算よりは、固定小数点演算にさらに適して具現される。一方、ニューラルネットワーク推論器２０は、ニューラルネットワーク駆動のための専用モジュールであるＴＰＵ（tensor  processing  unit）、Neural  Engineなどに該当するが、それらに制限されるものではない。
【００１９】
量子化されたニューラルネットワーク２１を駆動するニューラルネットワーク推論器２０は、ニューラルネットワーク学習器１０とは別途の独立したデバイスとしても具現される。しかし、それに制限されるものではなく、ニューラルネットワーク推論器２０は、ニューラルネットワーク学習器１０と同一デバイス内にも具現される。
【００２０】
一方、浮動小数点は、固定小数点に比べ、相対的に多くの演算量と、多くのメモリアクセス頻度とが要求される。特に、ニューラルネットワークの処理に必要となる演算量のほとんどは、多様なパラメータの演算を行うＭＡＣ（multiplication  and  accumulation）演算と知られている。従って、比較的処理性能が低いスマートフォン、タブレット、ウェアラブルデバイスなどに含まれたニューラルネットワーク推論器２０においては、浮動小数点フォーマットのパラメータを有するニューラルネットワークの処理が円滑ではなくなる。結局、そのようなデバイスにおいて、演算量を十分に減少させながら、許容可能な正確度損失内において、ニューラルネットワークを駆動させるためには、ニューラルネットワークで処理される浮動小数点フォーマットのパラメータは、量子化されることが望ましい。ここで、該パラメータ量子化は、高精度を有する浮動小数点フォーマットのパラメータを、低精度を有する固定小数点フォーマットのパラメータに変換することを意味する。
【００２１】
ニューラルネットワーク量子化装置は、訓練されたニューラルネットワーク１１のパラメータを、所定ビットの固定小数点フォーマットに変換する量子化を行う。該ニューラルネットワーク量子化装置は、ニューラルネットワーク学習器１０、ニューラルネットワーク推論器２０に含まれて動作するか、あるいは独立した第３のハードウェア加速器として動作することができる。該ニューラルネットワーク量子化装置は、ニューラルネットワークが採用される（deployed）ニューラルネットワーク推論器２０のデバイスの処理性能を考慮し、訓練されたニューラルネットワーク１１のパラメータを、所定ビットの固定小数点フォーマットに変換する量子化を行い、量子化されたニューラルネットワーク２１を採用するニューラルネットワーク推論器２０に伝達することができる。
【００２２】
量子化されたニューラルネットワーク２１が採用されるニューラルネットワーク推論器２０は、具体的な例示において、ニューラルネットワークを利用した音声認識、映像認識などを行う自律走行自動車、ロボティックス、スマートフォン、タブレットデバイス、ＡＲ（augmented  reality）デバイス、ＩｏＴ（internet  of  things）デバイスなどに含まれもする、それらに制限されるものではない。
【００２３】
図２は、一実施形態によるニューラルネットワークで行われる演算について説明するための図面である。
【００２４】
図２を参照すれば、ニューラルネットワーク２は、入力レイヤ、隠れレイヤ及び出力レイヤを含む構造を有し、受信される入力データ（例えば、I1及び  I2）を基に演算を行い、遂行結果を基に、出力データ（例えば、O1及びO2）を生成することができる。
【００２５】
ニューラルネットワーク２は、前述のように、２個以上の隠れレイヤを含むＤＮＮ（deep  neural  network）、またはｎ階層ニューラルネットワークでもある。例えば、図２に図示されているように、ニューラルネットワーク２は、入力レイヤLayer  １、２個の隠れレイヤLayer  ２及びLayer  ３、並びに出力レイヤLayer  ４を含むＤＮＮでもある。ニューラルネットワーク２がＤＮＮアーキテクチャによって具現された場合、有効な情報を処理することができるさらに多くのレイヤを含むので、ニューラルネットワーク２は、シングルレイヤを有するニューラルネットワークより複雑なデータ集合を処理することができる。一方、ニューラルネットワーク２は、４個のレイヤを含むように図示されているが、それは、例示に過ぎず、ニューラルネットワーク２は、さらに少なかったり多かったりするレイヤを含むか、あるいはさらに少なかったり多かったりするチャネルを含んでもよい。すなわち、ニューラルネットワーク２は、図２に図示されているところとは異なる多様構造のレイヤを含んでもよい。
【００２６】
ニューラルネットワーク２に含まれたレイヤそれぞれは、複数のチャネルを含んでもよい。該チャネルは、ニューロン（neuron）、プロセッシングエレメント（ＰＥ：processing  element）、ユニット（unit）、またはそれと類似した用語として知られた複数の人工ノード（artificial  node）に該当する。例えば、図２に図示されているように、Layer  １は、２個のチャネル（ノード）、Layer  ２及びLayer  ３それぞれは、３個のチャネルを含んでもよい。ただし、それらは、例示に過ぎず、ニューラルネットワーク２に含まれたレイヤそれぞれは、多様な個数のチャネル（ノード）を含んでもよい。
【００２７】
ニューラルネットワーク２のレイヤそれぞれに含まれたチャネルは、互いに連結されてデータを処理することができる。例えば、１つのチャネルは、他のチャネルからデータを受信して演算することができ、演算結果をさらに他のチャネルに出力することができる。
【００２８】
チャネルそれぞれの入力及び出力は、入力アクティベーション及び出力アクティベーションとも称される。すなわち、該アクティベーションは、１チャネルの出力であると同時に、次のレイヤに含まれたチャネルの入力に該当するパラメータでもある。一方、チャネルそれぞれは、以前レイヤに含まれたチャネルから受信されたアクティベーション、ウェート及びバイアスに基き、自体のアクティベーションを決定することができる。該ウェートは、各チャネルでの出力アクティベーションを計算するために利用されるパラメータであり、チャネル間の連結関係に割り当てられる値でもある。
【００２９】
チャネルそれぞれは、入力を受信して出力アクティベーションを出力する演算ユニット（computational  unit）またはプロセッシングエレメント（processing  element）によっても処理され、チャネルそれぞれの入力・出力は、マッピングされもする。例えば、σは、アクティベーション関数（activation  function）であり、wijkは、（ｉ−１）番目レイヤに含まれたｋ番目チャネルから、ｉ番目レイヤに含まれたｊ番目チャネルへのウェートであり、bijは、ｉ番目レイヤに含まれたｊ番目チャネルのバイアス（bias）であり、aijは、ｉ番目レイヤのｊ番目チャネルのアクティベーションであるとするとき、アクティベーションaij  は、以下の数式（１）を利用しても計算される。
【００３０】
【数１】
2019079531.tif 000003
図２に図示されているように、２番目レイヤLayer  ２の最初チャネルＣＨ１のアクティベーションはa21とも表現される。また、a21は、数式（１）により、a21=σ(w21,1×a11+  w21,2×a12  +b21)の値を有することができる。ただし、前述の数式（１）は、ニューラルネットワーク２において、データを処理するために利用されるアクティベーション、ウェート及びバイアスについて説明するための例示であるのみ、それに制限されるものではない。該アクティベーションは、以前レイヤから受信されたアクティベーションの重み付け加算（weighted  sum）を、sigmoid関数やＲｅＬＵ（rectified  linear  unit）関数などのアクティベーション関数による処理を施すことによって獲得された値でもある。
【００３１】
一般的に、レイヤの入力として、浮動小数点フォーマット及び固定小数点フォーマットのパラメータが利用される。また、ウェート値及びバイアス値として、浮動小数点フォーマット及び固定小数点フォーマットのパラメータが利用される。一方、ニューラルネットワークを構成するレイヤにおいて、一部レイヤは、入力として高精度値が必要であるので、浮動小数点フォーマットのパラメータを入力として受ける。
【００３２】
前述のように、ニューラルネットワーク２においては、数多くのデータ集合が相互連結された複数のチャネル間で交換され、レイヤを経ながら、数多くの演算過程を経る。従って、複雑な入力データ処理に必要な演算量を減少させながらも、正確度損失を最小化させることができる技術が要求される。
【００３３】
図３は、一実施形態によるニューラルネットワーク推論器のハードウェア構成を図示したブロック図である。図３を参照すれば、ニューラルネットワーク推論器２０は、別途のニューラルネットワーク学習器１０で量子化されたニューラルネットワーク２１を伝達される代わりに、浮動小数点フォーマットのパラメータを入力され、それを固定小数点フォーマットに量子化することができる。
【００３４】
ニューラルネットワーク推論器２０は、量子化された固定小数点フォーマットのパラメータを利用し、ニューラルネットワーク学習器で生成されたニューラルネットワークを利用した推論を行うことができる。ニューラルネットワーク推論器２０は、特定レイヤの処理条件に基いて、量子化された固定小数点フォーマットのパラメータを、浮動小数点フォーマットのパラメータに変換することができる。
【００３５】
プロセッサ２１０は、ニューラルネットワーク推論器２０を制御するための全般的な機能を遂行する役割を行う。例えば、プロセッサ２１０は、ニューラルネットワーク推論器２０内のメモリ２２０に保存されたプログラムを実行することにより、ニューラルネットワーク推論器２０を全般的に制御する。プロセッサ２１０は、ニューラルネットワーク推論器２０内に具備されたＣＰＵ（central  processing  unit）、ＧＰＵ（graphics  processing  unit）、ＡＰ（application  processor）などによっても具現されるが、それらに制限されるものではない。
【００３６】
メモリ２２０は、ニューラルネットワーク推論器２０内で処理される各種データを保存するハードウェアであり、例えば、メモリ２２０は、ニューラルネットワーク推論器２０で処理されたデータ及び処理されるデータを保存することができる。また、メモリ２２０は、ニューラルネットワーク推論器２０によって駆動されるアプリケーション、ドライバなどを保存することができる。メモリ２２０は、ＤＲＡＭ（dynamic  random  access  memory）でもあるが、それに限定されるのではない。メモリ２２０は、揮発性メモリ（volatile  memory）または不揮発性メモリ（non-volatile  memory）のうち少なくとも一つを含んでもよい。該不揮発性メモリは、ＲＯＭ（read-only  memory）、ＰＲＯＭ（programmable  read-only  memory）、ＥＰＲＯＭ（electrically  programmable  read  only  memory）、ＥＥＰＲＯＭ（electrically  erasable  programmable  read-only  memory）、フラッシュメモリ、ＰＲＡＭ（phase-change  random  access  memory）、ＭＲＡＭ（magnetic  random  access  memory）、ＲＲＡＭ（登録商標（resistive  random  access  memory））、ＦＲＡＭ（登録商標（ferroelectric  random  access  memory））などを含む。該揮発性メモリは、ＤＲＡＭ、ＳＲＡＭ（static  random  access  memory）、ＳＤＲＡＭ（synchronous  dynamic  random  access  memory）、ＰＲＡＭ（phase-change  random  access  memory）、ＭＲＡＭ（magnetic  random  access  memory）、ＲＲＡＭ（resistive  random  access  memory）、ＦｅＲＡＭ（ferroelectric  random  access  memory）などを含む。一実施形態において、メモリ２２０は、ＨＤＤ（hard  disk  drive）、ＳＳＤ（solid  state  drive）、ＣＦ（compact  flash）、ＳＤ（secure  digital）、micro−ＳＤ（micro  secure  digital）、mini−ＳＤ（mini  secure  digital）、ｘＤ（extreme  digital）またはmemory  stickのうち少なくとも一つを含んでもよい。
【００３７】
ニューラルネットワーク推論器２０は、比較的処理性能が低いスマートフォン、タブレット、ウェアラブルデバイスのようなモバイルデバイス、埋め込みデバイスなどにも含まれる。浮動小数点は、固定小数点に比べ、相対的に多くの演算量と、多くのメモリアクセス頻度とが要求されるので、モバイルデバイス、埋め込みデバイスなどに含まれたニューラルネットワーク推論器２０においては、浮動小数点フォーマットのパラメータを有するニューラルネットワークの処理が円滑ではなくなる。そのために、ニューラルネットワーク推論器２０のプロセッサ２１０は、ニューラルネットワークで処理される浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化することができる。
【００３８】
プロセッサ２１０は、別途のハードウェア構成またはライブラリを利用せず、整数ＡＬＵを利用し、ビット操作演算及び整数演算を行うことにより、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化することができる。一実施形態において、プロセッサ２１０は、３２ビットの浮動小数点を、１６ビット以下の固定小数点に量子化することができる。プロセッサ２１０は、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化するニューラルネットワーク量子化装置にも含まれる。ニューラルネットワーク量子化装置は、ニューラルネットワーク学習器１０、ニューラルネットワーク推論器２０に含まれて動作するか、あるいは独立した第３のハードウェア加速器として動作することができる。
【００３９】
プロセッサ２１０は、ニューラルネットワークが学習又は推論する過程において使用される浮動小数点フォーマットのパラメータを獲得し、獲得された浮動小数点フォーマットのパラメータから、符号、第１指数値及び第１仮数値を抽出することができる。
【００４０】
プロセッサ２１０は、第１指数値、及び固定小数点フォーマットの小数部長（fractional  length）を利用して第２指数値を算出し、算出された第２指数値に基いて、第１仮数値のビット操作を行い、第２仮数値を算出することができる。また、プロセッサ２１０は、算出された第２仮数値の最小有効ビット（ＬＳＢ：least  significant  bit）値、及び抽出された符号を利用し、浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することができる。
【００４１】
プロセッサ２１０において、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化するプロセスに係わる詳細な説明は、図４で後述する。
【００４２】
一方、ニューラルネットワークに含まれたレイヤの処理条件は、多様であり、一実施形態において、ニューラルネットワークを構成するレイヤにおいて、一部レイヤは、入力として高精度の浮動小数点フォーマットのパラメータを受信することができる。そのとき、プロセッサ２１０は、量子化された固定小数点フォーマットのパラメータをさらに浮動小数点フォーマットに変換した後、浮動小数点フォーマットに変換されたパラメータを一部レイヤの入力として提供することができる。その後、プロセッサ２１０は、次のレイヤにパラメータを伝達するために、一部レイヤで処理された浮動小数点フォーマットのパラメータを、前述の方法により、固定小数点フォーマットにさらに量子化することができる。
【００４３】
メモリ２２０は、例えば、訓練されていない初期ニューラルネットワークデータ、訓練過程で生成されたニューラルネットワークデータ、全ての訓練が完了したニューラルネットワークデータ、量子化されたニューラルネットワークデータなど、プロセッサ２１０によって処理されるか、あるいは処理されたニューラルネットワーク関連データセットを保存することができ、またプロセッサ２１０によって実行されるニューラルネットワークの訓練アルゴリズム、量子化アルゴリズムなどに係わる多様なプログラムを保存することができる。また、メモリ２２０は、プロセッサ２１０において、ＡＬＵを利用し、ビット操作及び整数演算を行う過程で算出された中間値を保存することができる。
【００４４】
図４は、一実施形態による浮動小数点及び固定小数点について説明するための図面である。図４の浮動小数点例示４１０を参照すれば、浮動小数点値は、a×2bの形式で表現され、ここで、ａは、仮数部（mantissa）に該当し、ｂは、指数部（exponent）に該当する。一実施形態において、浮動小数点フォーマットが単精度（single-precision）である場合、浮動小数点値は、１ビットの符号ビット、８ビットの指数部ビット、及び２３ビットの仮数部ビットを含む３２ビットで表現される。
【００４５】
一方、浮動小数点フォーマットは、単精度以外にも、６４ビット倍精度（double-precision）、４３ビット以上の拡張単精度、７９ビット以上の拡張倍精度（一般的に、８０ビットでもって具現される）を含む。
【００４６】
次に、固定小数点例示４２０を参照すれば、固定小数点は、「Ｑｍ．ｎ」によっても表現される（ｍは、１以上の整数、ｎは、０以上の整数）。ここで、「ｍ」は、ビット幅（bit  width）を示し、「ｎ」は、小数点以下の数字を表現するために使用されるビットの個数（または、小数部長）である。固定小数点のビット幅「ｍ」は、符号１ビット、整数部「ｍ−１−ｎ」ビット、及び仮数部ｎビットを合わせた値である。固定小数点ビットにおいて、小数部を示すビットはｎビットであるので、小数部長は、ｎである。
【００４７】
例えば、「Ｑ８．４」は、符号１ビット、整数部３ビット及び小数部４ビットを有する総８ビットの固定小数点値であり、「Ｑ３２．３０」は、符号１ビット、整数部１ビット及び小数部３０ビットを有する総３２ビットの固定小数点値であり、「Ｑ３２．１６」は、符号１ビット、整数部１５ビット及び小数部１６ビットを有する総３２ビットの固定小数点値である。
【００４８】
浮動小数点フォーマットを利用する場合、非常に小さい値や非常に大きい値を表現することができるが、演算を行うためには、ＦＰＵ（fixed  point  unit）やＦＰＵエミュレーションライブラリが必要である。固定小数点フォーマットを利用する場合、浮動小数点フォーマットに比べ、表現することができる値の範囲が制限的であるが、整数ＡＬＵのみを利用して演算を行うことができる。
【００４９】
一方、量子化とは、高精度の浮動小数点実数型値を、低精度の固定小数点整数型値に変換することを意味する。
【００５０】
図５は、一実施形態によるニューラルネットワーク量子化装置において、ニューラルネットワークのパラメータを量子化する方法のフローチャートである。
【００５１】
ニューラルネットワーク量子化装置は、ニューラルネットワーク学習器１０、ニューラルネットワーク推論器２０に含まれて動作するか、あるいは独立した第３のハードウェア加速器として動作することができる。
【００５２】
図５を参照すれば、段階５１０において、ニューラルネットワーク量子化装置は、ニューラルネットワークが学習したり推論したりする過程で使用される浮動小数点フォーマットのパラメータを獲得することができる。
【００５３】
該ニューラルネットワーク量子化装置は、ＰＣ、サーバのような外部デバイスから浮動小数点フォーマットのパラメータを獲得することができる。一実施形態において、該パラメータは、例えば、ニューラルネットワークの入出力アクティベーション、ウェート、バイアスなどニューラルネットワークに入出力される多種のデータを含んでもよい。
【００５４】
また、一実施形態において、ニューラルネットワーク量子化装置は、ＩＥＥＥ（Institute  of  Electrical  and  Electronics  Engineers）  Standard  ７５４による多様なフォーマットの浮動小数点値を獲得することができるが、例えば、該ニューラルネットワーク量子化装置は、単精度以外にも、６４ビット倍精度、４３ビット以上の拡張単精度、７９ビット以上の拡張倍精度（一般的に、８０ビットでもって具現される）による浮動小数点値を獲得することができる。
【００５５】
段階５２０において、固定小数点フォーマットの小数部長を適用し、固定小数点から捨てられるビット値のうち最も高い桁のビット値による前記固定小数点の四捨五入（round  off）いかんを決定するために、整数ＡＬＵを使用して演算を行うことができる。
【００５６】
該ニューラルネットワーク量子化装置は、別途のハードウェア構成またはライブラリを利用せずに、整数ＡＬＵのみを利用し、ビット操作演算及び整数演算を行うことができる。
【００５７】
一実施形態において、ニューラルネットワーク量子化装置は、浮動小数点フォーマットの指数部に小数部長を加える整数加算演算を行うことにより、浮動小数点値に「２（小数部長）乗」値を乗じたところと同一結果値を算出することができる。また、該ニューラルネットワーク量子化装置は、整数加算演算及び算術シフト演算を行うことにより、固定小数点から捨てられるビット値のうち最も高い桁のビット値による固定小数点の四捨五入を行うことができる。該固定小数点から捨てられるビット値のうち最も高い桁のビット値による固定小数点の四捨五入の結果を反映させることにより、低精度に変換しながらも、さらに正確度に高めることができる。
【００５８】
段階５３０において、該ニューラルネットワーク量子化装置は、演算結果に基いて、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化することができる。
【００５９】
該ニューラルネットワーク量子化装置は、段階５２０による演算結果値のビット数を、固定小数点フォーマットと同一になるように調整することができる。また、該ニューラルネットワーク量子化装置は、最終的に、浮動小数点の符号ビットを適用することにより、固定小数点に量子化することができる。
【００６０】
該ニューラルネットワーク量子化装置は、別途のニューラルネットワーク学習器１０で量子化されたニューラルネットワーク２１を伝達される代わりに、浮動小数点フォーマットのパラメータを入力され、それを、固定小数点フォーマットに量子化してニューラルネットワークを生成するか、あるいはニューラルネットワークを訓練（または、学習）させることができる。
【００６１】
図６は、一実施形態による浮動小数点を、固定小数点に量子化する過程において、ビット操作及び整数演算が行われる例示について説明するための図面である。
【００６２】
図６を参照すれば、３２ビットフォーマットの浮動小数点を、「Ｑ１６．４」フォーマットの固定小数点に量子化する過程が説明される。３２ビットフォーマットの浮動小数点の符号は、１ビット、第１指数値は、８ビット、そして第１仮数値は、２３ビットの桁数を有する。例えば、実数値「５１．７３７６７３２００５６２０８５」に対応する３２ビットフォーマットの浮動小数点値は、符号「０」、第１指数値「１００００１００」（８桁）、及び第１仮数値「１００１１１０１１１１００１１０１１００００１」（２３桁）にも区分される。一方、「Ｑ１６．４」フォーマットの固定小数点の符号は、１ビット、整数部は、１１ビット、小数部は、４ビットの桁を有する。
【００６３】
図６において、浮動小数点の符号は、ビットインデックスｓに対応し、第１指数値のビット８桁は、ビットインデックスｅ１ないしｅ８に対応し、第１仮数値のビット２３桁は、ビットイデックスｍ１ないしｍ２３に対応する。また、固定小数点の符号は、ビットインデックスｓに対応し、整数部のビット１１桁は、ビットインデックスｉ１ないしｉ１１に対応し、小数部のビット４桁は、ビットインデックスｆ１ないしｆ４に対応する。
【００６４】
ＩＥＥＥ標準により、浮動小数点フォーマットにおいては、実際指数値にバイアス定数を加えて第１指数値が決められる。従って、第１指数値を実際指数値に戻すために、ニューラルネットワーク量子化装置は、第１指数値からバイアス定数を減じることができる。また、該ニューラルネットワーク量子化装置は、量子化された固定小数点の小数部長を反映させるために、第１指数値からバイアス定数を減じた結果値に、小数部長を算術的に加えることができる。
【００６５】
一実施形態において、演算１  ６１０を参照すれば、ニューラルネットワーク量子化装置は、第１指数値「１３２」からバイアス定数「１２７」を減じた結果値「５」に、小数部長「４」を加えることにより、第２指数値として「９」を算出することができる。第２指数値が「９」であるというのは、固定小数点のＬＳＢ（least  significant  bit）を含んだ下位９ビット（ｉ７ないしｉ１１、及びｆ１ないしｆ４）に、第１仮数値の最上位ビット（ＭＳＢ：most  significant  bits）を含んだ上位９ビット（ｍ１ないしｍ９）の値が入ることを意味する。一方、四捨五入いかんにより、該ニューラルネットワーク量子化装置は、上位９ビット（ｍ１ないしｍ９）の値に、追加して１ビット値を加えた結果を、固定小数点の下位９ビット（ｉ７ないしｉ１１、及びｆ１ないしｆ４）に入れることができる。
【００６６】
ＩＥＥＥ標準により、浮動小数点フォーマットの第１仮数値は、小数点の前桁値である１を省略して表示される。該ニューラルネットワーク量子化装置は、第１仮数値の前桁にビット値１を追加することにより、省略された１を再び表示することができる。
【００６７】
演算２  ６２０を参照すれば、第１仮数値「１００１１１……０００１」（２３桁）は、実際の「１．１００１１１……０００１」値である。該ニューラルネットワーク量子化装置は、第１仮数値の前桁にビット値１を追加することにより、第１仮数値を「１１００１１１０１１１１００１１０１１００００１」（２４桁）にアップデートすることができる。演算１  ６１０を行った結果、固定小数点の下位９ビット（ｉ７ないしｉ１１、及びｆ１ないしｆ４）に値が入るので、アップデートされた第１仮数値の左側最初ビット値、すなわち、ＭＳＢは、固定小数点のＬＳＢから１０番目のビット（ｉ６）に入る。
【００６８】
演算１  ６１０及び演算２  ６２０により、固定小数点のＬＳＢから何番目のビット（すなわち、下位から何番目のビット）まで浮動小数点の第１仮数値で埋められるかということが分かる。
【００６９】
他の実施形態において、第２指数値が、第１仮数値のビット数より大きいか、あるいはそれと同じである場合、該ニューラルネットワーク量子化装置は、第２指数値を、固定小数点のビット幅から２を減じた値と比較することができる。
【００７０】
該比較結果、第２指数値が、固定小数点のビット幅から２を減じた値より大きい場合、該ニューラルネットワーク量子化装置は、既設定の固定小数点のフォーマットを変更することができる。該ニューラルネットワーク量子化装置は、固定小数点のフォーマットを変更した後、演算をさらに行うことができる。
【００７１】
また、該比較結果、第２指数値が、固定小数点のビット幅から２を減じた値より小さいか、あるいはそれと同じである場合、該ニューラルネットワーク量子化装置は、第２指数値と第１仮数値のビット数との差ほど、アップデートされた第１仮数値を左側にシフトすることができる。例えば、第２指数値が２５であり、固定小数点のビット幅が２６である場合、第２指数値（２５）から第１仮数値のビット数（２３）を減じた２ほど、アップデートされた第１仮数値を左側にシフトすることができる。該ニューラルネットワーク量子化装置は、左側にシフトされた第１仮数値に符号を適用し、浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することができる。
【００７２】
図７は、一実施形態による浮動小数点を、固定小数点に量子化する過程において、四捨五入及びビット数調整が行われる例示について説明するための図面である。
【００７３】
量子化された固定小数点から捨てられるビット値のうち最も高い桁のビット値による固定小数点の四捨五入いかんを反映させれば、量子化された固定小数点値の正確度を高めることができる。該ニューラルネットワーク量子化装置は、図６の演算１  ６１０結果に基いて、四捨五入いかんを決定することができるが、図６の演算１  ６１０を参照すれば、演算１  ６１０を行った結果、第２指数値が「９」になったので、第１仮数値のＭＳＢから１０番目ビット（ｍ１０）の値が、固定小数点から捨てられるビット値のうち最も高い桁のビット値であるということが分かる。該ニューラルネットワーク量子化装置は、第１仮数値の上位９ビット（ｍ１ないしｍ９）の値に、ｍ１０の値を加えた結果値を、固定小数点の下位９ビット（ｉ７ないしｉ１１、及びｆ１ないしｆ４）に入れることができる。
【００７４】
他の実施形態において、第１仮数値の上位９ビット（ｍ１ないしｍ９）の値に、ｍ１０の値を加えた結果値のビット数が１０ビットにもなる。その場合、該ニューラルネットワーク量子化装置は、１０ビットの結果値を、固定小数点の下位１０ビット（ｉ６ないしｉ１１、及びｆ１ないしｆ４）に入れることができる。
【００７５】
以下では、四捨五入いかんが反映された固定小数点の下位１０ビット（ｉ６ないしｉ１１、及びｆ１ないしｆ４）の値を第２仮数値と称する。
【００７６】
該ニューラルネットワーク量子化装置は、第２仮数値のビット数と、固定小数点フォーマットのビット数とが同一になるように、ビット数差ほど第２仮数値の前桁を０で埋めることができる。前述の例示において、第２仮数値は、１０ビット（ｉ６ないしｉ１１、及びｆ１ないしｆ４）である一方、固定小数点フォーマットは、「Ｑ１６．４」であり、ビット幅が１６ビットであるので、６ビット差がある。従って、該ニューラルネットワーク量子化装置は、第２仮数値の前６桁を０で埋め（「００００００１１００１１１１００」（１６桁））、ビット数を固定小数点フォーマットと同一になるように調整することができる。
【００７７】
該ニューラルネットワーク量子化装置は、最終的に、ビット桁数が調整された第２仮数値に符号を適用することにより、浮動小数点値を固定小数点値に量子化することができる。前述の例示において、浮動小数点値の符号ｓ「０」を適用した結果、量子化された固定小数点値は、「０００００００１１００１１１１００」（１６桁）になる。
【００７８】
図８ないし図１０は、一実施形態による浮動小数点実数を、固定小数点整数に量子化する過程について説明するための図面である。
【００７９】
図８及び図９においては、実数値「５１．７３７６７３２００５８２０８５」に対応する３２ビットフォーマットの浮動小数点値を、「Ｑ１６．４」フォーマットの固定小数点整数に量子化する場合を挙げて説明する。
【００８０】
図８を参照すれば、段階８１０において、ニューラルネットワーク量子化装置は、浮動小数点フォーマットのパラメータから、符号、第１指数値及び第１仮数値を抽出することができる。
【００８１】
該浮動小数点は、符号、指数部及び仮数部に分けられ、浮動小数点のフォーマット（単精度（３２ビット）、倍精度（６４ビット）など）により、指数部及び仮数部のビット数が異なる。３２ビットフォーマットの浮動小数点値としては、符号は、１ビット、指数部は、８ビット、そして仮数部は、２３ビットであり、６４ビットフォーマットの浮動小数点値としては、符号は、１ビット、指数部は、１１ビット、そして仮数部は、５２ビットである。
【００８２】
例えば、実数値「５１．７３７６７３２００５８２０８５」に対応する３２ビットフォーマットの浮動小数点値は、「０（符号）１００００１００（指数部）１００１１１０１１１１００１１０１１００００１（仮数部）」である。該ニューラルネットワーク量子化装置は、符号値として「０」、第１指数値として「１００００１００」（８桁）、及び第１仮数値として「１００１１１０１１１１００１１０１１００００１」（２３桁）を抽出することができる。
【００８３】
段階８２０において、該ニューラルネットワーク量子化装置は、第１指数値、バイアス定数、及び固定小数点フォーマットの小数部長を利用し、第２指数値を算出することができる。
【００８４】
ＩＥＥＥ標準により、浮動小数点フォーマットにおいては、実際指数値にバイアス定数を加えて第１指数値が決められる。従って、第１指数値を実際指数値に戻すために、第１指数値からバイアス定数を減じなければならない。一方、標準によれば、バイアス定数は、２ｋ−１−１（ｋは、指数部桁）であり、ここで、ｋは、浮動小数点のフォーマットによって決定される。
【００８５】
また、量子化された固定小数点の小数部長を反映させるために、該ニューラルネットワーク量子化装置は、実際指数値に小数部長を算術的に加えることができる。該ニューラルネットワーク量子化装置は、第１指数値からバイアス定数を減じた結果値に、小数部長を算術的に加えることにより、浮動小数点値全体に「２＾（小数部長）乗」値を乗じた値と同一値を算出することができる。
【００８６】
前述の例示において、抽出された第１指数値は、「１００００１００（２進数）」であり、それは、「１３２（１０進数）」に該当する。また、「Ｑｍ．ｎ」フォーマットの固定小数点整数値（ｍ及びｎは、自然数）は、「Ｑ１６．ｆｒａｃ」表現と同一であるので（ｆｒａｃは、固定小数点フォーマットの小数部長を意味する）、「Ｑ１６．４」において、小数部長は、４になる。また、浮動小数点のバイアス定数は、２ｋ−１−１（ｋは、指数部桁）であり、３２ビットフォーマットにおいては、２８−１−１＝１２７になる。
【００８７】
前述のように、第２指数値は、第１指数値から浮動小数点のバイアス定数を減じ、固定小数点の小数部長を加えることによって算出され、前述の例示において、第２指数値は、９になる（１３２（第１指数値）−１２７（バイアス定数）＋４（小数部長）＝９）。
【００８８】
段階８３０において、該ニューラルネットワーク量子化装置は、第１仮数値の前桁にビット値１を追加し、第１仮数値をアップデートすることができる。
【００８９】
ＩＥＥＥ標準により、浮動小数点フォーマットの第１仮数値は、小数点の前桁値である１を省略して表示される。該ニューラルネットワーク量子化装置は、第１仮数値の前桁にビット値１を追加することにより、省略された１を再び表示することができる。前述の例示において、ビット値１を追加することによってアップデートされた第１仮数値は、「１１００１１１０１１１１００１１０１１００００１」（２４桁）になる。
【００９０】
段階８４０において、該ニューラルネットワーク量子化装置は、第１仮数値のビット数と第２指数値とを比較することができる。
【００９１】
該ニューラルネットワーク量子化装置は、第１仮数値のビット数と第２指数値との差が０より大きいか、あるいはそれと同じであるかということを判断し、両値の大きさを比較することができる。例えば、単精度においては、第１仮数値のビット数は、２３であるが、段階８２０において、算出された第２指数値「９」と、第１仮数値のビット数「２３」とを比較することができる。
【００９２】
固定小数点フォーマットに反映される第１仮数値のビット値を決定するために、該ニューラルネットワーク量子化装置は、第２指数値と第１仮数値のビット数とを比較することにより、固定小数点フォーマットに反映される第１仮数値のビット値を決定することができる。該ニューラルネットワーク量子化装置は、ビットシフト演算を介して、第１仮数値のビット値を固定小数点フォーマットに反映させることができる。
【００９３】
段階８４０での比較結果、第２指数値が第１仮数値のビット数より小さい場合、図９の段階９１０に進む。また、段階８４０での比較結果、第２指数値が第１仮数値のビット数より大きいか、あるいはそれと同じである場合、図１０の段階１０１０に進むことができる。
【００９４】
一実施形態において、第２指数値が第１仮数値のビット数より小さい場合、例えば、前述の実施形態でのように、第２指数値が「９」であり、第１仮数値のビット数が「２３」である場合、第１仮数値の上位９ビットの値だけが固定小数点に反映され、残り１４桁のビット値は、固定小数点に反映されないということを意味する。他の実施形態において、第２指数値が第１仮数値のビット数より大きいか、あるいはそれと同じである場合、第２指数値の全ビットが固定小数点に反映されるということを意味する。ただし、第２指数値が、固定小数点のビット幅から２を減じた値より大きい場合、該ニューラルネットワーク量子化装置は、固定小数点のフォーマットを変更した後、段階８２０から演算段階をさらに遂行することができる。
【００９５】
一方、第２指数値が第１仮数値のビット数より小さい場合、該ニューラルネットワーク量子化装置は、その後、固定小数点が再び浮動小数点に変換する過程での使用のために、固定小数点に反映されていないビット値をメモリに保存することができる。
【００９６】
図９を参照すれば、段階９１０において、図８の段階８４０の比較結果、第２指数値が第１仮数値のビット数より小さい場合、段階９１０において、該ニューラルネットワーク量子化装置は、浮動小数点フォーマットによって決定される所定数から、前記第２指数値を減じた値ほど、アップデートされた第１仮数値を右側にシフトすることができる。
【００９７】
一方、量子化された固定小数点から捨てられるビット値のうち最も高い桁のビット値による固定小数点の四捨五入いかんを反映させることにより、さらに正確度を高めることができるが、そのために、段階９１０において、該ニューラルネットワーク量子化装置は、第１仮数値のビット数から第２指数値を減じたほどアップデートされた第１仮数値を右側にシフトする代わりに、所定数（「第１仮数値のビット数１」に該当する値）から第２指数値を減じたほど右側にシフトすることができる。それにより、該ニューラルネットワーク量子化装置は、所定数ほど右側にシフトされた第１仮数値の最小有効ビット（ＬＳＢ）値を利用し、四捨五入いかんを決定することができる。
【００９８】
前述の例示において、アップデートされた第１仮数値「１１００１１１０１１１１００１１０１１００００１」（２４桁）のビット数は、「２４」であるが、所定数（「第１仮数値のビット数１」に該当する値）は、「２２」であり、第２指数値は、「９」になる。アップデートされた第１仮数値を「２２−９＝１３」ほど右側にシフトすれば、「１１００１１１０１１１」（１１桁）になる。
【００９９】
段階９２０において、該ニューラルネットワーク量子化装置は、シフトされた第１仮数値の最小有効ビット（ＬＳＢ）値を抽出することができる。
【０１００】
段階９１０において、該ニューラルネットワーク量子化装置は、「第１仮数値のビット数１」値ほど第１仮数値を右側にシフトすることができる。そのとき、シフトされた第１仮数値のＬＳＢ値は、固定小数点から捨てられるビット値のうち最も高い桁のビット値に該当する。該ニューラルネットワーク量子化装置は、シフトされた第１仮数値のＬＳＢ値を抽出することにより、抽出されたＬＳＢ値を、量子化された固定小数点の四捨五入いかんを決定するのに利用することができる。一実施形態において、抽出されたＬＳＢ値は、「１」または「０」でもあり、抽出されたＬＳＢ値が「１」である場合、切り上げに該当し、「０」でる場合、切り捨てに該当する。
【０１０１】
前述の例示において、シフトされた第１仮数値は、「１１００１１１０１１１」（１１桁）であり、該ニューラルネットワーク量子化装置は、シフトされた第１仮数値のＬＳＢ値、すなわち、最も右側ビットである「１」を抽出することができる。
【０１０２】
段階９３０において、該ニューラルネットワーク量子化装置は、シフトされた第１仮数値を、１ほど右側にもう一度さらにシフトし、抽出されたＬＳＢ値を加えることにより、第２仮数値を算出することができる。
【０１０３】
該ニューラルネットワーク量子化装置は、シフトされた第１仮数値を１ほどもう一度さらに右側にシフトすることにより、最終的に、第１仮数値のビット数（単精度の場合、２３、倍精度の場合、５２）から第２指数値を減じたほど、第１仮数値を右側にシフトすることができる。該ニューラルネットワーク量子化装置は、抽出されたＬＳＢ値を加え、四捨五入いかんを決定することにより、第２仮数値を算出することができる。
【０１０４】
前述の例示において、シフトされた第１仮数値「１１００１１１０１１１」（１１桁）を右側にもう一度さらにシフトすれば「１１００１１１０１１」（１０桁）になり、それに、段階９２０で抽出されたＬＳＢ値「１」を加えることにより、第２仮数値「１１００１１１１００」（１０桁）が算出される。
【０１０５】
段階９４０において、該ニューラルネットワーク量子化装置は、算出された第２仮数値のビット数と、固定小数点フォーマットのビット数とが同一になるように調整することができる。
【０１０６】
一実施形態において、該ニューラルネットワーク量子化装置は、算出された第２仮数値のビット数と、固定小数点フォーマットのビット数とが同一になるように、ビット数差ほど第２仮数値の前桁を０で埋め、ビット数を調整することができる。
【０１０７】
前述の例示において、段階９３０で算出された第２仮数値のビット数は、１０桁（１１００１１１１００）であり、固定小数点フォーマット「Ｑ１２．４」のビット数は、１６桁（１２＋４）になる。該ニューラルネットワーク量子化装置は、算出された第２仮数値の前の６桁を０で埋め、１６桁（００００００１１００１１１１００）になるようにし、第２仮数値のビット数を調整する。
【０１０８】
段階９５０において、該ニューラルネットワーク量子化装置は、調整された第２仮数値に符号（図８の段階８１０参照）を適用し、浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することができる。
【０１０９】
前述の例示において、ビット数が調整された第２仮数値は、「００００００１１００１１１１００」（１６桁）であるが、図８の段階８１０を参照すれば、符号は、「０」であるので、最終的に、量子化された固定小数点フォーマットのパラメータは、「００００００１１００１１１１００」（１６桁）になる。符号が「１」であるならば、最終的に、量子化された固定小数点フォーマットのパラメータは、「１０００００１１００１１１１００」（１６桁）になる。
【０１１０】
該ニューラルネットワーク量子化装置は、整数ＡＬＵのみを使用し、ビット操作及び整数演算を行うことにより、浮動小数点フォーマットのパラメータを、固定小数点フォーマットのパラメータに量子化することができ、量子化された固定小数点フォーマットのパラメータを利用し、ニューラルネットワークを生成するか、あるいはニューラルネットワークを訓練（または、学習）または推論させることができる。
【０１１１】
図１０を参照すれば、図８の段階８４０の比較結果、第２指数値が、第１仮数値のビット数より大きいか、あるいはそれと同じである場合、段階１０１０において、該ニューラルネットワーク量子化装置は、第２指数値を、固定小数点のビット幅から２を減じた値と比較することができる。
【０１１２】
段階１０１０での比較結果、第２指数値が、固定小数点のビット幅から２を減じた値より大きい場合、段階１０２０に進む。一方、固定小数点のビット幅から２を減じることは、ＩＥＥＥ標準により、仮数値において省略されるビット及び符号ビットを反映させることを意味する。
【０１１３】
段階１０２０において、該ニューラルネットワーク量子化装置は、既設定の固定小数点のフォーマットを変更することができる。第２指数値が、固定小数点のビット幅から２を減じた値より大きいというのは、浮動小数点を既設定の固定小数点フォーマットに量子化するのに適さないということを意味し、該ニューラルネットワーク量子化装置は、固定小数点のフォーマットを変更した後、段階８２０から演算段階をさらに遂行することができる。
【０１１４】
一方、ニューラルネットワークで使用される固定小数点の長さが決められているので、ハードウェア加速器は、固定小数点の長さを維持するが、小数点位置のみを変更する方式により、固定小数点のフォーマットを変更することができる。例えば、該ハードウェア加速器は「Ｑ１６．４」フォーマットを、「Ｑ１６．３」または「Ｑ１６．５」のように、固定小数点での小数点位置を変更した後、段階８２０から演算段階をさらに遂行することができる。
【０１１５】
段階１０１０での比較結果、第２指数値が、固定小数点のビット幅から２を減じた値より小さいか、あるいはそれと同じである場合、段階１０３０に進む。
【０１１６】
段階１０３０において、該ニューラルネットワーク量子化装置は、第２指数値と第１仮数値のビット数との差ほど、アップデートされた第１仮数値を左側にシフトすることができる。例えば、第２指数値が２５であり、固定小数点のビット幅が２６である場合、第２指数値（２５）から第１仮数値のビット数（２３）を減じた２ほどアップデートされた第１仮数値を左側にシフトすることができる。
【０１１７】
段階１０４０において、該ニューラルネットワーク量子化装置は、左側にシフトされた第１仮数値に符号を適用し、浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することができる。例えば、段階１０３０でのシフト結果、アップデートされた第１仮数値のＬＳＢを含んだ下位２ビットに２つの０が追加された後、符号が適用され、浮動小数点フォーマットのパラメータを、固定小数点フォーマットに量子化することができる。
【０１１８】
一方、図８ないし図１０の段階は、同時に進められるか、あるいは順次に進められ、図８ないし図１０に図示されたところと異なる順序でも進められる。
【０１１９】
本実施形態は、コンピュータによって実行されるプログラムモジュールのようなコンピュータによって実行可能な命令語を含む記録媒体の形態でも具現される。コンピュータで読み取り可能な媒体は、コンピュータによってアクセスされる任意の可用媒体でもあり、揮発性及び不揮発性の媒体、分離型及び非分離型の媒体をいずれも含む。また、コンピュータで読み取り可能な媒体は、コンピュータ記録媒体及び通信媒体をいずれも含んでもよい。該コンピュータ記録媒体は、コンピュータで読み取り可能な命令語、データ構造、プログラムモジュール、またはその他データのような情報の保存のための任意の方法または技術に具現された揮発性及び非揮発性、分離型及び非分離型の媒体をいずれも含む。該通信媒体は、典型的に、コンピュータで読み取り可能な命令語、データ構造、プログラムモジュールのような変調されたデータ信号のその他データ、またはその他伝送メカニズムを含み、任意の情報伝達媒体を含む。
【０１２０】
また、本明細書において、「部」は、プロセッサまたは回路のようなハードウェア構成（hardware  component）、及び／またはプロセッサのようなハードウェア構成によって実行されるソフトウェア構成（software  component）でもある。
【０１２１】
前述の本明細書の説明は、例示のためのものであり、本明細書の内容が属する技術分野の当業者であるならば、本発明の技術的思想や、必須な特徴を変更せずとも、異なる具体的な形態に容易に変形が可能であるということを理解することができるであろう。従って、以上で記述した実施形態は、全ての面において、例示的なものであり、限定的なものではないと理解しなければならない。例えば、単一型に説明されている各構成要素は、分散されても実施され、同様に、分散されていると説明されている構成要素も、結合された形態でも実施される。
【０１２２】
本実施形態の範囲は、前述の詳細な説明よりは、特許請求の範囲によって示され、特許請求の範囲の意味及び範囲そしてその均等概念から導き出される全ての変更及び/又は変形される形態が含まれると解釈されなければならない。
【産業上の利用可能性】
【０１２３】
本発明の、ニューラルネットワークのパラメータを量子化する装置及びその方法は、例えば、情報抽出関連の技術分野に効果的に適用可能である。
【符号の説明】
【０１２４】
２，１１，２１  ニューラルネットワーク
１０    ニューラルネットワーク学習器
２０    ニューラルネットワーク推論器
２１０  プロセッサ
２２０  メモリ
【図１】
2019079531.tif 000004
【図２】
2019079531.tif 000005
【図３】
2019079531.tif 000006
【図４】
2019079531.tif 000007
【図５】
2019079531.tif 000008
【図６】
2019079531.tif 000009
【図７】
2019079531.tif 000010
【図８】
2019079531.tif 000011
【図９】
2019079531.tif 000012
【図１０】
2019079531.tif 000013