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