(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-11
(45)【発行日】2022-01-24
(54)【発明の名称】ハードウェアベースのプーリングのシステムおよび方法
(51)【国際特許分類】
G06N 3/063 20060101AFI20220117BHJP
G06F 17/16 20060101ALI20220117BHJP
【FI】
G06N3/063
G06F17/16 K
(21)【出願番号】P 2020536937
(86)(22)【出願日】2018-12-12
(86)【国際出願番号】 US2018065290
(87)【国際公開番号】W WO2019135873
(87)【国際公開日】2019-07-11
【審査請求日】2020-08-27
(32)【優先日】2018-01-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】510192916
【氏名又は名称】テスラ,インコーポレイテッド
(74)【代理人】
【識別番号】110000659
【氏名又は名称】特許業務法人広江アソシエイツ特許事務所
(72)【発明者】
【氏名】バノン,ピーター ジョセフ
(72)【発明者】
【氏名】ハード,ケヴィン アルテア
【審査官】吉倉 大智
(56)【参考文献】
【文献】米国特許出願公開第2016/0342893(US,A1)
【文献】米国特許出願公開第2015/0178246(US,A1)
【文献】特開2009-015637(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
プーリングユニットアーキテクチャであって、
制御装置と、
前記制御装置に連結されたアライナであって、前記アライナは、入力データの受信に応じて、前記入力データを行に整列してプーリング配列を生成し、いくつかの算術サイクルにわたって行を相互にシフトして前記入力データを再フォーマットされたデータに再フォーマットする、アライナと、
前記アライナに連結されたプーラであって、前記プーラは、後続の算術サイクルにおいて、少なくともいくつかの前記再フォーマットされたデータにプーリング演算を適用して、プーリング値を含むプーリング出力を得て、各行からのデータのサブセットは、前記プーリング値の生成元となるデータのセットと組み合わされる、プーラと、
を備える、プーリングユニットアーキテクチャ。
【請求項2】
前記入力データは、行列処理装置によって生成されたものである、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項3】
前記入力データのストリームを維持するために、前記プーリング出力は、前記行列処理装置が前記入力データを生成する速度と同じ速度で生成される、請求項2に記載のプーリングユニット
アーキテクチャ。
【請求項4】
前記プーラが1つ以上のプーリング計算を並行して実行し、前記プーリング計算の数が、前記行列処理装置の出力チャネルの数に等しく、その結果、カーネルサイズに関係なく、前記プーリング出力が前記行列処理装置の幅に対応する、請求項2に記載のプーリングユニット
アーキテクチャ。
【請求項5】
前記プーラに連結された乗算およびシフト回路をさらに含み、乗算およびシフト回路は、前記プーリング演算に基づいて前記プーリング出力を生成する、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項6】
前記入力データが特徴マップのセットに対応し、前記プーラが前記再フォーマットされた入力データを使用して、所定の因子によって、前記特徴マップのセットの高さおよび幅のうちの少なくとも1つを低減する、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項7】
前記行は、前記入力データと同じ幅を有し、各行は、行列内の近傍値のセットに対応するデータのセクションを含む、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項8】
前記プーリング出力を出力配列にシフトするステートマシンをさらに備える、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項9】
前記制御装置は、前記一連の前記プーリング演算自体を変更することなく、プーリング演算に含まれるデータポイントの数および位置を判定する、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項10】
1つの行から別の行へのシフトは、ストライド値の行列にわたって畳み込むプーリングウィンドウのシフトに対応し、該シフトは、前記算術サイクルの数によって定義される、請求項1に記載のプーリングユニット
アーキテクチャ。
【請求項11】
ハードウェアベースのプーリングシステムを使用する方法であって、
前記プーリングシステムは、請求項1から10のいずれか一項に記載のプーリングユニットアーキテクチャを備えており、前記方法は、
畳み込みニューラルネットワーク(CNN)における畳み込み層の出力チャネルを表すデータの配列を畳み込みエンジンから受信するステップと、
該データの配列を、配列のセットの少なくとも2つの配列にデータを適用してプーリング結果を生成するプーリング演算に従って整列された前記配列のセットに変換するステップと、
前記プーリング結果をメモリデバイスに出力するステップと、
を含む、方法。
【請求項12】
前記データの配列は、ハードウェアベースのプーリングユニットで受信される、請求項11に記載の方法。
【請求項13】
データの配列が、いくつかの算術サイクルの間隔で受信される、請求項11に記載の方法。
【請求項14】
プーリング結果が各間隔で生成される、請求項11に記載の方法。
【請求項15】
プーリング結果が各間隔で出力される、請求項14に記載の方法。
【請求項16】
前記データの配列は、特徴マップのセットに対応する、請求項11に記載の方法。
【請求項17】
請求項1から10のいずれか一項に記載のプーリングユニットアーキテクチャを使用する方法であって、
ハードウェアベースのプーリング
ユニットで、互いに事前定義された関係を持つデータ配列のセットを受信するステップと、
前記ハードウェアベースのプーリングユニットを使用して、ストライド値に従って、前記データ配列のセットからの少なくとも2つの配列内のデータにプーリング演算を適用して、メモリに畳み込み結果を書き込む要件を満たす必要なしにプーリング結果を得るステップと、
前記プーリング結果を、それぞれが畳み込みニューラルネットワーク(CNN)の層におけるニューロンを表すデータポイントの行として出力するステップと、
を含む、方法。
【請求項18】
前記データ配列のセットは、畳み込みエンジンから受信される、請求項17に記載の方法。
【請求項19】
前記プーリング結果を得るステップは、出力チャネルと入力チャネルとの間の1対1の関係を利用する、請求項17に記載の方法。
【請求項20】
前記プーリング結果は、平均プーリング結果および最大プーリング結果のうちの1つを含む、請求項17に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本出願は、2018年1月4日に出願され、「SYSTEMS AND METHODS FOR HARDWARE-BASED POOLING」と題された、発明者としてPeter Joseph BannonおよびKevin Altair Hurdを挙げている米国特許出願公開第15/862,369号明細書(整理番号20150-2167)に対する優先権を主張する。前述の各特許文書は、その全体が参照により本明細書に組み込まれる。
【0002】
本開示は、概して、計算処理能力および記憶要件などの計算資源の利用を改善するためのシステムおよび方法に関する。特に、本開示は、畳み込みおよびプーリングデータを生成するために、畳み込みニューラルネットワーク(CNN)アーキテクチャを使用するコンピュータ・ビジョン・アプリケーションにおける演算処理の効率を改善するためのシステムおよび方法に関する。
【背景技術】
【0003】
ニューラルネットワークベースの画像分類器は、分類および物体認識のための複雑な特徴を自動的に学習することに著しい改善を実現している。例えば、畳み込みニューラルネットワーク(CNN)モデルを使用して、画像が人または動物を含むものとして分類され得るか否かを自動的に判定することができる。CNNは、判定または予測を行うときに、複数の階層的ネットワーク層および副層を入力画像に適用する。CNNの1つの特性は、各ネットワーク層が前の層の出力として機能し、典型的には、最初の畳み込み層で始まり、1つ以上の最終層、例えば、入力画像が特定の物体を含むものとして確かに分類され得る見込みを示すスコアを、アクティベーション値が送達するノードを含む完全結合層で終わるということである。
【0004】
畳み込み層は、画像の畳み込みウィンドウの画素に重みのセットを適用するカーネルまたは活性化関数として知られるいくつかのフィルタを使用できる。そのウィンドウに関連付けられた活性化値を生成するために、重みは訓練フェーズ中にCNNによって学習された。各フィルタについて、畳み込み層は、画素ごとに、重みのセットに基づいて計算される活性化値を出力する1つのノード、すなわちニューロンを有してもよい。畳み込みウィンドウの活性化値は、画像内の他の位置で特徴を識別するために使用できるエッジなどの特徴または特性を識別する。フィルタのすべてのノードが重みの同じセットを共有できるため、重みを再利用することは、記憶空間と計算時間の両方の使用を向上させる一般的な手法である。
【0005】
CNNの最も重要な種類の層には、典型的には、畳み込み層の後に配置される基本的な独立したビルディングブロックであるプーリング層がある。画像に適用されると、プーリング層により、ネットワークは特徴マップを判定し、画像の特徴のセットを学習できる。プーリングは、最大プーリングや平均プーリングなどの非線形関数を使用して、ネットワークを介して層から層へと進むときにニューロンの数を減らす、非線形関数を使用する非線形サブサンプリングまたはダウンサンプリングの形式と見なされ、これにより、計算量が低減され、計算パフォーマンスがさらに向上する。
【0006】
プーリングは、一般に、プーリングウィンドウ、例えば、幅が複数の画素、高さが複数の画素の2次元の正方形を、前の畳み込み層の出力の重なり合わない小さな領域(すなわち、受容野)にわたって段階的にスライドさせることを含む。その領域の一群のニューロンの値を集計することにより、局所的近傍の各群の単一の出力値(例えば整数)が提供される。各群に割り当てられたこれらの出力値は、畳み込みを実行せずに後続の層に渡され、プールされた領域で使用されるプーリング関数の種類(例えば平均または最大)に依存する。プーリングウィンドウのサイズおよび位置は、プーリングストライド(すなわち間隔またはステップサイズ)および出力画素の位置に依存する。多くの場合、最後のプーリング層の後には、特定のクラスについて、例えば条件付確率の推定として、最終的な予測を出力するCNNアーキテクチャの最終出力層(例えば、ソフトマックスの非線形性を有する完全結合層)が続く。
【0007】
重みの共有と算術論理ユニットの使用率の向上による畳み込み層のパフォーマンスの向上は大きな進歩を遂げているが、同様に計算集約的なプーリング層は、主に既存のニューラル・ネットワーク・アーキテクチャに固有の制約のために軽視されてきた。
【発明の概要】
【発明が解決しようとする課題】
【0008】
したがって、ニューラルネットワークのプーリング層のパフォーマンスを改善して、利用可能な計算資源の利用端パフォーマンスをさらに高めて、全体的な計算コストを削減するシステムおよび方法を有することが望ましいと思われる。
【図面の簡単な説明】
【0009】
本発明の実施形態が参照され、その例が添付の図に示されている可能性がある。これらの図は、限定ではなく例示を意図したものである。本発明は一般にこれらの実施形態の文脈で説明されているが、本発明の範囲をこれらの特定の実施形態に限定することを意図していないことを理解されたい。
【0010】
【
図1】本開示の様々な実施形態によるプーリング演算を実行するためにプーリングユニットを使用するシステムの例示的なブロック図である。
【0011】
【
図2】本開示の様々な実施形態によるプーリングユニットアーキテクチャの例示的なブロック図である。
【0012】
【
図3】
図1に示されるプーリングシステムを使用するための例示的なプロセスのフローチャートである。
【0013】
【
図4】
図2に示されるプーリングユニットアーキテクチャを使用するための例示的なプロセスのフローチャートである。
【0014】
【
図5】本開示の様々な実施形態によるプーリング演算を実行するための例示的なプロセスのフローチャートである。
【発明を実施するための形態】
【0015】
以下の説明では、説明の目的で、本発明の理解を提供するために特定の詳細が示されている。しかしながら、当業者には、これらの詳細なしで本発明を実施できることが明らかであろう。さらに、当業者は、以下に説明される本発明の実施形態が、有形のコンピュータ可読媒体に対してプロセス、装置、システム、デバイス、または方法などの様々な方法で実装され得ることを認識するであろう。
【0016】
図に示されている構成要素またはモジュールは、本発明の例示的な実施形態の例示であり、本発明を不明瞭にしないことを意図している。この議論全体を通して、構成要素は、サブユニットを含み得る別個の機能ユニットとして説明され得るが、当業者は、様々な構成要素またはその一部が別個の構成要素に分割され得るか、あるいは単一のシステムまたは構成要素内に統合されることを含め、一緒に統合され得ることを理解するであろう。本明細書で論じられる機能または動作は、構成要素として実装され得ることに留意されたい。構成要素は、ソフトウェア、ハードウェア、またはそれらの組み合わせで実装できる。
【0017】
さらに、図内の構成要素またはシステム間の接続は、直接接続に限定されることを意図していない。むしろ、これらの構成要素間のデータは、中間構成要素によって変更、再フォーマット、または変更される場合がある。また、追加またはより少ない接続が使用される場合がある。「結合された」、「接続された」、または「通信可能に結合された」という用語は、直接接続、1つ以上の中間デバイスを介した間接接続、および無線接続を含むと理解されるべきことにも留意されたい。
【0018】
本明細書における「一実施形態」、「好ましい実施形態」、「実施形態(単数または複数)」への言及は、実施形態に関連して説明される特定の特徴、構造、特性、または機能が、本発明の少なくとも1つの実施形態に含まれ、また複数の実施形態に含まれ得ることを意味する。また、本明細書の様々な箇所での上記の句の出現は、必ずしもすべて同じ実施形態(単数または複数)を参照しているとは限らない。
【0019】
本明細書の様々な箇所での特定の用語の使用は、例示のためのものであり、限定として解釈されるべきではない。サービス、機能、または資源は、単一のサービス、機能、または資源に限定されず、これらの用語の使用は、関連するサービス、機能、または資源のグループ化を指し、これは分散または集約されてもよい。さらに、メモリ、データベース、情報ベース、データストア、テーブル、ハードウェアなどの使用は、本明細書では、情報を入力または記録することができるシステム構成要素(単数または複数)を指すために使用することができる。
【0020】
さらに、以下に留意されたい。(1)特定のステップが任意選択的に実行される場合があり、(2)ステップは、本明細書に記載された特定の順序に限定されない場合があり、(3)特定のステップは異なる順序で実行される場合があり、(4)特定のステップは同時に実行される場合がある。
【0021】
図1は、本開示の様々な実施形態によるプーリング演算を実行するためにプーリングユニットを使用するシステムの例示的なブロック図である。システム100は、SRAM102、データ/重みフォーマッタ110、行列処理装置120、後処理ユニット130、プーリングユニット140、制御論理150を含む。システム100は、論理回路および/または制御回路などの追加の回路および副回路、キャッシュ、ローカルバッファ、コンパレータ、ステートマシン、追加の後処理ユニット、および管理機能を実行する補助デバイスを含み得ることが理解される。
【0022】
実施形態において、システム100の任意の構成要素は、例えば、畳み込みまたは他の数学的計算などの動作を実行するとき、システム100の状態および動作を監視し、動作の後続のステップで使用されるデータを取得する位置を計算し得る制御論理150によって、部分的または全体的に制御され得る。同様に、制御論理150は、他の構成要素、例えば、
図1に示されていない構成要素および/またはシステム100の外部の構成要素を管理することができる。
【0023】
実施形態において、SRAM102は、例えば、データ入力行列および重み入力行列104に、入力画像データを格納し、アクセス可能にする。当業者は、他のタイプの記憶デバイスが使用されてもよいことを認識するであろう。
【0024】
実施形態において、重み入力行列およびデータ入力行列104に基づいて、データ/重みフォーマッタ110は、例えばそれぞれ96列幅の2つの出力108を、行列処理装置120に対して生成し、これは行列の非常に多数の要素を並行して処理して、データを行列演算に効率的にマッピングしてもよい。データ/重みフォーマッタ110は、例えば、行列処理装置120の特定のハードウェア要件に従って、例えば、データ入力行列および重み入力行列104を、行列処理装置120によるさらなる処理のための適切なフォーマットに変換する任意の数のインラインフォーマッタとして実装され得る。実施形態において、フォーマッタ110は、二次元または三次元行列を、行列処理装置120への入力108として利用できるように線形化またはベクトル化されたデータを作成する前に、行または列によって表され得る単一のベクトルまたは文字列に変換する。結果として、行列処理装置120は、システム100における畳み込み計算の一部として行列乗算演算を実行するために効率的に利用されて、例えば画像に再構築され得る出力配列122を生成し得る。
【0025】
本開示の実施形態を使用するニューラルネットワークモデルは、最大プーリング層、平均プーリング層、および他のニューラルネットワーク層を使用するプーリングネットワークを含み得る。プーリングネットワークは、例えば、(完全結合層を使用する処理モジュールによって)実施形態において、非線形関数、例えば、Rectified Linear Unit(ReLU)、ロジスティックシグモイド関数などの既知の関数を使用する活性化層が後に続くか、または先行してもよい。
【0026】
実施形態において、行列処理装置120は、個々のフィルタ(例えば、重み)を入力画像データに適用することによって畳み込み演算を実行し、入力画像内の小さな特徴を検出する。一連の異なる特徴を異なる順序で分析することにより、入力画像においてマクロ特徴をそのように識別することができる。各入力チャネルは情報の異なるセットを含むことができ、各重み行列を使用して異なる特徴を検出することができるため、行列処理装置120は、各入力チャネルに対して重みの異なるセットを使用することができる。実施形態において、行列処理装置120は、矩形状の入力行列に矩形状の重み行列を乗算して部分ドット積を得て、これを合計して、累積されたドット積、すなわち整数を生成することができ、これは、出力画像の出力画素を表す。実施形態において、出力配列122は、フォーマッタ110によって処理された2つの行列108のドット積に対応し得る。
【0027】
実施形態において、行列処理装置120は、畳み込み演算を行列乗算(例えば、96×96行列乗算)に変換することによって、入力をフィルタで畳み込み、出力122を生成する畳み込み演算を実行することができる。行列処理装置120は、算術論理ユニット、レジスタ、エンコーダなどの回路を備えることができ、任意の数の列および行を有するものとして実装されて、データおよび重みの大規模なセットにわたって数学的加速された演算を実行することができる。これらの大規模演算は、例えば、システム100内の冗長演算を減らし、ハードウェア固有の論理を実施することにより、畳み込み演算を加速するために、行列処理装置120の特定のハードウェア要件に従ってタイミングをとることができる。
【0028】
実施形態において、行列処理装置120は、後処理ユニット130内の記憶デバイスに格納され得る出力チャネルを表す線形化されたベクトルまたは配列を出力する122。実施形態において、プーリングユニット140は、行列処理装置120の単一の出力チャネル上で動作し、出力122または後処理された出力124は、そうでなければ行列演算に都合よくマッピングしない可能性がある配列である。したがって、実施形態において、出力配列122は、システム100の効率を高めるために、プーリングユニット140に適したフォーマットに再フォーマットされてもよい。
【0029】
対照的に、格納された畳み込み上でベクトル演算を実行するベクトルエンジンを使用する従来の実装では、一部には、出力配列122内のいくつかの値は隣接していてもよいが、他はそうでなくてもよいため、行列処理装置120などの高効率行列処理装置の出力のかなり複雑で非効率なプーリング演算をもたらし得る。要するに、行列処理装置120による畳み込み演算に続くプーリングアルゴリズムは、一般的なプーリング方法に対する便利な形状またはフォーマットで提示されていない出力配列122の値の組み合わせを処理しなければならないであろう。したがって、実施形態において、出力配列122は、高効率行列処理装置120への改善されたプーリング方法の適用を可能にするために再フォーマットされる。
【0030】
これを達成するために、実施形態において、ハードウェアプーリングユニット140は、例えば、後処理ユニット130によって処理されるような出力配列122の受信に応答して、受信データをグリッドフォーマットに再フォーマットし、その結果、出力配列122のいくつかの要素は、垂直方向に整列されてもよく、他は水平方向に整列されてもよく、その結果、面倒な計算集約型の中間ステップやデータ記憶動作を実行する必要なく、プーリングを直接適用できる。実施形態において、フォーマッタ110は、異なる形状の入力行列データを、行列処理装置120に適した列および行に再フォーマットすることができる。実施形態において、異なる入力サイズを有する行列の処理に対応するために、フォーマットを動的に実行することができる。
【0031】
実施形態において、プーリングユニット140は、再フォーマットされたデータにプーリング関数、例えば、平均プーリングおよび最大プーリングを適用して、例えば、特徴マップとしてSRAM102に書き込まれ、かつ記憶され得るプールされたデータ106を生成および出力する。プーリングユニット140の内部動作は、
図2に関してより詳細に説明される。
【0032】
実施形態において、行列処理装置120は、畳み込みデータの次のセットを蓄積および計算しながら、畳み込みデータのセット、例えば出力配列122を出力する。同様に、プーリングユニット140は、行列処理装置120からシフトされたデータからオンザフライで出力106を生成し、これにより、プーリング層を通過する前に畳み込みが中間記憶装置に格納されることを必要とするソフトウェアベースのプーリング方法と比較した場合、プーリングのコストをカバーし、計算時間を低減する。
【0033】
実施形態において、後処理ユニット130は、例えば、シフトレジスタを形成する出力フリップフロップ(図示せず)を介して、行列処理装置120の最下行から、出力チャネルに対応するデータ、例えば、ドット積結果を受信する。後処理ユニット130は、例えば、非線形ReLU関数を出力配列122に適用することができる。
【0034】
所定の出力特徴マップサイズを得るために、畳み込み層演算の前に、行列のエッジでパディング、例えばゼロパディングを実行できることに留意されたい。実施形態において、ストライドが1より大きい値に設定される場合、パディングが有効にされ得る。パディングが有効である場合、制御論理150は特定の列をゼロとして扱うことができ、平均プーリング演算の除数が平均計算に含まれる非ゼロプーリング値の合計と等しくなるように調整される。
【0035】
図2は、本開示の様々な実施形態によるプーリングユニットアーキテクチャの例示的なブロック図である。プーリングユニット200は、行アライナ206、書き込みアライナ204、プーリング配列208、プーラ210を含み得る。実施形態において、プーラ210は、最大ユニット(図示せず)、平均化ユニット212、または出力230を生成するためにプーリング演算を実行し得る任意の他のユニットを備え得る。実施形態において、平均化ユニット212は、除算および/またはスケールユニット216が後に続く加算要素214を使用することによって、平均化関数を実行する。
【0036】
入力202は、特徴マップのセットに対応し得る。実施形態において、入力202は、例えば、「Accelerated Mathematical Engine」と題された、米国特許出願公開第15/710,433号明細書に開示されており、この参照は、その全体が本明細書に組み込まれる高効率行列処理装置の要件に従って生成された出力チャネルを構成する。
【0037】
実施形態において、プーリングユニット200は、入力202の受信に応答して、プーリングユニット内のデータを、例えば、特徴マップの高さおよび幅を2分の1に縮小するために従来のプーリング方法が適用され得るグリッドパターンと同等のものに再フォーマットする。実施形態において、プーリングユニット200は、入力202と同じ幅を有するいくつかの行に(例えば、行アライナ206において)入力202を配置および格納することによって再フォーマットを達成し、その結果、各行は、プーリング結果を得るためにプーリング演算を適用できる行列の一群の近傍値に対応するデータのセクションを含む。実施形態において、同じ近傍に属するセクションが抽出され得るように行が整列されると、例えば、プーラ210によって、プーリングが容易に実行され得る。実施形態において、このようにプールされたセクションの組み合わせは、畳み込みのプールされた出力チャネル全体のプーリング結果を表す。
【0038】
実施形態において、行アライナ206は、プールされるデータとしてプーラ210によってアクセスおよび読み取ることができるような方法で入力202を格納する。言い換えると、行列処理装置の出力チャネルは、入力データ102のストリームを維持しながら、プーラ210によってプールされて容易に読み取ることができるフォーマットに再フォーマットすることができる。実施形態において、行アライナ206は、制御装置(図示せず)によって制御されて、結果をいくつかのプーリング配列208、例えば、プールされるデータを含む3つの配列に書き込む前に、入力される入力202をシフトする。
【0039】
実施形態において、プーラ210は、特定のプーリング計算で使用するために行アライナ206内の適切な値を識別し、プーリング配列208からいくつかの値を抽出して、プーリング結果を計算する。プーリング結果は、使用されるプーリング関数のタイプに依存し、適切なプーリング結果に変換される可能性のある平均値、最大値、または中間値(合計など)であってもよい。実施形態において、除算および/またはスケールユニット216は、平均化ユニット212の後に続いてもよく、出力230を生成する乗算およびシフト回路として実装され得る。実施形態において、プーラ210は、プーリング配列208にアクセスして、いくつかのプーリングされる値を含むプーリング配列208の任意のサブセクションを処理することができる。例えば、プーラ210は、3×3プーリングウィンドウに対応する9つの値をプールして、平均プーリング値を生成することができる。プーリングウィンドウは、パラメータ設定に応じて任意のサイズおよび形状をとることができると理解される。
【0040】
実施形態において、入力202が読み取られ、例えば、データの行を整列させる方法(
図4に関してさらに論じる)を使用して、n算術サイクルの期間にわたって再フォーマットが適用され、各サイクルで、例えば、一度に1行、プーリング結果230を生成する。実施形態において、出力チャネルが、例えば入力202として読み取られると、次の出力チャネルが読み取られ、例えば、異なるプーラ212にデータの行を格納するメモリの異なるセットを使用することにより、行列処理装置によって提供されるすべての出力チャネルが処理され、結果230が出力され得るまで再フォーマットが適用され得る。出力チャネルの一部、および一般に、様々な出力チャネルは、
図2および添付のテキストに示されるもの以外の他の方法および他の回路構成を使用して、様々な時点で処理され得ることが理解される。当業者が理解するように、追加のプーリング層を使用して、より高いレベルまたは洗練された特徴マップを出力することができる。
【0041】
実施形態において、プーリングユニット200は、行列処理装置120と同じくらい速くプーリング結果を計算して、出力122を生成する。プーリングユニット140は、スライディングウィンドウが計算間で交差する要素の量を制御するために、例えば、n=2またはn=3のストライドを適用することができる。当業者は、プーリング層のためのスライディング機構が、例えば、2または3の共通のカーネルサイズを使用する畳み込み層と同様の方法で動作し、平均または最大値がプーリングウィンドウにおいて選択されるという違いはあることを理解するであろう。
【0042】
実施形態において、プーリングユニット200は、処理されたデータを受信し、互いに対して空間的にシフトされ得る配列のセットに対して計算を実行する。実施形態において、プーリング結果124は、ステートマシン(図示せず)によって、例えば、クロックサイクルごとに1つ、出力配列に引き込まれるかまたはシフトされる。ステートマシンは、データをSRAM102または他の何らかの後処理ユニット(図示せず)に送信する前に、プーリング結果124に対して追加の演算を実行することができる。
【0043】
プーリングユニット200は、プーリングユニット200に結合された任意の数の構成要素の一連の動作を調整する制御ユニットなど、
図2に示されていない構成要素およびサブ回路をさらに含み得ることが理解される。例えば、制御ユニットは、一連の演算自体を変更することなく、所与の演算に含まれるデータポイントの数および位置を判定することができる。
【0044】
図3は、
図1に示されるプーリングシステムを使用するための例示的なプロセスのフローチャートである。プロセス300は、畳み込みエンジンからのデータが、例えば、プーリングユニットで、nサイクルごとに受信されると、ステップ302を開始する。実施形態において、データはデータ配列の形で受信され、CNN内の畳み込み層の出力チャネルを表す。
【0045】
ステップ304で、配列は、プーリング演算に従って整列される配列のセットに変換される。実施形態において、ステップ306でプーリング演算は、配列のセットからの少なくとも2つの配列を使用して、プーリング演算を適用し、プーリング結果、例えばサイクルごとに1つの結果を生成する。
【0046】
最後に、ステップ308で、メモリデバイスに、例えば、算術サイクルごとに1行として、プーリング結果が出力される。
【0047】
図4は、
図2に示されるプーリングユニットアーキテクチャを使用するための例示的なプロセスのフローチャートである。プロセス400は、ハードウェアベースのプーリングユニットが、それぞれが互いに事前定義された関係を有するデータ配列のセットを畳み込みエンジンから受信すると、ステップ402を開始する。
【0048】
ステップ404で、ハードウェアベースのプーリングユニットを使用して、プーリング演算がデータ配列のセットからの少なくとも2つの配列内のデータに適用され、プーリング結果、例えば平均または最大プーリング結果が得られる。プーリング演算は、ストライド値に従って適用できる。さらに、このハードウェアベースのプーリング方法は、1:1の出力チャネルと入力チャネルとの関係を利用し、これは畳み込み結果を中間メモリに書き込む必要をなくす。
【0049】
ステップ406で、プーリング結果は、例えば、それぞれがCNNの層におけるニューロンを表す、サイクルごとのデータポイントの1行として出力される。
【0050】
図5は、
図2に示すプーリングユニットアーキテクチャを使用してプーリングを実行するためのプロセスを示す例示的なブロック図である。実施形態において、プーリングユニットアーキテクチャの行列処理装置502は、出力チャネル504を出力する。プーリング演算は固定された重みを使用する畳み込みとして扱うことができるため、行列処理装置を使用してプーリング演算を実行できる。ただし、通常、プーリングには出力チャネルが1つしかないため、一度にマルチ出力チャネル行列処理装置の唯一の出力チャネルを動作するのは、計算資源を不必要に拘束するかなり非効率的な作業である。したがって、計算効率を高めるために、実施形態において、出力チャネル504は、例えば、各行506~510が次のサイクルで他に対してシフトされるように、
図2に示すような行アライナによって整列されるいくつかの行506~510に書き込むことができる。実施形態において、
図5の行Y=0、Y=1、およびY=2は、出力チャネル504を保持してもよく、それぞれのサイクル0から2に書き込まれ、格納されていてもよい。
【0051】
例えば、サイクル0では、入力202の少なくとも第1のセクションが、例えば、左詰めで、行Y=0に格納される。次のサイクル、サイクル1において、同じセクションが行Y=1などに格納され、行506~510を埋めるために3つの読み取りサイクルが必要である。行506510が入力されると、行506~510からのデータを組み合わせて、プーリング計算を実行できる。例えば、行506~510のそれぞれからの3つの値は、結果としてプーリング値514を生成する9つの値に組み合わされ得る。
【0052】
なお、プーリング計算は並行して実行されてもよい。例えば、入ってくる出力チャネル504のストリームを維持するために、プーリング計算の数は、行列処理装置502における出力チャネルの総数に等しくてもよく、その結果、カーネルサイズに関係なく、行列処理装置502の全幅518に対応するプーリングデータが出力されてもよい。
【0053】
実施形態において、1つの行から別の行へのシフトは、行列にわたって畳み込み、プーリング結果を生成するとき、プーリングウィンドウのシフトに対応する。実施形態において、プーリングウィンドウに起因するシフトは、サイクル数によって定義され、同じサイクル数によって定義される値を有するストライドに対応し得る。つまり、ストライドは、プーリングデータが出力される頻度を決定する。例えば、ストライドが2の場合、プーリング値は1つおきのサイクルで出力されるため、出力間で行(または列)がスキップされ得る。
【0054】
実施形態において、一度に1つずつスライドする記憶装置の3行のスライディングウィンドウを作成するために、第3のサイクル512で、第1の行506の値を上書きしてもよく、その結果、サイクルが3つの行506~510のセットを使用して、プーリングパラメータに基づいて、プーリング計算結果を出力する。
【0055】
ストレージの行数はサポートされているカーネルのサイズに対応し、ウィンドウサイズ、ストライドサイズ、使用されるプーリングのタイプなどのパラメータは、プーリングプロセス自体とは無関係に判定および制御できることを理解されたい。
【0056】
本発明の実施にとって計算システムまたはプログラミング言語が重要でないことが、当業者には認識されよう。また、上記のいくつかの要素が物理的および/または機能的にサブモジュールに分離され得るか、または一緒に組み合わされ得ることが、当業者には認識されよう。
【0057】
前述の例および実施形態は例示であり、本開示の範囲を限定するものではないことが当業者には理解されよう。明細書を読み、図面を検討すると当業者に明らかであるすべての順列、強化、等価物、組み合わせ、および改善は、本開示の真の趣旨および範囲内に含まれることが意図される。また、任意の請求項の要素は、複数の依存関係、構成、および組み合わせを有することを含めて、異なって配置され得ることにも留意されたい。