JP2019537139A - ハードウェアにおけるカーネルストライドの実行 - Google Patents

ハードウェアにおけるカーネルストライドの実行 Download PDF

Info

Publication number
JP2019537139A
JP2019537139A JP2019524156A JP2019524156A JP2019537139A JP 2019537139 A JP2019537139 A JP 2019537139A JP 2019524156 A JP2019524156 A JP 2019524156A JP 2019524156 A JP2019524156 A JP 2019524156A JP 2019537139 A JP2019537139 A JP 2019537139A
Authority
JP
Japan
Prior art keywords
tensor
neural network
network layer
convolutional neural
stride
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019524156A
Other languages
English (en)
Other versions
JP6987860B2 (ja
JP2019537139A5 (ja
Inventor
ヤング,レジナルド・クリフォード
ガランド,ウィリアム・ジョン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2019537139A publication Critical patent/JP2019537139A/ja
Publication of JP2019537139A5 publication Critical patent/JP2019537139A5/ja
Priority to JP2021195320A priority Critical patent/JP7394104B2/ja
Application granted granted Critical
Publication of JP6987860B2 publication Critical patent/JP6987860B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Image Analysis (AREA)
  • Feedback Control In General (AREA)

Abstract

ハードウェア回路上で、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含むニューラルネットワークを処理するよう要求を受け取ることと、これに応答して、ハードウェア回路に、入力テンソルの処理中に、入力テンソルを、1に等しいストライドを有するがそれ以外は第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させて第1のテンソルを生成する命令を生成することと、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素を零出力して、第2のテンソルを生成することと、第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを備える、方法。

Description

背景
本明細書は、ハードウェアにおけるニューラルネットワーク推論の計算に関する。
ニューラルネットワークは、受け取られた入力に対する出力、たとえば分類を生成するために1つまたは複数の層を用いる機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つまたは複数の隠れ層を含む。各隠れ層の出力は、ネットワーク内の別の層、たとえばネットワークの次の隠れ層または出力層への入力として用いられる。ネットワークの各層は、それぞれのパラメータセットの現在の値に従って、受け取られた入力から出力を生成する。
概要
一般に、この明細書はニューラルネットワーク推論を計算する専用ハードウェア回路について記載する。
一般に、この明細書に記載される主題の1つの革新的な局面は、ハードウェア回路上でニューラルネットワークを処理するよう要求を受け取ることを備え、ニューラルネットワークは、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含み、さらに、これに応答して、ハードウェア回路によって実行されると、ハードウェア回路に、ニューラルネットワークによる入力テンソルの処理中に、以下の動作を実行することによって第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成することを備える方法およびシステムにおいて実施され得る。この動作は、第1の畳み込みニューラルネットワーク層への入力テンソルを、1に等しいストライドを有するがそれ以外は第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素を零出力して、第2のテンソルを生成することと、第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを含む。
実装形態は、以下の特徴の1つ以上を含み得る。いくつかの実装形態では、第1のテンソルの要素を零出力することは、第1のテンソルの要素のサブセットに0を乗算することと、サブセットに含まれていない第1のテンソルの要素に1を乗算することとを含む。第1のテンソルの要素を零出力することは、マスキングテンソルと第1のテンソルとの要素ごとの乗算を実行して第2のテンソルを生成することを含み、マスキングテンソルは、(i)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置において0を含み、(ii)マスキングテンソルの各他の要素位置において1を含む。いくつかの実装形態では、マスキングテンソルは、ハードウェア回路によってアクセス可能なメモリに格納され、マスキングテンソルと第1のテンソルとの要素ごとの乗算は、ハードウェア回路に含まれる、ハードウェアで実装されるベクトル計算ユニットによって実行される。
実装形態は、さらに、以下の特徴の1つ以上を含み得る。いくつかの実装形態では、第1のテンソルの要素を零出力することは、第1のマスキングテンソルと第1のテンソルとの要素ごとの乗算を実行して、修正された第1のテンソルを生成することを含み、第1のマスキングテンソルは、(i)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置において0を含み、(ii)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されたであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置においてそれぞれの非0値を含み、第1のテンソルの要素を零出力することはさらに、第2のマスキングテンソルと修正された第1のテンソルとの要素ごとの乗算を実行することを含み、第2のマスキングテンソルは、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合に生成されるであろう第1のテンソルの要素に対応する各要素位置において、第1のマスキングテンソルのそれぞれの非0値の逆数を含む。
実装形態は、さらに、以下の特徴の1つ以上を含み得る。いくつかの実装形態では、最大プーリングを実行することは、第1の畳み込みニューラルネットワーク層のストライドによって定義される第2のテンソルの1つまたは複数のウィンドウの各々について、ウィンドウ内の要素の最大値要素を取得することを含む。第2のテンソルの1つまたは複数のウィンドウの各々は、畳み込みニューラルネットワーク層のストライドに対応する次元を有する矩形ウィンドウであり、第2のテンソルの異なる要素を含む。いくつかの実装形態では、最大プーリングを実行することは、第2のテンソルの要素の1つまたは複数のサブセットの各々について、サブセットの最大値要素を取得することを含む。第2のテンソル上で実行される最大プーリングは、ハードウェア回路のプーリング回路によって実行される。畳み込みニューラルネットワーク層は、ニューラルネットワーク内の第1のニューラルネットワーク層であり、入力テンソルは、デジタル画像の、当該デジタル画像の画素に対応する要素を含む表現である。
実装形態は、さらに、以下の特徴の1つ以上を含み得る。いくつかの実装形態では、入力テンソルはハードウェア回路のユニファイドバッファに格納され、第2の畳み込みニューラルネットワーク層の重みはハードウェア回路のダイナミックメモリに格納され、第2の畳み込みニューラルネットワーク層を用いて第1の畳み込みニューラルネットワーク層への入力テンソルを処理することは、入力テンソルをユニファイドバッファからハードウェアで実装されるハードウェア回路の行列計算ユニットに送ることと、ダイナミックメモリからハードウェア回路の行列計算ユニットに第2の畳み込みニューラルネットワーク層の重みを送ることと、ハードウェア回路の行列計算ユニットによって、第2の畳み込みニューラルネットワーク層の重みを用いて入力テンソルを処理して、第1のテンソルを生成することとを含む。
この明細書において記載される主題の特定の実施形態は、以下の利点の1つ以上を実現するように実現することができる。ハードウェア回路が1より大きいストライドを有する畳み込みニューラルネットワークを用いて入力テンソルを直接処理することができない場合でも、1より大きいストライドを有する畳み込みニューラルネットワーク層に対応する出力テンソルを、専用ハードウェア回路によってハードウェアで生成できる。専用ハードウェア回路を用いて適切な出力を生成することにより、1より大きいストライドを有するニューラルネットワーク層の処理は、たとえ専用ハードウェア回路がそのような処理を直接サポートしていなくても、データをホストコンピュータに返送することなく、すなわち計算の少なくとも一部をオフチップで実行することなく、実行できる。これにより、専用ハードウェア回路のハードウェアアーキテクチャを変更することなく、1より大きいストライドを有する畳み込み層を含むニューラルネットワークの推論を効率的に判断することが可能になる。すなわち、処理の一部をオフチップで、ソフトウェアで、またはその両方で実行することから生じる処理遅延が回避される。
本明細書に記載される主題は、たとえば、ニューラルネットワーク推論を計算するときにカーネルストライドを実行するための、開示された技法およびハードウェアを用いる画像認識または分類方法およびシステムにも関する。
この明細書において記載される主題の1つ以上の実施形態の詳細は、添付の図面および以下の詳細な説明において述べられる。主題の他の特徴、局面および利点は、詳細な説明、図面および特許請求の範囲から明らかになる。
例示的なニューラルネットワーク処理システムを示す。 ニューラルネットワークの所与の層について計算を実行するための例示的な方法の流れ図である。 例示的なニューラルネットワーク処理システムを示す。 行列計算ユニットを含む例示的なアーキテクチャを示す。 シストリックアレイ内のセルの例示的アーキテクチャを示す。 ベクトル計算ユニットの例示的アーキテクチャを示す。 プーリング回路のための例示的なアーキテクチャを示す。 1より大きいストライドでニューラルネットワークの所与の層に対して計算を実行するようにニューラルネットワーク処理システムに命令するための例示的な方法の流れ図である。 1より大きいストライドを有するニューラルネットワークの所与の層に対して計算を実行するための例示的な方法の流れ図である。 1より大きいストライドでのニューラルネットワークの所与の層に対する計算の例である。
さまざまな図面中の同様の参照番号および指定は、同様の要素を示す。
詳細な説明
複数の層を有するニューラルネットワークを用いて推論を計算することができる。たとえば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を通って入力を処理することによって、この推論を計算する。各層は入力を受け取り、その層に対する重みのセットに従って入力を処理して出力を生成する。
したがって、受け取った入力から推論を計算するために、ニューラルネットワークは入力を受け取り、それを各ニューラルネットワーク層の各々を通して処理して推論を生成し、1つのニューラルネットワーク層からの出力は次のニューラルネットワーク層への入力として与えられる。ニューラルネットワーク層へのデータ入力、たとえば、ニューラルネットワークへの入力、またはシーケンス内におけるその層の下の層の、あるニューラルネットワーク層への出力は、その層への活性化入力と呼ぶことができる。
いくつかの実装形態では、ニューラルネットワークの層はシーケンスで配置される。ある他の実装形態では、層は有向グラフとして配される。つまり、任意の特定の層が複数の入力、複数の出力、またはそれらの両方を受け取ることができる。ニューラルネットワークの層は、ある層の出力を前の層への入力として送り返すことができるように構成することもできる。
いくつかのニューラルネットワークは、1つまたは複数のニューラルネットワーク層からの出力をプーリングして、後続のニューラルネットワーク層への入力として用いられるプーリングされた値を生成する。いくつかの実装形態では、ニューラルネットワークは、出力のグループの最大値、最小値、または平均値を判断し、最大値、最小値、または平均値をグループのプーリングされた出力として用いることによって、出力のグループをプーリングする。出力をプーリングすることは、空間的不変性をある程度維持することができるので、さまざまな構成で配置される出力を、同じ推論を有するように処理することができる。出力をプーリングすることはまた、プーリングする前の出力の所望の特性を維持しながら後続のニューラルネットワーク層で受け取られる入力の次元を低減することができ、それはニューラルネットワークによって生成される推論の品質を著しく損なうことなく効率を改善できる。
いくつかのニューラルネットワークは、1より大きいストライドを有する1つまたは複数の畳み込みニューラルネットワーク層を含む。概念的には、1のストライドの場合、畳み込みニューラルネットワーク層は、重みのセットを活性化入力に順次適用することができる。すなわち、活性化入力アレイの場合、重みを活性化入力のサブセットに適用し、畳み込み計算が完了するまで、活性化入力の各他のサブセットに、1つの位置、たとえば行または列だけ、移動させることができる。1より大きい整数であるストライドを有する畳み込みニューラルネットワーク層の場合、重みを活性化入力のサブセットに適用し、畳み込み計算が完了するまで、活性化入力の各他のサブセットに、ストライドに等しい数の位置だけ、たとえば、ストライドによって示される行または列の数だけ、移動させることができる。
本明細書は、ニューラルネットワーク層を処理し、任意選択で1つまたは複数のニューラルネットワーク層の出力に対してプーリングを実行する専用ハードウェア回路を記載する。専用ハードウェア回路は、1のストライドを有するニューラルネットワーク層を処理することができる回路を含む。専用ハードウェア回路は、1より大きいストライドを有するニューラルネットワーク層の処理を直接サポートしないが、専用ハードウェア回路は、1より大きいストライドを有するニューラルネットワーク層の出力と等価の出力を生成するように制御され得る。したがって、開示された技術の1つの技術的効果および利点は、1のストライドを有するニューラルネットワーク層を処理することができる回路を、より柔軟な態様で、1より大きいストライドを有するニューラルネットワーク層についてニューラルネットワーク推論を計算するために用いることができることである。
図1は、例示的なニューラルネットワーク処理システム100を示す。ニューラルネットワーク処理システム100は、以下に記載されるシステム、コンポーネント、および技術が実装され得る1つまたは複数の位置に1つまたは複数コンピュータとして実装されるシステムの例である。
ニューラルネットワーク処理システム100は、専用ハードウェア回路110を用いてニューラルネットワーク計算を実行するシステムである。ハードウェア回路110は、ニューラルネットワーク計算を実行するための集積回路であり、ハードウェアでベクトル - 行列乗算を実行する行列計算ユニット120を含む。ハードウェア回路110はまた、行列計算ユニット120の出力に対してプーリングを実行するためのプーリング回路を含むベクトル計算ユニット140を含む。例示的な専用ハードウェア回路120が、図3を参照して以下により詳細に記載される。
特に、ニューラルネットワーク処理システム100は、専用ハードウェア回路110上にニューラルネットワークを実装する要求を受信し、専用ハードウェア回路110上にニューラルネットワークを実装し、所与のニューラルネットワークが実装されると、ニューラルネットワーク推論を生成するために専用集積回路110を用いてニューラルネットワークへの入力を処理する。
すなわち、ニューラルネットワーク処理システム100は、入力を処理するために用いられるべきニューラルネットワークのためのニューラルネットワークアーキテクチャを指定する要求を受け取ることができる。ニューラルネットワークアーキテクチャは、ニューラルネットワーク内の層の数および構成、ならびにパラメータを有する各層のパラメータの値を定義する。
専用集積回路110上にニューラルネットワークを実装するために、ニューラルネットワーク処理システム100は、1つまたは複数の物理的位置にある1つまたは複数のコンピュータ上の1つまたは複数のコンピュータプログラムとして実装されるニューラルネットワーク実装エンジン150を含む。
ニューラルネットワーク実装エンジン150は命令を生成し、命令は、専用ハードウェア回路110によって実行されると、ハードウェア回路110に、ニューラルネットワークによって指定される動作を実行させて、受け取られたニューラルネットワーク入力からニューラルネットワーク出力を生成させる。
命令がニューラルネットワーク実装エンジン150によって生成され、ハードウェア回路110に与えられると、ニューラルネットワーク処理システム100は、ニューラルネットワーク入力を受け取り、ニューラルネットワークを用いて、ハードウェア回路110に、生成された命令を実行させることによって、ニューラルネットワーク入力を処理することができる。
しかしながら、いくつかのニューラルネットワークは、1つまたは複数の互換性のないニューラルネットワーク層を含む。本明細書で用いられる互換性のないニューラルネットワーク層という用語は、専用ハードウェア回路110によってハードウェアで直接実行することができない操作を指定するニューラルネットワーク層を指す。ハードウェア回路110上にこれらのニューラルネットワークを実装するために、ニューラルネットワーク実装エンジン150は、ハードウェア回路110によって実行されると、ハードウェア回路110に、ハードウェアにおいて以下の操作を実行することによって互換性のないニューラルネットワーク層についての出力を生成させる命令を生成する。それらの操作は、ニューラルネットワーク層によって指定されるものとは異なる操作であるが、互換性のないニューラルネットワーク層の仕様を満たす層出力、たとえば層出力テンソル、つまり、層によって指定される操作を直接実行することによって生成されたであろう出力と同じ層出力が生成される結果となる。
特に、いくつかのニューラルネットワークは、1より大きいストライドを有する畳み込みニューラルネットワーク層を含む。そのようなニューラルネットワーク層は、入力テンソルを用いて非順次的に処理される1つまたは複数のカーネルを特徴とする。たとえば、1のストライドでカーネルストライドを実行するとき、カーネルは入力テンソルの要素に順次適用される。しかしながら、2のストライドでカーネルストライドを実行するとき、ニューラルネットワーク層のカーネルは、カーネルの特定の要素が入力テンソルの1つおきの要素に適用されて出力テンソルを生成するように、シフトされる。出力テンソルは、ニューラルネットワークの別の層により入力として用いることができる。
ハードウェア回路110上で行列演算を実行する主ハードウェアユニットは行列計算ユニット120であるので、集積回路は1より大きいストライドを有するニューラルネットワーク層を直接計算することはできない。1より大きいストライドを有する層を含むニューラルネットワークを実現するために、ニューラルネットワーク実現エンジン150は命令を生成し、命令は、ニューラルネットワークによるニューラルネットワーク入力の処理中に専用ハードウェア回路110によって実行されると、ハードウェア回路110にハードウェアで他の操作を実行させて、行列乗算ユニット120およびプーリング回路を特徴とするベクトル計算ユニット140を用いて、1より大きいストライドを有するニューラルネットワーク層の仕様を満たす出力テンソルを生成する。これらの命令および他の操作は、図7〜図10を参照して以下により詳細に説明される。
図2は、専用ハードウェア回路を用いてニューラルネットワークの所与の層について計算を実行するための例示的なプロセス200の流れ図である。便宜上、方法200は、方法200を実行する1つまたは複数の回路を有するシステムに関して説明される。方法200は、受け取られた入力から推論を計算するために、ニューラルネットワークの各層に対して実行することができる。
システムは、所与の層について重み入力のセット(ステップ202)および活性化入力のセット(ステップ204)を受け取る。重み入力のセットおよび活性化入力のセットは、専用ハードウェア回路のダイナミックメモリおよびユニファイドバッファからそれぞれ受け取ることができる。いくつかの実装形態では、重み入力のセットと活性化入力のセットとの両方をユニファイドバッファから受け取ることができる。
システムは、専用ハードウェア回路の行列乗算ユニットを用いて、重み入力および活性化入力から累積値を生成する(ステップ206)。いくつかの実装形態では、累積値は、重み入力のセットと活性化入力のセットとの内積である。すなわち、層内のすべての重みのサブセットである1セットの重みについて、システムは各重み入力を各活性化入力と乗算し、それらの積を合計して累積値を形成することができる。システムは、次いで、他のセットの重みと他のセットの活性化入力との内積を計算することができる。いくつかの実装形態では、専用ハードウェア回路は、特定のニューラルネットワーク層のストライド、すなわちニューラルネットワーク層が1のストライドまたは1より大きいストライドを有するかどうかにかかわらず、同様にそのような操作を実行し得る。行列乗算ユニットからの出力のその後の処理は、ニューラルネットワーク層が1より大きい指定されたストライドで処理された場合に生成されるであろう出力と等価な出力を生成するよう実行することができる。
システムは、専用ハードウェア回路のベクトル計算ユニットを用いて累積値から層出力を生成することができる(ステップ208)。いくつかの実装形態では、ベクトル計算ユニットは、累積値に活性化関数を適用する。これについては、図5を参照して以下でさらに説明する。層の出力は、ニューラルネットワーク内の次の層への入力として用いるためにユニファイドバッファに格納することができ、または推論を決めるために用いることができる。いくつかの実装形態では、ニューラルネットワーク層は、1より大きいストライドを指定し得、システムは、1より大きいストライドを有するニューラルネットワーク層の出力と等価である層出力を得るために、累積値に対して追加の処理を行い得る。受け取られた入力がニューラルネットワークの各層を介して処理されて、受け取られた入力に対する推論を生成すると、システムはニューラルネットワークの処理を終了する。
図3は、ニューラルネットワーク計算を実行するための例示的な専用ハードウェア回路300を示す。システム300はホストインターフェース302を含む。ホストインターフェース302は、ニューラルネットワーク計算のためのパラメータを含む命令を受け取ることができる。パラメータは、以下のうちの1つまたは複数を含むことができる。処理すべき層の数、モデルの各層に対する対応する重み入力のセット、活性化入力の初期セット、すなわち推論が計算されるニューラルネットワークへの入力、各層の対応する入力および出力サイズ、ニューラルネットワーク計算のためのストライド値、および処理されるべき層のタイプ、たとえば畳み込み層または全結合層。
ホストインターフェース302は、命令をシーケンサ306に送ることができ、シーケンサ306は、命令を、ニューラルネットワーク計算を実行するように回路を制御する低レベル制御信号に変換する。いくつかの実装形態では、制御信号は、回路内のデータフロー、たとえば重み入力のセットおよび活性化入力のセットが回路をどのように流れるか、を調整する。シーケンサ306は、制御信号をユニファイドバッファ308、行列計算ユニット312、およびベクトル計算ユニット314に送ることができる。いくつかの実装形態では、シーケンサ306はまた、ダイレクトメモリアクセスエンジン304およびダイナミックメモリ310に制御信号を送る。いくつかの実装形態では、シーケンサ306は制御信号を生成するプロセッサである。シーケンサ306は、適切なときに制御信号を回路300の各構成要素に送るために、制御信号のタイミングを用いることができる。いくつかの他の実装形態では、ホストインターフェース302は外部プロセッサから制御信号を渡す。
ホストインターフェース302は、重み入力のセットおよび活性化入力の初期セットをダイレクトメモリアクセスエンジン304に送ることができる。ダイレクトメモリアクセスエンジン304は、ユニファイドバッファ308に活性化入力のセットを格納することができる。いくつかの実装形態では、ダイレクトメモリアクセスは、メモリユニットであり得るダイナミックメモリ310に重みのセットを格納する。いくつかの実装形態では、ダイナミックメモリ310は回路の外に配置されている。
ユニファイドバッファ308はメモリバッファである。それは、ダイレクトメモリアクセスエンジン304からの活性化入力のセットおよびベクトル計算ユニット314の出力を格納するために用いることができる。ベクトル計算ユニット314は、図6を参照して以下により詳細に説明される。ダイレクトメモリアクセスエンジン304は、ユニファイドバッファ308からベクトル計算ユニット314の出力を読み出すこともできる。
ダイナミックメモリ310およびユニファイドバッファ308は、重み入力のセットおよび活性化入力のセットをそれぞれ行列計算ユニット312に送ることができる。いくつかの実装形態では、行列計算ユニット312は二次元シストリックアレイである。行列計算ユニット312は、数学的演算、たとえば乗算および加算を実行することができる一次元シストリックアレイまたは他の回路とすることもできる。いくつかの実装形態では、行列計算ユニット312は汎用の行列プロセッサである。
行列計算ユニット312は、重み入力および活性化入力を処理し、出力のベクトルをベクトル計算ユニット314に与えることができる。いくつかの実装形態では、行列計算ユニット312は、出力ベクトルをユニファイドバッファ308に送り、ユニファイドバッファ308は、出力ベクトルをベクトル計算ユニット314に送る。ベクトル計算ユニット314は、出力のベクトルを処理し、処理された出力のベクトルをユニファイドバッファ308に格納することができる。1より大きいストライドを有するニューラルネットワーク層の場合、ベクトル計算ユニット314は、出力のベクトルを処理して、1より大きいストライドを有するニューラルネットワーク層の出力と等価である層出力テンソルを生成し、層出力テンソルをユニファイドバッファ308に格納することができる。処理された出力のベクトルは、たとえばニューラルネットワーク内の後続の層で用いるために、行列計算ユニット312への活性化入力として用いることができる。行列計算ユニット312およびベクトル計算ユニット314は、図4および図6をそれぞれ参照して以下により詳細に説明される。
図4は、行列計算ユニットを含む例示的アーキテクチャ400を示す。行列計算ユニットは、二次元シストリックアレイ406である。アレイ406は複数のセル404を含む。いくつかの実装形態では、シストリックアレイ406の第1の次元420はセルの列に対応し、シストリックアレイ406の第2の次元422はセルの行に対応する。シストリックアレイは、列よりも多い行、行よりも多い列、または同数の列と行とを有することができる。
図示の例では、値ローダ402は活性化入力をアレイ406の行に送り、重みフェッチャインターフェース(weight fetcher interface)408は重み入力をアレイ406の列に送る。しかしながら、いくつかの他の実装形態では、活性化入力は列に転送され、重み入力はアレイ406の行に転送される。
値ローダ402は、ユニファイドバッファ、たとえば、図3のユニファイドバッファ308から、活性化入力を受け取ることができる。各値ローダは、対応する活性化入力をアレイ406の最も左側の異なるセルに送ることができる。たとえば、値ローダ412はセル414に活性化入力を送ることができる。
重みフェッチャインターフェース408は、メモリユニット、たとえば図3のダイナミックメモリ310から重み入力を受け取ることができる。重みフェッチャインターフェース408は、対応する重み入力をアレイ406の最も上の異なるセルに送ることができる。たとえば、重みフェッチャインターフェース408は、重み入力をセル414および416に送ることができる。重みフェッチャインターフェース408はさらに、メモリユニット、たとえばダイナミックメモリ310から複数の重みを受け取り、複数の重みをアレイ406の最も上の別個のセルに並列に送ることができる。たとえば、重みフェッチャインターフェース408は、異なる重みをセル414および416に同時に送ることができる。
いくつかの実装形態では、ホストインターフェース、たとえば、図3のホストインターフェース302は、活性化入力をアレイ406全体にわたって1つの次元に沿って、たとえば右にシフトしながら、重み入力をアレイ406全体にわたって別の次元に沿って、たとえば下にシフトする。たとえば、1クロックサイクルにわたって、セル414における活性化入力は、セル414の右にあるセル416の活性化レジスタにシフトすることができる。同様に、セル416における重み入力は、セル414の下にあるセル418における重みレジスタにシフトすることができる。
各クロックサイクルで、各セルは、所与の重み入力、所与の活性化入力、および隣接セルからの累積出力を処理して、累積出力を生成することができる。累積出力は、与えられた重み入力と同じ次元に沿って隣接セルに渡すこともできる。各セルは、隣接セルからの累積出力を処理することなく、所与の重み入力および所与の活性化入力を処理して出力を生成することもできる。出力は、累積されることなく、与えられた重み入力および出力と同じ次元に沿って隣接セルに渡されることができる。個々のセルは、図5を参照して以下にさらに説明される。
いくつかの実装形態では、恒等行列、すなわち、主対角線上に1および他の場所に0を有する行列をアレイ406に渡すことができ、それによって値ローダ402で与えられる入力を修正なしでアキュムレータ410に渡すことができる。これは、2つの入力の要素ごとの乗算を実行するために用いられ得、ここで、アキュムレータでの第1の出力は、output = MatMul(input1, identity)として表すことができ、MatMulは、行列計算ユニットが行列乗算を実行するための命令であり、要素ごとの乗算結果に対応する第2の出力は、output *= MatMul(input2, identity)として表される。*=演算、すなわち演算output = output * MatMul(input2, identity)を実行するために、アーキテクチャ400は、 +=または*=計算を実行するための構成要素を含み得る。+=または*=演算を実行するための構成要素は、アキュムレータ410の前、すなわちセル404の最後の行の後に配置することができる。いくつかの実装形態では、図3のベクトル計算ユニット314が、+=または*=演算を実行するための構成要素を含んでもよく、すなわち、その場合、ベクトル計算ユニット314が、要素ごとの乗算を実行するために、output = output * MatMul(input2, identity)演算を実行する。
累積出力は、重み入力と同じ列に沿って、たとえばアレイ406内の列の一番下に向かって渡すことができる。いくつかの実装形態では、各列の一番下において、アレイ406は、行よりも多い活性化入力を有する層の計算を実行するときに各列から出力される各累積出力を格納および累積する、アキュムレータユニット410を含み得る。いくつかの実装形態では、各アキュムレータユニットは複数の並列累積値を格納する。アキュムレータユニット410は、各累積出力を累積して最終累積値を生成することができる。最終累積値はベクトル計算ユニット、たとえば図6のベクトル計算ユニットに転送することができる。いくつかの他の実装形態では、アキュムレータユニット410は、行よりも少ない活性化入力を有する層を処理するときに累積を実行せずに累積値をベクトル計算ユニットに渡す。
図5は、シストリックアレイ内のセル、たとえば図4のシストリックアレイ406のセル414、416、または418のうちの1つ、の例示的アーキテクチャ500を示す。
セルは、活性化入力を格納する活性化レジスタ506を含み得る。活性化レジスタは、シストリックアレイ内のセルの位置に応じて、左側の隣接セル、すなわち所与のセルの左側に位置する隣接セルから、またはユニファイドバッファから、活性化入力を受け取ることができる。セルは、重み入力を格納する重みレジスタ502を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、上の隣接セルまたは重みフェッチャインターフェースから転送され得る。セルは総和レジスタ504を含むこともできる。総和レジスタ504は、上の隣接セルからの累積値を格納することができる。乗算回路508を用いて、重みレジスタ502からの重み入力を活性化レジスタ506からの活性化入力と乗算することができる。乗算回路508は積を合計回路510に出力することができる。
合計回路510は、積と総和レジスタ504からの累積値とを合計して新たな累積値を生成することができる。次いで、合計回路510は、新たな累積値を、下の隣接セルに位置する別の総和レジスタに送ることができる。新たな累積値は、下の隣接セルにおける合計のためのオペランドとして用いることができる。合計回路510はまた、総和レジスタ504からの値を受け入れ、総和レジスタ504からの値を、乗算回路508からの積と合計することなく、下の隣接セルに送ることもできる。
セルは、重み入力および活性化入力を、処理のために、隣接セルにシフトすることもできる。たとえば、重み経路レジスタ512は、重み入力を下の隣接セル内の別の重みレジスタに送ることができる。活性化レジスタ506は、活性化入力を右の隣接セル内の別の活性化レジスタに送ることができる。したがって、重み入力と活性化入力との両方を、後続のクロックサイクルでアレイ内の他のセルによって再利用することができる。
いくつかの実装形態では、セルは制御レジスタも含む。制御レジスタは、セルが重み入力または活性化入力のいずれかを隣接セルにシフトすべきかを決定する制御信号を記憶することができる。いくつかの実装形態では、重み入力または活性化入力をシフトすることは、1つまたは複数のクロックサイクルを要する。制御信号は、活性化入力または重み入力が乗算回路508に転送されるかどうかも決定し得るか、または乗算回路508が活性化入力および重み入力で演算を行うかどうかも決定し得る。制御信号は、たとえば配線を用いて、1つまたは複数の隣接セルに渡すこともできる。
いくつかの実装形態では、重みは重み経路レジスタ512に事前にシフトされる。重み経路レジスタ512は、重み入力をたとえば上の隣接セルから受け取り、重み入力を制御信号に基づいて重みレジスタ502に転送することができる。重みレジスタ502は、活性化入力が複数のクロックサイクルにわたってたとえば活性化レジスタ506を介してセルに転送されるとき、重み入力がセル内に留まり、隣接セルに転送されないように、重み入力を静的に格納することができる。したがって、重み入力は、たとえば乗算回路508を用いて、複数の活性化入力に適用することができ、それぞれの累積値は隣接セルに転送することができる。
図6は、ベクトル計算ユニット602の例示的アーキテクチャ600を示す。ベクトル計算ユニット602は、行列計算ユニット、たとえば図3を参照して説明した行列計算ユニット312または図4の行列計算ユニットのアキュムレータ410から、累積値のベクトルを受け取ることができる。
ベクトル計算ユニット602は、活性化ユニット604で累積値のベクトルを処理することができる。いくつかの実装形態では、活性化ユニットは、活性化値を生成するために各累積値に非線形関数を適用する回路を含む。たとえば、非線形関数はtanh(x)とすることができ、ここで、xは累積値である。
任意選択で、ベクトル計算ユニット602は、プーリング回路608を用いて、値、たとえば活性化値をプーリングすることができる。プーリング回路608は、プーリングされた値を生成するために値の1つまたは複数に集約関数を適用することができる。いくつかの実装形態では、集約関数は、値、または値のサブセットの、最大値、最小値、もしくは平均値を返す関数である。
制御信号610は、たとえば、図3のシーケンサ306によって転送することができ、ベクトル計算ユニット602がどのように累積値のベクトルを処理するかを調整することができる。すなわち、制御信号610は、活性化値がプーリングされるかどうかを調整することができ、その場合、活性化値はたとえばユニファイドバッファ308に格納され、またはそうでなければ、制御信号610は、活性化値の取り扱いを調整することができる。制御信号610は、活性化関数またはプーリング関数、および活性化値またはプーリング値、たとえばストライド値を処理するための他のパラメータを指定することもできる。
ベクトル計算ユニット602は、値、たとえば活性化値またはプーリングされた値を、ユニファイドバッファ、たとえば図3のユニファイドバッファ308に送ることができる。いくつかの実装形態では、プーリング回路608は、活性化値またはプーリングされた値を受け取り、活性化値またはプーリングされた値をユニファイドバッファに格納する。
図7は、プーリング回路のための例示的アーキテクチャ700を示す。プーリング回路は、プーリングされた値を生成するために、1つまたは複数の活性化された値に集約関数を適用することができる。例示として、アーキテクチャ700は、4×4セットの活性化された値のプーリングを実行することができる。図7に示されるプーリングは正方形の領域、すなわち4×4を有するが、長方形の領域も可能である。たとえば、領域がn×mのウィンドウを有する場合、アーキテクチャ700はn*m個のレジスタ、すなわちn個の列およびm個の行を有することができる。
プーリング回路アーキテクチャ700は、値のベクトルから、たとえば図6の活性化回路604から、要素のシーケンスを受け取ることができる。たとえば、シーケンスは画像の8×8部分の画素を表すことができ、プーリング回路アーキテクチャ700は8×8部分の4×4サブセットからの値をプーリングすることができる。いくつかの実装形態では、プーリングされた値は、いったんプーリング回路アーキテクチャ700によって計算されるとシーケンスに追加される。いくつかの実装形態では、ニューラルネットワークプロセッサは、複数の並列プーリング回路を含む。各クロックサイクルにわたって、各プーリング回路は活性化回路604から、値のベクトルからのそれぞれの要素を受け取ることができる。各プーリング回路は、活性化回路604から受け取った要素を、ラスタ順に到着する二次元画像として解釈することができる。
プーリング回路は、一連のレジスタおよびメモリユニットを含み得る。各レジスタは、レジスタ内部に格納されている値にわたって集約関数を適用する集約回路706に出力を送ることができる。集約関数は、値のセットから最小値、最大値、または平均値を返すことができる。
第1の値は、レジスタ702に送られてその内部に格納され得る。後続のクロックサイクルで、第1の値は後続のレジスタ708にシフトしてメモリ704に格納されることができ、第2の値はレジスタ702に送られてレジスタ702内に格納されることができる。
4クロックサイクル後、4つの値が最初の4つのレジスタ702、708〜712の内部に格納される。いくつかの実装形態では、メモリユニット704は先入れ先出し(FIFO)の下で動作する。各メモリユニットは最大8つの値を格納できる。メモリユニット704が画素の完全な行を含んだ後、メモリユニット704はレジスタ714に値を送ることができる。
任意の所与の時点で、集約回路706は各レジスタからの値にアクセスすることができる。レジスタ内の値は、画像の4×4部分の値を表す。
プーリング回路は、集約回路706を用いることによって、アクセスされた値から、プーリングされた値、たとえば最大値、最小値、または平均値を生成することができる。プーリングされた値は、ユニファイドバッファ、たとえば図3のユニファイドバッファ308に送ることができる。
第1のプーリングされた値を生成した後、プーリング回路は、新たな値がレジスタに格納され集約回路706によってプーリングされることができるように、各レジスタを通して値をシフトすることによって、プーリングされた値を生成し続けることができる。たとえば、アーキテクチャ700では、プーリング回路は値をさらに4クロックサイクルにわたってシフトすることができ、それによってメモリユニット内の値をレジスタにシフトする。いくつかの実施態様では、プーリング回路は、新たな値が最後の最上位レジスタ、たとえばレジスタ716に格納されるまで、新たな値をシフトする。
次いで、集約回路706は、レジスタに格納されている新たな値をプーリングすることができる。新たな値をプーリングした結果は、ユニファイドバッファに格納できる。
図8は、1より大きいストライドでニューラルネットワークの所与の畳み込み層について計算を実行するための例示的なプロセス800のフローチャートである。一般に、プロセス700は、専用ハードウェア回路を含む1つまたは複数のコンピュータのシステムによって実行される。いくつかの実装形態では、例示的なプロセス800は、図1のシステムによって実行され得る。
システムは、専用ハードウェア回路上にニューラルネットワークを実装するための要求を受信する(ステップ802)。特に、ニューラルネットワークは、1より大きいストライドを有する畳み込みニューラルネットワーク層を含む。要求は、さらに、ニューラルネットワークを用いて処理する入力、ニューラルネットワークによって生成された出力テンソルを格納するための位置、または他のパラメータなど、ニューラルネットワークを実装するための他のパラメータを指定し得る。
システムは、要求に基づいて、1より大きいストライドを有するニューラルネットワーク層を処理する際に用いられるべきマスキングテンソルを生成する(ステップ804)。たとえば、ニューラルネットワークを実施する要求およびニューラルネットワークへの入力を特定する情報を受け取ることに基づいて、システムは、1より大きいストライドを有するニューラルネットワーク層を処理するためのマスキングテンソルを生成する。
マスキングテンソルのサイズは、特定される入力の次元、または1より大きいストライドを有するニューラルネットワーク層への入力テンソルの予想サイズに基づいて、判断することができる。マスキングテンソルに含まれる値は、1より大きいストライドを有するニューラルネットワーク層の指定されたストライドに基づいて判断されてもよい。たとえば、ニューラルネットワーク層の指定されたストライドが4である場合、マスキングテンソルの4つおきの要素は1に設定され得る一方、マスキングテンソルの他のすべてのエントリは0に設定され得る。いくつかの実装形態では、ニューラルネットワークは、1より大きいストライドを有する複数の層を含み得、システムは、1より大きいストライドを有する層の各々について対応するマスキングテンソルを生成し得る。さらに、いくつかの実装形態では、システムは、たとえばメモリに、マスキング行列またはマスキング行列成分のライブラリを格納し、そのライブラリを用いることに基づいてマスキング行列を選択または生成することができる。
システムは、専用ハードウェア回路110によって実行されると、専用ハードウェア回路110に、ニューラルネットワークによる入力テンソルの処理中に、マスキングテンソルを用いて1より大きいストライドを有する畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成する(ステップ806)。たとえば、要求に応答して、ニューラルネットワーク実装エンジン150は、専用ハードウェア回路110に指示またはそれを制御して、専用ハードウェア回路110が1より大きいストライドを有する畳み込みニューラルネットワーク層を用いて入力テンソルを処理した場合に等価である出力テンソル、すなわち出力ベクトルを生成するよう、命令を生成することができる。
システムは命令およびマスキングテンソルを専用ハードウェア回路110に送る(ステップ808)。たとえば、ニューラルネットワーク実装エンジン150は、命令を専用ハードウェア回路110に与えることができ、専用ハードウェア回路110は、たとえば図3のホストインターフェース302において命令を受け取ることができる。ニューラルネットワーク実装エンジン150は、ホストインターフェース302によっても受け取られ得る、ニューラルネットワーク計算のための他の命令および/またはパラメータも与え得る。
図9は、1より大きいストライドを有するニューラルネットワーク計算層を計算するための例示的なプロセス900のフローチャートである。たとえば、プロセス900は、ニューラルネットワーク実装エンジン150から受け取られる命令に基づいて、図1の専用ハードウェア回路110によって実行することができる。
たとえば、1より大きいストライドを有するニューラルネットワーク層を実装するための命令を受け取ると、ホストインターフェース302は命令を図3のシーケンサ306に送ることができ、シーケンサ306は、ニューラルネットワーク計算を実行するよう、命令を、図3の専用ハードウェア回路300を制御する低レベル制御信号に変換することができる。
受け取られた命令に基づいて、専用ハードウェア回路300は、畳み込みニューラルネットワーク層への入力テンソルを、1のストライドを有する第2の畳み込みニューラルネットワーク層を用いて処理する(ステップ902)。たとえば、受け取られた命令から生成される制御信号は、畳み込まれたテンソルを生成するべく、専用ハードウェア回路300を制御して、1に等しいがそれ以外は畳み込みニューラルネットワーク層に等しいストライドを有する第2の畳み込みニューラルネットワーク層を用いて、入力テンソル、たとえばユニファイドバッファ308に格納されるニューラルネットワークの先行する層の出力または指定されたもしくは専用ハードウェア回路300に与えられるニューラルネットワークへの入力を処理する。
第2の畳み込みニューラルネットワーク層を用いて入力テンソルを処理するために、制御信号は、入力テンソル、すなわちニューラルネットワークへの入力または先行するニューラルネットワークの出力に対応し得る活性化入力を図3の行列計算ユニット312に供給するように、ユニファイドバッファ308を制御し得る。制御信号はまた、図3のダイレクトメモリアクセスエンジン304および/またはダイナミックメモリ310に命令して、1のストライド、すなわち単位ストライドを有するが、それ以外は1より大きいストライドを有するニューラルネットワーク層と同等である第2のニューラルネットワーク層に対応する重みを行列計算ユニット312に与えてもよい。
シーケンサ306はさらに、重みを用いて、たとえば図3に関して説明したプロセスを用いて、入力テンソルを処理するように行列計算ユニット312を制御する命令を生成することができる。いくつかの実装形態では、行列計算ユニット312は、2015年9月3日に提出された米国特許出願第14/844,738号に記載されている技法を用いて畳み込みを実行し、その全体をここに引用により援用する。
行列計算ユニット312は、制御信号に基づいて計算を行い、畳み込まれたテンソルをベクトル計算ユニット314に出力する。たとえば、行列計算ユニット312は、行列計算ユニット312が生成した出力のベクトルをベクトル計算ユニット314に送る。出力のベクトルは、1のストライドを有するがそれ以外の点では1より大きいストライドを有するニューラルネットワーク層と同等であるニューラルネットワーク層に対応する重みを用いて入力テンソルを処理することに基づいて判定され得る。ベクトル計算ユニット314は、畳み込まれたテンソルをユニファイドバッファ308に格納することができる。
畳み込まれたテンソルを生成するために畳み込みニューラルネットワーク層を介して1のストライドで活性化入力を処理した後、専用ハードウェア回路300は、第2の畳み込みニューラルネットワーク層が1より大きいストライドを有する畳み込みネットワーク層のストライドを有すると仮定した場合に生成されなかったであろう要素を零出力する(ステップ904)。要素を零出力するとは、通常、その要素の現在の値を0に置き換えることを指す。値を取り消す、すなわち0にすることは、畳み込まれたテンソルとマスキングテンソル、すなわちニューラルネットワーク処理エンジン150によって生成され専用ニューラルネットワークに送られるマスキングテンソルとの要素ごとの乗算を実行することによって達成することができる。
入力テンソルが指定されたストライドで畳み込みニューラルネットワーク層によって処理された場合に生成されなかったであろう畳み込まれたテンソルの値を取り消すために、シーケンサ306は、制御信号を送って、行列乗算ユニット312に、畳み込まれたテンソルとマスキングテンソルとの要素ごとの乗算を実行させることができる。畳み込まれたテンソルは、シーケンサ306からの他の制御信号に基づいてユニファイドバッファ308から行列乗算ユニット312に送られてもよく、マスキングテンソルは、シーケンサ306からダイレクトメモリアクセスエンジン304またはダイナミックメモリ310への制御信号に基づいて、すなわち、マスキングテンソルが専用ハードウェア回路300によって受け取られ、ダイナミックメモリ310に格納された後、行列計算ユニット312に送られてもよい。
一般に、図8に関して説明したように、マスキングテンソルは、1より大きいストライドを有する畳み込みニューラルネットワーク層を用いて入力テンソルを処理することによって生成されるであろう要素に対応する要素位置に単位値要素、すなわち1の値を含み、他のすべての位置、すなわち1より大きいストライドを有する畳み込みニューラルネットワーク層を用いて活性化値を処理することによって生成されないであろう要素に対応する位置に0値要素を含むベクトルである。
マスキングテンソルは、たとえば、ダイナミックメモリ310に格納されてもよく、シーケンサ306は、マスキングテンソルをダイナミックメモリ310から行列計算ユニット312に送るよう制御信号を送信してもよい。たとえば、専用ハードウェア回路300に与えられる命令は、マスキングテンソルを識別してもよく、たとえばマスキングテンソルのダイナミックメモリ310内の位置を与えてもよく、またはその場合にダイナミックメモリ310に格納されるマスキングテンソルを定義するデータを含んでもよく、シーケンサ306は、ダイナミックメモリ310内のその位置に格納されるマスキングテンソルを行列計算ユニット312に送らせる制御信号を送信してもよい。さらに、シーケンサ306は、ユニファイドバッファ308に格納される畳み込まれたテンソルを行列計算ユニット312に与えさせるための制御信号を与えることができる。そして、行列計算ユニット312は、畳み込まれたテンソルとマスキングテンソルとの要素ごとの乗算を行い、修正された畳み込まれたテンソルを生成する。修正された畳み込まれたテンソルは、行列計算ユニット312からベクトル計算ユニット314によって受け取られることができる。ベクトル計算ユニット314は、任意選択で、修正された畳み込まれたテンソルをユニファイドバッファ308に格納することができる。
マスキングテンソルでの要素ごとの乗算のため、修正された畳み込まれたテンソルは、入力テンソルが1より大きい指定されたストライドを有するニューラルネットワーク層を用いて処理された場合に出力されるであろう値を含む。修正された畳み込まれたテンソルは、入力テンソルが指定されたストライドを有する畳み込みニューラルネットワークで処理された場合に出力されなかったであろう、1のストライドでの畳み込みニューラルネットワーク層を用いた入力テンソルの計算において出力される値に対応する位置に0を含む。他の実装形態では、畳み込まれたテンソルの要素を0にする他の方法を利用することができる。たとえば、畳み込まれた行列は、修正された形でユニファイドバッファ308または他のメモリにおいて書き直され得、指定されたストライドを有する畳み込みニューラルネットワークを用いての入力テンソルの計算において出力される値に対応する要素は変更されず、他の要素は0として書き込まれる。
ベクトル計算ユニット314は、修正された畳み込まれたテンソルを受け取り、修正された畳み込まれたテンソルに対して最大プーリングを実行して、1より大きいストライドを有する畳み込みニューラルネットワーク層の層出力テンソルを生成する(ステップ906)。たとえば、ベクトル計算ユニット314は、行列計算ユニット312から修正された畳み込まれたテンソルを受け取り、プーリング回路608を用いて、修正された畳み込まれたテンソルに対して最大プーリングを実行することができる。最大プーリングは、データのセットを受け取り、そのデータの1つまたは複数のサブセットの各々について、サブセット内の要素の最大値を出力する操作である。修正された畳み込まれたテンソルに対して最大プーリングを実行すると、修正された畳み込まれたテンソルの要素の複数のサブセットの各々について、サブセットの最大値を含むテンソルが得られる結果となる。ベクトル計算ユニット314は、畳み込みニューラルネットワーク層の指定されたストライドに基づいて決定される修正された畳み込まれたテンソルのウィンドウについて最大プーリングを実行することができる。たとえば、ストライドが2の場合、プーリング回路608は、2×2ウィンドウを用いて最大プーリングを実行し、各2×2ウィンドウからの最大値要素を含む層出力テンソルを生成する。4のストライドを有するニューラルネットワーク層の場合、プーリング回路608は、4×4ウィンドウを用いて最大プーリングを実行し、各4×4ウィンドウからの最大値要素を含む層出力テンソルを生成する。最大プーリング操作の結果は、ベクトル計算ユニット314によってユニファイドバッファ308に格納され、その結果とは、専用ハードウェア回路300が1より大きいストライドを有するニューラルネットワーク層を用いて入力テンソルを処理した場合に生成されるであろう出力と等価の出力テンソルである。ニューラルネットワークの後続の層の処理は、最終的にニューラルネットワークの推論を取得するよう、層出力テンソルを用いて実行されてもよい。
図10は、1より大きいストライドでのニューラルネットワークの所与の層に対する計算の例を示す。図10の例は、図7のプロセスおよび図2の専用ハードウェア回路300を用いて実行することができる。例として、図10の例は、4のストライド有する畳み込みニューラルネットワーク層を活性化値の8×8アレイに適用する。畳み込みニューラルネットワーク層は、活性化値の8×8アレイに適用される重みの4×4カーネルを有してもよい。活性化値は、ニューラルネットワークに入力される画像の8×8部分、すなわち画像の8×8部分に対応する値のシーケンスを表すことができる。代替的に、活性化値の8×8アレイは、別の入力テンソル、たとえばニューラルネットワークの先行する層の出力に対応する入力テンソルの8×8部分を表すことができる。
図10の部分(a)において、8×8入力テンソルは、1のストライドを有するが他の点では1より大きいストライドを有する畳み込みニューラルネットワーク層と同等である畳み込みニューラルネットワーク層を用いて処理される。したがって、部分(a)に示される重みの4×4のカーネルは、最初に、入力テンソルの最初の4行および最初の4列に対応する入力テンソルの要素に適用され得る(値は示されてはいない)。処理の結果は、結果として得られる畳み込まれたテンソルの第1の要素、すなわち、図10の部分(a)に示される、結果として得られる畳み込まれたテンソルの要素「a」であり得る。
入力テンソルの処理は、指定された4のストライドではなく、1のストライドで畳み込みニューラルネットワーク層を用いて実行されるので、部分(a)に示された重みの4×4セットは、活性化値アレイの最初の4行および入力テンソルの第2列から第5列に対応する入力テンソルの要素に適用されてもよい(値は示されず)。処理結果は、畳み込まれたテンソルの第2の要素、すなわち、図10の部分(a)に示す畳み込み結果の要素「b」である。重みの4×4セットを活性化値アレイに1のストライドを用いて適用することによって、すなわち重みの4×4セットを活性化値アレイに増分的に列方向および行方向の両方に適用することによって、プロセスを繰り返してもよい。この処理の結果、図10の部分(a)に示す8×8の畳み込まれたテンソルが得られる。
次に、図9の部分(b)に示すように、畳み込まれたテンソルとマスキングテンソルとの間で要素ごとの乗算が行われ、修正された畳み込まれたテンソルが得られる。マスキングテンソルのサイズは、入力テンソルのサイズまたは畳み込まれたテンソルのサイズに基づいて判断され、それは、1のストライドを有する畳み込みニューラルネットワーク層を用いる図10の部分(a)での処理のため、一般的に等しい。マスキングテンソルは、入力テンソルが指定されたストライドを有する畳み込みニューラルネットワーク層を用いて処理された場合に生成されるであろう値に対応する位置に、単位値、すなわち1を含む。その場合、一般に、マスキングテンソルにおける単位値エントリの位置は、畳み込みニューラルネットワーク層の指定されたストライドに依存する。図10の例では、畳み込みニューラルネットワーク層は4のストライドを有するので、マスキングテンソルは列方向および行方向の両方において4つおきの位置に単位値を含むであろう。マスキングテンソルの他のエントリには0値が割り当てられ、畳み込まれたテンソルとマスキングテンソルとの要素ごとの乗算は、畳み込みニューラルネットワークが指定されたストライドを有する状態で入力テンソルが処理された場合に生成されないであろうすべての値を0にする結果となることになる。
修正された畳み込まれたテンソルを生成するために、畳み込まれたテンソルとマスキングテンソルとの要素ごとの乗算が実行される。図10に示すように、要素ごとの乗算の後、畳み込まれたテンソルの4つおきの要素は維持され、畳み込まれたテンソルの要素の残りはマスキング行列の対応する0値要素との乗算により0になる。したがって、8×8の畳み込まれたテンソルの要素のうち、4つの要素だけが非0のままである。
いくつかの実装形態では、最初に、畳み込まれたテンソルの要素に非単位係数を乗算し、続いて、それらの要素に第2の非単位係数を乗算することによって、同様の結果を得ることができる。たとえば、マスキングテンソルは、入力テンソルが指定されたストライドを有する畳み込みニューラルネットワーク層を用いて処理された場合に生成されるであろう値に対応する位置に、2(または他の値)を含んでもよい。したがって、上記の例に従って、畳み込まれたテンソルとマスキングテンソルとの要素ごとの乗算は、畳み込まれたテンソルの4つおきの要素が2倍になり、要素の残りが0である、修正された畳み込まれたテンソルを生成する。その後、修正された畳み込まれたテンソルの半分(または他の値の逆数)によるスカラー乗算が実行されてもよい。代替的に、修正された畳み込まれたテンソルと第2のマスキングテンソルとの要素ごとの乗算が実行されてもよく、第2のマスキングテンソルは、入力テンソルが指定されたストライドを有する畳み込みニューラルネットワーク層を用いて処理された場合に生成されるであろう値に対応する位置に2分の1の値を含む。
続いて、図10の部分(c)において修正された畳み込み結果アレイに対して最大プーリングが行われる。最大プーリングの結果は、入力テンソルがストライドが4の畳み込みニューラルネットワーク層によって処理された場合に得られるであろう結果と同等である。図6のプロセスを用いて、修正された畳み込まれたテンソルに対して最大プーリングが実行され、修正された畳み込まれたテンソルの各4×4ウィンドウの最大値が識別される。次いで、最大プーリングの結果は、4のストライドを有する畳み込みニューラルネットワーク層の出力テンソルとして格納される。入力テンソルは8×8アレイであったため、4のストライドを有するニューラルネットワーク層による処理は2×2出力アレイをもたらす。2×2出力アレイは、図2のユニファイドバッファ308に、たとえばラスタ順で格納することができる。2×2出力アレイの値は、ニューラルネットワークの次の層への入力として与えられてもよい。
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの1つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上でエンコードされたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、たとえばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝搬される信号上でエンコードすることができる。コンピュータ記憶媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つ以上の組合せであり得る。
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイスおよびマシンを包含する。当該装置は、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)といった特定目的論理回路を含み得る。当該装置は、ハードウェアに加えて、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、または、それらの1つ以上の組合せを構成するコードといった、当該コンピュータプログラムについて実行環境を作成するコードをさらに含み得る。
(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプトまたはコードとも称され、または記載され得る)コンピュータプログラムは、コンパイル型もしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含む任意の形態のプログラミング言語で記述され得、スタンドアロンプログラムとして、または、モジュール、コンポーネント、サブルーチン、もしくは、コンピューティング環境で使用するのに好適な他のユニットとして任意の形態で展開され得る。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、対応する必要があるわけではない。プログラムは、当該プログラムに専用である単一のファイルにおいて、または、複数の連携ファイル(coordinated files)(たとえばコードの1つ以上のモジュール、サブプログラムまたは部分を格納するファイル)において、他のプログラムまたはデータ(たとえばマークアップ言語ドキュメントに格納される1つ以上のスクリプト)を保持するファイルの一部に格納され得る。コンピュータプログラムは、1つの場所に位置するかもしくは複数の場所にわたって分散され通信ネットワークによって相互接続される1つのコンピュータまたは複数のコンピュータ上で実行されるように展開され得る。
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成することにより機能を実行するよう1つ以上のプログラマブルコンピュータが1つ以上のコンピュータプログラムを実行することによって実行され得る。本プロセスおよび論理フローの実行、ならびに本装置の実施は、さらに、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)といった特殊目的論理回路系によってもなされ得る。
コンピュータプログラムの実行に好適であるコンピュータは、例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つ以上の大容量記憶装置を含むか、当該1つ以上の大容量記憶装置からデータを受け取るかもしくは当該1つ以上の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。しかしながら、コンピュータはそのような装置を有する必要はない。さらに、コンピュータはたとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶装置(たとえばユニバーサルシリアルバス(USB)フラッシュドライブ)といった別のデバイスに埋め込まれ得る。
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス;たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスク;光磁気ディスク;ならびにCD−ROMおよびDVD−ROMディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または特殊目的論理回路に組み込まれ得る。
ユーザとの対話を求めて、本明細書に記載される主題の実施形態は、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタといったユーザに対して情報を表示するための表示デバイスと、たとえばマウス、トラックボールといったユーザがコンピュータに入力を送ることができるキーボードおよびポインティングデバイスとを有するコンピュータ上で実現され得る。他の種類のデバイスが、同様に、ユーザとの対話を求めて用いられ得;たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックといった任意の形態の感覚フィードバックであり得;ユーザからの入力は、音響入力、音声入力、または触覚入力を含む任意の形態で受け取られ得る。加えて、コンピュータは、ユーザが使用するデバイスにドキュメントを送信しユーザが使用するデバイスからドキュメントを受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話し得る。
本明細書に記載される主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システムにおいて実現され得るか、たとえばアプリケーションサーバといったミドルウェアコンポーネントを含む計算システムにおいて実現され得るか、たとえば本明細書に記載される主題の実現例とユーザが対話することが可能であるグラフィカルユーザーインターフェイスもしくはウェブブラウザを有するクライアントコンピュータといったフロントエンドコンポーネントを含む計算システムにおいて実現され得るか、または1つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントの任意の組合せの計算システムにおいて実現され得る。システムのコンポーネントは、たとえば通信ネットワークといったデジタルデータ通信の任意の形態または媒体によって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、たとえばインターネットを含む。
計算システムはクライアントおよびサーバを含むことができる。クライアントとサーバとは一般に互いから遠隔にあり、典型的には通信ネットワークを通じて対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されるとともに互いに対してクライアント−サーバ関係を有するコンピュータプログラムによって発生する。
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
その他の実現例は、以下の例にまとめられる。
例1:ハードウェア回路上でニューラルネットワークを処理するよう要求を受け取ることを備え、ニューラルネットワークは、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含み、さらに、これに応答して、ハードウェア回路によって実行されると、ハードウェア回路に、ニューラルネットワークによる入力テンソルの処理中に、動作を実行することによって第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成することを備え、動作は、第1の畳み込みニューラルネットワーク層への入力テンソルを、1に等しいストライドを有するがそれ以外は第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素を零出力して、第2のテンソルを生成することと、第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを含む、方法。
例2:第1のテンソルの要素を零出力することは、第1のテンソルの要素のサブセットに0を乗算することと、サブセットに含まれていない第1のテンソルの要素に1を乗算することとを含む、例1の方法。
例3:第1のテンソルの要素を零出力することは、マスキングテンソルと第1のテンソルとの要素ごとの乗算を実行して第2のテンソルを生成することを含み、マスキングテンソルは、(i)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置において0を含み、(ii)マスキングテンソルの各他の要素位置において1を含む、例1の方法。
例4:マスキングテンソルは、ハードウェア回路によってアクセス可能なメモリに格納され、マスキングテンソルと第1のテンソルとの要素ごとの乗算は、ハードウェア回路に含まれる、ハードウェアにおいて実装されるベクトル計算ユニットによって実行される、例3の方法。
例5:第1のテンソルの要素を零出力することは、第1のマスキングテンソルと第1のテンソルとの要素ごとの乗算を実行して、修正された第1のテンソルを生成することを含み、第1のマスキングテンソルは、(i)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置において0を含み、(ii)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されたであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置においてそれぞれの非0値を含み、第1のテンソルの要素を零出力することはさらに、第2のマスキングテンソルと修正された第1のテンソルとの要素ごとの乗算を実行することを含み、第2のマスキングテンソルは、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合に生成されるであろう第1のテンソルの要素に対応する各要素位置において、第1のマスキングテンソルのそれぞれの非0値の逆数を含む、例1の方法。
例6:最大プーリングを実行することは、第1の畳み込みニューラルネットワーク層のストライドによって定義される第2のテンソルの1つまたは複数のウィンドウの各々について、ウィンドウ内の要素の最大値要素を取得することを含む、例1〜例5の1つの方法。
例7:第2のテンソルの1つまたは複数のウィンドウの各々は、畳み込みニューラルネットワーク層のストライドに対応する次元を有する矩形ウィンドウであり、第2のテンソルの異なる要素を含む、例6の方法。
例8:最大プーリングを実行することは、第2のテンソルの要素の1つまたは複数のサブセットの各々について、サブセットの最大値要素を取得することを含む、例1〜例7の1つの方法。
例9:第2のテンソル上で実行される最大プーリングは、ハードウェア回路のプーリング回路によって実行される、例1〜例8の1つの方法。
例10:畳み込みニューラルネットワーク層は、ニューラルネットワーク内の第1のニューラルネットワーク層であり、入力テンソルは、デジタル画像の、デジタル画像の画素に対応する要素を含む表現である、例1〜例9の1つの方法。
例11:入力テンソルはハードウェア回路のユニファイドバッファに格納され、第2の畳み込みニューラルネットワーク層の重みはハードウェア回路のダイナミックメモリに格納され、第2の畳み込みニューラルネットワーク層を用いて第1の畳み込みニューラルネットワーク層への入力テンソルを処理することは、入力テンソルをユニファイドバッファからハードウェアで実装されるハードウェア回路の行列計算ユニットに送ることと、ダイナミックメモリからハードウェア回路の行列計算ユニットに第2の畳み込みニューラルネットワーク層の重みを送ることと、ハードウェア回路の行列計算ユニットによって、第2の畳み込みニューラルネットワーク層の重みを用いて入力テンソルを処理して、第1のテンソルを生成することとを含む、例1〜例10の1つの方法。
例12:システムであって、ハードウェア回路と、命令を格納する1つまたは複数の記憶装置とを備え、命令は、ハードウェア回路によって実行されると、ハードウェア回路に動作を実行させるよう動作可能であり、動作は、1より大きいストライドを有する畳み込みニューラルネットワーク層への入力テンソルを、1に等しいストライドを有するがそれ以外は畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、第2の畳み込みニューラルネットワーク層が畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素を零出力して、第2のテンソルを生成することと、第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを含む、システム。
例13:第1のテンソルの要素を零出力することは、マスキングテンソルと第1のテンソルとの要素ごとの乗算を実行して第2のテンソルを生成することを含み、マスキングテンソルは、(i)第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素に対応するマスキングテンソルの各要素位置において0を含み、(ii)マスキングテンソルの各他の要素位置において1を含む、例12のシステム。
例14:マスキングテンソルは、ハードウェア回路によってアクセス可能なメモリに格納され、マスキングテンソルと第1のテンソルとの要素ごとの乗算は、ハードウェア回路に含まれる、ハードウェアで実装されるベクトル計算ユニットによって実行される、例13のシステム。
例15:最大プーリングを実行することは、第1の畳み込みニューラルネットワーク層のストライドによって定義される第2のテンソルの1つまたは複数のウィンドウの各々について、ウィンドウ内の要素の最大値要素を取得することを含む、例12〜例14の1つのシステム。
例16:第2のテンソルの1つまたは複数のウィンドウの各々は、畳み込みニューラルネットワーク層のストライドに対応する次元を有する矩形ウィンドウであり、第2のテンソルの異なる要素を含む、例15のシステム。
例17:第2のテンソル上で実行される最大プーリングは、ハードウェア回路のプーリング回路によって実行される、例12〜例16の1つのシステム。
例18:畳み込みニューラルネットワーク層は、ニューラルネットワーク内の第1のニューラルネットワーク層であり、入力テンソルは、デジタル画像の、デジタル画像の画素に対応する要素を含む表現である、例12〜例17の1つのシステム。
例19:入力テンソルはハードウェア回路のユニファイドバッファに格納され、第2の畳み込みニューラルネットワーク層の重みはハードウェア回路のダイナミックメモリに格納され、第2の畳み込みニューラルネットワーク層を用いて第1の畳み込みニューラルネットワーク層への入力テンソルを処理することは、入力テンソルをユニファイドバッファからハードウェアで実装されるハードウェア回路の行列計算ユニットに送ることと、ダイナミックメモリからハードウェア回路の行列計算ユニットに第2の畳み込みニューラルネットワーク層の重みを送ることと、ハードウェア回路の行列計算ユニットによって、第2の畳み込みニューラルネットワーク層の重みを用いて入力テンソルを処理して、第1のテンソルを生成することとを含む、例12〜例18の1つのシステム。
例20:コンピュータプログラムでエンコードされたコンピュータ可読記憶装置であって、コンピュータプログラムは、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに動作を実行させる命令を含み、動作は、ハードウェア回路上でニューラルネットワークを処理するよう要求を受け取ることを含み、ニューラルネットワークは、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含み、動作はさらに、これに応答して、ハードウェア回路によって実行されると、ハードウェア回路に、ニューラルネットワークによる入力テンソルの処理中に、動作を実行することによって第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成することを含み、動作は、第1の畳み込みニューラルネットワーク層への入力テンソルを、1に等しいストライドを有するがそれ以外は第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、第2の畳み込みニューラルネットワーク層が第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう第1のテンソルの要素を零出力して、第2のテンソルを生成することと、第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを含む、コンピュータ可読記憶装置。
主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。

Claims (20)

  1. ハードウェア回路上でニューラルネットワークを処理するよう要求を受け取ることを備え、前記ニューラルネットワークは、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含み、さらに、
    これに応答して、前記ハードウェア回路によって実行されると、前記ハードウェア回路に、前記ニューラルネットワークによる入力テンソルの処理中に、動作を実行することによって第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成することを備え、前記動作は、
    前記第1の畳み込みニューラルネットワーク層への前記入力テンソルを、1に等しいストライドを有するがそれ以外は前記第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、
    前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素を零出力して、第2のテンソルを生成することと、
    前記第2のテンソルに対して最大プーリングを実行して前記層出力テンソルを生成することとを含む、方法。
  2. 前記第1のテンソルの要素を零出力することは、
    前記第1のテンソルの要素のサブセットに0を乗算することと、
    前記サブセットに含まれていない前記第1のテンソルの要素に1を乗算することとを含む、請求項1に記載の方法。
  3. 前記第1のテンソルの要素を零出力することは、
    マスキングテンソルと前記第1のテンソルとの要素ごとの乗算を実行して前記第2のテンソルを生成することを含み、前記マスキングテンソルは、(i)前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素に対応する前記マスキングテンソルの各要素位置において0を含み、(ii)前記マスキングテンソルの各他の要素位置において1を含む、請求項1に記載の方法。
  4. 前記マスキングテンソルは、前記ハードウェア回路によってアクセス可能なメモリに格納され、前記マスキングテンソルと前記第1のテンソルとの要素ごとの乗算は、前記ハードウェア回路に含まれる、ハードウェアにおいて実装されるベクトル計算ユニットによって実行される、請求項3に記載の方法。
  5. 前記第1のテンソルの要素を零出力することは、
    第1のマスキングテンソルと前記第1のテンソルとの要素ごとの乗算を実行して、修正された第1のテンソルを生成することを含み、前記第1のマスキングテンソルは、(i)前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素に対応する前記マスキングテンソルの各要素位置において0を含み、(ii)前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されたであろう前記第1のテンソルの要素に対応する前記マスキングテンソルの各要素位置においてそれぞれの非0値を含み、前記第1のテンソルの要素を零出力することはさらに、
    第2のマスキングテンソルと前記修正された第1のテンソルとの要素ごとの乗算を実行することを含み、前記第2のマスキングテンソルは、前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合に生成されるであろう前記第1のテンソルの要素に対応する各要素位置において、前記第1のマスキングテンソルの前記それぞれの非0値の逆数を含む、請求項1に記載の方法。
  6. 最大プーリングを実行することは、前記第1の畳み込みニューラルネットワーク層のストライドによって定義される前記第2のテンソルの1つまたは複数のウィンドウの各々について、前記ウィンドウ内の要素の最大値要素を取得することを含む、請求項1に記載の方法。
  7. 前記第2のテンソルの前記1つまたは複数のウィンドウの各々は、前記畳み込みニューラルネットワーク層のストライドに対応する次元を有する矩形ウィンドウであり、前記第2のテンソルの異なる要素を含む、請求項6に記載の方法。
  8. 最大プーリングを実行することは、前記第2のテンソルの要素の1つまたは複数のサブセットの各々について、前記サブセットの最大値要素を取得することを含む、請求項1に記載の方法。
  9. 前記第2のテンソル上で実行される前記最大プーリングは、前記ハードウェア回路のプーリング回路によって実行される、請求項1に記載の方法。
  10. 前記畳み込みニューラルネットワーク層は、前記ニューラルネットワーク内の第1のニューラルネットワーク層であり、前記入力テンソルは、デジタル画像の、前記デジタル画像の画素に対応する要素を含む表現である、請求項1に記載の方法。
  11. 前記入力テンソルは前記ハードウェア回路のユニファイドバッファに格納され、前記第2の畳み込みニューラルネットワーク層の重みは前記ハードウェア回路のダイナミックメモリに格納され、前記第2の畳み込みニューラルネットワーク層を用いて前記第1の畳み込みニューラルネットワーク層への前記入力テンソルを処理することは、
    前記入力テンソルを前記ユニファイドバッファからハードウェアで実装される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記ダイナミックメモリから前記ハードウェア回路の前記行列計算ユニットに前記第2の畳み込みニューラルネットワーク層の前記重みを送ることと、
    前記ハードウェア回路の前記行列計算ユニットによって、前記第2の畳み込みニューラルネットワーク層の前記重みを用いて前記入力テンソルを処理して、前記第1のテンソルを生成することとを含む、請求項1に記載の方法。
  12. システムであって、
    ハードウェア回路と、
    命令を格納する1つまたは複数の記憶装置とを備え、前記命令は、前記ハードウェア回路によって実行されると、前記ハードウェア回路に動作を実行させるよう動作可能であり、前記動作は、
    1より大きいストライドを有する畳み込みニューラルネットワーク層への入力テンソルを、1に等しいストライドを有するがそれ以外は前記畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、
    前記第2の畳み込みニューラルネットワーク層が前記畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素を零出力して、第2のテンソルを生成することと、
    前記第2のテンソルに対して最大プーリングを実行して層出力テンソルを生成することとを含む、システム。
  13. 前記第1のテンソルの要素を零出力することは、
    マスキングテンソルと前記第1のテンソルとの要素ごとの乗算を実行して前記第2のテンソルを生成することを含み、前記マスキングテンソルは、(i)前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素に対応する前記マスキングテンソルの各要素位置において0を含み、(ii)前記マスキングテンソルの各他の要素位置において1を含む、請求項12に記載のシステム。
  14. 前記マスキングテンソルは、前記ハードウェア回路によってアクセス可能なメモリに格納され、前記マスキングテンソルと前記第1のテンソルとの要素ごとの乗算は、前記ハードウェア回路に含まれる、ハードウェアで実装されるベクトル計算ユニットによって実行される、請求項13に記載のシステム。
  15. 最大プーリングを実行することは、前記第1の畳み込みニューラルネットワーク層のストライドによって定義される前記第2のテンソルの1つまたは複数のウィンドウの各々について、前記ウィンドウ内の要素の最大値要素を取得することを含む、請求項12に記載のシステム。
  16. 前記第2のテンソルの前記1つまたは複数のウィンドウの各々は、前記畳み込みニューラルネットワーク層のストライドに対応する次元を有する矩形ウィンドウであり、前記第2のテンソルの異なる要素を含む、請求項15に記載のシステム。
  17. 前記第2のテンソル上で実行される前記最大プーリングは、前記ハードウェア回路のプーリング回路によって実行される、請求項12に記載のシステム。
  18. 前記畳み込みニューラルネットワーク層は、前記ニューラルネットワーク内の第1のニューラルネットワーク層であり、前記入力テンソルは、デジタル画像の、前記デジタル画像の画素に対応する要素を含む表現である、請求項12に記載のシステム。
  19. 前記入力テンソルは前記ハードウェア回路のユニファイドバッファに格納され、前記第2の畳み込みニューラルネットワーク層の重みは前記ハードウェア回路のダイナミックメモリに格納され、前記第2の畳み込みニューラルネットワーク層を用いて前記第1の畳み込みニューラルネットワーク層への前記入力テンソルを処理することは、
    前記入力テンソルを前記ユニファイドバッファからハードウェアで実装される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記ダイナミックメモリから前記ハードウェア回路の前記行列計算ユニットに前記第2の畳み込みニューラルネットワーク層の前記重みを送ることと、
    前記ハードウェア回路の前記行列計算ユニットによって、前記第2の畳み込みニューラルネットワーク層の前記重みを用いて前記入力テンソルを処理して、前記第1のテンソルを生成することとを含む、請求項12に記載のシステム。
  20. コンピュータプログラムでエンコードされたコンピュータ可読記憶装置であって、前記コンピュータプログラムは、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに動作を実行させる命令を含み、前記動作は、
    ハードウェア回路上でニューラルネットワークを処理するよう要求を受け取ることを含み、前記ニューラルネットワークは、1より大きいストライドを有する第1の畳み込みニューラルネットワーク層を含み、前記動作はさらに、
    これに応答して、前記ハードウェア回路によって実行されると、前記ハードウェア回路に、前記ニューラルネットワークによる入力テンソルの処理中に、動作を実行することによって前記第1の畳み込みニューラルネットワーク層の出力と等価な層出力テンソルを生成させる命令を生成することを含み、前記動作は、
    前記第1の畳み込みニューラルネットワーク層への前記入力テンソルを、1に等しいストライドを有するがそれ以外は前記第1の畳み込みニューラルネットワーク層と同等である第2の畳み込みニューラルネットワーク層を用いて処理することにより、第1のテンソルを生成することと、
    前記第2の畳み込みニューラルネットワーク層が前記第1の畳み込みニューラルネットワーク層のストライドを有する場合には生成されなかったであろう前記第1のテンソルの要素を零出力して、第2のテンソルを生成することと、
    前記第2のテンソルに対して最大プーリングを実行して前記層出力テンソルを生成することとを含む、コンピュータ可読記憶装置。
JP2019524156A 2016-11-10 2017-08-23 ハードウェアにおけるカーネルストライドの実行 Active JP6987860B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021195320A JP7394104B2 (ja) 2016-11-10 2021-12-01 ハードウェアにおけるカーネルストライドの実行

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/348,199 US10733505B2 (en) 2016-11-10 2016-11-10 Performing kernel striding in hardware
US15/348,199 2016-11-10
US15/467,382 US9721203B1 (en) 2016-11-10 2017-03-23 Performing kernel striding in hardware
US15/467,382 2017-03-23
PCT/US2017/048123 WO2018089079A1 (en) 2016-11-10 2017-08-23 Performing kernel striding in hardware

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2021195320A Division JP7394104B2 (ja) 2016-11-10 2021-12-01 ハードウェアにおけるカーネルストライドの実行

Publications (3)

Publication Number Publication Date
JP2019537139A true JP2019537139A (ja) 2019-12-19
JP2019537139A5 JP2019537139A5 (ja) 2020-06-25
JP6987860B2 JP6987860B2 (ja) 2022-01-05

Family

ID=59382805

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019524156A Active JP6987860B2 (ja) 2016-11-10 2017-08-23 ハードウェアにおけるカーネルストライドの実行
JP2021195320A Active JP7394104B2 (ja) 2016-11-10 2021-12-01 ハードウェアにおけるカーネルストライドの実行

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2021195320A Active JP7394104B2 (ja) 2016-11-10 2021-12-01 ハードウェアにおけるカーネルストライドの実行

Country Status (13)

Country Link
US (3) US10733505B2 (ja)
EP (2) EP3539059B1 (ja)
JP (2) JP6987860B2 (ja)
KR (2) KR102512936B1 (ja)
CN (2) CN114897132A (ja)
DE (2) DE202017105729U1 (ja)
DK (1) DK3539059T3 (ja)
FI (1) FI3539059T3 (ja)
GB (2) GB2556670B (ja)
HK (1) HK1254699A1 (ja)
IE (1) IE20170205A1 (ja)
SG (2) SG10201804284XA (ja)
WO (1) WO2018089079A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2021111633A1 (ja) * 2019-12-06 2021-06-10
JP2022030486A (ja) * 2020-08-07 2022-02-18 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2022137696A1 (ja) * 2020-12-25 2022-06-30 日立Astemo株式会社 情報処理装置、情報処理方法

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10733505B2 (en) * 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
TWI634490B (zh) * 2016-11-14 2018-09-01 美商耐能股份有限公司 卷積運算裝置及卷積運算方法
US10198401B2 (en) * 2016-12-30 2019-02-05 Intel Corporation Max pooling in a matrix processing architecture
TWI607389B (zh) * 2017-02-10 2017-12-01 耐能股份有限公司 卷積神經網路的池化運算裝置及方法
US10346944B2 (en) * 2017-04-09 2019-07-09 Intel Corporation Machine learning sparse computation mechanism
DE102018110687A1 (de) 2017-05-05 2018-11-08 Intel Corporation Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
US10643297B2 (en) * 2017-05-05 2020-05-05 Intel Corporation Dynamic precision management for integer deep learning primitives
KR102442055B1 (ko) * 2017-09-26 2022-09-13 삼성전자주식회사 전자 장치 및 그 제어 방법
EP3480748A1 (en) 2017-11-06 2019-05-08 Imagination Technologies Limited Neural network hardware
CN108108811B (zh) * 2017-12-18 2021-07-30 南京地平线机器人技术有限公司 神经网络中的卷积计算方法和电子设备
CN108133270B (zh) * 2018-01-12 2020-08-04 清华大学 卷积神经网络加速方法及装置
US11494620B2 (en) 2018-02-08 2022-11-08 Western Digital Technologies, Inc. Systolic neural network engine capable of backpropagation
US11769042B2 (en) 2018-02-08 2023-09-26 Western Digital Technologies, Inc. Reconfigurable systolic neural network engine
EP3738081A1 (en) * 2018-03-22 2020-11-18 Amazon Technologies Inc. Processing for multiple input data sets
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US20190332925A1 (en) * 2018-04-30 2019-10-31 International Business Machines Corporation Neural hardware accelerator for parallel and distributed tensor computations
US11783174B2 (en) 2018-05-04 2023-10-10 Apple Inc. Splitting of input data for processing in neural network processor
CN108764182B (zh) * 2018-06-01 2020-12-08 阿依瓦(北京)技术有限公司 一种优化的用于人工智能的加速方法和装置
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
CN109036460B (zh) * 2018-08-28 2020-01-07 百度在线网络技术(北京)有限公司 基于多模型神经网络的语音处理方法和装置
CN109190758B (zh) * 2018-09-04 2021-06-15 地平线(上海)人工智能技术有限公司 用于展开卷积神经网络的张量数据的方法和装置
EP3852015A4 (en) * 2018-09-30 2021-09-01 Huawei Technologies Co., Ltd. OPERATIONAL ACCELERATOR AND COMPRESSION PROCESS
CN110969247B (zh) * 2018-09-30 2024-04-09 北京地平线信息技术有限公司 基于神经网络的张量处理方法、装置和电子设备
CN109376843B (zh) * 2018-10-12 2021-01-08 山东师范大学 基于fpga的脑电信号快速分类方法、实现方法及装置
US11636325B2 (en) 2018-10-24 2023-04-25 Macronix International Co., Ltd. In-memory data pooling for machine learning
JP7315317B2 (ja) 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US11455370B2 (en) * 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
US11562229B2 (en) * 2018-11-30 2023-01-24 Macronix International Co., Ltd. Convolution accelerator using in-memory computation
US11934480B2 (en) 2018-12-18 2024-03-19 Macronix International Co., Ltd. NAND block architecture for in-memory multiply-and-accumulate operations
US20200202198A1 (en) * 2018-12-21 2020-06-25 Waymo Llc Neural network processor
CN109919321A (zh) * 2019-02-01 2019-06-21 京微齐力(北京)科技有限公司 单元具有本地累加功能的人工智能模块及系统芯片
US11556764B2 (en) * 2019-03-01 2023-01-17 Microsoft Technology Licensing, Llc Deriving a concordant software neural network layer from a quantized firmware neural network layer
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US20200311543A1 (en) * 2019-03-30 2020-10-01 Microsoft Technology Licensing, Llc Embedded learning for response prediction in content item relevance
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
CN110135580B (zh) * 2019-04-26 2021-03-26 华中科技大学 一种卷积网络全整型量化方法及其应用方法
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
KR102373802B1 (ko) * 2019-06-12 2022-03-16 주식회사 사피온코리아 신경망 연산 효율 증대를 위한 신경망 가속기 및 그의 동작 방법
US11487998B2 (en) * 2019-06-17 2022-11-01 Qualcomm Incorporated Depth-first convolution in deep neural networks
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays
TWI774067B (zh) * 2019-10-18 2022-08-11 旺宏電子股份有限公司 記憶體裝置及其記憶體內計算方法
JP7462140B2 (ja) 2019-10-29 2024-04-05 国立大学法人 熊本大学 ニューラルネットワーク回路及びニューラルネットワーク演算方法
CN110852424B (zh) * 2019-11-15 2023-07-25 广东工业大学 一种对抗生成网络的处理方法和装置
CN111027683A (zh) * 2019-12-09 2020-04-17 Oppo广东移动通信有限公司 数据处理方法、装置、存储介质及电子设备
US11604975B2 (en) 2020-04-09 2023-03-14 Apple Inc. Ternary mode of planar engine for neural processor
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
US11488066B2 (en) * 2020-04-21 2022-11-01 SiMa Technologies, Inc. Efficient convolution of multi-channel input samples with multiple kernels
KR102430837B1 (ko) * 2020-08-24 2022-08-09 울산과학기술원 기계학습 모델에 포함된 복수의 레이어들을 분할하고, 분할한 레이어들을 수행하는 프로세서를 결정하는 방법 및 상기 방법을 수행하는 장치
CN112070067B (zh) * 2020-10-12 2023-11-21 乐普(北京)医疗器械股份有限公司 一种光体积描计信号的散点图分类方法和装置
KR102361249B1 (ko) * 2021-08-02 2022-02-14 오픈엣지테크놀로지 주식회사 브로드캐스팅 멀티플라이 최적화 방법 및 이를 이용한 하드웨어 가속기, 이를 이용한 컴퓨팅 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150278642A1 (en) * 2014-04-01 2015-10-01 Superfish Ltd. Neural network image representation
JP2016153984A (ja) * 2015-02-20 2016-08-25 株式会社デンソーアイティーラボラトリ ニューラルネットワーク処理装置、ニューラルネットワーク処理方法、検出装置、検出方法、および、車両

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6505224B1 (en) 1999-09-29 2003-01-07 Sun Microsystems, Inc. System and computer-implemented method for performing multi-stage fast Walsh transform
US7107304B2 (en) 2001-11-30 2006-09-12 Apple Computer, Inc. Single-channel convolution in a vector processing computer system
US7653675B2 (en) 2005-08-08 2010-01-26 Freescale Semiconductor, Inc. Convolution operation in a multi-mode wireless processing system
JP5075861B2 (ja) 2009-03-16 2012-11-21 株式会社東芝 画像処理装置及び画像処理方法
US8583896B2 (en) * 2009-11-13 2013-11-12 Nec Laboratories America, Inc. Massively parallel processing core with plural chains of processing elements and respective smart memory storing select data received from each chain
US8458635B2 (en) 2009-12-04 2013-06-04 Synopsys, Inc. Convolution computation for many-core processor architectures
US9811775B2 (en) 2012-12-24 2017-11-07 Google Inc. Parallelizing neural networks during training
US9858220B2 (en) * 2014-03-17 2018-01-02 Purdue Research Foundation Computing architecture with concurrent programmable data co-processor
US20150311050A1 (en) * 2014-04-28 2015-10-29 Thermo Finnigan Llc Method for Determining a Spectrum from Time-Varying Data
CN104035751B (zh) * 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
US20160026912A1 (en) * 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
FR3025344B1 (fr) * 2014-08-28 2017-11-24 Commissariat Energie Atomique Reseau de neurones convolutionnels
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
EP3035204B1 (en) 2014-12-19 2018-08-15 Intel Corporation Storage device and method for performing convolution operations
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US10762894B2 (en) * 2015-03-27 2020-09-01 Google Llc Convolutional neural networks
CN104915322B (zh) * 2015-06-09 2018-05-01 中国人民解放军国防科学技术大学 一种卷积神经网络硬件加速方法
US9734567B2 (en) * 2015-06-24 2017-08-15 Samsung Electronics Co., Ltd. Label-free non-reference image quality assessment via deep neural network
CN105488565A (zh) * 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
CN105426517B (zh) * 2015-12-02 2020-02-18 上海越峰信息科技有限公司 一种具有图像处理功能的智能存储设备
CN105589938A (zh) * 2015-12-13 2016-05-18 公安部第三研究所 基于fpga的图像检索系统及检索方法
US10460231B2 (en) * 2015-12-29 2019-10-29 Samsung Electronics Co., Ltd. Method and apparatus of neural network based image signal processor
CN105681628B (zh) * 2016-01-05 2018-12-07 西安交通大学 一种卷积网络运算单元及可重构卷积神经网络处理器和实现图像去噪处理的方法
CN105678379B (zh) * 2016-01-12 2020-08-07 腾讯科技(深圳)有限公司 一种cnn的处理方法和装置
CN205621018U (zh) * 2016-02-26 2016-10-05 陈进民 手机细胞/卷积神经网络加速器
US10706348B2 (en) 2016-07-13 2020-07-07 Google Llc Superpixel methods for convolutional neural networks
US10402697B2 (en) * 2016-08-01 2019-09-03 Nvidia Corporation Fusing multilayer and multimodal deep neural networks for video classification
US9779786B1 (en) * 2016-10-26 2017-10-03 Xilinx, Inc. Tensor operations and acceleration
US10733505B2 (en) * 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150278642A1 (en) * 2014-04-01 2015-10-01 Superfish Ltd. Neural network image representation
JP2016153984A (ja) * 2015-02-20 2016-08-25 株式会社デンソーアイティーラボラトリ ニューラルネットワーク処理装置、ニューラルネットワーク処理方法、検出装置、検出方法、および、車両

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CHEN ZHANG ET AL.: "Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks", PROCEEDINGS OF THE 2015 ACM/SIGDA INTERNATIONAL SYMPOSIUM ON FIELD-PROGRAMMABLE GATE ARRAYS, JPN7021001714, 22 February 2015 (2015-02-22), pages 161 - 170, XP055265150, ISSN: 0004508649, DOI: 10.1145/2684746.2689060 *
CLEMENT FARABET ET AL.: "CNP: An FPGA-based processor for Convolutional Networks", 2009 INTERNATIONAL CONFERENCE ON FIELD PROGRAMMABLE LOGIC AND APPLICATIONS, JPN6021017980, 31 August 2009 (2009-08-31), pages 32 - 37, XP055542273, ISSN: 0004508650, DOI: 10.1109/FPL.2009.5272559 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2021111633A1 (ja) * 2019-12-06 2021-06-10
JP7298713B2 (ja) 2019-12-06 2023-06-27 日本電気株式会社 パラメータ最適化装置、パラメータ最適化方法、およびパラメータ最適化プログラム
JP2022030486A (ja) * 2020-08-07 2022-02-18 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2022137696A1 (ja) * 2020-12-25 2022-06-30 日立Astemo株式会社 情報処理装置、情報処理方法
JP7413249B2 (ja) 2020-12-25 2024-01-15 日立Astemo株式会社 情報処理装置、情報処理方法

Also Published As

Publication number Publication date
SG10201804284XA (en) 2018-07-30
KR102512936B1 (ko) 2023-03-21
EP3539059B1 (en) 2024-02-28
DE102017121887A1 (de) 2018-05-17
WO2018089079A1 (en) 2018-05-17
US10733505B2 (en) 2020-08-04
KR102385843B1 (ko) 2022-04-11
US11816532B2 (en) 2023-11-14
IE20170205A1 (en) 2018-05-16
FI3539059T3 (fi) 2024-05-24
DK3539059T3 (da) 2024-05-27
JP6987860B2 (ja) 2022-01-05
CN114897132A (zh) 2022-08-12
KR20190084088A (ko) 2019-07-15
KR20220047680A (ko) 2022-04-18
SG10201707700WA (en) 2018-06-28
EP4336411A2 (en) 2024-03-13
DE202017105729U1 (de) 2018-01-03
US20180129936A1 (en) 2018-05-10
CN108073983A (zh) 2018-05-25
US9721203B1 (en) 2017-08-01
JP2022037022A (ja) 2022-03-08
GB201715309D0 (en) 2017-11-08
GB202008121D0 (en) 2020-07-15
EP4336411A3 (en) 2024-04-24
GB2583594A (en) 2020-11-04
HK1254699A1 (zh) 2019-07-26
GB2556670A (en) 2018-06-06
JP7394104B2 (ja) 2023-12-07
EP3539059A1 (en) 2019-09-18
CN108073983B (zh) 2022-04-26
GB2583594B (en) 2021-07-28
US20200334536A1 (en) 2020-10-22
GB2556670B (en) 2020-07-15

Similar Documents

Publication Publication Date Title
JP7394104B2 (ja) ハードウェアにおけるカーネルストライドの実行
JP7346510B2 (ja) ニューラルネットワークプロセッサにおけるベクトル計算ユニット
US11704547B2 (en) Transposing neural network matrices in hardware
JP6640243B2 (ja) ニューラルネットワークプロセッサにおけるバッチ処理
JP2020506454A (ja) ハードウェアにおける平均プーリングの実行

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200507

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200507

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210421

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210525

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210811

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211102

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211201

R150 Certificate of patent or registration of utility model

Ref document number: 6987860

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150