(57)【要約】  本明細書では、複数のコンテキストについての多層ニューラルネットワーク処理を実行するための技法が開示される。一実施形態では、計算エンジンは、ニューラルネットワークの第２の層を実装し、第１のコンテキストに関連する第１データを処理して第１のコンテキストの第２の層出力を生成するように第１構成内で設定される。計算エンジンは、ニューラルネットワークの第１の層を実装するために、第１の構成から第２の構成に切り替えることができる。計算エンジンは、第２のコンテキストに関連する第２データを処理して第２のコンテキストの第１の層出力を生成するために使用することができる。計算エンジンは、ニューラルネットワークの第３の層を実装して、第１のコンテキストの第２の層出力および第２のコンテキストの第１の層出力を処理して、第１のコンテキストの第１処理結果および第２のコンテキストの第２の処理結果を生成するように、第３の構成内で設定することができる。【選択図】図５
2021517310.tif 000002
【特許請求の範囲】
【請求項１】
データを処理する方法であって、
ニューラルネットワークの第１の層を実装するように第１の構成内の計算エンジンを設定するステップと、
第１のコンテキストの第１の層出力を生成するために、前記第１の構成内の前記計算エンジンを使用して前記第１のコンテキストに関連する第１のデータを処理するステップと、
前記ニューラルネットワークの第２の層を実装するように第２の構成内の前記計算エンジンを設定するステップと、
前記第１のコンテキストの第２の層出力を生成するために、前記第２の構成内の前記計算エンジンを使用して前記第１のコンテキストの前記第１の層出力を処理するステップと、
前記第２の構成から前記第１の構成に戻るように前記計算エンジンを切り替えるステップと、
第２のコンテキストの第１の層出力を生成するために、前記第１の構成内の前記計算エンジンを使用して前記第２のコンテキストに関連する第２のデータを処理するステップと、
前記ニューラルネットワークの前記第２の層を実装するように前記第２の構成に戻るように前記計算エンジンを設定するステップと、
前記第２のコンテキストの第２の層出力を生成するために、前記第２の構成内の前記第２のコンテキストの前記第１の層出力を処理するステップと、
前記ニューラルネットワークの第３の層を実装するように第３の構成内の前記計算エンジンを設定するステップと、
前記第１のコンテキストの第３の層出力および前記第２のコンテキストの第３の層出力を生成するために、前記第３の構成内の前記計算エンジンを使用して前記第１のコンテキストの前記第２の層出力および前記第２のコンテキストの前記第２の層出力を処理するステップと
を含む、方法。
【請求項２】
第３のコンテキストの第１の層出力を生成するために、前記第１の構成内の前記計算エンジンを使用して前記第３のコンテキストに関連する第３のデータを処理するステップと、
それぞれ、前記第３のコンテキストの第２の層出力および前記第１のコンテキストの前記第２の層出力を生成するために、前記第２の構成内の前記計算エンジンを使用して前記第３のコンテキストの前記第１の層出力および前記第１のコンテキストの前記第１の層出力を処理するステップと
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１のコンテキストの前記第１の層出力および前記第３のコンテキストの前記第１の層出力をメモリデバイスに格納するステップと、
入力として前記メモリデバイスから前記第１のコンテキストの前記第１の層出力を受け取るように前記計算エンジンの第１の部分を構成するステップと、
入力として前記メモリデバイスから前記第３のコンテキストの前記第１の層出力を受け取るように前記計算エンジンの第２の部分を構成するステップと、
前記計算エンジンの前記第１の部分を使用して、前記第１のコンテキストの前記第１の層出力を処理するステップと、
前記計算エンジンの前記第２の部分を使用して、前記第３のコンテキストの前記第１の層出力を処理するステップと
をさらに含む、請求項２に記載の方法。
【請求項４】
前記計算エンジンの前記第１の部分を使用する前記第１のコンテキストの前記第１の層出力の前記処理、および前記計算エンジンの前記第２の部分を使用する前記第３のコンテキストの前記第１の層出力の前記処理が並行して実行される、請求項３に記載の方法。
【請求項５】
第４のコンテキストの第１の層出力を生成するために、前記第１の構成内の前記計算エンジンを使用して前記第４のコンテキストに関連する第４のデータを処理するステップと、
それぞれ、前記第２のコンテキストの前記第２の層出力および前記第４のコンテキストの第２の層出力を生成するために、前記第２の構成内の前記計算エンジンを使用して前記第２のコンテキストの前記第１の層出力および前記第４のコンテキストの前記第１の層出力を処理するステップと
をさらに含む、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記第２のコンテキストの前記第１の層出力および前記第４のコンテキストの前記第１の層出力をメモリデバイスに格納するステップと、
入力として前記メモリデバイスから前記第２のコンテキストの前記第１の層出力を受け取るように前記計算エンジンの第１の部分を構成するステップと、
入力として前記メモリデバイスから前記第４のコンテキストの前記第１の層出力を受け取るように前記計算エンジンの第２の部分を構成するステップと、
前記計算エンジンの前記第１の部分を使用して、前記第２のコンテキストの前記第１の層出力を処理するステップと、
前記計算エンジンの前記第２の部分を使用して、前記第４のコンテキストの前記第１の層出力を処理するステップと
をさらに含む、請求項５に記載の方法。
【請求項７】
前記計算エンジンの前記第１の部分を使用する前記第２のコンテキストの前記第１の層出力の前記処理、および前記計算エンジンの前記第２の部分を使用する前記第４のコンテキストの前記第１の層出力の前記処理が実質的に並行して実行される、請求項６に記載の方法。
【請求項８】
前記第１のコンテキストの前記第２の層出力をメモリデバイスに格納するステップと、
前記第１のコンテキストの前記第２の層出力に加えて、前記第２のコンテキストに関連する前記第２のデータを前記メモリデバイスに格納するステップと、
前記第１のコンテキストの前記第２の層出力および前記第２のコンテキストに関連する前記第２のデータに加えて、前記第２のコンテキストの前記第１の層出力を前記メモリデバイスに格納するステップと
をさらに含む、請求項１から７のいずれか１項に記載の方法。
【請求項９】
前記メモリデバイスに格納された前記第２のコンテキストに関連する前記第２のデータまたは前記第２のコンテキストの前記第１の層出力の少なくとも一部を、前記第２のコンテキストの前記第２の層出力で上書きするステップ
をさらに含む、請求項８に記載の方法。
【請求項１０】
入力として前記メモリデバイスから前記第１のコンテキストの前記第２の層出力を受け取るように前記計算エンジンの第３の部分を構成するステップと、
入力として前記メモリデバイスから前記第２のコンテキストの前記第２の層出力を受け取るように前記計算エンジンの第４の部分を構成するステップと、
前記計算エンジンの前記第３の部分を使用して、前記第１のコンテキストの前記第２の層出力を処理するステップと、
前記計算エンジンの前記第４の部分を使用して、前記第２のコンテキストの前記第２の層出力を処理するステップと
をさらに含む、請求項９に記載の方法。
【請求項１１】
前記計算エンジンの前記第３の部分を使用する前記第１のコンテキストの前記第２の層出力の前記処理、および前記計算エンジンの前記第４の部分を使用する前記第２のコンテキストの前記第２の層出力の前記処理が実質的に並行して実行される、請求項１０に記載の方法。
【請求項１２】
前記第１のコンテキストの前記第１の層出力を生成するために、前記第１の構成内の前記計算エンジンを使用して前記第１のコンテキストに関連する前記第１のデータを処理するステップが、前記第１のデータと、前記ニューラルネットワークの前記第１の層に関連付けられた重みのセットとの間で１つまたは複数の畳み込み計算を実行するステップを含む、請求項１から１１のいずれか１項に記載の方法。
【請求項１３】
状態バッファとして構成されたメモリデバイスと、
前記メモリデバイスと結合され、処理要素の配列を備える計算エンジンであって、前記処理要素の前記配列の各々が加算器および乗算器を備える、計算エンジンと
を備える、集積回路であって、
前記計算エンジンが、
ニューラルネットワークの第２の層に関連付けられた重みの第１のセットを前記状態バッファから取得することと、
第１のデータの第２の層出力を生成するために、重みの前記第１のセットと前記第１のデータとの間で加算および乗算の第１のセットを実行することと、
前記第１のデータの前記第２の層出力が生成された後、前記ニューラルネットワークの第１の層に関連付けられた重みの第２のセットを前記状態バッファから取得することと、
第２のデータの第１の層出力を生成するために、重みの前記第２のセットと前記第２のデータとの間で加算および乗算の第２のセットを実行することと、
前記第２のデータの第２の層出力を生成するために、重みの前記第１のセットと前記第２のデータの前記第１の層出力との間で加算および乗算の第３のセットを実行することと、
前記ニューラルネットワークの第３の層に関連付けられた重みの第３のセットを前記状態バッファから取得することと、
前記第１のデータを処理した第１の結果を生成するために、重みの前記第３のセットと前記第１のデータの前記第２の層出力との間で加算および乗算の第４のセットを実行することと、
前記第２のデータを処理した第２の結果を生成するために、重みの前記第３のセットと前記第２のデータの前記第２の層出力との間で加算および乗算の第５のセットを実行することと
を行うように構成され、
加算および乗算の前記第４のセット、ならびに加算および乗算の前記第５のセットが、前記処理要素の前記配列の異なる部分によって実行される、
集積回路。
【請求項１４】
前記計算エンジンが、
前記第１のデータの前記第２の層出力を前記状態バッファに格納することと、
重みの前記第３のセットと、前記状態バッファから取得された前記第１のデータの前記第２の層出力との間で加算および乗算の前記第４のセットを実行することと
を行うようにさらに構成される、請求項１３に記載の集積回路。
【請求項１５】
前記計算エンジンが、加算および乗算の前記第４のセットならびに加算および乗算の前記第５のセットを実質的に並行して実行するように構成される、請求項１３または１４に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]人工ニューラルネットワークは、生体ニューラルネットワークに基づくアーキテクチャを有するコンピューティングシステムである。人工ニューラルネットワークは、トレーニングデータを使用して、特定の計算タスクを実行する方法について学習するためにトレーニングすることができる。たとえば、トレーニングデータは、所定のオブジェクトに関連付けられた画像データを含んでよい。訓練された人工ニューラルネットワークは、（たとえば、様々な場所で、様々な時間に、様々な人によってキャプチャされ、様々な情報を搬送する）様々なコンテキストを表す複数の画像（または複数の画像セット）を処理して、画像または画像セットが所定のオブジェクトの画像データを含むかどうかを判定することができる。
【発明の概要】
【課題を解決するための手段】
【０００２】
[0002]ニューラルネットワークは処理ノードのセットを含んでよい。各処理ノードは、入力データの一部を処理して出力を生成することができ、最終的な決定は、処理ノードのセットの出力の組合せに基づいて生成することができる。処理の一部として、各処理ノードは、たとえば浮動小数点の乗算および加算などの算術演算のセットを実行することができる。処理ノードの算術演算は、グラフィック処理ユニット（ＧＰＵ）などの高速算術演算用に最適化された回路およびデータ経路によって実行されてよい。
【図面の簡単な説明】
【０００３】
【図１】本明細書に開示される技法を使用して画像を処理する例示的なデータ処理デバイスを示す図である。
【図２Ａ】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【図２Ｂ】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【図２Ｃ】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【図２Ｄ】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【図３Ａ】本開示のいくつかの態様による、図２の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【図３Ｂ】本開示のいくつかの態様による、図２の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【図３Ｃ】本開示のいくつかの態様による、図２の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【図４】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる例示的なシーケンスを示す図である。
【図５】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる例示的なシーケンスを示す図である。
【図６】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる方法の例示的なフローチャートである。
【図７Ａ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｂ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｃ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｄ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｅ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｆ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図７Ｇ】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【図８】本開示のいくつかの態様による、計算エンジンの動作をスケジュールする例示的なフロー図である。
【図９】本開示のいくつかの態様による、コンピューティングデバイスの一例を示す図である。
【発明を実施するための形態】
【０００４】
[0011]以下の説明では、様々な実施形態が記載される。説明の目的で、実施形態を完全に理解するために具体的な構成および詳細が示される。しかしながら、実施形態が具体的な詳細なしに実践されてよいことも当業者には明らかであろう。さらに、記載されている実施形態を不明瞭にしないために、周知の特徴が省略または簡略化される場合がある。
【０００５】
[0012]本開示の実施形態は、複数のコンテキストについての多層ニューラルネットワーク用の計算を実行するように計算エンジンを動作させる方法に関する。多層ニューラルネットワークは、第１のニューラルネットワーク層、第１のニューラルネットワーク層からデータを受け取る第２のニューラルネットワーク層、および第２のニューラルネットワーク層からデータを受け取る第３のニューラルネットワーク層を含んでよい。一例では、計算エンジンは、第１のコンテキストについての計算を実行するために第１のニューラルネットワーク層として構成さすることができ、次いで、第１のコンテキストについての計算を実行するために第２のニューラルネットワーク層として構成することができ、第１のコンテキストについての第２のニューラルネットワーク層計算の出力を格納することができる。次いで、計算エンジンは、第２のコンテキストについての計算を実行するために第１のニューラルネットワーク層にもう一度切り替えることができ、次いで、第２のコンテキストについての計算を実行するために第２のニューラルネットワーク層として構成することができる。第２のコンテキストについての第２のニューラルネットワーク層計算の出力は、格納することができる。次いで、計算エンジンは、第１のコンテキストについての計算と第２のコンテキストについての計算を並行して実行するために、第３のニューラルネットワーク層として構成することができる。
【０００６】
[0013]本開示の実施形態はまた、複数のコンテキストについての多層ニューラルネットワーク計算を実行するための計算エンジンにおける動作をスケジュールする方法に関する。上記の例を参照すると、スケジューリング方法は、様々なコンテキストについての様々なニューラルネットワーク層の計算用の実行バッチを決定することを含んでよい。スケジューリングは、最高レベルのニューラルネットワーク層（たとえば、第３のニューラルネットワーク層）から開始し、最高レベルのニューラルネットワーク層用の１つまたは複数の実行バッチを決定することができる。次いで、下層（たとえば、第２のニューラルネットワーク層）用の１つまたは複数の実行バッチを決定し、最高レベルのニューラルネットワーク層用の実行バッチの前にスケジュールすることができる。実行バッチの決定は、利用可能なバッファスペースに基づくことができる。バッファがすべてのコンテキストについての１つのニューラルネットワーク層の計算に必要なスペースを提供することができない場合、計算は複数のバッチに分割することができ、分割は、（将来の実行バッチに提供されるべき）以前の実行バッチから生成された出力データ、ならびに実行中のバッチの入出力データを格納するのに十分なスペースを、バッファが提供することができるように実行することができる、
【０００７】
[0014]人工ニューラルネットワーク（本明細書では、以下「ニューラルネットワーク」）は、複数の処理ノードを含んでよい。深層ニューラルネットワーク（ＤＮＮ）の場合、処理ノードは、たとえば、入力層、いくつかの（隠れ層としても知られる）中間層、および出力層を含む層に分割することができる。入力層の各処理ノードは、入力セットの要素を受け取り、出力に対する要素の影響度を示すために、重みで要素をスケーリングする。中間層内の処理ノードは、入力層の各処理ノードから受け取ったスケーリングされた要素を組み合わせて、中間出力のセットを計算することができる。たとえば、中間層内の各処理ノードは、要素と重みの積の合計を計算し、次いで、その合計に活性化関数を適用することによって中間出力を生成することができる。１つの中間層の各処理ノードからの中間出力は、次の中間層の中間出力を決定するために、投票の影響を示す重みに関連付けられた活性化された投票（または投票なし）と見なされてよい。出力層は、最終中間層からのスケーリングされた中間出力の合計を生成し、スケーリングされた中間出力の合計がしきい値を超えるかどうかに基づいて、バイナリ出力（たとえば、「はい」または「いいえ」）を生成することができる。層間のスケーリングされた要素の組合せに起因して、上位層（たとえば、出力層、出力層の直前の中間層など）のサイズは、通常、下位層（たとえば、入力層、入力層の直後の中間層など）のサイズよりも小さい。
【０００８】
[0015]以下で説明されるように、処理ノードは、グラフィック処理ユニット（ＧＰＵ）などの高速算術演算用に最適化された回路およびデータ経路によって実装されてよい。たとえば、回路は、データ経路を介して一緒にリンクされた計算ユニットの配列を含んでよい。計算ユニットは、バッファから１つまたは複数の重みおよび１つまたは複数の入力を取得して、スケーリング演算（たとえば、重みのセットによる入力のスケーリング）および／または加算演算（たとえば、別の計算ユニットから受け取ったスケーリングされた入力の組合せ）を実行することができる。多層ニューラルネットワーク処理を実行するために、データ経路は、様々なニューラルネットワーク層に関連付けられた様々な重みおよび入力のセットを様々な時間に様々なバッファから取得し、計算を実行するために計算ユニットに重みおよび入力を転送するように構成することができる。たとえば、第１の時間期間では、計算ユニットは入力層として構成されてよく、データ経路は、バッファから重みの第１のセットおよび入力データセットを取得し、重みの第１のセットおよび入力データセットを計算ユニットに転送するように構成されてよい。計算ユニットは、スケーリングおよび組合せ演算を実行して、中間出力の第１のセットを計算し、重みおよび入力データセットから別々に中間出力の第１のセットをバッファに格納して、計算ユニットに配信されるべき重みおよび入力データセットの上書きを回避することができる。第２の時間期間では、計算ユニットは、中間出力の第２のセットを計算するために第１の中間層として構成されてよく、データ経路は、中間出力の第１のセットおよび重みの第２のセットをバッファから取得し、中間出力の第１のセットおよび重みの第２のセットを計算ユニットに送信して計算を実行するように構成することができる。計算ユニットが出力層のための計算を実行するまで、処理を繰り返すことができる。
【０００９】
[0016]そのような構成は、ニューラルネットワーク処理を実行するために必要な計算ユニットの数を削減することができるが、計算ユニットの利用率は処理中に低下する可能性がある。たとえば、上述されたように、上位層のサイズは、通常、下位層のサイズよりも小さい。計算ユニットの配列が入力データの単一セットに対してニューラルネットワーク処理を実行するように構成された場合、データが下位層から上位層に伝播するにつれて、計算に関与する計算ユニットの数が減少する可能性がある。上位層のための計算が実行されているときに、下位層のための計算に含まれた計算ユニットのいくつかはアイドルになってよく、計算ユニットの利用率の低下につながる。
【００１０】
[0017]より高い利用率を達成するために、計算ユニットの配列は、ロックステップ方式で複数の入力データセット（または様々なコンテキストに関連付けられた入力データ）を処理するように構成することができる。たとえば、計算ユニットの配列は、コンテキストごとの下位層（たとえば、入力層、下位中間層など）のための計算を順次実行するように構成することができ、下位層のための計算は、より大きい入力データセットおよび重みセットを含み、より多くの計算ユニットおよびより多くのバッファスペースを必要とする場合がある。下位層の計算が完了した後、計算結果をバッファに格納することができる。次いで、計算ユニットの配列は、バッファに格納された下位層の計算結果に基づいて、次の層（たとえば、上位中間層、出力層など）の複数のコンテキストについての並列計算を実行するように構成することができる。次の層のための計算は、より小さい入力データセットおよび重みセットを含んでよく、より少ない数の計算ユニットによって処理することができ、バッファは、より多数のコンテキストの次の層計算用の入出力データを収容することもできる。
【００１１】
[0018]そのような構成は比較的高い利用率を維持することができるが、ニューラルネットワークの特定の層のための計算結果全体を格納して、次の層のための計算に中間出力を提供するために、大きいバッファが必要とされる場合がある。上位層の計算についての利用率をさらに向上させるために、計算ユニットの配列に多数のデータセットが入力されると、バッファの必要なサイズがさらに増大する可能性がある。バッファを実装するために、より多数のメモリユニットおよび関連するインターフェース回路が必要とされる場合がある。これらはすべて、消費電力ならびにチップスペースを増大させる可能性があり、それは、ニューラルネットワークアーキテクチャを使用する計算および問題解決のためのコンピューティングデバイスおよびアプリケーションの導入を大幅に制限する可能性がある。
【００１２】
[0019]本開示の実施形態は、複数のコンテキストについての多層ニューラルネットワーク用の計算を実行するように計算エンジンを動作させる方法に関する。一例では、方法は、計算エンジンを使用して、第１のコンテキストが第１のデータを生成するための第１のニューラルネットワーク層に関連付けられた第１の計算タスクを実行することと、計算エンジンを使用して、第１のデータに基づいて、第１のコンテキストが第２のデータを生成するための第２のニューラルネットワーク層に関連付けられた第２の計算タスクを実行することと、メモリデバイスに第２のデータを格納することと、計算エンジンを使用して、第２のコンテキストが第３のデータを生成するための第１のニューラルネットワーク層に関連付けられた第３の計算タスクを実行することと、計算エンジンを使用して、第３のデータに基づいて、第２のコンテキストが第４のデータを生成するための第２のニューラルネットワーク層に関連付けられた第４の計算タスクを実行することと、メモリデバイスに第４のデータを格納することと、計算エンジンを使用して、メモリデバイスに格納された第２のデータおよび第４のデータに基づいて、第５の計算タスクおよび第６の計算タスクを並列に実行することであって、第５の計算タスクおよび第６の計算タスクが、それぞれ、第１のコンテキストおよび第２のコンテキストについての第３のニューラルネットワーク層に関連付けられる、実行することとを含む。
【００１３】
[0020]本開示の実施形態はまた、複数のコンテキストについての多層ニューラルネットワーク計算を実行するための計算エンジンにおける動作をスケジュールする方法に関する。上記の例を参照すると、スケジューリング方法は、第５の計算タスクおよび第６の計算タスクを含む第１の実行バッチを決定することと、メモリデバイスが第２の計算タスクの入力データおよび出力データならびに第４の計算タスクの出力データを格納するのに十分な容量を有することに基づいて、第２の計算タスクを含む第２の実行バッチおよび第４の計算タスクを含む第３の実行バッチを決定することであって、第２の実行バッチと第３の実行バッチの両方が第１の実行バッチの前に実行される、決定することと、メモリが第１の計算タスクの入力データおよび出力データならびに第４の計算タスクの出力データを格納するのに十分な容量を有することに基づいて、第２の実行バッチと第３の実行バッチとの間で実行されるべき第１の計算タスクを含む第４の実行バッチを決定することとを含んでよい。第１、第２、第３、および第４の実行バッチは、上述された複数のコンテキストについての多層ニューラルネットワーク計算の例示的な方法を実行するために、上記で決定された順序に従って実行することができる。
【００１４】
[0021]前述のロックステップ方式と比較すると、本開示の実施形態は、計算の中間出力を格納するためのより小さいバッファで動作することができる。説明のための例として、ロックステップ方式では、計算エンジンは、第１のコンテキストと第２のコンテキストの両方についての第１のニューラルネットワーク層計算を完了し、次いで、第１のコンテキストと第２のコンテキストの両方についての第２のニューラルネットワーク層計算の実行に進むことができ、第１のコンテキストと第２のコンテキストの両方についての第３のニューラルネットワーク層計算がその後に続く。計算エンジンは、第２のコンテキストがその後に続く第１のコンテキストについての第１のニューラルネットワーク層計算を実行することができる。バッチ処理をサポートするために、バッファは、第２のコンテキストの進行中の第１のニューラルネットワーク層計算の入出力を格納するための第１の格納スペース、ならびに（第２のコンテキストの第１のニューラルネットワーク層計算が完了した後、第１のコンテキストの第２のニューラルネットワーク層計算への入力として提供されるべき）第１のコンテキストの完了した第１のニューラルネットワーク層計算の出力を格納するための第２の格納スペースを提供する必要がある。
【００１５】
[0022]一方、本開示の実施形態では、計算エンジンは、第１のコンテキストについての第１のニューラルネットワーク層計算および第２のニューラルネットワーク層計算を完了し、第１のコンテキストの第２のニューラルネットワーク層出力を格納し、次いで、第２のコンテキストについての第１のニューラルネットワーク層計算の実行に進むことができる。第２のコンテキストについての第１のニューラルネットワーク層計算をサポートするために、バッファは、（上述されたロックステップ方式の説明のための例において必要な第１の格納スペースと同一の）第１の格納スペースを、第２のコンテキストについての第１のニューラルネットワーク層計算の入力データおよび出力データに提供する必要があり得る。バッファはまた、第１のコンテキストの完了された第２のニューラルネットワーク層計算の出力を格納するために第２の格納スペースを提供する必要がある。この場合の第２の格納スペースは、上述されたロックステップ方式の例の第２の格納スペースよりも小さい可能性がある。これは、第２のニューラルネットワーク層のサイズが、通常、第１のニューラルネットワーク層のサイズよりも小さく、第２のニューラルネットワーク層の出力データサイズも、通常、第１のニューラルネットワーク層の出力データサイズよりも小さいからである。したがって、計算エンジンが層を通って進行するにつれて、中間結果を格納するためにより小さいバッファを使用することができる。
【００１６】
[0023]本開示の実施形態では、様々な入力データセットについての計算は、バッファ使用量を削減しながら、（たとえば、複数の入力データセットについての同時上位層計算を可能にすることにより）計算リソースの利用率を最大化するように配置することができる。結果として、計算をサポートするためにより小さいメモリデバイスを使用することができ、それにより、チップスペースおよび消費電力を削減することができる。
【００１７】
[0024]図１は、本明細書に開示される技法を使用してデータシーケンスを処理する例示的な分類器デバイス１００を示す。分類器デバイス１００は、たとえば、データシーケンスに含まれる情報を予測し、予測に基づいて所定の機能を実行するために、ソフトウェアアプリケーション１０２および予測モデル１０３を動作させるコンピューティングデバイスであり得る。たとえば、分類器デバイス１００は、画像から特定のオブジェクト（たとえば、テキスト、人など）を識別するために提供される画像認識サービスの一部であり得る。画像認識サービスは単に説明のための例として提供され、本明細書に開示される技法は、たとえば、テキストベースのデータ処理（たとえば、検索クエリの処理）、オーディオデータ処理などを含む他のデータ処理アプリケーションに使用できることが理解される。
【００１８】
[0025]画像認識サービスは、マルチテナント計算サービスシステムにおいて提供することができる。マルチテナント計算サービスシステムは、通常、データをホストすることができる複数のサーバを含んでよく、仮想マシンインスタンスまたはベアメタルインスタンス（たとえば、サーバハードウェア上で直接実行されるオペレーティングシステム）などのインスタンスを実行するために、複数のクライアントまたは組織によって使用することができる。ベアメタルまたは仮想マシンなどのインスタンスでは、マルチテナント計算サービスシステムは、クライアントがそれらを必要とするときにクライアントに割り当てられ、リソースが他のクライアントに再割当てすることができるように、それらが不要になったときに閉鎖されてよい。本開示では、「テナント」、「クライアント」、および「顧客」という用語は、交換可能に使用されてよいが、そのような用語は、必ずしも任意の特定のビジネス協定の存在を意味するものではない。「インスタンス」という用語は、たとえば、サーバハードウェア上で直接、または仮想マシンとして実行されるインスタンスを指す場合がある。様々なタイプのインスタンスは、一般に、様々なハードウェア機能および／またはハードウェアの配置（たとえば、様々な量の利用可能なメモリおよび／または処理ハードウェア）に対応する。図１の例では、マルチテナント計算サービスシステムは、クライアントが画像認識サービスを必要とするときにそれを提供し、画像認識サービスをサポートするリソース（たとえば、ソフトウェアアプリケーション１０２へのアクセス、およびソフトウェアアプリケーション１０２を処理するための基礎となるハードウェアリソース）が他のクライアントに再割当てすることができるように、それが不要になったときにそれを閉鎖することができる。
【００１９】
[0026]図１に示されたように、ソフトウェアアプリケーション１０２は、ユーザから画像１０４のピクセルデータを受け取ることができる。画像１０４はピクセルの配列を含んでよい。ソフトウェアアプリケーション１０２は、ピクセルデータに対して分析を実行し、画像１０４に描写された１つまたは複数のオブジェクト１０６を予測することができる。分析は、たとえば、ピクセルデータを所定の画像特徴のセットと比較することを含んでよい。以下でより詳細に説明されるように、ソフトウェアアプリケーション１０２は、予測モデル２０３を利用して、画像１０４のピクセルデータに基づいてスコアのセットを計算することができる。スコアのセットは、たとえば、画像１０４が所定の画像特徴を含む可能性を表すことができる。次いで、ソフトウェアアプリケーション１０２は、スコアに基づいて、画像１０４のコンテンツに関する他の情報を特定することができる。たとえば、スコアに基づいて、ソフトウェアアプリケーション１０２は、画像１０４がパンダの画像であると判断することができる。
【００２０】
[0027]予測モデル１０３は、人工ニューラルネットワークの形態であり得る。人工ニューラルネットワークは複数の処理ノードを含んでよく、各処理ノードは、入力ピクセルデータの一部を処理するか、または他の処理ノードからの中間出力をさらに処理するように構成される。図２Ａは、本明細書に開示される技法を使用する予測モデル１０３の一例を示す。図２Ａの例では、予測モデル１０３は、深層ニューラルネットワーク（ＤＮＮ）、畳み込みニューラルネットワーク（ＣＮＮ）などの多層ニューラルネットワークであってよい。予測モデル１０３は、入力層２０７、中間層２０９および２１１を含む一組の中間層、ならびに（図２Ａには示されていない）出力層を含んでよい。
【００２１】
[0028]層２０７は、画像１０４の様々な部分を表すピクセルデータを処理することができる。図２Ａの例では、層２０７は、画像１０４のピクセルデータを処理することができる。層２０７の各処理ノードは、画像１０４内の所定のピクセルに対応するピクセル値（たとえば、ｘ０、ｘ１、ｘ２、…ｘｎ）を受信し、受信されたピクセル値をもつ１つまたは複数の重みを層２０９に送信するように割り当てられる。予測モデル２０３がＤＮＮである場合、層２０７の各処理ノードには、行列Ｗ１に基づいて定義された重みのセットを割り当てることができる。層２０７の各処理ノードは、受信されたたピクセル値および割り当てられた重みを層２０９の各処理ノードに送信することができる。予測モデル１０３がＣＮＮである場合、層２０７の処理ノードのグループは重みのセットを共有することができ、各グループは、処理ノードのグループによって受信された重みのセットおよびピクセル値を層２０９の単一処理ノードに送信することができる。
【００２２】
[0029]層２０９は、層２０７からのスケーリングされた出力を処理して、中間出力のセットを生成することができる。たとえば、層２０９の処理ノード２１０ａが層２０７内のｎ個の処理ノードに接続されていると仮定すると、処理ノード２１０ａは、以下の式に基づいて層２０７から受信されたスケーリングされた出力の合計を生成することができる。
【００２３】
[0030]
2021517310.tif 000003
【００２４】
[0031]ここで、Ｓｕｍ２１０ａは、処理ノード２１０ａによって生成された合計を表す。Ｗ１ｉ×ｘｉは、層２０７の処理ノードによる関連する重み（たとえば、Ｗ１０）との特定のピクセル値（たとえば、ｘ０）のスケーリングを表す。予測モデル２０３がＤＮＮである場合、層２０９の各処理ノードは、層２０７の各処理ノードからのピクセル値のスケーリングに基づいて合計を生成し、次いで、スケーリングされたピクセル値を合計することにより合計（たとえば、Ｓｕｍ２１０ａ）を生成することができる。合計は、いくつかの要素（たとえば、ピクセル値）を含む入力ベクトルと重みベクトル（たとえば、Ｗ１）との間の内積を表すこともできる。
【００２５】
[0032]一方、予測モデル１０３がＣＮＮである場合、層２０９の各処理ノードは、層２０７の処理ノードのグループからのピクセル値のスケーリングに基づいて合計を生成することができる。合計は、ピクセル値のグループと重み値を含むフィルタとの間の畳み込み結果を表すことができる。図２Ｂは、層２０９が実行することができる畳み込み演算の一例を示す。図２Ｂでは、フィルタ２３０は重みの２次元配列を含んでよい。フィルタ２３０の重みは、画像から検出されるべきいくつかの特徴に対するピクセルの空間分布を表すことができる。２次元配列は、Ｒ行の高さおよびＳ列の幅を有することができ、通常、Ｈピクセルの高さおよびＷピクセルの幅をもつ入力画像よりも小さい。各重みは、同じＲ行およびＳ列をもつピクセル値の長方形ブロック内のピクセルにマッピングされてよい。層２０９の処理ノード（たとえば、処理ノード２１０ａ）は、入力層２０７の処理ノードのグループから、入力画像からのピクセルの第１の長方形ブロックに対応するピクセル値のグループ２４０を受け取り、式１に従って、フィルタ２３０の各重みとグループ２４０内の対応する各ピクセルとの間の乗算結果の合計に基づいて畳み込み出力２４２を生成して、フィルタ２３０によって表される行列とグループ２４０によって表される行列との間の内積を生成することができる。層２０９の別の処理ノードは、入力層２０７の処理ノードの別のグループから、入力画像からのピクセルの第２の長方形ブロックに対応するピクセル値のグループ２４４を受け取り、式１に従って、フィルタ２３０の各重みとグループ２４４内の対応する各ピクセルとの間の乗算結果の合計に基づいて畳み込み出力２４６を生成して、フィルタ２３０の行列とグループ２４０によって表される行列との間の内積を生成することもできる。いくつかの例では、図２Ｂの各畳み込み出力（たとえば、畳み込み出力２４２、畳み込み出力２４６など）は、層２０９の処理ノードの出力に対応することができる。いくつかの例では、入力画像内のピクセルデータは、ピクセルが特定の特徴に対応する同じフィルタ（またはフィルタの同じセット）によって処理されることを示すために、入力特徴マップと呼ばれる場合がある。畳み込み出力は、出力がフィルタを用いて入力特徴マップを処理した結果であることを示すために、出力特徴マップと呼ばれる場合がある。
【００２６】
[0033]図２Ｂに示されたように、畳み込み演算は、第２の長方形ブロックが入力画像内の第１の長方形ブロックと重複するか、またはそうでない場合隣接するように、スライディングウィンドウ内に配置することができる。たとえば、図２Ｂの例では、Ｄは、畳み込み演算ごとのスライディングウィンドウのストライドの距離（ピクセル単位）であってよく、その結果、グループ２４４に対応するピクセルのブロックは、グループ２４０に対応するピクセルのブロックから距離Ｄ（ピクセル単位）に位置してよく、ピクセルの次のブロックも、グループ２４４から同じ距離Ｄに位置してよい。層２０９の他の処理ノードは、他の長方形ブロックに対応するピクセルのグループを受け取り、他の中間出力を生成することもできる。畳み込み出力は、Ｅ行の高さおよびＦ列の幅をもつ畳み込み出力配列２８０の一部であり得る。畳み込み出力の配列は、入力画像よりも小さい高さおよび小さい幅をもつことができる。畳み込み出力の長方形ブロックはさらにグループ化することができ、畳み込み出力のグループとフィルタ重みの別のセットとの間の層２１１において畳み込み演算を実行して、畳み込み出力の別のセットを生成することができる。
【００２７】
[0034]いくつかの例では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行することができる。たとえば、図２Ｃを参照すると、Ｃ個のフィルタ２６０のセットは、数（Ｃ）の画像２７０に対応することができ、畳み込み演算は、フィルタ２６０のセットの各フィルタと画像２７０の対応する画像上のピクセルのブロックとの間で実行することができる。フィルタ画像ペアごとの畳み込み結果は、以下のように畳み込み出力を生成するために合計することができる。
【００２８】
[0035]
2021517310.tif 000004
【００２９】
[0036]ここで、畳み込み演算は画像（またはピクセル配列）ＸＣｅＤ＋ｒ，ｆＤ＋ｓを含み、それは、ｅＤ＋ｒの水平ピクセル座標およびｆＤ＋ｓの垂直ピクセル座標を有する数（Ｃ）の画像３７０内の、インデックスｃの画像にあるピクセルの値を参照してよい。Ｄはスライディングウィンドウのストライド距離であるが、ｅおよびｆは畳み込み出力配列内の出力の位置に対応し、畳み込み出力配列は特定のスライディングウィンドウに対応することもできる。さらに、ｒおよびｓはスライディングウィンドウ内の特定の位置に対応する。（ｒ，ｓ）位置にあるピクセルおよびインデックスｃの画像は、同じ（ｒ，ｓ）位置にある同じインデックスｃの対応するフィルタ内の重みＷｃｒ，ｓに対応することもできる。式２は、畳み込み出力０ｅ，ｆを計算するために、（（ｅ，ｆ）によってインデックス付けされた）スライディングウィンドウ内の各ピクセルが対応する重みＷｃｒ，ｓで乗算されてよいことを示す。画像セット内の画像の各々についての各スライディングウィンドウ内の乗算積の部分合計を計算することができ、次いで、画像セットのすべての画像についての部分合計の合計を計算することができる。
【００３０】
[0037]その上、いくつかの例では、フィルタの複数のセットは、画像のセットで畳み込み演算を実行して、畳み込み出力配列のセットを生成するために使用することができ、各畳み込み出力配列はフィルタのセットに対応する。たとえば、フィルタの複数のセットは、画像のセットから検出されるべき複数の画像特徴に対応することができ、各畳み込み出力配列は、画像のセットからの画像特徴ごとの検出結果に対応する。たとえば、Ｍ個のセットのフィルタがＭ個の畳み込み出力配列を生成するためにＣ個の画像に適用される場合、式２は以下のように更新することができる。
【００３１】
[0038]
2021517310.tif 000005
【００３２】
[0039]ここで、畳み込み出力０ｅ，ｆｍおよび重みＷｃ，ｍｒ，ｓは、Ｍ個のセットのフィルタの１つに対応するインデックスｍを有する。
【００３３】
[0040]図２Ｄは、Ｍ個のセットのフィルタ（Ｍ＝２）で畳み込まれるべきＣ個のセットの入力データセット（Ｃ＝３）の一例を示す。入力データの各セットはピクセルグループのエントリに対応する。たとえば、ピクセルグループ２８２、２８６、および２９０の各々は、１つの入力データセットに対応してよい。Ｍ個のセットのフィルタの各々は、Ｃ個のセットの入力ピクセル配列に対応するＣ個のフィルタのセットを含む。図２Ｄの例では、２つのフィルタセットが存在し、第１のフィルタセットは、フィルタ配列２８４ａ、２８４ｂ、および２８４ｃを含み、第２のフィルタセットは、フィルタ配列２８８ａ、２８８ｂ、および２８８ｃを含む。畳み込み演算は、Ｍ個のセットの出力データセットを生成し、各出力データセットは畳み込み出力配列に対応する。図２Ｄの例では、２つの畳み込み出力配列２９４および２９６が生成される。各畳み込み出力配列は、フィルタの（Ｍ個のセットのうちの）１つのセットを入力ピクセル配列と畳み込むことに対応する。たとえば、畳み込み出力配列２９４の第１の要素Ｏ０，００は、ピクセルグループ２８２とフィルタ配列２８４ａとの間のドット積、ピクセルグループ２８６とフィルタ配列２８４ｂとの間のドット積、およびピクセルグループ２９０とフィルタ配列２８４ｃとの間のドット積の合計によって生成することができる。
【００３４】
[0041]図２Ａを再び参照すると、層２０９の１つの処理ノードは、１つの畳み込み出力配列を生成するように構成されてよく、層２０９の処理ノードのセットＭは、畳み込み出力配列のセットＭに対応することができる。層２０９の処理ノードは、たとえば、活性化関数で各畳み込み出力を後処理して、層２０９についての最終出力を生成することもできる。活性化関数は、畳み込み出力（またはサブサンプル）を、畳み込み出力（またはサブサンプル）を上位層に転送するかどうかの判断に変換することができる。判断の生成は、生体ニューロンの発火に類似する可能性がある。活性化関数の一例は、以下の式に従って定義された整流線形ユニット（ＲｅＬｕ）であり得る。
【００３５】
[0042]ＲｅＬｕ（ｙ）＝ｍａｘ（０，ｙ）  （式４）
【００３６】
[0043]層２０９の処理ノード（たとえば、処理ノード２１０ａ）は、式４に基づいて中間出力を生成するために、ＲｅＬｕ関数で畳み込み出力サブサンプルを処理することができる。加えて、層２０９の処理ノードは、中間出力の数を削減するために、プーリング動作などの他の後処理動作を実行することもできる。層２０９は、後処理された中間出力を層２１１に提供することができ、層２１１は、フィルタの様々なセットに基づいて追加の畳み込み演算を実行することができる。層２１１の各処理ノードからの出力は、他のより高い中間層、または（図２Ａには示されていない）出力層に転送されてよい。出力層は、たとえば、特定の画像特徴が図２Ａの画像１０４（または図２Ｄの入力ピクセル配列のセットによって表された画像のセット）に含まれる確率を表す出力ベクトルを形成して、特定のコンテキストに関連付けられた画像または画像のセットがパンダの画像を含むかどうかを判定することができる。たとえば、出力ベクトルは、パンダの鼻オブジェクトに関連付けられた基準ベクトル、またはパンダに関連付けられた基準ベクトルと比較され、比較結果に基づいて判断をもたらすことができる。モデル１０３の複数のインスタンスは、複数のコンテキストに関連付けられた複数の画像（または画像の複数のセット）を処理して、コンテキストの各々についての判断をもたらすために使用することができる。
【００３７】
[0044]図３Ａは、本開示のいくつかの実施形態による装置３００を示す。装置３００は、コンピュータシステム、たとえば、ホストサーバの一部であってよい。装置３００は、マルチテナント計算サービスシステムの一部であってよく、計算サービスに計算リソースおよびメモリリソースを提供するために、（図３Ａには示されていない）ホストデバイスと通信することができる。たとえば、図１を再び参照すると、装置３００は、予測モデル１０３を用いた計算に計算リソースおよびメモリリソースを提供することができる。ホストデバイスは、ソフトウェアアプリケーション１０２を動作させ、装置３００と通信して、予測モデル１０３を用いた計算に基づいて１つまたは複数の画像認識タスクを実行することができる。ホストデバイスは、複数のコンテキストに関連付けられた複数の画像データセットを送信し、複数の画像データセットを装置３００に提供することができ、装置３００は複数の出力を生成して、たとえば、複数の画像データセットの各々が所定のオブジェクトを含むかどうかを予測することができる。
【００３８】
[0045]図３Ａの例では、装置３００は、相互接続３１８を介して、メモリ３１２に結合されたニューラルネットワークプロセッサ３０２、ダイレクトメモリアクセス（ＤＭＡ）コントローラ３１６、およびホストインターフェース３１４を含んでよい。より詳細に説明されるように、ニューラルネットワークプロセッサ３０２は、予測モデル１０３を用いた計算をサポートするために計算リソースを提供することができる。メモリ３１２は、ホストデバイスから受信された命令、入力データ（たとえば、図２Ｄのピクセルグループ２８２、２８６、および２９０）、ならびに重み（たとえば、フィルタ配列２８４ａ、２８４ｂ、２８４ｃ、２８８ａ、２８８ｂ、および２８８ｃ）を格納するように構成されてよい。メモリ３１２はまた、ニューラルネットワークプロセッサ３０２の出力（たとえば、図２Ｄの畳み込み出力配列２９４および２９６）を格納するように構成されてよい。メモリ３１２は、任意の適切なメモリ、たとえば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期型ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲ  ＤＲＡＭ）、ストレージクラスメモリ（ＳＣＭ）、フラスメモリデバイスなどを含んでよい。
【００３９】
[0046]ＤＭＡコントローラ３１６は、ニューラルネットワークプロセッサ３０２とホストデバイスとの間でデータを転送するためにＤＭＡ動作を実行するように構成されてよい。たとえば、上述されたように、ホストデバイスは、命令、入力データ、および重みをメモリ３１２に格納することができる。ホストデバイスは、格納された命令、データ、および重みのメモリアドレスを（たとえば、メモリ記述子の形態で）ニューラルネットワークプロセッサ３０２に提供することができる。次いで、ニューラルネットワークプロセッサ３０２は、ホストデバイスによって提供されたメモリアドレスに基づいて、格納された命令、データ、および重みを取得することができる。ニューラルネットワークプロセッサ３０２はまた、メモリ３１２に計算結果（たとえば、１つまたは複数の画像認識判断）を格納し、格納された結果のメモリアドレスをホストデバイスに提供することができる。
【００４０】
[0047]ホストインターフェース３１４は、ホストデバイスとニューラルネットワークプロセッサ３０２との間の通信を可能にするように構成されてよい。たとえば、ホストインターフェース３１４は、ホストデバイスとニューラルネットワークプロセッサ３０２との間で、格納されたデータ（たとえば、入力データ、重み、計算結果など）のメモリアドレスを含むメモリ記述子を送信するように構成されてよい。ホストインターフェース３１４は、たとえば、周辺装置相互接続エクスプレス（ＰＣＩｅ）インターフェース、またはホストデバイスと通信するための任意の適切なインターフェースを含んでよい。
【００４１】
[0048]ニューラルネットワークプロセッサ３０２は、予測モデル１０３の１つまたは複数のインスタンスを用いた計算をサポートするために計算リソースを提供することができる。図３Ａの例では、ニューラルネットワークプロセッサ３０２は、状態バッファ３２２、計算エンジン３２４、出力バッファ３２８、ポストプロセッサ３２９、および計算コントローラ３３０を含んでよい。
【００４２】
[0049]状態バッファ３２２は、計算エンジン３２４における計算に使用されるデータのキャッシングを提供するように構成されてよい。状態バッファ３２２にキャッシュされたデータは、たとえば、メモリ３１２から取得された入力データおよび重み、ならびに計算エンジン３２４における計算の中間出力を含んでよい。キャッシングは、計算エンジン３２４のパフォーマンスに対する（たとえば、メモリ３１２、ＤＭＡコントローラ３１６、相互接続３１８などにおける待ち時間によって引き起こされる）メモリアクセスのボトルネックの影響を低減することができる。状態バッファ３２２は、重みのセットを計算エンジン３２４に事前フェッチし、次いで、入力データを順次ストリームとして計算エンジン３２４にフェッチするように計算コントローラ３３０によって制御することができ、計算エンジン３２４は、計算を実行し、中間出力データの順次ストリームを生成する。中間出力データのストリームは、出力バッファ３２８において収集され、ポストプロセッサ３２９によって後処理することができる。中間出力データの後処理されたストリームは、状態バッファ３２２に格納することができる。中間出力データは、たとえば、計算エンジン３２４にまだフェッチされていない入力データの上書きを回避するために、入力データおよび重みが格納された場所とは別の状態バッファ３２２の場所に格納することができる。状態バッファ３２２は、オンチップメモリデバイスであり得、たとえば、スタティックランダムアクセスメモリ（ＳＲＡＭ）を含んでよい。
【００４３】
[0050]計算エンジン３２４は、ニューラルネットワーク計算に含まれる１つまたは複数の算術演算を実行するように構成された一組の回路を含んでよい。たとえば、計算エンジン３２４は、上述されたように、関連する重みを用いて入力データのスケーリングを実行する一組の乗算器と、ドット積および畳み込み結果を表す乗算結果の合計を生成する一組の加算器とを含んでよい。計算エンジン３２４は、状態バッファ３２２からスケーリングに使用される重みを取得することができる。以下でより詳細に説明されるように、計算エンジン３２４は、状態バッファ３２２から、または出力バッファ３２８から、スケーリングされるべき入力を取得することができる。
【００４４】
[0051]いくつかの例では、計算エンジン３２４は、状態バッファ３２２に格納された重みのサイズを削減するために、様々なニューラルネットワーク層のための計算を順次実行するように（たとえば、計算コントローラ３３０によって）制御されてよい。たとえば、計算エンジン３２４は、１つの時間期間内に１つのニューラルネットワーク層（たとえば、層２０７）のための算術演算を実行し、次いで、次の時間期間内に次のニューラルネットワーク層（たとえば、層２０９）のための算術演算を実行するように制御されてよい。そのような構成では、状態バッファ３２２は、計算エンジン３２４における算術演算をサポートするために、複数のニューラルネットワーク層のための重みの複数のセットをキャッシュする代わりに、１つのニューラルネットワーク層のための重みのセットを事前フェッチしキャッシュすることができる。結果として、状態バッファ３２２に必要なサイズを削減することができ、ニューラルネットワークプロセッサ３０２のチップサイズならびに電力消費も削減することができる。一方、上述されたように、状態バッファ３２２は、計算のために入力データを出力データで上書きすることを回避するために、１つのコンテキスト（たとえば、画像、画像のセット、オーディオデータ、またはコンテキストに関連付けられた他のデータ）についての少なくとも１つのニューラルネットワーク層計算の計算用の入力データ（および重み）と出力データの両方に格納スペースを提供する必要がある。
【００４５】
[0052]図３Ｂは、計算エンジン３２４の内部構造の一例を示す。計算エンジン３２４は、複数の行および列に配置された処理要素（ＰＥ）の配列を含んでよい。１つの行内のＰＥは、内部行バスＸＢＵＳＩＮＴＥＲＮＡＬを介して互いに接続されるが、ＰＥ１１、２１、３１、…ｘ１の各々は、外部行バスＸＢＵＳＥＸＴＥＲＮＡＬを介して外部回路に接続される。その上、１つの列内のＰＥは、内部列バスＹＢＵＳＩＮＴＥＲＮＡＬを介して互いに接続され、ＰＥ１１、１２、１３、…１ｙの各々は、外部列バスＹＢＵＳＥＸＴＥＲＮＡＬを介して外部回路に接続される。以下でより詳細に説明されるように、外部行バスＸＢＵＳＥＸＴＥＲＮＡＬおよび外部列バスＹＢＵＳＥＸＴＥＲＮＡＬは、特定のニューラルネットワーク層のための計算演算をスケーリングするために、たとえば、状態バッファ３２２および出力バッファ３２８からＰＥ配列にデータを提供するように構成可能である。
【００４６】
[0053]いくつかの構成では、ＰＥの各列は、予測モデル１０３の１つの処理ノード（たとえば、処理ノード２０８ａ、２１０ａ、２１２ａなどのうちの１つ）に対してスケーリングおよび合計計算を実行することができるが、ＰＥの各行は、１つの入力データセットについてのスケーリングおよび合計計算を実行することができる。説明のための例として、層２０９のための計算を実行するために、第１の行のＰＥ１１、１２、１３、…１ｙの各々は、ＸＢＵＳＥＸＴＥＲＮＡＬから図２Ｄのピクセルグループ２８２のピクセル値を受け取ることができる。また、第１の列のＰＥ１１、２１、３１、…ｘ１の各々は、フィルタセット２８４ａ、２８４ｂ、および２８４ｃの要素を受け取り、図２Ｄの畳み込み出力配列２９４の出力を生成することができる。その上、第２の行のＰＥ２１、２２、２３、…２ｙの各々は、ＸＢＵＳＥＸＴＥＲＮＡＬから図２Ｄのピクセルグループ２８６のピクセル値を受け取ることができるが、第２の列のＰＥ１２、２２、３２、…ｘ２の各々は、図２Ｄの畳み込み出力配列２９６の出力を生成するために、フィルタセット２８８ａ、２８８ｂ、および２８８ｃの要素を受け取ることができる。ＰＥの各々は、受け取ったピクセル値と受け取った重みとの間の乗算関数を実行して、乗算結果を生成する乗算器を含む。その上、ＰＥの各々は、ＰＥの１つの列内に乗算結果を累積する加算器も含む。たとえば、ＰＥ１１は、第１のピクセル値および第１の重みに基づいて第１の乗算結果を生成し、ＹＢＵＳを介してＰＥ２１に第１の乗算結果を渡す。ＰＥ２１は、第２のピクセル値および第２の重みに基づいて第２の乗算結果を生成し、第２の乗算結果を加算して部分合計を生成し、別のＹＢＵＳを介してＰＥ３１に部分合計を渡す。ＰＥ１１、２１、および３１と同じ列内の他のＰＥも乗算および累算を実行する。次いで、ＰＥｘ１は、畳み込み出力２４２を生成し、ＹＢＵＳＥＸＴＥＲＮＡＬを介して畳み込み出力を送信することができる。
【００４７】
[0054]いくつかの構成では、計算エンジン３２４のＰＥは、予測モデル１０３の複数のインスタンスを実装するために使用することができる。たとえば、少数の処理ノードおよび少数の入力データを用いて上位レベルの層を処理するとき、同じ行のＰＥは、（様々な位置、時間に、様々な人々によってキャプチャされた様々な画像もしくは画像の様々なセットに対応する、またはその他の方法で様々な情報を搬送する）様々なコンテキストの入力データセットを処理するために使用することができる。たとえば、ＰＥ１１は、第１のコンテキストの１つの入力データセットを処理するように構成されてよいが、ＰＥ１２は、第２のコンテキストの別の入力データセットを処理するように構成されてよい。ＰＥ１１とＰＥ１２の両方は、重みの同じセットを格納し、重みの同じセットを入力データに適用することができる。（ＰＥ１１、２１、…ｘ１を含む）第１の列は、第１のコンテキストの複数の入力データセットを処理するように構成されてよいが、（ＰＥ１２、２２、…ｘ２を含む）第２の列は、第２のコンテキストの複数の入力データセットを処理するように構成されてよい。
【００４８】
[0055]図３Ｃは、ＰＥ３４０の内部構造の一例を示し、ＰＥ３４０は図３Ｂに記載されたＰＥのうちのいずれか１つであり得る。ＰＥ３４０は、スプリッタ３５０、乗算器３５３、および加算器３５６を含んでよい。スプリッタ３５０は、入力ＸＢＵＳ（たとえば、ＸＢＵＳＩＮＰＵＴ）からデータのセットを受け取り、入力値および重みを抽出することができる。たとえば、ＰＥ１１は、ＸＢＵＳＩＮから、ＰＥ１１だけでなく同じ行の他のＰＥ向けの入力値および重みのセットを受け取ることができる。ＰＥ１１のスプリッタ３５０は、ＸＢＵＳＩＮ上のデータからＰＥ１１向けの入力値（たとえば、ＩＮ３５１）および重み値（たとえば、Ｗ３５２）を抽出し、抽出された値を乗算器３５３に提供して、乗算結果（たとえば、Ｍ３５４）を生成することができる。加算器３５６は、入力ＹＢＵＳ（たとえば、ＹＢＵＳＩＮＰＵＴ）を介して同じ列内の前のＰＥから受け取った部分合計を乗算結果（たとえば、Ｍ３５４）に加算して部分合計を生成し、出力ＹＢＵＳ（たとえば、ＹＢＵＳＯＵＴＰＵＴ）を介して同じ列内の次のＰＥに部分合計を送信することができる。ＰＥは、出力ＸＢＵＳ（ＸＢＵＳＯＵＴＰＵＴ）を介して、同じ行内の次のＰＥにＸＢＵＳＩＮのデータを転送することもできる。
【００４９】
[0056]図３Ａを再び参照すると、ニューラルネットワークプロセッサ３０２は、出力バッファ３２８およびポストプロセッサ３２９をさらに含む。出力バッファ３２８は、計算エンジン３２４の出力を格納する一組のレジスタを含む。ポストプロセッサ３２９は、計算エンジン３２４の出力に対して１つまたは複数の活性化関数（たとえば、ＲｅＬｕ関数）を適用する回路（たとえば、マッピングテーブルとして構成されたマルチプレクサ回路）を含んでよい。ポストプロセッサ３２９はまた、プーリング動作を実行して出力のサイズを削減する回路を含んでよい。ポストプロセッサ３２９は、後処理された出力を状態バッファ３２２に格納することができる。
【００５０】
[0057]計算コントローラ３３０は、ＸＢＵＳＥＸＴＥＲＮＡＬおよびＹＢＵＳＥＸＴＥＲＮＡＬを介して計算エンジン３２４に提供される入力データおよび重みを決定して、計算エンジン３２４における計算を制御することができる。たとえば、計算コントローラ３３０は、様々な時間に、各ニューラルネットワーク層に関連付けられた入力データおよび重みを提供することにより、各ニューラルネットワーク層のための計算を順次実行するように、計算エンジン３２４を制御することができる。説明のための例として、第１のステップとして、計算コントローラ３３０は、層２０９におけるスケーリング演算に関連付けられた入力ピクセルデータおよび重みを取得し、ＸＢＵＳＥＸＴＥＲＮＡＬを介して計算エンジン３２４に入力ピクセルデータおよび重みを供給することができる。次いで、計算エンジン３２４は出力を生成し、ＹＢＵＳＥＸＴＥＲＮＡＬを介して活性化エンジン３２６に出力を供給して、層２０９の各処理ノードに対応する中間出力のセット（たとえば、ｆｉｒｓｔ＿ｉｎｔｅｒｍｅｄｉａｔｅ＿ｏｕｔｐｕｔ２１０ａ）を生成することができる。中間出力は出力バッファ３２８に格納することができる。
後続の計算が次の層（たとえば、層２１１）にある同じ入力データセットについてである場合、計算コントローラ３３０は、出力バッファ３２８に格納された中間出力を取得し、層２１１における計算を開始するために、状態バッファ３２２からＸＢＵＳＥＸＴＥＲＮＡＬを介して計算エンジン３２４に、中間出力ならびに重みの新しいセットを供給することができる。一方、中間出力が後続の計算に使用されない場合、計算コントローラ３３０は、中間出力を状態バッファ３２２に格納することができる。プロセスは、出力層における計算が完了するまで層ごとに繰り返すことができる。計算の順序は、以下に記載される予定のスケジューリング方式を動作させるスケジューラモジュール３３２によって決定することができる。
【００５１】
[0058]上述されたように、ＤＮＮおよびＣＮＮでは、より高いレベルの中間層のサイズは、通常、より低いレベルの中間層のサイズよりも小さい。したがって、ニューラルネットワーク計算がニューラルネットワーク層を通って出力層に向かって進むにつれて、層のための計算に使用される計算リソースは時間とともに減少する可能性がある。図３Ｂの例を参照すると、層２０９は、計算エンジン３２４内のＰＥ列の数と同じ数の処理ノードを含んでよい。したがって、層２０９のための計算を実行するとき、計算エンジン３２４内のあらゆる列が計算に関与し、ＰＥの各列が層２０９の１つの処理ノードに対応する出力を生成する。しかしながら、層２１１が層２０９の処理ノードの半分のみを有する場合、ＰＥの列の半分は計算に必要ではなく、アイドルであってよく、計算エンジン３２４の不十分な利用率につながる。計算エンジン３２４の利用率を向上させるために、計算コントローラ３３０は、上述されたように、複数の入力データセット（たとえば、複数の画像または他のコンテキスト）を処理し、複数の入力データセットに対して複数の出力を生成するように計算エンジン３２４を制御することができる。
【００５２】
[0059]次に図４を参照すると、図４は、複数の入力データセットを処理するために計算エンジン３２４を動作させるシーケンス４００の一例を示す。左側のブロックは計算エンジン３２４における計算のシーケンスを示すが、右側のブロックは、状態バッファ３２２に格納された中間出力の対応するシーケンスを示す。状態バッファ３２２における重みの格納は図４に示されていない。
【００５３】
[0060]いくつかの例では、シーケンス４００は、ロックステップ方式で計算エンジン３２４を動作させるように実行することができる。たとえば、より低いレベルのニューラルネットワーク層のための計算は、入力データセットごとに（計算リソース要件が実質的であり、計算エンジン３２４が完全に利用されているとき）順次実行することができる。（様々なコンテキストの）すべての入力データセットについての１つのニューラルネットワーク層のための計算が完了した後、計算エンジン３２４は、次いで、次のニューラルネットワーク層のための計算を実行する。計算リソース要件が低減されたより高いレベルのニューラルネットワーク層に計算が到達すると、計算コントローラ３３０は、入力データセットについて並列計算を実行して、計算エンジン３２４の利用率を維持することができる。本明細書に記載され、図に描写されたように、「Ｃ−１」は第１のコンテキストを指してよく、「Ｃ−２」は第２のコンテキストを指してよく、「Ｃ−３」は第３のコンテキストを指してよく、「Ｃ−４」は第４のコンテキストを指してよい。
【００５４】
[0061]Ｔ０において、計算コントローラ３３０は、Ｃ−１についてのＬ０ニューラルネットワーク層（たとえば、層２０９）計算を実行するように計算エンジン３２４を制御することができ、それにより、計算エンジン３２４が完全に利用されるようになる。Ｔ０において、状態バッファ３２２は、Ｃ−１  Ｌ０計算のための入力データ（および重み）ならびにＣ−１  Ｌ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００５５】
[0062]Ｔ１において、Ｃ−１についてのＬ０ニューラルネットワーク層計算が完了した後、計算コントローラ３３０は、Ｃ−１についてのＬ０計算の出力データを状態バッファ３２２に格納し、次いで、Ｃ−２についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４を制御することができる。Ｔ１において、状態バッファ３２２は、Ｃ−２についての進行中のＬ０計算の入力データおよび出力データ、ならびにＣ−１についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００５６】
[0063]Ｔ２において、計算コントローラ３３０は、Ｃ−３についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４を制御することができる。Ｔ２において、状態バッファ３２２は、Ｃ−３についての進行中のＬ０計算の入力データおよび出力データ、ならびにＣ−１およびＣ−２についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００５７】
[0064]Ｔ３において、計算コントローラ３３０は、Ｃ−４についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４を制御することができる。Ｔ３において、状態バッファ３２２は、Ｃ−４についての進行中のＬ０計算の入力データおよび出力データ、ならびにＣ−１、Ｃ−２、およびＣ−３についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００５８】
[0065]Ｔ４において、計算コントローラ３３０は、Ｌ１ニューラルネットワーク層計算（たとえば、層２１１）を実行するように計算エンジン３２４を切り替えることができる。計算コントローラ３３０は、Ｃ−１およびＣ−２についてのＬ１計算を並行して実行するように計算エンジン３２４を制御することができる。Ｔ４において、状態バッファ３２２は、Ｃ−１およびＣ−２についての進行中のＬ１計算の出力データ、ならびにＣ−１、Ｃ−２、Ｃ−３、およびＣ−４についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。Ｔ４において格納されるデータの合計サイズは、シーケンス４００の他の段階と比較して最大であり得る。
【００５９】
[0066]Ｔ５において、計算コントローラ３３０は、Ｃ−３およびＣ−４についてのＬ１計算を実行するように計算エンジン３２４を制御することができる。Ｔ５において、状態バッファ３２２は、Ｃ−３およびＣ−４についての進行中のＬ１計算の出力データ、ならびにＣ−３およびＣ−４についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。Ｃ−１およびＣ−２についてのＬ１計算がＴ５において完了し、それらの出力データは必要とされないので、Ｃ−１およびＣ−２についての完了したＬ０計算の出力データは、削除（またはＣ−３およびＣ−４についてのＬ１計算の出力データによって上書き）することができる。
【００６０】
[0067]Ｔ６において、計算コントローラ３３０は、Ｌ２ニューラルネットワーク層計算（たとえば、出力層）を実行するように計算エンジン３２４を切り替えることができる。計算コントローラ３３０は、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのＬ２計算を並行して実行するように計算エンジン３２４を制御することができる。Ｔ６において、状態バッファ３２２は、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についての進行中のＬ２計算の出力データ、ならびにそれらの計算用の入力データ（たとえば、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのＬ１計算の出力データ）を格納するために格納スペースを提供する必要がある。
【００６１】
[0068]図４の動作のシーケンスにより、計算エンジン３２４がフル稼働で維持されることが可能になるが、時間Ｔ４などの複数のコンテキストについての低レベルのニューラルネットワーク（たとえば、Ｌ０）計算の出力を格納するために、大きい状態バッファ３２２が必要である。それらの中間出力は、通常、サイズが大きく、格納用にかなりの量のオンチップメモリスペースを必要とする。
【００６２】
[0069]次に図５を参照すると、図５は、複数の入力データセットを処理するために計算エンジン３２４を動作させるシーケンス５００の一例を示す。シーケンス５００は、非ロックステップ方式で計算エンジン３２４を動作させるように実行することができる。左側のブロックは計算エンジン３２４における計算のシーケンスを示すが、右側のブロックは、状態バッファ３２２に格納された中間出力の対応するシーケンスを示す。状態バッファ３２２における重みの格納は図５に示されていない。
【００６３】
[0070]Ｔ０において、計算コントローラ３３０は、Ｃ−１についてのＬ０ニューラルネットワーク層（たとえば、層２０９）計算を実行するように計算エンジン３２４を制御することができ、それにより、計算エンジン３２４が完全に利用されるようになる。Ｔ０において、状態バッファ３２２は、Ｃ−１  Ｌ０計算のための入力データ（および重み）ならびにＣ−１  Ｌ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００６４】
[0071]Ｔ１において、Ｃ−１についてのＬ０ニューラルネットワーク層計算が完了した後、計算コントローラ３３０は、Ｃ−１についてのＬ０計算の出力データを状態バッファ３２２に格納し、次いで、Ｃ−２についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４を制御することができる。Ｔ１において、状態バッファ３２２は、Ｃ−２についての進行中のＬ０計算の入力データおよび出力データ、ならびにＣ−１についての完了したＬ０計算の出力データを格納するために格納スペースを提供する必要がある。
【００６５】
[0072]Ｔ２において、計算コントローラ３３０は、Ｃ−１およびＣ−２についてのＬ１ニューラルネットワーク層計算（たとえば、層２１１）を実行するように計算エンジン３２４を切り替えることができる。Ｔ２において、状態バッファ３２２は、進行中のＬ１計算用の入力データ（たとえば、Ｃ−１およびＣ−２についてのＬ０計算の出力データ）、ならびにＬ１計算によって生成された出力データを格納するために格納スペースを提供する必要がある。
【００６６】
[0073]Ｔ３において、計算コントローラ３３０は、Ｃ−３についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４をもう一度切り替えることができる。Ｔ３において、状態バッファ３２２は、Ｃ−１およびＣ−２についての完了したＬ１計算の出力データ、ならびにＣ−３についての進行中のＬ０計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。
【００６７】
[0074]Ｔ４において、計算コントローラ３３０は、Ｃ−４についてのＬ０ニューラルネットワーク層計算を実行するように計算エンジン３２４を制御することができる。Ｔ４において、状態バッファ３２２は、Ｃ−１およびＣ−２についての完了したＬ１計算の出力データ、Ｃ−３についての完了したＬ０計算の出力データ、ならびにＣ−４についての進行中のＬ０計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。シーケンス４００のＴ４と比較して、より少ないコンテキストについての（通常、上位のニューラルネットワーク層よりも大きい）Ｌ０出力データを格納することにより、状態バッファ３２２の必要なサイズを削減することができる。
【００６８】
[0075]Ｔ５において、計算コントローラ３３０は、Ｃ−３およびＣ−４についてのＬ１ニューラルネットワーク計算を並行して実行するように計算エンジン３２４を制御することができる。Ｔ５において、状態バッファ３２２は、Ｃ−１およびＣ−２についての完了したＬ１計算の出力データ、ならびにＣ−３およびＣ−４についての進行中のＬ１計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。Ｃ−３およびＣ−４についての進行中のＬ１計算用の入力データは、Ｃ−３およびＣ−４についての完了したＬ０計算の出力データを含む。
【００６９】
[0076]Ｔ６において、計算コントローラ３３０は、Ｌ２ニューラルネットワーク層計算（たとえば、出力層）を実行するように計算エンジン３２４を切り替えることができる。計算コントローラ３３０は、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのＬ２計算を並行して実行するように計算エンジン３２４を制御することができる。Ｔ６において、状態バッファ３２２は、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についての進行中のＬ２計算の出力データ、ならびにそれらの計算用の入力データ（たとえば、Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのＬ１計算の出力データ）を格納するために格納スペースを提供する必要がある。
【００７０】
[0077]図６は、本開示のいくつかの態様による、多層ニューラルネットワーク内の様々なコンテキストに関連付けられた複数のデータセットを処理するためのプロセス６００の例示的なフロー図を示す。多層ニューラルネットワークは、第１のニューラルネットワーク層（たとえば、層２０９）、第１のニューラルネットワーク層に依存する第２のニューラルネットワーク層（たとえば、層２１１）、および第２のニューラルネットワーク層に依存する第３のニューラルネットワーク層（たとえば、出力層）を含んでよい。プロセスは、たとえば、計算コントローラ３３０および計算エンジン３２４などの、上述された様々なシステムによって実装されてよい。
【００７１】
[0078]動作６０２において、計算エンジン（たとえば、計算エンジン３２４）は、第１のニューラルネットワーク層として構成され、（たとえば、第１のコンテキストの）第１のデータセットを処理して、第１のデータセットの第１の層出力を生成することができる。
【００７２】
[0079]動作６０４において、計算エンジンは、第１のニューラルネットワーク層として構成されている間、（たとえば、第２のコンテキストの）第２のデータセットを処理して、第２のデータセットの第１の層出力を生成することができる。
【００７３】
[0080]動作６０６において、計算エンジンは、第２のニューラルネットワーク層として構成され、第１のデータセットの第１の層出力および第２のデータセットの第１の層出力を処理して、それぞれ、（第１のコンテキストの）第１のデータセットの第２の層出力および（第２のコンテキストの）第２のデータセットの第２の層出力を生成することができる。
【００７４】
[0081]動作６０８において、計算エンジンは、動作６０６において第１のデータセットの第２の層出力および第２のデータセットの第２の層出力の生成後、第１のニューラルネットワーク層に戻るように構成され、計算エンジンは、（たとえば、第３のコンテキストの）第３のデータセットを処理して、第３のデータセットの第１の層出力を生成することができる。
【００７５】
[0082]動作６１０において、計算エンジンは、第１のニューラルネットワーク層として構成されている間、（たとえば、第４のコンテキストの）第４のデータセットを処理して、第４のデータセットの第１の層出力を生成することができる。
【００７６】
[0083]動作６１２において、計算エンジンは、第２のニューラルネットワークとして構成することができ、（第３のコンテキストの）第３のデータセットの第１の層出力および（第４のコンテキストの）第４のデータセットの第１の層出力を処理して、それぞれ、第３のデータセットの第２の層出力および第４のデータセットの第２の層出力を生成することができる。
【００７７】
[0084]動作６１４において、計算エンジンは、第３のニューラルネットワークとして構成することができ、（第１のコンテキストの）第１のデータセットの第２の層出力、（第２のコンテキストの）第２のデータセットの第２の層出力、（第３のコンテキストの）第３のデータセットの第２の層出力、および（第４のコンテキストの）第４のデータセットの第２の層出力を処理して、それぞれ、第１のデータセットの第３の層出力、第２のデータセットの第３の層出力、第３のデータセットの第３の層出力、および第４のデータセットの第３の層出力を生成することができる。
【００７８】
[0085]いくつかの例では、（たとえば、図４の）ロックステップシーケンスから（たとえば、図５の）非ロックステップシーケンスへの計算の順序の再配置は、スケジューリング方式に基づいてよい。スケジューリング方式は、実行バッチのシーケンスを決定するために使用することができ、各実行バッチは、ニューラルネットワーク層が計算エンジン３２４において並列に実行するための１つまたは複数の計算タスクを含む。各計算タスクはコンテキストについて実行することができ、実行バッチの各々は様々な時間に実行される。スケジューリング方式の目的は、状態バッファ３２２において利用可能なスペースの制約ならびに層間データ依存性の下で、各実行バッチサイズ（たとえば、実行される並列計算タスクの数）を最大化することであり得る。
【００７９】
[0086]いくつかの例では、計算コントローラ３３０のスケジューラモジュール３３２は、グラフ削減方式を適用して、様々なコンテキストについての様々なニューラルネットワーク層の計算間の依存性のグラフを決定することができる。次いで、スケジューラモジュール３３２は、より高いニューラルネットワーク層の計算から始めてグラフをトラバースし、計算タスクのシーケンスを決定することができる。決定は、状態バッファがサポートすることができる並列計算タスクの数、および層間データ依存性に基づくことができる。上述されたように、ニューラルネットワーク層のいくつかの計算タスクの並列実行をサポートするために、状態バッファは、いくつかの計算タスクの入力データと出力データの両方を格納するのに十分な容量を有する必要である。第１のニューラルネットワーク層（たとえば、図２Ａの層２１１）用の第１の実行バッチサイズを決定した後、スケジューラモジュール３３２は、依存性グラフをトラバースし、状態バッファが、第１のニューラルネットワーク層に入力データを提供する第２のニューラルネットワーク層（たとえば、図２Ａの層２０９）のためのいくつかの計算タスクをサポートすることができるかどうかを判定することができる。状態バッファが第２のニューラルネットワーク層のためのいくつかの計算タスクをサポートすることができない場合、スケジューラは、第２のニューラルネットワーク層用のいくつかの計算タスクを複数の実行バッチに分割することができる。複数の実行バッチの決定は、状態バッファが以前の実行バッチの出力データならびに進行中の実行バッチの入出力データを格納するのに十分な容量を有するという制約下で、各実行バッチ内の第２のニューラルネットワーク層用の並列計算タスクの数を最大化することであり得る。第２のニューラルネットワーク層用の実行バッチを決定した後、スケジューラは、依存性グラフをトラバースして、第２のニューラルネットワーク層用の入力データを提供する第３のニューラルネットワーク（たとえば、図２Ａの層２０７）用の計算タスクを決定することができ、上述された状態バッファ容量の制約下で、実行バッチを決定動作まで繰り返す。
【００８０】
[0087]次に、図７Ａ〜図７Ｇを参照すると、図７Ａ〜図７Ｇはスケジューリング方式の一例を示す。図７Ａは、図４および図５のコンテキストＣ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのニューラルネットワーク層計算の依存性グラフの例を示す。この例では、計算エンジン３２４が同時に実行することができる計算タスクの数に対する制約を課さず、唯一の制約は層間依存性および状態バッファの容量から生じると想定することができる。この説明のための例では、状態バッファのサイズは２単位であり得る。
【００８１】
[0088]図７Ａの例では、各バブル（すなわち、円）は、ニューラルネットワーク層の計算タスクまたはコンテキスト用の外部入力に対応することができ、バブル内の数字は、計算タスクによって生成されるべき出力データのサイズ、または外部入力データのサイズを示す。出力データ（または外部入力データ）のサイズは、状態バッファのサイズに関連し、両方とも同じ単位である。各実行バッチは、同じニューラルネットワーク層の１つまたは複数のバブルを含むことができる。ペアのバブルは、方向がデータの依存性を示すそれぞれの矢印によってリンクされる。矢印に隣接する数字は、ニューラルネットワーク層の計算タスクに使用される重み値のサイズを示すことができる。重み値は、１つの実行バッチ内のバブル間で共有することができる。コンテキストＣ−１の依存性グラフを参照すると、Ｌ０（ニューラルネットワーク層０）計算タスクは、外部入力として０．５単位のサイズの画像データ、および０．３単位のサイズの重みを入力データとして受け取ることができる。Ｌ０計算タスクは、０．３単位のサイズの出力データを生成することができる。Ｌ１（ニューラルネットワーク層１）計算タスクは、（０．３単位のサイズの）Ｌ０計算タスクの出力データおよび０．２５単位のサイズの重みを入力データとして受け取ることができる。さらに、Ｌ２（ニューラルネットワーク層２）計算タスクは、（０．２単位のサイズの）Ｌ１計算タスクの出力データおよび０．１単位のサイズの重みを入力データとして受け取ることができる。その上、Ｌ２計算タスクは０．１単位のサイズの出力データを生成することができる。
【００８２】
[0089]図７Ｂは、スケジューリング動作７０２を示す。動作７０２において、スケジューラは、Ｌ２計算のための第１のバッチサイズを決定する。Ｃ−１、Ｃ−２、Ｃ−３、およびＣ−４についての同時Ｌ２計算をサポートするために、状態バッファは、同時Ｌ２計算の入力データおよび出力データを格納する容量を有する必要がある。入力データは、０．８単位（０．２×４）の合計サイズおよび０．１単位の共有重みを有する４つのコンテキスト用のＬ１出力データを含むが、出力データサイズは０．４単位（０．１×４）である。必要な容量は１．３単位（０．８＋０．４＋０．１）であり、それは状態バッファの容量（２単位）を下回る。これに基づいて、スケジューラは、時刻Ｔ１において実行されるべき第１の実行バッチに、４つのコンテキストすべてについてのＬ２計算タスクを含めることができる。
【００８３】
[0090]図７Ｃおよび図７Ｄは、スケジューリング動作７０４を示す。動作７０４において、スケジューラは、４つのコンテキストのＬ１計算が第２の実行バッチ内で実行できるかどうかを判定する。スケジューラは、状態バッファが４つのコンテキストすべてについての同時Ｌ１計算の入力データおよび出力データを格納する容量を有するかどうかを判定することができる。図７Ｃを参照すると、入力データは、１．２単位（０．３×４）の合計サイズおよび０．２５単位のサイズの共有重みを有する４つのコンテキスト用のＬ０出力データを含むが、出力データサイズは０．８単位（０．２×４）である。必要な容量は２．２５単位（１．２＋０．８＋０．２５）であり、それは状態バッファの容量を超える。この判定に基づいて、スケジューラはＬ１計算を２つ以上の実行バッチに分割することができる。たとえば、スケジューラは、状態バッファがその実行バッチ内のいくつかのＬ１計算タスクの入力データおよび出力データ、ならびに以前の実行バッチのＬ１計算タスクの出力データを格納するのに十分な容量を有することに基づいて、実行バッチに含めることができるＬ１計算タスクの数を決定することができる。
【００８４】
[0091]説明のための例として、図７Ｄを参照すると、スケジューラは、Ｃ−２およびＣ−３についてのＬ１計算タスクを含む第２の実行バッチ、およびＣ−１およびＣ−２についてのＬ１計算タスクを含む第３の実行バッチを決定することができる。第３の実行バッチは、第２の実行バッチの前に実行されるべきである。第２の実行バッチの合計入出力データサイズは１．２５単位（０．２×２＋０．３×２＋０．２５）であり得るが、第３の実行バッチの出力データサイズは０．４単位（０．２×２）である。合計データサイズ（１．６５単位）が状態バッファの容量よりも小さいことに基づいて、スケジューラは、時間Ｔ２に第２の実行バッチをスケジュールし、時間Ｔ３に第３の実行バッチをスケジュールする。
【００８５】
[0092]図７Ｅおよび図７Ｆは、スケジューリング動作７０６を示す。動作７０６において、スケジューラは、（第２の実行バッチに入力データを提供するために）Ｃ−２およびＣ−３についてのＬ０計算が単一のバッチとして並列に実行できるかどうかを判定する。図７Ｅを参照すると、（状態バッファがＣ−１、Ｃ−２、Ｃ−３、およびＣ−４についてのＬ０計算の出力を格納する必要があることを回避するために）時間Ｔ１とＴ２との間に実行されるべき、Ｃ−２およびＣ−３についての並列Ｌ０計算をサポートするために、状態バッファは、Ｃ−２およびＣ−３についての並列Ｌ０計算の入力出力データ、ならびに第３の実行バッチの出力データを格納する必要がある。Ｃ−２およびＣ−３についてのＬ０計算の合計入出力データサイズは１．９単位（０．５×２＋０．３×２＋０．３）であるが、第３の実行バッチの出力データサイズは０．４単位である。合計データサイズ（２．３単位）が状態バッファの容量を超えることに基づいて、スケジューラは、Ｌ０計算を２つのバッチに分割するように決定する。たとえば、図７Ｆを参照すると、スケジューラは、Ｃ−４についてのＬ０計算を含む第４の実行バッチ、およびＣ−３についてのＬ０計算を含む第５の実行バッチを決定することができる。スケジューラはまた、それらのすべてが２単位の合計データサイズを有する、（１．３単位のデータサイズを有する）第４の実行バッチ用の入力データおよび出力データ、（０．３単位のデータサイズを有する）第５の実行バッチ用の出力データ、ならびに（０．４単位のデータサイズを有する）第３の実行バッチの出力データを格納するのに十分な容量を状態バッファが有すると判断することができる。次いで、スケジューラは、時間Ｔ４に第４の実行バッチをスケジュールし、時間Ｔ５に第５の実行バッチをスケジュールすることができる。
【００８６】
[0093]図７Ｇは、スケジューリング動作７０８を示す。動作７０８において、スケジューラは、（第３の実行バッチに入力データを提供するために）Ｃ−１およびＣ−２についてのＬ０計算が単一のバッチとして並列に実行できるかどうかを判定する。図７Ｇを参照すると、動作７０２〜７０６において決定された実行バッチの前に実行されるべきＣ−１およびＣ−２についての並列Ｌ０計算をサポートするために、状態バッファは、Ｃ−１およびＣ−２についての並列Ｌ０計算用の入出力データを格納する必要がある。Ｃ−１およびＣ−２についてのＬ０計算の合計入出力データサイズは１．９単位（０．５×２＋０．３×２＋０．３）であり、それは状態バッファの容量を下回る。次いで、スケジューラは、Ｃ−１およびＣ−２についてのＬ０計算を第６の実行バッチに含め、Ｔ６に第６の実行バッチをスケジュールすることができる。
【００８７】
[0094]図８は、メモリデバイス（たとえば、状態バッファ３２２）と結合された計算エンジン（たとえば、計算エンジン３２４）における動作をスケジュールするためのプロセス８００の例示的なフロー図を示す。プロセスは、たとえば、ニューラルネットワークプロセッサ３０２のスケジューラモジュール３３２などの上述された様々なシステムによって実装されてよい。
【００８８】
[0095]動作８０２において、スケジューラモジュールは、実行されるべき計算タスクのセットを決定することができ、計算タスクのセットは、第１の計算タスク、第２の計算タスク、第３の計算タスク、および第４の計算タスクを含み、第３の計算タスクおよび第４のタスクは、それぞれ、第１の計算タスクの入力データおよび第２の計算タスクの入力データを生成する。
【００８９】
[0096]動作８０４において、スケジューリングモジュールは、状態バッファが第１の計算タスクと第２の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第１の計算タスクおよび第２の計算タスクを含む第１の実行バッチを決定することができる。
【００９０】
[0097]動作８０６において、スケジューリングモジュールは、メモリデバイスが第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかを判定することができる。メモリデバイスが（動作８０８において）第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有する場合、スケジューリングモジュールは、動作８１０において、第３の計算タスクおよび第４の計算タスクを含む第２の実行バッチを決定し、第１の実行バッチの前に実行されるように第２の実行バッチをスケジュールすることができる。
【００９１】
[0098]一方、メモリデバイスが（動作８０８において）第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、（動作８１２において）第３の計算タスクの出力データならびに第４の計算タスクの入力データおよび出力データを保持するのに十分な容量を有する場合、スケジューリングモジュールは、動作８１４において、第３の計算タスクを含む第３の実行バッチを決定することができる。スケジューリングモジュールはまた、動作８１６において、第４の計算タスクを含む第４の実行バッチを決定することができる。スケジューリングモジュールは、第３の実行バッチが最初に実行され、その後に第４の実行バッチが実行され、その後に第１の実行バッチが実行されるようにスケジュールすることができる。
【００９２】
[0099]例示的なプロセス８００では、第１の計算タスクおよび第２の計算タスクは、それぞれ、第１のコンテキストおよび第２のコンテキストについての第２のニューラルネットワーク層計算タスクであってよい。その上、第３の計算タスクおよび第４の計算タスクは、それぞれ、第１のコンテキストおよび第２のコンテキストについての第１のニューラルネットワーク層計算タスクであってよい。
【００９３】
[0100]図９は、コンピューティングデバイス９００の一例を示す。コンピューティングデバイス９００の機能性および／またはいくつかの構成要素は、制限なしに、本開示の他の場所で開示される他の実施形態とともに制限なしに使用されてよい。コンピューティングデバイス９００は、計算を実行してタスクの処理を容易にすることができる。説明のための例として、コンピューティングデバイス９００は、マルチテナント計算サービスシステムにおけるサーバの一部であり得る。コンピューティングデバイス９００の様々なハードウェアリソースおよびソフトウェアリソース（たとえば、画像認識サービスの提供に関連付けられたハードウェアリソースおよびソフトウェアリソース）は、要求に応じてクライアントに割り当てることができる。
【００９４】
[0101]一例では、コンピューティングデバイス９００は、処理ロジック９０２、バスインターフェースモジュール９０８、メモリ９１０、およびネットワークインターフェースモジュール９１２を含んでよい。これらのモジュールは、ハードウェアモジュール、ソフトウェアモジュール、またはハードウェアとソフトウェアの組合せであってよい。いくつかの例では、モジュールは、本開示の範囲から逸脱することなく、構成要素またはエンジンと交換可能に使用されてよい。コンピューティングデバイス９００は、本明細書には図示されていない追加のモジュールを含んでよい。いくつかの実装形態では、コンピューティングデバイス９００は、より少ないモジュールを含んでよい。いくつかの実装形態では、１つまたは複数のモジュールは、１つのモジュールに組み合わされてよい。１つまたは複数のモジュールは、通信チャネル９１４を介して互いに通信していてよい。通信チャネル９１４は、１つまたは複数のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組合せ、またはいくつかの他の適切な通信チャネルを含んでよい。
【００９５】
[0102]処理ロジック９０２は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、システムオンチップ（ＳｏＣ）、ネットワーク処理ユニット（ＮＰＵ）、命令を実行するように構成されたプロセッサ、または論理演算および浮動小数点演算を実行するように構成された任意の他の回路を含んでよい、１つまたは複数の集積回路を含んでよい。処理ロジック１１０２に含まれてよいプロセッサの例には、ＡＲＭ（登録商標）、ＭＩＰＳ（登録商標）、ＡＭＤ（登録商標）、Ｉｎｔｅｌ（登録商標）、Ｑｕａｌｃｏｍｍ（登録商標）などによって開発されたプロセッサが含まれてよい。いくつかの実装形態では、プロセッサは複数の処理コアを含んでよく、各処理コアは、他の処理コアとは無関係に命令を実行するように構成されてよい。さらに、いくつかの実装形態では、各プロセッサまたは処理コアは、複数の処理スレッド間の論理的な分離を維持しながら、同じプロセッサまたは処理コア上で命令を実行する複数の処理スレッドを実装することができる。プロセッサまたは処理コア上で実行されるそのような処理スレッドは、個別の論理プロセッサまたは処理コアとしてソフトウェアに公開されてよい。いくつかの実装形態では、複数のプロセッサ、処理コア、または同じコア上で実行される処理スレッドは、たとえば、バス、レベル１（Ｌ１）キャッシュ、および／またはレベル２（Ｌ２）キャッシュなどの特定のリソースを共有することができる。処理ロジック９０２によって実行される命令は、たとえば、コンピュータプログラムの形態で、コンピュータ可読記憶媒体に記憶されてよい。コンピュータ可読記憶媒体は非一時的であってよい。場合によっては、コンピュータ可読媒体はメモリ９１０の一部であってよい。処理ロジック９０２はまた、たとえば、ＳｏＣ３０２などを含む人工ニューラルネットワーク計算を実行するためのハードウェア回路を含んでよい。
【００９６】
[0103]処理ロジック９０２へのアクセスは、クライアントによって要求されたパーソナルアシスタントサービスを提供するために、クライアントに許可することができる。たとえば、コンピューティングデバイス９００は、画像認識ソフトウェアアプリケーションを実行することができる仮想マシンをホストすることができる。画像認識ソフトウェアアプリケーションは、実行時に、処理ロジック９０２にアクセスして、たとえば、画像に含まれるオブジェクトを予測することができる。別の例として、処理ロジック９０２へのアクセスはまた、クライアントデバイス（たとえば、リモートコンピュータ、スマートフォンなど）上で実行される画像認識ソフトウェアアプリケーションが、画像の認識を実行するために処理ロジック９０２に直接アクセスすることができる、ベアメタルインスタンスの一部として許可することができる。
【００９７】
[0104]メモリ９１０は、揮発性もしくは不揮発性、または揮発性および不揮発性の両方のタイプのメモリを含んでよい。メモリ９１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、および／またはいくつかの他の適切な記憶媒体を含んでよい。場合によっては、メモリ９１０の一部またはすべてがコンピューティングデバイス９００の内部にあってよく、他の場合には、メモリの一部またはすべてがコンピューティングデバイス９００の外部にあってよい。メモリ９１０は、処理ロジック９０２によって実行されると、コンピューティングデバイス９００にネットワーク機能を提供する命令を実行するための実行環境を提供する、実行可能命令を含むオペレーティングシステムを記憶することができる。メモリ９１０はまた、たとえば、人工ニューラルネットワーク計算を実行するためのソフトウェアアプリケーションを記憶することができる。たとえば、メモリ９１０は、上記の式１〜４の計算に関連するソフトウェアルーチンを記憶することができる。処理ロジック９０２がＦＰＧＡの形態である場合、メモリ９１０は、処理ロジック９０２の様々な論理回路構成要素を表すネットリストデータを記憶することができる。
【００９８】
[0105]バスインターフェースモジュール９０８は、外部通信媒体を介して、ホストデバイスおよび／またはコンピューティングシステム内の他の構成要素などの外部エンティティとの通信を可能にすることができる。バスインターフェースモジュール９０８は、ケーブル、ソケット、ポート、または外部通信媒体への他の接続に接続するための物理インターフェースを含んでよい。バスインターフェースモジュール９０８は、着信および発信のトランザクションを管理するハードウェアおよび／またはソフトウェアをさらに含んでよい。バスインターフェースモジュール９０８は、周辺装置相互接続（ＰＣＩ）ベースのプロトコル、不揮発性メモリエクスプレス（ＮＶＭｅ）、アドバンストホストコントローラインターフェース（ＡＨＣＩ）、スモールコンピュータシステムインターフェース（ＳＣＳＩ）、シリアル接続ＳＣＳＩ（ＳＡＳ）、シリアルＡＴアタッチメント（ＳＡＴＡ）、パラレルＡＴＡ（ＰＡＴＡ）、いくつかの他の標準バスプロトコル、または独自のバスプロトコルなどのローカルバスプロトコルを実装することができる。バスインターフェースモジュール９０８は、とりわけ、コネクタ、電力管理、およびエラー処理を含む、これらのバスプロトコルのいずれかのための物理層を含んでよい。いくつかの実装形態では、コンピューティングデバイス９００は、複数の外部エンティティと通信するための複数のバスインターフェースモジュールを含んでよい。これらの複数のバスインターフェースモジュールは、同じローカルバスプロトコル、異なるローカルバスプロトコル、または同じバスプロトコルと異なるバスプロトコルの組合せを実装することができる。
【００９９】
[0106]ネットワークインターフェースモジュール９１２は、ネットワークと通信するためのハードウェアおよび／またはソフトウェアを含んでよい。このネットワークインターフェースモジュール９１２は、たとえば、ネットワークへの有線接続用の物理コネクタもしくは物理ポート、および／またはネットワークへのワイヤレス通信用のアンテナを含んでよい。ネットワークインターフェースモジュール９１２は、ネットワークプロトコルスタックを実装するように構成されたハードウェアおよび／またはソフトウェアをさらに含んでよい。ネットワークインターフェースモジュール９１２は、たとえば、とりわけ、ＴＣＰ／ＩＰ、インフィニバンド、ＲｏＣＥ、電気電子技術者協会（ＩＥＥＥ）８０２．１１ワイヤレスプロトコル、ユーザデータグラムプロトコル（ＵＤＰ）、非同期転送モード（ＡＴＭ）、トークンリング、フレームリレー、高レベルデータリンク制御（ＨＤＬＣ）、ファイバ分散データインターフェース（ＦＤＤＩ）、および／またはポイントツーポイントプロトコル（ＰＰＰ）などのネットワークプロトコルを使用して、ネットワークと通信することができる。いくつかの実装形態では、コンピューティングデバイス９００は、各々が異なるネットワークと通信するように構成された複数のネットワークインターフェースモジュールを含んでよい。たとえば、これらの実装形態では、コンピューティングデバイス９００は、有線イーサネットネットワーク、ワイヤレス８０２．１１ネットワーク、セルラーネットワーク、インフィニバンドネットワークなどと通信するためのネットワークインターフェースモジュールを含んでよい。いくつかの実施形態では、コンピューティングデバイス９００は、ネットワークインターフェースモジュール９１２を介してサーバから、忘却ゲート係数、入力係数、出力係数などを生成するための前述の重みベクトルなどのパラメータのセットを受信することができる。
【０１００】
[0107]上述されたコンピューティングデバイス９００の様々な構成要素およびモジュールは、個別構成要素として、システムオンチップ（ＳｏＣ）として、ＡＳＩＣとして、ＮＰＵとして、ＦＰＧＡとして、またはそれらの任意の組合せとして実装されてよい。いくつかの実施形態では、ＳｏＣまたは他の構成要素は、トラフィック監視、トラフィック成形、コンピューティングなどの様々なサービスを提供するために、別のコンピューティングシステムに通信可能に結合されてよい。本技術のいくつかの実施形態では、ＳｏＣまたは他の構成要素は、本明細書に開示された複数のサブシステムを含んでよい。
【０１０１】
[0108]本明細書に記載されたモジュールは、ソフトウェアモジュール、ハードウェアモジュール、またはそれらの適切な組合せであってよい。モジュールがソフトウェアモジュールである場合、モジュールは、非一時的コンピュータ可読媒体上で具現化され、本明細書に記載されたコンピュータシステムのいずれかのプロセッサによって処理することができる。記載されたプロセスおよびアーキテクチャは、任意のユーザ対話より前に、リアルタイムまたは非同期モードのいずれかで実行できることに留意されたい。モジュールは、図９に示唆された方式で構成されてよく、かつ／または本明細書に記載された機能は、別個のモジュールとして存在する１つもしくは複数のモジュールによって提供され得、かつ／または本明細書に記載されたモジュール機能は、複数のモジュールに広がることができる。
【０１０２】
[0109]明細書および図面は、それに応じて、限定的な意味ではなく例示的な意味で見なされるべきである。しかしながら、特許請求の範囲に記載された本開示のより広い趣旨および範囲から逸脱することなく、様々な修正および変更が行われてよいことは明らかであろう。
【０１０３】
[0110]他の変形形態は本開示の趣旨内である。したがって、開示された技法は、様々な修正形態および代替構造の影響を受けやすいが、それらのいくつかの例示された実施形態が図面に示され、詳細に上述されている。しかしながら、開示された具体的な１つまたは複数の形態に開示を限定する意図がないことが理解されるべきであるが、反対に、意図は、添付の特許請求の範囲に定義されているように、本開示の趣旨および範囲内にあるすべての修正形態、代替構造、および等価物をカバーすることである。
いくつかの例示的な実施形態は、以下の節によって記載される。
１．多層ニューラルネットワークにおいて複数のデータセットを処理する方法であって、多層ニューラルネットワークが、第１のニューラルネットワーク層、第１のニューラルネットワーク層によって生成された出力を処理する第２のニューラルネットワーク層、および第２のニューラルネットワーク層によって生成された出力を処理する第３のニューラルネットワーク層を備え、方法が
第１のデータセットをメモリに格納することと、
第１のニューラルネットワーク層を使用して、第１のデータセットの第１の層出力を生成するために、メモリからの第１のデータセットを処理することと、
第１のデータセットの第１の層出力をメモリに格納することと、
メモリから第１のデータセットを削除することと、
メモリに格納された第１のデータセットの第１の層出力に第２のデータセットを追加することと、
第１のニューラルネットワーク層を使用して、第２のデータセットの第１の層出力を生成するために、メモリからの第２のデータセットを処理することと、
メモリに格納された第１のデータセットの第１の層出力に第２のデータセットの第１の層出力を追加することと、
メモリから第２のデータセットを削除することと、
第２のニューラルネットワーク層を使用して、それぞれ、第１のデータセットの第２の層出力および第２のデータセットの第２の層出力を生成するために、メモリからの第１のデータセットの第１の層出力および第２のデータセットの第１の層出力を処理することと、
第１のデータセットの第２の層出力および第２のデータセットの第２の層出力をメモリに格納することと、
第１のデータセットの第１の層出力および第２のデータセットの第１の層出力をメモリから削除することと、
メモリに格納された第１のデータセットの第２の層出力および第２のデータセットの第２の層出力に第３のデータセットを追加することと、
第１のニューラルネットワーク層を使用して、第１のデータセットの第２の層出力および第２のデータセットの第２の層出力が生成された後、第３のデータセットの第１の層出力を生成するために、メモリからの第３のデータセットを処理することと、
第３のデータセットの第１の層出力をメモリに格納することと、
メモリから第３のデータセットを削除することと、
メモリに格納された第１のデータセットの第２の層出力、第２のデータセットの第２の層出力、および第３のデータセットの第１の層出力に第４のデータセットを追加することと、
第１のニューラルネットワーク層を使用して、第４のデータセットの第１の層出力を生成するために、メモリからの第４のデータセットを処理することと、
メモリに格納された第３のデータセットの第１の層出力、第１のデータセットの第２の層出力、および第２のデータセットの第２の層出力に第４のデータセットの第１の層出力を追加することと、
メモリから第４のデータセットを削除することと、
第２のニューラルネットワーク層を使用して、それぞれ、第３のデータセットの第２の層出力および第４のデータセットの第２の層出力を生成するために、第３のデータセットの第１の層出力および第４のデータセットの第１の層出力を処理することと、
メモリに格納された第１のデータセットの第２の層出力および第２のデータセットの第２の層出力に、第３のデータセットの第２の層出力および第４のデータセットの第２の層出力を追加することと、
第３のニューラルネットワーク層を使用して、それぞれ、第１のデータセットの第３の層出力、第２のデータセットの第３の層出力、第３のデータセットの第３の層出力、および第４のデータセットの第３の層出力を生成するために、メモリからの第１のデータセットの第２の層出力、第２のデータセットの第２の層出力、第３のデータセットの第２の層出力、および第４のデータセットの第２の層出力を処理することと、
第１のデータセットの第３の層出力、第２のデータセットの第３の層出力、第３のデータセットの第３の層出力、および第４のデータセットの第３の層出力をメモリに格納することと
を含む、方法。
２．第１のデータセットの第２の層出力および第２のデータセットの第２の層出力が、メモリに格納された第１のデータセットの第１の層出力を少なくとも上書きすることによってメモリに格納される、節１の方法。
３．第４のデータセット、第４のデータセットの第１の層出力、第３のデータセットの第１の層出力、第１のデータセットの第２の層出力、および第２のデータセットの第２の層出力を同時にを格納するためのスペースを提供するようにメモリを制御することをさらに含む、任意の前節の方法。
４．第１のデータセットの第１の層出力のデータサイズが、第１のデータセットの第２の層出力のデータサイズよりも大きく、第１のデータセットの第２の層出力のデータサイズが、第１のデータセットの第３の層出力のデータサイズよりも大きい、任意の前節の方法。
５．データを処理する方法であって、
ニューラルネットワークの第１の層を実装するように第１の構成内の計算エンジンを設定することと、
第１のコンテキストの第１の層出力を生成するために、第１の構成内の計算エンジンを使用して第１のコンテキストに関連する第１のデータを処理することと、
ニューラルネットワークの第２の層を実装するように第２の構成内の計算エンジンを設定することと、
第１のコンテキストの第２の層出力を生成するために、第２の構成内の計算エンジンを使用して第１のコンテキストの第１のデータを処理することと、
第２の構成から第１の構成に戻るように計算エンジンを切り替えることと、
第２のコンテキストの第１の層出力を生成するために、第１の構成内の計算エンジンを使用して第２のコンテキストに関連する第２のデータを処理することと、
ニューラルネットワークの第２の層を実装するように第２の構成に戻るように計算エンジンを設定することと、
第２のコンテキストの第２の層出力を生成するために、第２の構成内の第２のコンテキストの第１の層出力を処理することと、
ニューラルネットワークの第３の層を実装するように第３の構成内の計算エンジンを設定することと、
第１のコンテキストの第３の層出力および第２のコンテキストの第３の層出力を生成するために、第３の構成内の計算エンジンを使用して第１のコンテキストの第２の層出力および第２のコンテキストの第２の層出力を処理することと
を含む、方法。
６．第３のコンテキストの第１の層出力を生成するために、第１の構成内の計算エンジンを使用して第３のコンテキストに関連する第３のデータを処理することと、
それぞれ、第３のコンテキストの第２の層出力および第１のコンテキストの第２の層出力を生成するために、第２の構成内の計算エンジンを使用して第３のコンテキストの第１の層出力および第１のコンテキストの第１の層出力を処理することと
をさらに含む、節５の方法。
７．第１のコンテキストの第１の層出力および第３のコンテキストの第１の層出力をメモリデバイスに格納することと、
入力としてメモリデバイスから第１のコンテキストの第１の層出力を受け取るように計算エンジンの第１の部分を構成することと、
入力としてメモリデバイスから第３のコンテキストの第１の層出力を受け取るように計算エンジンの第２の部分を構成することと、
計算エンジンの第１の部分を使用して、第１のコンテキストの第１の層出力を処理することと、
計算エンジンの第２の部分を使用して、第３のコンテキストの第１の層出力を処理することと
をさらに含む、節６の方法。
８．計算エンジンの第１の部分を使用する第１のコンテキストの第１の層出力の処理、および計算エンジンの第２の部分を使用する第３のコンテキストの第１の層出力の処理が並行して実行される、節７の方法。
９．第４のコンテキストの第１の層出力を生成するために、第１の構成内の計算エンジンを使用して第４のコンテキストに関連する第４のデータを処理することと、
それぞれ、第２のコンテキストの第２の層出力および第４のコンテキストの第２の層出力を生成するために、第２の構成内の計算エンジンを使用して第２のコンテキストの第１の層出力および第４のコンテキストの第１の層出力を処理することと
をさらに含む、節５から８のいずれかの方法。
１０．第２のコンテキストの第１の層出力および第４のコンテキストの第１の層出力をメモリデバイスに格納することと、
入力としてメモリデバイスから第２のコンテキストの第１の層出力を受け取るように計算エンジンの第１の部分を構成することと、
入力としてメモリデバイスから第４のコンテキストの第１の層出力を受け取るように計算エンジンの第２の部分を構成することと、
計算エンジンの第１の部分を使用して、第２のコンテキストの第１の層出力を処理することと、
計算エンジンの第２の部分を使用して、第４のコンテキストの第１の層出力を処理することと
をさらに含む、節９の方法。
１１．計算エンジンの第１の部分を使用する第２のコンテキストの第１の層出力の処理、および計算エンジンの第２の部分を使用する第４のコンテキストの第１の層出力の処理が実質的に並行して実行される、節１０の方法。
１２．第１のコンテキストの第２の層出力をメモリデバイスに格納することと、
第１のコンテキストの第２の層出力に加えて、第２のコンテキストに関連する第２のデータをメモリデバイスに格納することと、
第１のコンテキストの第２の層出力および第２のコンテキストに関連する第２のデータに加えて、第２のコンテキストの第１の層出力をメモリデバイスに格納することと
をさらに含む、節５から１１のいずれかの方法。
１３．メモリデバイスに格納された第２のコンテキストに関連する第２のデータまたは第２のコンテキストの第１の層出力の少なくとも一部を、第２のコンテキストの第２の層出力で上書きすること
をさらに含む、節１２の方法。
１４．入力としてメモリデバイスから第１のコンテキストの第２の層出力を受け取るように計算エンジンの第３の部分を構成することと、
入力としてメモリデバイスから第２のコンテキストの第２の層出力を受け取るように計算エンジンの第４の部分を構成することと、
計算エンジンの第３の部分を使用して、第１のコンテキストの第２の層出力を処理することと、
計算エンジンの第４の部分を使用して、第２のコンテキストの第２の層出力を処理することと
をさらに含む、節１３の方法。
１５．計算エンジンの第３の部分を使用する第１のコンテキストの第２の層出力の処理、および計算エンジンの第４の部分を使用する第２のコンテキストの第２の層出力の処理が実質的に並行して実行される、節１４の方法。
１６．第１のコンテキストの第１の層出力を生成するために、第１の構成内の計算エンジンを使用して第１のコンテキストに関連する第１のデータを処理することが、第１のデータとニューラルネットワークの第１の層に関連付けられた重みのセットとの間で１つまたは複数の畳み込み計算を実行することを含む、節５から１５のいずれかの方法。
１７．第１のコンテキストの第１の層出力を生成するために、活性化関数エンジンによって１つまたは複数の畳み込み計算の結果を処理すること
をさらに含む、節１６の方法
１８．状態バッファとして構成されたメモリデバイスと、
メモリデバイスと結合され、処理要素の配列を備える計算エンジンであって、処理要素の配列の各々が加算器および乗算器を備える、計算エンジンと
を備える、集積回路であって、
計算エンジンが、
ニューラルネットワークの第２の層に関連付けられた重みの第１のセットを状態バッファから取得することと、
第１のデータの第２の層出力を生成するために、重みの第１のセットと第１のデータとの間で加算および乗算の第１のセットを実行することと、
第１のデータの第２の層出力が生成された後、ニューラルネットワークの第１の層に関連付けられた重みの第２のセットを状態バッファから取得することと、
第２のデータの第１の層出力を生成するために、重みの第２のセットと第２のデータとの間で加算および乗算の第２のセットを実行することと、
第２のデータの第２の層出力を生成するために、重みの第１のセットと第２のデータの第１の層出力との間で加算および乗算の第３のセットを実行することと、
ニューラルネットワークの第３の層に関連付けられた重みの第３のセットを状態バッファから取得することと、
第１のデータを処理した第１の結果を生成するために、重みの第３のセットと第１のデータの第２の層出力との間で加算および乗算の第４のセットを実行することと、
第２のデータを処理した第２の結果を生成するために、重みの第３のセットと第２のデータの第２の層出力との間で加算および乗算の第５のセットを実行することと
を行うように構成され、
加算および乗算の第４のセットならびに加算および乗算の第５のセットが、処理要素の配列の異なる部分によって実行される、
集積回路。
１９．計算エンジンが、
第１のデータの第２の層出力を状態バッファに格納することと、
重みの第３のセットと状態バッファから取得された第１のデータの第２の層出力との間で加算および乗算の第４のセットを実行することと
を行うようにさらに構成される、節１８の集積回路。
２０．計算エンジンが、加算および乗算の第４のセットならびに加算および乗算の第５のセットを実質的に並行して実行するように構成される、節１８または１９の集積回路。
２１．第１のコンテキストおよび第２のコンテキストについてのニューラルネットワーク計算を実行するためのスケジュールを決定することであって、各コンテキストについてのニューラルネットワーク計算を実行することが、それぞれのコンテキストについての計算タスクのシーケンスを実行することを含み、計算タスクの各シーケンスが、第１のニューラルネットワーク層を使用する第１の計算タスク、第２のニューラルネットワーク層を使用する第２の計算タスク、および第３のニューラルネットワーク層を使用する第３の計算タスクを含み、１つのコンテキストの第３の計算タスクが、１つのコンテキストの第２の計算タスクの出力を処理するように構成され、１つのコンテキストの第２の計算タスクが、１つのコンテキストの第１の計算タスクの出力を処理するように構成され、
スケジュールを決定することが、
第１のコンテキストの第３の計算タスクおよび第２のコンテキストの第３の計算タスクを含む第１の実行バッチを決定することであって、第１の実行バッチが、状態バッファが第１のコンテキストおよび第２のコンテキストの第３の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することを
を含む、決定することと、
状態バッファが、第１のコンテキストおよび第２のコンテキストの第２の計算タスクの入力データおよび出力データを保持するのに十分な容量を有するかどうかを判定することと、
状態バッファが、第１のコンテキストおよび第２のコンテキストの第２の計算タスクの入力データおよび出力データを保持するのに十分な容量をもたないと判定することに応答して、
第１の実行バッチの前に実行されるべき第２の実行バッチおよび第２の実行バッチの前に実行されるべき第３の実行バッチを決定することであって、第２の実行バッチが第１のコンテキストの第２の計算タスクを含み、第３の実行バッチが第２のコンテキストの第２の計算タスクを含み、第２の実行バッチおよび第３の実行バッチが、状態バッファが第２のコンテキストの第２の計算タスクの出力データ、ならびに第１のコンテキストの第２の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第２の実行バッチの前に実行されるべき第４の実行バッチを決定することであって、第４の実行バッチが第１のコンテキストの第１の計算タスクを含み、第４の実行バッチが、状態バッファが第１のコンテキストの第１の計算タスクの入力データおよび出力データ、ならびに第２のコンテキストの第２の計算タスクの出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第３の実行バッチを実行することと、
第３の実行バッチの後に第４の実行バッチを実行することと、
第４の実行バッチの後に第２の実行バッチを実行することと、
第２の実行バッチの後に第１の実行バッチを実行することと
を含む、方法。
２２．状態バッファが、第１のコンテキストおよび第２のコンテキストの第２の計算タスクの入力データおよび出力データに加えて、第１のコンテキストおよび第２のコンテキストの第２の計算タスク用の重みのセットを保持するのに十分な容量を有するかどうかを判定すること
をさらに含み、
第１の実行バッチの前に実行されるべき第２の実行バッチおよび第２の実行バッチの前に実行されるべき第３の実行バッチを決定することが、状態バッファが第１のコンテキストおよび第２のコンテキストの第２の計算タスクの重みのセット、入力データ、および出力データを保持するのに不十分な容量を有することに基づく、
節２１の方法。
２３．第２の実行バッチに含まれるべき第１の数の第２の計算タスク、および第３の実行バッチに含まれるべき第２の数の第２の計算タスクを最大化することであって、その結果、第１の数の第２の計算タスクの入力データおよび出力データ、ならびに第２の数の第２の計算タスクの出力データの合計データサイズが、第２の実行バッチが実行されるときの状態バッファの容量を下回る、最大化すること
をさらに含む、節２１または２２の方法。
２４．第３の実行バッチの前に実行されるべき第５の実行バッチを決定することであって、第３の実行バッチが第２のコンテキストの第１の計算タスクを含み、第５の実行バッチが、状態バッファが第２のコンテキストの第１の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第３の実行バッチの前に第５の実行バッチを実行することと
をさらに含む、節２１から２３のいずれかの方法。
２５．実行されるべき計算タスクのセットを決定することであって、計算タスクのセットが、第１の計算タスク、第２の計算タスク、第３の計算タスク、および第４の計算タスクを含み、第３の計算タスクおよび第４の計算タスクが、それぞれ、第１の計算タスクの入力データおよび第２の計算タスクの入力データを生成する、決定することと、
メモリデバイスが第１の計算タスクと第２の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第１の計算タスクおよび第２の計算タスクを含む第１の実行バッチを決定することと、
第１の実行バッチの前に実行されるべき少なくとも第３の計算タスクを含む第２の実行バッチを決定することと、
メモリデバイスが第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかに基づいて、第２の実行バッチに第４の計算タスクを含めるべきかどうかを判定することと、
第２の実行バッチを実行することと、
第２の実行バッチの後に第１の実行バッチを実行することと
を含む、方法。
２６．第２の実行バッチを決定することが、
メモリデバイスが、第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、第３の計算タスクの入力データおよび出力データ、ならびに第４の計算タスクの出力データを保持するのに十分な容量を有すると判断することと、
第３の計算タスクを含む第２の実行バッチを決定することと、
第２の実行バッチの前に実行されるべき第４の計算タスクを含む第３の実行バッチを決定することと
を含み、方法が、
第２の実行バッチの前に第３の実行バッチを実行すること
を含む、節２５の方法。
２７．計算タスクのセットが、それぞれ、第３の計算タスクの入力データおよび第４の計算タスクの入力データを生成する、第５の計算タスクおよび第６の計算タスクをさらに含み、
方法が、
第５の計算タスクを含む第４の実行バッチを決定することと、
第６の計算タスクを含む第５の実行バッチを決定することと、
第２の実行バッチの前に第４の実行バッチを実行することと、
第３の実行バッチの前に第５の実行バッチを実行することと
をさらに含む、節２６の方法。
２８．メモリデバイスが第５の計算タスクの出力データ、第６の計算タスクの出力データ、ならびに第４の計算タスクの入力データおよび出力データを格納するのに十分な容量をもたず、メモリデバイスが第４の計算タスクの出力データならびに第５の計算タスクの入力データおよび出力データを格納するのに十分な容量を有すると判断することに基づいて、第３の実行バッチと第２の実行バッチの間で実行されるべき第４の実行バッチを決定すること
をさらに含む、節２７の方法。
２９．メモリデバイスが第５の計算タスクの出力データ、第６の計算タスクの出力データ、ならびに第４の計算タスクの入力データおよび出力データを格納するのに十分な容量を有すると判断することに基づいて、第３の実行バッチの前に、かつ第２の実行バッチの前に実行されるべき第４の実行バッチを決定すること
をさらに含む、節２７または２８の方法。
３０．第２の実行バッチを決定することが、
メモリデバイスが第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有すると判断することに基づいて、第３の計算タスクおよび第４の計算タスクを含む第２の実行バッチを決定すること
を含む、節２５から２９のいずれかの方法。
３１．計算タスクのセットが、それぞれ、第３の計算タスクの入力データおよび第４の計算タスクの入力データを生成する、第５の計算タスクおよび第６の計算タスクをさらに含み、
方法が、
メモリデバイスが第５の計算タスクと第６の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するがどうかに基づいて、第３の計算バッチを決定することと
第２の実行バッチの前に第３の実行バッチを実行することと、
をさらに含む、節３０の方法。
３２．第３の実行バッチを決定することが、
メモリデバイスが、第５の計算タスクと第６の計算タスクの両方の入力データおよび出力データを格納するのに十分な容量をもたないが、第５の計算タスクの入力データおよび出力データ、ならびに第６の計算タスクの出力データを格納するのに十分な容量を有すると判断することと、
第５の計算タスクを含む第３の実行バッチを決定することと、
第３の実行バッチの前に実行されるべき第６の計算タスクを含む第４の実行バッチを決定することと
を含み、方法が、
第４の実行バッチを実行すること
を含む、節３１の方法。
３３．第３の実行バッチを決定することが、
メモリデバイスが第５の計算タスクと第６の計算タスクの両方の入力データおよび出力データを格納するのに十分な容量を有すると判断することと、
第５の計算タスクおよび第６の計算タスクを含む第３の実行バッチを決定することと
を含む、節３１または３２の方法。
３４．第２の実行バッチを実行することが、第１の計算タスクおよび第２の計算タスクを実質的に並行して実行することを含む、節２５から３３のいずれかの方法。
３５．第１の計算タスクおよび第３の計算タスクが、第１のコンテキストに関連付けられた第１のデータを処理するためのものであり、第２の計算タスクおよび第４の計算タスクが、第２のコンテキストに関連付けられた第２のデータを処理するためのものである、節２５から３４のいずれかの方法。
３６．第３の計算タスクおよび第４の計算タスクが、第１のニューラルネットワーク層のための計算に関連付けられ、第１の計算タスクおよび第２の計算タスクが、第１のニューラルネットワーク層からのデータを処理する第２のニューラルネットワーク層のための計算に関連付けられる、節２５から３５のいずれかの方法。
３７．状態バッファとして構成されたメモリデバイスと、
メモリデバイスと結合された計算エンジンと、
計算エンジンにおいて実行されるべき計算タスクのセットを決定することであって、計算タスクのセットが、第１の計算タスク、第２の計算タスク、第３の計算タスク、および第４の計算タスクを含み、第３の計算タスクおよび第４のタスクが、それぞれ、第１の計算タスクの入力データおよび第２の計算タスクの入力データを生成する、決定することと、
メモリデバイスが第１の計算タスクと第２の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第１の計算タスクおよび第２の計算タスクを含む第１の実行バッチを決定することと、
メモリデバイスが第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかに基づいて、第１の実行バッチの前に実行されるべき第２の実行バッチを決定することと、
計算エンジンにおいて第２の実行バッチを実行することと、
第２の実行バッチの実行が完了した後に、計算エンジンにおいて第１の実行バッチを実行することと
を行うように構成されたコントローラと
を備える、集積回路。
３８．コントローラが、
メモリデバイスが、第３の計算タスクと第４の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、第３の計算タスクの入力データおよび出力データ、ならびに第４の計算タスクの出力データを保持するのに十分な容量を有すると判断することと、
第２の実行バッチが第３の計算タスクを含むと判断することと、
第２の実行バッチの前に実行されるべき第４の計算タスクを含む第３の実行バッチを決定することと、
第４の計算タスクの入力データを格納するためのメモリデバイスにおける第１のメモリ空間、および第４の計算タスクの出力データを格納するためのメモリデバイスにおける第２のメモリ空間を割り当てることと、
第１のメモリ空間から第４の計算タスクの入力データを読み取り、第４の計算タスクの出力データを第２のメモリ空間に格納するように計算エンジンを制御することにより、計算エンジンにおいて第３の実行バッチを実行することと、
計算エンジンにおける第２の実行バッチの実行中に、第４の計算タスクの出力データをメモリデバイスに格納することと
を行うようにさらに構成される、節３７の集積回路。
３９．計算タスクのセットが、それぞれ、第３の計算タスクの入力データおよび第４の計算タスクの入力データを生成する、第５の計算タスクおよび第６の計算タスクをさらに含み、
コントローラが、
第５の計算タスクを含む第４の実行バッチを決定することと、
第６の計算タスクを含む第５の実行バッチを決定することと、
第２の実行バッチを実行する前に、計算エンジンにおいて第４の実行バッチを実行することと、
第３の実行バッチを実行する前に、計算エンジンにおいて第５の実行バッチを実行することと
を行うようにさらに構成される、節３８の集積回路。
４０．第１の計算タスク、第３の計算タスク、および第５の計算タスクが、それぞれ、第１のコンテキストについてのニューラルネットワークモデルの第３のニューラルネットワーク層計算、第２のニューラルネットワーク層計算、および第１のニューラルネットワーク層計算に関連付けられ、
第２の計算タスク、第４の計算タスク、および第６の計算タスクが、それぞれ、第２のコンテキストについてのニューラルネットワークモデルの第３のニューラルネットワーク層計算、第２のニューラルネットワーク層計算、および第１のニューラルネットワーク層計算に関連付けられる、
節３９の集積回路。
【０１０４】
[0111]開示された実施形態を記載する文脈において（特に、以下の特許請求の範囲の文脈において）用語「ａ」および「ａｎ」および「ｔｈｅ」および同様の指示物の使用は、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、単数と複数の両方をカバーすると解釈されるべきである。「備える」、「有する」、「含む」、および「含んでいる」という用語は、特に断りのない限り、制約のない用語（すなわち、「含むが、それに限定されない」を意味する）として解釈されるべきである。「接続された」という用語は、介在する何かが存在する場合でも、部分的もしくは全体的に含まれる、接続される、または一緒に結合されるものと解釈されるべきである。本明細書における値の範囲の列挙は、本明細書において別段の指示がない限り、範囲内にある各個別の値を個別に参照する簡略法として機能することのみを意図し、各個別の値は、本明細書において個別に列挙されているかのように本明細書に組み込まれる。本明細書に記載されたすべての方法は、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、任意の適切な順序で実行することができる。本明細書において提供されたありとあらゆる例または例示的な言語（たとえば、「など」）の使用は、本開示の実施形態をよりよく明らかにすることのみを意図しており、別段の請求がない限り、本開示の範囲を限定するものではない。本明細書内の言語は、任意の請求されていない要素を本開示の実践に不可欠であると示すものとして解釈されるべきではない。
【０１０５】
[0112]フレーズ「Ｘ、Ｙ、またはＺの少なくとも１つ」などの選言語は、特に明記されていない限り、一般的に、項目、用語などがＸ、Ｙ、もしくはＺ、またはそれらの任意の組合せ（たとえば、Ｘ、Ｙ、および／もしくはＺ）であることを提示するために使用されるものとして、文脈内で理解されるものである。したがって、そのような選言語は、一般に、特定の実施形態が少なくとも１つのＸ、少なくとも１つのＹ、または少なくとも１つのＺが各々存在することを必要とすることを意味するものではなく、意味するべきではない。
【０１０６】
[0113]本開示を実行するための発明者に知られている最良の形態を含む、本開示の様々な実施形態が本明細書に記載されている。それらの実施形態の変形形態は、前述の説明を読むと当業者に明らかになる可能性がある。発明者は、当業者がそのような変形形態を適切に利用することを期待し、発明者は、本明細書に具体的に記載された以外の方法で本開示が実践されることを意図する。したがって、本開示は、適用可能な法律によって許可されるように、本明細書に添付された特許請求の範囲に列挙された主題のすべての修正形態および均等物を含む。その上、それらのすべての可能な変形形態における上述された要素の任意の組合せは、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、本開示によって包含される。
【図１】
2021517310.tif 000006
【図２Ａ】
2021517310.tif 000007
【図２Ｂ】
2021517310.tif 000008
【図２Ｃ】
2021517310.tif 000009
【図２Ｄ】
2021517310.tif 000010
【図３Ａ】
2021517310.tif 000011
【図３Ｂ】
2021517310.tif 000012
【図３Ｃ】
2021517310.tif 000013
【図４】
2021517310.tif 000014
【図５】
2021517310.tif 000015
【図６】
2021517310.tif 000016
【図７Ａ】
2021517310.tif 000017
【図７Ｂ】
2021517310.tif 000018
【図７Ｃ】
2021517310.tif 000019
【図７Ｄ】
2021517310.tif 000020
【図７Ｅ】
2021517310.tif 000021
【図７Ｆ】
2021517310.tif 000022
【図７Ｇ】
2021517310.tif 000023
【図８】
2021517310.tif 000024
【図９】
2021517310.tif 000025
【国際調査報告】
2021517310.tif 000026
2021517310.tif 000027
2021517310.tif 000028
2021517310.tif 000029