(57)【要約】      （修正有）【課題】複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路を提供する。【解決手段】回路は、累積値のベクトルを受け取るように構成され、関数を各々の累積値に適用して活性化値のベクトルを生成するように構成された活性化回路と、活性化回路に結合され、各々の活性化値についてそれぞれの正規化値を生成するように構成された正規化回路とを備える。活性化回路は、回路内のシストリックアレイから累積値のベクトルを受け取る。正規化回路は、複数の正規化レジスタ列を備える。各々の正規化レジスタ列は、直列に接続された複数の正規化レジスタを備える。各々の正規化レジスタ列は、個別の活性化値を受け取る。正規化レジスタ列におけるそれぞれの正規化ユニットは、それぞれの正規化値を算出する。【選択図】図６
2020017281.tif 000002
【特許請求の範囲】
【請求項１】
複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路であって、
累積値のベクトルを受け取るように構成され、関数を各々の累積値に適用して活性化値のベクトルを生成するように構成された活性化回路と、
前記活性化回路に結合され、各々の活性化値についてそれぞれの正規化値を生成するように構成された正規化回路とを備える、回路。
【請求項２】
前記活性化回路は、前記回路内のシストリックアレイから前記累積値のベクトルを受け取る、請求項１に記載の回路。
【請求項３】
前記正規化回路は、複数の正規化レジスタ列を備え、各々の正規化レジスタ列は、直列に接続された複数の正規化レジスタを備え、各々の正規化レジスタ列は、それぞれの活性化値を受け取るように構成され、前記正規化回路は、１つ以上の正規化レジスタのまわりにグループを形成するように構成され、各々のグループは、正規化ユニットに対応し、各々の正規化ユニットは、前記それぞれの活性化値についてそれぞれの正規化値を算出するように構成される、請求項１または２に記載の回路。
【請求項４】
各々の正規化レジスタは、前記個別の活性化値を隣接する正規化列に渡すように構成される、請求項３に記載の回路。
【請求項５】
各々のグループは、正規化半径パラメータを使用して形成される、請求項３または４に記載の回路。
【請求項６】
各々の正規化ユニットは、
前記それぞれの活性化値を受け取るように構成され、
前記それぞれの活性化値からそれぞれの中間正規化値を生成するように構成され、
前記それぞれの中間正規化値を１つ以上の隣接する正規化ユニットに送るように構成される、請求項３〜５のいずれか１項に記載の回路。
【請求項７】
前記それぞれの中間正規化値を生成することは、前記それぞれの活性化値の二乗を生成することを備える、請求項６に記載の回路。
【請求項８】
各々の正規化ユニットはさらに、
活性化値から生成された１つ以上の中間正規化値を１つ以上の隣接する正規化ユニットから受け取るように構成され、
各々の中間正規化値を合計して、インデックスを生成するように構成され、
前記インデックスを使用して、ルックアップテーブルから１つ以上の値にアクセスするように構成され、
前記１つ以上の値および前記インデックスからスケーリングファクタを生成するように構成され、
前記スケーリングファクタおよび前記それぞれの活性化値から前記それぞれの正規化値を生成するように構成される、請求項６または７に記載の回路。
【請求項９】
前記正規化値を受け取るように構成され、前記正規化値をプールしてプール値を生成するように構成されたプール回路をさらに備える、請求項１〜８のいずれか１項に記載の回路。
【請求項１０】
前記プール回路は、前記複数の正規化値を複数のレジスタおよび複数のメモリユニット
に格納するように構成され、
前記複数のレジスタおよび前記複数のメモリユニットは、直列に接続され、各々のレジスタは、１つの正規化値を格納し、各々のメモリユニットは、複数の正規化値を格納し、
前記プール回路は、全てのクロックサイクルの後に、所与の正規化値を後続のレジスタまたはメモリユニットにシフトするように構成され、
前記プール回路は、前記正規化値から前記プール値を生成するように構成される、請求項９に記載の回路。
【請求項１１】
前記活性化値を受け取るように構成され、前記活性化値をプールしてプール値を生成するように構成されたプール回路をさらに備える、請求項１〜８のいずれか１項に記載の回路。
【請求項１２】
前記プール回路は、前記複数の活性化値を複数のレジスタおよび複数のメモリユニットに格納するように構成され、
前記複数のレジスタおよび前記複数のメモリユニットは、直列に接続され、各々のレジスタは、１つの正規化値を格納し、各々のメモリユニットは、複数の活性化値を格納し、
前記プール回路は、全てのクロックサイクルの後に、所与の活性化値を後続のレジスタまたはメモリユニットにシフトするように構成され、
前記プール回路は、前記活性化値から前記プール値を生成するように構成される、請求項１１に記載の回路。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本明細書は、ハードウェアにおいてニューラルネットワーク推測値を計算することに関する。
【背景技術】
【０００２】
ニューラルネットワークは、１つ以上の層を利用して、受け取った入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて１つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在の値に従って、受け取った入力から出力を生成する。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
全体として、本明細書では、ニューラルネットワーク推測値を計算する特定目的ハードウェア回路について説明する。
【０００４】
全体として、本明細書に記載されている主題の１つの革新的な局面は、複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路で実施することができ、上記回路は、累積値のベクトルを受け取るように構成され、関数を各々の累積値に適用して活性化値のベクトルを生成するように構成された活性化回路と、上記活性化回路に結合され、各々の活性化値についてそれぞれの正規化値を生成するように構成された正規化回路とを備える。
【０００５】
実現例は、以下の特徴のうちの１つ以上を含み得る。上記活性化回路は、上記回路内のシストリックアレイから上記累積値のベクトルを受け取る。上記正規化回路は、複数の正規化レジスタ列を備え、各々の正規化レジスタ列は、直列に接続された複数の正規化レジスタを備え、各々の正規化レジスタ列は、個別の活性化値を受け取るように構成され、上記正規化レジスタ列におけるそれぞれの正規化ユニットは、それぞれの正規化値を算出するように構成される。各々の正規化ユニットは、上記個別の活性化値を隣接する正規化ユニットに渡すように構成される。各々の正規化ユニットは、それぞれの活性化値を受け取るように構成され、上記それぞれの活性化値からそれぞれの中間正規化値を生成するように構成され、上記それぞれの中間正規化値を１つ以上の隣接する正規化ユニットに送るように構成される。上記それぞれの中間正規化値を生成することは、上記それぞれの活性化値の二乗を生成することを備える。各々の正規化ユニットはさらに、活性化値から生成された１つ以上の中間正規化値を１つ以上の隣接する正規化ユニットから受け取るように構成され、各々の中間正規化値を合計して、インデックスを生成するように構成され、上記インデックスを使用して、ルックアップテーブルから１つ以上の値にアクセスするように構成され、上記１つ以上の値および上記インデックスからスケーリングファクタを生成するように構成され、上記スケーリングファクタおよび上記それぞれの活性化値から上記それぞれの正規化値を生成するように構成される。プール回路は、上記正規化値を受け取るように構成され、上記正規化値をプールしてプール値を生成するように構成される。上記プール回路は、上記複数の正規化値を複数のレジスタおよび複数のメモリユニットに格納するように構成され、上記複数のレジスタおよび上記複数のメモリユニットは、直列に接続され、各々のレジスタは、１つの正規化値を格納し、各々のメモリユニットは、複数の
正規化値を格納し、上記プール回路は、全てのクロックサイクルの後に、所与の正規化値を後続のレジスタまたはメモリユニットにシフトするように構成され、上記プール回路は、上記正規化値から上記プール値を生成するように構成される。プール回路は、上記活性化値を受け取るように構成され、上記活性化値をプールしてプール値を生成するように構成される。上記プール回路は、上記複数の活性化値を複数のレジスタおよび複数のメモリユニットに格納するように構成され、上記複数のレジスタおよび上記複数のメモリユニットは、直列に接続され、各々のレジスタは、１つの正規化値を格納し、各々のメモリユニットは、複数の活性化値を格納し、上記プール回路は、全てのクロックサイクルの後に、所与の活性化値を後続のレジスタまたはメモリユニットにシフトするように構成され、上記プール回路は、上記活性化値から上記プール値を生成するように構成される。
【０００６】
本明細書に記載されている主題の特定の実施形態は、以下の利点のうちの１つ以上を達成するように実現することができる。所与のクロックサイクル中にニューラルネットワークの各ニューラルネットワーク層についての複数の活性化値を計算することができる。任意に、プロセッサは、別の所与のクロックサイクル中に活性化値から複数の正規化値を生成することができる。また、任意に、プロセッサは、正規化値または活性化値からプール値を生成することができる。プロセッサは、各クロックサイクルにおいて新たな累積和を取得して、各クロックサイクルにおいて活性化結果、正規化結果およびプール結果を生成し、それによって計算をパイプライン化することができる。
【０００７】
本発明は、ニューラルネットワークを動作させる対応する方法も提供する。
本明細書の主題の１つ以上の実施形態の詳細が添付の図面および以下の説明に記載されている。主題の他の特徴、局面および利点は、説明、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１】ニューラルネットワークの所与の層について計算を実行するための例示的な方法のフロー図である。
【図２】例示的なニューラルネットワーク処理システムを示す。
【図３】行列計算ユニットを含む例示的なアーキテクチャを示す。
【図４】シストリックアレイ内のセルの例示的なアーキテクチャを示す。
【図５】ベクトル計算ユニットの例示的なアーキテクチャを示す。
【図６】正規化回路の例示的なアーキテクチャを示す。
【図７】サンプル活性化値を有する正規化回路の別の例示的なアーキテクチャを示す。
【図８】正規化回路内の正規化ユニットの例示的なアーキテクチャを示す。
【図９】プール回路の例示的なアーキテクチャを示す。
【発明を実施するための形態】
【０００９】
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
複数の層を有するニューラルネットワークは、推測値の計算に使用することができる。たとえば、入力を前提として、ニューラルネットワークは当該入力について推測値を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を介して入力を処理することによってこの推測値を計算する。特に、ニューラルネットワークの層は、各々が重みのそれぞれのセットを有する状態で、ある順序で配置される。各層は、入力を受け取って、当該層の重みのセットに従って入力を処理して、出力を生成する。
【００１０】
したがって、受け取った入力から推測値を計算するために、ニューラルネットワークは、当該入力を受け取って、当該順序でニューラルネットワーク層の各々を介してそれを処
理して、推測値を生成し、１つのニューラルネットワーク層からの出力は、次のニューラルネットワーク層への入力として提供される。ニューラルネットワーク層へのデータ入力、たとえばニューラルネットワークへの入力または当該順序内の当該層の下方にある層の、ニューラルネットワーク層への出力、は、当該層への活性化入力と称することができる。
【００１１】
いくつかの実現例では、ニューラルネットワークの層は、有向グラフで配置される。すなわち、任意の特定の層が複数の入力、複数の出力、またはそれら両方を受け取ることができる。また、ニューラルネットワークの層は、層の出力を前の層への入力として送り返すことができるように配置することもできる。
【００１２】
いくつかのニューラルネットワークは、１つ以上のニューラルネットワーク層からの出力を正規化して、後続のニューラルネットワーク層への入力として使用される正規化値を生成する。出力を正規化することは、正規化値が後続のニューラルネットワーク層の入力のための見込みドメイン内にとどまることを確実なものとする助けとなり得る。これにより、推測値算出の際のエラーを減少させることができる。
【００１３】
いくつかのニューラルネットワークは、１つ以上のニューラルネットワーク層からの出力をプールして、後続のニューラルネットワーク層への入力として使用されるプール値を生成する。いくつかの実現例では、ニューラルネットワークは、出力グループの最大値または平均値を求めて当該最大値または平均値を当該グループのプール出力として使用することによって、出力グループをプールする。出力をプールすることにより、何らかの空間不変性を維持することができ、そのため、さまざまな構成で配置された出力は、同一の推測値を有するように処理されることができる。また、出力をプールすることにより、プール前の出力の所望の特性を維持しながら、後続のニューラルネットワーク層で受け取られる入力の次元性を減少させることができ、ニューラルネットワークによって生成される推測値の質を著しく犠牲にすることなく効率を向上させることができる。
【００１４】
本明細書では、１つ以上のニューラルネットワーク層の出力に関して正規化、プール、またはそれら両方を任意に実行する特定目的ハードウェア回路について説明する。
【００１５】
図１は、特定目的ハードウェア回路を使用してニューラルネットワークの所与の層について計算を実行するための例示的なプロセス１００のフロー図である。便宜上、方法１００は、方法１００を実行する１つ以上の回路を有するシステムに関連して説明する。方法１００は、受け取った入力から推測値を計算するためにニューラルネットワークの各層について実行され得る。
【００１６】
当該システムは、所与の層についての重み入力の複数のセットを受け取り（ステップ１０２）、所与の層についての活性化入力の複数のセットを受け取る（ステップ１０４）。重み入力の複数のセットおよび活性化入力の複数のセットは、それぞれ特定目的ハードウェア回路のダイナミックメモリおよび統合バッファから受け取られることができる。いくつかの実現例では、重み入力の複数のセットも活性化入力の複数のセットも統合バッファから受け取られてもよい。
【００１７】
当該システムは、特定目的ハードウェア回路の行列乗算ユニットを使用して重み入力および活性化入力から累積値を生成する（ステップ１０６）。いくつかの実現例では、累積値は、重み入力の複数のセットと活性化入力の複数のセットとのドット積である。すなわち、当該層内の全ての重みのサブセットである重みの１つのセットについて、当該システムは、各重み入力と各活性化入力とを掛け合わせ、その積を合計して、累積値を形成することができる。次いで、当該システムは、重みの他のセットと活性化入力の他の複数のセ
ットとのドット積を計算することができる。
【００１８】
当該システムは、特定目的ハードウェア回路のベクトル計算ユニットを使用して累積値から層出力を生成することができる（ステップ１０８）。いくつかの実現例では、ベクトル計算ユニットは、活性化関数を累積値に適用し、これについては図５を参照して以下でさらに説明する。層の出力は、ニューラルネットワーク内の後続の層への入力として使用できるように統合バッファに格納されてもよく、または推測値を求めることに使用されてもよい。当該システムは、受け取った入力をニューラルネットワークの各層を介して処理して受け取った入力について推測値を生成すると、ニューラルネットワークを処理することを終了する。
【００１９】
図２は、ニューラルネットワーク計算を実行するための例示的な特定目的集積回路２００を示す。システム２００は、ホストインターフェイス２０２を含む。ホストインターフェイス２０２は、ニューラルネットワーク計算のためのパラメータを含む命令を受け取ることができる。パラメータは、何個の層を処理すべきであるか、層の各層についての重み入力の対応する複数のセット、活性化入力の最初のセット、すなわち推測値を計算するためのニューラルネットワークへの入力、各層の対応する入力および出力サイズ、ニューラルネットワーク計算のためのストライド値、および処理すべき層のタイプ、たとえば畳み込み層または完全に接続された層、のうちの１つ以上を含み得る。
【００２０】
ホストインターフェイス２０２は、シーケンサ２０６に命令を送ることができ、シーケンサ２０６は、当該命令を、ニューラルネットワーク計算を実行するように回路を制御する低レベル制御信号に変換する。いくつかの実現例では、当該制御信号は、回路内のデータフロー、たとえば重み入力の複数のセットおよび活性化入力の複数のセットがどのように回路内を流れるか、を調整する。シーケンサ２０６は、統合バッファ２０８、行列計算ユニット２１２およびベクトル計算ユニット２１４に当該制御信号を送ることができる。いくつかの実現例では、シーケンサ２０６は、ダイレクトメモリアクセスエンジン２０４およびダイナミックメモリ２１０にも制御信号を送る。いくつかの実現例では、シーケンサ２０６は、制御信号を生成するプロセッサである。シーケンサ２０６は、当該制御信号のタイミングを使用して、回路２００の各コンポーネントに当該制御信号を適切なときに送ることができる。いくつかの他の実現例では、ホストインターフェイス２０２は、外部プロセッサから制御信号を渡す。
【００２１】
ホストインターフェイス２０２は、ダイレクトメモリアクセスエンジン２０４に重み入力の複数のセットおよび活性化入力の最初のセットを送ることができる。ダイレクトメモリアクセスエンジン２０４は、活性化入力の複数のセットを統合バッファ２０８に格納することができる。いくつかの実現例では、ダイレクトメモリアクセスは、メモリユニットであり得るダイナミックメモリ２１０に重みの複数のセットを格納する。いくつかの実現例では、ダイナミックメモリは、回路から離れて位置している。
【００２２】
統合バッファ２０８は、メモリバッファである。統合バッファ２０８は、ダイレクトメモリアクセスエンジン２０４からの活性化入力のセットおよびベクトル計算ユニット２１４の出力を格納することに使用できる。ベクトル計算ユニットについては、図５を参照して以下でさらに詳細に説明する。ダイレクトメモリアクセスエンジン２０４は、ベクトル計算ユニット２１４の出力を統合バッファ２０８から読み出すこともできる。
【００２３】
ダイナミックメモリ２１０および統合バッファ２０８は、行列計算ユニット２１２に重み入力の複数のセットおよび活性化入力の複数のセットをそれぞれ送ることができる。いくつかの実現例では、行列計算ユニット２１２は、二次元シストリックアレイである。行列計算ユニット２１２は、一次元シストリックアレイであってもよく、または数学的演算
、たとえば乗算および加算を実行することができる他の回路であってもよい。いくつかの実現例では、行列計算ユニット２１２は、汎用行列プロセッサである。
【００２４】
行列計算ユニット２１２は、重み入力および活性化入力を処理して、ベクトル計算ユニット２１４に出力のベクトルを提供することができる。いくつかの実現例では、行列計算ユニットは、統合バッファ２０８に出力のベクトルを送り、統合バッファ２０８は、ベクトル計算ユニット２１４に出力のベクトルを送る。ベクトル計算ユニットは、出力のベクトルを処理して、処理された出力のベクトルを統合バッファ２０８に格納することができる。処理された出力のベクトルは、たとえばニューラルネットワーク内の後続の層で使用できるように、行列計算ユニット２１２への活性化入力として使用することができる。行列計算ユニット２１２およびベクトル計算ユニット２１４については、図３および図５をそれぞれ参照して以下でさらに詳細に説明する。
【００２５】
図３は、行列計算ユニットを含む例示的なアーキテクチャ３００を示す。行列計算ユニットは、二次元シストリックアレイ３０６である。アレイ３０６は、複数のセル３０４を含む。いくつかの実現例では、シストリックアレイ３０６の第１の次元３２０はセルの列に対応し、シストリックアレイ３０６の第２の次元３２２はセルの行に対応する。シストリックアレイは、列よりも多くの行を有していてもよく、行よりも多くの列を有していてもよく、または列と行とが同数であってもよい。
【００２６】
示されている例では、値ローダ３０２がアレイ３０６の行に活性化入力を送り、重みフェッチャインターフェイス３０８がアレイ３０６の列に重み入力を送る。しかし、いくつかの他の実現例では、活性化入力がアレイ３０６の列に送信され、重み入力がアレイ３０６の行に送信される。
【００２７】
値ローダ３０２は、統合バッファ、たとえば図２の統合バッファ２０８から活性化入力を受け取ることができる。各々の値ローダは、対応する活性化入力をアレイ３０６の個別の最も左側のセルに送ることができる。たとえば、値ローダ３１２は、セル３１４に活性化入力を送ることができる。値ローダは、隣接する値ローダにも活性化入力を送ることができ、活性化入力は、アレイ３０６の別の最も左側のセルで使用することができる。これにより、アレイ３０６の別の特定のセルで使用できるように活性化入力をシフトすることができる。
【００２８】
重みフェッチャインターフェイス３０８は、メモリユニット、たとえば図２のダイナミックメモリ２１０から重み入力を受け取ることができる。重みフェッチャインターフェイス３０８は、対応する重み入力をアレイ３０６の個別の最上部のセルに送ることができる。たとえば、重みフェッチャインターフェイス３０８は、セル３１４および３１６に重み入力を送ることができる。
【００２９】
いくつかの実現例では、ホストインターフェイス、たとえば図２のホストインターフェイス２０２は、アレイ３０６全体にわたって１つの次元に沿って、たとえば右側まで活性化入力をシフトし、アレイ３０６全体にわたって別の次元に沿って、たとえば下部まで重み入力をシフトする。たとえば、１つのクロックサイクルで、セル３１４における活性化入力は、セル３１４の右側のセル３１６における活性化レジスタにシフトすることができる。同様に、セル３１６における重み入力は、セル３１４の下方のセル３１８における重みレジスタにシフトすることができる。
【００３０】
各クロックサイクルで、各セルは、所与の重み入力、所与の活性化入力および隣接するセルからの累積出力を処理して、累積出力を生成することができる。累積出力は、所与の重み入力と同一の次元に沿って隣接するセルにも渡されることができる。個々のセルにつ
いては、図４を参照して以下でさらに説明する。
【００３１】
累積出力は、重み入力と同一の列に沿って、たとえばアレイ３０６内の列の下部の方に渡されることができる。いくつかの実現例では、アレイ３０６は、行よりも多くの活性化入力を有する層で算出を実行するときに各列から各累積出力を格納して累積するアキュムレータユニット３１０を各列の下部に含み得る。いくつかの実現例では、各アキュムレータユニットは、複数の並列累積値を格納する。これについては図６を参照して以下でさらに説明する。アキュムレータユニット３１０は、各累積出力を累積して、最終的な累積値を生成することができる。最終的な累積値は、ベクトル計算ユニット、たとえば図５のベクトル計算ユニット５０２に送信されることができる。いくつかの他の実現例では、アキュムレータユニット３１０は、行よりも少ない活性化入力を有する層を処理するときにいかなる累積も実行することなく累積値をベクトル計算ユニットに渡す。
【００３２】
図４は、シストリックアレイ、たとえば図３のシストリックアレイ３０６内のセルの例示的なアーキテクチャ４００を示す。
【００３３】
セルは、活性化入力を格納する活性化レジスタ４０６を含み得る。活性化レジスタは、シストリックアレイ内のセルの位置に応じて、左側の隣接するセル、すなわち所与のセルの左側に位置する隣接するセルから、または統合バッファから活性化入力を受け取ることができる。セルは、重み入力を格納する重みレジスタ４０２を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、上側の隣接するセルから、または重みフェッチャインターフェイスから送信されることができる。セルは、合計レジスタ４０４も含み得る。合計レジスタ４０４は、上側の隣接するセルからの累積値を格納することができる。乗算回路４０８は、重みレジスタ４０２からの重み入力と活性化レジスタ４０６からの活性化入力とを掛け合わせることに使用できる。乗算回路４０８は、その積を総和回路４１０に出力することができる。
【００３４】
総和回路は、その積と合計レジスタ４０４からの累積値とを合計して、新たな累積値を生成することができる。次いで、総和回路４１０は、下側の隣接するセルに位置する別の合計レジスタに当該新たな累積値を送ることができる。当該新たな累積値は、下側の隣接するセルでの合計のためのオペランドとして使用することができる。
【００３５】
また、セルは、処理のために重み入力および活性化入力を隣接するセルにシフトさせることもできる。たとえば、重みレジスタ４０２は、下側の隣接するセルにおける別の重みレジスタに重み入力を送ることができる。活性化レジスタ４０６は、右側の隣接するセルにおける別の活性化レジスタに活性化入力を送ることができる。したがって、重み入力も活性化入力も、後続のクロックサイクルでアレイ内の他のセルによって再使用することができる。
【００３６】
いくつかの実現例では、セルは制御レジスタも含む。制御レジスタは、セルが隣接するセルに重み入力をシフトすべきであるか活性化入力をシフトすべきであるかを判断する制御信号を格納することができる。いくつかの実現例では、重み入力または活性化入力のシフトは、１つ以上のクロックサイクルを要する。制御信号は、活性化入力を乗算回路４０８に送信するか重み入力を乗算回路４０８に送信するかを判断することもでき、または、乗算回路４０８が活性化入力および重み入力上で動作するか否かを判断することもできる。制御信号も、たとえばワイヤを使用して１つ以上の隣接するセルに渡されることができる。
【００３７】
いくつかの実現例では、重みは、重みパスレジスタ４１２に事前にシフトされる。重みパスレジスタ４１２は、たとえば上側の隣接するセルから重み入力を受け取って、制御信
号に基づいて重み入力を重みレジスタ４０２に送信することができる。重みレジスタ４０２は、たとえば活性化レジスタ４０６を介して複数のクロックサイクルにわたって活性化入力がセルに送信されるときに重み入力がセル内にとどまって隣接するセルに送信されないように、重み入力を静的に格納することができる。したがって、重み入力は、たとえば乗算回路４０８を使用して複数の活性化入力に適用可能であり、それぞれの累積値は、隣接するセルに送信されることができる。
【００３８】
図５は、ベクトル計算ユニット５０２の例示的なアーキテクチャ５００を示す。ベクトル計算ユニット５０２は、行列計算ユニット、たとえば図２を参照して説明した行列計算ユニットから累積値のベクトルを受け取ることができる。
【００３９】
ベクトル計算ユニット５０２は、活性化ユニット４０４において累積値のベクトルを処理することができる。いくつかの実現例では、活性化ユニットは、非線形関数を各々の累積値に適用して活性化値を生成する回路を含む。たとえば、非線形関数はｔａｎｈ（ｘ）であってもよく、ｘは累積値である。
【００４０】
任意に、ベクトル計算ユニット５０２は、活性化値から正規化値を生成する正規化回路５０６において活性化値を正規化することができる。
【００４１】
また、任意に、ベクトル計算ユニット５０２は、プール回路５０８を使用して、活性化値または正規化値のいずれかの値をプールすることができる。プール回路５０８は、集約関数を正規化値のうちの１つ以上に適用して、プール値を生成することができる。いくつかの実現例では、集約関数は、正規化値または正規化値のサブセットの最大値、最小値または平均値を返す関数である。
【００４２】
制御信号５１０は、たとえば図２のシーケンサ２０６によって送信されることができ、どのようにベクトル計算ユニット５０２が累積値のベクトルを処理するかを調整することができる。すなわち、制御信号５１０は、活性化値がプールされるか、正規化されるか、またはプールされて正規化されるかを調整することができる。また、制御信号５１０は、活性化関数、正規化関数またはプール関数、ならびに、正規化およびプールのための他のパラメータ、たとえばストライド値を指定することもできる。
【００４３】
ベクトル計算ユニット５０２は、値、たとえば活性化値、正規化値またはプール値を統合バッファ、たとえば図２の統合バッファ２０８に送ることができる。
【００４４】
いくつかの実現例では、プールユニット５０８が正規化回路５０６の代わりに活性化値を受け取って、プール値を統合バッファに格納する。いくつかの実現例では、プールユニット５０８は、統合バッファに格納される正規化値を生成する正規化回路５０６にプール値を送る。
【００４５】
図６は、正規化回路、たとえば図５の正規化回路５０６の例示的なアーキテクチャ６００を示す。正規化回路は、各クロックサイクルについて、活性化回路６０２、たとえば図５の活性化回路５０４から活性化値のベクトルを受け取ることができる。システムパラメータの値に応じて、正規化回路は、活性化値のベクトルをプール回路に渡す、すなわち活性化値を正規化しないか、または活性化値のベクトルから正規化値のベクトルを生成するかのいずれかを行うことができる。たとえば、システムパラメータ（たとえば、ユーザによって提供される）が活性化値のベクトルをプール回路に渡すように回路に指示する場合、たとえばユーザが値を正規化したくない場合には、システムパラメータは、値を直接プール回路に渡して正規化回路をスキップするマルチプレクサへの信号であってもよい。
【００４６】
いくつかの実現例では、活性化値のベクトルは、重み入力のセットに基づいて活性化入力から生成された累積値に活性化関数を適用することによって生成される活性化値を含む。
【００４７】
いくつかの他の実現例では、重み入力のセットについての活性化値は、活性化入力および重み入力をシフトするときに生じる遅延のために、活性化値の複数のベクトル全体にわたって互い違いに配置される。たとえば、行列計算ユニットは、カーネルＡからの活性化入力のセットおよび重み入力のセットから累積値Ａ０〜Ａｎを生成することができ、カーネルＢからの活性化入力のセットおよび重み入力のセットから累積値Ｂ０〜Ｂｎを生成することができ、カーネルＣからの活性化入力のセットおよび重み入力のセットから累積値Ｃ０〜Ｃｎを生成することができる。累積値Ａ０〜ＡｎおよびＢ０〜Ｂｎは、後続のクロックサイクルで生成することができる。なぜなら、図４を参照して上記したように、対応する累積値が計算される前に重み入力および活性化入力が行列計算ユニット全体にわたってシフトされるからである。Ａ０はクロックサイクル０で生成することができ、Ａ１およびＢ０はクロックサイクル１で生成することができ、Ａ２，Ｂ１およびＣ０はクロックサイクル２で生成することができ、Ａｎ，Ｂｎ−１およびＣｎ−２はクロックサイクルｎで生成することができる、などである。行列計算ユニットは、クロックサイクルＸについてのＡ０およびＢ０を含む累積値のベクトルと、クロックサイクルＸ＋１についてのＡ１およびＢ１を含む累積値の別のベクトルとを生成することができる。したがって、所与のカーネルの累積値、たとえばカーネルＡからのＡ０〜Ａｎは、後続のクロックサイクルにおける累積値の複数のベクトル全体にわたって互い違いの態様で分散させることができる。
【００４８】
その結果、累積値の複数のベクトルは、たとえば図５の活性化回路５０４による処理後は活性化値の複数のベクトルになることができ、活性化値の複数のベクトルの各々は、個別の正規化レジスタ列に送られることができる。特に、活性化回路６０２は、活性化値のベクトルからの各活性化値を個別の正規化レジスタ列６０４〜６１０に送ることができる。特に、正規化レジスタ６１６〜６２２の各々は、それぞれの活性化値を受け取ることができる。正規化レジスタ列は、直列に接続された正規化レジスタのセットを含み得る。すなわち、列内の第１の正規化レジスタの出力は、列内の第２の正規化レジスタの入力として送られることができる。いくつかの実現例では、各正規化レジスタは、活性化値を格納する。いくつかの他の実現例では、各正規化レジスタは、活性化値の二乗も格納する。いくつかの実現例では、正規化回路は、活性化回路またはシストリックアレイにある列と同数の正規化レジスタ列を有する。
【００４９】
いくつかの実現例では、活性化値のベクトルを正規化レジスタ列に提供する前に、回路はベクトルを二乗ユニットに送る。二乗ユニットは、正規化値を計算する際に使用できるように各活性化値の二乗を算出することができ、これについては以下でさらに説明する。二乗ユニットは、二乗活性化値のベクトル、すなわち活性化値の各ベクトルにつき１つ、を生成して、二乗活性化値のベクトルを正規化レジスタ列に送ることができる。いくつかの他の実現例では、二乗ユニットは、活性化値のベクトルも二乗活性化値のベクトルも正規化レジスタ列に送る。
【００５０】
いくつかの実現例では、正規化回路は、正規化半径パラメータに基づいて、互い違いに配置されたグループ、たとえば互い違いに配置されたグループ６２４および６２８を形成する。正規化半径パラメータは、正規化値を算出する際に使用すべき周囲の正規化レジスタからの出力の数を示し得る。出力の数は、正規化半径パラメータの２倍と同等であり得る。例示として、互い違いに配置されたグループ６２４および６２８は、１という正規化半径パラメータから形成される。互い違いに配置されたグループ６２４は、正規化ユニット６３２および６１８を含み、ゼロレジスタ６３６も含む。ゼロレジスタ６３６は、０という値を常に出力することができ、正規化回路の端縁で正規化値を算出する際にバッファ
として機能することができる。ゼロレジスタ６３５および６３８は、ゼロレジスタの列６１２に含まれ得る。互い違いに配置されたグループ内の値の一例については、図７を参照して以下でさらに説明する。
【００５１】
いくつかの実現例では、正規化ユニット、たとえば正規化ユニット６２６，６３０は、互い違いに配置されたグループからの出力を使用して、正規化値の計算に使用される対応する構成要素、たとえば互い違いに配置されたグループのレジスタ内の活性化値の二乗を生成する。たとえば、構成要素を使用して、全ての活性化値の二乗和を生成することができる。正規化ユニットは、当該二乗和を使用して正規化値を計算することができ、これについては以下でさらに説明する。いくつかの実現例では、互い違いに配置された各グループについて対応する正規化ユニットがある。
【００５２】
正規化回路は、互い違いに配置されたグループに基づいて、活性化値についての正規化値を生成することができる。たとえば、正規化レジスタ６３２に格納された活性化値についての正規化値は、正規化ユニット６２６に格納されることができる。特に、互い違いに配置されたグループ６２４に基づいて、正規化回路は、たとえば総和回路を使用して、互い違いに配置されたグループ６２４内の正規化レジスタによって生成される全ての二乗の和を計算することができる。当該和は、正規化ユニット６２６に格納されることができる。当該和は、活性化値に対応する正規化値であり得る。正規化回路は、正規化レジスタ６３４，６４０とゼロレジスタ６２０とを含む互い違いに配置されたグループ６２８について別の対応する正規化値を生成し続けることができ、対応する正規化値は、正規化ユニット６３０に格納されることができる。
【００５３】
正規化回路は、たとえば正規化ユニットに格納され得る生成された正規化値から正規化値のベクトルを形成することができ、ニューラルネットワークパラメータによって規定される場合には正規化値のベクトルをプール回路に送ることができ、または統合バッファに送ることができる。
【００５４】
図７は、正規化レジスタ内のサンプル活性化値を有する正規化回路の別の例示的なアーキテクチャ７００を示す。互い違いに配置されたグループ７２４および７２８に示されるように、正規化半径パラメータは１であり得る。特に、互い違いに配置されたグループ７２４は、正規化レジスタ７３２および７１８と、ゼロレジスタ７３６とを含む。互い違いに配置されたグループ７２８は、ゼロレジスタ７３８と、正規化レジスタ７３４および７４０とを含む。
【００５５】
正規化レジスタ７１６〜７２０，７３２，７３４および７４０は、たとえばシストリックアレイからの列に対応する活性化値を格納することができる。正規化レジスタ７４０の表記ＡＸ，Ｙ、たとえばＡ０，０は、クロックサイクルＹにおける列Ｘに対応する活性化値を示す。
【００５６】
図に示されるように、活性化値は互い違いの態様でロードされる。たとえば、クロックサイクル０では、活性化値Ａ０，０、Ａ１，０およびＡ２，０を計算することができるが、正規化回路は３つのクロックサイクルにわたって３個の活性化値をロードする。いくつかの実現例では、活性化値は互い違いでない態様でロードされる。すなわち、Ａ０，０、Ａ１，０およびＡ２，０が１つのクロックサイクルにおいてロードされてもよい。
【００５７】
Ｎ０は、正規化レジスタ７２６に格納されたＡ０，１のための正規化値であり得る。Ｎ０は、図８を参照して以下で説明するＡ０，１およびＡ１，１および（ゼロレジスタ７３６からの）０の二乗和に基づいて算出することができる。同様に、Ｎ１は、Ａ０，０およびＡ１，０および（レジスタ７２０からの）Ａ２，０の二乗和に基づいて算出されるＡ０
，０のための正規化値であり得る。
【００５８】
正規化回路は、１という半径を使用して各活性化値について正規化値を計算することができる。他の半径も可能である。正規化回路が正規化算出に必要な活性化値をまだロードしていなければ、必要な活性化値がロードされるまで、正規化回路は活性化値を後続の正規化レジスタにシフトすることができる。たとえば、正規化レジスタ７１６に格納された活性化値Ａ０，２のための正規化値を算出するために、１という半径に鑑みて活性化値Ａ１，２が必要である。後続のクロックサイクルで、活性化値Ａ１，２を正規化レジスタ７１８にロードすることができ、この時点で、正規化回路は活性化値Ａ０，２のための正規化値を計算することができる。
【００５９】
図８は、正規化回路内の正規化ユニットの例示的なアーキテクチャ８００を示す。正規化ユニットは、活性化値８０２を受け取ることができる。いくつかの実現例では、たとえば活性化値８０２が誤った位置にあると回路が判断すると、すなわち正規化算出のために活性化値を後続の正規化ユニットに格納する必要があると回路が判断すると、活性化値８０２がマルチプレクサ８１４を介して後続の正規化ユニットに渡される。正規化回路は、特定の出力、たとえば正規化値または影響を受けない活性化値のいずれか、を通過するように制御信号をマルチプレクサ８１４に送ることができる。
【００６０】
いくつかの実現例では、活性化値が二乗回路８０４に渡される。二乗回路８０４は、二乗活性化値８０８を生成する、すなわち活性化値を２のべき乗に引き上げることができる。二乗回路８０４は、二乗活性化値８０８を隣接する正規化ユニット、たとえば正規化ユニットの互い違いに配置された同一のグループ内の他の正規化ユニットに送ることができる。
【００６１】
いくつかの実現例では、図６を参照して上記したように、受け取った活性化値は、正規化レジスタ列に提供される前に既に二乗されている。
【００６２】
また、正規化ユニットは、総和回路８０６において、隣接する正規化ユニットから二乗活性化値８１０を受け取ることができる。総和回路８０６は、二乗活性化値８０８と受け取った二乗活性化値８１０との和を生成することができる。
【００６３】
当該和は、メモリユニット８１２に送られることができる。いくつかの実現例では、メモリユニット８１２は、ルックアップテーブルと、補間ユニットとを含む。正規化ユニットは、当該和の一部、たとえば当該和の高ビットのセットを、システムパラメータによって提供される１つ以上の係数を調べるためのアドレスとして使用することができる。メモリおよび補間ユニット８１２は、当該係数および二乗活性化値の和に基づいて正規化スケーリングファクタを生成することができる。当該正規化スケーリングファクタは、乗算ユニット８１６に送られることができる。
【００６４】
いくつかの実現例では、二乗和は１２ビット値である。正規化ユニットは、二乗和の上位４ビットをルックアップテーブルへのインデックスとして使用することができる。上位４ビットを使用して、たとえばユーザによって指定される係数にルックアップテーブルからアクセスすることができる。いくつかの実現例では、上位４ビットは、２個の１２ビット係数：ＡおよびＢにアクセスする。下位８ビットは、正規化スケーリングファクタを算出するために式中で使用されるデルタであり得る。例示的な式は、スケーリングファクタ＝minimum (1048575, [A * delta + B * 256 + 2^7]) >> 8で表わされ、式中、minimumは２個の引数を処理して、最小値を有する引数を返す。
【００６５】
正規化ユニットは、乗算ユニット８１６を使用して、正規化スケーリングファクタと活
性化値８０２とを掛け合わせて、正規化値を生成することができる。いくつかの実現例では、正規化値は、次いで、プール回路、たとえば図５のプール回路５０８に送られる。
【００６６】
図９は、プール回路の例示的なアーキテクチャ９００を示す。プール回路は、集約関数を１つ以上の正規化値または活性化値に適用して、プール値を生成することができる。例示として、アーキテクチャ９００は、活性化値または正規化値の４×４セットのプールを実行することができる。図９に示されているプールは正方形領域、すなわち４×４を有するが、長方形領域も可能である。たとえば、領域がｎ×ｍというウィンドウを有する場合には、アーキテクチャ９００はｎ＊ｍ個のレジスタ、すなわちｎ個の列とｍ個の行とを有し得る。
【００６７】
プール回路は、正規化値のベクトルから、たとえば図５の正規化回路５０６から、要素のシーケンスを受け取ることができる。たとえば、当該シーケンスは、画像の８×８部分の画素を表わし得て、プール回路アーキテクチャ９００は、８×８部分の４×４サブセットから値をプールすることができる。いくつかの実現例では、正規化値は、プール回路に結合された正規化回路によって計算されると、当該シーケンスに追加される。いくつかの実現例では、ニューラルネットワークプロセッサは、複数の並列プール回路を含む。各クロックサイクルにわたって、各プール回路は、正規化回路からの正規化値のベクトルからそれぞれの要素を受け取ることができる。各プール回路は、正規化回路から受け取った要素を、ラスタ順序で到達する二次元画像として解釈することができる。
【００６８】
プール回路は、一連のレジスタおよびメモリユニットを含み得る。各レジスタは、レジスタ内に格納された値全体にわたって集約関数を適用する集約回路９０６に出力を送ることができる。集約関数は、値のセットから最小値、最大値または平均値を返すことができる。
【００６９】
第１の正規化値は、レジスタ９０２に送られてレジスタ９０２内に格納されることができる。後続のクロックサイクルで、第１の正規化値は、後続のレジスタ９０８にシフトしてメモリ９０４に格納されることができ、第２の正規化値がレジスタ９０２に送られてレジスタ９０２内に格納されることができる。
【００７０】
４つのクロックサイクル後、４個の正規化値が第１の４個のレジスタ９０２，９０８〜９１２内に格納される。いくつかの実現例では、メモリユニット９０４は、先入れ先出し（first-in-first-out：ＦＩＦＯ）下で動作する。各メモリユニットは、８個までの正規化値を格納することができる。メモリユニット９０４は、完全な画素列を収容した後に、正規化値をレジスタ９１４に送ることができる。
【００７１】
任意の所与の時点で、集約回路９０６は、各レジスタからの正規化値にアクセスすることができる。レジスタ内の正規化値は、画像の４×４部分の正規化値を表わすはずである。
【００７２】
プール回路は、集約回路９０６を使用してアクセスされた正規化値、たとえば最大正規化値、最小正規化値または平均正規化値からプール値を生成することができる。プール値は、統合バッファ、たとえば図２の統合バッファ２０８に送られることができる。
【００７３】
第１のプール値を生成した後、プール回路は、新たな正規化値をレジスタに格納して集約回路９０６によってプールすることができるように各レジスタを介して正規化値をシフトすることによってプール値を生成し続けることができる。たとえば、アーキテクチャ９００では、プール回路は、４つ以上のクロックサイクルにわたって正規化値をシフトし、それによって、メモリユニット内の正規化値をレジスタにシフトすることができる。いく
つかの実現例では、プール回路は、新たな正規化値が最後の最上部のレジスタ、たとえばレジスタ９１６に格納されるまで新たな正規化値をシフトする。
【００７４】
次いで、集約回路９０６は、レジスタに格納された新たな正規化値をプールすることができる。
【００７５】
いくつかの実現例では、プール回路は、正規化値のベクトルを受け取る代わりに、図５を参照して上記したように活性化値のベクトルを受け取る。
【００７６】
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に実施されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの１つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、１つ以上のコンピュータプログラムとして実現されてもよく、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の１つ以上のモジュールとして実現されてもよい。代替的にまたは加えて、プログラム命令は、人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号、に符号化されてもよく、当該信号は、情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行するように生成される。コンピュータ記憶媒体は、機械読取可能な記憶装置であってもよく、機械読取可能な記憶基板であってもよく、ランダムもしくはシリアルアクセスメモリデバイスであってもよく、またはそれらのうちの１つ以上の組み合わせであってもよい。
【００７７】
「データ処理装置」という用語は、一例としてプログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するための全ての種類の装置、デバイスおよび機械を包含する。当該装置は、特定目的論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）を含み得る。当該装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの１つ以上の組み合わせを構成するコード、も含み得る。
【００７８】
（プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと称してもよく、またはそのようなものとして記載されてもよい）コンピュータプログラムは、コンパイラ型もしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含むいずれかの形態のプログラミング言語で書かれてもよく、スタンドアロンのプログラム、または計算環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットを含むいずれかの形態でデプロイすることができる。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、そうでなくてもよい。プログラムは、他のプログラムもしくはデータ、たとえばマークアップ言語ドキュメントに格納された１つ以上のスクリプト、を保持するファイルの一部に格納されてもよく、対象のプログラムに専用の単一のファイルに格納されてもよく、または複数の協調的ファイル、たとえば１つ以上のモジュール、サブプログラムもしくはコードの一部を格納するファイル、に格納されてもよい。コンピュータプログラムは、１つのコンピュータで実行されるようにデプロイされてもよく、または、一箇所に位置するかもしくは複数の箇所に分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるようにデプロイされてもよい。
【００７９】
本明細書に記載されているプロセスおよび論理フローは、１つ以上のプログラム可能な
コンピュータによって実行されてもよく、当該１つ以上のプログラム可能なコンピュータは、入力データ上で動作して出力を生成することによって機能を実行するように１つ以上のコンピュータプログラムを実行する。また、当該プロセスおよび論理フローは、特定目的論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）によって実行されてもよく、装置は、特定目的論理回路、たとえばＦＰＧＡまたはＡＳＩＣとして実現されてもよい。
【００８０】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特定目的マイクロプロセッサ、またはそれら両方、またはその他の種類の中央処理装置に基づいていてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクもしくは光ディスクも含み、または、当該１つ以上の大容量記憶装置からデータを受信したり、当該１つ以上の大容量記憶装置にデータを送信したり、もしくは当該１つ以上の大容量記憶装置との間でデータを送受信したりするように動作可能に結合される。しかし、コンピュータはこのような装置を有していなくてもよい。さらに、コンピュータは、別のデバイス、たとえばいくつか例を挙げると携帯電話、パーソナルデジタルアシスタント（personal digital assistant：ＰＤＡ）、モバイルオーディオプレーヤもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム（Global Positioning System
：ＧＰＳ）受信機で実施されてもよく、または携帯型記憶装置、たとえばユニバーサルシリアルバス（universal serial bus：ＵＳＢ）フラッシュドライブで実施されてもよい。
【００８１】
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、半導体メモリデバイス、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリデバイス；磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスク；光磁気ディスク；ならびにＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリは、特定目的論理回路によって補完されてもよく、または特定目的論理回路に組み込まれてもよい。
【００８２】
ユーザとの対話を要求するために、本明細書に記載されている主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえばＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタと、ユーザが入力をコンピュータに送ることができるキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールとを有するコンピュータで実現されてもよい。ユーザとの対話を要求するために他の種類のデバイスも使用してもよい。たとえば、ユーザに提供されるフィードバックは、いずれかの形態の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含むいずれかの形態で受け取られてもよい。また、コンピュータは、ユーザが使用するデバイスにドキュメントを送ったり当該デバイスからドキュメントを受け取ったりすることによってユーザと対話してもよく、たとえばウェブブラウザから受け取った要求に応答してユーザのクライアントデバイスのウェブブラウザにウェブページを送ることによってユーザと対話してもよい。
【００８３】
本明細書に記載されている主題の実施形態は、バックエンドコンポーネント、たとえばデータサーバを含む計算システムで実現されてもよく、またはミドルウェアコンポーネント、たとえばアプリケーションサーバを含む計算システムで実現されてもよく、またはフロントエンドコンポーネント、たとえばユーザが本明細書に記載されている主題の実現例
と対話できるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システムで実現されてもよく、または１つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントのいずれかの組み合わせを含む計算システムで実現されてもよい。当該システムのコンポーネント同士は、デジタルデータ通信のいずれかの形態または媒体、たとえば通信ネットワークによって相互接続されてもよい。通信ネットワークの例としては、ローカルエリアネットワーク（local area network：ＬＡＮ）および広域ネットワーク（wide area network：ＷＡＮ）、たとえばインターネットが挙げられる。
【００８４】
計算システムは、クライアントとサーバとを含んでいてもよい。クライアントおよびサーバは、一般に互いに離れており、通常は通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で動作して互いに対してクライアント−サーバ関係を有するコンピュータプログラムによって生じる。
【００８５】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは、発明の範囲またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であろう特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、組み合わせて単一の実施形態で実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態で別々に、またはいずれかの好適な部分的組み合わせで実現されてもよい。さらに、特徴は特定の組み合わせで動作するものとして上記され、当初はそのようなものとしてクレームされさえし得るが、クレームされている組み合わせからの１つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、クレームされている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
【００８６】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序でこのような動作を実行しなければならないものとして理解されるべきではなく、または全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であるかもしれない。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態でこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に実装されるかまたは複数のソフトウェア製品にパッケージングされ得るということが理解されるべきである。
【００８７】
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されてもよく、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利であるかもしれない。
【図１】
2020017281.tif 000003
【図２】
2020017281.tif 000004
【図３】
2020017281.tif 000005
【図４】
2020017281.tif 000006
【図５】
2020017281.tif 000007
【図６】
2020017281.tif 000008
【図７】
2020017281.tif 000009
【図８】
2020017281.tif 000010
【図９】
2020017281.tif 000011
【手続補正書】
【提出日】令和1年8月30日(2019.8.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワーク計算を実行するための回路であって、
ベクトル計算ユニットを備え、前記ベクトル計算ユニットは、
プール回路を含み、前記プール回路は、
ニューラルネットワーク層の計算出力である値のセットを、前記ベクトル計算ユニットに含まれる他の回路から受け取るように構成され、
前記値のセットに対して特定のプール関数を実行するように構成され、前記特定のプール関数は、前記値のセットにおける１つ以上の値をプールするために使用され、前記プール回路はさらに、
前記値のセットにおける前記１つ以上の値をプールするために使用される前記特定のプール関数に基づいてプール値を生成するように構成される、回路。
【請求項２】
前記値のセットは、正規化値を備え、前記プール回路は、集約回路を備え、前記集約回路は、
集約関数を前記正規化値のうちの１つ以上に適用して前記プール値を生成するように構成され、前記集約関数は、前記値のセットにおける前記１つ以上の値をプールするために使用される前記特定のプール関数を表す、請求項１に記載の回路。
【請求項３】
前記集約関数は、前記プール回路に、
前記値のセットにおける前記正規化値の最大値、最小値もしくは平均値、または
前記値のセットにおける前記正規化値のサブセットの最大値、最小値もしくは平均値
を返させるように動作可能である、請求項２に記載の回路。
【請求項４】
前記特定のプール関数は、前記ベクトル計算ユニットによって受け取られる制御信号によって指定される、請求項３に記載の回路。
【請求項５】
前記プール回路はさらに、
前記特定のプール関数に基づいて値のＭ×Ｎセットのプールを実行するように構成され、ＭおよびＮの各々は、１以上の整数である、請求項１〜４のいずれか１項に記載の回路。
【請求項６】
前記ベクトル計算ユニットは、複数の並列プール回路を含み、
前記複数の並列プール回路の各プール回路は、所与のクロックサイクルにわたって、前記値のセットからそれぞれの要素を受け取るように構成される、請求項１〜５のいずれか１項に記載の回路。
【請求項７】
前記プール回路はさらに、
前記プール回路に含まれる複数のレジスタおよび複数のメモリユニットに前記値のセットを格納するように構成され、
前記複数のレジスタおよび前記複数のメモリユニットは、直列に接続され、各レジスタは、前記値のセットのうちの１つの値を格納するように構成され、各メモリユニットは、前記値のセットのうちの複数の値を格納するように構成される、請求項１〜６のいずれか１項に記載の回路。
【請求項８】
前記プール回路は、毎クロックサイクル後に、前記値のセットにおける所与の値を前記プール回路の後続のレジスタまたはメモリユニットにシフトして、前記値のセットから前記プール値を生成するように構成される、請求項７に記載の回路。
【請求項９】
前記値のセットは、累積値のベクトルを備え、前記プール回路は、前記ベクトル計算ユニットによって受け取られる制御信号によって指定される特定のプール関数に基づいて前記プール値を生成する、請求項１〜８のいずれか１項に記載の回路。
【請求項１０】
前記制御信号は、前記値のセットにおける前記１つ以上の値をプールするために前記プール回路によって使用される１つ以上のパラメータを指定し、少なくとも１つのパラメータは、前記ニューラルネットワークの特定のニューラルネットワーク層のためのストライド値を備える、請求項９に記載の回路。
【請求項１１】
ニューラルネットワーク計算を実行するための方法であって、
ベクトル計算ユニットに含まれるプール回路が、前記ニューラルネットワーク計算を実行するための値のセットを受け取るステップと、
前記プール回路が、前記値のセットに対して特定のプール関数を実行するステップとを備え、前記特定のプール関数は、前記値のセットにおける１つ以上の値をプールするために使用され、前記方法はさらに、
前記プール回路が、前記値のセットにおける前記１つ以上の値をプールするために使用される前記特定のプール関数に基づいてプール値を生成するステップと、
前記プール回路が、前記ベクトル計算ユニットに含まれる他の回路に前記プール値を提供して、前記ニューラルネットワーク計算を実行するステップとを備える、方法。
【請求項１２】
前記値のセットは、正規化値を備え、前記方法はさらに、
前記プール回路が、集約関数を前記正規化値のうちの１つ以上に適用して前記プール値を生成するステップを備え、前記集約関数は、前記値のセットにおける前記１つ以上の値をプールするために使用される前記特定のプール関数を表す、請求項１１に記載の方法。
【請求項１３】
前記集約関数は、前記プール回路に、
前記値のセットにおける前記正規化値の最大値、最小値もしくは平均値、または
前記値のセットにおける前記正規化値のサブセットの最大値、最小値もしくは平均値
を返させるように動作可能である、請求項１２に記載の方法。
【請求項１４】
前記特定のプール関数は、前記ベクトル計算ユニットによって受け取られる制御信号によって指定される、請求項１３に記載の方法。
【請求項１５】
前記プール回路が、前記プール回路に含まれる複数のレジスタおよび複数のメモリユニットに前記値のセットを格納するステップをさらに備え、
前記複数のレジスタおよび前記複数のメモリユニットは、直列に接続され、各レジスタは、前記値のセットのうちの１つの値を格納するように構成され、各メモリユニットは、前記値のセットのうちの複数の値を格納するように構成される、請求項１１〜１４のいずれか１項に記載の方法。
【請求項１６】
前記プール回路が、毎クロックサイクル後に、前記値のセットにおける所与の値を前記プール回路の後続のレジスタまたはメモリユニットにシフトして、前記値のセットから前記プール値を生成するステップをさらに備える、請求項１５に記載の方法。
【請求項１７】
前記プール値を生成するステップは、前記ベクトル計算ユニットによって受け取られる制御信号によって指定される特定のプール関数に基づいて前記プール値を生成するステップを備える、請求項１１〜１６のいずれか１項に記載の方法。
【請求項１８】
前記プール回路が、前記１つ以上の値をプールするための１つ以上のパラメータを指定する制御信号に基づいて前記値のセットにおける前記１つ以上の値をプールするステップをさらに備え、少なくとも１つのパラメータは、前記ニューラルネットワークの特定のニューラルネットワーク層のためのストライド値を備える、請求項１７に記載の方法。
【請求項１９】
前記値のセットに対して前記特定のプール関数を実行するステップは、前記特定のプール関数に基づいて値のＭ×Ｎセットのプールを実行するステップを備え、ＭおよびＮの各々は、１以上の整数である、請求項１１〜１８のいずれか１項に記載の方法。
【請求項２０】
ニューラルネットワーク計算を実行するための命令を格納するための非一時的な機械読取可能な記憶装置であって、前記命令は、動作を実行させるようにプロセッサによって実行可能であり、前記動作は、
ベクトル計算ユニットに含まれるプール回路が、前記ニューラルネットワーク計算を実行するための値のセットを受け取るステップと、
前記プール回路が、前記値のセットに対して特定のプール関数を実行するステップとを備え、前記特定のプール関数は、前記値のセットにおける１つ以上の値をプールするために使用され、前記動作はさらに、
前記プール回路が、前記値のセットにおける前記１つ以上の値をプールするために使用される前記特定のプール関数に基づいてプール値を生成するステップと、
前記プール回路が、前記ベクトル計算ユニットに含まれる他の回路に前記プール値を提供して、前記ニューラルネットワーク計算を実行するステップとを備える、非一時的な機械読取可能な記憶装置。
【請求項２１】
コンピュータによって実行されるプログラムであって、前記プログラムは、前記コンピュータに、請求項１１〜１９のいずれか１項に記載の方法を実行させる、プログラム。
【外国語明細書】
2020017281000001.pdf