特表2026-532065IP Force 特許公報全文掲載

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】
(54)【発明の名称】ニューラルネットワーク動作命令
(51)【国際特許分類】
   
【FI】
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】
(86)(22)【出願日】
(85)【翻訳文提出日】
(86)【国際出願番号】
(87)【国際公開番号】
(87)【国際公開日】
(31)【優先権主張番号】63/580,463
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(31)【優先権主張番号】18/643,336
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(81)【指定国・地域】
(71)【出願人】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【弁護士】
【氏名又は名称】佐藤 仁
(72)【発明者】
【氏名】アツル レーレ
(72)【発明者】
【氏名】マヘシュ メヘンデール
(72)【発明者】
【氏名】ウリ ウェインリブ
(72)【発明者】
【氏名】アヌラグ チョウドゥハリ
(57)【要約】
ニューラルネットワーク動作を行うための命令及び関連するハードウェアに対する改善がここで開示される。一実施例において、処理デバイスが命令フェッチ回路要素(101)とデコーダ(103)とニューラルネットワーク動作回路要素(113)とを含む。命令フェッチ回路要素は、或る動作と動作群の動作の一つ又は複数と共に用いるためのニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定する命令(105)をメモリからフェッチし、命令をデコーダに提供するよう構成されている。デコーダは、ニューラルネットワーク動作回路要素に、動作に基づいて、ニューラルネットワーク動作回路要素の第1のサブ回路と値のセットの第1のサブセットとを用いて畳み込み動作を実施させるか、又はニューラルネットワーク動作回路要素の第2のサブ回路と値のセットの第2のサブセットとを用いてバッチ正規化動作を実施させるよう構成されている。
【特許請求の範囲】
【請求項】
処理デバイスであって、
命令フェッチ回路要素と、
前記命令フェッチ回路要素に結合されているデコーダ回路要素と、
前記デコーダ回路要素に結合されているニューラルネットワーク動作回路要素と、
を含み、
前記命令フェッチ回路要素が、
メモリからニューラルネットワーク命令をフェッチし、
前記ニューラルネットワーク命令を前記デコーダ回路要素に提供する、
ように構成されており、
前記ニューラルネットワーク命令が、動作群のうちの或る動作とデータのセットとを特定し、
前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素に、前記動作に基づいて、前記ニューラルネットワーク動作回路要素の第1のサブ回路と前記データのセットとを用いて畳み込み動作を実施させるように、又は、前記ニューラルネットワーク動作回路要素の第2のサブ回路と前記データのセットとを用いてバッチ正規化動作を実施させるように構成されている、
処理デバイス。
【請求項】
請求項1に記載の処理デバイスであって、前記ニューラルネットワーク命令が、レジスタオペランド及びセレクタオペランドを特定することによって、前記データのセットを特定する、処理デバイス。
【請求項】
請求項2に記載の処理デバイスであって、
前記レジスタオペランドが、レジスタ位置に対応しており、
前記レジスタ位置が、入力データレジスタ、重みデータレジスタ、及び宛先データレジスタに関する位置を含む、
処理デバイス。
【請求項】
請求項3に記載の処理デバイスであって、前記デコーダ回路要素が、
前記畳み込み動作を特定する前記ニューラルネットワーク命令に基づいて、前記ニューラルネットワーク動作回路要素にレジスタ位置の第1のセットを提供し、
前記バッチ正規化動作を特定する前記ニューラルネットワーク命令に基づいて、前記ニューラルネットワーク動作回路要素にレジスタ位置の第2のセットを提供する、
ように更に構成されている、
処理デバイス。
【請求項】
請求項2に記載の処理デバイスであって、前記セレクタオペランドが、前記動作が前記畳み込み動作であることに基づいて第1の値を特定し、前記動作が前記バッチ正規化動作であることに基づいて第2の値を特定する、処理デバイス。
【請求項】
請求項1に記載の処理デバイスであって、前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素に、前記ニューラルネットワーク動作回路要素の前記第1のサブ回路を用いて前記畳み込み動作を単一のサイクルで実施させるように構成されている、処理デバイス。
【請求項】
請求項1に記載の処理デバイスであって、前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素に、前記ニューラルネットワーク動作回路要素の前記第2のサブ回路を用いて前記バッチ正規化動作を2サイクルで実施させるように構成されている、処理デバイス。
【請求項】
請求項1に記載の処理デバイスであって、前記ニューラルネットワーク動作回路要素が、マルチプレクサのセット、乗算器回路のセット、加算器回路のセット、シフタ回路のセット、符号付加回路のセット、及びクランプ回路のセットを含む、処理デバイス。
【請求項】
装置であって、
プログラム命令を格納するように構成されているメモリデバイスと、
ニューラルネットワーク動作を実施するように構成されているニューラルネットワーク動作回路要素と、
前記ニューラルネットワーク動作回路要素に結合されているデコーダ回路要素と、
前記メモリデバイスと前記デコーダ回路要素とに結合されており、前記メモリデバイスから前記プログラム命令をフェッチするように構成されている、命令フェッチ回路要素と、
を含み、
前記プログラム命令が、前記ニューラルネットワーク動作のうちの或る動作とデータのセットとを特定するニューラルネットワーク命令を含むとき、前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素のサブ回路に、前記データのセットを用いて前記動作を実施させるように構成されている、
装置。
【請求項】
請求項9に記載の装置であって、前記ニューラルネットワーク動作が、畳み込み動作及びバッチ正規化動作を含む、装置。
【請求項】
請求項10に記載の装置であって、前記ニューラルネットワーク命令が、レジスタオペランド及びセレクタオペランドを特定することによって、前記データのセットを特定する、装置。
【請求項】
請求項11に記載の装置であって、
前記レジスタオペランドが、レジスタ位置に対応しており、
前記レジスタ位置が、入力データレジスタ、重みデータレジスタ、及び宛先データレジスタに関する位置を含み、
前記セレクタオペランドが、前記動作が前記畳み込み動作であることに基づいて第1の値を特定し、前記動作が前記バッチ正規化動作であることに基づいて第2の値を特定する、
装置。
【請求項】
請求項12に記載の装置であって、前記ニューラルネットワーク命令が前記畳み込み動作を特定するとき、前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素の第1のサブ回路に、前記値のセットの第1のサブセットを用いて前記畳み込み動作を実施させるように構成されている、装置。
【請求項】
請求項13に記載の装置であって、前記ニューラルネットワーク動作回路要素の前記第1のサブ回路に、前記値のセットの前記第1のサブセットを用いて前記畳み込み動作を実施させるために、前記デコーダ回路要素が、レジスタ位置の第1のセットと前記セレクタオペランドによって特定された前記第1の値とを、前記第1のサブ回路に提供するように構成されている、装置。
【請求項】
請求項12に記載の装置であって、前記ニューラルネットワーク命令が前記バッチ正規化動作を特定するとき、前記デコーダ回路要素が、前記ニューラルネットワーク動作回路要素の第2のサブ回路に、前記値のセットの第2のサブセットを用いて前記バッチ正規化動作を実施させるように構成されている、装置。
【請求項】
請求項15に記載の装置であって、前記ニューラルネットワーク動作回路要素の前記第2のサブ回路に、前記値のセットの前記第2のサブセットを用いて前記バッチ正規化動作を実施させるために、前記デコーダ回路要素が、レジスタ位置の第2のセットと、前記セレクタオペランドによって特定された前記第2の値とを、前記第2のサブ回路に提供するように構成されている、装置。
【請求項】
一つ又は複数のコンピュータ可読ストレージ媒体であって、
前記一つ又は複数のコンピュータ可読ストレージ媒体が、格納されたプログラム命令を含み、
前記格納されたプログラム命令が、動作群のうちの或る動作とデータのセットとを特定するニューラルネットワーク命令を含み、前記格納されたプログラム命令が、処理システムによって読み取られて実行されると、
前記動作に基づいて、前記ニューラルネットワーク動作回路要素の第1のサブ回路と前記データのセットとを用いて畳み込み動作を実施するように、又は、前記ニューラルネットワーク動作回路要素の第2のサブ回路と前記データのセットとを用いてバッチ正規化動作を実施するように、
プロセッサに指示する、
一つ又は複数のコンピュータ可読ストレージ媒体。
【請求項】
請求項17に記載の一つ又は複数のコンピュータ可読ストレージ媒体であって、前記値のセットが、レジスタオペランドとセレクタオペランドとを含む、一つ又は複数のコンピュータ可読ストレージ媒体。
【請求項】
請求項18に記載の一つ又は複数のコンピュータ可読ストレージ媒体であって、
前記レジスタオペランドが、レジスタ位置に対応しており、
前記レジスタ位置が、入力データレジスタ、重みデータレジスタ、及び宛先データレジスタに関する位置を含み、
前記セレクタオペランドが、前記動作が前記畳み込み動作であることに基づいて第1の値を特定し、前記動作が前記バッチ正規化動作であることに基づいて第2の値を特定する、
一つ又は複数のコンピュータ可読ストレージ媒体。
【請求項】
請求項17に記載の一つ又は複数のコンピュータ可読ストレージ媒体であって、前記プログラム命令が、前記畳み込み動作を単一のサイクルで実施し、前記バッチ正規化動作を2サイクルで実施するように、前記プロセッサに指示する、一つ又は複数のコンピュータ可読ストレージ媒体。

【発明の詳細な説明】
【技術分野】
【】
本開示の態様は、コンピュータハードウェア及びソフトウェアの分野に関し、ニューラルネットワーク計算のための新たなハードウェア命令
【背景技術】
【】
ディープニューラルネットワーク(DNN)の実装は、ハイエンドのプロセッサにおける実装と比較して、ローエンドで低コストのマイクロコントローラなどのエッジノードにおいて困難な場合がある。DNNは、多くの場合、DNNの面積、コスト、及び性能間の最良トレードオフを生じさせるために、各々が異なる方式で最適化及び実装され得る、いくつかの関数及び層を含む。
【】
こうした関数のうちの2つは、行列積和(MMA)関数を用いる畳み込み関数と、バッチ正規化とを含む。畳み込み関数は、2値(1ビット)及び3値(2ビット)の重みを用いることにより、活性化ストレージを削減し得、単一クロックサイクルにおける、より多数の畳み込み動作の性能を向上させることができる。しかしながら、そのような畳み込み関数(すなわち、16×8畳み込み)を可能にするために、DNNは、8×8畳み込み(すなわち、8ビットのデータ及び8ビットの重み/活性化)と比較して、付加的なリソースを利用し得るが、精度の向上はもたらされない。バッチ正規化関数とは、DNNの訓練を高速化するために用いられる動作を指す。バッチ正規化関数に含まれる数学的動作は、スケール(乗算)、シフト(除算)、及びクランプ(最大閾値と最小閾値とを比較し、入力が範囲外である場合には最小値/最大値に飽和させる)動作を含む。既存のDNNは、各タイプの関数に関して用いられる動作の相違を考慮して、異なる論理及びハードウェアを利用する。
【発明の概要】
【】
ニューラルネットワーク内で関数を高速化するための、低コスト、低電力、及び低レイテンシの解決策を提供する技術が、本明細書で開示される。種々の実装において、データに対して畳み込み動作又はバッチ正規化動作のいずれかを実施するために、そうした動作を複数のハードウェアアクセラレータにオフロードすることを必要とするのではなく、ニューラルネットワーク命令が、CPUの命令セットアーキテクチャ(ISA)に追加される。
【】
一例の実装において、処理デバイスが、命令フェッチ回路要素と、命令フェッチ回路要素に結合されているデコーダ回路要素と、デコーダ回路要素に結合されているニューラルネットワーク動作回路要素とを含む。命令フェッチ回路要素は、メモリから、或る動作と、動作群の動作のうちの一つ又は複数と共に用いるためのニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定するニューラルネットワーク命令をフェッチし、デコーダ回路要素にニューラルネットワーク命令を提供するように構成されている。デコーダ回路要素は、ニューラルネットワーク動作回路要素に、動作に基づいて、ニューラルネットワーク動作回路要素の第1のサブ回路と値のセットの第1のサブセットとを用いて、畳み込み動作を実施させるように、又は、ニューラルネットワーク動作回路要素の第2のサブ回路と値のセットの第2のサブセットとを用いて、バッチ正規化動作を実施させるように構成されている。
【】
本概要は、技術的開示において下記で更に説明されている構想の抜粋を、簡略化された形態で紹介するために提供されている。本概要は、特許請求される主題の主要な特徴又は本質的な特徴を特定することを意図するものでもなければ、特許請求される主題の範囲を限定するために用いられることを意図するものでもない点が理解され得る。
【図面の簡単な説明】
【】
以下の図面を参照して、本開示の多くの態様が、より良好に理解され得る。図面中の構成要素は、必ずしも正確な縮尺ではなく、その代わりに、本開示の原理を明確に示すことに重点が置かれている。また、図面において、同様の参照符号は、いくつかの図を通して、対応する部分を示している。いくつかの実施例が、これらの図面に関連して説明されているが、本明細書で開示される実施例に限定されるものではない。むしろ、意図するところは、全ての代替物、改変、及び等価物を包含することである。
【】
【図】一実装における処理システムを図示する。
【】
【図】一実装における処理システムを動作させる方法を図示する。
【】
【図】一実装における動作環境を図示する。
【】
【図】一実装における動作シーケンスを図示する。
【】
【図】一実装における動作アーキテクチャを図示する。
【図】一実装における動作アーキテクチャを図示する。
【】
【図】他の図に関して下記で論じられる種々の動作環境、動作アーキテクチャ、動作プロセス、動作シナリオ、及び動作シーケンスを実装するために適切な、コンピューティングシステムを図示する。
【発明を実施するための形態】
【】
ニューラルネットワークの畳み込み動作及びバッチ正規化動作を、複数の専用ハードウェアアクセラレータにオフロードすることを必要とせずに高速化する、システム、方法、及びデバイスが、本明細書で開示される。むしろ、双方のタイプのニューラルネットワーク動作をサポートするための単一の回路への共有のデータ経路を用いて、CPUによって直接復号及び実行され得る、ニューラルネットワーク命令が開示される。開示される技術は、畳み込み動作及びバッチ正規化動作を実行するシステムの、電力消費、コスト、及びレイテンシを低減する、高速化の方法を提供するために、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせの状況において実装され得る。種々の実装において、適切なコンピューティングシステムが、ニューラルネットワークの畳み込み動作及びバッチ正規化動作を実行するために、ニューラルネットワーク命令を介して、ニューラルネットワーク動作回路要素を採用する。
【】
一実装において、処理回路要素は、ニューラルネットワークの動作を実行するための実行パイプラインを介した、複数のデータ経路を含む。各データ経路は、命令のセットと、そうした命令のデータに対して実施される動作のセットとに関連付けられ得、他のデータ経路の実行回路要素と共有される実行回路要素と、他のデータ経路の実行回路要素とは異なる回路要素との組み合わせを含み得る。例えば、複数のデータ経路は、算術論理データ経路、浮動小数点データ経路、及びニューラルネットワーク動作データ経路を含み得る。動作において、デコーダが、そうした3つのデータ経路に関連する命令を受け取ることになる。これに応答して、デコーダは、命令を提供するための適切なデータ経路を識別するために、命令を復号する。デコーダはまた、命令に関連付けられているデータの位置を識別するために、命令を復号する。例えば、デコーダは、命令を実施するために必要とされるデータを格納しているレジスタの、レジスタアドレスを識別し得る。デコーダが、適切なデータ経路とデータのレジスタアドレスとの双方を識別すると、デコーダは、適切なデータ経路にレジスタアドレスを提供する。
【】
例えば、デコーダは、ニューラルネットワーク命令によって識別されたデータを格納しているレジスタに関するレジスタアドレスを、ニューラルネットワーク動作データ経路に提供し得る。これに応答して、ニューラルネットワーク動作データ経路は、ニューラルネットワーク動作回路要素を介して、ニューラルネットワーク命令によって識別されたデータに対して畳み込み動作又はバッチ正規化動作のいずれかを実施する。
【】
一実施例において、ニューラルネットワーク動作データ経路のニューラルネットワーク動作回路要素は、例えば、マルチプレクサ、加算器、シフタ、フリップフロップ及びラッチ、並びに、その他の論理ゲート及び論理デバイスなどの、複数のハードウェア構成要素を含む。ニューラルネットワーク動作回路要素は、畳み込み動作又はバッチ正規化動作の双方を実施するために用いられ得、そのため、面積及びコストの削減を改善する結果をもたらし得る。動作において、デコーダは、ニューラルネットワーク命令によって識別されたデータのレジスタ位置を、ニューラルネットワーク動作データ経路に提供する。これに応答して、ニューラルネットワーク動作データ経路は、ニューラルネットワーク命令によって識別されたデータに対して、いずれの動作をニューラルネットワーク命令が特定しているかに基づいて、畳み込み動作又はバッチ正規化動作のいずれかを実施する。いずれかの動作をニューラルネットワーク動作回路要素が実施することを可能にするために、ニューラルネットワーク命令は、動作のタイプと、特定された動作及び特定されたデータと共に用いるためのニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定する。動作の出力は、ニューラルネットワーク命令によって識別されたような、処理回路要素の一つ又は複数の宛先レジスタに送られる。
【】
ニューラルネットワーク動作の結果は、ネットワークの次のノードへの入力を表し得る。つまり、ニューラルネットワーク動作の結果は、ニューラルネットワークの将来の動作のための入力として用いられ得る。代替として、ニューラルネットワーク動作の結果は、ニューラルネットワークの全体的な出力を表し得る。
【】
一実施例において、処理デバイスが、命令フェッチ回路要素と、命令フェッチ回路要素に結合されているデコーダ回路要素と、デコーダ回路要素に結合されているニューラルネットワーク動作回路要素とを含む。命令フェッチ回路要素は、メモリから、或る動作と、動作群の動作のうちの一つ又は複数と共に用いるためのニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定する、ニューラルネットワーク命令をフェッチし、デコーダ回路要素にニューラルネットワーク命令を提供するように構成されている。デコーダ回路要素は、ニューラルネットワーク動作回路要素に、動作に基づいて、ニューラルネットワーク動作回路要素の第1のサブ回路と値のセットのうちの第1のサブセットとを用いて、畳み込み動作を実施させるように、又は、ニューラルネットワーク動作回路要素の第2のサブ回路と値のセットのうちの第2のサブセットとを用いて、バッチ正規化動作を実施させるように構成されている。
【】
別の実施例において、メモリデバイスと、ニューラルネットワーク動作回路要素と、デコーダ回路要素と、命令フェッチ回路要素とを含む装置が提供される。メモリデバイスは、プログラム命令を格納するように構成されている。ニューラルネットワーク動作回路要素は、ニューラルネットワーク動作を実施するように構成されている。デコーダ回路要素は、ニューラルネットワーク動作回路要素に結合されている。命令フェッチ回路要素は、メモリデバイスとデコーダ回路要素とに結合されており、メモリデバイスからプログラム命令をフェッチするように構成されている。デコーダ回路要素は、プログラム命令によって識別されたデータを、装置の計算回路要素へ提供させるように構成されており、プログラム命令が、ニューラルネットワーク動作のうちの或る動作と、ニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定するニューラルネットワーク命令を含むとき、デコーダは、ニューラルネットワーク動作回路要素のサブ回路に、そうした動作を実施させるように構成されている。
【】
更に別の実施例において、格納されたプログラム命令を含む一つ又は複数のコンピュータ可読ストレージ媒体が提供され、プログラム命令は、動作群のうちの或る動作と、動作群の動作のうちの一つ又は複数と共に用いるためのニューラルネットワーク動作回路要素のサブ回路を有効化する値のセットとを特定するニューラルネットワーク命令を含み、処理システムによって読み取られて実行されると、プロセッサに、種々の関数を実施するように指示する。例えば、プログラム命令は、プロセッサに、動作に基づいて、ニューラルネットワーク動作回路要素の第1のサブ回路と値のセットのうちの第1のサブセットとを用いて、畳み込み動作を実施するように、又は、ニューラルネットワーク動作回路要素の第2のサブ回路と値のセットのうちの第2のサブセットとを用いて、バッチ正規化動作を実施するように指示し得る。
【】
ここで図を参照すると、図1は、本明細書では処理システム100と称する、ニューラルネットワーク命令を実行するための処理システムを図示する。処理システム100は、単一の処理デバイス内に実装され得るか、或いは、プログラム命令を実行する際に協働する複数の処理デバイス又はサブシステムにわたって分散され得る、プロセッサを表している。処理システム100の例としては、一つ又は複数の中央処理装置が挙げられる。一実装において、処理システム100は、改変されたArm Cortex M33コアプロセッサを表している。処理システム100は、命令フェッチ回路要素101、デコーダ103、計算ユニット107、及びレジスタ115を含むが、それらに限定されない。命令フェッチ回路要素101、デコーダ103、計算ユニット107、及びレジスタ115は、単一の集積回路チップに統合される場合もあれば、又は、複数の相互接続されたチップとして実装される場合もある。処理システム100は、例えば、コンピュータビジョンシステムなどの、より大きい状況において実装され得る。
【】
命令フェッチ回路要素101は、関連するプログラムメモリから、命令(例えば、命令105)をフェッチし、そうした命令をデコーダ103に提供する、回路要素を表している。命令フェッチ回路要素101は、アドレスバス及びデータバス、命令キャッシュ、並びに制御ユニットなどの、構成要素を含み得る。命令フェッチ回路要素101は、シーケンシャルフェッチ回路要素、プリフェッチ回路要素、分岐予測回路要素、又はトレースキャッシュ回路要素などの、回路要素タイプを含み得る。
【】
デコーダ103は、符号化された入力を、読み取り可能な出力信号に変換する、多入力多出力論理回路を表している。デコーダ103は、ニューラルネットワークが動作を実行するための命令を送達するために、計算ユニット107に結合されている。一実装において、デコーダ103はまた、計算ユニット107に関連する命令を受け取るために、命令フェッチ回路要素101にも結合されている。動作において、デコーダ103は、命令フェッチ回路要素101から命令105を受け取り、命令バッファに命令105を格納する。次に、デコーダ103は、命令105が動作対象のデータ(例えば、オペランド)の位置を識別するために、命令105を復号する。一実装において、命令105は、命令105を実施するためのデータを格納している、一つ又は複数のレジスタアドレスを特定する。例えば、命令105を実施するために用いられるデータは、レジスタ115に格納され得る。代替として、命令105を実施するために用いられるデータは、オフチップメモリのレジスタファイルに格納されている場合もある。
【】
命令105はまた、データに対して実施される動作群のうちの或る動作を特定する。命令105は、算術論理動作、浮動小数点動作、又はニューラルネットワーク動作(例えば、畳み込み動作、バッチ正規化動作)を含む、3つのタイプの動作を表し得る。一実装において、命令105は、実施される動作、並びに、データを格納しているレジスタ、の双方を特定する。例えば、命令105は、レジスタ115によって格納されているデータに対してニューラルネットワーク動作を実施するために、ニューラルネットワーク動作回路要素113を採用する、ニューラルネットワーク命令を表し得る。より具体的には、ニューラルネットワーク命令は、動作及び対応するデータを特定し得、また、そうした動作及びデータと共に用いるためのニューラルネットワーク動作回路要素113のサブ回路を有効化する値のセットを特定し得る。動作群は、バッチ正規化動作及び畳み込み動作を含み得る。畳み込み動作には、行列積和(MMA)関数を用いる、8ビット×8ビットの畳み込み動作が含まれ得る。バッチ正規化動作には、スケール関数、シフト関数、及び加算関数を用いる、バッチ正規化動作が含まれ得る。各動作は、ニューラルネットワーク動作回路要素113のサブ回路を用いることができる。
【】
一実装において、命令105によって特定されるレジスタは、入力データ、重みデータ、及び出力データを格納する、レジスタを表している。入力データは、画像データ、音響データ、振動データ、電流データ、電圧データ、又はそれらの組み合わせなどの、センサによって収集されたデータを表し得る。代替として、入力データは、センサによって収集された処理データなどの、ハードウェア及び/又はソフトウェアによって生成された計算データを表し得る。代替として、入力データは、ネットワークの前のノードによって生成された計算データを表し得る。重みデータは、ネットワークのノードによって入力データに適用される重み値を表している。出力データは、計算ユニット107によって生成された出力を表している。それゆえ、命令105は、出力データを格納するための宛先レジスタを識別する。一実装において、命令105によって識別されたデータは、レジスタ115によって格納される。別の実装において、データは、処理システム100に関連付けられているメモリによって格納される。動作において、デコーダ103は、命令105を実施するためのデータのレジスタアドレスを識別し、そうしたデータのレジスタアドレスを、適切な計算ユニットにロードする。
【】
計算ユニット107は、データを処理するためにプロセッサにおいて利用可能な、計算ユニット107の実行回路要素を介した、様々なデータ経路を表している。計算ユニット107は、算術論理ユニット(ALU)109、浮動小数点ユニット(FPU)111、及びニューラルネットワーク動作回路要素113を含むが、それらに限定されない。ALU 109は、固定小数点数に対して算術動作及びビット動作を実行する構成要素を表している。ALUは、オペランドに対する単純な加算及び減算などの動作、並びに、AND及びORなどの論理動作を実施するように構成されている回路要素を含む。FPU 111は、浮動小数点数に対して動作を遂行するように設計されている構成要素を表している。例示の動作としては、乗算、除算、及び平方根が挙げられる。最後に、ニューラルネットワーク動作回路要素113は、データに対してバッチ正規化動作及び畳み込み動作の双方を実行する構成要素を表している。一実施例において、いずれの動作が命令105によって特定されているかに基づいて、ニューラルネットワーク動作回路要素113の異なる要素が有効化され得る。ニューラルネットワーク動作回路要素113のいくつかの要素が、バッチ正規化動作及び畳み込み動作を実行するために共有され得る。
【】
一実装において、ニューラルネットワーク動作回路要素113は、畳み込み動作及びバッチ正規化動作(集合的にニューラルネットワーク動作と称する)を実施するように特別に設計されている回路要素を含む。例えば、ニューラルネットワーク動作回路要素113は、数ある回路及び構成要素の中でも特に、マルチプレクサ、乗算器回路、加算器回路、シフタ回路、符号付加回路、及びクランプ回路のうちの一つ又は複数のセットを含み得る。動作において、デコーダ103は、命令フェッチ回路要素101から、本明細書ではニューラルネットワーク命令と称する、ニューラルネットワーク動作のうちの一つに関する命令を受け取る。ニューラルネットワーク命令は、動作群(ニューラルネットワーク動作)のうちの或る動作と、動作に関するデータを格納しているレジスタアドレスと、特定された動作のうちの一つ又は複数と共に用いるためのニューラルネットワーク動作回路要素113のサブ回路を有効化する値のセットとを特定し得る。
【】
デコーダ103は、ニューラルネットワーク動作に関するデータを格納しているレジスタアドレスを決定するために、ニューラルネットワーク命令を復号する。例えば、ニューラルネットワーク命令は、ニューラルネットワーク動作に関するデータ値を格納しているレジスタを示し得る。また、ニューラルネットワーク命令は、ニューラルネットワーク動作の出力がロードされる、宛先レジスタのアドレスを示し得る。デコーダ103は、ニューラルネットワーク動作回路要素113に、デコーダ103によって識別されたレジスタによって格納されているデータに対して、バッチ正規化動作又は畳み込み動作のいずれかを実施させるために、識別されたレジスタアドレスをニューラルネットワーク動作回路要素113にロードする。
【】
ニューラルネットワーク命令が畳み込み動作を特定する例において、ニューラルネットワーク動作回路要素113は、ニューラルネットワーク動作回路要素113の畳み込みサブ回路を介して畳み込み動作を実施し、宛先レジスタに結果を出力する。同様に、ニューラルネットワーク命令がバッチ正規化動作を特定する例において、ニューラルネットワーク動作回路要素113は、ニューラルネットワーク動作回路要素113のバッチ正規化サブ回路を介してバッチ正規化動作を実施し、宛先レジスタに結果を出力する。一実装において、宛先レジスタは、レジスタ115内に位置している。いくつかの例において、ニューラルネットワーク動作に関連付けられた入力データを格納しているレジスタアドレス又はレジスタ位置は、32ビットレジスタ及び64ビットレジスタのうちの一つ又は複数、或いは、それらの組み合わせ又は変形を含み得る。また、宛先レジスタは、64ビットレジスタを含み得る。しかしながら、他のサイズのレジスタも想到され得る。図5A及び図5Bの動作アーキテクチャ500は、畳み込みサブ回路及びバッチ正規化サブ回路の双方を含む、ニューラルネットワーク動作回路要素を表している。
【】
レジスタ115は、ニューラルネットワークの計算データを格納するために用いられるレジスタファイルを表している。レジスタ115の計算データは、関連するシステムによって収集された入力データ、計算ユニット107によって生成された出力データ、又は、ニューラルネットワークによって採用される重みデータを含み得る。
【】
動作において、デコーダ103は、実施される動作を決定するために、命令フェッチ回路要素101から命令105を受け取る。次に、デコーダ103は、データを格納しているレジスタを識別するために、命令105を復号する。例えば、命令105は、データを格納しているレジスタに関するレジスタアドレス、並びに、出力データを格納することになる宛先レジスタを識別し得る。命令105を復号すると、デコーダ103は、命令105の動作を実行するためのデータのレジスタアドレスを、適切な計算ユニットに通知する。算術動作に関連する命令は、ALU 109によって実行される。浮動小数点動作に関連する命令は、FPU 111によって実行される。ニューラルネットワーク動作に関連する命令は、ニューラルネットワーク動作回路要素113によって実行される。
【】
復号された命令を受け取ると、対応する計算ユニットは、復号された命令の動作を実施する。計算ユニット107の結果は、レジスタ115によって格納される。一実装において、計算ユニット107の結果は、ニューラルネットワークの次のノードへの入力を表している。別の実装において、計算ユニット107の結果は、ニューラルネットワークの全体的な出力を表す。
【】
図2は、図1の要素を参照する、本明細書では方法200と称する、一実装における処理システム100を動作させる方法を図示する。種々の例において、処理システム100の要素が、方法200の工程を実施し得る。したがって、方法200は、ハードウェア、ソフトウェア、ファームウェア、或いは、それらの組み合わせ又は変形において実装され得る。
【】
動作205において、命令フェッチ回路要素101が、メモリから命令105をフェッチする。命令フェッチ回路要素101は、オンチップメモリ又はオフチップメモリから、命令105をフェッチし得る。種々の例において、命令105は、ニューラルネットワーク動作に関連するニューラルネットワーク命令を含む。ニューラルネットワーク命令は、動作群のうちの或る動作を特定し、値のセットを特定する。動作群は、畳み込み動作及びバッチ正規化動作を含み得る。値のセットは、動作が実施されるデータの位置と、そうした動作及びデータと共に用いるためのニューラルネットワーク動作回路要素113のサブ回路を有効化する一つ又は複数の値とを特定し得る。値のセットは、動作からの出力を格納することが可能な宛先レジスタに対応する、一つ又は複数のレジスタアドレスを更に特定し得る。
【】
動作210において、命令フェッチ回路要素101は、デコーダ103に命令105を提供する。一例において、命令105は、畳み込み命令が実施されることをデコーダ103に特定する値の第1のサブセットを含む。値の第1のサブセットは、畳み込み動作と、畳み込み動作が実施されるデータの位置と、畳み込み動作と共に用いるためのニューラルネットワーク動作回路要素113の畳み込みサブ回路を有効化するためのイネーブル値とを特定し得る。値の第1のサブセットに基づいて、デコーダ103は、動作215において、畳み込みサブ回路に畳み込み動作を実施させるように構成され得る。種々の例において、デコーダ103は、畳み込みサブ回路に、畳み込み動作を単一のサイクルで実施させ得る。畳み込み動作を実施するために、畳み込みサブ回路は、行列積和関数を用いることなどによって、データの様々な要素を畳み込む。例えば、データが、入力データ並びに重みデータを含み得ることにより、入力データは、重みデータと畳み込まれる。畳み込みサブ回路は、畳み込み動作を実施して、レジスタ115のうちの一つ又は複数の宛先レジスタに出力を格納するように指示され得る。一実装において、レジスタ115のデータは、ニューラルネットワークの次のノードへの入力を表す。別の実装において、レジスタ115のデータは、ニューラルネットワークの全体的な出力を表す。
【】
別の例において、命令105は、バッチ正規化が実施されることをデコーダ103に特定する値の第2のサブセットを含む。値の第2のサブセットは、バッチ正規化動作と、バッチ正規化が実施されるデータの位置(例えば、レジスタオペランド)と、バッチ正規化動作と共に用いるためのニューラルネットワーク動作回路要素113のバッチ正規化サブ回路を有効化するためのイネーブル値(例えば、セレクタオペランド)とを特定し得る。値の第2のサブセットに基づいて、デコーダ103は、動作220において、バッチ正規化サブ回路にバッチ正規化動作を実施させるように構成され得る。バッチ正規化サブ回路は、バッチ正規化動作を実施して、レジスタ115のうちの一つ又は複数の宛先レジスタに出力を格納するように指示され得る。バッチ正規化動作を実施することは、バッチ正規化サブ回路を介して、シフト関数、スケール関数、及び加算関数を実施することを含み得る。いくつかの例において、バッチ正規化動作において用いられる、データの位置、又はレジスタ位置のセットは、畳み込み動作において用いられるものと同じ位置、又は、同じ位置の少なくとも一部を含み得る。しかしながら、いくつかの例において、各動作において用いられるレジスタ位置は異なり得る。
【】
いくつかの例において、デコーダ103は、バッチ正規化サブ回路に、バッチ正規化動作を2サイクルで実施させ得る。第1のサイクルにおいて、デコーダ103は、命令105において特定されているイネーブル値のうちの一つに基づいて、ニューラルネットワーク動作回路要素113のバッチ正規化サブ回路の第1の部分を有効化し得る。第2のサイクルにおいて、デコーダ103は、命令105において特定されているイネーブル値のうちの異なる一つに基づいて、ニューラルネットワーク動作回路要素113のバッチ正規化サブ回路の第2の部分を有効化し得る。その結果、バッチ正規化動作を実施している間、サイクルごとに、ニューラルネットワーク動作回路要素113の異なる構成要素が用いられ得る。
【】
図3は、本明細書では動作環境300と称する、一実装における動作環境を図示する。動作環境300は、タスクを実行するためにニューラルネットワークの状況において用いられるシステムを表している。例えば、そのようなタスクには、キーワードスポッティング、音声認識、オブジェクト検出、画像分類などが含まれ得る。動作環境300は、プログラムメモリ301、処理システム303、及びデータメモリ327を含む。動作環境300は、コンピュータビジョンを利用する任意のシステムなどの、より大きい状況において実装され得る。
【】
プログラムメモリ301は、処理システム303によってアクセスされる、オンチップメモリ又はオフチップメモリを表している。この場合、プログラムメモリ301は、処理システム303のための高速アクセスメモリとして機能し、ニューラルネットワークの動作を実行するために処理システム303によって必要とされる命令をロードするよう命令フェッチユニット305に論理的に結合されている。プログラムメモリ301は、算術動作、浮動小数点動作、及びニューラルネットワーク動作(例えば、バッチ正規化動作、畳み込み動作)に関連する命令を格納している。例示の命令としては、算術論理命令(ALI)、浮動小数点命令(FPI)、及び、ニューラルネットワーク動作に関連するニューラルネットワーク命令(SI)が挙げられる。一実装において、プログラムメモリ301はまた、動作を実施するために必要とされるデータのレジスタアドレスも格納している。
【】
処理システム303は、プログラム命令を実行することが可能な中央処理装置を表している。例えば、処理システム303は、図1の処理システム100を表し得る。処理システム303は、命令フェッチユニット305、デコーダ307、データユニット311、計算ユニット313、及びレジスタ325を含むが、それらに限定されない。いくつかの例において、処理システム303は、処理システム100の一実装であり、命令フェッチユニット305は、命令フェッチ回路要素101と実質的に同様とし得る。デコーダ307は、デコーダ103と実質的に同様とし得る。計算ユニット313は、計算ユニット107と実質的に同様とし得る。レジスタ325は、レジスタ115と実質的に同様とし得る。処理システム303は、単一の処理デバイス内に実装される場合もあるが、プログラム命令を実行する際に協働する、複数の処理デバイス又はサブシステムにわたって分散される場合もある。
【】
命令フェッチユニット305は、プログラムメモリ301からデコーダ307に命令をロードするように構成されている回路要素を表している。動作において、命令フェッチユニット305は、プログラムメモリ301から命令をフェッチする。例えば、命令フェッチユニット305は、プログラムメモリ301から命令309をフェッチし得る。命令フェッチユニット305は、実行を開始するために、デコーダ307に命令309を送達する。
【】
デコーダ307は、符号化された入力を、計算ユニット313によって読み取り可能な出力信号に変換する論理回路を表している。一実装において、デコーダ307は、プログラムメモリ301からロードされた命令を格納するための、命令バッファを含む。例えば、デコーダ307は、命令フェッチユニット305から命令309を受け取ることができる。命令309は、ALI、FPI、又はSIのいずれかを表し得る。デコーダ307は、示されている動作に関して適切な計算ユニットを決定するために、命令309を復号する。例えば、命令309は、レジスタ325によって格納されているデータに対してニューラルネットワーク動作を実施するためにニューラルネットワーク動作回路要素319を採用するSIを表し得る。
【】
一実装において、デコーダ307はまた、命令309に関するデータの位置を決定するために、命令309を復号する。例えば、命令309は、命令309の動作に関するデータを格納しているレジスタ(例えば、レジスタ325)のアドレスを示し得る。一実装において、デコーダ307は、復号されたレジスタアドレスをデータユニット311に送る。これに応答して、データユニット311は、適切な計算ユニットがデータにアクセスすることを許可する。
【】
データユニット311は、計算ユニット313に対してデータを提供するように構成されている回路要素を表している。データユニット311は、データに関するレジスタ位置をデコーダ307から受け取る。これに応答して、データユニット311は、データが格納されている場所に応じて、レジスタ325又はデータメモリ327のいずれかからデータを取得することによって、適切な計算ユニットが、データを格納しているレジスタにアクセスして実行を開始することを許可する。
【】
データメモリ327は、処理システム303によってアクセスされる、オンチップメモリ又はオフチップメモリ(例えば、キャッシュ)を表している。この場合、データメモリ327は、処理システム303のための高速アクセスメモリとして機能し、データユニット311に論理的に結合されている。一実装において、データメモリ327は、計算ユニット313による動作を実施するためのデータを格納している。例えば、データメモリ327は、レジスタファイルを含み、レジスタファイルは、レジスタ325によって格納されていないデータを格納する。
【】
計算ユニット313は、プログラムメモリ301の命令を実行するために用いられる、様々なデータ経路を表している。計算ユニット313は、算術論理ユニット(ALU)315、浮動小数点ユニット(FPU)317、及びニューラルネットワーク動作回路要素319を含む。ALU 315は、2値数に対して算術動作及びビット動作を実行する構成要素を表している。ALU 315は、オペランドに対する単純な加算及び減算などの動作、並びに、AND及びORなどの論理動作を実施するように構成されている回路要素を含む。FPU 317は、浮動小数点数に対して動作を遂行するように設計されている構成要素を表している。例示の動作としては、乗算、除算、及び平方根が挙げられる。最後に、ニューラルネットワーク動作回路要素319は、畳み込み動作及びバッチ正規化動作などのニューラルネットワーク動作を、畳み込みサブ回路321及びバッチ正規化サブ回路323を介して実行する構成要素を表しており、畳み込みサブ回路321及びバッチ正規化サブ回路323は、それぞれ、SIのオペランドに関してそれぞれのニューラルネットワーク動作を実施するように構成されている。畳み込み動作は、行列積和(MMA)関数を用いる、8ビット×8ビットの畳み込み動作を含み得る。バッチ正規化動作は、スケール関数、シフト関数、及び加算関数を用いるバッチ正規化動作を含み得る。各動作は、ニューラルネットワーク動作回路要素319のサブ回路を用いることができる。一実施例において、いずれの動作が命令309によって特定されているかに基づいて、ニューラルネットワーク動作回路要素319の異なる要素が有効化され得る。ニューラルネットワーク動作回路要素319のいくつかの要素が、バッチ正規化動作及び畳み込み動作を実行するために共有され得る。
【】
一実装において、ニューラルネットワーク動作回路要素319は、図5A及び図5Bの動作アーキテクチャ500が表している、畳み込みサブ回路321及びバッチ正規化サブ回路323を含む。
【】
レジスタ325は、ニューラルネットワークの計算データを格納するレジスタファイルを表す。レジスタ325の計算データは、関連するシステムによって収集された入力データ、計算ユニット313によって生成された出力データ、又は、ニューラルネットワークによって採用される重みデータを含み得る。
【】
図4は、本明細書では動作シーケンス400と称する、ニューラルネットワーク命令からの様々なニューラルネットワーク動作を実行するための、動作シーケンスを図示する。動作シーケンス400は、ニューラルネットワークに関連する命令を、動作環境300の構成要素がどのように実行するかを示している。動作シーケンス400は、メモリ301、命令フェッチユニット305、デコーダ307、及びニューラルネットワーク動作回路要素319を含む。
【】
動作において、命令フェッチユニット305は、メモリ301からプログラム命令をフェッチし、命令をデコーダ307に送達する。デコーダ307は、命令を受け取り、命令のオペランド及びコード(例えば、動作、レジスタオペランド、セレクタオペランド、オペコード)を復号して、命令を実行するための適切な計算ユニットを識別し、命令において特定されている、動作及び対応するデータに関するレジスタの位置を識別する。プログラム命令は、ニューラルネットワーク動作の実行に関連するニューラルネットワーク命令を含み得る。ニューラルネットワーク命令は、ニューラルネットワーク動作群のうちの或るニューラルネットワーク動作を特定し得、また、そうしたニューラルネットワーク動作を或る計算ユニット又はそのサブ回路が実施することを可能にする値のセットを特定し得る。
【】
第1の例において、ニューラルネットワーク命令は、畳み込み動作と、値のセットとを特定し、値のセットは、ニューラルネットワーク回路要素319の畳み込みサブ回路を有効化し、畳み込み動作と共に用いるためのデータを保持している一つ又は複数のレジスタを識別する。ニューラルネットワーク命令を復号すると、デコーダ307は、ニューラルネットワーク回路要素319の畳み込みサブ回路321を有効化し、畳み込みサブ回路321にレジスタ位置を供給する。レジスタ325からのデータ(例えば、畳み込みデータ、重みデータ)にアクセスすると、畳み込みサブ回路321は、畳み込み動作を実施して、一つ又は複数の出力を生成し、畳み込みサブ回路321は、そうした出力を、格納するためにレジスタ325のうちの宛先レジスタに提供することができる。
【】
第2の例において、ニューラルネットワーク命令は、バッチ正規化動作と、値のセットとを特定し、値のセットは、ニューラルネットワーク回路要素319のバッチ正規化サブ回路を有効化し、バッチ正規化動作と共に用いるためのデータを保持している一つ又は複数のレジスタを識別する。ニューラルネットワーク命令を復号すると、デコーダ307は、ニューラルネットワーク回路要素319のバッチ正規化サブ回路323を有効化し、バッチ正規化サブ回路323にレジスタ位置を供給する。レジスタ325からのデータ(例えば、バッチ正規化データ、重みデータ)にアクセスすると、バッチ正規化サブ回路323は、バッチ正規化動作を実施して、一つ又は複数の出力を生成し、バッチ正規化サブ回路323は、そうした出力を、格納するためにレジスタ325のうちの宛先レジスタに提供することができる。
【】
図5A及び図5Bは、一実装における動作アーキテクチャを図示する。図5A及び図5Bは、図1のニューラルネットワーク回路要素113及び図3のニューラルネットワーク回路要素319などのニューラルネットワーク動作回路要素を表す、動作アーキテクチャ500を示している。
【】
動作アーキテクチャ500は、データ入力及びイネーブル入力に基づいて、畳み込み動作及びバッチ正規化動作を実施することが可能な、複数の構成要素を含む。動作、データ入力(又は、そのレジスタ位置)、及びイネーブル入力のうちの一つの指標が、ニューラルネットワーク命令によって特定され得る。ニューラルネットワーク命令は、命令フェッチ回路要素(例えば、図1の命令フェッチ回路要素101、図3の命令フェッチユニット305)によってデコーダ(例えば、図1のデコーダ103、図3のデコーダ307)に提供され得、デコーダによって復号され得、動作アーキテクチャ500の適切な構成要素(例えば、図3の畳み込みサブ回路321及び/又はバッチ正規化サブ回路323)に提供され得る。
【】
動作アーキテクチャ500は、マルチプレクサ520、521、522、523、524、525、527、529、531、541、542、543、544、545、555、及び556(集合的に「マルチプレクサ」)、乗算器526、528、530、及び532(集合的に「乗算器」)、シフタ533、534、537、538、539、及び540(集合的に「シフタ」)、加算器535及び536(集合的に「加算器」)、符号付加回路546、547、548、及び549(集合的に「符号付加回路」)、フリップフロップ回路554、並びに、クランプ回路550、551、552、及び553(集合的に「クランプ回路」)を含む。そのような構成要素に提供されるデータ入力は、畳み込み重み501、バッチ正規化データ502及び503、畳み込みデータ504、スケール入力505、シフト入力506、入力データ507、クランプ入力508、及び入力データ509を含む。そのような構成要素に提供されるイネーブル入力又は選択入力は、選択入力510、511、512、513、514、及び515を含む。ニューラルネットワーク動作を実施すると、動作アーキテクチャ500の構成要素は、出力517、518-1、及び518-2(集合的に出力518と称する)を生成し得、こうした出力は、ニューラルネットワークの別のノードへの入力又はデータ、或いは、ニューラルネットワーク動作の後続のサイクルにおいて動作アーキテクチャ500の構成要素に供給することが可能な入力又はデータを表し得る。
【】
マルチプレクサは、複数のデータ入力と、選択入力とを受信し、選択入力に基づいて、データ入力のうちの一つを含む出力を提供するように構成されている回路を表し得る。乗算器は、データ入力を掛け合わせて出力を生成するように構成されている回路を表し得る。シフタは、データ(入力及び/又は出力)のビットを左にシフトする(すなわち、乗算する)か、又は右にシフトする(すなわち、除算する)ように構成されている回路を表し得る。一例において、ビットを左にシフトするシフタは、最上位ビットをシフトし得る。加算器は、データ入力を合算して出力を生成するように構成されている回路を表し得る。符号付加回路は、符号の付加を実施するように構成されている回路を表し得る。フリップフロップ回路は、入力の値を格納するように構成されている、一つ又は複数のフリップフロップ又はラッチを表し得る。クランプ回路は、データに飽和論理動作を実施してデータをクランプし、出力を提供する(すなわち、最大閾値と最小閾値との間で比較し、入力が範囲外である場合、最小値/最大値に飽和させる)ように構成されている回路を表し得る。一実施例において、こうした回路の各々のうちのいくつかが、畳み込み動作を実施するために有効化されて用いられ得る一方、こうした回路の各々のうちのいくつかが、バッチ正規化動作を実施するために有効化されて用いられ得る。畳み込み動作に関して用いられる回路は、畳み込みサブ回路と称する場合があり、バッチ正規化動作に関して用いられる回路は、バッチ正規化サブ回路と称する場合がある。畳み込みサブ回路とバッチ正規化サブ回路との間で、回路が重複する場合がある。言い換えると、畳み込み動作に関して用いられるいくつかの回路はまた、バッチ正規化動作に関して用いられる場合があり、逆もまた同様であり、このことにより、有利にも、双方のタイプのニューラルネットワーク動作を実施するために別個の回路要素を含む解決策と比較して、より少ない構成要素が利用され得るため、設計面積要件及びコストを低減し得る。
【】
畳み込み重み501は、W[0]、W[1]、W[2]、及びW[3]によって示される4つの重みを含み得、各重みが8ビットを含む。バッチ正規化データ502及び503は各々、それぞれ、YL[0]、YH[0]、YL[1]、及びYH[1]と、YL[2]、YH[2]、YL[3]、及びYH[3]とによって示される、4つのデータ入力を含み得、各データ入力が8ビットの値を含み得る。畳み込みデータ504は、X[0]、X[1]、X[2]、及びX[3]によって示される、4つのデータ入力を含み得、各データ入力が8ビットの値を含む。スケール入力505は、Scale[0]、Scale[1]、Scale[2]、及びScale[3]によって示される、4つのスケール入力を含み得、各スケール入力が8ビットの値を含む。シフト入力506は、Shift[0]、Shift[1]、Shift[2]、及びShift[3]によって示される、4つのシフト入力を含み得、各シフト入力が5ビットの値を含む。入力データ507は、Yin[3:0]によって示される入力を含み得、入力が4ビットの値を含む。クランプ入力508は、Clamp Low及びClamp Highによって示される、2つのクランプ入力を含み得る。入力データ509は、Y’[]によって示される入力を含み得、入力が8ビットの値を含む。選択入力の各々は、「0」又は「1」を含み得、動作アーキテクチャ500の構成要素の動作を制御することができる。出力517は、YL[0]、YH[0]、YL[1]、及びYH[1]によって示される、4つのデータ出力を含み得、各データ出力が8ビットの値を含み得る。出力518-1及び518-2は各々、それぞれ、Y[0]及びY[1]と、Y[2]及びY[3]とによって示される、2つのデータ出力を含み得、各データ出力が16ビットの値を含み得る。
【】
種々の実施例において、マルチプレクサ520は、畳み込み重み501、バッチ正規化データ502、及び選択入力510を受信し、選択入力510の値(例えば、0、1)に基づいて、畳み込み重み501又はバッチ正規化データ502のいずれかの値を含む値を、マルチプレクサ521、522、523、及び524に出力するように構成され得る。マルチプレクサ521、522、523、及び524は、バッチ正規化データ503と、(選択入力510に基づく)畳み込み重み501又はバッチ正規化データ502のうちの一つと、選択入力511とを受信するように構成され得る。より具体的には、マルチプレクサ521は、バッチ正規化データ503のYH[3]と、YH[1]又はW[3]のいずれかとを受信し得、マルチプレクサ522は、バッチ正規化データ503のYL[3]と、YL[1]又はW[2]のいずれかとを受信し得、マルチプレクサ523は、バッチ正規化データ503のYH[2]と、YH[0]又はW[1]のいずれかとを受信し得、マルチプレクサ524は、バッチ正規化データ503のYL[2]と、YL[0]又はW[0]のいずれかとを受信し得る。マルチプレクサ521、522、523、及び524は、選択入力511に基づいて、畳み込み重み501、バッチ正規化データ502、又はバッチ正規化データ503の値を含む値を、それぞれ、乗算器526、528、530、及び532に出力することができる。行列積和(MMA)動作(例えば、畳み込み動作)の場合、マルチプレクサ521、522、523、及び524は、下記で更に説明されるように、それぞれ、W[3]、W[2]、W[1]、及びW[0]を出力する。バッチ正規化動作の場合、マルチプレクサ521、522、523、及び524は、下記で更に説明されるように、第1の実行サイクルの間に、それぞれ、YH[1]、YL[1]、YH[0]、及びYL[0]を出力し、第2の実行サイクルの間に、それぞれ、YH[3]、YL[3]、YH[2]、及びYL[2]を出力する。
【】
マルチプレクサ525、527、529、及び531もまた、選択入力511に基づいて、それぞれ、乗算器526、528、530、及び532に出力を提供するように結合され得る。マルチプレクサ525、527、529、及び531は、畳み込みデータ504、スケール入力505、及び選択入力511を受信するように構成され得る。マルチプレクサ525、527、529、及び531は、選択入力511に基づいて、畳み込みデータ504又はスケール入力505の値を含む値を、乗算器526、528、530、及び532に出力することができる。
【】
より具体的には、マルチプレクサ525は、X[3]又はScale[3]と、X[1]又はScale[1]とを受信し得、マルチプレクサ527は、X[3]又はScale[3]と、X[1]又はScale[1]とを受信し得、マルチプレクサ529は、X[2]又はScale[2]と、X[0]又はScale[0]とを受信し得、マルチプレクサ531は、X[2]又はScale[2]と、X[0]又はScale[0]とを受信し得る。MMA動作の場合、マルチプレクサ525、527、529、及び531は、下記で更に説明されるように、それぞれ、X[3]、X[1]、X[2]、及びX[0]を出力する。バッチ正規化動作の場合、マルチプレクサ525、527、529、及び531は、下記で更に説明されるように、第1の実行サイクルの間に、それぞれ、Scale[3]、Scale[3]、Scale[2]、及びScale[2]を出力し、第2の実行サイクルの間に、それぞれ、Scale[1]、Scale[1]、Scale[0]、及びScale[0]を出力する。乗算器526、528、530、及び532は、受信された入力を掛け合わせて、各々が出力を生成することができる。乗算器526は、シフタ533に出力を提供するように結合され得、乗算器528は、加算器535に出力を提供するように結合され得、乗算器530は、シフタ534に出力を提供するように結合され得、乗算器532は、加算器536に出力を提供するように結合され得る。
【】
加算器535は、シフタ537及び539に出力を提供するように結合され得、加算器536は、シフタ538及び540に出力を提供するように結合され得る。シフタ537、538、539、及び540はまた、シフト入力506のうちの一つを受信するように結合され得る。具体的には、シフタ537は、Shift[3]を受信するように結合され得、シフタ538は、Shift[2]を受信するように結合され得、シフタ539は、Shift[1]を受信するように結合され得、シフタ540は、Shift[0]を受信するように結合され得る。バッチ正規化動作の間などに、シフト動作を実施すると、シフタ537、538、539、及び540は、それぞれ、マルチプレクサ541、542、543、及び544に出力を提供するように結合され得る。
【】
マルチプレクサ541、542、543、及び544はまた、入力データ507及び選択入力512を受信するように構成され得る。マルチプレクサ541、542、543、及び544は、選択入力512に基づいて、それぞれ、符号付加回路546、547、548、及び549に出力を提供するように構成することができる。符号付加回路546、547、548、及び549は、選択入力514に基づいて、受信された出力に対して符号付加動作を実施するように構成され得る。符号付加回路546、547、548、及び549は各々、マルチプレクサ545から選択入力514を受信し得る。マルチプレクサ545は、入力データ509、入力データ516、及び選択入力513を受信し、選択入力513に基づいて、入力データ509又は入力データ516のいずれかの値を含む、選択入力514を出力するように構成され得る。符号付加回路546、547、548、及び549は、それぞれ、クランプ回路550、551、552、及び553に出力を提供するように結合され得る。
【】
クランプ回路550、551、552、及び553は、符号付加回路546、547、548、及び549からの出力と、クランプ入力508とを受信し、入力に対してクランプ動作又は飽和動作を実施して、出力を生成するように構成され得る。クランプ回路550は、出力517の第1の出力(YH[1])を提供するように結合され得、クランプ回路551は、出力517の第2の出力(YL[1])を提供するように結合され得、クランプ回路552は、マルチプレクサ555とフリップフロップ回路554とに第3の出力(YH[0])を提供するように結合され得、クランプ回路553は、マルチプレクサ556とフリップフロップ回路554とに第4の出力(YL[0])を提供するように結合され得る。フリップフロップ回路554は、例えば、バッチ正規化動作の間に、一つのサイクルの間の出力値を、別のサイクルにおいて用いるために格納するように構成され得る。フリップフロップ回路554は、格納されていた値を、マルチプレクサ555及び556に提供することができる。マルチプレクサ555及び556は、格納されていた値と選択入力515とを受信し、選択入力515に基づいて、それぞれ、YH[0]及びYL[0]に対する値を出力するように構成され得る。しかしながら、畳み込み動作の間などのいくつかの例において、クランプ回路550、551、552、及び553は、出力518-1及び518-2を提供し得る。
【】
動作において、デコーダによって畳み込み動作を実施させられるとき、マルチプレクサ520は、「0」の値を有する選択入力510を受信し得、選択入力510は、マルチプレクサ520に、マルチプレクサ521、522、523、及び524へ畳み込み重み501を出力させ得る。マルチプレクサ521、522、523、及び524は、「0」の値を有する選択入力511を受信し得、選択入力511は、マルチプレクサ521、522、523、及び524に、乗算器526、528、530、及び532へ畳み込み重み501を出力させ得る。また、マルチプレクサ525、527、529、及び531(526、528、530、及び532?)は、「0」の値を有する選択入力511を受信し得、選択入力511は、マルチプレクサ525、527、529、及び531に、畳み込み重み501を、畳み込みデータ504と乗算させ得る。一実施例において、畳み込み動作を実施させられるとき、シフタ537、538、539、及び540は無効化され得、又は言い換えると、加算器535及び536によって提供される入力に対してシフト動作を実施し得ない。マルチプレクサ541、542、543、及び544は、「1」の値を有する選択入力512を受信し得、選択入力512は、マルチプレクサ541、542、543、及び544に、符号付加回路546、547、548、及び549へ入力データ507を出力させ得る。符号付加回路546、547、548、及び549は、「1」の値を有する選択入力513に基づいて、入力データ509の値を有する選択入力514を受信し得る。一実施例において、8×8畳み込み動作を実施させられる場合、クランプ回路550、551、552、及び553、並びに、フリップフロップ回路554、マルチプレクサ555、及びマルチプレクサ556は、無効化され得るか、又は他の方式でバイパスされ得る。したがって、符号付加回路546、547、548、及び549が、8ビットの値を含む出力517を提供し得る。一実施例において、16×8畳み込み動作を実施させられる場合、クランプ回路550、551、552、及び553は、各々が16ビットの値を含む、出力518-1及び518-2を生成するように有効化され得る。
【】
動作において、デコーダによってバッチ正規化動作を実施させられる場合、マルチプレクサ520は、「1」の値を有する選択入力510を受信し得、選択入力510は、マルチプレクサ520に、マルチプレクサ521、522、523、及び524へバッチ正規化データ502を出力させ得る。マルチプレクサ521、522、523、及び524は、「1」の値を有する選択入力511を受信し得、選択入力511は、マルチプレクサ521、522、523、及び524に、乗算器526、528、530、及び532へ、第1のサイクルの間に、バッチ正規化データ502を出力させ、第2のサイクルにおいて、バッチ正規化データ503を出力させ得る。また、マルチプレクサ525、527、529、及び531は、「1」の値を有する選択入力511を受信し得、選択入力511は、マルチプレクサ525、527、529、及び531に、第1のサイクルの間に、バッチ正規化データ502をスケール入力505と乗算させ、第2のサイクルの間に、バッチ正規化データ503をスケール入力505と乗算させ得る。バッチ正規化動作の間に、シフタ533及び534は、それぞれ、乗算器526及び530によって出力された値を、8ビット左にシフトするように構成され得る。しかしながら、他の値のシフトも想到され得る。シフタ537、538、539、及び540は、シフト入力506に基づいて、更なるシフトを実施し得る。マルチプレクサ541、542、543、及び544は、「0」の値を有する選択入力512を受信し得、選択入力512は、マルチプレクサ541、542、543、及び544に、それぞれ、シフトされた値を符号付加回路546、547、548、及び549に出力させ得る。マルチプレクサ545は、「0」の値を有する選択入力513を受信し得、選択入力513は、マルチプレクサ545に、入力データ516の値(「0」)を、符号付加回路546、547、548、及び549に出力させ得る。次に、バッチ正規化動作の第1のサイクルの間に、フリップフロップ回路554は、クランプ回路552及び553からの出力(それぞれ、YL[0]及びYL[1])を格納し得、そうした出力をマルチプレクサ555及び556に提供し得る。マルチプレクサ555及び556は、「1」の値を有する選択入力515を受信し得、選択入力515は、マルチプレクサ555及び556に、出力517を出力させ得る。
【】
したがって、動作アーキテクチャ500の様々な要素が、ニューラルネットワーク命令と、いずれの動作及び値のセットがニューラルネットワーク命令によって特定されているかとに基づいて、無効化又は有効化され得ることになる。動作アーキテクチャ500を用いて畳み込み動作及びバッチ正規化動作を実施するための、要素の他の変形又は組み合わせが想到され得る。
【】
前述の実装は、組み込みコンピューティングデバイス、産業用コンピュータ、パーソナルコンピュータ、サーバコンピュータ、オートモーティブコンピュータ、MCUなどを含むがそれらに限定されない、様々なコンピューティングデバイスの状況において実装され得る。それゆえ、本明細書で開示される技術はまた、本明細書で開示されるようなニューラルネットワーク命令を生成することが可能なコンパイラによって生成されるソフトウェア製品も想到している。すなわち、本明細書で開示される技術は、ニューラルネットワーク動作に関連するニューラルネットワーク命令を、そのプログラム命令の中に有する、コンパイル済みソフトウェアプログラムを含む。図6は、そのようなコンピュータを表しているコンピューティングデバイス601を図示する。
【】
コンピューティングデバイス601は、単一の装置、システム、又はデバイスとして実装される場合もあれば、或いは、複数の装置、システム、又はデバイスとして分散されて実装される場合もある。コンピューティングデバイス601は、処理システム602、ストレージシステム603、ソフトウェア605、通信インタフェースシステム607、及びユーザインタフェースシステム609(任意選択)を含むが、それらに限定されない。処理システム602は、ストレージシステム603、通信インタフェースシステム607、及びユーザインタフェースシステム609に動作可能に結合されている。
【】
処理システム602は、ストレージシステム603からソフトウェア605をロードして実行する。ソフトウェア605は、ニューラルネットワーク命令608を含む、プログラム命令606を含む。処理システム602によって実行されると、ソフトウェア605は、処理システム602に、少なくとも、前述の実装において説明された種々のプロセス、動作シナリオ、及びシーケンスに関して、本明細書で説明したように動作するように指示する。コンピューティングデバイス601は、簡潔化の目的ために説明されていない、付加的なデバイス、特徴、又は機能を、任意選択で含み得る。
【】
図6を更に参照すると、処理システム602は、マイクロプロセッサと、ストレージシステム603からソフトウェア605を取り出して実行する、ニューラルネットワーク動作回路要素611などの他の回路要素とを含み得る。処理システム602は、単一の処理デバイス内に実装される場合もあるが、プログラム命令を実行する際に協働する、複数の処理デバイス又はサブシステムにわたって分散される場合もある。処理システム602の例としては、一つ又は複数の汎用中央処理装置、グラフィックス処理装置、マイクロプロセッサ、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ、特定用途向けプロセッサ、処理回路要素、アナログ回路要素、デジタル回路要素、及び論理デバイス、並びに、任意の他のタイプの処理デバイス、それらの組み合わせ、又は変形が挙げられる。
【】
ストレージシステム603は、処理システム602によって読み取り可能であり、ソフトウェア605を格納することが可能な、任意のコンピュータ可読ストレージ媒体を含み得る。ストレージシステム603は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報を格納するための、任意の方法又は技術で実装されている、揮発性及び不揮発性の、取り外し可能及び取り外し不可能な媒体を含み得る。ストレージ媒体の例としては、ランダムアクセスメモリ、読み出し専用メモリ、磁気ディスク、光ディスク、フラッシュメモリ、仮想メモリ及び非仮想メモリ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、或いは、任意の他の適切なストレージ媒体が挙げられる。いかなる場合においても、コンピュータ可読ストレージ媒体は伝搬信号ではない。
【】
コンピュータ可読ストレージ媒体に加えて、いくつかの実装において、ストレージシステム603はまた、コンピュータ可読通信媒体も含む場合があり、そうしたコンピュータ可読通信媒体を介して、ソフトウェア605の少なくとも一部が、内部又は外部に通信され得る。ストレージシステム603は、単一のストレージデバイスとして実装される場合もあるが、互いに共置されているか又は分散されている、複数のストレージデバイス又はサブシステムにわたって実装される場合もある。ストレージシステム603は、処理システム602又は場合によっては他のシステムと通信することが可能な、コントローラなどの付加的な要素を含み得る。
【】
ソフトウェア605は、プログラム命令606において実装されており、数ある機能の中でも特に、処理システム602によって実行されると、処理システム602に、本明細書で示されている種々の動作シナリオ、シーケンス、及びプロセスに関して説明したように動作するように指示し得る。特に、プログラム命令は、本明細書で説明されている種々のプロセス及び動作シナリオを遂行するために協働するか又は他の方式で相互作用する、種々の構成要素又はモジュールを含み得る。種々の構成要素又はモジュールは、コンパイル済み又は解釈済みの命令、或いは、命令の何らかの他の変形又は組み合わせにおいて具現化され得る。種々の構成要素又はモジュールは、同期して又は非同期で、直列又は並列に、単一スレッド環境又はマルチスレッド環境において、或いは、任意の他の適切な実行パラダイム、変形、又はそれらの組み合わせに従って、実行され得る。ソフトウェア605は、オペレーティングシステムソフトウェア、仮想化ソフトウェア、又は他のアプリケーションソフトウェアなどの、付加的なプロセス、プログラム、又は構成要素を含み得る。ソフトウェア605はまた、ファームウェア、又は、処理システム602によって実行可能な何らかの他の形態の機械可読処理命令を含み得る。
【】
概して、ソフトウェア605は、処理システム602にロードされて実行されると、適切な装置、システム、又はデバイス(コンピューティングデバイス601が表しているもの)全体を、汎用コンピューティングシステムから、バッチ正規化動作及び畳み込み動作などのニューラルネットワーク動作をサポートするようにカスタマイズされた特殊目的コンピューティングシステムへと変換し得る。実際に、ストレージシステム603上の符号化ソフトウェア605(及び、ニューラルネットワーク命令608)は、ストレージシステム603の物理的構造を変換し得る。物理的構造の具体的な変換は、本記載の様々な実装における種々の要因に依存し得る。そのような要因の例としては、ストレージシステム603のストレージ媒体を実装するために用いられる技術、及び、コンピュータストレージ媒体が一次又は二次のいずれとして特徴付けられるかなどを挙げることができるが、それらに限定されない。
【】
例えば、コンピュータ可読ストレージ媒体が、半導体ベースのメモリとして実装されている場合、ソフトウェア605は、そうしたメモリ内にプログラム命令が符号化されるときに、半導体メモリを構成しているトランジスタ、コンデンサ、又は他の個別回路素子の状態を変換することなどによって、半導体メモリの物理的状態を変換し得る。同様の変換が、磁気媒体又は光媒体に関しても成され得る。本記載の範囲から逸脱することなく、物理媒体の他の変換が可能であり、前述の例は、本論考を容易にするためにのみ提供されている。
【】
通信インタフェースシステム607は、通信ネットワーク(図示せず)を介して他のコンピューティングシステム(図示せず)との通信を可能にする、通信接続及び通信デバイスを含み得る。システム間通信を共に可能にする接続及びデバイスの例としては、ネットワークインタフェースカード、アンテナ、電力増幅器、RF回路要素、トランシーバ、及び他の通信回路要素を挙げることができる。接続及びデバイスは、金属、ガラス、空気、又は任意の他の適切な通信媒体などの、他のコンピューティングシステム又はシステムのネットワークと通信を交換するための通信媒体を介して、通信し得る。上述の媒体、接続、及びデバイスは周知であり、ここで詳細に論じる必要はない。
【】
コンピューティングデバイス601と他のコンピューティングシステム(図示せず)との間の通信は、通信ネットワーク又は複数の通信ネットワークを介して、種々の通信プロトコル、プロトコルの組み合わせ、又はそれらの変形に従って行われ得る。例としては、イントラネット、インターネット(internet)、インターネット(the Internet)、ローカルエリアネットワーク、ワイドエリアネットワーク、無線ネットワーク、有線ネットワーク、仮想ネットワーク、ソフトウェア定義ネットワーク、データセンタバス及びバックプレーン、或いは、任意の他のタイプのネットワーク、ネットワークの組み合わせ、又はそれらの変形が挙げられる。上述の通信ネットワーク及びプロトコルは周知であり、ここで詳細に論じる必要はない。
【】
本発明の諸態様は、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、本発明の諸態様は、完全にハードウェアによる実装、完全にソフトウェアによる実装(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、或いは、本明細書では総じて「回路」、「モジュール」、又は「システム」と称する場合がある、ソフトウェア態様とハードウェア態様とを組み合わせた実装の形態を取り得る。また、本発明の諸態様は、コンピュータ可読プログラムコードが具現化されている一つ又は複数のコンピュータ可読媒体において具現化された、コンピュータプログラム製品の形態を取り得る。
【】
実際に、含まれている説明及び図は、どのようにして最良のモードを作製して用いるかを当業者に教示するための具体的な実装を示すものである。発明の原理を教示する目的のために、いくつかの従来の態様は、簡略化又は省略されている。当業者には、本開示の範囲内に含まれる、こうした実装からの変形が理解されるであろう。当業者にはまた、複数の実装を形成するために、上述の特徴が種々の方式で組み合わされ得ることも理解されるであろう。結果として、本発明は、上述の特定の実装に限定されるものではなく、特許請求の範囲及びその等価物によってのみ限定される。
【】
の説明及び関連する図は、本発明の最良のモードを教示する。下記の特許請求の範囲は、本発明の範囲を特定する。最良のモードのいくつかの態様は、特許請求の範囲によって特定されるような本発明の範囲内には含まれない場合がある点に留意されたい。当業者には、本発明の複数の変形を形成するために、上述の特徴を種々の方式で組み合わせることができる点が理解されるであろう。このように、本発明は、上述の特定の実施例に限定されるものではなく、以下の特許請求の範囲及びその等価物によってのみ限定される。

【図】
【図】
【図】
【図】
【図】
【図】
【図】
【国際調査報告】

[広告欄]

ログインすれば広告は減ります

ログインすれば広告は減ります