(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-12
(45)【発行日】2023-09-21
(54)【発明の名称】畳み込みニューラルネットワークハードウエア構成
(51)【国際特許分類】
G06N 3/063 20230101AFI20230913BHJP
【FI】
G06N3/063
【外国語出願】
(21)【出願番号】P 2022006207
(22)【出願日】2022-01-19
(62)【分割の表示】P 2017092266の分割
【原出願日】2017-05-08
【審査請求日】2022-02-03
(32)【優先日】2016-05-03
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】501176037
【氏名又は名称】イマジネイション テクノロジーズ リミテッド
(74)【代理人】
【識別番号】100094569
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100103610
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100109070
【氏名又は名称】須田 洋之
(74)【代理人】
【識別番号】100067013
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100086771
【氏名又は名称】西島 孝喜
(74)【代理人】
【識別番号】100109335
【氏名又は名称】上杉 浩
(74)【代理人】
【識別番号】100120525
【氏名又は名称】近藤 直樹
(72)【発明者】
【氏名】クリフォード ギブソン
(72)【発明者】
【氏名】ジェームズ インバー
【審査官】多賀 実
(56)【参考文献】
【文献】米国特許出願公開第2012/0191955(US,A1)
【文献】米国特許出願公開第2016/0026912(US,A1)
【文献】米国特許出願公開第2009/0164544(US,A1)
【文献】特開平07-200259(JP,A)
【文献】国際公開第99/066423(WO,A1)
【文献】Darryl D.Lin et al.,"FIXED POINT QUANTIZATION OF DEEP CONVOLUTIONAL NETWORKS",arXiv.org [online],arXiv:1511.06393v2,2016年01月,pp.1-15,[2021年5月17日検索],インターネット:<URL: https://arxiv.org/pdf/1511.06393v2.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 17/10-17/18
(57)【特許請求の範囲】
【請求項1】
畳み込みニューラルネットワーク(CNN)を実装するためのハードウエアであって、
畳み込み演算ハードウエア要素(730)を備える畳み込みブロック(700)を備え、前記畳み込み演算ハードウエア要素(730)は、
CNNの層に対し第1の重みベクトル(720b)と第1のデータベクトル(720a)の間の第1の内積を実行し、ここで前記第1の重みベクトル(720b)は複数の整数ビット(n)と指数(B)によって定義される固定小数点フォーマットにおける複数の重み値を有し、前記第1のデータベクトル(720a)は複数の整数ビット(m)と指数(A)によって定義される固定小数点フォーマットにおける複数のデータ値を有し、
前記第1のデータベクトル(720a)のデータ値に対する指数(A)を示す第1のデータ指標を受け取り、
前記第1の重みベクトル(720b)の重み値に対する指数(B)を示す第1の重み指標を受け取り、
前記第1のデータベクトル(720a)のデータ値に対する指数(A)と前記第1の重みベクトル(720b)の重み値に対する指数(B)とを加算することによって、前記第1の内積の指数を計算する、
よう構成されている、ハードウエア。
【請求項2】
畳み込み演算ハードウエア要素(730)は、さらに、
CNNの他の層に対し第2の重みベクトルと第2のデータベクトルの間の第2の内積を実行し、ここで前記第2の重みベクトルは複数の整数ビットと指数によって定義される固定小数点フォーマットにおける複数の重み値を有し、前記第2のデータベクトルは複数の整数ビットと指数によって定義される固定小数点フォーマットにおける複数のデータ値を有し、
前記第2のデータベクトルのデータ値に対する指数を示す第2のデータ指標を受け取り、
前記第2の重みベクトルの重み値に対する指数を示す第2の重み指標を受け取り、
前記第2のデータベクトルのデータ値に対する指数と前記第2の重みベクトルの重み値に対する指数とを加算することによって、前記第2の内積の指数を計算する、
よう構成され、
前記第2のデータベクトルのデータ値に対する指数と前記第1のデータベクトルのデータ値に対する指数は異なっている、請求項1に記載のハードウエア。
【請求項3】
畳み込み演算ハードウエア要素(730)は、さらに、
CNNの他の層に対し第2の重みベクトルと第2のデータベクトルの間の第2の内積を実行し、ここで前記第2の重みベクトルは複数の整数ビットと指数によって定義される固定小数点フォーマットにおける複数の重み値を有し、前記第2のデータベクトルは複数の整数ビットと指数によって定義される固定小数点フォーマットにおける複数のデータ値を有し、
前記第2のデータベクトルのデータ値に対する指数を示す第2のデータ指標を受け取り、
前記第2の重みベクトルの重み値に対する指数を示す第2の重み指標を受け取り、
前記第2のデータベクトルのデータ値に対する指数と前記第2の重みベクトルの重み値に対する指数とを加算することによって、前記第2の内積の指数を計算する、
よう構成され、
前記第2の重みベクトルの重み値に対する指数と、前記第1の重みベクトルの重み値に対する指数は異なっている、請求項1又は2に記載のハードウエア。
【請求項4】
前記第1のデータベクトルのデータ値に対する整数ビットの数と、前記第2のデータベクトルのデータ値に対する整数ビットの数は同じである、請求項2又は3に記載のハードウエア。
【請求項5】
前記第1の重みベクトルの重み値に対する整数ビットの数と、前記第2の重みベクトルの重み値に対する整数ビットの数は同じである、請求項2乃至4のいずれかに記載のハードウエア。
【請求項6】
前記第1の重みベクトルの重み値に対する指数と、前記第1のデータベクトルのデータ値に対する指数は異なっている、請求項1乃至5のいずれかに記載のハードウエア。
【請求項7】
前記第1の重みベクトルの重み値に対する整数ビットの数と、前記第1のデータベクトルのデータ値に対する整数ビットの数は異なっている、請求項1乃至6のいずれかに記載のハードウエア。
【請求項8】
前記畳み込みブロック(700)はさらに、前記内積の結果を収容できるサイズの累積器(740)を備える、請求項1乃至7のいずれかに記載のハードウエア。
【請求項9】
前記畳み込みブロック(700)はさらに、
入力データに対する指数及び前記第1のデータベクトルの前記データ値に対する指数に基づいて
前記入力データから前記第1のデータベクトルを生成するよう構成された刈り取りユニット(710)を備える、請求項1乃至8のいずれかに記載のハードウエア。
【請求項10】
さらに、前記第1の重みベクトル、及び、前記第1の重みベクトルの前記重み値に対する指数を識別する前記第1の重み指標を含む指令情報を受け取るよう構成されたメモリインタフェース(210)を備える、請求項1乃至9のいずれかに記載のハードウエア。
【請求項11】
さらに、前記第1の内積を実行する前記畳み込み演算ハードウエア要素(730)の前に、前記第1の重みベクトルを格納するよう構成された係数バッファ(230)を備える、請求項1乃至10のいずれかに記載のハードウエア。
【請求項12】
請求項10に従属する請求項11に記載のハードウエアであって、さらに、
前記メモリインタフェース(210)から前記第1の重みベクトルを受け取るよう構成された係数バッファコントローラ(225)と、
前記指令情報を復号し、かつ、前記係数バッファコントローラ(225)に対して、前記係数バッファコントローラ(225)が前記第1の重みベクトルを前記係数バッファ(230)に格納する方式を制御する制御情報を発令するよう構成された指令復号器(220)と、
を備える請求項11に記載のハードウエア。
【請求項13】
さらに、入力データ又は前記第1のデータベクトルと、前記第1のデータベクトルのデータ値に対する指数及び/又は前記入力データの指数を識別する前記第1のデータ指標を含む指令情報とを受け取るよう構成されたメモリインタフェース(210)を備える、請求項1乃至12のいずれかに記載のハードウエア。
【請求項14】
さらに、前記第1の内積を実行する前記畳み込み演算ハードウエア要素(730)の前に、前記第1のデータベクトル又は
入力データを格納するよう構成された1又は2以上の入力バッファ(235a~235n)を備える、請求項1乃至13のいずれかに記載のハードウエア。
【請求項15】
請求項13に従属する請求項14に記載のハードウエアであって、さらに、
前記メモリインタフェース(210)から前記第1のデータベクトル又は前記入力データを受け取るよう構成された入力バッファコントローラ(215)と、
前記指令情報を復号し、かつ、前記入力バッファコントローラ(215)に対して、前記入力バッファコントローラ(215)が前記入力データ又は前記第1のデータベクトルを前記1又は2以上の入力バッファ(235a~235n)に格納する方式を制御する制御情報を発令するよう構成された指令復号器(220)と、
を備える請求項14に記載のハードウエア。
【請求項16】
前記畳み込み演算ハードウエア要素(730)は、乗算論理部の複数の要素及び加算論理部の複数の要素を備える、請求項1乃至15のいずれかに記載のハードウエア。
【請求項17】
集積回路に具現化されている、請求項1乃至16のいずれかに記載のハードウエア。
【請求項18】
請求項1乃至17のいずれかに記載のハードウエアを備えるコンピュータシステム。
【発明の詳細な説明】
【背景技術】
【0001】
畳み込みニューラルネットワーク(CNN)は、機械学習用途に使用することができる人工ニューラルネットワークの1つのタイプである。特に、CNNは、画像処理及びコンピュータビジョン用途を含む信号処理用途に使用することができる。
【0002】
CNNは、電力リソースが重要な要素ではない用途に実施される。これにも関わらず、CNNは、CNNを実施するのに使用されるハードウエアのリソースが電力消費、処理容量、又はシリコン面積が限定されるようなものであるいくつかの異なる技術分野における用途を有する。
【発明の概要】
【発明が解決しようとする課題】
【0003】
従って、効率的な方法で、すなわち、作動する時にシリコン面積又は処理電力をあまり必要としない方法でCNNを実施するように構成されたハードウエアを実施する必要性が存在する。更に、特定の用途に対するCNNの定義は、時間と共に変化すると考えられる。例えば、追加の訓練は、CNNの定義の変更をもたらすことがある。従って、変化するCNN要件に対して柔軟であるようにCNNを実施するためのハードウエアに対する必要性も存在する。
【課題を解決するための手段】
【0004】
この「発明の概要」は、「発明を実施するための形態」で以下に更に説明する選択した概念を単純化された形式で紹介するために提供するものである。この「発明の概要」は、特許請求する主題の重要な特徴又は本質的な特徴を識別するように意図しておらず、特許請求する主題の範囲を制限するのに使用されるようにも意図していない。
【0005】
畳み込みニューラルネットワーク(CNN)のハードウエア実装を構成する方法を提供し、本方法は、CNNの少なくとも1つの層の少なくとも1つの重みに対して、少なくとも1つの層に対する重み値の分布に基づいて少なくとも1つの層内の重みを表すための第1の数フォーマットを決定する段階を含み、第1の数フォーマットは、第1の予め決められたビット長の第1の整数と第1の指数値とを含む。
【0006】
本方法は、更に、CNNの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第2の数フォーマットを決定する段階を含むことができ、第2の数フォーマットは、第2の予め決められたビット長の第2の整数と層に対して固定された第2の指数値とを含む。
【0007】
本方法は、更に、CNNの複数の層の各々に対して、層に対する重み値の分布に基づいて層内の重み値を表すための第3の数フォーマットを決定する段階を含むことができ、第3の数フォーマットは、第3の予め決められたビット長の第3の整数と層に対して固定された第3の指数値とを含む。
【0008】
本方法は、更に、CNNのハードウエア実装を構成する際に使用するために決定された数フォーマットを格納する段階を含むことができる。
【0009】
畳み込みニューラルネットワーク(CNN)のハードウエア実装を構成する方法を提供し、本方法は、CNNの少なくとも1つの層パラメータに対して、少なくとも1つの層の少なくとも一部分に対する層パラメータ値の分布に基づいて層パラメータを表すための数フォーマットを決定する段階を含み、数フォーマットは、第1の予め決められたビット長の第1の整数と第1の指数値とを含む。
【0010】
畳み込みニューラルネットワーク(CNN)のハードウエア実装を構成する方法を提供し、本方法は、CNNの複数の層の各々に対して、層に対する重み値の分布に基づいて層内の重み値を表すための第1の数フォーマットを決定する段階であって、第1の数フォーマットが、第1の予め決められたビット長の第1の整数と層に対して固定された第1の指数値とを含む上記決定する段階と、CNNの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第2の数フォーマットを決定する段階であって、第2の数フォーマットが、第2の予め決められたビット長の第2の整数と層に対して固定された第2の指数値とを含む上記決定する段階と、CNNのハードウエア実装を構成する際に使用するために決定された数フォーマットを格納する段階とを含む。
【0011】
畳み込みニューラルネットワーク(CNN)のハードウエア実装を構成するためのコンピュータシステムを提供し、コンピュータシステムは、CNNの複数の層の各々に対して、層内の重み値の分布に基づいて層内の重み値を表すための第1の予め決められたビット長の第1の整数と層に対して固定された第1の指数値とを含む第1の数フォーマットを決定し、CNNの複数の層の各々に対して、層に対して予想されるデータ値の分布に基づいて層内のデータ値を表すための第2の予め決められたビット長の第2の整数と層に対して固定された第2の指数値とを含む第2の数フォーマットを決定し、かつCNNのハードウエア実装を構成する際に使用するためのために決定された数フォーマットを格納するように構成される。
【0012】
上述の方法及びシステムは、集積回路上のハードウエアに具現化することができる。CNNのハードウエア実装を集積回路製造システムで製造する方法を提供することができる。集積回路製造システム内で処理された時にCNNのハードウエア実装を製造するようにシステムを構成する集積回路定義データセットを提供することができる。処理された時に、レイアウト処理システムをしてCNNのハードウエア実装を製造するための集積回路製造システムに使用される回路レイアウト記述を発生させる集積回路のコンピュータ可読記述を格納した非一時的コンピュータ可読ストレージ媒体を提供することができる。
【0013】
CNNのハードウエア実装を記述するコンピュータ可読集積回路記述を格納した非一時的コンピュータ可読ストレージ媒体と、CNNのハードウエア実装を具現化する集積回路の回路レイアウト記述を発生させるために集積回路記述を処理するように構成されたレイアウト処理システムと、回路レイアウト記述に従ってCNNのハードウエア実装を製造するように構成された集積回路発生システムとを含む集積回路製造システムを提供することができる。
【0014】
あらゆる上述の特許請求の範囲に主張する方法を実行するためのコンピュータプログラムコードを提供することができる。コンピュータシステムで実行された時に、コンピュータシステムをしてあらゆる上述の特許請求の範囲に主張する方法を実行させるコンピュータ可読命令を格納した非一時的コンピュータ可読ストレージ媒体を提供することができる。
【0015】
上述の特徴は、当業者には明らかであろうが適切な場合に組み合わせることができ、かつ本明細書に説明する実施例の態様のいずれとも組み合わせることができる。
【0016】
ここで実施例を添付図面を参照して詳細に以下に説明する。
【0017】
添付図面は、様々な実施例を示している。当業者は、図面内に図示の要素境界(例えば、ボックス、ボックスのグループ、又は他の形状)が境界の一例を表すことを認めるであろう。一部の実施例では、1つの要素が複数の要素として描かれる場合があり、又は複数の要素が1つの要素として描かれる場合がある。共通参照番号は、適切な場合に図を通して類似の特徴を示すのに使用される。
【図面の簡単な説明】
【0018】
【
図1】畳み込みニューラルネットワークに使用するデータの構造の例を示す図である。
【
図2】畳み込みニューラルネットワークの例示的ハードウエア実装を示す図である。
【
図3】
図2に示す畳み込みエンジンの例を示す図である。
【
図4】畳み込みニューラルネットワークのハードウエア実装を使用するために構成するための例示的処理を示す図である。
【
図5a】CNNの例示的層に対する重み値分布を示す図である。
【
図5b】CNNの例示的層に対する重み値分布を示す図である。
【
図5c】CNNの例示的層に対するデータ値分布を示す図である。
【
図5d】CNNの例示的層に対するデータ値分布を示す図である。
【
図6a】重み調整前の例示的重み値分布を示す図である。
【
図6b】重み調整後の例示的重み値分布を示す図である。
【
図6c】
図4の処理の段階に従って層に対する数フォーマットを決定する例示的処理を示す図である。
【
図7】変換された数フォーマットを使用して畳み込みを実行するように構成された畳み込みブロックの概略例を示す図である。
【
図8】CNNのハードウエア実装が実施されるコンピュータシステムを示す図である。
【
図9】CNNのハードウエア実装を具現化する集積回路を発生させるための集積回路製造システムを示す図である。
【発明を実施するための形態】
【0019】
以下の説明は、当業者が本発明を製造かつ使用することを可能にするために一例として提示するものである。本発明は、本明細書に説明する実施形態に限定されず、開示する実施形態への様々な修正は、当業者に明らかであろう。
【0020】
ここで実施形態を以下に単に例示的に説明する。
【0021】
畳み込みニューラルネットワーク(CNN)は、コンピュータビジョンタスクを含む信号処理タスクをCNNが実行することを可能にするために重みを関連付けた複数の相互接続された層を含む人工ニューラルネットワークの形態である。CNNの機能は重みによって完全に表現される。一部の例において、入力画像を受信するようにCNNを構成することができる。
【0022】
CNNで利用されるデータのフォーマットの例示的概要を
図1に示している。
図1を見て分るように、CNNに使用されるデータのフォーマットは、複数の平面から作られる。入力データをデータのP平面として配置することができ、ここで各平面は次元xyzを有する。CNNは、複数の層を含み、その各々には複数のフィルタw
0...w
nが関連付けられる。フィルタw
0...w
nの各々は、m×n×Pの次元を有し、かつ
図1に示すように方向s及びtのいくつかの段階にわたる畳み込み演算に従って入力データに適用される。
【0023】
上述のように、各層には複数のフィルタw
0...w
nを関連付けることができる。本明細書に使用する重みは、フィルタ、フィルタ重み、又は係数と呼ぶことができる。フィルタ重みの数及び値は、第1の層内の重みの数がn1であり、第2の層内の重みの数がn2である場合に、第1の層に対して重みの数を
として定義することができ、第2の層に対して重みの数を
として定義することができるように層の間で変えることができる。
【0024】
CNNの複数の層に対して、この層の入力データは、この層に関連付けられた重みを使用してこの層に対する入力データを畳み込むことによって処理される。例えば、CNNがビジョン用途に利用される場合に、第1の層では、「入力データ」は、一部の実施例では画像とすることができるCNNへの初期入力と考えることができる。第1の層は、入力データを処理し、かつ第2の層に渡される中間データの第1のセットを発生させる。中間データの第1のセットはまた、データのいくつかの平面の形態を取る場合がある。中間データの第1のセットは、第1の中間データを処理して第2の中間データの形態の出力データを生成する第2の層の入力データを形成すると考えることができる。CNNが第3の層を含有する場合に、第3の層は、入力データとして第2の中間データを受信してこのデータを処理し、出力データとして第3の中間データを生成する。従って、本明細書での入力データへの参照は、いずれの層に対しても入力データへの参照を含むものと解釈することができる。例えば、入力データという語は、特定の層の出力及び次の層への入力である中間データを指すことができる。これは、CNNの出力と考えることができる出力データを最終層が生成するまで繰り返される。
【0025】
図2は、本発明の開示によりCNNを実施するように構成されたハードウエア実装200を示している。ハードウエア実装は、実施されるCNNを定めるデータを受信するように構成され、かつCNNを実施するために入力データを処理するようにデータ定義に従って作動するように構成されたデジタル論理回路を含む。従って、ハードウエア実装は、1又は2以上のCNNを実施するための構成可能なハードウエアであると考えることができる。この点で、本明細書でのCNNのハードウエア実装への参照は、受信した構成データに従って入力データに対して演算することによってCNNを実施するように構成されたハードウエアへの参照である。ハードウエア実装自体は、特定のCNNを実施するように必ずしも構成されず、CNNの特定の構成データを用いて必ずしも事前ロードされない。例えば、CNNは、事前ロードされたもの(又はハードコード重みデータ及び層定義)を含む必要はない。従って、ハードウエア実装は、受信した構成データに基づいていずれのCNNも実施するように構成される。従って、構成データ(本明細書では指令データとも呼ぶ)は、含まれることになる層の数、及び重みデータのサイズ及び値、並びに入力データの予想されるフォーマットを含む実施されることになる特定のCNNを定義する。
【0026】
CNN及びCNNがどのように処理されるかを定義するデータは、構成(又は指令)データ、重みデータ、及び入力データを含むことができる。ハードウエア実装は、CNNによって定義される作動を実行するために重みデータを使用して入力データを処理するように構成される。ハードウエア実装200は、メモリインタフェース210、入力バッファコントローラ215、指令復号器220、係数バッファコントローラ225、係数バッファ230、n畳み込みエンジン240、n累積器245、起動モジュール255、正規化モジュール265、共有バッファ270、及びプールモジュール275を含む。
【0027】
メモリインタフェース210は、ハードウエア実装200と外部メモリ(図示せず)の間のインタフェースを提供するように構成される。外部メモリは、ハードウエア実装200とは別のモジュールと考えることができ、又はハードウエア200に統合されると考えることができる。指令又は構成データは、例えば、重みのサイズ及び/又はフォーマット、及び入力データサイズ及びフォーマット、並びに外部メモリでの位置に関する情報を含むことができる。
【0028】
メモリインタフェース210は、外部メモリからCNN内での計算に使用される重みデータ及び入力データ、並びに指令情報を受信し、ハードウエア実装200の作動を制御するように構成される。受信した重み(本明細書では係数とも呼ぶ)は、係数バッファコントローラ225に渡され、受信した入力データは、入力バッファコントローラ215に渡される。受信した指令は、指令復号器220に渡され、これは、次に、指令を復号し、かつ続けて重み及び入力データがバッファに格納される方式を制御するための係数制御バッファコントローラ225及び入力バッファコントローラ215を含む制御情報をハードウエア実装の要素に発令するように構成される。
【0029】
外部メモリの読取り中にメモリインタフェース210を通じて外部メモリから受信される重み及び入力データは、単一層の一部分のみの重み及び入力データ、単一層を処理する場合に使用される重み及び入力データの全てを形成することができ、又は複数の層を処理するための重み及び入力データを含むことができる。例えば、外部メモリから受信される重みは、単一層の重みを形成することができ、受信される入力データは、単一層の入力データの一部分のみを形成することができる(逆も同様)。1又は2以上の層にわたるデータ及び重みのいずれの組合せも、メモリからの単一読取りで外部メモリから(例えば、バースト読取りを使用して)受信することができる。
【0030】
実際には、外部メモリからの単一読取りで受信する重み及びデータの数は、係数バッファ230及び入力バッファ235のサイズに依存することになる。重みは、係数バッファコントローラ225から係数バッファ230に渡され、受信したデータは、入力バッファコントローラ215から複数の入力バッファ235a-235nに渡される。入力バッファの数は、ハードウエア200の特定の実施に依存するが、いずれの値も取ることができる。入力データは、入力バッファ235a-235nの全てにわたって共有される。入力バッファの各々は、入力バッファの数が用途に応じて増加又は減少することができるように有効なバンクを形成する。
【0031】
各畳み込みエンジン240a-240nが入力データの有効な「バンク」の全てへのアクセスを必要とするので、入力バッファ235a-235nは、複数のマルチプレクサの各々に接続される。マルチプレクサの各々は、入力バッファの1つから出力を選択し、かつ選択された入力バッファから出力された値をそれぞれの畳み込みエンジン240a-240nに渡すように構成される。更に、係数バッファ230からの重みは、第2の入力として各畳み込みエンジン240a-240nに提供される。畳み込みエンジンは、係数バッファ230から受信した重みを使用して、受信した入力データに対して畳み込み演算を実行するように構成される。各畳み込みエンジン240a-240nの結果出力は、入力として複数の累積器245a-245nのそれぞれの累積器に提供される。乗算論理部310の複数の要素及び加算論理部320の複数の要素を含む畳み込みエンジン240nの例示的実施を
図3に示している。
【0032】
各累積器245a-245nは、累積バッファ250に接続される。累積バッファ250は、各累積器245a-245nから受信した累積結果を格納するように構成される。累積バッファ250は、メモリインタフェース210に接続される。従って、累積バッファ250は、メモリインタフェース210を通じて外部メモリにデータを送信かつ外部メモリからデータを受信するように構成される。特に、累積バッファ250は、以下に詳細に説明するようにメモリインタフェース210を通じて外部メモリから値を格納及び回復することができるように構成される。累積バッファ250は、累積器245a-245nの入力に接続され、累積計算が行われるように値を累積器245a-245nにフィードバックするように構成される。
【0033】
本出願の態様において、CNNのハードウエア実装に使用するための構成データ及び再フォーマット設定入力データを発生させる処理を以下に説明する。
【0034】
固定小数点フォーマット
一般的に、ソフトウエアツールがCNNの訓練フェーズ中に使用されて訓練データセットに基づいて層あたり1セットの重みを生成する。一部の構成では、一部の層内の重み値の一部は、他の手段、例えば、ウェーブレットベースによって発生させることができると考えられる。
【0035】
ニューラルネットワークを訓練するための多くの共通ソフトウエアツールによって発生される重みは、典型的には浮動小数点数フォーマットで発生される。浮動小数点計算を実行することによってCNNを実施するように構成されたCNNのハードウエア実装は、シリコン面積が大きい可能性があり、かつ対応する固定小数点計算を実施するためのハードウエアと比較すると浮動小数点計算を実施するように構成されたハードウエアの複雑さに起因して有意な電力消費を有する。
【0036】
CNNハードウエア実装の面積、電力消費、及びメモリ帯域幅を低減するために、ネットワークを定義するこれらの浮動小数点値は、浮動小数点フォーマットでの対応する計算よりも処理するのに単純な論理しか必要としない固定小数点フォーマットに変換することが望ましい。更に、本発明者は、CNNの各層のCNNの値を表すのに使用されるビットの数を精度を大きく損なうことなく低減することができることを認識している。例えば、同じ数のビットを使用して重み及び入力データを表すことができる。しかし、フィルタのサイズ及び数、並びにデータのサイズは、典型的には層によって異なる。従って、従来的な固定小数点数フォーマットは、付番フォーマットが一部の層で冗長ビットをもたらすことがあり、入力及び重み値の値の範囲が層の間で異なる場合があるので、CNN実装に使用するには不適切であることがある。更に、本発明者は、各層で表される値の範囲が層の間で異なる場合があり、従って、例えば、層毎ベースで表される数の精度を最適化するための範囲をもたらすことを認識している。
【0037】
一般的に、浮動小数点数フォーマットは、符号ビットs、指数e、及び1と2の範囲内の仮数mから構成される。浮動小数点フォーマットにおける有限値は、(-1)s2emとして表される。浮動小数点数は、数のサイズに比例した精度で大きい範囲の値を表すことができる。浮動小数点数では、指数の役割は、表された数のバイナリポイントの位置を移動することであると考えることができ、従って、「浮動」少数点という名前である。
【0038】
対照的に、固定小数点数は、それが表すことができる値の間隔にわたって一貫した精度を有する。固定小数点フォーマットで数を表すための一般的な方法は、整数ビットの予め決められた数nと分数ビットmを指定するQフォーマットの使用である。従って、数は、n+m+1ビット(符号ビットを含む)の総数を必要とするQn.mとして表すことができる。例示的Qフォーマットを以下の表に示している。
【0039】
【0040】
しかし、Qフォーマットは、数を表すのに使用されるビットの一部が冗長であると考えられるという欠点を有する。ある例では、数範囲[-0.125、0.125]は、3ビットの精度に対して表されることになる。この例示的範囲及び精度に対する望ましいQフォーマットは、Q0.5である。しかし、値の範囲が予め既知であると仮定する場合に、数の最初の2ビットは、Qフォーマットで表される値を決定する場合に決して使用されない。例えば、表現の最初の2ビットは、これらがそれぞれ0.5及び0.25を表し、従って、望ましい範囲の外側に入るので最終的な数に寄与しない。しかし、これらは、相対的なビット位置に起因して第3のビット位置(すなわち、0.125)及びそれを超える値を示すのに使用される。
【0041】
同様に、値[-64、64]を4ビットの精度に表す必要があることを例において仮定する。Q7.0のQフォーマットは、Qフォーマットで望ましい例示的な値を表現するのに使用しなければならない。しかし、数の最後の3ビット(すなわち、3つの最下位ビット)は、これらのビットが望ましい精度の外側の値を表すのでいずれの有用な情報も伝えない。言い換えれば、-64から64の範囲を表すために、7ビットが必要である(27が128であるので)。しかし、精度の僅か4ビットしか必要ないので(すなわち、24値が識別される)、残りのLSBは余分なレベルの精度を提供する。しかし、値の全範囲を表すためにMSBを指数位置7にしなければならないのでこれらのLSBビットを使用すべきである。上述のQフォーマットは、従って、一部のビットが有用な情報を伝えないので、CNNのハードウエア実装内に使用するには非効率な数フォーマットであると考えられる。
【0042】
従って、重み値及びデータ値を含む値を格納するためにCNNのハードウエア実装に使用するための異なる数フォーマットを以下に示す。特定の層に対して表される値の範囲を固定することができることを認識することにより、特定の層での全ての入力データ又は全ての重みデータによって共有される共通フォーマットを定義することができる。これは、使用される表現される値の範囲を示す数フォーマットを使用する必要がないことを意味し、以下に説明するように数を表す場合の精度の最適化を可能にする。
【0043】
以下に示す数フォーマットは、CNNを超える用途を有するが、値の決定可能な範囲に一般的に入る入力/重みデータの層に起因してCNNに関連の特定の用途を有する。上述のように、CNNを訓練することによって発生される重みは、典型的には浮動小数点フォーマットで生成される。しかし、有効なハードウエア実装(シリコン、電力消費、又は処理電力の点で)を生成するために、ハードウエアを固定小数点フォーマットに実施することが好ましい。従って、CNN出力の精度への影響を最小にしながら浮動小数点フォーマットから値を変換することが好ましい。
【0044】
CNNの一部のハードウエア実装では、各重みを表すのに使用される第1の固定ビット数及びCNN内のデータを表すのに使用される第2の固定ビット数を定めることが望ましい。CNN内のデータ及び重みを表すのに使用されるビットの数を事前定義することにより、ハードウエア実装を最適化することができる。例えば、畳み込みエンジンで実行される乗算及び累積演算は、組み合わされるビットの数に対して最適化することができ、以下に詳細に説明する。
【0045】
また、CNN実装では、重み及びデータの両方の値の分布が層によって異なるのは一般的である。更に、重みの値は、特定の層内のデータの値とは異なる場合がある。CNN内の重み及びデータを表すためにビットの固定数が与えられるとすると、各層内の重み及びデータの各々に個別の固定小数点フォーマットを定義することが好ましい。
【0046】
図4の方法は、CNNの構成データを生成して畳み込みを実行する場合に使用する数フォーマットを定義する方法を説明している。定義された数フォーマットは、CNNのハードウエア実装で値を表すのに使用される。本方法は、CNNを定める重みデータを生成するためにCNNの訓練が浮動小数点数を使用して実行される段階410で開始される。段階420で、CNNのハードウエア実装に使用される重みデータの固定小数点数フォーマット及び入力データの固定小数点数フォーマットが決定される。この段階では、各層の重み及び入力データの範囲が評価される。各層の重みデータの数フォーマット及び各層の入力データの数フォーマットが決定される。段階430で、段階410で実行された訓練処理に基づいて段階420で決定された数フォーマットを使用して表されたCNNの重み値を修正するために任意的な低精度重み調整が実行される。この結果、以下に詳しく説明するように修正された重み値を発生させることができる。段階440で、浮動小数点数フォーマットを使用して表現可能な値から段階420で決定された固定小数点数フォーマットを使用して表現可能な値に重み値及び/又は入力データを変換するために量子化段階が実行される。
【0047】
図4の段階410で、CNNの訓練フェーズが実行される。訓練フェーズは、典型的には、訓練データセットに基づくCNNの層の各々の重み値の最適化を伴う。訓練フェーズの結果として、CNNの層を定義する重みのセットが生成及び格納される。訓練フェーズは、CNNのハードウエア実装の発生の前にかつそれとは別に実行することができる。例えば、個別の物理デバイスを使用してCNNの訓練を実行することができる。CNNのハードウエア実装の発生は、CNNを定めるのに使用される値の知識に影響を受ける場合がある。例えば、重みのサイズ及び数は、CNNのハードウエア実装に実施される係数バッファ及び入力バッファのサイズに影響を与える場合がある。訓練フェーズは、典型的には発生された重みが浮動小数点数になるように浮動小数点数フォーマットで実行される。
【0048】
CNNを定義する浮動小数点重みを生成した状態で、本方法は段階420に進む。段階420で、重みデータ及び入力データに対して各層に使用される数フォーマットが決定される。特定の層に対する数フォーマットを識別する処理を説明する
図6cに関して段階420で実行される処理を詳細に説明する。従って、
図6cの処理は、CNNの各層に対して繰り返される。一般的に、段階420で重み及びデータ範囲選択が行われ、この範囲を使用して数フォーマットが決定される。
【0049】
段階421で層の各々に対してCNNに使用される(及び段階410で生成された)重みの値の範囲は、各層に対するフィルタ重み値の範囲(すなわち、分布)の推定値を取得するために解析される。更に、典型的な入力データ値の対応する解析が、各層に対する入力データ値の分布を推定するために解析される。重み及び入力データ値の推定された分布を使用して、各層に対する重み及び入力データ値を表す場合に使用する最適化数フォーマットが決定される。入力データ値の推定された分布は、例えば、CNNに使用する訓練データセット又は典型的な入力の既知のサンプルに基づく場合がある。CNNがビジョン用途に使用される場合に、典型的な入力の分布を推定するのに使用される入力データは、サンプル入力画像の形態を取ることができる。固定小数点数フォーマットによって表される値の範囲を決定するために、各層に使用される重み及びデータの分布に関する情報を取得するための重み及びデータの統計的解析を実行することができる。
【0050】
個別の固定小数点数フォーマットが、各層の重みデータ及び入力データに対して決定される。上述のように、層の入力データは、前の層の出力から形成される(第1の層を除いて)。従って、層の値の範囲は異なる場合があり、従って、数フォーマットは層によって異なる場合がある。一部の構成では、共通の固定小数点数フォーマットを層の間で共有することができる。
【0051】
段階421で、固定指数値が層の重みに対して決定される。CNNのハードウエア実装に使用される(及び以下に詳しく説明する)固定小数点数フォーマットは、符号付き整数仮数及び共通固定2のべき乗指数を使用する。固定小数点フォーマットは、整数ビット及び指数の数によって定められる。使用される符号付き整数のタイプは実施間で異なる場合がある一方で、本出願では2の補数が使用されるが、他の符号付き数フォーマットを使用することもできる。数フォーマットはまた、大域的に定義されたビット長に基づいて設定された固定ビット長仮数に基づくことができる。
【0052】
上述のように、
図4の段階420で、数フォーマットがCNNの各層の重みデータ及び入力データに対して決定される。
図6cの方法420の段階421で、CNN層内の重み値の範囲を表す固定指数が決定され、同じCNN層の入力データの範囲を表す固定指数が決定される。これについては以下に詳しく説明する。
【0053】
図5a及び5bは、CNNの重み値の例示的分布を示している。特に、
図5a及び5bは、CNNの重み値の例示的ヒストグラムを示し、重み値の異なる広がりを見ることができる。
【0054】
図5aは、ハードウエア実装に実施される例示的CNNの第2の層(層2)の重み値の分布を示している。
図5aを見て分るように、層2の重み値は、ゼロの値の周りに集中しており、約-0.25から約0.25に広がる。
【0055】
図5bは、同じCNNの55番目の層(層55)の重み値の別の例示的分布を示している。層55の重み値もゼロの値の周りに集中しているが、約-0.1から約0.1の小さい差を有する。これらの2つの層内の重み値の範囲が異なるので、層55に使用される重み値に異なる付番フォーマットを使用して層2の重みの範囲を表すことができる。データを表すのに利用することができるビットの予め決められた数が与えられると、表現される値の範囲に応じて精度を提供することができる。
【0056】
特定の層の重みに対する適切な数フォーマットを決定するために、層で表される重みの値の範囲に関する決定が上述のように行われる。段階412の第1の段階は、表現されることになる層の重みの分布における値の全範囲を可能にする2のべき乗の指数(すなわち、固定指数値)を決定する段階を含む。特定の層内の重み値が-0.1から0.1に分布する例では、2
-3=0.125及び-2
-3=-0.125であるので、値-3の指数の2のべき乗を使用することができ、これは完全に可能な値の範囲を含有する。選択された指数が値の範囲を完全に網羅する必要はないが、逆に範囲の許容可能なカバレージの予め決められたレベルを提供することができることは理解されるであろう。考えられる正確な尺度は、使用される統計的方法に依存する。当業者は、関わっている値の範囲を識別するための様々な手法を知っているであろう。別の例では、表現される値の範囲が-0.25から0.25(
図5aに図示)である場合に、2
-2=0.25及び-2
-2=-0.25であるので、-2の指数値を使用することができる。
【0057】
本明細書に説明する方法では、この指数値は、以下に詳しく説明するように2の補数仮数表現での「符号」ビットであると考えることができる有効な「MSB位置」を形成する。
【0058】
「符号」ビットを識別した状態で、全ての層にわたって、すなわち、ハードウエア内のCNNの実装に大域的にわたって重み/入力データの表現に対してCNNに使用するために事前に割り当てられたビットの数に基づいて、この層内の重み値に使用される指数及び仮数フォーマットを決定することができる。言い換えれば、ビットの大域的固定数が、全CNNにわたって定められ、各層の重みを表すための数フォーマットを決定するのに使用される。以下の例では、重みを表すためにネットワーク全体にわたって割り当てられたビットの数が4ビットであると仮定する。他の例示的CNN実装は、ビットの異なる数を使用することができる。
【0059】
図6cの方法420は、段階421から422に進み、段階422で段階421で決定された固定指数値がシフトされる。段階422は、「符号」ビットの右に指数の数を計数する段階(又は言い換えるとシフトする段階)を含む。特に、指数は、到達した指数値である「LSB指標」を識別するために右にn-1(ここでnはCNN内の重み値-例えば、4ビットを格納するために事前に定義されたビットの数である)値に計数(又はシフト)される。この例では、「LSB指標」は、以下に示すように-6であり、ここでn=4である。
【0060】
(表)
「LSB指標」の値を使用して数の固定小数点表現の指数値、すなわち、整数
*2
eを定めることができる。
【0061】
指数値のシフトを実行した状態で、上記数フォーマットの指数eは、CNNで値を表すのに使用されるビットの事前に定義された数に基づいて指数をシフトすることによって決定されたシフトLSB指標に設定される。従って、数フォーマットは、シフト指数値及び値「整数」に使用されるビットの数によって定義される。値「整数」は、nビットを使用して格納された整数値を表し、ここでnは、重み及び/又は入力データ(例えば、大域的に定められたビットの数)を格納するのに使用される予め決められたビットの数である。固定小数点フォーマットに変換される値では、値の整数成分の値は、数フォーマットの決定されたeに基づいて計算される。
【0062】
上述の表に示す例では、e=-6及び整数が4ビット整数を使用して表されるように固定される。従って、4ビットを使用して、2eによって乗算される値を決定することができる。上述の例を使用して、「0.078125」の浮動小数点値を表現しなければならない。上記に定義された例示的付番フォーマットを使用すると、e=-6及び整数が4ビットを含む場合に、値「0.078125」をビット「01012」を使用して表現することができる。この値は、2の補数、すなわち、値5における0101の値を値2e(すなわち、2-6)で乗算することによって識別され、0.078125を与える。
【0063】
同様に、e=-6である同じ例を使用すると、「-0.046875」の浮動小数点値を2の補数、すなわち、値-3で4つのビット「1101」だけを使用して表現することができる。理解されるように、与えられた層に対する異なる重み値の数を同じ数フォーマットを使用して表現することができる。同様に、整数成分を表すのに使用されるビットの数nを大域的に定めることができる。数フォーマットの指数値eが特定の層の全ての重みにわたって共通であるので、この層に数を一度定義するために指数値を格納するだけでよい。同様に、ビットの数nは、一度格納するだけでよい。従って、指数値eは、データポイントの値(例えば、重み又は入力データ項目)自体が格納される度に格納する必要はない。更に、この層内の各重み又は入力データ値には、Qフォーマットで同じ値を表すのに使用されるビットの数よりも小さい事前に定義されたビットの数nを割り当てることができる。他の整数(仮数)表現が可能であるが(符号及び大きさなど)、2の補数が本明細書に説明する例では使用される。
【0064】
各層では、指数値(本明細書ではLSB値とも呼ぶ)を決定及び格納することができる。更に、各層の重みの値を新しい数フォーマットによって定義された値の1つに量子化することができる。これに関しては下記に説明する。上述のハードウエア実装を参照すると、各層のLSB値(指数値)を外部メモリに格納し、以下に詳細に説明するように値を畳み込みエンジンに渡すことによってハードウエア実装を指令復号器が制御することを可能にするために指令復号器に渡すことができる。
【0065】
図6cを参照すると、段階422で層の特定の値範囲を表すのに使用される固定指数が重みデータに対して識別され、指数値が重み値の数フォーマットを定義するために既にシフトされている。上述の処理は、入力データ値の範囲に対して繰り返される。例えば、入力データ値の固定指数値は、段階423で特定の層の入力データ値の範囲に基づいて決定される。次に、決定された指数値は、段階424で大域的に定義されたビット幅に基づいてシフトされ、この層の入力データ値の数フォーマットを定義する。
【0066】
図6cの処理は、いくつかのシフトされた指数値が各層の重みデータ及び入力データの各々に決定されるまで繰り返される。個別の指数値e
j
wが複数の層の各層jの重み値に対して決定され、別の個別の指数値e
j
jが複数の層の各層jの入力データに対して決定されることは理解されるであろう。
【0067】
浮動小数点フォーマット内の数を固定小数点フォーマットに変換する類似の処理は、CNNで処理される入力データに対して実行される。層2及び55に対するデータ値の例示的分布が
図5c及び5dそれぞれに示されている。CNNの第1の層に対して、CNNの訓練を実行するのに使用される訓練データセットを使用して第1の層のLSB値(指数値)を定義することができることは理解されるであろう。重みに対するのと類似の方式で、統計的解析が実行され、LSB値(指数値)が各層に対して決定される。
【0068】
しかし、CNNの中間層に渡されるデータに対して、生成された結果を即座に捕捉し、すなわち、次の層への入力値を形成する層からの出力値を決定しなければならない。
図5a及び5bに示すように、中間層におけるデータ値の分布は、層の間で大きく異なる場合がある。従って、データの表現におけるフォーマットの範囲を最適化することが望ましい。
【0069】
重みの値を表現するための数フォーマットの決定とは異なり、各層内のデータ値の数表現は、演算中の実際の入力データが未知であるので、各中間層で生成されるデータの予想される範囲に関する推定に基づくものと考えることができる。
【0070】
CNNの各層で予想される入力データの値の範囲を決定するための1つの方式は、生成されたCNNを通じて訓練データセットを渡し、各層で生成された値を捕捉することである。訓練データセットは、予想される入力の値に関する指示を与える代理の入力値を含有する。捕捉された値から、可能な値の範囲の推定が行われ、本方法は、重みに関して上述したように進む。
【0071】
段階420を完了した状態で、新しい数フォーマットがCNNの各層に使用される重み及び入力データに対して定義され、CNNをこれらの数フォーマットによる方式でハードウエア200に実施することができる。CNNをハードウエアに実施するために、段階410で生成された浮動小数点重みを例えば量子化の処理を使用して新しい数フォーマットに変換することができる。新しい数フォーマットは、ハードウエア実装によってロード可能な構成データとして格納し、値がCNN内で格納又は処理される方式を定義することができる。例えば、この方式を利用することにより、
図2のハードウエア実装200は、係数及び入力バッファの利用可能なスペースを十分に利用して、これらの値が格納される精度を最適化すると同時にそれぞれの係数及び入力バッファに重み及び入力データ値の数を格納することができる。従って、外部メモリ対話の数を低減することができる。
【0072】
量子化
任意的な低精度重み調整430段階を量子化/変換値に関して実行することができる。重み調整を実行するために、浮動小数点数は、決定された固定小数点数フォーマットに従って量子化すべきである。
【0073】
図4の段階420に従ってCNNに使用される数フォーマットを生成した状態で、量子化440が、上述の固定小数点数フォーマットによって表現可能な値の1つにCNNに使用される重み値を量子化するために実行される。新しい固定小数点フォーマットで表現される重み値は、オリジナルの浮動小数点フォーマットに関する低減された精度を有する場合があるので、量子化誤差が生じることがある。特定の層内の重み値は、以下の式に従って量子化される。
【0074】
上述の式では、値Xmax及びXminは、クランピングによって達成された固定小数点フォーマットの最高及び最低表現可能数をそれぞれ表している。関数Q(α)は、以下に説明する最近傍丸め操作関数のような丸め操作関数を表している。上述の式は、新しい固定小数点数フォーマットで達成することができる最近傍利用可能固定小数点数に値を量子化し、範囲の外側の入力に対する最も近い表現可能値にクランピングする。ゼロに向けた丸め操作は、データがネットワークを進んでいく場合に量子化誤差を悪化させることがある。最近傍レベル丸め操作は、量子化誤差及び誤差の悪化を低減する。
【0075】
最近傍量子化の使用例では、全ての値が-1と1の間の均一分布から引き出される場合に2つのランダム仮数A及びBを考える。-4のLSB値(指数値e)を有する8ビット固定小数点数が使用される。
は浮動仮数であり、
は、対応する8ビット固定小数点仮数である。
【0076】
従って、最近傍からゼロに向けた丸め操作への切り換えは、浮動と固定小数点仮数の間の差を二倍にするが、この積は、量子化誤差の複合に起因してより大きい誤差を有する。この影響は、大きい仮数及び多数の行列乗算によって悪化する。
【0077】
段階440で新しい固定小数点数フォーマット(各層に対して1フォーマット)に対応する値に各層内の重み値を量子化した状態で、新しく量子化された重みは、段階450に示すように処理のためのCNNのハードウエア実装によってアクセス可能なメモリに格納される。例えば、量子化された重みは、CNNのハードウエア実装に接続するメモリに格納される。CNNのハードウエア実装200は、各層を処理する時にメモリから重み値をロードし、生成された数フォーマットで重み値に対して演算することができる。
【0078】
入力データのための層当たりの数フォーマットも決定され、CNNのハードウエア実装への入力データ、すなわち、CNNの第1の層への入力も、決定された数フォーマットでメモリに格納される。一部の構成では、各層の入力データに使用される数フォーマットを示すデータも、CNNのハードウエア実装によってアクセス可能なメモリに格納される。従って、CNNのハードウエア実装は、特定の層に対する数フォーマットを読み取ることができる。次に、CNNのハードウエア実装は、処理される現在の層に対する数フォーマットに従って入力データを処理するように構成することができる。続いて生成されるデータ、すなわち、次の層への入力を形成する各層で生成されたデータも定義され、かつメモリに格納された数フォーマットに基づいてこの層に対するフォーマットで処理される。
【0079】
数計算
上述の固定小数点付番フォーマットは、整数及び指数固定小数点計算の整数ベースの実施に使用することができる。
【0080】
第1の固定小数点フォーマット内の数aから第2の異なる方式c(すなわち、aのビット及び/又は指数の数は、cのビット及び/又は指数の数とは異なる)の同じ数への変換は、整数における計算シフト及びオーバーフローの場合はクランプを必要とする。≫e及び≪eは、それぞれeビットの右及び左シフトである。aiは、aの整数部分であり、eaはaの指数である。
【0081】
正オーバーフローが起こる場合に、結果はXmaxにクランピングされるべきであり、負オーバーフローが起こる場合に、Xminにクランピングされるべきである。Xmaxは、固定小数点フォーマットにおける最高表現可能数であり、Xminは、最低表現可能数である。2の補数では、Xmax=011...1及びXmin=100...0である。
【0082】
演算数a及びbのフォーマット(すなわち、ビットn及び指数eの数)及び結果cが全て同一である場合に、基礎演算は以下のようなる。
【0083】
(表)
上述の演算の全てが整数計算である。オーバーフローの場合に、数は、X
max又はX
minにクランピングされる。乗算の場合に、結果の指数は、ビットをシフトする代わりに調節することができ、数を異なる指数で乗算する時に有用になる。
【0084】
(表)
異なるフォーマットによる数の加算及び減算の場合に、演算数のタイプは、まず結果のタイプに変換すべきである。
【0085】
固定小数点畳み込み層
低精度固定小数点フォーマットで畳み込み層を実施する段階は、いくつかの理由でCNNで畳み込み層を実施する改善された方法を提供することができる。例えば、数ビットをCNNのハードウエア実装を演算するのに使用されるメモリ帯域幅を低減する外部メモリとCNNのハードウエア実装との間で転送しなければならない。上述の整数計算論理部は、畳み込み操作を実施するのに必要なハードウエア論理部のサイズ及び複雑さを低減する畳み込み計算(上述の畳み込みエンジンなど)内に実施することができる。更に、重みデータ及び入力データを格納するのに必要なビットの数が、対応する浮動小数点数表現よりも又は上述のQフォーマット固定小数点数表現よりも少ないので、CNNのハードウエア実装に必要なバッファはより小さい。
図2に対応するCNNの上述のハードウエア実装を参照すると、係数及びデータバッファ、並びに累積バッファを小さくすることができる。
【0086】
生成された数フォーマットに従って畳み込み計算を実行するように構成された畳み込みブロック700の図式の実施例が
図7に関して示されている。数フォーマットの指数を形成し、層毎に一度だけ格納されるデータ720a及び重み720b指数は、畳み込みが行われる前にCNNのハードウエア実装に送られる(重み及びデータビットの数n及びmは、ネットワーク全体に対して固定されると仮定される)。上述の例示的ハードウエア実装では、数フォーマットの指数を指令として指令復号器220に提供し、各層で必要とされる時に使用することができるように格納することができる。
【0087】
畳み込み演算ハードウエア要素730は、重みとデータベクトルの間の内積を実行するように構成され、換言すると、畳み込み演算ハードウエア要素730は、
図3に関して図示のように乗算と累積から全て構成される。これは、整数計算で実行することができ、結果を累積バッファに格納することができる。累積バッファに必要な指数値は、データ及び重みの両方から指数を加算することによって計算することができる。入力データは、入ってくる指数及びデータ指数に応じて正確な範囲に入れる必要があり、これは、層への入力での「刈り取り」ユニット710の目的である。
【0088】
上述の構成では、累積器サイズは、nビットとmビット整数間の内積の結果を収容するのに十分大きくなくてはならない。一例では、データAに割り当てられる予め決められた固定ビット長を9ビットにすることができ、重みBに割り当てられる予め決められたビット長を5ビットにすることができる。この例では、累積器は、少なくとも13ビットのサイズにしなければならず、可能であれば畳み込みカーネルのサイズに応じてより大きくしなければならない。各層では、この層の値を表すのに使用される指数を変えることができる。従って、A及びBは層によって異なる場合がある。
【0089】
重み調整
CNNのハードウエア実装に使用する構成データを生成して数フォーマットを定義する方法が上記に示されている。上述のように、CNNを定義する重みを低精度ターゲットに適応させることができる重み調整430の任意段階を
図4の方法の一部として実施することができる。段階430は、段階440で得られた量子化値を受信する段階及びCNNの更に別の訓練を実行することによって重み値を修正する段階を伴う。重み値の調整は、本発明の開示の固定小数点数表現を使用して実施されるCNNの分類誤差を低減することができる。本明細書に説明する例では、各々が複数の重み値を有する複数の層によって定義される事前訓練されたネットワークは、
図4の段階410で上述のように従来の浮動小数点ソフトウエアツールを使用して準備されていたと仮定する。更に、固定小数点数フォーマットの重み及び入力データ指数が段階420で決定され、重み及びデータの事前定義されたビット長が設定されていたと仮定する。
【0090】
CNNの訓練(段階410で行われる訓練など)は、典型的には、分類精度が最大化されるまで数十万の解法段階(大きいネットワークの場合は数百万)にわたって行われる。各段階中に、一般的に勾配降下又はこの変形を使用して、分類誤差が最小になるように重みを更新する前に分類誤差がバッチ(一部の用途では50-100画像)に統合される。
【0091】
本発明の開示の一部の例では、重み調整は、更に別の重み調節を提供するための訓練の追加の段階である。重み調整訓練フェーズは、初期浮動小数点訓練よりも遥かに少ない段階しか必要としないが、決定された固定小数点数フォーマットを使用する時には分類誤差の低減を可能にする。浮動小数点から固定小数点フォーマットへの有効な量子化は、格納された重み値の精度の変化をもたらすことができることは理解されるであろう。重みデータを表すのに使用されるビットの数に応じて、重み値は、対応する浮動小数点表現に対して量子化することができる。重み調整の方法は、変換された重み値に基づいてCNNを再訓練するのに使用される。
【0092】
より具体的には、N段階毎に、CNNの重みの部分集合Fは、浮動小数点数フォーマットから本発明の開示の固定小数点数フォーマットに重み値を変換するための上述の量子化方法を使用してその最近傍量子化レベルに設定される。一部の実施形態において、重みの部分集合は、重みの小さい割合を表している。量子化される重みは、ランダムに選択することができる。次に、ネットワークは、量子化によって導入される分類誤差を低減するために更にN段階訓練される。N及びFの適切な選択に対して、全体としてネットワークの量子化誤差が時間と共に低減され、同時に分類精度を維持し、重みヒストグラムが望ましい櫛状関数に収束する。
図6aは、重み調整の前の重み値の例示的分布を示し、
図6bは、重み調整後の重み値の例示的分布を示している。
【0093】
重み調整方法のための例示的疑似コードを以下に示す。
【0094】
上述の
図4の段階450に従って調整された重み値は、メモリにロードしてCNNのハードウエア実装によってアクセス可能である。
【0095】
本明細書に説明する新しい数フォーマットを生成する方法が
図2に示すハードウエア実装に適用可能であることは理解されるであろう。しかし、本明細書に説明する方法はまた、CNNの他のハードウエア実装、並びにCNNのソフトウエア実装に適用可能であり、固定小数点計算が実行される。本明細書に説明する数フォーマットをCNNを通じて利用する必要はなく、CNNの一部分だけに使用することができることも理解されるであろう。例えば、CNNの内部バッファ内の重み及び入力データ値を格納するために数フォーマットを使用することができ、計算を実行するように修正又は拡張することができる。
【0096】
CNNに使用される数フォーマットを決定するために本明細書に説明する方法が重み及び入力データに制限されるようには考えないことは理解されるであろう。勿論、層毎ベースで(又は勿論、複数の層にわたって)定義される多くの他の層パラメータには、値の分布を評価することによって上述の方法で数フォーマットを割り当てることができる。例えば、上述の方法に従って決定された通りにバイアスを数フォーマットに格納することができる。更に、バッチ正規化の処理は、上述の方法に従って適用することができる倍率を使用する。本明細書に説明するいずれの任意的な特徴もこれらの層パラメータに適用することができる。
【0097】
これに加えて、上述の方法は層全体に対する固定指数値を決定することに関連し、上述の方法はまた、1つの層の共有される指数ではなく1つのフィルタに基づいて適用可能である。例えば、重みは、層のフィルタ間でかなり異なる場合がある。フィルタの第1の部分集合にある数フォーマット及びフィルタの第2の部分集合に異なる数フォーマットを生成することにより、数フォーマットが、1つの層の共有される指数方式とは異なる1つのフィルタで定義される。従って、範囲が最も大きい係数を有するフィルタによって支配されることがないので、小さい係数を有するフィルタの高い精度を提供する。フィルタ毎の方法を融合された方式で層毎の方法に組み合わせることができ、それによって一部の層だけが固定小数点フォーマットを有し、一部のフィルタが固定小数点フォーマットを有する。この手法の実施の任意的特徴及び方式は、上述の類似の特徴に対応する。これらの手法は、上述のハードウエア実装200に実施することができる。
【0098】
図8は、本明細書に説明するCNNのハードウエア実装を実施することができるコンピュータシステムを示している。更に、
図8のコンピュータシステムのようなコンピュータシステムは、CNNのハードウエア実装によって使用する数フォーマット及び/又は変換された値を格納するために
図4及び/又は6の方法を実施するように構成することができる。
図4及び/又は6の方法を実施するように構成されたコンピュータシステムは、
図2に示すCNNのハードウエア実装を実施するように構成されたコンピュータシステムとは異なる場合があることは理解されるであろう。
【0099】
このコンピュータシステムは、CPU802、GPU804、メモリ806、及びディスプレイ816、スピーカ818、及びカメラ817のような他のデバイス814を含む。処理ブロック810は、GPU804上に実施される。他の例では、処理ブロック810は、CPU802上に実施することができる。処理ブロック810はまた、個別のユニット(図示せず)に実施することができる。処理ブロック810は、ハードウエア実装200を実施するように構成されたデジタル論理部を含むことができる。ハードウエア実装200は、GPU804又はCPU802のような外部プロセッサ、又は示していない別のプロセッサによって制御することができる。コンピュータシステムの構成要素は、通信バス802を通じて互いに通信することができる。ストア812は、メモリ806の一部として実施される。
【0100】
CNNのハードウエア実装200及び
図1から8に示すCNNのハードウエア実装を構成する方法は、いくつかの機能ブロックを含むように示されている。これは単に概略であり、そのようなエンティティの異なる論理要素間の厳密な区分を定めるように意図していない。各機能ブロックは、あらゆる適切な方法で提供することができる。CNNのハードウエア実装によって形成される本明細書に説明する中間値は、あらゆる点でCNNのハードウエア実装によって物理的に生成する必要はなく、単に入力と出力間でCNNのハードウエア実装によって実行される処理を便宜上説明する論理値を表すことができることは理解されるものとする。
【0101】
本明細書に説明するCNNのハードウエア実装は、集積回路のハードウエアに具現化することができる。本明細書に説明するCNNのハードウエア実装は、本明細書に説明する方法のいずれも実行するように構成することができる。一般的に、上述の機能、方法、技術、又は構成要素のいずれも、ソフトウエア、ファームウエア、ハードウエア(例えば、固定論理回路)、又はこれらのあらゆる組合せに実施することができる。「モジュール」、「機能」、「構成要素」、「要素」、「ユニット」、「ブロック」、及び「論理部」という語は、ソフトウエア、ファームウエア、ハードウエア、又はこれらのあらゆる組合せを一般的に表すために本明細書に使用される場合がある。ソフトウエア実装の場合に、モジュール、機能、構成要素、要素、ユニット、ブロック、又は論理部は、プロセッサで実行される指定されたタスクを実行するプログラムコードを表している。本明細書に説明するアルゴリズム及び方法は、プロセッサにアルゴリズム/方法を実施させるコードを実行する1又は2以上のプロセッサによって実施することができる。コンピュータ可読ストレージ媒体の例には、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、光学ディスク、フラッシュメモリ、ハードディスクメモリ、及び磁気、光学などの技術を使用することができる他のメモリデバイスが含まれ、命令又は他のデータを格納して、機械によってアクセス可能である。
【0102】
本明細書に使用するコンピュータプログラムコード及びコンピュータ可読命令という語は、機械言語、変換言語、又はスクリプト言語で表現されるコードを含むプロセッサに対して実行可能なコードのいずれの種類も指している。実行可能コードは、バイナリコード、機械コード、バイトコード、集積回路を定めるコード(ハードウエア記述言語又はネットリストなど)、及びC、Java、又はOpenCLのようなプログラミング言語コードで表されるコードを含む。実行可能コードは、例えば、仮想機械又は他のソフトウエア環境で適切に実行、処理、解釈、コンパイル、実行された時に、実行可能コードがサポートされたコンピュータシステムのプロセッサをしてコードによって指定されたタスクを実行させるあらゆる種類のソフウエア、ファームウエア、スクリプト、モジュール、又はライブラリとすることができる。
【0103】
プロセッサ、コンピュータ、又はコンピュータシステムは、命令を実行することができる処理機能を有するあらゆる種類のデバイス、機械、又は専用回路、又はこれらの集合又は一部とすることができる。プロセッサは、CPU、GPU、システムオンチップ、状態機械、媒体プロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理アレイ、フィールドプログラマブルゲートアレイ(FPGA)のようなあらゆる種類の汎用又は専用プロセッサとすることができる。コンピュータ又はコンピュータシステムは、1又は2以上のプロセッサを含むことができる。
【0104】
望ましい機能を実行するために集積回路を設計するのに又はプログラマブルチップを構成するのに使用される場合に、HDL(ハードウエア記述言語)ソフトウエアのような本明細書に説明するハードウエアの構成を定めるソフトウエアを含有することも意図される。すなわち、集積回路製造システムにおいて処理される時に本明細書に説明する方法のいずれかを実行するように構成されるCNNのハードウエア実装を製造するように、又は本明細書に説明するあらゆる装置を含むCNNのハードウエア実装を製造するようにシステムを構成する集積回路定義データセットの形態でコンピュータ可読プログラムコードを符号化するコンピュータ可読ストレージ媒体を提供することができる。集積回路定義データセットは、例えば、集積回路記述とすることができる。
【0105】
従って、本明細書に説明するようなCNNのハードウエア実装を集積回路製造システムで製造する方法を提供することができる。更に、集積回路製造システムで処理された時にCNNのハードウエア実装を製造する方法を実行させる集積回路定義データセットを提供することができる。
【0106】
集積回路定義データセットは、例えば、ネットリスト、レジスタ転送レベル(RTL)コードとして、Verilog又はVHDLのようなハイレベル回路表現として、及びOASIS(RTM)及びGDSIIのような低レベル回路表現として含むあらゆるレベルの集積回路を定めるハードウエア記述言語としてプログラマブルチップを構成するためのコードとしてのコンピュータコードの形態とすることができる。表現によって定義されるように集積回路の製造定義を生成するために、論理的に集積回路(RTLなど)を定めるハイレベル表現は、回路要素の定義及びこれらの要素を結合するための規則を含むソフトウエア環境の関連で集積回路の製造定義を生成するように構成されたコンピュータシステムにおいて処理することができる。機械を定めるためにコンピュータシステムにおいて実行するソフトウエアを備えた場合に一般的であるように、1又は2以上の中間ユーザ段階(例えば、指令、変数などを提供)をこの集積回路の製造定義を生成するために集積回路を定めるコードを実行するための集積回路の製造定義を生成するように構成されたコンピュータシステムに対して要求することができる。
【0107】
CNNのハードウエア実装を製造するように本発明のシステムを構成するために集積回路製造システムにおいて集積回路定義データセットを処理する実施例を
図9に関してここで説明する。
【0108】
図9は、レイアウト処理システム904及び集積回路発生システム906を含む集積回路(IC)製造システム902の実施例を示している。IC製造システム902は、IC定義データセット(例えば、本明細書の実施例のいずれかで説明したCNNのハードウエア実装を定める)を受信し、IC定義データセットを処理し、かつIC定義データセットに従ってICを発生させる(例えば、本明細書の実施例のいずれかに説明したCNNのハードウエア実装を具現化する)ように構成される。IC定義データセットの処理は、本明細書の実施例のいずれかで説明したCNNのハードウエア実装を具現化する集積回路を製造するようにIC製造システム902を構成する。
【0109】
レイアウト処理システム904は、IC定義データセットを受信及び処理して回路レイアウトを決定するように構成される。IC定義データセットから回路レイアウトを決定する方法は、当業技術で既知であり、例えば、論理構成要素(例えば、NAND、NOR、AND、OR、MUX、及びFLIP-FLOP構成要素)の点で、発生される回路のゲートレベル表現を決定するためにRTLコードを合成する段階を含有することができる。回路レイアウトは、論理構成要素の位置情報を決定することによって回路のゲートレベル表現から決定することができる。これは、回路レイアウトを最適化するために自動的に又はユーザの介入により実行することができる。レイアウト処理システム804が回路レイアウトを決定した時に、レイアウト処理システム904は、回路レイアウト定義をIC発生システム906に出力することができる。回路レイアウト定義は、例えば、回路レイアウト記述とすることができる。
【0110】
IC発生システム906は、当業技術で既知のように回路レイアウト定義に従ってICを発生させる。例えば、IC発生システム906は、ICを発生させるための半導体素子製造工程を実施することができ、半導体素子製造工程は、半導体材料から構築されたウェーハに電子回路が徐々に生成されていく過程のリソグラフィック及び化学的処理段階の複数段階シーケンスを含有することができる。回路レイアウト定義は、回路定義に従ってICを発生させるためのリソグラフィック処理に使用することができるマスクの形態とすることができる。これに代えて、IC発生システム906に提供される回路レイアウト定義は、ICを発生させる場合に使用する適切なマスクを形成するためにIC発生システム906を使用することができるコンピュータ可読コードの形態とすることができる。
【0111】
IC製造システム902によって実行される異なる処理は、1つの位置で例えば1つの当事者によって全てを実施することができる。これに代えて、IC製造システム902は、処理の一部が異なる位置で実行することができるように分散システムとすることができ、異なる当事者によって実行することができる。例えば、(i)発生される回路のゲートレベル表現を形成するためにIC定義データセットを表すRTLコードを合成する段階、(ii)ゲートレベル表現に基づいて回路レイアウトを発生させる段階、(iii)回路レイアウトに従ってマスクを形成する段階、及び(iv)マスクを使用して集積回路を製造する段階の一部は、異なる位置で及び/又は異なる当事者によって実行することができる。
【0112】
他の実施例では、集積回路製造システムにおける集積回路定義データセットの処理が、回路レイアウトを決定するためにIC定義データセットを処理する必要なくCNNのハードウエア実装を製造するように本発明のシステムを構成することができる。例えば、集積回路定義データセットは、FPGAのような再構成可能プロセッサの構成を定めることができ、このデータセットの処理は、この定義された構成を有する再構成可能プロセッサを生成するように(例えば、FPGAに構成データをロードすることにより)IC製造システムを構成することができる。
【0113】
一部の実施形態において、集積回路製造定義データセットが、集積回路製造システムにおいて処理された時に、集積回路製造システムに本明細書に説明したデバイスを発生させることができる。例えば、集積回路製造定義データセットによる
図9に関して上述した方法での集積回路製造システムの構成は、本明細書に説明したデバイスを製造させることができる。
【0114】
一部の実施例では、集積回路定義データセットは、データセットで定義されたハードウエア、又はデータセットで定義されたハードウエアと組み合わせて実行されるソフトウエアを含むことができる。
図9に示す実施例では、集積回路の製造段階で、集積回路定義データセットで定義されたプログラムコードに従ってこの集積回路にファームウエアをロードするか、又は他に集積回路と共に使用するプログラムコードを集積回路に提供するようにIC発生システムを集積回路定義データセットによって更に構成することができる。
【0115】
本出願人は、本明細書により、これらの特徴又は組合せが当業者の共通する一般的な知識の点から全体として本明細書に基づいて実行することができる程度まで、そのような特徴又は特徴の組合せが本明細書に開示するいずれの問題も解決するか否かにかかわらず、本明細書に説明する各個々の特徴及び2又は3以上のこれらの特徴のいずれの組合せも個別に開示している。以上の説明の観点から、様々な修正を本発明の範囲内で行うことができることは当業者には明らかであろう。
【符号の説明】
【0116】
400 数フォーマットを定義する方法
410 浮動点訓練
420 数フォーマットの決定
430 低精度重み調整
440 量子化