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