JP2020506454A - ハードウェアにおける平均プーリングの実行 - Google Patents

ハードウェアにおける平均プーリングの実行 Download PDF

Info

Publication number
JP2020506454A
JP2020506454A JP2019531384A JP2019531384A JP2020506454A JP 2020506454 A JP2020506454 A JP 2020506454A JP 2019531384 A JP2019531384 A JP 2019531384A JP 2019531384 A JP2019531384 A JP 2019531384A JP 2020506454 A JP2020506454 A JP 2020506454A
Authority
JP
Japan
Prior art keywords
tensor
input
neural network
elements
hardware circuit
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
JP2019531384A
Other languages
English (en)
Other versions
JP6900487B2 (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
Priority claimed from US15/377,196 external-priority patent/US10032110B2/en
Application filed by Google LLC filed Critical Google LLC
Publication of JP2020506454A publication Critical patent/JP2020506454A/ja
Application granted granted Critical
Publication of JP6900487B2 publication Critical patent/JP6900487B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/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/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/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models

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)
  • Evolutionary Computation (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Advance Control (AREA)

Abstract

平均プーリング層を含むニューラルネットワークをハードウェア回路上で実現することを求める要求を受け、それに応じて命令を生成する、方法およびシステムであって、命令は、ハードウェア回路によって実行されると、ハードウェア回路に、ニューラルネットワークによるネットワーク入力の処理中に、以下の演算を実行することによって平均プーリングニューラルネットワーク層の出力に相当する層出力テンソルを生成させ、上記演算は、平均プーリングニューラルネットワーク層に対する入力テンソルと、カーネルとの畳み込みを実行することにより、第1のテンソルを生成することを含み、カーネルは、平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有し、各々が恒等行列である要素で構成されており、さらに、第1のテンソルの各要素を、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することを含む。

Description

背景
本明細書は、ハードウェアにおけるニューラルネットワーク推論の計算に関する。
ニューラルネットワークは、受けた入力に対する出力、たとえば分類を生成するために1つ以上の層を用いる機械学習モデルである。ニューラルネットワークの中には、出力層に加えて1つ以上の隠れ層を含むものがある。各隠れ層の出力は、ネットワーク内の次の層、すなわち当該ネットワークの次の隠れ層または出力層への入力として使用される。ネットワークの各層は、対応するセットのパラメータの現在の値に従い、受けた入力から出力を生成する。
概要
概して、本明細書はニューラルネットワーク推論を計算する専用ハードウェア回路について説明する。
概して、本明細書に記載の主題の1つの革新的な側面は、平均プーリングニューラルネットワーク層を含むニューラルネットワークをハードウェア回路上で処理することを求める要求を受け、それに応じて命令を生成する、方法およびシステムを含む。命令は、ハードウェア回路によって実行されると、ハードウェア回路に、ニューラルネットワークによるネットワーク入力の処理中に、以下の演算を実行することによって平均プーリングニューラルネットワーク層の出力に相当する層出力テンソルを生成させ、上記演算は、平均プーリングニューラルネットワーク層に対する入力テンソルと、カーネルとの畳み込みを実行することにより、第1のテンソルを生成することを含み、カーネルは、平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有し、各々が恒等行列である要素で構成されている。上記演算は、さらに、第1のテンソルの各要素を、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することを含む。
実装形態は以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、本主題の革新的な側面は、初期出力テンソルのエッジ要素を第1のスケーリングファクタによってリスケーリングし、初期出力テンソルのコーナー要素を第2のスケーリングファクタによってリスケーリングすることにより、出力テンソルを生成することを含む。第1のスケーリングファクタは、第1のテンソルのエッジ要素を生成するために畳み込みを実行する際にカーネルの要素で乗算される入力テンソルの要素の数に基づいており、第2のスケーリングファクタは、第1のテンソルのコーナー要素を生成するために畳み込みを実行する際にカーネルの要素で乗算される入力テンソルの要素の数に基づいている。いくつかの実装形態において、革新的な側面は、第1のテンソルのエッジに隣接する要素を第3のスケーリングファクタによってリスケーリングし、第1のテンソルのコーナーに隣接する要素を第4のスケーリングファクタによってリスケーリングすることにより、出力テンソルを生成することを含む。
実装形態は、以下の特徴のうちの1つ以上をさらに含み得る。入力テンソルとカーネルとの畳み込みを実行することによって第1のテンソルを生成することは、入力テンソルにゼロを埋め込むことによってゼロ埋込み入力テンソルを生成することと、ゼロ埋込み入力テンソルとカーネルとの畳み込みを実行することによって第1のテンソルを生成することとを含む。第1のテンソルの各要素を平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、第1のファクタによる、第1のテンソルの各要素の第1の乗算を実行することを含み、第1のファクタは、(i)出力テンソルのコーナー要素を生成するために畳み込みを実行する際に、平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有するカーネルの要素で乗算される、入力テンソルの要素の数と、(ii)出力テンソルのエッジ要素を生成するために畳み込みを実行する際に、平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有するカーネルの要素で乗算される、入力テンソルの要素の数と、(iii)平均プーリングニューラルネットワーク層のウィンドウの要素の数との最小公倍数であり、1つ以上の第2のファクタによる、第1のテンソルの各要素の第2の乗算を実行することを含み、各第2のファクタは、第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はまた、ベクトル計算ユニット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ストライドシフトし、出力テンソルを生成する。このようなシナリオにおいては、出力テンソルは入力テンソルの次元と一致する次元を有することになる。次に、出力テンソルを、ニューラルネットワークの推論として、または、ニューラルネットワークの次の層に対する入力テンソルとして提供することができる。
いくつかのニューラルネットワークは他のタイプのプーリング層を含み得る。一般的に、これらのプーリング層が生成するテンソルの各要素は、ある演算、たとえば代数演算の結果であり、この結果は入力テンソルの要素のサブセットに適用される。たとえば、最大プーリング層または最小プーリング層は、最大または最小プーリングのためのウィンドウを指定することができ、プーリング層によって生成される出力テンソルの各要素は、入力テンソルの要素の対応する領域の最大値または最小値である。
専用ハードウェア回路110上で行列演算を実行する主ハードウェアユニットは行列計算ユニット120であるが専用ハードウェア回路110はハードウェアでその他のニューラルネットワーク演算を実行するその他の回路を含み得るので、専用ハードウェア回路110は平均プーリング層の出力を直接計算することができない。平均プーリング層を含むニューラルネットワークを実現するために、ニューラルネットワーク実現エンジン150は命令を生成し、命令は、ニューラルネットワークによるニューラルネットワーク入力の処理中に専用ハードウェア回路110によって実行されると、専用ハードウェア回路110にハードウェアで他の演算を実行させて、ニューラルネットワークの平均プーリング層の仕様を満たす出力テンソルを生成する。具体的には、これらの命令を使用することにより、行列乗算ユニット120およびベクトル計算ユニット140を制御するための制御信号を生成して演算を実行し、この演算の結果として平均プーリング層の使用を満たすテンソルを出力する。これらの命令およびその他の演算については以下で図6〜図10を参照しながらより詳細に説明する。
図2は、専用ハードウェア回路を用いてニューラルネットワークの所与の層について計算を実行するための一例としてのプロセス200のフロー図である。便宜上、方法200は、方法200を実行する1つまたは複数の回路を有するシステムに関して説明される。方法200は、受けた入力から推論を計算するために、ニューラルネットワークの各層に対して実行することができる。
システムは、所与の層について重み入力のセット(ステップ202)および活性化入力のセット(ステップ204)を受ける。重み入力のセットおよび活性化入力のセットは、専用ハードウェア回路のダイナミックメモリおよびユニファイドバッファからそれぞれ受けることができる。いくつかの実装形態では、重み入力のセットと活性化入力のセットとの両方をユニファイドバッファから受けることができる。
システムは、専用ハードウェア回路の行列乗算ユニットを用いて、重み入力および活性化入力から累積値を生成する(ステップ206)。いくつかの実装形態では、累積値は、重み入力のセットと活性化入力のセットとの内積である。すなわち、層内のすべての重みのサブセットである1セットの重みについて、システムは各重み入力を各活性化入力と乗算し、それらの積を合計して累積値を形成することができる。システムは、次いで、他のセットの重みと他のセットの活性化入力との内積を計算することができる。
システムは、専用ハードウェア回路のベクトル計算ユニットを用いて累積値から層出力を生成することができる(ステップ208)。いくつかの実装形態では、ベクトル計算ユニットは、累積値に活性化関数を適用する。これについては、さらに以下で図5を参照しながら説明する。層の出力は、ニューラルネットワーク内の次の層への入力として用いるためにユニファイドバッファに格納することができる、または、ニューラルネットワークの推論を求めるために用いることができる。いくつかの実装形態では、ニューラルネットワーク層は、平均プーリング層であってもよく、システムは、平均プーリング層の出力と等価である層の出力テンソルを得るために、累積値に対して追加の処理を実施することができる。受けた入力がニューラルネットワークの各層を介して処理されて、受けた入力に対する推論が生成されると、システムはニューラルネットワークの処理を終了する。
図3は、ニューラルネットワーク計算を実行するための一例としての専用ハードウェア回路300を示す。回路300はホストインターフェイス302を含む。ホストインターフェイス302は、ニューラルネットワーク計算のためのパラメータを含む命令を、たとえばホストコンピュータまたは外部プロセッサから受けることができる。パラメータは、以下のうちの1つまたは複数を含むことができる。すなわち、処理すべき層の数、モデルの各層に対する対応する重み入力のセット、活性化入力の初期セット、すなわち推論が計算されるニューラルネットワークへの入力、各層の対応する入力および出力サイズ、ニューラルネットワーク計算のためのストライド値、および処理されるべき層のタイプ、たとえば畳み込み層、プーリング層、または全結合層、のうちの1つまたは複数を含むことができる。
ホストインターフェイス302は、命令をシーケンサ306に送ることができ、シーケンサ306は、命令を、ニューラルネットワーク計算を実行するように回路を制御する低レベル制御信号に変換する。いくつかの実装形態では、制御信号は、回路内のデータフロー、たとえば重み入力のセットおよび活性化入力のセットが回路をどのように流れるか、を調整する。言い換えると、制御信号は、たとえば平均プーリング計算を実行する行列計算ユニット312に対して如何にして入力テンソルの要素を入力として与えるか、および結果として得られた出力をどこに格納するかを指定する。シーケンサ306は、ユニファイドバッファ308、行列計算ユニット312、およびベクトル計算ユニット314に制御信号を送ることができる。いくつかの実装形態では、シーケンサ306はまた、ダイレクトメモリアクセスエンジン304およびダイナミックメモリ310に制御信号を送る。いくつかの実装形態では、シーケンサ306は制御信号を生成するプロセッサである。シーケンサ306は、適切なときに、制御信号を回路300の各構成要素に送るために、制御信号のタイミングを用いることができる。いくつかの他の実装形態では、ホストインターフェイス302は外部プロセッサからの制御信号を送る。
ホストインターフェイス302は、重み入力のセットおよび活性化入力の初期セットをダイレクトメモリアクセスエンジン304に送ることができる。ダイレクトメモリアクセスエンジン304は、ユニファイドバッファ308に活性化入力のセットを格納することができる。いくつかの実装形態では、ダイレクトメモリアクセスは、メモリユニットであり得るダイナミックメモリ310に重みのセットを格納する。いくつかの実装形態では、ダイナミックメモリは回路の外に配置されている。
ユニファイドバッファ308は、たとえば、ダイナミックメモリ310から受けたまたはダイナミックメモリ310に格納するデータを含む、専用ハードウェア回路300による処理中のデータを格納するメモリバッファレジスタである。それは、ダイレクトメモリアクセスエンジン304からの活性化入力のセットおよびベクトル計算ユニット314の出力を格納するために用いることができる。ダイレクトメモリアクセスエンジン304は、ユニファイドバッファ308からベクトル計算ユニット314の出力を読み出すこともできる。
ダイナミックメモリ310およびユニファイドバッファ308は、重み入力のセットおよび活性化入力のセットをそれぞれ行列計算ユニット312に送ることができる。いくつかの実装形態では、行列計算ユニット312は二次元シストリックアレイである。行列計算ユニット312は、数学的演算、たとえば乗算および加算を実行することができる一次元シストリックアレイまたは他の回路とすることもできる。いくつかの実装形態では、行列計算ユニット312は汎用の行列プロセッサである。
行列計算ユニット312は、重み入力および活性化入力を処理し、出力のベクトルをベクトル計算ユニット314に与えることができる。いくつかの実装形態では、行列計算ユニット312は、出力のベクトルをベクトル計算ユニット314に送り、ベクトル計算ユニット314は、出力のベクトルをユニファイドバッファ308に送る。ベクトル計算ユニット314は、出力のベクトルを処理し、処理した出力のベクトルをユニファイドバッファ308に格納することができる。処理した出力のベクトルは、たとえばニューラルネットワーク内の後続の層で用いるために、行列計算ユニット312への活性化入力として用いることができる。行列計算ユニット312については以下で図4を参照しながらより詳細に説明する。
ベクトル、たとえば行列計算ユニット312から受けた出力のベクトルを処理するために、ベクトル計算ユニット314は、活性化ユニット、正規化ユニット、またはその他のユニットのうちの、1つ以上を含み得る。ベクトル計算ユニット314の活性化ユニットは、行列計算ユニット312から受けた累積値に対して非線形関数、たとえばtanh(x)(xは累積値)を適用する回路を含み得る。活性化ユニットは、幅が8または6ビットであるバッファまたは整数レジスタを含み得る。ベクトル計算ユニット314の正規化ユニットは、後続のニューラルネットワーク層を通して非正規化累積値を送ることによって導入される可能性がある計算エラーを避けるために、行列計算ユニット312から受けた累積値を制限するための回路を含み得る。累積値に対して他の演算を実行するための回路がベクトル計算ユニット314に含まれていてもよい。
図4は、行列計算ユニットを含む一例としてのアーキテクチャ400を示す。行列計算ユニットは、二次元シストリックアレイ406である。アレイ406は複数のセル404を含む。いくつかの実装形態では、シストリックアレイ406の第1の次元420はセルの列に対応し、シストリックアレイ406の第2の次元422はセルの行に対応する。シストリックアレイは、列よりも行の方が多くてもよく、行よりも列の方が多くてもよく、または列と行とが同数であってもよい。
図示の例では、値ローダ402は活性化入力をアレイ406の行に送り、重みフェッチャインターフェイス(weight fetcher interface)408は重み入力をアレイ406の列に送る。しかしながら、いくつかの他の実装形態では、活性化入力はアレイ406の列に転送され、重み入力はアレイ406の行に転送される。
値ローダ402は、ユニファイドバッファ、たとえば、図3のユニファイドバッファ308から、活性化入力を受けることができる。各値ローダは、対応する活性化入力をアレイ406の最も左側の異なるセルに送ることができる。たとえば、値ローダ412は、活性化入力をセル414に送ることができる。また、値ローダは、活性化入力を隣接する値ローダに送ることができ、活性化入力をアレイ406の最も左側の別のセルで使用することができる。これにより、活性化入力を、アレイ406の別の特定のセルで使用するためにシフトすることができる。
重みフェッチャインターフェイス408は、メモリユニット、たとえば図2のダイナミックメモリ310から重み入力を受けることができる。重みフェッチャインターフェイス408は、対応する重み入力をアレイ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)で表される。
いくつかの実装形態において、入力と恒等行列との間の行列乗算において、恒等行列全体の乗算は不要である。なぜなら、恒等行列内の値の多くがゼロであるからである。たとえば、768×768行列と、対応する768×768恒等行列との行列乗算を実行するために、行列計算ユニットによって、768×768恒等行列を、256×256行列の9タイルとして処理することができる。このような場合、256×256行列のうちの3つのみ、すなわち768×768恒等行列の主対角線を含むタイルが、ゼロ以外の値を含み、その他の6タイルはゼロのみを含むタイルである。処理要件を少なくするために、行列乗算ユニットは、非ゼロ値の行列を含む3つのタイルのみを用いて行列乗算を実行することにより、正しい乗算結果を得ることができる。
累積出力は、重み入力と同じ列に沿って、たとえばアレイ406内の列の一番下に向かって渡すことができる。いくつかの実装形態では、各列の一番下において、アレイ406は、行よりも多い活性化入力を有する層の計算を実行するときに各列からの各累積出力を格納し累積する、アキュムレータユニット410を含み得る。アキュムレータユニットは、セル404の出力を格納する32ビットレジスタまたはバッファを有していてもよい。いくつかの実装形態では、各アキュムレータユニットは複数の並列累積値を格納する。アキュムレータユニット410は、各累積出力を累積して最終累積値を生成することができる。最終累積値はベクトル計算ユニット、たとえば図3のベクトル計算ユニットに転送することができる。いくつかの他の実装形態では、アキュムレータユニット410は、行よりも少ない活性化入力を有する層を処理するときに累積を実行せずに累積値をベクトル計算ユニットに渡す。
図5は、シストリックアレイ、たとえば図4のシストリックアレイ406の内部のセルの一例としてのアーキテクチャ500を示す。
セルは、活性化入力を格納する活性化レジスタ506を含み得る。活性化レジスタは、シストリックアレイ内のセルの位置に応じて、左側の隣接セル、すなわち所与のセルの左側に位置する隣接セルから、またはユニファイドバッファから、活性化入力を受けることができる。セルは、重み入力を格納する重みレジスタ502を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、上の隣接セルまたは重みフェッチャインターフェイスから転送することができる。セルは総和レジスタ504を含むこともできる。総和レジスタ504は、上の隣接セルからの累積値を格納することができる。乗算回路508を用いて、重みレジスタ502からの重み入力を活性化レジスタ506からの活性化入力と乗算することができる。乗算回路508は積を合計回路510に出力することができる。
合計回路510は、積と総和レジスタ504からの累積値とを合計して新たな累積値を生成することができる。次いで、合計回路510は、新たな累積値を、下の隣接セルに位置する別の総和レジスタに送ることができる。新たな累積値は、下の隣接セルにおける合計のためのオペランドとして用いることができる。
合計回路510はまた、総和レジスタ504からの値を受け、総和レジスタ504からの値を、乗算回路508からの積と合計することなく、下の隣接セルに送ることもできる。たとえば、要素ごとの乗算を実行するために、セルは、総和レジスタ504の値を受け、受けた値を隣接するセルに出力することができる。すなわち、合計回路510は受けた値に積を加算しない。このセルはまた、セルによる要素ごとの乗算に対応する乗算回路508が生成した積を、総和レジスタ504で受けた値と合計することなく、隣接するセルに与えることができる。その結果として、シストリックアレイ406は、活性化入力および重みの、要素ごとの乗算に対応する、出力ベクトルを提供することができる。
セルは、重み入力および活性化入力を、処理のために、隣接セルにシフトすることもできる。たとえば、重みレジスタ502は、重み入力を下の隣接セル内の別の重みレジスタに送ることができる。活性化レジスタ506は、活性化入力を右の隣接セル内の別の活性化レジスタに送ることができる。したがって、重み入力と活性化入力との両方を、後続のクロックサイクルでアレイ内の他のセルによって再利用することができる。
いくつかの実装形態では、セルは制御レジスタも含む。制御レジスタは、セルが重み入力または活性化入力のいずれかを隣接セルにシフトすべきかを決定する制御信号を格納することができる。いくつかの実装形態では、重み入力または活性化入力をシフトすることは、1つまたは複数のクロックサイクルを要する。制御信号は、活性化入力または重み入力が乗算回路508に転送されるかどうかも決定することができる、または乗算回路508が活性化入力および重み入力で演算を行うか否かも決定することができる。制御信号は、たとえば配線を用いて、1つまたは複数の隣接セルに渡すこともできる。
いくつかの実装形態では、重みは重み経路レジスタ512に事前にシフトされる。重み経路レジスタ512は、重み入力をたとえば上の隣接セルから受け、重み入力を制御信号に基づいて重みレジスタ502に転送することができる。重みレジスタ502は、活性化入力が複数のクロックサイクルにわたってたとえば活性化レジスタ506を介してセルに転送されるとき、重み入力がセル内に留まり、隣接セルに転送されないように、重み入力を静的に格納することができる。したがって、重み入力は、たとえば乗算回路508を用いて、複数の活性化入力に適用することができ、それぞれの累積値は隣接セルに転送することができる。
図6は、ニューラルネットワークの平均プーリング層の計算を実行するための一例としてのプロセス600のフローチャートである。一般的に、プロセス600は、専用ハードウェア回路を含む、1つ以上のコンピュータからなるシステム、たとえば図1のシステムによって実行される。
このシステムは、専用ハードウェア回路上にニューラルネットワークを実装することを求める要求を受ける(602)。具体的にはニューラルネットワークは平均プーリング層を含む。この要求は、ニューラルネットワークを用いて処理するネットワーク入力等の、ニューラルネットワークを実装するためのパラメータ、ニューラルネットワークを用いてネットワーク入力を処理することによって生成された推論を格納する場所、またはその他のパラメータを指定することができる。上記パラメータのうちのいくつかは、平均プーリングを適用すべきウィンドウの次元を定めるパラメータのような、ニューラルネットワークの平均プーリング層に固有のパラメータであってもよい。
このシステムは、ニューラルネットワークの平均プーリング層の処理において使用される、上記要求に基づく計算テンソルを生成する(604)。たとえば、ニューラルネットワークに対するネットワーク入力とニューラルネットワークの平均プーリング層のウィンドウとを指定する、ニューラルネットワーク実装要求を受けたことに基づいて、このシステムは、プーリングカーネルと、平均プーリング層を処理するためのゼロ埋込み入力テンソルと、平均プーリング層を処理するためのマスキングテンソルと、平均プーリング層を処理するための任意選択の第3のテンソルとを生成する。
平均プーリング層の計算に使用される第1の計算テンソルは、プーリングカーネルである。一般的に、カーネルは、入力行列の計算に使用され、典型的には入力行列よりも次元が小さい行列である。プーリングカーネルは、恒等行列からなり、その次元は、平均プーリング層に対して指定される平均プーリングウィンドウに一致する。たとえば3×3ウィンドウの場合、プーリングカーネルは3×3カーネルであり、カーネルの各要素は次元がD×Dである恒等行列であり、Dはニューラルネットワークの平均プーリング層によって処理されている入力テンソルの深さである。各恒等行列は、値、たとえば1および0で構成され、よって、プーリングカーネルと入力テンソルの領域との畳み込みにより、特定の深さにおけるこの領域内の要素の合計に等しい値を有する要素が生成される。
たとえば、入力テンソルの深さが1である、すなわち入力テンソルが2次元入力テンソルである場合、恒等行列は1からなる1×1行列である、すなわち、値が1であるスカラー要素である。よって、プーリングカーネルは1からなる2次元行列である。なぜなら、プーリングカーネルの各要素は、1からなる1×1行列、すなわち、値が1であるスカラー値であるからである。しかしながら、入力テンソルの深さが3である場合、プーリングカーネルは、平均プーリングウィンドウの指定されたサイズを有する2次元テンソルであり、プーリングカーネルの各要素は、主対角線上に1を有しそれ以外の場所では0を有する3×3恒等行列である。このように、入力テンソルの複数の次元を並列に処理することができる。
ニューラルネットワーク計算ユニット150は、恒等行列と、恒等行列からなるプーリングカーネルとを生成することができ、かつ、恒等行列および/またはプーリングカーネルを、専用ハードウェア回路110がアクセスできる場所に、たとえば、ダイナミックメモリ310に格納することができる。これに代えて、ニューラルネットワーク計算エンジン150は、恒等行列および/またはプーリングカーネルを専用ハードウェア回路110に与えることができる、または、たとえばプーリングカーネルもしくはプーリングカーネルを生成するための命令をホストインターフェイス302が受けた場合に、プーリングカーネルを生成するために命令を専用ハードウェア回路110に与えることができる。
平均プーリング層の計算に使用される第2の計算テンソルは、ゼロが埋め込まれた入力テンソルであってもよい。たとえば、システムは、平均プーリング層を含むニューラルネットワークを実現することを求める要求を受け、要求に基づいて、この要求が指定するネットワーク入力テンソルに、または、平均プーリング層に対する入力テンソルにゼロを埋め込むことにより、ゼロが埋め込まれた入力テンソルを生成してもよい。ゼロが埋め込まれた入力テンソルは、ニューラルネットワークの平均プーリング層に対して指定されたウィンドウに基づいて生成することができる。いくつかの実装形態において、システムのニューラルネットワーク実装エンジン150は、入力テンソルにゼロを埋め込んでもよく、ゼロが埋め込まれた入力テンソルを専用ハードウェア回路110に与えてもよい。これに代えて、ニューラルネットワーク実装エンジン150は、専用ハードウェア回路110を制御するための命令を生成することにより、ゼロが埋め込まれた入力テンソルを生成してもよい。この命令および入力テンソルは、専用ハードウェア回路のホストインターフェイス302が受けてもよく、受けた命令に基づく制御信号が、ベクトル計算ユニット314、ダイレクトメモリアクセスエンジン304、または専用ハードウェア回路の別のコンポーネントを制御することにより、入力テンソルのゼロ埋込みバージョンをユニファイドバッファ308格納してもよい。
専用ハードウェア回路110がゼロ埋込みを実行するいくつかの実装形態において、ゼロ埋込みは、先ず入力テンソルを、出力の適切な部分、たとえばユニファイドバッファ308にコピーし、次にゼロをメモリ内の適切な位置に書き込むことによって実現される。たとえば、平均プーリング層の8×8入力テンソルおよび3×3ウィンドウの場合、ゼロが埋め込まれた入力テンソルは10×10テンソルとなる。ゼロ埋込みの入力および出力双方について、データのラスタースキャン順序を想定すると、ゼロが埋め込まれた出力テンソルは次のように構成される。入力行列のゼロ埋込みの最初の行に対応して最初の10個のゼロがあり、続く8行は各々、左に埋め込まれた1つのゼロと、入力テンソルの行からの8個の値と、右に埋め込まれた別のゼロとからなり、続くゼロ埋込みの最後の行に対応して別の10個のゼロがある。
このゼロ埋込みを実現するために、たとえば、ニューラルネットワーク実装エンジン150からの命令から生成された制御信号に基づいて、入力テンソルをユニファイドバッファ308から行列計算ユニット312にロードすることができる。入力テンソルと恒等行列との乗算を、行列計算ユニット312で実行することにより、入力テンソルの活性化値をアキュムレータにロードし、そこで、ゼロが埋め込まれた入力テンソルに対し、ユニファイドバッファ308内の適切な場所に格納することができる。次に、ベクトル計算ユニット314は、適切なゼロをユニファイドバッファ308に書き込むことにより、ゼロが埋め込まれた入力テンソルを生成することができる。
いくつかの実装形態において、システムは、ニューラルネットワークの平均プーリングを処理するために第3の計算テンソルを生成することもできる。第3のテンソルは、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数の逆数に各々が等しい要素で構成される。ニューラルネットワーク実装150は、受けたニューラルネットワーク実装要求に基づいて第3のテンソルを生成することができる。たとえば、ニューラルネットワーク実装エンジン150は、ニューラルネットワークの平均プーリング層に対する入力テンソルと同一サイズの第3のテンソルを生成してもよく、このテンソルを、平均プーリング層について指定されたウィンドウ内の要素の数の逆数に等しい値で埋めてもよい。生成された第3のテンソルは、専用ハードウェア回路110がアクセス可能なメモリ位置に格納してもよく、または、平均プーリング層の計算に使用するために専用ハードウェア回路110に与えてもよい。これに代えて、専用ハードウェア回路110は、ニューラルネットワーク実装エンジン150から受けた命令に基づいて第3のテンソルを生成してもよい。
いくつかの実装形態において、システムによって生成される第4の計算テンソルは、マスキングテンソルである。一般的に、マスキングテンソルは、ニューラルネットワークの平均プーリング層の計算においてリスケーリング動作を実行するための値で構成される。具体的には、マスキングテンソルの値は、平均プーリング層に対する入力テンソルの次元と、平均プーリング層について指定されたウィンドウとに基づいて、各値が、出力テンソルの対応する値を生成するために平均される入力テンソル値の数を反映するように、決定すればよい。
マスキングテンソルのサイズは、指定されたネットワーク入力の次元に基づいて、または、ニューラルネットワークの平均プーリング層に対する入力テンソルの予測サイズに基づいて、決定することができる。マスキングテンソル内の要素の値は、平均プーリング層の指定されたウィンドウと、平均プーリング層に対するネットワーク入力または入力テンソルの次元とに基づいて、決定することができる。マスキングテンソルの要素は、平均プーリング計算の実行において生成される要素のリスケーリングが可能となるように設定され、たとえば、平均プーリング層の処理中に生成された初期出力テンソルのエッジおよびコーナーの要素をリスケーリングする。ニューラルネットワークが2つ以上の平均プーリング層を含む場合、システムは、平均プーリング層各々に対してマスキングテンソルを生成すればよい。いくつかの実装形態において、システムは、メモリに格納されている1つ以上のマスキングテンソルフラグメントを傾斜させることによってマスキングテンソルを生成する。たとえば、要素の行または要素の行のセグメントを傾斜させることにより、より大きなマスキングベクトルをまたはマスキングテンソルフラグメントからなる行列を形成するように配置されたマスキングテンソルを生成することができる。いくつかの実装形態において、システムは、たとえばメモリに、マスキング行列のライブラリを格納することができ、このライブラリからマスキング行列を選択することができる。
マスキングテンソルを、ニューラルネットワーク実装エンジン150が生成してもよく、または、マスキングテンソルを生成するために専用ハードウェア回路110を制御するための命令を生成してもよい。たとえば、ニューラルネットワーク実装エンジン150は、ニューラルネットワーク実装要求に基づいてマスキングテンソルを生成し、専用ハードウェア回路110がアクセスできるメモリ場所、たとえば、ダイナミックメモリ310に、マスキングテンソルを格納することができる。マスキングテンソルを生成するために、ニューラルネットワーク実装エンジン150は、テンソルフラグメントにアクセスしてもよく、テンソルフラグメントをコンパイルすることにより、マスキングテンソルをメモリに生成してもよい。これに代えて、ニューラルネットワーク実装エンジン150は、マスキングテンソルを生成し専用ハードウェア回路110に与えてもよく、ここで、ホストインターフェイス302がマスキングテンソルを受けてもよい。他の実装形態において、ニューラルネットワーク実装エンジン150は、マスキングテンソルを生成するために専用ハードウェア回路110を制御するための命令を専用ハードウェア回路110に与えることができる。たとえば、これらの命令は、専用ハードウェア回路110を制御してマスキングテンソルを、たとえばダイナミックメモリ110においてアクセス可能なテンソルフラグメントから生成し、マスキングテンソルを、たとえばダイナミックメモリ110に格納することができる。
システムは、当該システムの専用ハードウェア回路によって実行されると、ニューラルネットワークによるネットワーク入力の処理中に平均プーリングニューラルネットワーク層の出力に相当する層出力を、当該専用ハードウェア回路に生成させる命令を、生成する(606)。たとえば、要求に応じて、図1のシステムのニューラルネットワーク実装エンジン150は、出力テンソルを、すなわち、入力テンソルに対して平均プーリングを実行することにより入力テンソルを処理した場合に専用ハードウェア回路110が生成する出力に相当する出力ベクトルを、生成する。
システムは、上記命令および計算テンソルを専用ハードウェア回路に送信する(608)。たとえば、ニューラルネットワーク実装エンジン150は、命令を、図1のシステムの専用ハードウェア回路110に与えることができ、専用ハードウェア回路110は、これらの命令を、たとえば専用ハードウェア回路のホストインターフェイス302で受けることができる。また、ニューラルネットワーク実装エンジン150は、計算テンソルを、専用ハードウェア回路110に与えることができ、たとえばホストインターフェイス302がこれらの計算テンソルを受けることができる。これに代えて、専用ハードウェア回路110に与えられた命令によって、専用ハードウェア回路110が、たとえばメモリにおいて、平均プーリング層を計算するための計算テンソルを生成するまたはこれにアクセスできるようにしてもよい。ニューラルネットワーク実装エンジン150は、専用ハードウェア回路110が受けることができる、ニューラルネットワークの計算のためのその他の命令および/またはパラメータを与えることもできる。命令、マスキングテンソル、および/またはパラメータを専用ハードウェア回路110に与えることにより、専用ハードウェア回路110は、極めて低いレイテンシでニューラルネットワークの平均プーリング層を計算することにより、後続のニューラルネットワーク層の計算の遅延を減じることができる。
図7は、ニューラルネットワークの平均プーリング層を計算するための一例としてのプロセスのフローチャートである。いくつかの実装形態において、プロセス700は、図1のシステムの専用ハードウェア回路110が、ニューラルネットワーク実装エンジン150から受けた命令に基づいて、実行することができる。
たとえば、専用ハードウェア回路110に、図6で説明したようにニューラルネットワーク実装エンジン150が生成した命令を与えることができ、専用ハードウェア回路110は、命令に基づいてプロセス700を実行することができる。命令は、専用ハードウェア回路のホストインターフェイス302が受けて専用ハードウェア回路のシーケンサ306に送ってもよく、シーケンサ306は、命令を、平均プーリング層計算を実行するために専用ハードウェア回路のコンポーネントを制御する低レベル制御信号に変換することができる。
専用ハードウェア回路は、受けた命令に基づいて、平均プーリングニューラルネットワーク層に対する入力テンソルと、平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有するプーリングカーネルであるカーネルとの、畳み込みを実行することにより、合計出力テンソルを生成する(702)。たとえば、受けた命令に基づいて生成した制御信号は、ニューラルネットワークの平均プーリング層に対する入力テンソル、たとえばネットワーク入力、またはニューラルネットワークの前の層の出力と、プーリングカーネルとの、畳み込みを実行するために、専用ハードウェア回路を制御する。ニューラルネットワークの平均プーリング層がニューラルネットワークにおける最初の層である場合、平均プーリング層は、ニューラルネットワークに対するネットワーク入力、たとえば、デジタル画像の画素に対応する要素を含むデジタル画像を表す入力を、処理する。そうではなく、ニューラルネットワークの平均プーリング層がニューラルネットワークにおける最初の層ではない場合、入力テンソルはニューラルネットワークの前の層の出力テンソルの可能性がある。
畳み込みを実行するために、入力テンソルは、たとえば入力テンソルがニューラルネットワークの前の層の出力である場合はユニファイドバッファ308内にあってもよく、または、たとえば入力テンソルがネットワーク入力である場合はユニファイドバッファ308が受けて格納してもよい。次に、入力テンソルは、ユニファイドバッファ308から行列計算ユニット312に送られる。加えて、プーリングカーネル、すなわち、恒等行列をその要素として有する行列が、図6で説明したように生成されまたは受け取られ、ダイナミックメモリ310に格納されてもよい。プーリングカーネルのサイズは、平均プーリング層のウィンドウに基づいて決定される。たとえば、平均プーリング層が平均プーリング用に3×3ウィンドウを指定する場合、3×3のプーリングカーネルが、たとえば、ホストインターフェイス302で受け取られてダイナミックメモリ310に送られてもよく、または、たとえばダイナミックメモリ310が次元が異なるプーリングカーネルのセットを格納している場合、ダイナミックメモリ310において特定されてもよい。プーリングカーネルのこれらの要素、すなわち恒等行列は、ダイナミックメモリ310から行列計算ユニット312に送られる。
行列計算ユニット312は、入力テンソルとプーリングカーネルとの畳み込みを実行することにより、合計出力テンソルを生成する。入力テンソルをプーリングカーネルを用いて畳み込むことにより、入力テンソルのサイズに一致するサイズを有する合計出力テンソルが得られる。いくつかの実装形態において、畳み込みは、その全体を本明細書に引用により援用する国際出願公開WO2016/186811に開示されている技術を用いて実行することができる。合計出力テンソルの各要素は、入力テンソルの対応する要素に適用されたときにウィンドウが画定する入力テンソルの領域内の入力テンソル要素の合計に相当する。入力テンソルの深さDが2以上の場合、プーリングカーネルの各要素はD×D恒等行列であり、これらの入力テンソルとプーリングカーネルとの畳み込みでは、入力テンソルの異なる深さを並列に処理することによって合計出力テンソルを生成することができる。このようにして、合計出力テンソルの計算の遅延を減じることができる。合計出力テンソルは、ユニファイドバッファ308に格納することができる。いくつかの例において、行列計算ユニット312は合計出力をベクトル計算ユニット314に与えることができ、ベクトル計算ユニット314は合計出力テンソルをユニファイドバッファ308に格納する。
いくつかの実装形態において、入力テンソルとプーリングカーネルとの畳み込みは、ゼロが埋め込まれた入力テンソルとプーリングカーネルとの畳み込みを実行することを含む。たとえば、図6について述べたように、入力テンソルのゼロ埋込みバージョンを生成してもよく、ゼロ埋込み入力テンソルとプーリングカーネルとの畳み込みによって合計出力テンソルを生成してもよい。畳み込みを実行するために、ゼロ埋込み入力テンソルを生成しユニファイドバッファ308に格納することができる。次に、上記畳み込みプロセスと同様の畳み込みプロセスを実行することにより、入力テンソルと同一サイズの合計出力テンソルを生成することができる。たとえば、ゼロ埋込み入力テンソルおよびプーリングカーネルを行列計算ユニット312に与えてもよく、行列計算ユニット312は、畳み込み演算を実行し結果として得られた値をユニファイドバッファ308に送ることにより、合計出力テンソルとして格納することができる。
いくつかの実装形態において、畳み込み演算は固定小数点演算を利用する。分解能を維持するために、畳み込みの結果を行列計算ユニットのアキュムレータ410において保持することができる。いくつかの実装形態では、アキュムレータは各々32ビット幅なので、畳み込みの結果、すなわちプーリングウィンドウ内の入力テンソル要素の合計はアキュムレータ410をオーバフローさせることはない。このように、この平均プーリング計算ステップにおいて解像度を維持することができる。
受けた命令に基づいて、専用ハードウェアは、合計出力テンソルの各要素を平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することにより初期出力テンソルを生成する演算を実行する(704)。たとえば、合計出力テンソルの各要素を、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数の逆数に等しいファクタで乗算するために、ホストインターフェイス302においてニューラルネットワーク実装エンジンから受けた命令に基づいて制御信号をシーケンサ306によって生成してもよい。
いくつかの実装形態において、制御信号は、専用ハードウェア回路に初期出力テンソルを次のようにして生成させる。すなわち、合計出力テンソルと、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数の逆数に各々が等しい要素で構成されたテンソルとに対し、要素ごとの乗算を実行することによって初期出力テンソルを生成する。図6について述べたように、専用ハードウェア回路は、そのような行列を、たとえばホストインターフェイス302で受け、ダイナミックメモリ310に格納してもよい。これに代えて、専用ハードウェア回路は、行列を生成しダイナミックメモリ310に格納するための動作を実行してもよい。この行列のサイズは合計出力テンソルのサイズに一致させることができ、この合計出力のサイズは入力テンソルのサイズにも一致する。たとえば、平均プーリング層が、3×3ウィンドウすなわち9要素からなるウィンドウを有するものとして指定された場合、値1/9(または約0.11)を有し合計出力テンソルの次元を有する要素からなる行列を、専用ハードウェア回路のホストインターフェイス302で受けることができる。この行列はダイナミックメモリ310に格納することができる。これに代えて、このような行列は既にダイナミックメモリ310に格納されていてもよく、専用ハードウェア回路によって特定されてもよい。
合計出力ベクトルおよび行列の要素ごとの乗算を実行するために、合計出力ベクトルを、ユニファイドバッファ308から行列計算ユニット312に与えることができ、一方、行列をダイナミックメモリ310から行列計算ユニット312に与えることができる。行列の、要素ごとの乗算を実行し、要素ごとの乗算の出力を、ユニファイドバッファ308に格納することができる。たとえば、行列計算ユニット312は、受けた制御信号に基づいて要素ごとの乗算を実行し、結果として得られた初期出力テンソルをベクトル計算ユニット314に与えることができる。そうすると、ベクトル計算ユニット314は、この初期出力テンソルをユニファイドバッファ308に格納することができる。
これに代えて、合計出力ベクトルの要素を、ウィンドウ内の要素の数の逆数に等しいファクタで乗算することは、上記ファクタによる合計出力ベクトルのスカラー乗法を実行することによって実現してもよい。たとえば、合計出力ベクトルを、行列計算ユニット312からベクトル計算ユニット314に与えてもよく、ベクトル計算ユニット314は関数を合計出力ベクトルに適用して合計出力ベクトルの要素を上記ファクタで乗算することにより、初期出力ベクトルを生成してもよい。そうすると、ベクトル計算ユニット314は、この初期出力ベクトルをユニファイドバッファ308に格納することができる。
本明細書では乗算によって実施されると説明しているが、いくつかの実装形態において、他の演算を実行することにより、初期出力ベクトルを得てもよい。よって、専用ハードウェア回路が合計出力ベクトルの要素を平均プーリング層の指定されたウィンドウの要素の数の逆数で乗算するのではなく、すなわち専用ハードウェア回路が除算を実行可能な場合は、専用ハードウェア回路が、合計出力ベクトルの要素を、平均プーリング層の指定されたウィンドウ内の要素の数で除算することにより初期出力ベクトルを得るように演算してもよい。
ステップ702および704を実行することにより、専用ハードウェア回路は、平均プーリング層について概ね正確である出力を提供することが可能であるが、出力は適切な平均ではない特定の要素を有するであろう。たとえば、入力テンソルのコーナーの要素に3×3ウィンドウを用いる平均プーリング層を適用する場合、出力テンソルの対応するコーナーの要素の値は、入力テンソルの対応するコーナー要素と入力テンソル内の隣接する3つの要素のみの平均、すなわちたった4要素の平均となる。しかしながら、合計出力ベクトルのコーナー要素を3×3ウィンドウの要素の数の逆数で乗算する、すなわち、1/9で乗算することにより、初期出力テンソル内の計算した平均は、その要素について不正確である可能性がある。
この問題に対処するために、システムは、初期出力テンソルの要素をリスケーリングすることにより出力テンソルを生成することができる(706)。リスケーリングを実行するために、専用ハードウェア回路110は、図6のステップ604について述べたようにマスキングテンソルを受けるまたは生成することができる。マスキングテンソルには、たとえばダイナミックメモリ310において専用ハードウェア回路がアクセス可能であり、このマスキングテンソルは行列計算ユニット312に与えることができる。初期出力テンソルは、ユニファイドバッファ308から行列計算ユニット312に与えてもよい。初期出力テンソルおよびマスキングテンソルの要素ごとの乗算を実行することにより、ニューラルネットワークの平均プーリング層の出力に相当する出力テンソルを生成することができる。この出力テンソルは、たとえばベクトル計算ユニット314により、ユニファイドバッファ308に格納することができる。
プロセス600のステップ604について述べたように、マスキングテンソルのサイズは、合計出力テンソルおよび初期出力テンソルのサイズにも相当する入力テンソルのサイズに相当するものであってもよい。マスキングテンソルの値は、入力テンソルの次元およびニューラルネットワークの平均プーリング層に対して指定されたウィンドウに基づいて求めてもよく、各値は、出力テンソルの対応する値を生成するために平均された入力テンソル値の数を反映する。たとえば、3×3平均ウィンドウおよびサイズが3×3以上である2次元入力テンソルの場合、マスキングテンソルは、コーナー要素についてファクタ9/4、エッジ要素についてファクタ9/6、マスキングテンソルの値の残りが1である。このように、ウィンドウ内の要素の数の逆数、すなわち1/9に等しいファクタで乗算した場合、コーナー要素をスケール9/4でリスケーリングすることにより、合計出力テンソルのコーナー値は4で除算されることになり、これは適切である。なぜなら3×3プーリングカーネルを入力テンソル句のコーナー要素に適用すると、入力テンソルの4要素が合計されて合計出力テンソルのコーナー要素を生成することになる。
その他の実装形態において、合計出力テンソルの要素を平均プーリング層のウィンドウ内の要素の数で処理させるための演算を実行する代わりに、システムは、先ず合計出力テンソルの各値を生成するために合計される入力テンソルの活性化値の数について最小公倍数を求めてもよい。よって、3×3ウィンドウおよび3×3またはそれよりも大きい2次元入力テンソルの場合、入力テンソルの4要素を合計することによって合計出力テンソルのコーナー要素を生成し、入力テンソルの6要素を合計することによって合計出力テンソルのエッジ要素を生成し、入力テンソルの9要素を合計することによって入力テンソルのその他の要素を生成する。したがって、最小公倍数は36であろう。平均プーリング層について適切な値を生成するために、コーナー要素において9を有しエッジ要素において6を有しその他の場所で4を有するマスキングテンソルを求めればよい。合計出力テンソルの各要素を最小公倍数で除算し、次にマスキングテンソルを用いてリスケーリングするよう演算を実行すると、結果として得られる出力テンソルは、平均プーリング層について正確な出力となるであろう。すなわち、最小公倍数の逆数、すなわち1/36または約0.03からなる行列で合計出力テンソルを要素ごとに乗算し、これを、マスキングテンソルを用いた要素ごとの乗算と組み合わせることによって得られる出力テンソルは、ニューラルネットワークの平均プーリング層について正確な出力となるであろう。
分数の乗算ではなく整数の乗算を実行するこのような技術を、特定の実装形態で使用することにより、これらの計算を通して生成される値の分解能を維持する。上述のように、いくつかの実装形態において、行列計算ユニット312のアキュムレータ410は32ビット幅であり、一方、たとえばベクトル計算ユニット314の活性化ユニットにおける活性化は、8ビットまたは16ビット幅である。システムは、固定小数点演算を、32ビット、8ビット、または16ビットレジスタを用いて実行することにより、平均プーリング層出力の生成における計算を実行することができる。しかしながら、分数演算を実行できるのは活性化のみである。活性化の分解能は低い、すなわち32ビットに対して8または16ビットなので、可能であれば整数計算を実行することによって分解能を維持することが望ましい。一旦32ビットアキュムレータに格納された値に対したとえばベクトル計算ユニット314の活性化ユニットによって活性化演算が実行されると、結果として得られる値の分解能は失われる。
このように、整数を用いて要素ごとの乗算を実行することにより、その結果を、活性化において分数を用いて実行された要素ごとの乗算よりも高い分解能で、アキュムレータに保持することができる。平均プーリング演算を整数計算のみを用いてすなわち分数乗算を用いずに実行できる場合、より高い分解能を維持することができる。少なくともいくつかの分数計算を実行しなければならない場合、活性化において実行する分数計算の数を減じることにより、より低い分解能の活性化を用いることで生成される量子化アーティファクトを低減することができる。
図8は、ニューラルネットワークの平均プーリング層の計算の一例を示す。図8の例は、図3の専用ハードウェア回路により、図7のプロセスを用いて実行することができる。例として、図8の例は、平均プーリング層を、活性化値の2次元8×8アレイに適用する。ニューラルネットワークの平均プーリング層は、3×3ウィンドウを有していてもよく、たとえば、ニューラルネットワーク実装要求は、平均プーリング層が3×3ウィンドウを有することを指定してもよく、これは、平均プーリング層の出力の各要素が、入力テンソルの対応する要素と、入力テンソルの対応する要素に隣接する、入力テンソルの8要素との数値平均であることを意味する。図8に示される8×8入力テンソルは、ニューラルネットワークに対するネットワーク入力としての画像入力の8×8部分を表すことができる、または、別の入力テンソル、たとえばニューラルネットワークの前の層の出力に対応する入力テンソルの、8×8部分を表すことができる。
図8のパート(a)において、8×8入力テンソルとプーリングカーネルとの畳み込みを実行することにより、合計出力テンソルを生成する。図示のように、プーリングカーネルは1で構成された3×3カーネルである。その理由は次の通りである。入力テンソルは2次元である、すなわちその深さが1であり、プーリングカーネルの各要素は1×1恒等行列、すなわち1のスカラー値である。入力テンソルとプーリングカーネルとの畳み込みの結果得られる合計出力テンソルにおいて、合計出力テンソルの各要素は、入力テンソルの対応する要素と、この入力テンソルの対応する要素に隣接する8要素、すなわち行列フォーマットで書き込まれた場合の入力テンソルの対応する要素を囲んでいる8要素との、合計に相当する。入力テンソルは、メモリすなわちユニフォームバッファ308にラスタースキャン順序で格納できるので、合計出力テンソルの要素を生成するために合計される入力テンソルの要素は、メモリ内で隣接していない場合がある。図8には示されていないが、入力テンソルは、図7のプロセス700について説明した、ゼロが埋め込まれた入力テンソルであってもよい。
図8のパート(a)に示される具体例の場合、3×3プーリングカーネルが入力テンソルに適用され、合計出力テンソルの(1,1)位置に対応する、合計出力テンソルの要素が生成される。よって、合計出力テンソルの(1,1)要素は、入力テンソルの(0,0),(1,0),(2,0),(1,0),(1,1),(1,2),(2,0),(2,1),および(2,2)行列位置に対応する要素の合計である。このように、パート(a)に示される値の場合、合計出力テンソルの(1,1)位置に対応する要素は36である。合計出力テンソルの他の要素も同様に計算されるが、図8の例には示されていない。
図8のパート(b)において、合計出力テンソルの要素を、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数の逆数に相当するファクタで乗算することにより、初期出力テンソルを生成する。この乗算を実行するために生成するマスキングテンソルのサイズは、入力テンソルのサイズとも同一サイズである合計出力テンソルのサイズに相当するサイズである。このマスキングテンソルの要素は、平均プーリングニューラルネットワーク層のウィンドウ内の要素の数の逆数に等しい。よって、図8に示されるように、マスキングテンソルは、各々が1/9に等しい値で構成された8×8アレイであり、この値は図8において0.11に近似されたものとして示されている。
合計出力テンソルとマスキングテンソルとを要素ごとに乗算することにより、初期出力テンソルが得られ、初期出力テンソルの各要素は、合計出力テンソルの対応する要素とマスキングテンソルの対応する要素との積に等しい。よって、初期出力テンソルの(1,1)位置の要素は、36*(1/9)=4に基づき、4となる。初期出力テンソルのその他の要素も同様に計算することができるが図8には示されていない。加えて、図8では要素ごとの乗算の実行を示しているが、いくつかの実装形態において、初期出力テンソルを、合計出力テンソルと、平均プーリング層のウィンドウ内の要素の数の逆数に相当するファクタとのスカラー乗算によって得てもよい。したがって、図8に示される例の場合、たとえばベクトル計算ユニット314によって実施される、合計出力テンソルと1/9とのスカラー乗算により、初期出力テンソルが得られる。
図8のパート(c)において、初期出力テンソルの要素をリスケーリングすることにより、ニューラルネットワークの平均プーリング層の出力テンソルを生成する。リスケーリングを実行するために、初期出力テンソルと第2のマスキング層との間で要素ごとの乗算を実施する。第2のマスキングテンソルのサイズは、合計出力テンソルおよび入力テンソル双方のサイズとも同一である初期出力テンソルのサイズに一致する。第2のマスキングテンソルの要素は、図8のパート(a)における畳み込みの実施においてプーリングカーネルの要素を乗算した入力テンソルの要素の数に基づいて決定される。よって、図8の例においては、3×3重み行列を入力テンソルのエッジ要素に適用してプーリングカーネルの9要素のうちの4要素を入力テンソルの要素と乗算し、3×3プーリングカーネルを入力テンソルのエッジ要素に適用してプーリングカーネルの9要素のうちの6要素を入力テンソルの要素と乗算する。入力テンソルのその他すべての要素に対し、3×3プーリングカーネルを適用してプーリングカーネルの要素のすべての要素である9要素を入力テンソルの要素と乗算する。
したがって、第2のマスキングテンソルの要素は、平均プーリング層のウィンドウの要素の数による第1の乗算およびリスケーリングファクタによる第2の乗算によって出力テンソルの各要素に適切な平均計算が適用されるように、設定される。よって、入力テンソルのコーナー要素に関しては、プーリングカーネルをコーナー要素に適用するときに入力テンソルの4要素のみを平均する場合、合計出力テンソルの対応する要素の乗算は、最初に、パート(b)に示されるように1/9すなわち0.11で乗算し、次に、9/4で乗算し、結果として、合計出力ベクトルのコーナー要素を4で有効に除算する。言い換えると、リスケーリングファクタは、たとえば、初期出力テンソル内の特定の要素に寄与する加数の数に基づいて決定される。
いくつかの実装形態において、パート(b)のマスキングテンソルおよびパート(c)の第2のマスキングテンソルは、図1のニューラルネットワーク実装エンジン150によって生成され、専用ハードウェア回路110に与えられる。専用ハードウェア回路110は、生成されたこれらのマスキングテンソルを、たとえばホストインターフェイス302において受けることができ、平均プーリング層の計算において使用するためのマスキングテンソルを、たとえば、ダイナミックメモリ310に格納することにより、格納することができる。これに代えて、ニューラルネットワーク実装エンジン150が専用ハードウェア回路110に命令を与えてもよく、この命令は、マスキングテンソルをダイナミックメモリ310に生成および/または格納することを、専用ハードウェア回路に実行させる命令であり、たとえば、テンソルフラグメントをタイリングする(tile)ことによってマスキングテンソルを生成し生成したマスキングテンソルをダイナミックメモリ310に格納することを、専用ハードウェア回路110に実行させる。
初期出力テンソルと第2のマスキングテンソルとを要素ごとに乗算することによって得られた出力テンソルを、ニューラルネットワークの平均プーリング層の出力として、ユニファイドバッファ308に格納することができる。たとえば、図8に示されるように、プーリングカーネルのすべての9要素を、位置(1,1)の入力テンソルの要素に適用すると、第2のマスキングテンソルの対応するファクタは1である。よって、出力テンソルの(1,1)位置の要素は、値4を有する初期出力テンソルの対応する要素と同一である。同一の、要素ごとの乗算を、初期出力テンソルのその他すべての要素に対して実行することにより、出力テンソルを生成することができる。
いくつかの例において、図8に示される、合計出力テンソルとマスキングテンソルとの、要素ごとの乗算、および、初期出力テンソルと第2のマスキングテンソルとの、要素ごとの乗算は、活性化において、たとえばベクトル計算ユニット314の活性化ユニットで、実行される。これは、上記要素ごとの乗算演算がどちらも、いくつかの実装形態において、活性化によって処理できるがアキュムレータでは処理できない、分数の固定小数点演算である場合に、起こり得る。
図9は、ニューラルネットワークの平均プーリング層の計算のもう1つの例を示す。図9の例は、図3の専用ハードウェア回路により、図7のプロセスを用いて実行することができる。例として、図9の例は、平均プーリング層を、活性化値の8×8アレイに適用する。ニューラルネットワークの平均プーリング層は、3×3ウィンドウを有していてもよく、たとえば、ニューラルネットワーク実装要求は、平均プーリング層が3×3ウィンドウを有することを指定してもよく、これは、平均プーリング層の出力の各要素が、入力テンソルの対応する要素と、入力テンソルの対応する要素に隣接する、入力テンソルの8要素との数値平均であることを意味する。図9に示される8×8入力テンソルは、ニューラルネットワークに対するネットワーク入力としての画像入力の8×8部分を表すことができる、または、別の入力テンソル、たとえばニューラルネットワークの前の層の出力に対応する入力テンソルの、8×8部分を表すことができる。
図9のパート(a)において、ニューラルネットワークの平均プーリング層に対する入力テンソルは、ゼロ埋込み入力テンソルを生成するためにゼロが埋め込まれたものである。専用ハードウェア回路に与えられる命令を用いて、入力テンソルにゼロを埋め込むように専用ハードウェア回路を制御するための制御信号を生成することができる。ゼロ埋込みは、たとえば次のようにして実現できる。ユニファイドバッファ308からの入力テンソルを行列計算ユニット312に与え、行列計算ユニット312において入力行列を恒等行列で乗算し、出力をユニファイドバッファ308に格納する。次に、活性化演算をたとえばベクトル計算ユニット314によって実行することにより、ユニファイドバッファ308の適切な場所にゼロを書き込むことで、ゼロ埋込み入力テンソルを生成することができる。得られたゼロ埋込み入力テンソルは、10×10行列であり、この行列は、10個のゼロからなる第1行と、第1のゼロと入力テンソルの行からの8個の値と行の最後の第2のゼロとを各々が有する8つの行と、10個のゼロからなる最終行とを有する。
ニューラルネットワークの平均プーリング層に対して指定されたウィンドウと同一サイズのプーリングカーネルであるカーネルを用いて、ゼロ埋込み入力テンソルの畳み込みを実行する。よって、図9に示される例の場合、1×1恒等行列すなわち1からなる3×3カーネルを、ゼロ埋込み入力テンソルについて、畳み込むことにより、合計出力テンソルを生成する。図示のように、プーリングカーネルを用いてゼロ埋込み入力テンソルを畳み込むことにより生成される合計出力テンソルの各要素は、ゼロ埋込み入力テンソルの対応する要素と、このゼロ埋込み入力テンソルの対応する要素に隣接するものとして示される8要素との合計に等しい。よって、図9に示される合計出力テンソルの(0,0)要素は、8、すなわち、合計0+0+0+0+0+1+0+3+4=8に等しい。同様の処理を実行することにより、図9には示されていない、合計出力テンソルのその他の要素各々を得ることができる。
図9のパート(b)において、合計出力テンソルとマスキングテンソルとの要素ごとの乗算が実行される。図9のマスキングテンソルは、先ず、ニューラルネットワークの平均プーリング層に対して指定されたウィンドウ内の要素の数、および、合計出力テンソルの各要素を生成するために使用される入力テンソルの要素の数の、最小公倍数を求めることにより、決定することができる。たとえば図9において、最小公倍数はしたがって36である。すなわち、3×3ウィンドウ内の要素の数である9、合計出力テンソルのコーナー要素を生成するために合計される入力テンソルの要素の数である4、および、合計出力テンソルのエッジ要素を生成するために合計される入力テンソルの要素の数である6の、最小公倍数である。
次に、マスキングテンソルのファクタを、最小公倍数と、合計出力テンソルの対応する要素を生成するために合計される入力テンソルの要素の数とに基づいて、決定する。上記ファクタにより、合計出力テンソルの要素の、最小公倍数の逆数による乗算、およびこのファクタによる乗算を実施することができ、結果として得られる値は、合計出力テンソルの値を生成するために合計される入力テンソルの要素の数で、合計出力テンソルの要素を除算した値である。よって、マスキングテンソルのコーナー要素は9である。すなわち、合計出力テンソルのコーナー要素を9および1/36で乗算すると、コーナー要素を4で適切に除算したものになる。マスキングテンソルのエッジ要素は6である。すなわち、合計出力テンソルのエッジ要素を6および1/36で乗算すると、コーナー要素を6で適切に除算したものになる。マスキングテンソルのその他の要素は4である。すなわち、合計出力ベクトルの対応する要素を4および1/36で乗算すると、9で適切に除算したものになる。
合計出力テンソルとマスキングテンソルとを要素ごとに乗算することにより、図9のパート(b)に示される初期出力テンソルが得られる。たとえば、合計出力テンソルを、ユニファイドバッファ308から行列計算ユニット312に与えてもよく、専用ハードウェア回路が受けたまたは生成したマスキングテンソルを、ダイナミックメモリ310から行列計算ユニット312に与えてもよい。行列計算ユニット312は、要素ごとの乗算を実行することにより、初期出力テンソルを生成する。たとえば、8に等しい合計出力テンソルのコーナー要素と、値9を有するマスキングテンソルの対応する要素とを、要素ごとに乗算すると、初期出力テンソルのコーナー要素の値として、72が得られる。同様のプロセスを実行することにより、初期出力テンソルのその他の要素を生成するが、これは簡潔にするために図9には示されていない。
図9のパート(c)において、初期出力テンソルを第2のマスキングテンソルで乗算することにより、出力テンソルを生成する。第2のマスキングテンソルは、初期出力テンソルと同一サイズであり、その各構成要素は、求めた最小公倍数の逆数に等しい、すなわち1/36または約0.03である。初期出力テンソルと第2のマスキングテンソルとを要素ごとに乗算することにより、出力テンソルを生成する。たとえば、初期出力テンソルは、ユニファイドバッファ308に格納することができ、ユニファイドバッファ308から行列計算ユニット312に与えることができる。第2のマスキングテンソルは、ダイナミックメモリ310に格納することができ、これも、行列計算ユニット312に与えることができる。この計算ユニットにおいて、要素ごとの乗算を実行することにより,出力テンソルを生成する。たとえば、値72を有する初期出力テンソルのコーナー要素を、値1/36を有する第2のマスキングテンソルの対応する要素で、要素ごとに乗算することにより、出力テンソルの対応するコーナー要素の値として、2が得られる。要素ごとの乗算を実行することにより、出力テンソルのその他の要素を生成することができるが、これは図9には示されていない。これに代えて、たとえばベクトル計算ユニット314により、初期出力テンソルに対してスカラー乗算関数を適用してもよい。結果として得られた出力テンソルはユニファイドバッファ308に格納することができる。
特に、図9において実施される計算は、量子化エラーの発生を限定することができる。整数を用いてパート(b)に示される要素ごとの乗算を実行することによって、活性化においてではなくアキュムレータにおいて計算を実行することができる。よって、アキュムレータが活性化よりも高い分解能を有する場合、パート(b)の出力を、より高い分解能に保つことができる。このパート(b)の計算における高められた分解能は、結果として、パート(c)の計算から得られる出力テンソルの精度を高めることになる。
本明細書に記載の主題の実施形態および機能的動作は、デジタル電子回路において、有形的に実現されたコンピュータソフトウェアまたはファームウェアにおいて、本明細書に開示されている構造およびその構造的均等物を含むコンピュータハードウェアにおいて、または、これらのうちの1つ以上を組み合わせたものにおいて、実現することができる。本明細書に記載の主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するための有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の1つ以上のモジュールとして、実現することができる。これに代えてまたはこれに加えて、プログラム命令は、データ処理装置による実行のために適切な受信装置に送信される情報を符号化するために生成された、人為的に生成された伝搬信号、たとえばマシンによって生成された電気、光、または電磁信号上で符号化することができる。コンピュータ記憶媒体は、マシン読取可能記憶媒体、マシン読取可能記憶基盤、ランダムもしくはシリアルアクセスメモリデバイス、または、これらのうちの1つ以上を組み合わせたものであってもよい。
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データ処理用のすべての種類の装置、デバイス、およびマシンを包含する。この装置は、専用論理回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。この装置はまた、ハードウェアに加えて、当該コンピュータプログラムのために実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらのうちの1つ以上の組み合わせを構成するコードを含み得る。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと呼ぶ、またはそういうものとして説明することもできる)は、コンパイルもしくはインタプリタ言語、または宣言型もしくは手続型言語を含む、任意のプログラミング言語形態で記述することができ、また、スタンドアロンプログラムとしてまたはモジュールとして、コンポーネント、サブルーチン、または計算環境で使用するのに適したその他のユニットを含む、任意の形態でデプロイすることができる。コンピュータプログラムはファイルシステム内のファイルに対応していてもよいがそうでなくてもよい。プログラムは、その他のプログラムまたはデータを保持する、たとえばマークアップ言語文書に保存されている1つ以上のスクリプトを保持するファイルの一部に、または当該プログラム専用の1つのファイルに、または連携している複数のファイル、たとえば1つ以上のモジュール、サブプログラム、またはコードの一部を保存する複数のファイルに、格納することができる。コンピュータプログラムは、1つの場所にある、または複数の場所に分散しており通信ネットワークによって相互接続されている、1つのコンピュータまたは複数のコンピュータ上で実行するためにデプロイすることができる。
本明細書に記載のプロセスおよび論理フローは、入力データに対して作用し出力を生成することによって機能を果たすために1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルコンピュータによって実行することができる。プロセスおよび論理フローは、専用ロジック回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行されてもよく、装置は、専用ロジック回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)として実現されてもよい。
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用もしくは専用マイクロプロセッサまたはこれら双方に基づいていてもよく、または、その他任意の種類の中央処理装置に基づいていてもよい。一般的に、中央処理装置は、命令およびデータを、読み取り専用メモリまたはランダムアクセスメモリまたはこれら双方から受ける。コンピュータの必須要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般的に、コンピュータは、データを格納するための1つ以上の大量記憶装置たとえば磁気、光磁気ディスク、または光ディスクを含む、または、上記大量記憶装置からデータを受ける、これにデータを転送する、またはこれら双方のために、上記大量記憶装置に作動的に結合される。しかしながら、コンピュータはこのようなデバイスを有していなくてもよい。加えて、コンピュータは別のデバイスに、たとえば、例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤー、ゲーム機、グローバルポジショニングシステム(GPS)受信機、またはポータブル記憶装置たとえばユニバーサル・シリアル・バス(USB)フラッシュデバイスに、埋め込まれていてもよい。
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、これは、一例として、半導体メモリデバイスたとえばEPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスクたとえば内部ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD ROMおよびDVD−ROMディスクを含む。プロセッサおよびメモリに、専用論理回路を補充してもよく、専用論理回路にプロセッサおよびメモリが組み込まれていてもよい。
ユーザとのやり取りにおける送信のために、本明細書に記載の主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイスたとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザがコンピュータに入力を送ることができるようにするためのキーボードおよびポインティングデバイスたとえばマウスまたはトラックボールとを有するコンピュータ上で実現することができる。その他の種類のデバイスを用いてユーザとのやり取りにおける送信が行われるようにしてもよい。たとえば、ユーザに与えられるフィードバックは、任意の形態の感覚フィードバックたとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってもよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受けることができる。加えて、コンピュータは、ユーザとの対話を、ユーザが使用するデバイスに文書を送信するかまたはこのデバイスから文書を受信することによって、たとえば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、実現してもよい。
本明細書に記載の主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システム、または、ミドルウェアコンポーネントたとえばアプリケーションサーバを含む計算システム、または、フロントエンドコンポーネント、たとえば、本明細書に記載の主題を実現したものとユーザとのやり取りを可能にするためのグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システム、または、このようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントのうちの1つ以上の任意の組み合わせを含む計算システムにおいて、実現することができる。当該システムのコンポーネントは、デジタルデータ通信の形態または媒体たとえば通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、たとえばインターネットを含む。
計算システムはクライアントとサーバとを含み得る。クライアントとサーバは、通常は互いに離れており、通信ネットワークを通してやり取りするのが一般的である。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
本明細書には実装の具体的詳細事項が多く含まれているが、これらは、どの発明の範囲またはクレームし得るものの範囲の限定としても解釈されてはならないものであって、むしろ、特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきものである。本明細書において、別々の実施形態という観点で記載されている特定の特徴は、1つの実施形態において組み合わせ実現することも可能である。逆に、1つの実施形態という観点から記載されている各種特徴を、複数の実施形態において別々に、または任意の適切な下位の組み合わせとして実現することも可能である。加えて、上記特徴は、特定の組み合わせで機能するものとして記載され最初にそういうものとしてクレームされている場合があるが、クレームされている組み合わせに含まれる1つ以上の特徴は、場合によってはこの組み合わせから省略することができ、クレームされている組み合わせは下位の組み合わせまたは下位の組み合わせの変形に関するものである場合がある。
同様に、動作は図面において特定の順序で示されているが、これは、このような動作が、示されている特定の順序もしくは連続した順序で実行されることを要する、または、示されているすべての動作が所望の結果を得るために実行されることを要する、と理解されてはならない。特定の状況ではマルチタスキングおよび並列処理が好都合である場合がある。加えて、上記実施形態における各種システムモジュールおよびコンポーネントの分離は、すべての実施形態においてこのような分離を要するものと理解されてはならない。記載されているプログラムコンポーネントおよびシステムは一般的に、1つのソフトウェアプロダクトに統合できる、または、パッケージングして複数のソフトウェアプロダクトにできることが、理解されるはずである。
当該主題の具体的な実施形態は上に述べた通りである。その他の実施形態は以下の請求項の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行されてそれでもなお所望の結果を得ることができる。一例として、添付の図面に記載されているプロセスは、必ずしも示されている通りの特定の順序または連続した順序によって所望の結果を得ることを要している訳ではない。特定の実装例において、マルチタスキングおよび並列処理が好都合である場合がある。

Claims (20)

  1. 平均プーリングニューラルネットワーク層を含むニューラルネットワークをハードウェア回路上で処理することを求める要求を受けることと、
    それに応じて命令を生成することとを含み、前記命令は、前記ハードウェア回路によって実行されると、前記ハードウェア回路に、前記ニューラルネットワークによるネットワーク入力の処理中に、演算を実行することによって前記平均プーリングニューラルネットワーク層の出力に相当する層出力テンソルを生成させ、
    前記演算は、
    前記平均プーリングニューラルネットワーク層に対する入力テンソルと、カーネルとの畳み込みを実行することにより、第1のテンソルを生成することを含み、前記カーネルは、前記平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有し、各々が恒等行列である要素で構成されており、
    前記演算は、さらに、
    前記第1のテンソルの各要素を、前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することを含む、方法。
  2. 前記演算は、前記初期出力テンソルのエッジ要素を第1のスケーリングファクタによってリスケーリングし、前記初期出力テンソルのコーナー要素を第2のスケーリングファクタによってリスケーリングすることにより、出力テンソルを生成することをさらに含む、請求項1に記載の方法。
  3. 前記第1のスケーリングファクタは、前記第1のテンソルのエッジ要素を生成するために前記畳み込みを実行する際に前記カーネルの要素で乗算される前記入力テンソルの要素の数に基づいており、前記第2のスケーリングファクタは、前記第1のテンソルのコーナー要素を生成するために前記畳み込みを実行する際に前記カーネルの要素で乗算される前記入力テンソルの要素の数に基づいている、請求項2に記載の方法。
  4. 前記演算は、前記第1のテンソルのエッジに隣接する要素を第3のスケーリングファクタによってリスケーリングし、前記第1のテンソルのコーナーに隣接する要素を第4のスケーリングファクタによってリスケーリングすることにより、前記出力テンソルを生成することをさらに含む、請求項1に記載の方法。
  5. 前記入力テンソルとカーネルとの畳み込みを実行することによって第1のテンソルを生成することは、
    前記入力テンソルにゼロを埋め込むことによってゼロ埋込み入力テンソルを生成することと、
    前記ゼロ埋込み入力テンソルと前記カーネルとの畳み込みを実行することによって前記第1のテンソルを生成することとを含む、請求項1に記載の方法。
  6. 前記第1のテンソルの各要素を前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、
    第1のファクタによる、前記第1のテンソルの各要素の第1の乗算を実行することを含み、前記第1のファクタは、
    (i)出力テンソルのコーナー要素を生成するために畳み込みを実行する際に、前記平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有するカーネルの要素で乗算される、入力テンソルの要素の数と、
    (ii)出力テンソルのエッジ要素を生成するために畳み込みを実行する際に、前記平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有するカーネルの要素で乗算される、入力テンソルの要素の数と、
    (iii)前記平均プーリングニューラルネットワーク層のウィンドウの要素の数との最小公倍数であり、
    1つ以上の第2のファクタによる、前記第1のテンソルの各要素の第2の乗算を実行することを含み、各第2のファクタは、前記第1のテンソルの対応する要素を生成するために前記畳み込みを実行する際に前記カーネルの要素で乗算される前記入力テンソルの要素の数に基づいている、請求項1に記載の方法。
  7. 前記第1の乗算の実行結果の要素のビット分解能は、前記第1のテンソルの要素のビット分解能よりも高い、請求項6に記載の方法。
  8. 前記第1のテンソルの各要素を前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、
    マスキングテンソルを生成することを含み、前記マスキングテンソルのサイズは、前記入力テンソルのサイズによって決まり、前記マスキングテンソルの要素は、前記平均プーリングニューラルネットワーク層のウィンドウのサイズによって決まり、
    前記第1のテンソルの各要素と、前記マスキングテンソルの対応する各要素との、要素ごとの乗算を実行することを含む、請求項1に記載の方法。
  9. 前記マスキングテンソルを生成することは、メモリに格納されている1つ以上のマスキングテンソルフラグメントをタイリングすることを含む、請求項8に記載の方法。
  10. 前記入力テンソルは、前記ハードウェア回路のユニファイドバッファに格納され、前記マスキングテンソルは、前記ハードウェア回路のダイナミックメモリに格納され、
    前記第1のテンソルの各要素を前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、
    前記入力テンソルを、前記ユニファイドバッファから、ハードウェアで実現される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記マスキングテンソルを、前記ダイナミックメモリから、前記ハードウェア回路の前記行列計算ユニットに送ることと、
    前記ハードウェア回路の前記行列計算ユニットにより、前記入力テンソルと前記マスキングテンソルとの、要素ごとの乗算を実行することによって前記第1のテンソルを生成することとを含む、請求項8に記載の方法。
  11. 前記入力テンソルは、前記ハードウェア回路のユニファイドバッファに格納され、前記カーネルは、前記ハードウェア回路のダイナミックメモリに格納され、
    前記入力テンソルと前記カーネルとの畳み込みを実行することにより、前記第1のテンソルを生成することは、
    前記入力テンソルを、前記ユニファイドバッファから、ハードウェアで実現される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記カーネルを、前記ダイナミックメモリから、前記ハードウェア回路の前記行列計算ユニットに送ることと、
    前記ハードウェア回路の前記行列計算ユニットにより、前記入力テンソルと前記カーネルとの畳み込みを実行することによって前記第1のテンソルを生成することとを含む、請求項1に記載の方法。
  12. 前記畳み込みを実行すること、および、前記第1のテンソルの各要素を除算するための演算を実行することとは、整数レジスタに格納された値に対する固定小数点演算として実行される、請求項1に記載の方法。
  13. システムであって、
    ハードウェア回路と、
    1つ以上の記憶装置とを備え、前記記憶装置は、ハードウェア回路によって実行されると前記ハードウェア回路に演算を実行させるように機能することが可能な命令を格納しており、前記演算は、
    平均プーリングニューラルネットワーク層に対する入力テンソルと、カーネルとの畳み込みを実行することにより、第1のテンソルを生成することを含み、前記カーネルは、前記平均プーリングニューラルネットワーク層のウィンドウに等しいサイズを有し、各々が恒等行列である要素で構成されており、
    前記演算は、さらに、
    前記第1のテンソルの各要素を、前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することを含む、システム。
  14. 前記演算は、前記初期出力テンソルのエッジ要素を第1のスケーリングファクタによってリスケーリングし、前記初期出力テンソルのコーナー要素を第2のスケーリングファクタによってリスケーリングすることにより、出力テンソルを生成することをさらに含む、請求項13に記載のシステム。
  15. 前記第1のスケーリングファクタは、前記第1のテンソルのエッジ要素を生成するために前記畳み込みを実行する際に前記カーネルの要素で乗算される前記入力テンソルの要素の数に基づいており、前記第2のスケーリングファクタは、前記第1のテンソルのコーナー要素を生成するために前記畳み込みを実行する際に前記カーネルの要素で乗算される前記入力テンソルの要素の数に基づいている、請求項14に記載のシステム。
  16. 前記演算は、前記第1のテンソルのエッジに隣接する要素を第3のスケーリングファクタによってリスケーリングし、前記第1のテンソルのコーナーに隣接する要素を第4のスケーリングファクタによってリスケーリングすることにより、前記出力テンソルを生成することをさらに含む、請求項13に記載のシステム。
  17. 前記入力テンソルとカーネルとの畳み込みを実行することによって第1のテンソルを生成することは、
    前記入力テンソルにゼロを埋め込むことによってゼロ埋込み入力テンソルを生成することと、
    前記ゼロ埋込み入力テンソルと前記カーネルとの畳み込みを実行することによって前記第1のテンソルを生成することとを含む、請求項13に記載のシステム。
  18. 前記第1のテンソルの各要素を前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、
    マスキングテンソルを生成することを含み、前記マスキングテンソルのサイズは、前記入力テンソルのサイズによって決まり、前記マスキングテンソルの要素は、前記平均プーリングニューラルネットワーク層のウィンドウのサイズによって決まり、
    前記第1のテンソルの各要素と、前記マスキングテンソルの対応する各要素との、要素ごとの乗算を実行することを含む、請求項13に記載のシステム。
  19. 前記入力テンソルは、前記ハードウェア回路のユニファイドバッファに格納され、前記マスキングテンソルは、前記ハードウェア回路のダイナミックメモリに格納され、
    前記第1のテンソルの各要素を前記平均プーリングニューラルネットワーク層のウィンドウ内の要素の数で除算することによって初期出力テンソルを生成させる演算を実行することは、
    前記入力テンソルを、前記ユニファイドバッファから、ハードウェアで実現される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記マスキングテンソルを、前記ダイナミックメモリから、前記ハードウェア回路の前記行列計算ユニットに送ることと、
    前記ハードウェア回路の前記行列計算ユニットにより、前記入力テンソルと前記マスキングテンソルとの、要素ごとの乗算を実行することによって前記第1のテンソルを生成することとを含む、請求項18に記載のシステム。
  20. 前記入力テンソルは、前記ハードウェア回路のユニファイドバッファに格納され、前記カーネルは、前記ハードウェア回路のダイナミックメモリに格納され、
    前記入力テンソルと前記カーネルとの畳み込みを実行することにより、前記第1のテンソルを生成することは、
    前記入力テンソルを、前記ユニファイドバッファから、ハードウェアで実現される前記ハードウェア回路の行列計算ユニットに送ることと、
    前記カーネルを、前記ダイナミックメモリから、前記ハードウェア回路の前記行列計算ユニットに送ることと、
    前記ハードウェア回路の前記行列計算ユニットにより、前記入力テンソルと前記カーネルとの畳み込みを実行することによって前記第1のテンソルを生成することとを含む、請求項13に記載のシステム。
JP2019531384A 2016-12-13 2017-08-22 ハードウェアにおける平均プーリングの実行 Active JP6900487B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/377,196 2016-12-13
US15/377,196 US10032110B2 (en) 2016-12-13 2016-12-13 Performing average pooling in hardware
US15/467,294 US10037490B2 (en) 2016-12-13 2017-03-23 Performing average pooling in hardware
US15/467,294 2017-03-23
PCT/US2017/048017 WO2018111357A1 (en) 2016-12-13 2017-08-22 Performing average pooling in hardware

Publications (2)

Publication Number Publication Date
JP2020506454A true JP2020506454A (ja) 2020-02-27
JP6900487B2 JP6900487B2 (ja) 2021-07-07

Family

ID=59746363

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019531384A Active JP6900487B2 (ja) 2016-12-13 2017-08-22 ハードウェアにおける平均プーリングの実行

Country Status (12)

Country Link
US (3) US10037490B2 (ja)
EP (2) EP4369255A1 (ja)
JP (1) JP6900487B2 (ja)
KR (2) KR102315346B1 (ja)
CN (2) CN108615072B (ja)
DE (2) DE202017105528U1 (ja)
DK (1) DK3555814T3 (ja)
FI (1) FI3555814T3 (ja)
GB (1) GB2557703B (ja)
IE (3) IE20170187A1 (ja)
SG (2) SG10201805259XA (ja)
WO (1) WO2018111357A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022014141A1 (ja) * 2020-07-17 2022-01-20 ソニーセミコンダクタソリューションズ株式会社 固体撮像素子、撮像装置、および、情報処理システム

Families Citing this family (45)

* 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
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
EP3596660A1 (en) * 2017-03-24 2020-01-22 Huawei Technologies Co., Ltd. Neural network data processing apparatus and method
US11010338B2 (en) * 2017-04-06 2021-05-18 Shanghai Cambricon Information Technology Co., Ltd Data screening device and method
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
CN107146616B (zh) * 2017-06-13 2020-05-08 Oppo广东移动通信有限公司 设备控制方法及相关产品
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US10740607B2 (en) * 2017-08-18 2020-08-11 Autel Robotics Co., Ltd. Method for determining target through intelligent following of unmanned aerial vehicle, unmanned aerial vehicle and remote control
CN107633295B (zh) * 2017-09-25 2020-04-28 南京地平线机器人技术有限公司 用于适配神经网络的参数的方法和装置
US11010666B1 (en) * 2017-10-24 2021-05-18 Tunnel Technologies Inc. Systems and methods for generation and use of tensor networks
US20190205738A1 (en) * 2018-01-04 2019-07-04 Tesla, Inc. Systems and methods for hardware-based pooling
US11164073B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Systolic neural network processor with feedback control
US11494582B2 (en) 2018-02-08 2022-11-08 Western Digital Technologies, Inc. Configurable neural network engine of tensor arrays and memory cells
CN110096309B (zh) * 2018-11-14 2020-04-14 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11636325B2 (en) * 2018-10-24 2023-04-25 Macronix International Co., Ltd. In-memory data pooling for machine learning
CN111126558B (zh) * 2018-10-31 2024-04-02 嘉楠明芯(北京)科技有限公司 一种卷积神经网络计算加速方法及装置、设备、介质
CN111160516B (zh) * 2018-11-07 2023-09-05 杭州海康威视数字技术股份有限公司 一种深度神经网络的卷积层稀疏化方法及装置
JP7315317B2 (ja) 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US10963746B1 (en) * 2019-01-14 2021-03-30 Xilinx, Inc. Average pooling in a neural network
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
KR20200116268A (ko) * 2019-04-01 2020-10-12 에스케이하이닉스 주식회사 버퍼 메모리, 이를 이용하는 연산 장치 및 시스템
CN110046705B (zh) * 2019-04-15 2022-03-22 广州异构智能科技有限公司 用于卷积神经网络的装置
CN110059805B (zh) * 2019-04-15 2021-08-31 广州异构智能科技有限公司 用于二值阵列张量处理器的方法
CN110033085B (zh) * 2019-04-15 2021-08-31 广州异构智能科技有限公司 张量处理器
CN110188795B (zh) * 2019-04-24 2023-05-09 华为技术有限公司 图像分类方法、数据处理方法和装置
US11593637B2 (en) 2019-04-30 2023-02-28 Samsung Electronics Co., Ltd. Convolution streaming engine for deep neural networks
KR20210014902A (ko) 2019-07-31 2021-02-10 삼성전자주식회사 프로세서 및 그 제어 방법
US11449739B2 (en) 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays
US20210103803A1 (en) * 2019-10-08 2021-04-08 Apple Inc. Multi-Mode Planar Engine For Neural Processor
CN112766471B (zh) * 2019-11-01 2024-03-29 中科寒武纪科技股份有限公司 运算装置及相关产品
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
CN111191780B (zh) * 2020-01-03 2024-03-19 珠海亿智电子科技有限公司 均值池化累加电路、装置以及方法
US11630991B2 (en) 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
KR20210126398A (ko) * 2020-04-10 2021-10-20 에스케이하이닉스 주식회사 시스톨릭 어레이를 갖는 신경망 연산 장치
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
KR20210156554A (ko) * 2020-06-18 2021-12-27 삼성전자주식회사 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치
KR20220001821A (ko) * 2020-06-30 2022-01-06 삼성전자주식회사 텐서 처리 방법, 가속기 및 이를 포함한 가속기 시스템
GB2604142B (en) * 2021-02-25 2023-02-22 Imagination Tech Ltd Implementation of softmax and exponential in hardware
US11797270B2 (en) 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
KR102361249B1 (ko) * 2021-08-02 2022-02-14 오픈엣지테크놀로지 주식회사 브로드캐스팅 멀티플라이 최적화 방법 및 이를 이용한 하드웨어 가속기, 이를 이용한 컴퓨팅 장치
US11657864B1 (en) * 2021-12-17 2023-05-23 Winbond Electronics Corp. In-memory computing apparatus and computing method having a memory array includes a shifted weight storage, shift information storage and shift restoration circuit to restore a weigh shifted amount of shifted sum-of-products to generate multiple restored sum-of-products

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06164905A (ja) * 1992-11-24 1994-06-10 Ricoh Co Ltd 画像処理装置
JP2009230494A (ja) * 2008-03-24 2009-10-08 Nec Corp Fpgaを用いた並列周辺画素加算モジュール、その方法及びそのプログラム
US20120030932A1 (en) * 2010-08-04 2012-02-09 Tesla Motors, Inc. Method of Controlled Cell-Level Fusing Within a Battery Pack
JP2013200778A (ja) * 2012-03-26 2013-10-03 Fujitsu Ltd 画像処理装置、画像処理方法
US20150170021A1 (en) * 2013-12-18 2015-06-18 Marc Lupon Reconfigurable processing unit

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1003749A (en) 1910-04-05 1911-09-19 Gustav Jaennert Razor.
US1003211A (en) 1910-04-11 1911-09-12 William S Levings Valve-locking device.
US6389441B1 (en) 1999-05-28 2002-05-14 Eastman Kodak Company Two dimensional moving average filter
JP4573769B2 (ja) 2005-12-20 2010-11-04 富士通セミコンダクター株式会社 画像処理回路および画像処理方法
GB2436377B (en) 2006-03-23 2011-02-23 Cambridge Display Tech Ltd Data processing hardware
KR100793285B1 (ko) 2007-05-11 2008-01-10 주식회사 코아로직 필터 매트릭스에 의한 영상 노이즈 제거 시스템, 방법 및그 기록매체
US10078620B2 (en) 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
US8886533B2 (en) 2011-10-25 2014-11-11 At&T Intellectual Property I, L.P. System and method for combining frame and segment level processing, via temporal pooling, for phonetic classification
WO2014055874A1 (en) 2012-10-05 2014-04-10 Raytheon BBN Technologies, Corp. Fast computation of kernel descriptors
US20150104102A1 (en) 2013-10-11 2015-04-16 Universidade De Coimbra Semantic segmentation method with second-order pooling
US9424492B2 (en) 2013-12-27 2016-08-23 Xerox Corporation Weighting scheme for pooling image descriptors
WO2016033710A1 (en) 2014-09-05 2016-03-10 Xiaoou Tang Scene text detection system and method
US10083395B2 (en) 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US9792492B2 (en) * 2015-07-07 2017-10-17 Xerox Corporation Extracting gradient features from neural networks
JP2017068608A (ja) * 2015-09-30 2017-04-06 株式会社東芝 演算装置、方法及びプログラム
US10275394B2 (en) 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Processor with architectural neural network execution unit
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
JP6750203B2 (ja) * 2015-10-20 2020-09-02 富士通株式会社 畳み込みニューラルネットワークの演算方法及び演算プログラム、情報処理装置
US9904874B2 (en) * 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
CN105488656A (zh) 2015-11-20 2016-04-13 贵州电网有限责任公司遵义供电局 一种电网分县局继电保护管理系统功能模块动态配置技术
US10552119B2 (en) * 2016-04-29 2020-02-04 Intel Corporation Dynamic management of numerical representation in a distributed matrix processor architecture
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06164905A (ja) * 1992-11-24 1994-06-10 Ricoh Co Ltd 画像処理装置
JP2009230494A (ja) * 2008-03-24 2009-10-08 Nec Corp Fpgaを用いた並列周辺画素加算モジュール、その方法及びそのプログラム
US20120030932A1 (en) * 2010-08-04 2012-02-09 Tesla Motors, Inc. Method of Controlled Cell-Level Fusing Within a Battery Pack
JP2013200778A (ja) * 2012-03-26 2013-10-03 Fujitsu Ltd 画像処理装置、画像処理方法
US20150170021A1 (en) * 2013-12-18 2015-06-18 Marc Lupon Reconfigurable processing unit

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
DU, ZIDONG ほか: "ShiDianNao: Shifting vision processing closer to the sensor", PROCEEDINGS OF THE 42ND ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE, JPN7020004297, June 2015 (2015-06-01), ISSN: 0004421964 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022014141A1 (ja) * 2020-07-17 2022-01-20 ソニーセミコンダクタソリューションズ株式会社 固体撮像素子、撮像装置、および、情報処理システム

Also Published As

Publication number Publication date
US20180165577A1 (en) 2018-06-14
DE202017105528U1 (de) 2017-12-18
KR102315346B1 (ko) 2021-10-19
US20180300628A1 (en) 2018-10-18
CN108615072A (zh) 2018-10-02
EP4369255A1 (en) 2024-05-15
US20190354863A1 (en) 2019-11-21
JP6900487B2 (ja) 2021-07-07
CN114239797A (zh) 2022-03-25
FI3555814T3 (fi) 2024-03-18
DK3555814T3 (da) 2024-03-18
IE20190119A1 (en) 2020-09-30
KR102370563B1 (ko) 2022-03-03
IE20180231A1 (en) 2018-10-17
GB2557703B (en) 2021-03-31
DE102017121257A1 (de) 2018-06-14
US10679127B2 (en) 2020-06-09
GB2557703A (en) 2018-06-27
US11232351B2 (en) 2022-01-25
KR20190089204A (ko) 2019-07-30
SG10201707701PA (en) 2018-07-30
SG10201805259XA (en) 2018-07-30
KR20210127813A (ko) 2021-10-22
EP3555814A1 (en) 2019-10-23
GB201715180D0 (en) 2017-11-01
CN108615072B (zh) 2021-12-07
WO2018111357A1 (en) 2018-06-21
EP3555814B1 (en) 2023-12-27
US10037490B2 (en) 2018-07-31
IE20170187A1 (en) 2018-06-27

Similar Documents

Publication Publication Date Title
JP2020506454A (ja) ハードウェアにおける平均プーリングの実行
US10032110B2 (en) Performing average pooling in hardware
JP7346510B2 (ja) ニューラルネットワークプロセッサにおけるベクトル計算ユニット
US11704547B2 (en) Transposing neural network matrices in hardware
CN108073983B (zh) 在硬件中执行核心跨越

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191113

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210302

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: 20210518

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210616

R150 Certificate of patent or registration of utility model

Ref document number: 6900487

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150