(57)【要約】  システム、集積回路、およびニューラルネットワークの層を処理することにおいて有効でない演算を減らすための方法が記載される。１つまたは複数のタイルは、演算を行い、各タイルが、入力ニューロン、オフセット、およびシナプスを受信し、各入力ニューロンが、関連オフセットを有している。各タイルは、出力ニューロンを生み出し、さらに、ニューロンを記憶するための、ディスパッチャおよび符号化器を介してタイルと通信する活性化メモリがある。ディスパッチャは、活性化メモリからニューロンを読み出して、ニューロンをタイルに伝え、メモリからシナプスを読み出して、シナプスをタイルに伝える。符号化器は、タイルから出力ニューロンを受信し、それらを符号化して、出力ニューロンを活性化メモリに伝える。オフセットは、ゼロでないニューロン上だけで演算を行うために、タイルによって処理される。選択的に、シナプスは、有効でないオペレーションをスキップするために同様に処理され得る。【選択図】図５Ｂ
2019522850.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークで演算を行うための１つまたは複数のタイルであって、各タイルが、各入力ニューロンが関連オフセットを有している入力ニューロン、オフセット、およびシナプスを受信して、出力ニューロンを生み出す、１つまたは複数のタイルと、
ニューロンを記憶するための、ディスパッチャおよび符号化器を介して前記１つまたは複数のタイルと通信する活性化メモリであって、
前記ディスパッチャが、前記活性化メモリからニューロンをそれらの関連オフセットと共に読み出し、前記ニューロンをそれらの関連オフセットと共に前記１つまたは複数のタイルに伝え、前記ディスパッチャが、メモリからシナプスを読み出して、前記シナプスを前記１つまたは複数のタイルに伝え、
前記符号化器が、前記１つまたは複数のタイルから前記出力ニューロンを受信し、それらを符号化して、前記出力ニューロンを前記活性化メモリに伝え、
前記オフセットが、ゼロでないニューロン上だけで演算を行うために、前記タイルによって処理される、
活性化メモリと
を備える、ニューラルネットワークの層を計算するためのシステム。
【請求項２】
符号化器が、出力ニューロンを関連オフセットと対にされたフォーマットで符号化する、請求項１に記載のシステム。
【請求項３】
前記符号化器が、出力ニューロンをゼロのないニューロンアレイフォーマットで符号化する、請求項１に記載のシステム。
【請求項４】
前記符号化器が、出力ニューロンをＲＡＷまたは符号化フォーマット（ＲｏＥ）で符号化する、請求項１に記載のシステム。
【請求項５】
前記符号化器が、出力ニューロンをベクトル非有効活性化識別子（ＶＩＡＩ）フォーマットで符号化する、請求項１に記載のシステム。
【請求項６】
前記符号化器が、出力ニューロンを圧縮ＶＩＡＩフォーマットで符号化する、請求項１に記載のシステム。
【請求項７】
前記タイルが、シナプスを有効でないと識別する１つまたは複数のビットをさらに受信し、前記タイルが、有効な重みを備えたゼロでないニューロン上だけで演算を行うために、前記１つまたは複数のビットを処理する、請求項１に記載のシステム。
【請求項８】
閾値を下回る少なくとも１つのゼロでないニューロンが、その上で演算が行われないように、ゼロに設定される、請求項１に記載のシステム。
【請求項９】
ニューラルネットワークの層を計算するのに使用されるアクセラレータを備える集積回路であって、
ニューラルネットワークで演算を行うための１つまたは複数のタイルであって、各タイルが、各入力ニューロンが関連オフセットを有している入力ニューロン、オフセット、およびシナプスを受信して、出力ニューロンを生み出す、１つまたは複数のタイルと、
ニューロンを記憶するための、ディスパッチャおよび符号化器を介して前記１つまたは複数のタイルと通信する活性化メモリであって、
前記ディスパッチャが、前記活性化メモリからニューロンをそれらの関連オフセットと共に読み出し、前記ニューロンをそれらの関連オフセットと共に前記１つまたは複数のタイルに伝え、前記ディスパッチャが、メモリからシナプスを読み出して、前記シナプスを前記１つまたは複数のタイルに伝え、
前記符号化器が、前記１つまたは複数のタイルから前記出力ニューロンを受信し、それらを符号化して、前記出力ニューロンを前記活性化メモリに伝え、
前記オフセットが、ゼロでないニューロン上だけで演算を行うために、前記タイルによって処理される、
活性化メモリと
を備える、集積回路。
【請求項１０】
符号化器が、出力ニューロンを関連オフセットと対にされたフォーマットで符号化する、請求項９に記載の集積回路。
【請求項１１】
前記符号化器が、出力ニューロンをゼロのないニューロンアレイフォーマットで符号化する、請求項９に記載の集積回路。
【請求項１２】
前記符号化器が、出力ニューロンをＲＡＷまたは符号化フォーマット（ＲｏＥ）で符号化する、請求項９に記載の集積回路。
【請求項１３】
前記符号化器が、出力ニューロンをベクトル非有効活性化識別子（ＶＩＡＩ）フォーマットで符号化する、請求項９に記載の集積回路。
【請求項１４】
前記符号化器が、出力ニューロンを圧縮ＶＩＡＩフォーマットで符号化する、請求項９に記載の集積回路。
【請求項１５】
前記タイルが、シナプスを有効でないと識別する１つまたは複数のビットをさらに受信し、前記タイルが、有効な重みを備えたゼロでないニューロン上だけで演算を行うために、前記１つまたは複数のビットを処理する、請求項９に記載の集積回路。
【請求項１６】
閾値を下回る少なくとも１つのゼロでないニューロンが、その上で演算が行われないように、ゼロに設定される、請求項９に記載の集積回路。
【請求項１７】
ニューラルネットワークで演算を行うことにおいて有効でないオペレーションを減らすための方法であって、
ニューロンストリームの中のゼロでないニューロンを識別して、ニューロンごとにオフセット値を作成することと、
ニューロンごとの前記オフセット値を前記ニューロンと共に、前記ニューロンを処理する前記タイルに伝えることと、
前記タイルが、前記オフセット値を使用して、演算を行う前記ゼロでないニューロンを識別することと、
前記タイルが、前記ゼロでないニューロン上だけで演算を行って、出力ニューロン生み出すことと、
出力ニューロンを活性化メモリに記憶することと
を含む、方法。
【請求項１８】
前記方法が、関連オフセット値を備えた前記出力ニューロンを符号化することをさらに含む、請求項１７に記載の方法。
【請求項１９】
前記符号化が、ゼロのないニューロンアレイフォーマットにある、請求項１８に記載の方法。
【請求項２０】
前記符号化が、ＲＡＷまたは符号化フォーマット（ＲｏＥ）にある、請求項１８に記載の方法。
【請求項２１】
前記符号化が、ベクトル非有効活性化識別子（ＶＩＡＩ）フォーマットにある、請求項１８に記載の方法。
【請求項２２】
前記符号化が、圧縮ＶＩＡＩフォーマットにある、請求項１８に記載の方法。
【請求項２３】
前記タイルが、シナプスを有効でないと識別する１つまたは複数のビットを受信することと、有効な重みを備えたゼロでないニューロン上だけで演算を行うために、前記１つまたは複数のビットを処理することとをさらに含む、請求項１７に記載の方法。
【請求項２４】
閾値を下回る少なくとも１つのゼロでないニューロンを、その上で演算が行われないようにゼロに設定することをさらに含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、概括的には、ニューラルネットワークに関する。より詳細には、本明細書は、乗算の入力がゼロであるほとんどの有効でないオペレーションを削除する、またはスキップすることによって、性能およびエネルギの改善を実現する、ディープニューラルネットワーク（ＤＮＮ：Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）用のアクセラレータに関する。
【背景技術】
【０００２】
ディープニューラルネットワーク（ＤＮＮ）は、物体および音声の認識などの多くの認識タスクにおける最新式技術である。ＤＮＮは、図形処理ユニット（ＧＰＵ：Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて通常活用される、それぞれが、高い計算需要および並列性を呈している層のフィードフォワードアレンジメントを備えている。しかしながら、ＤＮＮの高い計算需要と、より高いエネルギ効率の必要性は、特殊目的アーキテクチャの開発および提案に刺激を与えてきた。しかしながら、処理速度は、いくつかのＤＮＮ設計において、具体的にはより複雑な適用にとっては制限因子であり続けている。
【０００３】
したがって、当技術では、改善の必要性が、存在している。
【発明の概要】
【０００４】
本発明の態様によれば、乗算の入力がゼロである、またはいくつかの実施形態では、ゼロに近いように閾値未満である、ほとんどの有効でないオペレーションを削除する、またはスキップすることによって、性能およびエネルギの改善を実現する、ディープニューラルネットワーク用のアクセラレータが提供される。
【０００５】
本発明の実施形態によれば、ニューラルネットワークで演算を行うための１つまたは複数のタイルであって、各タイルが、各入力ニューロンが関連オフセットを有している入力ニューロン、オフセット、およびシナプスを受信して、出力ニューロンを生み出す、１つまたは複数のタイルと、ニューロンを記憶するための、ディスパッチャおよび符号化器を介して１つまたは複数のタイルと通信する活性化メモリであって、ディスパッチャが、活性化メモリからニューロンをそれらの関連オフセットと共に読み出し、ニューロンをそれらの関連オフセットと共に１つまたは複数のタイルに伝え、ディスパッチャが、メモリからシナプスを読み出して、シナプスを１つまたは複数のタイルに伝え、符号化器が、１つまたは複数のタイルから出力ニューロンを受信し、それらを符号化して、出力ニューロンを活性化メモリに伝え、オフセットが、ゼロでないニューロン上だけで演算を行うために、タイルによって処理される、活性化メモリとを備える、ニューラルネットワークの層を計算するためのシステムが提供される。
【０００６】
さらなる実施形態によれば、本発明は、ニューラルネットワークの層を計算するのに使用されるアクセラレータを備える集積回路を提供し、集積回路は、ニューラルネットワークで演算を行うための１つまたは複数のタイルであって、各タイルが、各入力ニューロンが関連オフセットを有している入力ニューロン、オフセット、およびシナプスを受信して、出力ニューロンを生み出す、１つまたは複数のタイルと、ニューロンを記憶するための、ディスパッチャおよび符号化器を介して１つまたは複数のタイルと通信する活性化メモリであって、ディスパッチャが、活性化メモリからニューロンをそれらの関連オフセットと共に読み出し、ニューロンをそれらの関連オフセットと共に１つまたは複数のタイルに伝え、ディスパッチャが、メモリからシナプスを読み出して、シナプスを１つまたは複数のタイルに伝え、符号化器が、１つまたは複数のタイルから出力ニューロンを受信し、それらを符号化して、出力ニューロンを活性化メモリに伝え、オフセットが、ゼロでないニューロン上だけで演算を行うために、タイルによって処理される、活性化メモリとを備える。
【０００７】
さらなる実施形態によれば、本発明は、ニューラルネットワークで演算を行うことにおいて有効でないオペレーションを減らすための方法を提供し、方法は、ニューロンストリームの中のゼロでないニューロンを識別して、ニューロンごとにオフセット値を作成することと、ニューロンごとのオフセット値をニューロンと共に、ニューロンを処理するタイルに伝えることと、タイルが、オフセット値を使用して、演算を行うゼロでないニューロンを識別することと、タイルが、ゼロでないニューロン上だけで演算を行って、出力ニューロン生み出すことと、出力ニューロンを活性化メモリに記憶することとを含む。
【０００８】
本出願による他の態様および特徴は、本発明の実施形態についての以下の記述を添付の図と関連させて検討されることで、当業者には明らかとなろう。
【０００９】
次に、本発明の実施形態およびそれらが実行に移され得る方法を、ほんの一例として示す添付図面について言及する。
【図面の簡単な説明】
【００１０】
【図１】ゼロである畳込層乗算入力ニューロン値の平均比率を示している棒グラフである。
【図２】出力ニューロンアレイを生成する入力ニューロンアレイにフィルタを適用する従来技術による段階を示す。
【図３】従来技術ＤａＤｉａｎＮａｏ  ＤＮＮアクセラレータのオペレーションを示す。
【図４】本発明の実施形態によるニューラル機能ユニットでのニューロンの処理を示す。
【図５】図５Ａは、従来技術のＤａＤｉａｎＮａｏニューラル機能ユニット（ＮＦＵ：Ｎｅｕｒａｌ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ）の線図であり、図５Ｂは、本発明の実施形態によるユニットの線図である。
【図６】図６Ａは、従来技術のＤａＤｉａｎＮａｏアクセラレータでの処理順序および作業割当を示す図形図であり、図６Ｂは、本発明の実施形態によるアクセラレータでの処理順序および作業割当を示す図形図である。
【図７】本発明の実施形態で使用されるゼロのないニューロンアレイフォーマット（ＺＦＮＡｆ：Ｚｅｒｏ−Ｆｒｅｅ  Ｎｅｕｒｏｎ  Ａｒｒａｙ  Ｆｏｒｍａｔ）を示す図形図である。
【図８】本発明の実施形態によるディスパッチャである。
【図９】畳込ニューラルネットワークの表である。
【図１０】ベースラインを上回る本発明の実施形態のスピードアップを示す棒グラフである。
【図１１】実行アクティビティの分析を示す棒グラフである。
【図１２】ベースラインおよび本発明の実施形態によるアーキテクチャの面積分析を示す棒グラフである。
【図１３】ベースラインでの、および本発明の実施形態による平均電力消費の分析を示す棒グラフである。
【図１４】エネルギ遅延積およびエネルギ遅延二乗積に関するＤａＤｉａｎＮａｏを上回る本発明の実施形態の改善を示す棒グラフである。
【図１５】精度とニューロンをプルーニングすることによるスピードアップとの間のトレードオフを示す図表である。
【図１６】損失のない、有効でないニューロンの閾値を示す表である。
【図１７】実施形態による、ブリックバッファおよびディスパッチャにおける有効でない活性化を検出してスキップすることを示す図形図である。
【図１８】本発明のさらなる実施形態のオペレーションの例を示す。
【発明を実施するための形態】
【００１１】
類似の参照符号は、図面の中の類似するまたは対応する要素を表す。
【００１２】
ディープニューラルネットワーク（ＤＮＮ）は、テキスト、画像、または音声などの複雑な情報から有意な特徴を抽出するその特別な能力のおかげで遍在化してきている。ＤＮＮ、および特に畳込ニューラルネットワーク（ＣＮＮ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ）は、代替的物体認識または画像分類アルゴリズムとの比較において非常に良好な認識品質を提供する。ＤＮＮｓは、汎用図形プロセッサなどの商品計算プラットフォームで利用可能な計算能力から恩恵を受ける。
【００１３】
将来のＤＮＮは、より大きく、より深くなり、より大きい入力を処理し、現在のＤＮＮよりもより複雑な分類タスクを、リアルタイムなどの、より高速度で行うために使用される必要があると思われる。したがって、１オペレーション当たりのエネルギを減らしながらも、ハードウェア演算能力を高め、場合によっては、より小さなフォームファクタのデバイスに対してもそのようにする必要性が存在する。
【００１４】
ＤａＤｉａｎＮａｏアクセラレータは、さらにこの後論じられるように、ＤＮＮの規則的なアクセスパターンおよび演算構造を生かしてＤＮＮ性能を改良しようとする。それは、何百もの乗算レーンのグループにおいて相前後して動作する幅の広いＳＩＭＤ（単一命令多重データ処理：Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）ユニットを使用する。
【００１５】
実施形態によれば、ＤＮＮ性能は、コンテンツがＤＮＮによって作動されているという認識を通じて加速され得る。特に、ディープニューラルネットワークによって行われる演算の大部分は、それらが、入力の１つがゼロである乗算を含んでいるので本質的に有効でない。ＤＮＮでの優位演算によって行われるオペレーションの平均で４４％は、このカテゴリに分類され得る。有効でないオペレーションの大きな割合は、異なる入力にわたって大幅に変化するようには見えることはなく、有効でない積は、ＤＮＮの固有特性の結果であり得ることを示唆している。結果が最終結果に有意に寄与しないこれらのオペレーションを実行することは、多くの時間、エネルギ、および計算リソースを浪費する。
【００１６】
ＤａＤｉａｎＮａｏアクセラレータの構成では、ニューロンレーンが独立して動くことはができない。結果的に、この種類のアクセラレータは、それが、ゼロ値入力を「スキップする」ことができないので、ＤＮＮコンテンツを生かすことができない。
【００１７】
以下に詳述するように、本発明の実施形態は、数値ベース手法に従って、ほとんどの有効でないオペレーションを動的に削除するＤＮＮアクセラレータを提供する。これは、精度を失わずにＤａＤｉａｎＮａｏアクセラレータを上回って性能およびエネルギを改善することができる。
【００１８】
発明の実施形態は、それらが有効でない演算をスキップすることを可能にして、レーンのグループがほとんど独立して進むことができる階層データ並列ユニットを利用する。共同設計されたデータ記憶フォーマットは、関連層の入出力を記憶し、演算削除決定を符号化する。これは、これらの決定をクリティカルパスから取り除き、一方で、データ並列ユニットでの制御発散を回避する。さらに、データ並列ユニットに対する仕事の割当ては、修正される。結合され、ユニットおよびデータ記憶フォーマットは、メモリ階層への広範な、整列アクセスを維持し、データレーンを、入力におけるゼロの分布とは無関係に、ほとんどの時間ビジーに保つデータ並列アーキテクチャをもたらす。
【００１９】
ゼロオペランド乗算をスキップする能力が配置されれば、有効でないオペレーション識別基準は、精度を失わずに、さらなる改善が可能になるように、緩めるまたは緩和することができる。精度のいくらかの損失が許容可能である場合、基準をさらに緩めることと引き換えに精度を犠牲にして、性能およびエネルギ効率のいっそうさらなる改善が、獲得され得る。
【００２０】
本発明の実施形態は、ＤＮＮの畳込層を対象とする。ＤＮＮでは、畳込層は、それらが演算の大部分を行うので、実行時間で優位を占める。畳込層は、３次元入力の上にいくつかの三次元フィルタを適用する。これは、入力要素、またはニューロンおよびフィルタ重み、またはシナプスの間のペアワイズ乗算を伴う内積計算である。次いで、これらの積は、加算を用いて、単一出力ニューロンにまとめられる。
【００２１】
実際には、ニューロン値の多くは、ゼロであることがわかり、したがって、対応する乗算および加算は、最終結果に寄与せず、回避することが可能である。したがって、本節では、公に利用可能である普及しているＤＮＮの畳込層でゼロと等しい、入力ニューロンの比率の特性を示す。これらの測定では、ＤＮＮは、イメージネットデータセットから一千画像を分類するのに使用された。
【００２２】
図１は、全ての畳込層にわたって、そして全ての入力にわたってゼロの値を備えたニューロン入力である乗算オペランドの平均的総比率を報告する。この比率は、ｎｉｎでの３７％からｃｎｎＳでの５０％までさまざまであり、全てのネットワークの平均値は、４４％である。誤差棒は、入力イメージ全体にほとんど変動を示しておらず、１，０００画像のサンプルセットが、大量であることを考えれば、ゼロニューロンの相対的に大部分は、ネットワークのオペレーションに起因しており、入力の特性でない。
【００２３】
ネットワークがそれほど多くのゼロニューロンを生成する理由の１つの説明は、ＤＮＮの性質および構造にある。概要としては、各ＤＮＮ層が、入力は、線、曲線、またはより精巧な構成物などのある学習された「特徴」を含有するかどうか、およびそれらを含有する場所を決定しようと試みるように、ＤＮＮは、設計される。特徴がある場合、正値ニューロン出力として符号化され、特徴がない場合には、ゼロ値ニューロンとして符号化される。したがって、特徴が、存在するとき、ほとんどの場合、それらは、入力全体にわたって現れるわけではない。さらに、全ての特徴が、存在するわけではない。ＤＮＮは、出力を生成するのに畳込層を使用して、特徴の存在を検出し、特徴が特定の位置に存在する尤度を番号で符号化する。負値は、特徴が存在しないことを示唆する。畳込層の後に、正値は通過させるが、いかなる負入力もゼロに変換するＲｅｃｔｉｆｉｅｒまたはＲｅＬＵ層が続くことができる。
【００２４】
多くのゼロ値ニューロンがある一方、それらの位置は、入力データ値によって決まり、それゆえ、それは、対応する演算を削除する静的手法にとって難易度が高い。特に、全入力にわたって常にゼロであったニューロンは、なかった。高い確率でゼロであったニューロンを削除することが可能であったとしても、多くは存在しなかっただろう。例えば、ニューロンの０．６％のみが、９９％の確率でゼロである。この後さらに記載されるアーキテクチャは、ランタイムにこのような演算を検出して削除する。
【００２５】
畳込層を計算するために必要な時間は、処理される要素数と共にほぼ直線的に増え、畳込層が、実行時間で優位を占めるので、これらの測定は、ゼロ値ニューロンに対応する演算を何とかスキップするアーキテクチャに関する潜在的性能改善の上限を示すことができる。
【００２６】
ニューロンの多くがゼロであることを示してきたが、本発明の実施形態は、１）レーン減結合することと、２）ゼロ値入力の削除を促進する適切なフォーマットに入力をオンザフライで記憶することとによって対応する演算をスキップすることができる。
【００２７】
畳込層の演算
【００２８】
ＣＮＮを計算するのに必要なオペレーションは、ＤＮＮにおけるのと同じ性質のものである。主な違いは、前者において、重みが、入力（すなわち画像）の中の異なる点の特徴を探すように、繰り返されることである。畳込層への入力は、次元Ｉｘ×Ｉｙ×ｉの実数の３Ｄアレイである。これらの数字は、第１の層の入力データおよびその前の層の、次の層に向けたニューロンの出力である。この作業の残りの部分で、それらは、指定された「入力ニューロン」に指定され得る。各層は、入力される層のｘ次元およびｙ次元に沿った複数位置でＮ個のフィルタを適用する。各フィルタは、シナプスを含有する、次元Ｆｘ×Ｆｙ×ｉの３Ｄアレイである。全てのフィルタは、同じ次元でできており、それらの深さは、入力ニューロンアレイと同じである。層は、次元Ｏｘ×Ｏｙ×Ｎの３Ｄ出力ニューロンアレイを生成する。出力の深さは、フィルタの数と同じである。
【００２９】
出力ニューロンを算出するために、１つのフィルタは、ウィンドウ、またはフィルタＦｘ×Ｆｙ×ｉと同じ次元を有する入力ニューロンアレイのサブアレイの上に適用される。ｎ（ｘ，ｙ，ｚ）およびｏ（ｘ，ｙ，ｚ）をそれぞれ入力ニューロンおよび出力ニューロンとし、ｓｆ（ｘ，ｙ，ｚ）を、フィルタｆのシナプスとする。活性化関数の前の、位置（ｋ，ｌ，ｆ）の出力ニューロンは、以下の通りに算出される。
【数１】
2019522850.tif 000003
【００３０】
ウィンドウおよびフィルタにつき１つの出力ニューロンがある。フィルタは、定ストライドＳを使用しながら、Ｘ次元およびＹ次元に沿って動いて、異なるウィンドウ上に繰り返し適用され、全ての出力ニューロンを生成する。したがって、出力ニューロンアレイ次元は、Ｏｘ＝（Ｉｘ−Ｆｘ）／Ｓ＋１およびＯｙ＝（Ｉｙ−Ｆｙ）／Ｓ＋１である。図２は、３×３×２入力ニューロンアレイ、単一の２×２×２フィルタ、およびユニットストライドが、２×２×１の出力ニューロンアレイを生成する例を示す。
【００３１】
入力ニューロンがゼロであるとき、対応する乗算および加算は、出力値を変更せずに、時間およびエネルギを節約するために削除され得る。
【００３２】
図２Ａに示すように、位置（０，０，０）またはｏ（０，０，０）での出力ニューロンは、基点ｎ（０，０，０）で入力の２×２×２ウィンドウ上にフィルタを適用することによって生成される。各シナプスｓ（ｘ，ｙ，ｚ）は、対応する入力ニューロンｎ（ｘ，ｙ，ｚ）で乗算、例えば、ｎ（０，０，０）×ｓ（０，０，０）およびｎ（０，１，０）×ｓ（０，１，０））、され、合計で２×２×２または８つの積となる。８つの積は、加算を用いて単一の出力ニューロンにまとめられる。次いで、基点ｎ（１，０，０）のニューロン入力ウィンドウを使用してｏ（１，０，０）を生成するために、ウィンドウは、最初にＸ次元に沿って、Ｓだけずらされる。例えば、ここで、ｓ（０，０，０）は、ｎ（１，０，０）と乗算され、ｓ（１，１，０）は、ｎ（２，１，０）と乗算される。
【００３３】
第１の次元がなくなると、次いで、ウィンドウは、Ｙ次元に沿ってＳだけずれて、再びＸ次元に沿ってスキャンを始め、以下図が示すように同様である。全体で、結果は、２×２×１出力ニューロンである。１つのフィルタだけなので、深さは１である。
【００３４】
図２Ｂおよび図２Ｃは、２×２×２フィルタを備えた畳込層を示す。ここでの出力は、２×２×２アレイであり、各フィルタが、出力の２つの平面または層の１つを生成する。図２Ｂが示すように、第１のフィルタは、出力要素ｏ（ｘ，ｙ，０）を生成する。図２Ｃは、第２のフィルタが、出力ニューロンｏ（ｘ，ｙ，１）を生成するのを示す。
【００３５】
簡略化されたベースラインアーキテクチャ（ＤａＤｉａｎＮａｏ）
【００３６】
ベースラインアーキテクチャは、Ｃｈｅｎ他によって提案されたＤａＤｉａｎＮａｏ最新式アクセラレータに基づく。本節では、このアーキテクチャの簡略化されたユニットが畳込層を算出する方法と、それが、現状のままではゼロ値入力ニューロンをスキップすることができない理由とについて、例を用いて説明する。
【００３７】
ＤａＤｉａｎＮａｏアクセラレータのオペレーションは、図３に示される。図３（ａ）では、３×３×２ニューロンアレイは、２×２×２出力ニューロンアレイを生成する２つの２×２×２フィルタによってユニットストライドで畳み込まれる。図３（ｂ）では、例のユニットは、１）２つのニューロンレーン１４０と、２）それぞれが２つのシナプスサブレーン１６０を含有している２つのフィルタレーン１５０とを備える。各ニューロンレーン１４０およびシナプスサブレーンは、入力ニューロンバッファ（ＮＢｉｎ：Ｉｎｐｕｔ  Ｎｅｕｒｏｎ  Ｂｕｆｆｅｒ）１２０レーンおよびシナプスバッファ（ＳＢ：Ｓｙｎａｐｓｅ  Ｂｕｆｆｅｒ）１１０レーンから単一の要素をそれぞれ送給される。サイクル毎に、各ニューロンレーン１４０は、２つの対応するシナプスサブレーン１６０に、ニューロンをブロードキャストし、結果的に、シナプスサブレーンにつき１つ、４対のニューロンおよびシナプスとなる。シナプスサブレーン毎の乗数器１７１は、ニューロンおよびシナプス入力を乗算する。フィルタレーン毎の加算器ツリー１７３は、２つの積を、フィルタ毎に、出力ニューロンバッファ（ＮＢｏｕｔ：Ｏｕｔｐｕｔ  Ｎｅｕｒｏｎ  Ｂｕｆｆｅｒ）１３０レーンに累積する部分和にまとめる。
【００３８】
層演算の構造を生かして、ユニットは、全てのニューロンおよびフィルタレーンが並列的に進むように、それらを結合する。全てとまではいかないが、ほとんどの演算が、行われるべきであると仮定して、演算の構造だけを考える場合、これは、適切である。しかしながら、現状のままで、このユニットは、ゼロニューロンをスキップすることができない。この例では、両方のニューロンレーンのゼロは、残念なことに、ゼロでないニューロンと結合される。性能およびエネルギを改善する可能性を有しながら、問題なく回避されることができる、４つの乗算が存在する。
【００３９】
図３の例では、完全なフィルタの計算は、１つの追加サイクルを必要とするものであり、最初の３サイクルだけが、ここに示される。両方のフィルタの要素は、単に、明瞭にするために、異符号を備えた同じ値を有している。図３Ａには、入力ニューロンおよびシナプスの部分セットがある。図３Ｂから図３Ｄは、処理の３サイクルを示す。上部は、どのニューロンおよびシナプスが処理されているのかを示し、下部は、ユニット処理である。
【００４０】
図３Ｂ、サイクル０では、ＮＢｉｎからの最初の２個のニューロン（１および０）は、２個のフィルタ（（１、２）および（−１、−２））のそれぞれのシナプスと乗算され、フィルタ毎の各積対は、加算器によってまとめられ、ＮＢｏｕｔに記憶される（１および−１）。ＳＢポインタは、１つ前進し、ニューロンは、ＮＢｉｎから捨てられる。
【００４１】
図３Ｃおよび図３Ｄ、サイクル１およびサイクル２では、次の入力ニューロンおよびフィルタシナプス対に対する動作の同じ順序が、示される。ＮＢｏｕｔ部分和は、読み出され、加算器ツリーへの追加入力として使用され、最終的な出力ニューロンの算出に向けて、進行する。
【００４２】
ベースラインアーキテクチャ
【００４３】
上記では、一度に２つの入力ニューロンおよび２つのフィルタのシナプスを処理した、ＤａＤｉａｎＮａｏベースラインユニットの簡略版を記載したが、各ＤａＤｉａｎＮａｏチップまたはノードは、１６個のニューラル機能ユニット（ＮＦＵ：Ｎｅｕｒａｌ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ）または単なるユニットを含有する。図５Ａは、このようなユニットの１つを示す。サイクル毎に、ユニットは、１６個の入力活性化またはニューロン、１６個のフィルタからの２５６個の重みまたはシナプスを処理し、１６個の部分出力活性化またはニューロンを生成する。詳細には、ユニットは、１６個のニューロンレーン、それぞれ１６個のシナプスレーン１６０（合計で２５６個）を備えた１６個のフィルタレーン１５０を有し、１６個の出力ニューロンのために１６個の部分和を生成する。ユニットのＳＢ１１０は、２５６個のシナプスレーンに送給する、２５６個のレーン（１６×１６）を有し、ＮＢｉｎ１２０は１６個のニューロンレーンに送給する１６個のレーンを有し、ＮＢｏｕｔ１３０は、１６個のレーンを有する。各ニューロンレーンは、１６個のフィルタレーン１５０のそれぞれから１つ、１６個のシナプスレーン１６０に連結される。ユニットは、２５６の乗算器と、１６個の１７入力加算器ツリー（１６個の積プラスＮＢｏｕｔからの部分和）とを有する。ユニット毎のニューロンレーンおよびフィルタの数は、変更されることができる設計時間パラメータである。全てのレーンは、並列的に動作する。
【００４４】
ＤａＤｉａｎＮａｏは、オフチップバンド幅を最小に抑えて、オンチップ演算利用率を最大にするという意図で設計される。ノードの全１６個のユニットによって必要とされるサイクルシナプスバンド幅毎の合計は、１ＧＨｚクロックおよび１６ビットシナプスと仮定すれば、１サイクル当たり４Ｋシナプス、または８ＴＢ／秒である。総ＳＢ１１０容量は、処理されている層に関する全シナプスを記憶するのに十分なように設計され（３２ＭＢまたは１ユニット当たり２ＭＢ）、したがって、オフチップからシナプスをフェッチすることを回避している。最大２５６個のフィルタは、１ユニット当たり１６個ずつ並行して処理されることができる。当初の入力および最後の出力を除いた、全ての中間層ニューロン出力は、さらに、適切な大きさの中心ｅＤＲＡＭ、またはニューロンメモリ（ＮＭ：Ｎｅｕｒｏｎ  Ｍｅｍｏｒｙ）に記憶される。ＮＭは、全１６個のユニットで共有され、元の設計では４ＭＢである。外部から見える通信量は、当初の入力のためのもの、１層当たりシナプスを１回ロードするためのもの、そして最後の出力を書き込むためのものだけである。
【００４５】
外部メモリから、１）フィルタシナプスと、２）当初の入力とを読み出すことで処理が始まる。フィルタシナプスは、それに応じてＳＢに分散され、他方で、ニューロン入力は、ＮＢｉｎに送給される。層出力は、ＮＢｏｕｔを通ってＮＭに記憶され、次いで、次の層を処理するためにＮＢｉｎに送給される。シナプスの次のセットを外部メモリからロードすることは、必要に応じて、現行層の処理と重複され得る。複数ノードを使用して、単一のノードで利用可能なＮＭおよびＳＢに合わないより大きいＤＮＮを処理することができる。容量が高いほど、外的メモリを溢れさせることおよび過剰なオフチップアクセスを強いることなく、単一のチップによって処理され得るニューロンおよびフィルタは、大きいので、ＮＭおよびＳＢは、ｅＤＲＡＭを使用して実施される。
【００４６】
図６（ａ）は、ＤａＤｉａｎＮａｏアーキテクチャが、２５６個のフィルタを同時に適用しながら、入力ニューロンアレイを処理する方法について示す。各ユニットは、１６個のフィルタを処理し、ユニット０は、フィルタ０からフィルタ１５を処理し、ユニット１５は、フィルタ２４０からフィルタ２５５を処理する。簡潔にするため、図は、ｉ次元上の要素の位置だけを示している（例えば、フィルタ７の位置（０，０，１５）はｓ７１５として示される）。サイクル毎に、１６個の入力ニューロン（それぞれ１６ビット長）のフェッチブロックが、全１６個のユニットに送給される。フェッチブロックは、１ユニット当たり１６個のフィルタレーン毎に、１シナプスレーン当たり１つのニューロンを含有する。例えば、サイクル０では、フェッチブロックは、ニューロンｎ（０，０，０）からニューロンｎ（０，０，１５）までを含有することになる。ニューロンｎ（０，０，０）は、ユニット０では、シナプスｓ０（０，０，０）からシナプスｓ１５（０，０，０）と、ユニット１５では、シナプスｓ２４０（０，０，０）からシナプスｓ２５５（０，０，０）と乗算されることになる。ニューロンｎ（０，０，１）は、ユニット０では、シナプスｓ０（０，０，１）からシナプスｓ１５（０，０，１）と乗算され、以下同様である。シナプスは、ユニットが、並行して適切なシナプスをフェッチすることができるように、図に示される順序でＳＢに記憶される。例えば、ユニット０におけるＳＢの最初のエントリ（列）は、以下の２５６個のシナプス、ｓ０（０，０，０）〜ｓ０（０，０，１５），．．．，ｓ１５（０，０，０）〜ｓ１５（０，０，１５）を含有する。
【００４７】
現行のウィンドウが処理された後、対応するニューロンが始まる場所が、所与の座標に直接算出されることが可能になるので、次のウィンドウは、開始されることができる。ウィンドウは、全てのフィルタによって処理される必要があるので、他の作業割当も、可能である。選択された割当ては、図でも見ることができるように、ニューロン水準のレーンにわたって入力をインタリーブする。ゼロをスキップする試みが行われないので、ＮＭからの単一の１６ニューロン幅フェッチは、全てのユニットにわたって全てのレーンに作業を提供することができ、１００％の利用率を実現する。
【００４８】
要点をまとめると、ＤａＤＮは、値に関係なく、全ての活性化を処理する。ＤａＤＮは、大規模データ並列アーキテクチャである。サイクル毎に、それは、１６個の活性化値、および最大で２５６個のフィルタからの重みを処理する。具体的には、フィルタ毎に、ＤａＤＮは、１６個の活性化値を１６個の重みと乗算し、結果を部分出力活性化に蓄積する。この工程は、必要な全ての活性化値が、所望の出力活性化毎に処理されるまで、繰り返される。
【００４９】
本発明の実施形態による簡略化されたアーキテクチャ
【００５０】
ニューロンストリームにおいてゼロの有意な部分を活用するために、全てのニューロンレーンが一緒に結合される従来技術構造は、変更される。本発明の実施形態は、ニューロンレーンを減結合して、それらが独立して進行することを可能にする。図４は、本発明の実施形態の等価の簡略化された設計と、それが、どのようにして２サイクルにわたって進行するのかを示す。ＤａＤｉａｎＮａｏユニットは、ここでは、１）加算器ツリーおよびＮＢｏｕｔ２３０を含有するバックエンドと、２）ニューロンレーン２８０、シナプスサブレーン２６０、および乗算器を含有するフロントエンドとに分割される。バックエンドは、変化がないのに対して、フロントエンドは、ここでは、１ニューロンレーン２８０毎に１つ、２つのサブユニット２０５に分割される。各サブユニット２０５は、１つのニューロンレーン２８０と、２つのフィルタ２５０毎にシナプスサブレーン２６０とを含有する。サイクル毎に、各サブユニットは、１フィルタ毎に１つ、２つの積を乗算器２７１で生み出す。積は、以前と同様に、２つの加算器ツリー２７３に送給されて、部分出力ニューロン和を生成する。この構成の場合、ニューロンレーン２８０は、ここでは、互いから独立して進行することができ、したがって、ゼロをスキップする潜在能力を有している。
【００５１】
ゼロニューロンが入力に現れるとき、ゼロニューロンを、能動的にスキップするニューロンレーン２８０を有する代わりに、本発明の実施形態によれば、ゼロニューロンが前の層の出力で削除される動的ハードウェア手法を、用いることができる。その結果、ゼロでないニューロンだけが、ＮＢｉｎ２２０には現れる。このために、さらに後述するように、入力ニューロンアレイが、ゼロのないニューロンアレイフォーマット（ＺＦＮＡｆ：Ｚｅｒｏ−Ｆｒｅｅ  Ｎｅｕｒｏｎ  Ａｒｒａｙ  ｆｏｒｍａｔ）に記憶される。ここでは、このフォーマットの簡略版を提示して、このフォーマットによって、個々のニューロンレーンが、他のニューロンレーンから独立して進行するゼロでないニューロンだけを見ることができるようになる方法を説明する。ゼロニューロンが削除されると、それぞれのゼロでないニューロンは、適切なＳＢエントリと適合される。ＺＦＮＡｆは、この目的のためのオフセットを用いて、それぞれのゼロでない入力ニューロンを補強する。例えば、ニューロンの元のストリームが（１，０，０，３）であったであろう場合、それらは、（（１，０）、（３，３））として符号化されることになる。オフセット２８５は、それが、適切なシナプス列にアクセスすることができるように、ＳＢサブレーンのインデックスを調整することができる。本発明の実施形態によれば、ＺＦＮＡｆは、オンザフライで生み出されることができる。
【００５２】
図４では、本発明の実施形態による簡略化ユニットは、図３の従来技術ユニットと同じ出力を、ちょうど２サイクルで生成する。両方のフィルタの要素は、単に、明瞭にするために、異符号を備えた同じ値を有している。
【００５３】
図４Ａ、サイクル０では、サブユニット０は、次のＮＢニューロン値１およびオフセット０を読み出す。オフセットを使用することによって、それは、フィルタ０およびフィルタ１に対応する適切なＳＢシナプス１およびＳＢシナプス−１をインデックス化する。結果として生じる積１および−１は、専用の加算器ツリーを用いて、対応するフィルタ用の出力ニューロンに追加される。同様に、サブユニット１は、オフセット１と共にニューロン２をフェッチして、シナプス４およびシナプス−４と乗算して、フィルタ用の対応する加算器ツリーに送給することになる。
【００５４】
図４Ｂ、サイクル１では、オペレーションは、サブユニット０が、オフセット２でニューロン３をフェッチし、サブユニット１が、オフセット２でニューロン４をフェッチして以前と同様に繰り返す。ベースライン（４８、−４８）においてと同じ結果が、２サイクルだけで算出される。
【００５５】
本発明の実施形態によるアーキテクチャ
【００５６】
図５Ｂは、ＤａＤｉａｎＮａｏユニットと同じ演算バンド幅を提供する実施形態によるユニットを示す。ニューロンレーン２８０および対応するシナプスレーン２６０を備えるフロントエンドは、１６個の独立したオペレーティングサブユニット２０５に区分化され、それぞれが、単一のニューロンレーン２８０および１６個のシナプスレーン２６０を含有する。各シナプスレーン２６０は、合計で１６個の異なるフィルタを処理する。サイクル毎に、各サブユニット２０５は、ＮＢｉｎから単一の（ニューロン、オフセット）対をフェッチし、オフセット２８５を使用して、１６個のシナプスをフェッチするためにＳＢｉｎから対応するエントリをインデックス化し、フィルタ２５０毎に１つ、１６個の積を生成する。バックエンドは、変わっていない。それは、１６個の加算器ツリー２７３を使用して減らされる１６×１６個の積を、１６個のサブユニット２０５から受け入れる。加算器ツリー２７３は、符号化器２３５によって符号化されて、活性化メモリに伝えられ得る６４個のＮＢｏｕｔ２３０エントリを使用して、ユニットが累積する、１６個の部分出力ニューロンを生成する。サブユニットＮＢｉｎは、６４個のエントリ深さであり、各エントリが、１６ビットの固定小数点値にオフセットフィールドを加えたものを含有する。総ＳＢ容量は、元のＤａＤｉａｎＮａｏ設計のように、１ユニット当たり２ＭＢのままであり、各サブユニットが１２８ＫＢのＳＢを有する。各サブユニットＳＢエントリは、１６個のシナプスに対応する１６×１６ビットを含有する。要約すると、各サブユニットは単一のニューロンレーンに対応して、フィルタ毎に１つ、１６個のシナプスを処理する。合計で、全てのサブユニットは、１６個のニューロンレーン、２５６個のシナプスレーンを有し、異なるフィルタそれぞれから１６個の部分出力ニューロンを生成する。
【００５７】
本発明の実施形態によるユニットを使用して、符号化されたニューロンアレイおよび従来型のニューロンアレイの両方を処理することができる。層毎にソフトウェアによって設定された構成フラグは、ユニットが、ニューロンオフセットフィールドを使用するかどうかを制御する。
【００５８】
本発明の実施形態による設計は、ベースラインを上回って性能を改善するために、以下を行う。１）オンザフライで符号化されたニューロンアレイを生み出す、２）ユニットおよび全てのレーンをビジーに保つ、３）中心ｅＤＲＡＭへの規則正しい、広範なアクセスを維持する。この機能性を可能にする、本発明の実施形態の構造的特徴は、入力ニューロンアレイを符号化するのに使用されるフォーマットと、作業がユニット全体に分割される方法とにある。
【００５９】
このフォーマットは、図７に示されるゼロのないニューロンアレイフォーマット（ＺＦＮＡｆ）である。ＺＦＮＡｆは、本発明の実施形態がゼロ値ニューロンを用いる演算を回避することを可能にする。ゼロでないニューロンだけが、それぞれ、元の位置を示すオフセットと共に記憶される。ＺＦＮＡｆは、本発明の実施形態が、クリティカルパスから外れてどのニューロンを処理するのかという決定を動かして、それらを前の層の端部に置くことを可能にする。したがって、ＺＦＮＡｆは、別の方法では制御フロー決定であったであろうものを効果的に実施する。
【００６０】
具体的には、ＺＦＮＡｆは、ニューロンを、ブリックと呼ばれるグループの中の（値、オフセット）対として符号化する。各ブリックは、ＤａＤｉａｎＮａｏ設計のフェッチブロックに対応し、それは、１６個のニューロンの、整列した、入力特徴に沿って連続的な次元ｉグループであり、すなわち、それらは全てが、同じｘ座標およびｙ座標を有している。ブリックは、最初のニューロンが、オフセットフィールドを占めるように調整された、従来型の３Ｄアレイフォーマットの中に記憶されたであろう位置から始まって記憶され、ゼロをパディングされる。ブリックでのグループ化は、各層を処理するのに必要な粒度で活性化アレイをインデックス化する能力を維持する。
【００６１】
したがって、ＺＦＮＡｆでは、有効な活性化だけが、それぞれ、元の位置を示すオフセットと共に記憶される。ＺＦＮＡｆは、前の層の出力で生み出され、それは、通常、それぞれの活性化を生成するのに数十サイクル以上を要する。
【００６２】
ＺＦＮＡｆ符号化は、圧縮疎行（ＣＳＲ：Ｃｏｍｐｒｅｓｓｅｄ  Ｓｐａｒｓｅ  Ｒｏｗ）フォーマットとのいくらかの類似性を有する。しかしながら、ＣＳＲは、極端な水準の疎らさを備えた行列を対象とするほとんどの疎行列フォーマットのように、２つの目的を有する、すなわち、ゼロでない要素だけを記憶することと、メモリ設置面積を減らすこととであり、ＺＦＮＡｆは、第１の目的だけを共有する。ＣＳＲでは、それぞれの行が始まる場所を探すことは容易であるが、しかしながらユニットをビジーに保つために、本発明の実施形態は、いくらかのメモリ設置面積節約を犠牲にしながら、より微細な粒度で、直接インデックス化することを可能にする。
【００６３】
このグループ化は、本発明の実施形態に有用な２つの特性を有する：１）グループ化は、ブリックの第１のニューロンの座標だけを使用して、ブリック粒度のニューロンアレイにインデックス化する能力を維持する、そして、２）グループ化は、オフセットフィールドのサイズを短く保ち、したがって、オフセットを記憶するためのオーバヘッドを減らす。第１の特性は、作業をサブユニットに独立して割り当てることを可能にし、さらに、本発明の実施形態が、ウィンドウが始まる場所を容易に探すことを可能にする。ブリックは、本発明の実施形態が、全てのサブユニットをビジーに保つこと、および相互に独立して進行して、したがって、ゼロをスキップする、または必要に応じて新しいウィンドウを処理することを始めることを可能にする。図７は、ＺＦＮＡｆの一例を示す。本発明の実施形態が１６個のニューロンのブリックを使用することができるので、オフセットフィールドは、４ビット長である必要があり、ＮＭ、または研究された構成では１ＭＢ、では２５％の容量オーバヘッドとなる。大半の面積が、ＳＢによって利用される（３２ＭＢ）ことから、全体として、結果的な面積オーバヘッドは、４．４９％の小規模であることが分かる。
【００６４】
上記の通り、ＤａＤｉａｎＮａｏは、それが、全１６個のユニットにブロードキャストする、１サイクル当たり１６個のニューロンの単一フェッチブロックをフェッチする。このブロックは、２５６個のフィルタにわたる全てのシナプスレーン用の作業を含有する。作業をニューロンレーンにわたって同じに分配することは、本発明の実施形態が、全てのユニットをビジーに保つのに十分ではない。図６Ｂが示すように、ＺＦＮＡｆの中のフェッチブロックは、対応する元のニューロンアレイグループが、ゼロニューロンを含有していない場合にだけ、ベースライン作業割当てで、全てのニューロンレーン用の作業を含有する単一のブリックを含有する。
【００６５】
ニューロンレーンをできるだけビジーに保つために、本発明の実施形態は、さまざまなニューロンレーンに違った作業を割り当てる。具体的には、最初に記載されたように、ＤａＤｉａｎＮａｏは、入力ニューロンのニューロンレーンへのニューロンインタリーブ割当てを使用したが、本発明の実施形態は、ブリックインタリーブ割当てを使用する。
【００６６】
例えば、ＤａＤｉａｎＮａｏでは、ニューロンレーン０に、活性化ａ（ｘ，ｙ，ｉ）が提供された場合、ニューロンレーン１に、ａ（ｘ，ｙ，ｉ＋１）が提供される。本発明の実施形態によれば、ニューロンレーンが、ａ（ｘ，ｙ，ｉ）から始めて活性化ブリックを処理している場合、ニューロンレーン１には、ａ（ｘ，ｙ，ｉ＋１６）から始まるブリックが提供される。
【００６７】
図６Ｂが示すように、本発明の実施形態は、ウィンドウを、ニューロンレーン毎に１つ、１６個のスライスに均一に分割する。各スライスは、ウィンドウの完全な垂直チャンクに対応する（全てのブリックは、同じ開始ｚ座標を有している）。サイクル毎に、スライスにつき１つのニューロンがフェッチされ、１レーン当たり１つ、１６個のニューロンのグループとなり、したがって、全てのレーンをビジーに保つ。例えば、ｅ（ｘ，ｙ，ｚ）をＺＦＮＡｆの中の入力アレイの場所（ｘ，ｙ，ｚ）に記憶された（ニューロン、オフセット）対とする。サイクル０では、位置ｅ（０，０，０）、ｅ（０，０，１６）、…（ｅ（０，０，２４０）の符号化されたニューロンが、フェッチされて、全てのユニットにブロードキャストされ、ニューロンレーン０からニューロンレーン１５によってそれぞれ処理される。全１６個のブリックが第２のゼロでないニューロンを有する限り、サイクル１では、ｅ（０，０，１）、ｅ（０，０，１７）、…（ｅ（０，０，２４１））が、処理されることになる。例えば、ブリック０が、１つのゼロでないニューロンだけを有した場合、次のサイクルでは、フェッチされることになる第１のニューロンは、２５６の入力ニューロン深さｉと仮定すれば、ｅ（１，０，０）であることになる。
【００６８】
各ニューロンレーンは、各ブリックが含有するゼロでない要素の数に基づいて、独立して進行するので、ニューロンレーン毎に異なるフェッチポインタが存在する。愚直な実施態様は、１サイクル当たり１６個の単一ニューロンアクセスを行い、ＮＭに過度に負担をかける。以下に記載されるディスパッチャは、ＤａＤｉａｎＮａｏと同数の、１６ニューロン幅の整列されたＮＭアクセスを必要とする単純な拡張部分を提示する。
【００６９】
入力ニューロンがユニットの中のニューロンレーンに割り当てられる順序が変わったので、シナプスが、図６Ｂが示すようにＳＢに記憶される順序も変わる。例えば、サイクル０では、ｊが、ｅ（０，０，０）のオフセットである場合、ユニット０のサブユニット０は、ｓ０（０，０，ｊ）からｓ１５（０，０，ｊ）を必要とすることになり、ユニット０のサブユニット１５は、ｓ１５（０，０，２４０＋ｊ）からｓ１５（０，０，２４０＋ｊ）を必要とすることになり、ユニット１５のサブユニット０は、ｓ２４０（０，０，ｊ）からｓ２５５（０，０，ｊ）を必要とすることになる。これは、サブユニット毎のＳＢ記憶順序を入れ換えることに相当することが分かる。シナプスは、あらかじめ知られているので、この再配列は、ソフトウェアで静的に行われることができる。したがって、サブユニット毎に適切なシナプスに並行してアクセスすることは、簡単である。
【００７０】
この作業割当ては、各ユニットが生み出す出力ニューロン値を変えることはなく、出力ニューロン値は、ＤａＤｉａｎＮａｏと同じままである。割当ては、入力ニューロンが、出力ニューロンを生成するために処理される順序のみを変更する。
【００７１】
１サイクル当たり１６個の独立した単一ニューロン幅ＮＭアクセスを行うことを回避するために、ＣＮＶは、全てのニューロンレーンをビジーに保ちながら、ＮＭへの１６ニューロン幅アクセスを行うディスパッチャユニットを使用する。このために、ＮＭを本来構成しているサブアレイは、１６個の独立バンクにグループ化され、入力ニューロンスライスは、１バンク当たり１つ、静的に分散される。ディスパッチャは、ＮＭバンクにわたって物理的に分散されるが、そのオペレーションを説明することは、それが集中型ユニットとみなされる場合、より容易である。
【００７２】
図８は、ディスパッチャが、各エントリが単一のブリックを保持することができる１６エントリブリックバッファ（ＢＢ：Ｂｒｉｃｋ  Ｂｕｆｆｅｒ）を有することを示す。各ＢＢエントリは、１６ニューロン幅バスを介して１つのＮＭバンクに連結され、単一ニューロン幅連結を介して全てのユニットにわたるニューロンレーンの１つに送給する。例えば、ＢＢ［０］は、ＮＭバンク０からニューロンブリックを受け入れ、ニューロンのいずれかを全てのユニットのニューロンレーン０にブロードキャストすることができる。最初に、ディスパッチャは、合計１６個のニューロンブリック用の各バンクから１つのブリックを並列に読み出す。次のサイクルでは、ディスパッチャは、ゼロでないニューロン、各ＢＢエントリから同時に単一のニューロンを、合計で１６個のニューロン、ＢＢエントリ毎に、したがって各サイクル、ニューロンレーン毎に１つをブロードキャストする。ブリックのゼロでないニューロンの全てがユニットに送信される前に、ディスパッチャは、対応するＮＭバンクから次のブリックをフェッチする。ＮＭの応答のためのストールを回避するために、処理順序における次の、バンク毎のブリックをフェッチすることは、各ブリックの開始アドレスおよび処理順序があらかじめ知られているので、所望されるだけ早く開始されることができる。各ＢＢが流す割合が、ブリック毎に遭遇したゼロでないニューロンの数に応じて変化することになるので、ディスパッチャは、ＮＭバンクにつき１つのフェッチポインタを維持する。
【００７３】
ディスパッチャは、スライス／バンクにつき１つ、最大で１６個のＮＭ要求を同時的に出すことができる。ブリックが、偶然にもゼロ値ニューロンだけを有する最悪のケースでは、ＮＭバンクは、サイクル毎に新しいブリックを供給しなければならないことになる。これは、実際には、めったに起こらず、ＮＭバンクは、相対的に大きく、この最悪の場合のバンド幅を維持するために、サブバンク化される。
【００７４】
ＤａＤｉａｎＮａｏでは、単一の１６ニューロン幅相互接続が、フェッチブロックを全１６個のユニットにブロードキャストするのに使用される。相互接続構造は、本発明の実施形態によって不変的であり続けるが、幅は、ニューロンオフセットを収容できるように増大する。
【００７５】
研究されたＤＮＮへの当初の入力は、従来型の３Ｄアレイフォーマットを使用して処理される画像である。第１の層は、それらを、各カラープレーンが特徴である３特徴ディープニューロンアレイとして処理する。全ての他の畳込層は、本発明の実施形態が、直前の層の出力時にオンザフライで生み出すＺＦＮＡｆを使用する。
【００７６】
ＤａＤｉａｎＮａｏのような本発明の実施形態によれば、出力ニューロンは、それらが別の層への入力として送給されることができる前に、ＮＢｏｕｔからＮＭに書き込まれる。ｅＤＲＡＭ  ＮＭには、幅広いアクセスが好ましいので、これらの書き込みは、１６ニューロン幅のままである。しかしながら、ＮＭに書き込む前に、各１６ニューロングループは、ＺＦＮＡｆのブリックに符号化される。これは、符号化器サブユニットによって行われる。本発明の実施形態によれば、１つの符号化器サブユニットが、ユニット毎に存在することができる。
【００７７】
本発明の実施形態は、ＤａＤｉａｎＮａｏとは異なる順序で入力ニューロンアレイを処理することができるが、本発明の実施形態によるユニットは、ＤａＤｉａｎＮａｏと同じ出力ニューロンを同様に生成することができる。各出力ニューロンは、１つのフィルタを使用して全部のウィンドウを処理することによって生成される。本発明の実施形態によれば、フィルタのユニットへの割当ては、同じままである。したがって、本発明の実施形態によるユニットによって生成された出力ニューロンは、出力ニューロンアレイのブリックに対応することができる。符号化器ユニットが行わなければならないことの全ては、ゼロでないニューロンをブリックの中にパックすることである。
【００７８】
符号化器は、１６ニューロン入力バッファ（ＩＢ：Ｉｎｐｕｔ  Ｂｕｆｆｅｒ）、１６符号化ニューロン出力バッファ（ＯＢ：Ｏｕｔｐｕｔ  Ｂｕｆｆｅｒ）、およびオフセットカウンタを使用する。変換は、全てのＯＢエントリをクリアしながら、ＮＢｏｕｔからＩＢへの１６ニューロンエントリを読み出すことから始める。サイクル毎に、符号化器は、ＩＢから次のニューロンを読み出し、オフセットカウンタをインクリメントする。ニューロンは、それが、ゼロでない場合だけ次のＯＢ位置にコピーされる。オフセットカウンタの現行の値も、書き込まれて、符号化されたニューロン対を完了させる。全１６個のＩＢニューロンが処理されると、ＯＢは、ブリックをＺＦＮＭｆの中に包含し、ＮＭに送信されることができる。ＤａＤｉａｎＮａｏと同じ相互接続が、オフセットフィールドを収容できるように広げられて使用される。符号化器は、１）出力ニューロンが、非常に遅い速度で生成される、および２）符号化されたブリックは、次の層で必要であるので、連続的に符号化を行うことができ得る。
【００７９】
ＤａＤｉａｎＮａｏでは、全てのユニットは、同じウィンドウからのニューロンを処理し、次のウィンドウの処理は、現行のウィンドウが処理された後にのみ始められる。本発明の実施形態は、ユニットのバックエンドおよび制御へのさらなる変更を回避して、この手法に従うことができる。ニューロンレーンが、それらのブリックを独立して処理するので、全てのスライスが、正確に同じ数のゼロでないニューロンを有していなければ、いくつかのニューロンレーンは、他より早くそれらのウィンドウスライスを処理することを終えることになる。これらのニューロンレーンは、全ての他のレーンが、それらの処理を完了させるまで、アイドル状態を維持することになる。
【００８０】
評価方法論
【００８１】
評価は、図９に提示された表に示されるような、普及している最新式の畳込ニューラルネットワークのセットを使用する。これらのネットワークは、１０００個のクラスにわたる２５６×２５６個の画像を含有するＩＬＳＶＲＣ１２データセット上で画像分類を行う。実験は、各クラスから１つ、１０００個の画像のランダムに選択されたセットを使用する。ネットワークは、配布の一部、またはＣａｆｆｅ  Ｍｏｄｅｌ  Ｚｏｏでの一部として、利用可能であり、Ｃａｆｆｅで事前訓練される。
【００８２】
ベースラインアクセラレータの、および本発明の実施形態によるサイクルの正確なシミュレータが使用された。シミュレータは、層出力ニューロンのオンザフライ検証を可能にするために、Ｃａｆｆｅ枠組みと統合される。本発明の実施形態およびＤａＤｉａｎＮａｏの面積および電力特性は、合成された実施態様を用いて測定された。２つの設計は、Ｖｅｒｉｌｏｇで実施され、シノプシス設計コンパイラを介してＴＳＭＣ  ６５ｎｍライブラリと合成された。ＮＢｉｎ、ＮＢｏｕｔ、およびオフセットＳＲＡＭバッファは、ダブルポンピングを用いてサイクル毎の読み書きを可能にするＡｒｔｉｓａｎシングルポートレジスタファイルメモリコンパイラを使用して、モデル化された。ｅＤＲＡＭ面積およびエネルギは、Ｄｅｓｔｉｎｙを用いてモデル化された。
【００８３】
性能
【００８４】
図１０は、ベースラインを上回る本発明の実施形態のスピードアップを示す。第１の棒（ＣＮＶ）は、ゼロニューロンだけが考えられる場合の、スピードアップを示し、その一方で、第２の棒（ＣＮＶ＋Ｐｒｕｎｉｎｇ）は、追加のニューロンが、ネットワーク全体の精度に影響を及ぼすことなくさらにスキップされる場合の、スピードアップを示す。本節の残りでは、第１の棒に焦点を合わせる。
【００８５】
本発明の実施形態は、最高で５５％（ｃｎｎＳ）、最低で２４％（ｇｏｏｇｌｅ）、平均で３７％だけ性能を改善する。性能改善は、ゼロ値ニューロンの比率だけによって左右されるのではなく、対応する層によってかかる全実行時間の比率（本発明の評価された実施形態は、第１の層を加速しない）と、サブユニットが、現行のウィンドウが全ての他のものによって処理されるのを待つアイドル状態にあるときに失われる潜在能力とによっても左右される。グーグルは、ゼロニューロンの平均的比率より高い比率を呈しているが、第１の層は、他のネットワークより相対的に長い、ベースライン上で測定されたときの平均２１％に対して、ランタイム合計の３５％を占めるランタイムを有する。Ｇｏｏｇｌｅは、さらに、時間のより多い部分を他の層を計算することに費やしている。
【００８６】
ネットワークでの性能結果は、図１１に示すように、時間が、ネットワーク毎にベースライン（ｂ）および本発明の実施形態（ｃ）において時間が進む場合についての分析に注目することによって、よりよく理解され得る。実行アクティビティは、以下のカテゴリに分割される。：１）非畳込層を処理すること（他）、２）第１の畳込層を実行すること（畳込１）、３）ゼロでないニューロンを処理すること（ゼロでない）、４）ゼロニューロンを処理すること（ゼロ）、および５）アイドリングすること（ストール）。サイクルであるタイムユニットを一意的に各カテゴリに割り当てることは可能ではない。例えば、ベースラインでの同じサイクルの間、いくつかのニューロンレーンは、ゼロニューロンを処理している可能性があり、一方で、別のニューロンレーンは、ゼロでないニューロンを処理している可能性がある。さらに、本発明の実施形態では、いくつかのニューロンレーンは、全ての他のニューロンレーンが現行のウィンドウを処理し終わるのを待つアイドル状態である可能性がある。したがって、図は、サイクル毎別々に各ニューロンレーン（本発明の実施形態におけるサブユニットに相当する）を占める実行アクティビティの分析を報告するものである。占められたイベントの総数は、ユニットｘ（ｎｅｕｒｏｎ＿ｌａｎｅｓ／ユニット）×サイクルであり、実行時間に正比例し、各イベントが単一のカテゴリに割り当てられることができるようにする測定基準となる。
【００８７】
結果は、第１の層を含む畳込層が、ベースライン上での全てのネットワークにわたる実行アクティビティで優位を占めることを裏付けている。本発明の実施形態のサブユニットがアイドル状態である、アクティビティの相対的に小さい比率は、実施形態が、ゼロ値ニューロンを削除することから、存在する潜在能力のほとんどを獲得することがなんとかできることを示している。
【００８８】
面積
【００８９】
図１２は、ベースラインアーキテクチャおよび本発明の実施形態によるアーキテクチャの面積分析を示す。総体的に、本発明の実施形態は、ベースラインを上回って４．４９％だけ総面積が増えており、測定された性能改善を考えれば小規模のオーバヘッドである。２つのアーキテクチャの間の面積比較は、以下の通りである。１）フィルタ記憶（ＳＢ）が、両方のアーキテクチャでの総面積で優位を占めている。本発明による実施形態は、サブユニットにわたってＳＢｉｎを区分化しているが、各チャンクが大きい状態（１サブユニット当たり１２８ＫＢ）であるので、そうするためのオーバヘッドは、ごくわずかである。２）本発明による実施形態は、ａ）オフセットのために２５％より大きい記憶域を必要としており、ｂ）１６個のバンクを使用しているので、３４％だけニューロンメモリ（ＮＭ）面積を増やしている。３）ユニット論理において本発明による実施形態の追加コストは、ごくわずかである。４）本発明による実施形態は、１５．８％だけＳＲＡＭ面積を増やしている。これは、オフセットの記憶域専用の追加バッファ空間に因るものである。
【００９０】
電力
【００９１】
図１３は、ベースラインでの、および本発明による実施形態での平均電力消費の分析を示す。３つの棒は、静的電力、動的電力、および電力全体に対応するアーキテクチャごとに示されている。各カテゴリは、ＮＭ、ＳＢ、論理、およびＳＲＡＭにわたってさらに分割されている。論理は、データパス、制御ロジック、符号化器、およびメモリディスパッチャを含み、一方で、ＳＲＡＭは、ＮＢｉｎおよびＮＢｏｕｔを含む。ＮＭ電力は、本発明による実施形態では、ベースラインより５３％高い。ＮＭがより幅広く、バンク化されているので、これは予想されたことである。しかしながら、ＮＭだけで、ベースラインの総チップ電力の２２％を占めており、したがって、総電力コストは小さい。ＮＢｉｎを分割して、ユニットの中に論理を追加するオーバヘッドは、２％だけ電力を増やすにとどまる。ＳＢを再編成することは電力コストにほとんど影響を有しておらず、サブユニットがストールしているとき、シナプスは、読み出されないので、ＳＢの動的電力は１８％だけ減少する。全体として、ＳＢの３２ＭＢは、総電力消費のほとんどを占め、動的ＳＢエネルギの節約はＮＭ、論理、およびＳＲＡＭのオーバヘッドを上回っている。結果的に、本発明の実施形態の電力コストは、平均でベースラインより７％より低い。
【００９２】
ＥＤＰおよびＥＤ２Ｐ
【００９３】
本節では、２つのアーキテクチャに関するエネルギ遅延積（ＥＤＰ：Ｅｎｅｒｇｙ−Ｄｅｌａｙ  Ｐｒｏｄｕｃｔ）およびエネルギ遅延二乗積（ＥＤ２Ｐ：Ｅｎｅｒｇｙ−Ｄｅｌａｙ  Ｓｑｕａｒｅｄ  Ｐｒｏｄｕｃｔ）を報告する。エネルギおよび性能を考慮して、２つの計算システムを適切に比較する方法に関する異議のないコンセンサスは存在しないが、２つの一般的に使用される測定基準は、ＥＤＰおよびＥＤ２Ｐ（ＥＴ  ２）である。図１４は、ベースラインを上回る本発明の実施形態のＥＤＰおよびＥＤ２Ｐの改善を報告する。平均して、本発明のＥＤＰによる実施形態は、１．４７ｘだけ改善し、ＥＤ２Ｐは、２．０１ｘだけ改善している。
【００９４】
多くの有効でないニューロンを取り除く
【００９５】
プルーニングは、有効でないシナプスまたはニューロンを取り除く、ニューラルネットワークにおける演算削減技法である。本発明の実施形態のアーキテクチャは、それらの演算がスキップされるように、ニューロン値をゼロに設定することによって、動的ニューロンプルーニングの形態を可能にすることができる。この能力を示すために、本節では、ゼロに近いニューロンは、それらの大きさが、事前に特定された層毎の閾値を下回る場合には、ゼロに設定される単純なプルーニング手法を考察する。ベースライン設計は、本発明の実施形態が、閾値比較で再利用する、最大プーリング用コンパレータを包含している。閾値は、あらかじめ決められ、入力次元、パディング、およびストライドなどの層メタデータと共に伝えられる。
【００９６】
ほとんど最適な層毎の閾値構成を見つけるために、調査は、層毎の精度要件を見つけるために以前の作業で使用された手法と同様に、勾配降下を使用して行われる。簡潔にするために、２つの閾値の電力が、調査されたが、ハードウェアは、いかなる固定小数点閾値でもサポートすることができた。ネットワーク精度は、ＩｍａｇｅＮｅｔ検証セットから５０００画像にわたって測定され、各クラスにわたって一様にサンプリングされた。
【００９７】
図１５は、ニューロンが、層毎の閾値を使用して動的にプルーニングされるときの、精度（ｙ軸）と性能（ｘ軸）との間のトレードオフを示す。ネットワークごとに調査された構成のパレートフロンティアが、示される。ネットワークごとの最左点は、ゼロ値ニューロンだけが取り除かれた、図１０の本発明による実施形態に対応している。概括的には、全てのネットワークは、ニューロンが、精度に影響を及ぼすことなくプルーニングされ得る当初の領域を呈している。この領域は、図１５では実線で示される。精度の損失を伴わない最大スピードアップは、さらに、図１０の（ＣＮＶ＋Ｐｒｕｎｉｎｇ）で報告されている。図１６の表は、精度の損失なしに最高のスピードアップをもたらす閾値を示す。平均して、プルーニングは、スピードアップを、１．５２ｘに増やすことができ、１１％の増加となる。グーグルでは、その代わりに、閾値が、『開始モジュール』毎に特定されている。
【００９８】
全てのネットワークに関して、性能は、さらに改善され得るが、性能改善に伴って、精度が指数的に低下して、精度が失われる。例えば、最大で１％まで相対精度の低下を許容すれば、平均的性能改善を、ベースラインを上回る１．６０ｘにさらに増やし、他方では、最大で１０％まで相対精度の低下を可能にすれば、ベースラインを上回る１．８７ｘのスピードアップをもたらす。
【００９９】
上記のように、ＺＦＮＡｆフォーマットは、有効なニューロン値をブリックコンテナの始めにパッキングすることによって符号化する。それらのオフセットは、１６個の値のブリックに対して、１つの値につき４ビットを使用して、別々に符号化された。これは、１６ビット値および１６個の要素のブリックに対する２５％のオーバヘッドを表している。実施形態によれば、メモリオーバヘッドを減らす、代替的な活性化アレイフォーマットが、提供され得る。明暸にするために、以下に続く考察では、ゼロ値活性化だけが、有効でないと考える例を使用する。しかしながら、基準は、実際には、より緩和されることが可能である。
【０１００】
ＲＡＷまたは符号化フォーマット（ＲｏＥ：ＲＡＷ  ｏｒ  Ｅｎｃｏｄｅｄ）
【０１０１】
この符号化は、有効でない値の全ての可能な組合せを符号化することができないことを犠牲にして、ブリックコンテナにつきただ１つ追加のビットを使用する。具体的には、ブリックの第１のビットは、ブリックが符号化されるかどうかを特定する。ブリックが符号化される場合、残りのビットは、ニューロン値およびそれらのオフセットを記憶するのに使用される。有効な活性化の数が、それらがブリックコンテナの中に適合するようなものである限り、ブリックは、符号化されることができる。そうでない場合、全ての活性化値は、現状のままで記憶され、有効でない活性化をスキップする能力は、特定のブリックでは利用可能ではなくなる。例えば、サイズ４および１６ビット値のブリックが、提供される。全体で、それぞれのこのようなブリックは、４ｘ１６＝６４ビットを必要とする。値（１，２，０，０）を含有しているブリックは、６５ビットを使用して、以下のように符号化されることができる：（１（０，１）（１，２））。最初の１は、ブリックが符号化されていることを意味している。その後の（オフセット、値）＝（０，１）は、オフセットで２ビット、値で１６ビットを使用している。全体で、１＋２ｘ（１６＋４）＝４１ビットを必要とする上述のブリックは、利用可能な６５ビットの中に適合することができる。値（２，１，３，４）を含有しているブリックは、６５ビットの中に適合することができず、したがって、６５ビットを使用して未加工のフォーマット：（０，２，１，３，４）に記憶され、最初の１が、ブリックの残りは、符号化されないこと、および各値が、１６ビット長さであることを示す単一ビットである。
【０１０２】
ベクトル非有効活性化識別子フォーマット（ＶＩＡＩ：Ｖｅｃｔｏｒ  Ｉｎｅｆｆｅｃｔｕａｌ  Ａｃｔｉｖａｔｉｏｎ  Ｉｄｅｎｔｉｆｉｅｒ）
【０１０３】
代替的な符号化は、活性化値を適所に残し、追加の１６ビットビットベクトルＩを使用して、どれが、有効でないのか、したがってスキップされ得るのかを符号化する。例えば、４つの要素のブリックと仮定すれば、（１，２，０，４）を含有しているブリックは、現状のままに、（１１０１）を含有する４ビットＩベクトルを加えたものに符号化され得る。１６個の活性化のブリックでは、１６ビットごとに、このフォーマットは、１６／２５６、または６．２５％のオーバヘッドを課する。あるいは、ゼロでない要素は、一緒にパックされることができ、ベクトルを使用して、それらの元のオフセットを導出することができる。例えば、（１，２，０，４）を含有しているブリックは、（１，２，４，０）に、（１１０１）を含有する４ビットベクトルを加えたものとして記憶される。この方法の利点は、ゼロ活性化を記憶することまたは伝えることを回避することが可能であり得るということである。
【０１０４】
有効な活性化だけを記憶する
【０１０５】
別のフォーマットは、有効な値だけを記憶するＶＩＡＩ上に構築される。例えば、ＶＩＡＩの中の（１，０，０，４）の４要素活性化ブリックは、（１００１，１，０，０，４）として記憶される。圧縮ＶＩＡＩでは、それは、代わりに（１００１，１，４）として記憶される。ここでは、２つの有効でないゼロ活性化は、メモリに記憶されなかった。ブリックが、もはや固定サイズを有していないので、１段階の間接参照が、任意のブリックをフェッチすることをサポートするのに必要である。元の活性化アレイ次元が、（Ｘ，Ｙ，Ｉ）である場合には、この間接参照アレイＩＲは、（Ｘ，Ｙ［Ｉ／１６］）ポインタを有する。これらは、前の層の出力時に生み出されることができる。
【０１０６】
メモリ記憶域のさらなる削減は、精度を下げて活性化を記憶することによって可能であり得る。例えば、ｈｔｔｐｓ：／／ａｒｘｉｖ．ｏｒｇ／ａｂｓ／１５１１．０５２３６のコーネル大学ライブラリ経由のオンラインで公的にアクセス可能な「Ｒｅｄｕｃｅｄ−Ｐｒｅｃｉｓｉｏｎ  Ｓｔｒａｔｅｇｉｅｓ  ｆｏｒ  Ｂｏｕｎｄｅｄ  Ｍｅｍｏｒｙ  ｉｎ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｓ」（２０１６年）に記載される、Ｐａｔｒｉｃｋ  Ｊｕｄｄ、Ｊｏｒｇｅ  Ａｌｂｅｒｉｃｉｏ、Ｔａｙｌｅｒ  Ｈｅｔｈｅｒｉｎｇｔｏｎ、Ｔｏｒ  Ａａｍｏｄｔ、Ｎａｔａｌｉｅ  Ｅｎｒｉｇｈｔ  Ｊｅｒｇｅｒ、Ｒａｑｕｅｌ  Ｕｒｔａｓｕｎ、およびＡｎｄｒｅａｓ  Ｍｏｓｈｏｖｏｓの方法を用いることで、プロファイリングに基づいて、前もって層毎に精度を決めることは、可能である。より微細な粒度で精度を調整することも、可能であり得る。しかしながら、ポインタおよび正確な指定子は共に、可能な設置面積の縮小化を減らすオーバヘッドである。
【０１０７】
元のＣＮＶ実施態様では、有効でない活性化は、前の層の出力時に「取り除かれた」。ＺＦＮＡｆは、メモリ記憶域オーバヘッドを発生し、活性化オフセット値の書込みおよび読出しは、追加的なエネルギを必要とする。本節では、ＮＭから有効でない活性化をフェッチしながら、タイルにこれらの活性化値を伝える前に、有効でない活性化を「削除する」代替案ディスパッチャ設計を説明する。
【０１０８】
具体的には、層の処理は、前に述べたように、ディスパッチャに、１ニューロンレーン当たり１つのブリック、１６個の活性化ブリックをフェッチさせることで始まる。次いで、ディスパッチャは、１活性化値当たり１つ、１ブリック当たり１６個のコンパレータを使用して、Ｉ（ＶＩＡＩフォーマットで先に記載したように）ベクトルを現場で算出する。
【０１０９】
次いで、ディスパッチャは、続けて１サイクル当たり１つの割合で有効な活性化を伝える。活性化値を伝えるとき、ディスパッチャは、含有しているブリックの中の活性化のオフセットをさらに送信することになる。例えば、入力活性化ブリックが（１，０，０，４）を含有する場合、２サイクルにわたって、ディスパッチャは、最初に（００ｂ，１）（（オフセット、値））、続いて（１１ｂ，４）をタイルに送信する。全ての有効な活性化値がタイルに伝えられると、ディスパッチャは、続いて、特定のニューロンレーン用の別のブリックを処理する。有効でない活性化を検出するための基準であるべきものには、多くの選択肢が、存在する。例えば、ゼロとの単純な比較、任意の閾値との比較、または２つの内の１つの電力である閾値との比較が、使用され得る。
【０１１０】
図１７は、ディスパッチャでスキップする活性化についての詳細なブリックバッファ実施態様の例を示す。明暸にするために、図は、１６個のブリックバッファ３３５の１つだけを示しており、ブリックが、８個の活性化のみを含有していると仮定する。活性化レーン（図示せず）毎の第２のブリックバッファ３３５は、現行のブリックから有効な活性化を検出して伝えることを、次のブリックをフェッチすることと重複することができる。より多くのこのようなブリックバッファ３３５が、ＮＭ３３０の待ち時間を完全に隠すためには必要であり得る。
【０１１１】
図１７では、ブリックバッファ３３５の中に配置されたばかりの活性化ブリック３４０が、示される。各ブリックバッファ３３５エントリの次に、「有効でない活性化」検出器３４５（「Ｉｎ？」と標示された六角形として示される）がある。これらの検出器３４５は、有効でないそうした活性化を識別する。描画されるように、活性化が有効でない場合、出力は、ゼロに設定される。これらの検出器の集合的な出力は、「１であるリーディングビット」検出器３５５を動かすＥベクトル３５０を形成する。この検出器３５５の出力は、ブリックバッファ３３５から活性化値を読み出す復号器３２０を動かす第１の有効な活性化のオフセットである。次いで、活性化値およびオフセットは、タイルにブロードキャストされる。この活性化のためのＥベクトル３５０位置は、リセットされ、工程は、次の有効な活性化に続く。この例では、４個の有効な活性化値を伝えるためには、４サイクルが必要とされる。
【０１１２】
有効でないシナプス（重み）をスキップする
【０１１３】
本節では、さらに有効でない重みをスキップすることができる本発明のさらなる実施形態を記載する。重みまたはシナプスの大部分は、有効でないことは、知られている。例えば、ｈｔｔｐｓ：／／ａｒｘｉｖ．ｏｒｇ／ａｂｓ／１５１１．０５２３６のコーネル大学ライブラリ経由のオンラインで公的にアクセス可能な「Ｒｅｄｕｃｅｄ−Ｐｒｅｃｉｓｉｏｎ  Ｓｔｒａｔｅｇｉｅｓ  ｆｏｒ  Ｂｏｕｎｄｅｄ  Ｍｅｍｏｒｙ  ｉｎ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｓ」（２０１６年）に記載される、Ｐａｔｒｉｃｋ  Ｊｕｄｄ、Ｊｏｒｇｅ  Ａｌｂｅｒｉｃｉｏ、Ｔａｙｌｅｒ  Ｈｅｔｈｅｒｉｎｇｔｏｎ、Ｔｏｒ  Ａａｍｏｄｔ、Ｎａｔａｌｉｅ  Ｅｎｒｉｇｈｔ  Ｊｅｒｇｅｒ、Ｒａｑｕｅｌ  Ｕｒｔａｓｕｎ、およびＡｎｄｒｅａｓ  Ｍｏｓｈｏｖｏｓの方法論のように、精度が、層毎に調整されると、大部分の重みは、ゼロになる。大抵の場合、追加的重みは、有効ではなく、例えば、重みの値は、ゼロに近い。他の研究は、ネットワークは、さらに、有効でない重みの比率を増やすように訓練され得ることを示してきた。活性化とは異なり、重さの値は、前もって利用可能であり、したがって、どれが有効でないのかを識別することは、静的に行われることができる。この情報は、前もって符号化されることができ、対応する活性化値が、ゼロでない（または、一般に、活性化を有効でないと分類するのに使われている基準によって有効である）ときでさえ、次いで、対応する乗算をランタイムにスキップすることができるハードウェアに伝達され得る。
【０１１４】
前述のようにサイクル毎に、本発明の実施形態は、１ユニット当たり１６個のフィルタにわたって１６個の活性化を並列に処理する。１ユニット当たりの活性化およびフィルタの数は、適宜調整され得る設計パラメータである。有効でない重みをスキップする本発明のこのさらなる実施形態では、その両方が、１６であると仮定される。
【０１１５】
普遍性を失うことなく、入力ニューロンアレイは、２５６の深さおよび１のウィンドウストライドを有し得る。明暸にするために、ｎＢ（ｘ，ｙ，ｉ）を使用して、ｎ（ｘ，ｙ，ｉ）．．．ｎ（ｘ，ｙ，ｉ＋１５）を含有する活性化ブリックを表し、（ｉ  ＭＯＤ  １６）＝０である。同様に、ｓＢｆ（ｘ，ｙ，ｉ）で、フィルタｆの重みｓｆ（ｘ，ｙ，ｉ）．．．ｓｆ（ｘ，ｙ，ｉ＋１５）を含有する重みブリックを表し、再び、（ｉ  ＭＯＤ  １６）＝０である。
【０１１６】
入力活性化ブリックｎＢ（ｘ，ｙ，ｉ）ごとに、１６ビットベクトルＩＢ（ｘ，ｙ，ｉ）は利用可能であり、ビットｊは、活性化ｎ（ｘ，ｙ，ｉ＋ｊ）が有効でないかどうか示すとさらに仮定される。１入力活性化ブリック当たり１つのＩ（ｘ，ｙ，ｉ）ベクトルがあり、それゆえに、ｉは、１６で割り切れる。ＺＦＮＡｆと同様に、Ｉベクトルは、その前の層の出力時、または活性化ブリックが、前節の考察のように、ＮＭから読み出されるとき、ランタイムに算出されることができる。重みブリックごとに、類似のＩＳベクトルは、利用可能である。具体的には、ｆがフィルタである、重みブリックｓＢｆ（ｘ，ｙ，ｉ）ごとに、どの重みが有効でないかを示す１６ビットビットベクトルＩＳＢｆ（ｘ，ｙ，ｉ）が、ある。例えば、ＩＳＢ０（ｘ，ｙ，ｉ）のビットｊは、重みｓ０（ｘ，ｙ，ｉ＋ｊ）（フィルタ０）が有効でないかどうかを示す。ＩＳベクトルは、予め算出されて、ＳＢの拡張部分に記憶されることができる。
【０１１７】
普遍性を失うことなく、あるサイクルＣで、本発明の実施形態において、１６個のニューロンレーンの中の１６個の活性化ブリックの以下のセットを処理することが始まる場合、ニューロンレーン０は、活性化ｎＢ（ｘ，ｙ，０）を処理し、一方で、ニューロンレーン１５は、ｎＢ（ｘ，ｙ，２４０）を処理する。全ての活性化値が有効である場合、これらの１６個の活性化ブリックを処理するのに、１６サイクルが、必要とされる。しかしながら、前に記載した本発明の実施形態では、活性化ブリックは、有効な活性化だけが、処理されるように、符号化される。
【０１１８】
その場合、全てのニューロンレーンは、ブリックの次のセットに移る前に、ほとんどの有効な活性化を備えたものを待つことになる。同等に、ブリック毎に有効な活性化の位置が、上述のＩベクトルを使用して符号化される場合には、同じことが可能である。ディスパッチャは、どれが、レーンで処理する次の有効な活性化であるのかを識別するために、ニューロンレーン毎にＩベクトル上でリーディングゼロ検出を行う。次いで、それは、Ｉの中の次のゼロビットに移り、ついには、全ての有効な活性化が、レーンで処理される。全てのニューロンレーンがそれらの有効な活性化を処理したとき、全てが、ブリックの次のセットに移る。
【０１１９】
次に、ＩＳベクトルが、さらに利用可能であるので、ディスパッチャがする必要のある全てのことは、それらを考慮して、活性化が伝えられるべきかどうかを決定することである。具体的には、各活性化が、それぞれが異なるフィルタからの１６個の重みと結合されるので、全ての対応する重みが、有効でない場合、有効な活性化は、スキップされることがあり得た。すなわち、各ニューロンレーンは、それが、どの活性化を処理しなければならないのかを決定するために、単一のＩベクトルを、対応する重みブリック用の１６個のＩＳベクトルと結合させることができる。具体的には、ｎＢ（ｘ，ｙ，ｉ）を処理するニューロンレーンは、以下の通り、Ｃａｎ  Ｓｋｉｐ１６ビットベクトルの各ビットｊを算出する：
【数２】
2019522850.tif 000004
【０１２０】
オペレーションは、ブーリアンであり、積は、ＡＮＤであり、和は、ＯＲである。すなわち、活性化が、Ｉ（活性化ベクトル）によって指定されるように有効でない場合、または全ての対応する重みが、有効でない場合、活性化値は、スキップされることがあり得る。同時的に処理されているフィルタの数が多いほど、そうでなければ有効な活性化がスキップされる確率は、低くなる。それぞれ１６個のフィルタの１６個のタイルを使用する元のＤａＤｉａｎＮａｏ構成では、１フィルタ当たり１つ、２５６個の重みが、スキップされる活性化では有効でない必要があることになる。しかしながら、プルーニングは、有効でない重みを識別することが可能であると知られており、再訓練は、有効でない重みの数を増やすことが知られてきた。両方とも、本発明の前述した実施形態によれば可能であるものを越えて追加のニューロンをスキップする機会を増やすことになる。そのうえ、他の構成は、より少ないフィルタを同時的に処理する場合もあり、したがって、全て有効でない重みと活性化を結合する、より大きい可能性を有している。
【０１２１】
上記の数式では、全てのＩＳ積項が、定数であることに気付くことができる。本発明の前述した実施形態で説明したように、１６個の重みブリックの同じセットは、異なるウィンドウ上で同時的に処理される。したがって、ＩＳ積（和の第１項）は、予め算出されることができ、最終結果だけが、記憶されて、ハードウェアに伝えられる必要がある。１６のブリックサイズでは、そして、１６個のフィルタを同時的に処理するタイルでは、オーバヘッドは、１つのブリックにつき１６ビットから、１６個のブリックにつき１６ビットへと下がる。１６ビット重みを仮定すると、オーバヘッドは、１／１６から１／２５６へと下がる。
【０１２２】
図１８Ａから図１８Ｃは、有効でない重みをスキップする本発明のこのさらなる実施形態のオペレーションの例を示す。明暸にするために、例は、ブリックサイズは、４であり、２つのフィルタを並列に、そしてフィルタ毎に２つの重み（シナプス）を処理するタイルを示していると仮定する。部分（ｂ）が示すように、活性化（ニューロン）ブリックｎＢ（ｘ，ｙ，ｉ＋１２）は、３つの有効な活性化を含有するので、全ての入力ブリックを処理するのに３サイクルを要する。しかしながら、図１８Ｃが示すように、これらの有効な活性化の１つ、具体的には、ｎ（ｘ，ｙ，１３）＝６は、共に０であって、ゆえに有効でない重みｓ０（ｘ，ｙ，１３）およびｓ１（ｘ，ｙ，１３）と結合されていたであろう。本発明のこのさらなる実施形態は、この演算をスキップし、ここでは、入力活性化ブリックは、全て、ちょうど２サイクルで処理され得る。追加の有効な活性化も、有効でない重みと結合されていたであろうことから、スキップされる。
【０１２３】
実施形態によれば、アクセラレータは、さらに、ゼロに近い値を選択的にスキップすることによって、バックプロパゲーション訓練プロシージャをスピードアップすることができる。ニューラルネットワークを訓練するために、アクセラレータは、処理を実施することができ、分類エラーが、逆伝搬され、それに応じて、ネットワークの重みが更新される。性能が、値の大きさによって決まる実施形態では、何らかの設定された基準にしたがって、エラーを閾値化することによって、小規模の更新を回避することは、有利であり得る。このようにして、エンジンは、これらの値を処理することを完全にスキップすることができる。一部の重み更新が省略されるので、ニューラルネットワークの詳細および閾値化基準によっては、ある程度の分類精度を実現するのに、より多くの訓練段階が必要な場合もあり得るが、これらの段階のそれぞれは、より少ない時間で行われ、全体的により高速な訓練プロシージャとなる。実施形態によれば、システムは、ニューラルネットワーク訓練のために提供されることができ、逆伝搬されたエラー値は、動的または静的に設定された閾値に基づいて、０に設定され、さらに、システムは、０のエラー値に関する重み更新演算を省略することができる。
【０１２４】
上記説明および関連図の部分が、ハードウェアの使用を記載するまたは示唆する場合もあるが、本発明は、ＧＰＵ（図形処理ユニット）などの、プロセッサ上のソフトウェアでエミュレートされることができ、類似の性能強化を生成することができることを、さらに留意されたい。そのうえ、使用されている「活性化」および「ニューロン」という用語は、技術および文献において交換可能であることが知られており、同じことは、制限なく本明細書に適用されるものである。上述したニューロンメモリ（ＮＭ）は、所望の実施態様によって、専用であっても、共有であっても、分散されていても、またはそれらの組み合わせでもよい。
【０１２５】
本発明は、その精神または主要な特徴から逸脱することなく、他の具体的な形で具現化され得る。本発明のある種の変更および修正は、当業者には明白であろう。したがって、現在論じている実施形態は、例示的であり制限的ではないと考えられ、本発明の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示されており、特許請求の範囲と等価の意味および範囲の中に入る全ての変更は、したがって、その中に包含されるように意図されている。
【図１】
2019522850.tif 000005
【図２】
2019522850.tif 000006
【図３】
2019522850.tif 000007
【図４】
2019522850.tif 000008
【図５】
2019522850.tif 000009
【図６】
2019522850.tif 000010
【図７】
2019522850.tif 000011
【図８】
2019522850.tif 000012
【図９】
2019522850.tif 000013
【図１０】
2019522850.tif 000014
【図１１】
2019522850.tif 000015
【図１２】
2019522850.tif 000016
【図１３】
2019522850.tif 000017
【図１４】
2019522850.tif 000018
【図１５】
2019522850.tif 000019
【図１６】
2019522850.tif 000020
【図１７】
2019522850.tif 000021
【図１８】
2019522850.tif 000022
【国際調査報告】
2019522850.tif 000023
2019522850.tif 000024
2019522850.tif 000025
2019522850.tif 000026