(57)【要約】【課題】畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法を提供する。【解決手段】ＣＮＮの複数の層の各々に対して、層に対する重み値の分布に基づいて層内の重み値を表すための第１の予め決められたビット長の第１の整数と層に対して固定された第１の指数値とを含む第１の数フォーマットを決定する段階と、ＣＮＮの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第２の予め決められたビット長の第２の整数と層に対して固定された第２の指数値とを含む第２の数フォーマットを決定する段階と、ＣＮＮのハードウエア実装を構成する際に使用するために決定された数フォーマットを格納する段階とを含む畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法。【選択図】図４
2018010618.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成するコンピュータ実装方法であって、
前記ＣＮＮの複数の層の各々に対して、該層に対する重み値の分布に基づいて該層内の重み値を表すための第１の数フォーマットを決定する段階であって、該第１の数フォーマットが、第１の予め決められたビット長の第１の整数と該層に対して固定された第１の指数値とを含む前記決定する段階と、
前記ＣＮＮの複数の層の各々に対して、該層に対して予想されるデータ値の分布に基づいて該層内のデータ値を表すための第２の数フォーマットを決定する段階であって、該第２の数フォーマットが、第２の予め決められたビット長の第２の整数と該層に対して固定された第２の指数値とを含む前記決定する段階と、
ＣＮＮの前記ハードウエア実装を構成する際に使用するために前記決定された数フォーマットを格納する段階と、
を含むことを特徴とする方法。
【請求項２】
前記第１及び第２の予め決められたビット長は、各々が前記ＣＮＮの複数の層にわたって固定されることを特徴とする請求項１に記載の方法。
【請求項３】
前記ＣＮＮの前記複数の層の各々に対する前記重み値を前記第１の数フォーマットに変換する段階と該ＣＮＮへの入力データを前記第２の数フォーマットに変換する段階とを更に含み、
前記変換する段階は、前記第１及び第２の数フォーマットに基づいて量子化を実行する段階を含む、
ことを特徴とする請求項１又は請求項２に記載の方法。
【請求項４】
前記量子化は、最近傍丸め操作に基づいて実行されることを特徴とする請求項３に記載の方法。
【請求項５】
前記ＣＮＮの前記複数の層の各々に対する前記変換された重み値と該ＣＮＮへのデータ値とを該ＣＮＮの前記ハードウエア実装によってアクセス可能なメモリに又は該ＣＮＮの該ハードウエア実装内の１又は２以上のバッファに格納する段階を更に含むことを特徴とする請求項３又は請求項４に記載の方法。
【請求項６】
前記ＣＮＮの前記複数の層の各々に対する前記重み値を格納する段階を更に含み、
前記格納する段階は、
各重み値に対して、該重み値の前記第１の整数を表す値を格納する段階と、
各層に対して、該層に対する前記第１の指数を表す値を格納する段階と、
を含む、
ことを特徴とする請求項１から請求項５のいずれか１項に記載の方法。
【請求項７】
前記ＣＮＮの前記複数の層の各々に対する前記データ値を格納する段階を更に含み、
前記格納する段階は、
各データ値に対して、該データ値の前記第２の整数を表す値を格納する段階と、
各層に対して、該層に対する前記第２の指数を表す値を格納する段階と、
を含む、
ことを特徴とする請求項１から請求項６のいずれか１項に記載の方法。
【請求項８】
前記ＣＮＮの各層内の前記重み値は、訓練データセットを使用して該ＣＮＮを訓練することによって発生され、
前記発生された重み値は、浮動小数点フォーマットにある、
ことを特徴とする請求項１から請求項７のいずれか１項に記載の方法。
【請求項９】
前記重み値を調整する段階を更に含み、
前記調整する段階は、
複数の層の各々に対して、該層内の前記重み値の部分集合を選択する段階と、
複数の層の各々に対して、該層に対する前記第１の数フォーマットに従って該層内の前記選択された重み値を量子化し、該層内に修正重み値を発生させる段階と、
前記修正重み値を使用して前記ＣＮＮを訓練して調整重み値を発生させる段階と、
を含む、
ことを特徴とする請求項１から請求項８のいずれか１項に記載の方法。
【請求項１０】
予想されるデータ値の前記分布は、前記訓練データセットから導出されることを特徴とする請求項１から請求項９のいずれか１項に記載の方法。
【請求項１１】
各層に対する前記第１の指数を
前記層に対する重み値の前記分布に基づいて値の範囲を表すビット指標を識別し、
前記第１の予め決められたビット長に基づいて前記ビット指標の位置を前記識別されたビット指標からいくつかのビットだけ右シフトして第１のシフトビット指標を識別し、
前記第１のシフトビット指標の値を前記第１の指数として割り当てる、
ことによって決定する段階を更に含むことを特徴とする請求項１から請求項１０のいずれか１項に記載の方法。
【請求項１２】
各層に対する前記第２の指数を
前記層に対して予想されるデータ値の前記分布に基づいて値の範囲を表すビット指標を識別し、
前記第２の予め決められたビット長に基づいて前記ビット指標の位置を前記識別されたビット指標からいくつかのビットだけ右シフトして第２のシフトビット指標を識別し、
前記第２のシフトビット指標の値を前記第２の指数として割り当てる、
ことによって決定する段階を更に含むことを特徴とする請求項１から請求項１１のいずれか１項に記載の方法。
【請求項１３】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成するためのコンピュータシステムであって、
前記ＣＮＮの複数の層の各々に対して、該層に対する重み値の分布に基づいて該層内の重み値を表すための第１の予め決められたビット長の第１の整数と該層に対して固定された第１の指数値とを含む第１の数フォーマットを決定し、
前記ＣＮＮの複数の層の各々に対して、該層に対して予想されるデータ値の分布に基づいて該層内のデータ値を表すための第２の予め決められたビット長の第２の整数と該層に対して固定された第２の指数値とを含む第２の数フォーマットを決定し、かつ
ＣＮＮの前記ハードウエア実装を構成する際に使用するために前記決定された数フォーマットを格納する、
ように構成されることを特徴とするコンピュータシステム。
【請求項１４】
前記第１及び第２の予め決められたビット長は、各々が前記ＣＮＮの複数の層にわたって固定されることを特徴とする請求項１３に記載のコンピュータシステム。
【請求項１５】
前記ＣＮＮの前記複数の層の各々に対する前記重み値を前記第１の数フォーマットに変換し、かつ該ＣＮＮへの入力データを前記第２の数フォーマットに変換するように構成され、
前記変換は、前記第１及び第２の数フォーマットに基づいて量子化を実行する段階を含む、
ことを特徴とする請求項１３又は請求項１４に記載のコンピュータシステム。
【請求項１６】
前記量子化は、最近傍丸め操作に基づいて実行されることを特徴とする請求項１５に記載のコンピュータシステム。
【請求項１７】
前記ＣＮＮの前記複数の層の各々に対して前記変換された重み値と該ＣＮＮへのデータ値とを該ＣＮＮの前記ハードウエア実装によってアクセス可能なメモリに又は該ＣＮＮの該ハードウエア実装内の１又は２以上のバッファに格納するように構成されることを特徴とする請求項１５又は請求項１６に記載のコンピュータシステム。
【請求項１８】
前記ＣＮＮの前記複数の層の各々に対する前記重み値を格納するように構成され、
前記重み値を格納する段階は、
各重み値に対して、該重み値の前記第１の整数を表す値を格納する段階と、
各層に対して、該層に対する前記第１の指数を表す値を格納する段階と、
を含む、
ことを特徴とする請求項１３から請求項１７のいずれか１項に記載のコンピュータシステム。
【請求項１９】
前記ＣＮＮの前記複数の層の各々に対する前記データ値を格納するように構成され、
前記重み値を格納する段階は、
各データ値に対して、該データ値の前記第２の整数を表す値を格納する段階と、
各層に対して、該層に対する前記第２の指数を表す値を格納する段階と、
を含む、
ことを特徴とする請求項１３から請求項１８のいずれか１項に記載のコンピュータシステム。
【請求項２０】
前記ＣＮＮの各層内の前記重み値は、訓練データセットを使用して該ＣＮＮを訓練することによって発生され、
前記発生された重み値は、浮動小数点フォーマットにある、
ことを特徴とする請求項１３から請求項１９のいずれか１項に記載のコンピュータシステム。
【請求項２１】
前記重み値を調整するように構成され、
前記重み値を調整する段階は、
複数の層の各々に対して、該層内の前記重み値の部分集合を選択する段階と、
複数の層の各々に対して、該層に対する前記第１の数フォーマットに従って該層内の前記選択された重み値を量子化し、該層内に修正重み値を発生させる段階と、
前記修正重み値を使用して前記ＣＮＮを訓練して調整重み値を発生させる段階と、
を含む、
ことを特徴とする請求項１３から請求項２０のいずれか１項に記載のコンピュータシステム。
【請求項２２】
予想されるデータ値の前記分布は、前記訓練データセットから導出されることを特徴とする請求項１３から請求項２１のいずれか１項に記載のコンピュータシステム。
【請求項２３】
各層に対する前記第１の指数を
前記層に対する重み値の前記分布に基づいて値の範囲を表すビット指標を識別し、
前記第１の予め決められたビット長に基づいて前記ビット指標の位置を前記識別されたビット指標からいくつかのビットだけ右シフトして第１のシフトビット指標を識別し、
前記第１のシフトビット指標の値を前記第１の指数として割り当てる、
ことによって決定するように構成されることを特徴とする請求項１３から請求項２２のいずれか１項に記載のコンピュータシステム。
【請求項２４】
各層に対する前記第２の指数を
前記層に対して予想されるデータ値の前記分布に基づいて値の範囲を表すビット指標を識別し、
前記第２の予め決められたビット長に基づいて前記ビット指標の位置を前記識別されたビット指標からいくつかのビットだけ右シフトして第２のシフトビット指標を識別し、
前記第２のシフトビット指標の値を前記第２の指数として割り当てる、
ことによって決定するように構成されることを特徴とする請求項１３から請求項２３のいずれか１項に記載のコンピュータシステム。
【請求項２５】
請求項１から請求項１２のいずれか１項に記載の方法を実行するように構成されたコンピュータシステム。
【請求項２６】
コンピュータ可読コードが符号化されたコンピュータ可読ストレージ媒体であって、
前記コンピュータ可読コードは、該コードがコンピュータ上で実行された時に請求項１から請求項１２のいずれか１項に記載の方法の段階を実行するように構成される、
ことを特徴とするコンピュータ可読ストレージ媒体。
【請求項２７】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法であって、
ＣＮＮの少なくとも１つの層パラメータに対して、少なくとも１つの層の少なくとも一部分に対する層パラメータ値の分布に基づいて該層パラメータを表すための数フォーマットを決定する段階であって、該数フォーマットが、第１の予め決められたビット長の第１の整数と第１の指数値とを含む前記決定する段階、
を含むことを特徴とする方法。
【発明の詳細な説明】
【背景技術】
【０００１】
畳み込みニューラルネットワーク（ＣＮＮ）は、機械学習用途に使用することができる人工ニューラルネットワークの１つのタイプである。特に、ＣＮＮは、画像処理及びコンピュータビジョン用途を含む信号処理用途に使用することができる。
【０００２】
ＣＮＮは、電力リソースが重要な要素ではない用途に実施される。これにも関わらず、ＣＮＮは、ＣＮＮを実施するのに使用されるハードウエアのリソースが電力消費、処理容量、又はシリコン面積が限定されるようなものであるいくつかの異なる技術分野における用途を有する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従って、効率的な方法で、すなわち、作動する時にシリコン面積又は処理電力をあまり必要としない方法でＣＮＮを実施するように構成されたハードウエアを実施する必要性が存在する。更に、特定の用途に対するＣＮＮの定義は、時間と共に変化すると考えられる。例えば、追加の訓練は、ＣＮＮの定義の変更をもたらすことがある。従って、変化するＣＮＮ要件に対して柔軟であるようにＣＮＮを実施するためのハードウエアに対する必要性も存在する。
【課題を解決するための手段】
【０００４】
この「発明の概要」は、「発明を実施するための形態」で以下に更に説明する選択した概念を単純化された形式で紹介するために提供するものである。この「発明の概要」は、特許請求する主題の重要な特徴又は本質的な特徴を識別するように意図しておらず、特許請求する主題の範囲を制限するのに使用されるようにも意図していない。
【０００５】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法を提供し、本方法は、ＣＮＮの少なくとも１つの層の少なくとも１つの重みに対して、少なくとも１つの層に対する重み値の分布に基づいて少なくとも１つの層内の重みを表すための第１の数フォーマットを決定する段階を含み、第１の数フォーマットは、第１の予め決められたビット長の第１の整数と第１の指数値とを含む。
【０００６】
本方法は、更に、ＣＮＮの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第２の数フォーマットを決定する段階を含むことができ、第２の数フォーマットは、第２の予め決められたビット長の第２の整数と層に対して固定された第２の指数値とを含む。
【０００７】
本方法は、更に、ＣＮＮの複数の層の各々に対して、層に対する重み値の分布に基づいて層内の重み値を表すための第３の数フォーマットを決定する段階を含むことができ、第３の数フォーマットは、第３の予め決められたビット長の第３の整数と層に対して固定された第３の指数値とを含む。
【０００８】
本方法は、更に、ＣＮＮのハードウエア実装を構成する際に使用するために決定された数フォーマットを格納する段階を含むことができる。
【０００９】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法を提供し、本方法は、ＣＮＮの少なくとも１つの層パラメータに対して、少なくとも１つの層の少なくとも一部分に対する層パラメータ値の分布に基づいて層パラメータを表すための数フォーマットを決定する段階を含み、数フォーマットは、第１の予め決められたビット長の第１の整数と第１の指数値とを含む。
【００１０】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成する方法を提供し、本方法は、ＣＮＮの複数の層の各々に対して、層に対する重み値の分布に基づいて層内の重み値を表すための第１の数フォーマットを決定する段階であって、第１の数フォーマットが、第１の予め決められたビット長の第１の整数と層に対して固定された第１の指数値とを含む上記決定する段階と、ＣＮＮの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第２の数フォーマットを決定する段階であって、第２の数フォーマットが、第２の予め決められたビット長の第２の整数と層に対して固定された第２の指数値とを含む上記決定する段階と、ＣＮＮのハードウエア実装を構成する際に使用するために決定された数フォーマットを格納する段階とを含む。
【００１１】
畳み込みニューラルネットワーク（ＣＮＮ）のハードウエア実装を構成するためのコンピュータシステムを提供し、コンピュータシステムは、ＣＮＮの複数の層の各々に対して、層内の重み値の分布に基づいて層内の重み値を表すための第１の予め決められたビット長の第１の整数と層に対して固定された第１の指数値とを含む第１の数フォーマットを決定し、ＣＮＮの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第２の予め決められたビット長の第２の整数と層に対して固定された第２の指数値とを含む第２の数フォーマットを決定し、かつＣＮＮのハードウエア実装を構成する際に使用するためのために決定された数フォーマットを格納するように構成される。
【００１２】
上述の方法及びシステムは、集積回路上のハードウエアに具現化することができる。ＣＮＮのハードウエア実装を集積回路製造システムで製造する方法を提供することができる。集積回路製造システム内で処理された時にＣＮＮのハードウエア実装を製造するようにシステムを構成する集積回路定義データセットを提供することができる。処理された時に、レイアウト処理システムをしてＣＮＮのハードウエア実装を製造するための集積回路製造システムに使用される回路レイアウト記述を発生させる集積回路のコンピュータ可読記述を格納した非一時的コンピュータ可読ストレージ媒体を提供することができる。
【００１３】
ＣＮＮのハードウエア実装を記述するコンピュータ可読集積回路記述を格納した非一時的コンピュータ可読ストレージ媒体と、ＣＮＮのハードウエア実装を具現化する集積回路の回路レイアウト記述を発生させるために集積回路記述を処理するように構成されたレイアウト処理システムと、回路レイアウト記述に従ってＣＮＮのハードウエア実装を製造するように構成された集積回路発生システムとを含む集積回路製造システムを提供することができる。
【００１４】
あらゆる上述の特許請求の範囲に主張する方法を実行するためのコンピュータプログラムコードを提供することができる。コンピュータシステムで実行された時に、コンピュータシステムをしてあらゆる上述の特許請求の範囲に主張する方法を実行させるコンピュータ可読命令を格納した非一時的コンピュータ可読ストレージ媒体を提供することができる。
【００１５】
上述の特徴は、当業者には明らかであろうが適切な場合に組み合わせることができ、かつ本明細書に説明する実施例の態様のいずれとも組み合わせることができる。
【００１６】
ここで実施例を添付図面を参照して詳細に以下に説明する。
【００１７】
添付図面は、様々な実施例を示している。当業者は、図面内に図示の要素境界（例えば、ボックス、ボックスのグループ、又は他の形状）が境界の一例を表すことを認めるであろう。一部の実施例では、１つの要素が複数の要素として描かれる場合があり、又は複数の要素が１つの要素として描かれる場合がある。共通参照番号は、適切な場合に図を通して類似の特徴を示すのに使用される。
【図面の簡単な説明】
【００１８】
【図１】畳み込みニューラルネットワークに使用するデータの構造の例を示す図である。
【図２】畳み込みニューラルネットワークの例示的ハードウエア実装を示す図である。
【図３】図２に示す畳み込みエンジンの例を示す図である。
【図４】畳み込みニューラルネットワークのハードウエア実装を使用するために構成するための例示的処理を示す図である。
【図５ａ】ＣＮＮの例示的層に対する重み値分布を示す図である。
【図５ｂ】ＣＮＮの例示的層に対する重み値分布を示す図である。
【図５ｃ】ＣＮＮの例示的層に対するデータ値分布を示す図である。
【図５ｄ】ＣＮＮの例示的層に対するデータ値分布を示す図である。
【図６ａ】重み調整前の例示的重み値分布を示す図である。
【図６ｂ】重み調整後の例示的重み値分布を示す図である。
【図６ｃ】図４の処理の段階に従って層に対する数フォーマットを決定する例示的処理を示す図である。
【図７】変換された数フォーマットを使用して畳み込みを実行するように構成された畳み込みブロックの概略例を示す図である。
【図８】ＣＮＮのハードウエア実装が実施されるコンピュータシステムを示す図である。
【図９】ＣＮＮのハードウエア実装を具現化する集積回路を発生させるための集積回路製造システムを示す図である。
【発明を実施するための形態】
【００１９】
以下の説明は、当業者が本発明を製造かつ使用することを可能にするために一例として提示するものである。本発明は、本明細書に説明する実施形態に限定されず、開示する実施形態への様々な修正は、当業者に明らかであろう。
【００２０】
ここで実施形態を以下に単に例示的に説明する。
【００２１】
畳み込みニューラルネットワーク（ＣＮＮ）は、コンピュータビジョンタスクを含む信号処理タスクをＣＮＮが実行することを可能にするために重みを関連付けた複数の相互接続された層を含む人工ニューラルネットワークの形態である。ＣＮＮの機能は重みによって完全に表現される。一部の例において、入力画像を受信するようにＣＮＮを構成することができる。
【００２２】
ＣＮＮで利用されるデータのフォーマットの例示的概要を図１に示している。図１を見て分るように、ＣＮＮに使用されるデータのフォーマットは、複数の平面から作られる。入力データをデータのＰ平面として配置することができ、ここで各平面は次元ｘｙｚを有する。ＣＮＮは、複数の層を含み、その各々には複数のフィルタｗ0．．．ｗnが関連付けられる。フィルタｗ0．．．ｗnの各々は、ｍ×ｎ×Ｐの次元を有し、かつ図１に示すように方向ｓ及びｔのいくつかの段階にわたる畳み込み演算に従って入力データに適用される。
【００２３】
上述のように、各層には複数のフィルタｗ0．．．ｗnを関連付けることができる。本明細書に使用する重みは、フィルタ、フィルタ重み、又は係数と呼ぶことができる。フィルタ重みの数及び値は、第１の層内の重みの数がｎ１であり、第２の層内の重みの数がｎ２である場合に、第１の層に対して重みの数を
2018010618.tif 000003
として定義することができ、第２の層に対して重みの数を
2018010618.tif 000004
として定義することができるように層の間で変えることができる。
【００２４】
ＣＮＮの複数の層に対して、この層の入力データは、この層に関連付けられた重みを使用してこの層に対する入力データを畳み込むことによって処理される。例えば、ＣＮＮがビジョン用途に利用される場合に、第１の層では、「入力データ」は、一部の実施例では画像とすることができるＣＮＮへの初期入力と考えることができる。第１の層は、入力データを処理し、かつ第２の層に渡される中間データの第１のセットを発生させる。中間データの第１のセットはまた、データのいくつかの平面の形態を取る場合がある。中間データの第１のセットは、第１の中間データを処理して第２の中間データの形態の出力データを生成する第２の層の入力データを形成すると考えることができる。ＣＮＮが第３の層を含有する場合に、第３の層は、入力データとして第２の中間データを受信してこのデータを処理し、出力データとして第３の中間データを生成する。従って、本明細書での入力データへの参照は、いずれの層に対しても入力データへの参照を含むものと解釈することができる。例えば、入力データという語は、特定の層の出力及び次の層への入力である中間データを指すことができる。これは、ＣＮＮの出力と考えることができる出力データを最終層が生成するまで繰り返される。
【００２５】
図２は、本発明の開示によりＣＮＮを実施するように構成されたハードウエア実装２００を示している。ハードウエア実装は、実施されるＣＮＮを定めるデータを受信するように構成され、かつＣＮＮを実施するために入力データを処理するようにデータ定義に従って作動するように構成されたデジタル論理回路を含む。従って、ハードウエア実装は、１又は２以上のＣＮＮを実施するための構成可能なハードウエアであると考えることができる。この点で、本明細書でのＣＮＮのハードウエア実装への参照は、受信した構成データに従って入力データに対して演算することによってＣＮＮを実施するように構成されたハードウエアへの参照である。ハードウエア実装自体は、特定のＣＮＮを実施するように必ずしも構成されず、ＣＮＮの特定の構成データを用いて必ずしも事前ロードされない。例えば、ＣＮＮは、事前ロードされたもの（又はハードコード重みデータ及び層定義）を含む必要はない。従って、ハードウエア実装は、受信した構成データに基づいていずれのＣＮＮも実施するように構成される。従って、構成データ（本明細書では指令データとも呼ぶ）は、含まれることになる層の数、及び重みデータのサイズ及び値、並びに入力データの予想されるフォーマットを含む実施されることになる特定のＣＮＮを定義する。
【００２６】
ＣＮＮ及びＣＮＮがどのように処理されるかを定義するデータは、構成（又は指令）データ、重みデータ、及び入力データを含むことができる。ハードウエア実装は、ＣＮＮによって定義される作動を実行するために重みデータを使用して入力データを処理するように構成される。ハードウエア実装２００は、メモリインタフェース２１０、入力バッファコントローラ２１５、指令復号器２２０、係数バッファコントローラ２２５、係数バッファ２３０、ｎ畳み込みエンジン２４０、ｎ累積器２４５、起動モジュール２５５、正規化モジュール２６５、共有バッファ２７０、及びプールモジュール２７５を含む。
【００２７】
メモリインタフェース２１０は、ハードウエア実装２００と外部メモリ（図示せず）の間のインタフェースを提供するように構成される。外部メモリは、ハードウエア実装２００とは別のモジュールと考えることができ、又はハードウエア２００に統合されると考えることができる。指令又は構成データは、例えば、重みのサイズ及び／又はフォーマット、及び入力データサイズ及びフォーマット、並びに外部メモリでの位置に関する情報を含むことができる。
【００２８】
メモリインタフェース２１０は、外部メモリからＣＮＮ内での計算に使用される重みデータ及び入力データ、並びに指令情報を受信し、ハードウエア実装２００の作動を制御するように構成される。受信した重み（本明細書では係数とも呼ぶ）は、係数バッファコントローラ２２５に渡され、受信した入力データは、入力バッファコントローラ２１５に渡される。受信した指令は、指令復号器２２０に渡され、これは、次に、指令を復号し、かつ続けて重み及び入力データがバッファに格納される方式を制御するための係数制御バッファコントローラ２２５及び入力バッファコントローラ２１５を含む制御情報をハードウエア実装の要素に発令するように構成される。
【００２９】
外部メモリの読取り中にメモリインタフェース２１０を通じて外部メモリから受信される重み及び入力データは、単一層の一部分のみの重み及び入力データ、単一層を処理する場合に使用される重み及び入力データの全てを形成することができ、又は複数の層を処理するための重み及び入力データを含むことができる。例えば、外部メモリから受信される重みは、単一層の重みを形成することができ、受信される入力データは、単一層の入力データの一部分のみを形成することができる（逆も同様）。１又は２以上の層にわたるデータ及び重みのいずれの組合せも、メモリからの単一読取りで外部メモリから（例えば、バースト読取りを使用して）受信することができる。
【００３０】
実際には、外部メモリからの単一読取りで受信する重み及びデータの数は、係数バッファ２３０及び入力バッファ２３５のサイズに依存することになる。重みは、係数バッファコントローラ２２５から係数バッファ２３０に渡され、受信したデータは、入力バッファコントローラ２１５から複数の入力バッファ２３５ａ−２３５ｎに渡される。入力バッファの数は、ハードウエア２００の特定の実施に依存するが、いずれの値も取ることができる。入力データは、入力バッファ２３５ａ−２３５ｎの全てにわたって共有される。入力バッファの各々は、入力バッファの数が用途に応じて増加又は減少することができるように有効なバンクを形成する。
【００３１】
各畳み込みエンジン２４０ａ−２４０ｎが入力データの有効な「バンク」の全てへのアクセスを必要とするので、入力バッファ２３５ａ−２３５ｎは、複数のマルチプレクサの各々に接続される。マルチプレクサの各々は、入力バッファの１つから出力を選択し、かつ選択された入力バッファから出力された値をそれぞれの畳み込みエンジン２４０ａ−２４０ｎに渡すように構成される。更に、係数バッファ２３０からの重みは、第２の入力として各畳み込みエンジン２４０ａ−２４０ｎに提供される。畳み込みエンジンは、係数バッファ２３０から受信した重みを使用して、受信した入力データに対して畳み込み演算を実行するように構成される。各畳み込みエンジン２４０ａ−２４０ｎの結果出力は、入力として複数の累積器２４５ａ−２４５ｎのそれぞれの累積器に提供される。乗算論理部３１０の複数の要素及び加算論理部３２０の複数の要素を含む畳み込みエンジン２４０ｎの例示的実施を図３に示している。
【００３２】
各累積器２４５ａ−２４５ｎは、累積バッファ２５０に接続される。累積バッファ２５０は、各累積器２４５ａ−２４５ｎから受信した累積結果を格納するように構成される。累積バッファ２５０は、メモリインタフェース２１０に接続される。従って、累積バッファ２５０は、メモリインタフェース２１０を通じて外部メモリにデータを送信かつ外部メモリからデータを受信するように構成される。特に、累積バッファ２５０は、以下に詳細に説明するようにメモリインタフェース２１０を通じて外部メモリから値を格納及び回復することができるように構成される。累積バッファ２５０は、累積器２４５ａ−２４５ｎの入力に接続され、累積計算が行われるように値を累積器２４５ａ−２４５ｎにフィードバックするように構成される。
【００３３】
本出願の態様において、ＣＮＮのハードウエア実装に使用するための構成データ及び再フォーマット設定入力データを発生させる処理を以下に説明する。
【００３４】
固定小数点フォーマット
一般的に、ソフトウエアツールがＣＮＮの訓練フェーズ中に使用されて訓練データセットに基づいて層あたり１セットの重みを生成する。一部の構成では、一部の層内の重み値の一部は、他の手段、例えば、ウェーブレットベースによって発生させることができると考えられる。
【００３５】
ニューラルネットワークを訓練するための多くの共通ソフトウエアツールによって発生される重みは、典型的には浮動小数点数フォーマットで発生される。浮動小数点計算を実行することによってＣＮＮを実施するように構成されたＣＮＮのハードウエア実装は、シリコン面積が大きい可能性があり、かつ対応する固定小数点計算を実施するためのハードウエアと比較すると浮動小数点計算を実施するように構成されたハードウエアの複雑さに起因して有意な電力消費を有する。
【００３６】
ＣＮＮハードウエア実装の面積、電力消費、及びメモリ帯域幅を低減するために、ネットワークを定義するこれらの浮動小数点値は、浮動小数点フォーマットでの対応する計算よりも処理するのに単純な論理しか必要としない固定小数点フォーマットに変換することが望ましい。更に、本発明者は、ＣＮＮの各層のＣＮＮの値を表すのに使用されるビットの数を精度を大きく損なうことなく低減することができることを認識している。例えば、同じ数のビットを使用して重み及び入力データを表すことができる。しかし、フィルタのサイズ及び数、並びにデータのサイズは、典型的には層によって異なる。従って、従来的な固定小数点数フォーマットは、付番フォーマットが一部の層で冗長ビットをもたらすことがあり、入力及び重み値の値の範囲が層の間で異なる場合があるので、ＣＮＮ実装に使用するには不適切であることがある。更に、本発明者は、各層で表される値の範囲が層の間で異なる場合があり、従って、例えば、層毎ベースで表される数の精度を最適化するための範囲をもたらすことを認識している。
【００３７】
一般的に、浮動小数点数フォーマットは、符号ビットｓ、指数ｅ、及び１と２の範囲内の仮数ｍから構成される。浮動小数点フォーマットにおける有限値は、（−１）s２eｍとして表される。浮動小数点数は、数のサイズに比例した精度で大きい範囲の値を表すことができる。浮動小数点数では、指数の役割は、表された数のバイナリポイントの位置を移動することであると考えることができ、従って、「浮動」少数点という名前である。
【００３８】
対照的に、固定小数点数は、それが表すことができる値の間隔にわたって一貫した精度を有する。固定小数点フォーマットで数を表すための一般的な方法は、整数ビットの予め決められた数ｎと分数ビットｍを指定するＱフォーマットの使用である。従って、数は、ｎ＋ｍ＋１ビット（符号ビットを含む）の総数を必要とするＱｎ．ｍとして表すことができる。例示的Ｑフォーマットを以下の表に示している。
【００３９】
（表）
2018010618.tif 000005
【００４０】
しかし、Ｑフォーマットは、数を表すのに使用されるビットの一部が冗長であると考えられるという欠点を有する。ある例では、数範囲［−０．１２５、０．１２５］は、３ビットの精度に対して表されることになる。この例示的範囲及び精度に対する望ましいＱフォーマットは、Ｑ０．５である。しかし、値の範囲が予め既知であると仮定する場合に、数の最初の２ビットは、Ｑフォーマットで表される値を決定する場合に決して使用されない。例えば、表現の最初の２ビットは、これらがそれぞれ０．５及び０．２５を表し、従って、望ましい範囲の外側に入るので最終的な数に寄与しない。しかし、これらは、相対的なビット位置に起因して第３のビット位置（すなわち、０．１２５）及びそれを超える値を示すのに使用される。
【００４１】
同様に、値［−６４、６４］を４ビットの精度に表す必要があることを例において仮定する。Ｑ７．０のＱフォーマットは、Ｑフォーマットで望ましい例示的な値を表現するのに使用しなければならない。しかし、数の最後の３ビット（すなわち、３つの最下位ビット）は、これらのビットが望ましい精度の外側の値を表すのでいずれの有用な情報も伝えない。言い換えれば、−６４から６４の範囲を表すために、７ビットが必要である（２7が１２８であるので）。しかし、精度の僅か４ビットしか必要ないので（すなわち、２4値が識別される）、残りのＬＳＢは余分なレベルの精度を提供する。しかし、値の全範囲を表すためにＭＳＢを指数位置７にしなければならないのでこれらのＬＳＢビットを使用すべきである。上述のＱフォーマットは、従って、一部のビットが有用な情報を伝えないので、ＣＮＮのハードウエア実装内に使用するには非効率な数フォーマットであると考えられる。
【００４２】
従って、重み値及びデータ値を含む値を格納するためにＣＮＮのハードウエア実装に使用するための異なる数フォーマットを以下に示す。特定の層に対して表される値の範囲を固定することができることを認識することにより、特定の層での全ての入力データ又は全ての重みデータによって共有される共通フォーマットを定義することができる。これは、使用される表現される値の範囲を示す数フォーマットを使用する必要がないことを意味し、以下に説明するように数を表す場合の精度の最適化を可能にする。
【００４３】
以下に示す数フォーマットは、ＣＮＮを超える用途を有するが、値の決定可能な範囲に一般的に入る入力／重みデータの層に起因してＣＮＮに関連の特定の用途を有する。上述のように、ＣＮＮを訓練することによって発生される重みは、典型的には浮動小数点フォーマットで生成される。しかし、有効なハードウエア実装（シリコン、電力消費、又は処理電力の点で）を生成するために、ハードウエアを固定小数点フォーマットに実施することが好ましい。従って、ＣＮＮ出力の精度への影響を最小にしながら浮動小数点フォーマットから値を変換することが好ましい。
【００４４】
ＣＮＮの一部のハードウエア実装では、各重みを表すのに使用される第１の固定ビット数及びＣＮＮ内のデータを表すのに使用される第２の固定ビット数を定めることが望ましい。ＣＮＮ内のデータ及び重みを表すのに使用されるビットの数を事前定義することにより、ハードウエア実装を最適化することができる。例えば、畳み込みエンジンで実行される乗算及び累積演算は、組み合わされるビットの数に対して最適化することができ、以下に詳細に説明する。
【００４５】
また、ＣＮＮ実装では、重み及びデータの両方の値の分布が層によって異なるのは一般的である。更に、重みの値は、特定の層内のデータの値とは異なる場合がある。ＣＮＮ内の重み及びデータを表すためにビットの固定数が与えられるとすると、各層内の重み及びデータの各々に個別の固定小数点フォーマットを定義することが好ましい。
【００４６】
図４の方法は、ＣＮＮの構成データを生成して畳み込みを実行する場合に使用する数フォーマットを定義する方法を説明している。定義された数フォーマットは、ＣＮＮのハードウエア実装で値を表すのに使用される。本方法は、ＣＮＮを定める重みデータを生成するためにＣＮＮの訓練が浮動小数点数を使用して実行される段階４１０で開始される。段階４２０で、ＣＮＮのハードウエア実装に使用される重みデータの固定小数点数フォーマット及び入力データの固定小数点数フォーマットが決定される。この段階では、各層の重み及び入力データの範囲が評価される。各層の重みデータの数フォーマット及び各層の入力データの数フォーマットが決定される。段階４３０で、段階４１０で実行された訓練処理に基づいて段階４２０で決定された数フォーマットを使用して表されたＣＮＮの重み値を修正するために任意的な低精度重み調整が実行される。この結果、以下に詳しく説明するように修正された重み値を発生させることができる。段階４４０で、浮動小数点数フォーマットを使用して表現可能な値から段階４２０で決定された固定小数点数フォーマットを使用して表現可能な値に重み値及び／又は入力データを変換するために量子化段階が実行される。
【００４７】
図４の段階４１０で、ＣＮＮの訓練フェーズが実行される。訓練フェーズは、典型的には、訓練データセットに基づくＣＮＮの層の各々の重み値の最適化を伴う。訓練フェーズの結果として、ＣＮＮの層を定義する重みのセットが生成及び格納される。訓練フェーズは、ＣＮＮのハードウエア実装の発生の前にかつそれとは別に実行することができる。例えば、個別の物理デバイスを使用してＣＮＮの訓練を実行することができる。ＣＮＮのハードウエア実装の発生は、ＣＮＮを定めるのに使用される値の知識に影響を受ける場合がある。例えば、重みのサイズ及び数は、ＣＮＮのハードウエア実装に実施される係数バッファ及び入力バッファのサイズに影響を与える場合がある。訓練フェーズは、典型的には発生された重みが浮動小数点数になるように浮動小数点数フォーマットで実行される。
【００４８】
ＣＮＮを定義する浮動小数点重みを生成した状態で、本方法は段階４２０に進む。段階４２０で、重みデータ及び入力データに対して各層に使用される数フォーマットが決定される。特定の層に対する数フォーマットを識別する処理を説明する図６ｃに関して段階４２０で実行される処理を詳細に説明する。従って、図６ｃの処理は、ＣＮＮの各層に対して繰り返される。一般的に、段階４２０で重み及びデータ範囲選択が行われ、この範囲を使用して数フォーマットが決定される。
【００４９】
段階４２１で層の各々に対してＣＮＮに使用される（及び段階４１０で生成された）重みの値の範囲は、各層に対するフィルタ重み値の範囲（すなわち、分布）の推定値を取得するために解析される。更に、典型的な入力データ値の対応する解析が、各層に対する入力データ値の分布を推定するために解析される。重み及び入力データ値の推定された分布を使用して、各層に対する重み及び入力データ値を表す場合に使用する最適化数フォーマットが決定される。入力データ値の推定された分布は、例えば、ＣＮＮに使用する訓練データセット又は典型的な入力の既知のサンプルに基づく場合がある。ＣＮＮがビジョン用途に使用される場合に、典型的な入力の分布を推定するのに使用される入力データは、サンプル入力画像の形態を取ることができる。固定小数点数フォーマットによって表される値の範囲を決定するために、各層に使用される重み及びデータの分布に関する情報を取得するための重み及びデータの統計的解析を実行することができる。
【００５０】
個別の固定小数点数フォーマットが、各層の重みデータ及び入力データに対して決定される。上述のように、層の入力データは、前の層の出力から形成される（第１の層を除いて）。従って、層の値の範囲は異なる場合があり、従って、数フォーマットは層によって異なる場合がある。一部の構成では、共通の固定小数点数フォーマットを層の間で共有することができる。
【００５１】
段階４２１で、固定指数値が層の重みに対して決定される。ＣＮＮのハードウエア実装に使用される（及び以下に詳しく説明する）固定小数点数フォーマットは、符号付き整数仮数及び共通固定２のべき乗指数を使用する。固定小数点フォーマットは、整数ビット及び指数の数によって定められる。使用される符号付き整数のタイプは実施間で異なる場合がある一方で、本出願では２の補数が使用されるが、他の符号付き数フォーマットを使用することもできる。数フォーマットはまた、大域的に定義されたビット長に基づいて設定された固定ビット長仮数に基づくことができる。
【００５２】
上述のように、図４の段階４２０で、数フォーマットがＣＮＮの各層の重みデータ及び入力データに対して決定される。図６ｃの方法４２０の段階４２１で、ＣＮＮ層内の重み値の範囲を表す固定指数が決定され、同じＣＮＮ層の入力データの範囲を表す固定指数が決定される。これについては以下に詳しく説明する。
【００５３】
図５ａ及び５ｂは、ＣＮＮの重み値の例示的分布を示している。特に、図５ａ及び５ｂは、ＣＮＮの重み値の例示的ヒストグラムを示し、重み値の異なる広がりを見ることができる。
【００５４】
図５ａは、ハードウエア実装に実施される例示的ＣＮＮの第２の層（層２）の重み値の分布を示している。図５ａを見て分るように、層２の重み値は、ゼロの値の周りに集中しており、約−０．２５から約０．２５に広がる。
【００５５】
図５ｂは、同じＣＮＮの５５番目の層（層５５）の重み値の別の例示的分布を示している。層５５の重み値もゼロの値の周りに集中しているが、約−０．１から約０．１の小さい差を有する。これらの２つの層内の重み値の範囲が異なるので、層５５に使用される重み値に異なる付番フォーマットを使用して層２の重みの範囲を表すことができる。データを表すのに利用することができるビットの予め決められた数が与えられると、表現される値の範囲に応じて精度を提供することができる。
【００５６】
特定の層の重みに対する適切な数フォーマットを決定するために、層で表される重みの値の範囲に関する決定が上述のように行われる。段階４１２の第１の段階は、表現されることになる層の重みの分布における値の全範囲を可能にする２のべき乗の指数（すなわち、固定指数値）を決定する段階を含む。特定の層内の重み値が−０．１から０．１に分布する例では、２-3＝０．１２５及び−２-3＝−０．１２５であるので、値−３の指数の２のべき乗を使用することができ、これは完全に可能な値の範囲を含有する。選択された指数が値の範囲を完全に網羅する必要はないが、逆に範囲の許容可能なカバレージの予め決められたレベルを提供することができることは理解されるであろう。考えられる正確な尺度は、使用される統計的方法に依存する。当業者は、関わっている値の範囲を識別するための様々な手法を知っているであろう。別の例では、表現される値の範囲が−０．２５から０．２５（図５ａに図示）である場合に、２-2＝０．２５及び−２-2＝−０．２５であるので、−２の指数値を使用することができる。
【００５７】
本明細書に説明する方法では、この指数値は、以下に詳しく説明するように２の補数仮数表現での「符号」ビットであると考えることができる有効な「ＭＳＢ位置」を形成する。
【００５８】
「符号」ビットを識別した状態で、全ての層にわたって、すなわち、ハードウエア内のＣＮＮの実装に大域的にわたって重み／入力データの表現に対してＣＮＮに使用するために事前に割り当てられたビットの数に基づいて、この層内の重み値に使用される指数及び仮数フォーマットを決定することができる。言い換えれば、ビットの大域的固定数が、全ＣＮＮにわたって定められ、各層の重みを表すための数フォーマットを決定するのに使用される。以下の例では、重みを表すためにネットワーク全体にわたって割り当てられたビットの数が４ビットであると仮定する。他の例示的ＣＮＮ実装は、ビットの異なる数を使用することができる。
【００５９】
図６ｃの方法４２０は、段階４２１から４２２に進み、段階４２２で段階４２１で決定された固定指数値がシフトされる。段階４２２は、「符号」ビットの右に指数の数を計数する段階（又は言い換えるとシフトする段階）を含む。特に、指数は、到達した指数値である「ＬＳＢ指標」を識別するために右にｎ−１（ここでｎはＣＮＮ内の重み値−例えば、４ビットを格納するために事前に定義されたビットの数である）値に計数（又はシフト）される。この例では、「ＬＳＢ指標」は、以下に示すように−６であり、ここでｎ＝４である。
【００６０】
（表）
2018010618.tif 000006
「ＬＳＢ指標」の値を使用して数の固定小数点表現の指数値、すなわち、整数*２eを定めることができる。
【００６１】
指数値のシフトを実行した状態で、上記数フォーマットの指数ｅは、ＣＮＮで値を表すのに使用されるビットの事前に定義された数に基づいて指数をシフトすることによって決定されたシフトＬＳＢ指標に設定される。従って、数フォーマットは、シフト指数値及び値「整数」に使用されるビットの数によって定義される。値「整数」は、ｎビットを使用して格納された整数値を表し、ここでｎは、重み及び／又は入力データ（例えば、大域的に定められたビットの数）を格納するのに使用される予め決められたビットの数である。固定小数点フォーマットに変換される値では、値の整数成分の値は、数フォーマットの決定されたｅに基づいて計算される。
【００６２】
上述の表に示す例では、ｅ＝−６及び整数が４ビット整数を使用して表されるように固定される。従って、４ビットを使用して、２eによって乗算される値を決定することができる。上述の例を使用して、「０．０７８１２５」の浮動小数点値を表現しなければならない。上記に定義された例示的付番フォーマットを使用すると、ｅ＝−６及び整数が４ビットを含む場合に、値「０．０７８１２５」をビット「０１０１2」を使用して表現することができる。この値は、２の補数、すなわち、値５における０１０１の値を値２e（すなわち、２-6）で乗算することによって識別され、０．０７８１２５を与える。
【００６３】
同様に、ｅ＝−６である同じ例を使用すると、「−０．０４６８７５」の浮動小数点値を２の補数、すなわち、値−３で４つのビット「１１０１」だけを使用して表現することができる。理解されるように、与えられた層に対する異なる重み値の数を同じ数フォーマットを使用して表現することができる。同様に、整数成分を表すのに使用されるビットの数ｎを大域的に定めることができる。数フォーマットの指数値ｅが特定の層の全ての重みにわたって共通であるので、この層に数を一度定義するために指数値を格納するだけでよい。同様に、ビットの数ｎは、一度格納するだけでよい。従って、指数値ｅは、データポイントの値（例えば、重み又は入力データ項目）自体が格納される度に格納する必要はない。更に、この層内の各重み又は入力データ値には、Ｑフォーマットで同じ値を表すのに使用されるビットの数よりも小さい事前に定義されたビットの数ｎを割り当てることができる。他の整数（仮数）表現が可能であるが（符号及び大きさなど）、２の補数が本明細書に説明する例では使用される。
【００６４】
各層では、指数値（本明細書ではＬＳＢ値とも呼ぶ）を決定及び格納することができる。更に、各層の重みの値を新しい数フォーマットによって定義された値の１つに量子化することができる。これに関しては下記に説明する。上述のハードウエア実装を参照すると、各層のＬＳＢ値（指数値）を外部メモリに格納し、以下に詳細に説明するように値を畳み込みエンジンに渡すことによってハードウエア実装を指令復号器が制御することを可能にするために指令復号器に渡すことができる。
【００６５】
図６ｃを参照すると、段階４２２で層の特定の値範囲を表すのに使用される固定指数が重みデータに対して識別され、指数値が重み値の数フォーマットを定義するために既にシフトされている。上述の処理は、入力データ値の範囲に対して繰り返される。例えば、入力データ値の固定指数値は、段階４２３で特定の層の入力データ値の範囲に基づいて決定される。次に、決定された指数値は、段階４２４で大域的に定義されたビット幅に基づいてシフトされ、この層の入力データ値の数フォーマットを定義する。
【００６６】
図６ｃの処理は、いくつかのシフトされた指数値が各層の重みデータ及び入力データの各々に決定されるまで繰り返される。個別の指数値ｅjwが複数の層の各層ｊの重み値に対して決定され、別の個別の指数値ｅjjが複数の層の各層ｊの入力データに対して決定されることは理解されるであろう。
【００６７】
浮動小数点フォーマット内の数を固定小数点フォーマットに変換する類似の処理は、ＣＮＮで処理される入力データに対して実行される。層２及び５５に対するデータ値の例示的分布が図５ｃ及び５ｄそれぞれに示されている。ＣＮＮの第１の層に対して、ＣＮＮの訓練を実行するのに使用される訓練データセットを使用して第１の層のＬＳＢ値（指数値）を定義することができることは理解されるであろう。重みに対するのと類似の方式で、統計的解析が実行され、ＬＳＢ値（指数値）が各層に対して決定される。
【００６８】
しかし、ＣＮＮの中間層に渡されるデータに対して、生成された結果を即座に捕捉し、すなわち、次の層への入力値を形成する層からの出力値を決定しなければならない。図５ａ及び５ｂに示すように、中間層におけるデータ値の分布は、層の間で大きく異なる場合がある。従って、データの表現におけるフォーマットの範囲を最適化することが望ましい。
【００６９】
重みの値を表現するための数フォーマットの決定とは異なり、各層内のデータ値の数表現は、演算中の実際の入力データが未知であるので、各中間層で生成されるデータの予想される範囲に関する推定に基づくものと考えることができる。
【００７０】
ＣＮＮの各層で予想される入力データの値の範囲を決定するための１つの方式は、生成されたＣＮＮを通じて訓練データセットを渡し、各層で生成された値を捕捉することである。訓練データセットは、予想される入力の値に関する指示を与える代理の入力値を含有する。捕捉された値から、可能な値の範囲の推定が行われ、本方法は、重みに関して上述したように進む。
【００７１】
段階４２０を完了した状態で、新しい数フォーマットがＣＮＮの各層に使用される重み及び入力データに対して定義され、ＣＮＮをこれらの数フォーマットによる方式でハードウエア２００に実施することができる。ＣＮＮをハードウエアに実施するために、段階４１０で生成された浮動小数点重みを例えば量子化の処理を使用して新しい数フォーマットに変換することができる。新しい数フォーマットは、ハードウエア実装によってロード可能な構成データとして格納し、値がＣＮＮ内で格納又は処理される方式を定義することができる。例えば、この方式を利用することにより、図２のハードウエア実装２００は、係数及び入力バッファの利用可能なスペースを十分に利用して、これらの値が格納される精度を最適化すると同時にそれぞれの係数及び入力バッファに重み及び入力データ値の数を格納することができる。従って、外部メモリ対話の数を低減することができる。
【００７２】
量子化
任意的な低精度重み調整４３０段階を量子化／変換値に関して実行することができる。重み調整を実行するために、浮動小数点数は、決定された固定小数点数フォーマットに従って量子化すべきである。
【００７３】
図４の段階４２０に従ってＣＮＮに使用される数フォーマットを生成した状態で、量子化４４０が、上述の固定小数点数フォーマットによって表現可能な値の１つにＣＮＮに使用される重み値を量子化するために実行される。新しい固定小数点フォーマットで表現される重み値は、オリジナルの浮動小数点フォーマットに関する低減された精度を有する場合があるので、量子化誤差が生じることがある。特定の層内の重み値は、以下の式に従って量子化される。
2018010618.tif 000007
【００７４】
上述の式では、値Ｘmax及びＸminは、クランピングによって達成された固定小数点フォーマットの最高及び最低表現可能数をそれぞれ表している。関数Ｑ（α）は、以下に説明する最近傍丸め操作関数のような丸め操作関数を表している。上述の式は、新しい固定小数点数フォーマットで達成することができる最近傍利用可能固定小数点数に値を量子化し、範囲の外側の入力に対する最も近い表現可能値にクランピングする。ゼロに向けた丸め操作は、データがネットワークを進んでいく場合に量子化誤差を悪化させることがある。最近傍レベル丸め操作は、量子化誤差及び誤差の悪化を低減する。
【００７５】
最近傍量子化の使用例では、全ての値が−１と１の間の均一分布から引き出される場合に２つのランダム仮数Ａ及びＢを考える。−４のＬＳＢ値（指数値ｅ）を有する８ビット固定小数点数が使用される。
2018010618.tif 000008
は浮動仮数であり、
2018010618.tif 000009
は、対応する８ビット固定小数点仮数である。
2018010618.tif 000010
【００７６】
従って、最近傍からゼロに向けた丸め操作への切り換えは、浮動と固定小数点仮数の間の差を二倍にするが、この積は、量子化誤差の複合に起因してより大きい誤差を有する。この影響は、大きい仮数及び多数の行列乗算によって悪化する。
【００７７】
段階４４０で新しい固定小数点数フォーマット（各層に対して１フォーマット）に対応する値に各層内の重み値を量子化した状態で、新しく量子化された重みは、段階４５０に示すように処理のためのＣＮＮのハードウエア実装によってアクセス可能なメモリに格納される。例えば、量子化された重みは、ＣＮＮのハードウエア実装に接続するメモリに格納される。ＣＮＮのハードウエア実装２００は、各層を処理する時にメモリから重み値をロードし、生成された数フォーマットで重み値に対して演算することができる。
【００７８】
入力データのための層当たりの数フォーマットも決定され、ＣＮＮのハードウエア実装への入力データ、すなわち、ＣＮＮの第１の層への入力も、決定された数フォーマットでメモリに格納される。一部の構成では、各層の入力データに使用される数フォーマットを示すデータも、ＣＮＮのハードウエア実装によってアクセス可能なメモリに格納される。従って、ＣＮＮのハードウエア実装は、特定の層に対する数フォーマットを読み取ることができる。次に、ＣＮＮのハードウエア実装は、処理される現在の層に対する数フォーマットに従って入力データを処理するように構成することができる。続いて生成されるデータ、すなわち、次の層への入力を形成する各層で生成されたデータも定義され、かつメモリに格納された数フォーマットに基づいてこの層に対するフォーマットで処理される。
【００７９】
数計算
上述の固定小数点付番フォーマットは、整数及び指数固定小数点計算の整数ベースの実施に使用することができる。
【００８０】
第１の固定小数点フォーマット内の数ａから第２の異なる方式ｃ（すなわち、ａのビット及び／又は指数の数は、ｃのビット及び／又は指数の数とは異なる）の同じ数への変換は、整数における計算シフト及びオーバーフローの場合はクランプを必要とする。≫ｅ及び≪ｅは、それぞれｅビットの右及び左シフトである。ａiは、ａの整数部分であり、ｅaはａの指数である。
【００８１】
正オーバーフローが起こる場合に、結果はＸmaxにクランピングされるべきであり、負オーバーフローが起こる場合に、Ｘminにクランピングされるべきである。Ｘmaxは、固定小数点フォーマットにおける最高表現可能数であり、Ｘminは、最低表現可能数である。２の補数では、Ｘmax＝０１１．．．１及びＸmin＝１００．．．０である。
【００８２】
演算数ａ及びｂのフォーマット（すなわち、ビットｎ及び指数ｅの数）及び結果ｃが全て同一である場合に、基礎演算は以下のようなる。
【００８３】
（表）
2018010618.tif 000011
上述の演算の全てが整数計算である。オーバーフローの場合に、数は、Ｘmax又はＸminにクランピングされる。乗算の場合に、結果の指数は、ビットをシフトする代わりに調節することができ、数を異なる指数で乗算する時に有用になる。
【００８４】
（表）
2018010618.tif 000012
異なるフォーマットによる数の加算及び減算の場合に、演算数のタイプは、まず結果のタイプに変換すべきである。
【００８５】
固定小数点畳み込み層
低精度固定小数点フォーマットで畳み込み層を実施する段階は、いくつかの理由でＣＮＮで畳み込み層を実施する改善された方法を提供することができる。例えば、数ビットをＣＮＮのハードウエア実装を演算するのに使用されるメモリ帯域幅を低減する外部メモリとＣＮＮのハードウエア実装との間で転送しなければならない。上述の整数計算論理部は、畳み込み操作を実施するのに必要なハードウエア論理部のサイズ及び複雑さを低減する畳み込み計算（上述の畳み込みエンジンなど）内に実施することができる。更に、重みデータ及び入力データを格納するのに必要なビットの数が、対応する浮動小数点数表現よりも又は上述のＱフォーマット固定小数点数表現よりも少ないので、ＣＮＮのハードウエア実装に必要なバッファはより小さい。図２に対応するＣＮＮの上述のハードウエア実装を参照すると、係数及びデータバッファ、並びに累積バッファを小さくすることができる。
【００８６】
生成された数フォーマットに従って畳み込み計算を実行するように構成された畳み込みブロック７００の図式の実施例が図７に関して示されている。数フォーマットの指数を形成し、層毎に一度だけ格納されるデータ７２０ａ及び重み７２０ｂ指数は、畳み込みが行われる前にＣＮＮのハードウエア実装に送られる（重み及びデータビットの数ｎ及びｍは、ネットワーク全体に対して固定されると仮定される）。上述の例示的ハードウエア実装では、数フォーマットの指数を指令として指令復号器２２０に提供し、各層で必要とされる時に使用することができるように格納することができる。
【００８７】
畳み込み演算ハードウエア要素７３０は、重みとデータベクトルの間の内積を実行するように構成され、換言すると、畳み込み演算ハードウエア要素７３０は、図３に関して図示のように乗算と累積から全て構成される。これは、整数計算で実行することができ、結果を累積バッファに格納することができる。累積バッファに必要な指数値は、データ及び重みの両方から指数を加算することによって計算することができる。入力データは、入ってくる指数及びデータ指数に応じて正確な範囲に入れる必要があり、これは、層への入力での「刈り取り」ユニット７１０の目的である。
【００８８】
上述の構成では、累積器サイズは、ｎビットとｍビット整数間の内積の結果を収容するのに十分大きくなくてはならない。一例では、データＡに割り当てられる予め決められた固定ビット長を９ビットにすることができ、重みＢに割り当てられる予め決められたビット長を５ビットにすることができる。この例では、累積器は、少なくとも１３ビットのサイズにしなければならず、可能であれば畳み込みカーネルのサイズに応じてより大きくしなければならない。各層では、この層の値を表すのに使用される指数を変えることができる。従って、Ａ及びＢは層によって異なる場合がある。
【００８９】
重み調整
ＣＮＮのハードウエア実装に使用する構成データを生成して数フォーマットを定義する方法が上記に示されている。上述のように、ＣＮＮを定義する重みを低精度ターゲットに適応させることができる重み調整４３０の任意段階を図４の方法の一部として実施することができる。段階４３０は、段階４４０で得られた量子化値を受信する段階及びＣＮＮの更に別の訓練を実行することによって重み値を修正する段階を伴う。重み値の調整は、本発明の開示の固定小数点数表現を使用して実施されるＣＮＮの分類誤差を低減することができる。本明細書に説明する例では、各々が複数の重み値を有する複数の層によって定義される事前訓練されたネットワークは、図４の段階４１０で上述のように従来の浮動小数点ソフトウエアツールを使用して準備されていたと仮定する。更に、固定小数点数フォーマットの重み及び入力データ指数が段階４２０で決定され、重み及びデータの事前定義されたビット長が設定されていたと仮定する。
【００９０】
ＣＮＮの訓練（段階４１０で行われる訓練など）は、典型的には、分類精度が最大化されるまで数十万の解法段階（大きいネットワークの場合は数百万）にわたって行われる。各段階中に、一般的に勾配降下又はこの変形を使用して、分類誤差が最小になるように重みを更新する前に分類誤差がバッチ（一部の用途では５０−１００画像）に統合される。
【００９１】
本発明の開示の一部の例では、重み調整は、更に別の重み調節を提供するための訓練の追加の段階である。重み調整訓練フェーズは、初期浮動小数点訓練よりも遥かに少ない段階しか必要としないが、決定された固定小数点数フォーマットを使用する時には分類誤差の低減を可能にする。浮動小数点から固定小数点フォーマットへの有効な量子化は、格納された重み値の精度の変化をもたらすことができることは理解されるであろう。重みデータを表すのに使用されるビットの数に応じて、重み値は、対応する浮動小数点表現に対して量子化することができる。重み調整の方法は、変換された重み値に基づいてＣＮＮを再訓練するのに使用される。
【００９２】
より具体的には、Ｎ段階毎に、ＣＮＮの重みの部分集合Ｆは、浮動小数点数フォーマットから本発明の開示の固定小数点数フォーマットに重み値を変換するための上述の量子化方法を使用してその最近傍量子化レベルに設定される。一部の実施形態において、重みの部分集合は、重みの小さい割合を表している。量子化される重みは、ランダムに選択することができる。次に、ネットワークは、量子化によって導入される分類誤差を低減するために更にＮ段階訓練される。Ｎ及びＦの適切な選択に対して、全体としてネットワークの量子化誤差が時間と共に低減され、同時に分類精度を維持し、重みヒストグラムが望ましい櫛状関数に収束する。図６ａは、重み調整の前の重み値の例示的分布を示し、図６ｂは、重み調整後の重み値の例示的分布を示している。
【００９３】
重み調整方法のための例示的疑似コードを以下に示す。
2018010618.tif 000013
【００９４】
上述の図４の段階４５０に従って調整された重み値は、メモリにロードしてＣＮＮのハードウエア実装によってアクセス可能である。
【００９５】
本明細書に説明する新しい数フォーマットを生成する方法が図２に示すハードウエア実装に適用可能であることは理解されるであろう。しかし、本明細書に説明する方法はまた、ＣＮＮの他のハードウエア実装、並びにＣＮＮのソフトウエア実装に適用可能であり、固定小数点計算が実行される。本明細書に説明する数フォーマットをＣＮＮを通じて利用する必要はなく、ＣＮＮの一部分だけに使用することができることも理解されるであろう。例えば、ＣＮＮの内部バッファ内の重み及び入力データ値を格納するために数フォーマットを使用することができ、計算を実行するように修正又は拡張することができる。
【００９６】
ＣＮＮに使用される数フォーマットを決定するために本明細書に説明する方法が重み及び入力データに制限されるようには考えないことは理解されるであろう。勿論、層毎ベースで（又は勿論、複数の層にわたって）定義される多くの他の層パラメータには、値の分布を評価することによって上述の方法で数フォーマットを割り当てることができる。例えば、上述の方法に従って決定された通りにバイアスを数フォーマットに格納することができる。更に、バッチ正規化の処理は、上述の方法に従って適用することができる倍率を使用する。本明細書に説明するいずれの任意的な特徴もこれらの層パラメータに適用することができる。
【００９７】
これに加えて、上述の方法は層全体に対する固定指数値を決定することに関連し、上述の方法はまた、１つの層の共有される指数ではなく１つのフィルタに基づいて適用可能である。例えば、重みは、層のフィルタ間でかなり異なる場合がある。フィルタの第１の部分集合にある数フォーマット及びフィルタの第２の部分集合に異なる数フォーマットを生成することにより、数フォーマットが、１つの層の共有される指数方式とは異なる１つのフィルタで定義される。従って、範囲が最も大きい係数を有するフィルタによって支配されることがないので、小さい係数を有するフィルタの高い精度を提供する。フィルタ毎の方法を融合された方式で層毎の方法に組み合わせることができ、それによって一部の層だけが固定小数点フォーマットを有し、一部のフィルタが固定小数点フォーマットを有する。この手法の実施の任意的特徴及び方式は、上述の類似の特徴に対応する。これらの手法は、上述のハードウエア実装２００に実施することができる。
【００９８】
図８は、本明細書に説明するＣＮＮのハードウエア実装を実施することができるコンピュータシステムを示している。更に、図８のコンピュータシステムのようなコンピュータシステムは、ＣＮＮのハードウエア実装によって使用する数フォーマット及び／又は変換された値を格納するために図４及び／又は６の方法を実施するように構成することができる。図４及び／又は６の方法を実施するように構成されたコンピュータシステムは、図２に示すＣＮＮのハードウエア実装を実施するように構成されたコンピュータシステムとは異なる場合があることは理解されるであろう。
【００９９】
このコンピュータシステムは、ＣＰＵ８０２、ＧＰＵ８０４、メモリ８０６、及びディスプレイ８１６、スピーカ８１８、及びカメラ８１７のような他のデバイス８１４を含む。処理ブロック８１０は、ＧＰＵ８０４上に実施される。他の例では、処理ブロック８１０は、ＣＰＵ８０２上に実施することができる。処理ブロック８１０はまた、個別のユニット（図示せず）に実施することができる。処理ブロック８１０は、ハードウエア実装２００を実施するように構成されたデジタル論理部を含むことができる。ハードウエア実装２００は、ＧＰＵ８０４又はＣＰＵ８０２のような外部プロセッサ、又は示していない別のプロセッサによって制御することができる。コンピュータシステムの構成要素は、通信バス８０２を通じて互いに通信することができる。ストア８１２は、メモリ８０６の一部として実施される。
【０１００】
ＣＮＮのハードウエア実装２００及び図１から８に示すＣＮＮのハードウエア実装を構成する方法は、いくつかの機能ブロックを含むように示されている。これは単に概略であり、そのようなエンティティの異なる論理要素間の厳密な区分を定めるように意図していない。各機能ブロックは、あらゆる適切な方法で提供することができる。ＣＮＮのハードウエア実装によって形成される本明細書に説明する中間値は、あらゆる点でＣＮＮのハードウエア実装によって物理的に生成する必要はなく、単に入力と出力間でＣＮＮのハードウエア実装によって実行される処理を便宜上説明する論理値を表すことができることは理解されるものとする。
【０１０１】
本明細書に説明するＣＮＮのハードウエア実装は、集積回路のハードウエアに具現化することができる。本明細書に説明するＣＮＮのハードウエア実装は、本明細書に説明する方法のいずれも実行するように構成することができる。一般的に、上述の機能、方法、技術、又は構成要素のいずれも、ソフトウエア、ファームウエア、ハードウエア（例えば、固定論理回路）、又はこれらのあらゆる組合せに実施することができる。「モジュール」、「機能」、「構成要素」、「要素」、「ユニット」、「ブロック」、及び「論理部」という語は、ソフトウエア、ファームウエア、ハードウエア、又はこれらのあらゆる組合せを一般的に表すために本明細書に使用される場合がある。ソフトウエア実装の場合に、モジュール、機能、構成要素、要素、ユニット、ブロック、又は論理部は、プロセッサで実行される指定されたタスクを実行するプログラムコードを表している。本明細書に説明するアルゴリズム及び方法は、プロセッサにアルゴリズム／方法を実施させるコードを実行する１又は２以上のプロセッサによって実施することができる。コンピュータ可読ストレージ媒体の例には、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、光学ディスク、フラッシュメモリ、ハードディスクメモリ、及び磁気、光学などの技術を使用することができる他のメモリデバイスが含まれ、命令又は他のデータを格納して、機械によってアクセス可能である。
【０１０２】
本明細書に使用するコンピュータプログラムコード及びコンピュータ可読命令という語は、機械言語、変換言語、又はスクリプト言語で表現されるコードを含むプロセッサに対して実行可能なコードのいずれの種類も指している。実行可能コードは、バイナリコード、機械コード、バイトコード、集積回路を定めるコード（ハードウエア記述言語又はネットリストなど）、及びＣ、Ｊａｖａ、又はＯｐｅｎＣＬのようなプログラミング言語コードで表されるコードを含む。実行可能コードは、例えば、仮想機械又は他のソフトウエア環境で適切に実行、処理、解釈、コンパイル、実行された時に、実行可能コードがサポートされたコンピュータシステムのプロセッサをしてコードによって指定されたタスクを実行させるあらゆる種類のソフウエア、ファームウエア、スクリプト、モジュール、又はライブラリとすることができる。
【０１０３】
プロセッサ、コンピュータ、又はコンピュータシステムは、命令を実行することができる処理機能を有するあらゆる種類のデバイス、機械、又は専用回路、又はこれらの集合又は一部とすることができる。プロセッサは、ＣＰＵ、ＧＰＵ、システムオンチップ、状態機械、媒体プロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理アレイ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）のようなあらゆる種類の汎用又は専用プロセッサとすることができる。コンピュータ又はコンピュータシステムは、１又は２以上のプロセッサを含むことができる。
【０１０４】
望ましい機能を実行するために集積回路を設計するのに又はプログラマブルチップを構成するのに使用される場合に、ＨＤＬ（ハードウエア記述言語）ソフトウエアのような本明細書に説明するハードウエアの構成を定めるソフトウエアを含有することも意図される。すなわち、集積回路製造システムにおいて処理される時に本明細書に説明する方法のいずれかを実行するように構成されるＣＮＮのハードウエア実装を製造するように、又は本明細書に説明するあらゆる装置を含むＣＮＮのハードウエア実装を製造するようにシステムを構成する集積回路定義データセットの形態でコンピュータ可読プログラムコードを符号化するコンピュータ可読ストレージ媒体を提供することができる。集積回路定義データセットは、例えば、集積回路記述とすることができる。
【０１０５】
従って、本明細書に説明するようなＣＮＮのハードウエア実装を集積回路製造システムで製造する方法を提供することができる。更に、集積回路製造システムで処理された時にＣＮＮのハードウエア実装を製造する方法を実行させる集積回路定義データセットを提供することができる。
【０１０６】
集積回路定義データセットは、例えば、ネットリスト、レジスタ転送レベル（ＲＴＬ）コードとして、Ｖｅｒｉｌｏｇ又はＶＨＤＬのようなハイレベル回路表現として、及びＯＡＳＩＳ（ＲＴＭ）及びＧＤＳＩＩのような低レベル回路表現として含むあらゆるレベルの集積回路を定めるハードウエア記述言語としてプログラマブルチップを構成するためのコードとしてのコンピュータコードの形態とすることができる。表現によって定義されるように集積回路の製造定義を生成するために、論理的に集積回路（ＲＴＬなど）を定めるハイレベル表現は、回路要素の定義及びこれらの要素を結合するための規則を含むソフトウエア環境の関連で集積回路の製造定義を生成するように構成されたコンピュータシステムにおいて処理することができる。機械を定めるためにコンピュータシステムにおいて実行するソフトウエアを備えた場合に一般的であるように、１又は２以上の中間ユーザ段階（例えば、指令、変数などを提供）をこの集積回路の製造定義を生成するために集積回路を定めるコードを実行するための集積回路の製造定義を生成するように構成されたコンピュータシステムに対して要求することができる。
【０１０７】
ＣＮＮのハードウエア実装を製造するように本発明のシステムを構成するために集積回路製造システムにおいて集積回路定義データセットを処理する実施例を図９に関してここで説明する。
【０１０８】
図９は、レイアウト処理システム９０４及び集積回路発生システム９０６を含む集積回路（ＩＣ）製造システム９０２の実施例を示している。ＩＣ製造システム９０２は、ＩＣ定義データセット（例えば、本明細書の実施例のいずれかで説明したＣＮＮのハードウエア実装を定める）を受信し、ＩＣ定義データセットを処理し、かつＩＣ定義データセットに従ってＩＣを発生させる（例えば、本明細書の実施例のいずれかに説明したＣＮＮのハードウエア実装を具現化する）ように構成される。ＩＣ定義データセットの処理は、本明細書の実施例のいずれかで説明したＣＮＮのハードウエア実装を具現化する集積回路を製造するようにＩＣ製造システム９０２を構成する。
【０１０９】
レイアウト処理システム９０４は、ＩＣ定義データセットを受信及び処理して回路レイアウトを決定するように構成される。ＩＣ定義データセットから回路レイアウトを決定する方法は、当業技術で既知であり、例えば、論理構成要素（例えば、ＮＡＮＤ、ＮＯＲ、ＡＮＤ、ＯＲ、ＭＵＸ、及びＦＬＩＰ−ＦＬＯＰ構成要素）の点で、発生される回路のゲートレベル表現を決定するためにＲＴＬコードを合成する段階を含有することができる。回路レイアウトは、論理構成要素の位置情報を決定することによって回路のゲートレベル表現から決定することができる。これは、回路レイアウトを最適化するために自動的に又はユーザの介入により実行することができる。レイアウト処理システム８０４が回路レイアウトを決定した時に、レイアウト処理システム９０４は、回路レイアウト定義をＩＣ発生システム９０６に出力することができる。回路レイアウト定義は、例えば、回路レイアウト記述とすることができる。
【０１１０】
ＩＣ発生システム９０６は、当業技術で既知のように回路レイアウト定義に従ってＩＣを発生させる。例えば、ＩＣ発生システム９０６は、ＩＣを発生させるための半導体素子製造工程を実施することができ、半導体素子製造工程は、半導体材料から構築されたウェーハに電子回路が徐々に生成されていく過程のリソグラフィック及び化学的処理段階の複数段階シーケンスを含有することができる。回路レイアウト定義は、回路定義に従ってＩＣを発生させるためのリソグラフィック処理に使用することができるマスクの形態とすることができる。これに代えて、ＩＣ発生システム９０６に提供される回路レイアウト定義は、ＩＣを発生させる場合に使用する適切なマスクを形成するためにＩＣ発生システム９０６を使用することができるコンピュータ可読コードの形態とすることができる。
【０１１１】
ＩＣ製造システム９０２によって実行される異なる処理は、１つの位置で例えば１つの当事者によって全てを実施することができる。これに代えて、ＩＣ製造システム９０２は、処理の一部が異なる位置で実行することができるように分散システムとすることができ、異なる当事者によって実行することができる。例えば、（ｉ）発生される回路のゲートレベル表現を形成するためにＩＣ定義データセットを表すＲＴＬコードを合成する段階、（ｉｉ）ゲートレベル表現に基づいて回路レイアウトを発生させる段階、（ｉｉｉ）回路レイアウトに従ってマスクを形成する段階、及び（ｉｖ）マスクを使用して集積回路を製造する段階の一部は、異なる位置で及び／又は異なる当事者によって実行することができる。
【０１１２】
他の実施例では、集積回路製造システムにおける集積回路定義データセットの処理が、回路レイアウトを決定するためにＩＣ定義データセットを処理する必要なくＣＮＮのハードウエア実装を製造するように本発明のシステムを構成することができる。例えば、集積回路定義データセットは、ＦＰＧＡのような再構成可能プロセッサの構成を定めることができ、このデータセットの処理は、この定義された構成を有する再構成可能プロセッサを生成するように（例えば、ＦＰＧＡに構成データをロードすることにより）ＩＣ製造システムを構成することができる。
【０１１３】
一部の実施形態において、集積回路製造定義データセットが、集積回路製造システムにおいて処理された時に、集積回路製造システムに本明細書に説明したデバイスを発生させることができる。例えば、集積回路製造定義データセットによる図９に関して上述した方法での集積回路製造システムの構成は、本明細書に説明したデバイスを製造させることができる。
【０１１４】
一部の実施例では、集積回路定義データセットは、データセットで定義されたハードウエア、又はデータセットで定義されたハードウエアと組み合わせて実行されるソフトウエアを含むことができる。図９に示す実施例では、集積回路の製造段階で、集積回路定義データセットで定義されたプログラムコードに従ってこの集積回路にファームウエアをロードするか、又は他に集積回路と共に使用するプログラムコードを集積回路に提供するようにＩＣ発生システムを集積回路定義データセットによって更に構成することができる。
【０１１５】
本出願人は、本明細書により、これらの特徴又は組合せが当業者の共通する一般的な知識の点から全体として本明細書に基づいて実行することができる程度まで、そのような特徴又は特徴の組合せが本明細書に開示するいずれの問題も解決するか否かにかかわらず、本明細書に説明する各個々の特徴及び２又は３以上のこれらの特徴のいずれの組合せも個別に開示している。以上の説明の観点から、様々な修正を本発明の範囲内で行うことができることは当業者には明らかであろう。
【符号の説明】
【０１１６】
４００  数フォーマットを定義する方法
４１０  浮動点訓練
４２０  数フォーマットの決定
４３０  低精度重み調整
４４０  量子化
【図１】
2018010618.tif 000014
【図２】
2018010618.tif 000015
【図３】
2018010618.tif 000016
【図４】
2018010618.tif 000017
【図５ａ】
2018010618.tif 000018
【図５ｂ】
2018010618.tif 000019
【図５ｃ】
2018010618.tif 000020
【図５ｄ】
2018010618.tif 000021
【図６ａ】
2018010618.tif 000022
【図６ｂ】
2018010618.tif 000023
【図６ｃ】
2018010618.tif 000024
【図７】
2018010618.tif 000025
【図８】
2018010618.tif 000026
【図９】
2018010618.tif 000027
【外国語明細書】
2018010618000001.pdf