(57)【要約】本明細書で説明するのは、新規のハードウェアベースのプーリングアーキテクチャを利用して、畳み込みニューラルネットワーク（ＣＮＮ）における畳み込み層の出力チャネルを表す畳み込みエンジンの出力を処理するシステムおよび方法である。プーリングシステムは、出力を配列のセットに変換し、それらをプーリング演算に従って整列させて、プーリング結果を生成する。特定の実施形態において、これは、例えば、いくつかの算術サイクルにわたって、出力内のデータの配列を行に整列させ、互いに対して行をシフトするアライナを使用することによって達成される。プーラは、プーリング演算を各行からのデータのサブセットの組み合わせに適用して、プーリング結果を生成する。【選択図】図２
2021509747.tif 000002
【特許請求の範囲】
【請求項１】
プーリングユニットアーキテクチャであって、
制御装置と、
前記制御装置に連結されたアライナであって、前記アライナは、入力データの受信に応じて、前記入力データを行に整列してプーリング配列を生成し、いくつかの算術サイクルにわたって行を相互にシフトして前記入力データを再フォーマットされたデータに再フォーマットする、アライナと、
前記アライナに連結されたプーラであって、前記プーラは、後続の算術サイクルにおいて、少なくともいくつかの前記再フォーマットされたデータにプーリング演算を適用して、プーリング値を含むプーリング出力を得て、各行からのデータのサブセットは、前記プーリング値の生成元となるデータのセットと組み合わされる、プーラと、
を備える、プーリングユニットアーキテクチャ。
【請求項２】
前記入力データは、行列処理装置によって生成されたものである、請求項１に記載のプーリングユニット。
【請求項３】
前記入力データのストリームを維持するために、前記プーリング出力は、前記行列処理装置が前記入力データを生成する速度と同じ速度で生成される、請求項２に記載のプーリングユニット。
【請求項４】
前記プーラが１つ以上のプーリング計算を並行して実行し、前記プーリング計算の数が、前記行列処理装置の出力チャネルの数に等しく、その結果、カーネルサイズに関係なく、前記プーリング出力が前記行列処理装置の幅に対応する、請求項２に記載のプーリングユニット。
【請求項５】
前記プーラに連結された乗算およびシフト回路をさらに含み、乗算およびシフト回路は、前記プーリング演算に基づいて前記プーリング出力を生成する、請求項１に記載のプーリングユニット。
【請求項６】
前記入力データが特徴マップのセットに対応し、前記プーラが前記再フォーマットされた入力データを使用して、所定の因子によって、前記特徴マップのセットの高さおよび幅のうちの少なくとも１つを低減する、請求項１に記載のプーリングユニット。
【請求項７】
前記行は、前記入力データと同じ幅を有し、各行は、行列内の近傍値のセットに対応するデータのセクションを含む、請求項１に記載のプーリングユニット。
【請求項８】
前記プーリング出力を出力配列にシフトするステートマシンをさらに備える、請求項１に記載のプーリングユニット。
【請求項９】
前記制御装置は、前記一連の前記プーリング演算自体を変更することなく、プーリング演算に含まれるデータポイントの数および位置を判定する、請求項１に記載のプーリングユニット。
【請求項１０】
１つの行から別の行へのシフトは、ストライド値の行列にわたって畳み込むプーリングウィンドウのシフトに対応し、該シフトは、前記算術サイクルの数によって定義される、請求項１に記載のプーリングユニット。
【請求項１１】
ハードウェアベースのプーリングシステムを使用する方法であって、
畳み込みニューラルネットワーク（ＣＮＮ）における畳み込み層の出力チャネルを表すデータの配列を畳み込みエンジンから受信するステップと、
該データの配列を、配列のセットの少なくとも２つの配列にデータを適用してプーリング結果を生成するプーリング演算に従って整列された前記配列のセットに変換するステップと、
前記プーリング結果をメモリデバイスに出力するステップと、
を含む、方法。
【請求項１２】
前記データの配列は、ハードウェアベースのプーリングユニットで受信される、請求項１１に記載の方法。
【請求項１３】
データの配列が、いくつかの算術サイクルの間隔で受信される、請求項１１に記載の方法。
【請求項１４】
プーリング結果が各間隔で生成される、請求項１１に記載の方法。
【請求項１５】
プーリング結果が各間隔で出力される、請求項１４に記載の方法。
【請求項１６】
前記データの配列は、特徴マップのセットに対応する、請求項１１に記載の方法。
【請求項１７】
プーリングユニットアーキテクチャを使用する方法であって、
ハードウェアベースのプーリングエンジンで、互いに事前定義された関係を持つデータ配列のセットを受信するステップと、
前記ハードウェアベースのプーリングユニットを使用して、ストライド値に従って、前記データ配列のセットからの少なくとも２つの配列内のデータにプーリング演算を適用して、メモリに畳み込み結果を書き込む要件を満たす必要なしにプーリング結果を得るステップと、
前記プーリング結果を、それぞれが畳み込みニューラルネットワーク（ＣＮＮ）の層におけるニューロンを表すデータポイントの行として出力するステップと、
を含む、方法。
【請求項１８】
前記データ配列のセットは、畳み込みエンジンから受信される、請求項１７に記載の方法。
【請求項１９】
前記プーリング結果を得るステップは、出力チャネルと入力チャネルとの間の１対１の関係を利用する、請求項１７に記載の方法。
【請求項２０】
前記プーリング結果は、平均プーリング結果および最大プーリング結果のうちの１つを含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、２０１８年１月４日に出願され、「ＳＹＳＴＥＭＳ  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＨＡＲＤＷＡＲＥ−ＢＡＳＥＤ  ＰＯＯＬＩＮＧ」と題された、発明者としてＰｅｔｅｒ  Ｊｏｓｅｐｈ  ＢａｎｎｏｎおよびＫｅｖｉｎ  Ａｌｔａｉｒ  Ｈｕｒｄを挙げている米国特許出願公開第１５／８６２，３６９号明細書（整理番号２０１５０−２１６７）に対する優先権を主張する。前述の各特許文書は、その全体が参照により本明細書に組み込まれる。
【０００２】
本開示は、概して、計算処理能力および記憶要件などの計算資源の利用を改善するためのシステムおよび方法に関する。特に、本開示は、畳み込みおよびプーリングデータを生成するために、畳み込みニューラルネットワーク（ＣＮＮ）アーキテクチャを使用するコンピュータ・ビジョン・アプリケーションにおける演算処理の効率を改善するためのシステムおよび方法に関する。
【背景技術】
【０００３】
ニューラルネットワークベースの画像分類器は、分類および物体認識のための複雑な特徴を自動的に学習することに著しい改善を実現している。例えば、畳み込みニューラルネットワーク（ＣＮＮ）モデルを使用して、画像が人または動物を含むものとして分類され得るか否かを自動的に判定することができる。ＣＮＮは、判定または予測を行うときに、複数の階層的ネットワーク層および副層を入力画像に適用する。ＣＮＮの１つの特性は、各ネットワーク層が前の層の出力として機能し、典型的には、最初の畳み込み層で始まり、１つ以上の最終層、例えば、入力画像が特定の物体を含むものとして確かに分類され得る見込みを示すスコアを、アクティベーション値が送達するノードを含む完全結合層で終わるということである。
【０００４】
畳み込み層は、画像の畳み込みウィンドウの画素に重みのセットを適用するカーネルまたは活性化関数として知られるいくつかのフィルタを使用できる。そのウィンドウに関連付けられた活性化値を生成するために、重みは訓練フェーズ中にＣＮＮによって学習された。各フィルタについて、畳み込み層は、画素ごとに、重みのセットに基づいて計算される活性化値を出力する１つのノード、すなわちニューロンを有してもよい。畳み込みウィンドウの活性化値は、画像内の他の位置で特徴を識別するために使用できるエッジなどの特徴または特性を識別する。フィルタのすべてのノードが重みの同じセットを共有できるため、重みを再利用することは、記憶空間と計算時間の両方の使用を向上させる一般的な手法である。
【０００５】
ＣＮＮの最も重要な種類の層には、典型的には、畳み込み層の後に配置される基本的な独立したビルディングブロックであるプーリング層がある。画像に適用されると、プーリング層により、ネットワークは特徴マップを判定し、画像の特徴のセットを学習できる。プーリングは、最大プーリングや平均プーリングなどの非線形関数を使用して、ネットワークを介して層から層へと進むときにニューロンの数を減らす、非線形関数を使用する非線形サブサンプリングまたはダウンサンプリングの形式と見なされ、これにより、計算量が低減され、計算パフォーマンスがさらに向上する。
【０００６】
プーリングは、一般に、プーリングウィンドウ、例えば、幅が複数の画素、高さが複数の画素の２次元の正方形を、前の畳み込み層の出力の重なり合わない小さな領域（すなわち、受容野）にわたって段階的にスライドさせることを含む。その領域の一群のニューロンの値を集計することにより、局所的近傍の各群の単一の出力値（例えば整数）が提供される。各群に割り当てられたこれらの出力値は、畳み込みを実行せずに後続の層に渡され、プールされた領域で使用されるプーリング関数の種類（例えば平均または最大）に依存する。プーリングウィンドウのサイズおよび位置は、プーリングストライド（すなわち間隔またはステップサイズ）および出力画素の位置に依存する。多くの場合、最後のプーリング層の後には、特定のクラスについて、例えば条件付確率の推定として、最終的な予測を出力するＣＮＮアーキテクチャの最終出力層（例えば、ソフトマックスの非線形性を有する完全結合層）が続く。
【０００７】
重みの共有と算術論理ユニットの使用率の向上による畳み込み層のパフォーマンスの向上は大きな進歩を遂げているが、同様に計算集約的なプーリング層は、主に既存のニューラル・ネットワーク・アーキテクチャに固有の制約のために軽視されてきた。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
したがって、ニューラルネットワークのプーリング層のパフォーマンスを改善して、利用可能な計算資源の利用端パフォーマンスをさらに高めて、全体的な計算コストを削減するシステムおよび方法を有することが望ましいと思われる。
【図面の簡単な説明】
【０００９】
本発明の実施形態が参照され、その例が添付の図に示されている可能性がある。これらの図は、限定ではなく例示を意図したものである。本発明は一般にこれらの実施形態の文脈で説明されているが、本発明の範囲をこれらの特定の実施形態に限定することを意図していないことを理解されたい。
【００１０】
【図１】本開示の様々な実施形態によるプーリング演算を実行するためにプーリングユニットを使用するシステムの例示的なブロック図である。
【００１１】
【図２】本開示の様々な実施形態によるプーリングユニットアーキテクチャの例示的なブロック図である。
【００１２】
【図３】図１に示されるプーリングシステムを使用するための例示的なプロセスのフローチャートである。
【００１３】
【図４】図２に示されるプーリングユニットアーキテクチャを使用するための例示的なプロセスのフローチャートである。
【００１４】
【図５】本開示の様々な実施形態によるプーリング演算を実行するための例示的なプロセスのフローチャートである。
【発明を実施するための形態】
【００１５】
以下の説明では、説明の目的で、本発明の理解を提供するために特定の詳細が示されている。しかしながら、当業者には、これらの詳細なしで本発明を実施できることが明らかであろう。さらに、当業者は、以下に説明される本発明の実施形態が、有形のコンピュータ可読媒体に対してプロセス、装置、システム、デバイス、または方法などの様々な方法で実装され得ることを認識するであろう。
【００１６】
図に示されている構成要素またはモジュールは、本発明の例示的な実施形態の例示であり、本発明を不明瞭にしないことを意図している。この議論全体を通して、構成要素は、サブユニットを含み得る別個の機能ユニットとして説明され得るが、当業者は、様々な構成要素またはその一部が別個の構成要素に分割され得るか、あるいは単一のシステムまたは構成要素内に統合されることを含め、一緒に統合され得ることを理解するであろう。本明細書で論じられる機能または動作は、構成要素として実装され得ることに留意されたい。構成要素は、ソフトウェア、ハードウェア、またはそれらの組み合わせで実装できる。
【００１７】
さらに、図内の構成要素またはシステム間の接続は、直接接続に限定されることを意図していない。むしろ、これらの構成要素間のデータは、中間構成要素によって変更、再フォーマット、または変更される場合がある。また、追加またはより少ない接続が使用される場合がある。「結合された」、「接続された」、または「通信可能に結合された」という用語は、直接接続、１つ以上の中間デバイスを介した間接接続、および無線接続を含むと理解されるべきことにも留意されたい。
【００１８】
本明細書における「一実施形態」、「好ましい実施形態」、「実施形態（単数または複数）」への言及は、実施形態に関連して説明される特定の特徴、構造、特性、または機能が、本発明の少なくとも１つの実施形態に含まれ、また複数の実施形態に含まれ得ることを意味する。また、本明細書の様々な箇所での上記の句の出現は、必ずしもすべて同じ実施形態（単数または複数）を参照しているとは限らない。
【００１９】
本明細書の様々な箇所での特定の用語の使用は、例示のためのものであり、限定として解釈されるべきではない。サービス、機能、または資源は、単一のサービス、機能、または資源に限定されず、これらの用語の使用は、関連するサービス、機能、または資源のグループ化を指し、これは分散または集約されてもよい。さらに、メモリ、データベース、情報ベース、データストア、テーブル、ハードウェアなどの使用は、本明細書では、情報を入力または記録することができるシステム構成要素（単数または複数）を指すために使用することができる。
【００２０】
さらに、以下に留意されたい。（１）特定のステップが任意選択的に実行される場合があり、（２）ステップは、本明細書に記載された特定の順序に限定されない場合があり、（３）特定のステップは異なる順序で実行される場合があり、（４）特定のステップは同時に実行される場合がある。
【００２１】
図１は、本開示の様々な実施形態によるプーリング演算を実行するためにプーリングユニットを使用するシステムの例示的なブロック図である。システム１００は、ＳＲＡＭ１０２、データ／重みフォーマッタ１１０、行列処理装置１２０、後処理ユニット１３０、プーリングユニット１４０、制御論理１５０を含む。システム１００は、論理回路および／または制御回路などの追加の回路および副回路、キャッシュ、ローカルバッファ、コンパレータ、ステートマシン、追加の後処理ユニット、および管理機能を実行する補助デバイスを含み得ることが理解される。
【００２２】
実施形態において、システム１００の任意の構成要素は、例えば、畳み込みまたは他の数学的計算などの動作を実行するとき、システム１００の状態および動作を監視し、動作の後続のステップで使用されるデータを取得する位置を計算し得る制御論理１５０によって、部分的または全体的に制御され得る。同様に、制御論理１５０は、他の構成要素、例えば、図１に示されていない構成要素および／またはシステム１００の外部の構成要素を管理することができる。
【００２３】
実施形態において、ＳＲＡＭ１０２は、例えば、データ入力行列および重み入力行列１０４に、入力画像データを格納し、アクセス可能にする。当業者は、他のタイプの記憶デバイスが使用されてもよいことを認識するであろう。
【００２４】
実施形態において、重み入力行列およびデータ入力行列１０４に基づいて、データ／重みフォーマッタ１１０は、例えばそれぞれ９６列幅の２つの出力１０８を、行列処理装置１２０に対して生成し、これは行列の非常に多数の要素を並行して処理して、データを行列演算に効率的にマッピングしてもよい。データ／重みフォーマッタ１１０は、例えば、行列処理装置１２０の特定のハードウェア要件に従って、例えば、データ入力行列および重み入力行列１０４を、行列処理装置１２０によるさらなる処理のための適切なフォーマットに変換する任意の数のインラインフォーマッタとして実装され得る。実施形態において、フォーマッタ１１０は、二次元または三次元行列を、行列処理装置１２０への入力１０８として利用できるように線形化またはベクトル化されたデータを作成する前に、行または列によって表され得る単一のベクトルまたは文字列に変換する。結果として、行列処理装置１２０は、システム１００における畳み込み計算の一部として行列乗算演算を実行するために効率的に利用されて、例えば画像に再構築され得る出力配列１２２を生成し得る。
【００２５】
本開示の実施形態を使用するニューラルネットワークモデルは、最大プーリング層、平均プーリング層、および他のニューラルネットワーク層を使用するプーリングネットワークを含み得る。プーリングネットワークは、例えば、（完全結合層を使用する処理モジュールによって）実施形態において、非線形関数、例えば、Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ（ＲｅＬＵ）、ロジスティックシグモイド関数などの既知の関数を使用する活性化層が後に続くか、または先行してもよい。
【００２６】
実施形態において、行列処理装置１２０は、個々のフィルタ（例えば、重み）を入力画像データに適用することによって畳み込み演算を実行し、入力画像内の小さな特徴を検出する。一連の異なる特徴を異なる順序で分析することにより、入力画像においてマクロ特徴をそのように識別することができる。各入力チャネルは情報の異なるセットを含むことができ、各重み行列を使用して異なる特徴を検出することができるため、行列処理装置１２０は、各入力チャネルに対して重みの異なるセットを使用することができる。実施形態において、行列処理装置１２０は、矩形状の入力行列に矩形状の重み行列を乗算して部分ドット積を得て、これを合計して、累積されたドット積、すなわち整数を生成することができ、これは、出力画像の出力画素を表す。実施形態において、出力配列１２２は、フォーマッタ１１０によって処理された２つの行列１０８のドット積に対応し得る。
【００２７】
実施形態において、行列処理装置１２０は、畳み込み演算を行列乗算（例えば、９６×９６行列乗算）に変換することによって、入力をフィルタで畳み込み、出力１２２を生成する畳み込み演算を実行することができる。行列処理装置１２０は、算術論理ユニット、レジスタ、エンコーダなどの回路を備えることができ、任意の数の列および行を有するものとして実装されて、データおよび重みの大規模なセットにわたって数学的加速された演算を実行することができる。これらの大規模演算は、例えば、システム１００内の冗長演算を減らし、ハードウェア固有の論理を実施することにより、畳み込み演算を加速するために、行列処理装置１２０の特定のハードウェア要件に従ってタイミングをとることができる。
【００２８】
実施形態において、行列処理装置１２０は、後処理ユニット１３０内の記憶デバイスに格納され得る出力チャネルを表す線形化されたベクトルまたは配列を出力する１２２。実施形態において、プーリングユニット１４０は、行列処理装置１２０の単一の出力チャネル上で動作し、出力１２２または後処理された出力１２４は、そうでなければ行列演算に都合よくマッピングしない可能性がある配列である。したがって、実施形態において、出力配列１２２は、システム１００の効率を高めるために、プーリングユニット１４０に適したフォーマットに再フォーマットされてもよい。
【００２９】
対照的に、格納された畳み込み上でベクトル演算を実行するベクトルエンジンを使用する従来の実装では、一部には、出力配列１２２内のいくつかの値は隣接していてもよいが、他はそうでなくてもよいため、行列処理装置１２０などの高効率行列処理装置の出力のかなり複雑で非効率なプーリング演算をもたらし得る。要するに、行列処理装置１２０による畳み込み演算に続くプーリングアルゴリズムは、一般的なプーリング方法に対する便利な形状またはフォーマットで提示されていない出力配列１２２の値の組み合わせを処理しなければならないであろう。したがって、実施形態において、出力配列１２２は、高効率行列処理装置１２０への改善されたプーリング方法の適用を可能にするために再フォーマットされる。
【００３０】
これを達成するために、実施形態において、ハードウェアプーリングユニット１４０は、例えば、後処理ユニット１３０によって処理されるような出力配列１２２の受信に応答して、受信データをグリッドフォーマットに再フォーマットし、その結果、出力配列１２２のいくつかの要素は、垂直方向に整列されてもよく、他は水平方向に整列されてもよく、その結果、面倒な計算集約型の中間ステップやデータ記憶動作を実行する必要なく、プーリングを直接適用できる。実施形態において、フォーマッタ１１０は、異なる形状の入力行列データを、行列処理装置１２０に適した列および行に再フォーマットすることができる。実施形態において、異なる入力サイズを有する行列の処理に対応するために、フォーマットを動的に実行することができる。
【００３１】
実施形態において、プーリングユニット１４０は、再フォーマットされたデータにプーリング関数、例えば、平均プーリングおよび最大プーリングを適用して、例えば、特徴マップとしてＳＲＡＭ１０２に書き込まれ、かつ記憶され得るプールされたデータ１０６を生成および出力する。プーリングユニット１４０の内部動作は、図２に関してより詳細に説明される。
【００３２】
実施形態において、行列処理装置１２０は、畳み込みデータの次のセットを蓄積および計算しながら、畳み込みデータのセット、例えば出力配列１２２を出力する。同様に、プーリングユニット１４０は、行列処理装置１２０からシフトされたデータからオンザフライで出力１０６を生成し、これにより、プーリング層を通過する前に畳み込みが中間記憶装置に格納されることを必要とするソフトウェアベースのプーリング方法と比較した場合、プーリングのコストをカバーし、計算時間を低減する。
【００３３】
実施形態において、後処理ユニット１３０は、例えば、シフトレジスタを形成する出力フリップフロップ（図示せず）を介して、行列処理装置１２０の最下行から、出力チャネルに対応するデータ、例えば、ドット積結果を受信する。後処理ユニット１３０は、例えば、非線形ＲｅＬＵ関数を出力配列１２２に適用することができる。
【００３４】
所定の出力特徴マップサイズを得るために、畳み込み層演算の前に、行列のエッジでパディング、例えばゼロパディングを実行できることに留意されたい。実施形態において、ストライドが１より大きい値に設定される場合、パディングが有効にされ得る。パディングが有効である場合、制御論理１５０は特定の列をゼロとして扱うことができ、平均プーリング演算の除数が平均計算に含まれる非ゼロプーリング値の合計と等しくなるように調整される。
【００３５】
図２は、本開示の様々な実施形態によるプーリングユニットアーキテクチャの例示的なブロック図である。プーリングユニット２００は、行アライナ２０６、書き込みアライナ２０４、プーリング配列２０８、プーラ２１０を含み得る。実施形態において、プーラ２１０は、最大ユニット（図示せず）、平均化ユニット２１２、または出力２３０を生成するためにプーリング演算を実行し得る任意の他のユニットを備え得る。実施形態において、平均化ユニット２１２は、除算および／またはスケールユニット２１６が後に続く加算要素２１４を使用することによって、平均化関数を実行する。
【００３６】
入力２０２は、特徴マップのセットに対応し得る。実施形態において、入力２０２は、例えば、「Ａｃｃｅｌｅｒａｔｅｄ  Ｍａｔｈｅｍａｔｉｃａｌ  Ｅｎｇｉｎｅ」と題された、米国特許出願公開第１５／７１０，４３３号明細書に開示されており、この参照は、その全体が本明細書に組み込まれる高効率行列処理装置の要件に従って生成された出力チャネルを構成する。
【００３７】
実施形態において、プーリングユニット２００は、入力２０２の受信に応答して、プーリングユニット内のデータを、例えば、特徴マップの高さおよび幅を２分の１に縮小するために従来のプーリング方法が適用され得るグリッドパターンと同等のものに再フォーマットする。実施形態において、プーリングユニット２００は、入力２０２と同じ幅を有するいくつかの行に（例えば、行アライナ２０６において）入力２０２を配置および格納することによって再フォーマットを達成し、その結果、各行は、プーリング結果を得るためにプーリング演算を適用できる行列の一群の近傍値に対応するデータのセクションを含む。実施形態において、同じ近傍に属するセクションが抽出され得るように行が整列されると、例えば、プーラ２１０によって、プーリングが容易に実行され得る。実施形態において、このようにプールされたセクションの組み合わせは、畳み込みのプールされた出力チャネル全体のプーリング結果を表す。
【００３８】
実施形態において、行アライナ２０６は、プールされるデータとしてプーラ２１０によってアクセスおよび読み取ることができるような方法で入力２０２を格納する。言い換えると、行列処理装置の出力チャネルは、入力データ１０２のストリームを維持しながら、プーラ２１０によってプールされて容易に読み取ることができるフォーマットに再フォーマットすることができる。実施形態において、行アライナ２０６は、制御装置（図示せず）によって制御されて、結果をいくつかのプーリング配列２０８、例えば、プールされるデータを含む３つの配列に書き込む前に、入力される入力２０２をシフトする。
【００３９】
実施形態において、プーラ２１０は、特定のプーリング計算で使用するために行アライナ２０６内の適切な値を識別し、プーリング配列２０８からいくつかの値を抽出して、プーリング結果を計算する。プーリング結果は、使用されるプーリング関数のタイプに依存し、適切なプーリング結果に変換される可能性のある平均値、最大値、または中間値（合計など）であってもよい。実施形態において、除算および／またはスケールユニット２１６は、平均化ユニット２１２の後に続いてもよく、出力２３０を生成する乗算およびシフト回路として実装され得る。実施形態において、プーラ２１０は、プーリング配列２０８にアクセスして、いくつかのプーリングされる値を含むプーリング配列２０８の任意のサブセクションを処理することができる。例えば、プーラ２１０は、３×３プーリングウィンドウに対応する９つの値をプールして、平均プーリング値を生成することができる。プーリングウィンドウは、パラメータ設定に応じて任意のサイズおよび形状をとることができると理解される。
【００４０】
実施形態において、入力２０２が読み取られ、例えば、データの行を整列させる方法（図４に関してさらに論じる）を使用して、ｎ算術サイクルの期間にわたって再フォーマットが適用され、各サイクルで、例えば、一度に１行、プーリング結果２３０を生成する。実施形態において、出力チャネルが、例えば入力２０２として読み取られると、次の出力チャネルが読み取られ、例えば、異なるプーラ２１２にデータの行を格納するメモリの異なるセットを使用することにより、行列処理装置によって提供されるすべての出力チャネルが処理され、結果２３０が出力され得るまで再フォーマットが適用され得る。出力チャネルの一部、および一般に、様々な出力チャネルは、図２および添付のテキストに示されるもの以外の他の方法および他の回路構成を使用して、様々な時点で処理され得ることが理解される。当業者が理解するように、追加のプーリング層を使用して、より高いレベルまたは洗練された特徴マップを出力することができる。
【００４１】
実施形態において、プーリングユニット２００は、行列処理装置１２０と同じくらい速くプーリング結果を計算して、出力１２２を生成する。プーリングユニット１４０は、スライディングウィンドウが計算間で交差する要素の量を制御するために、例えば、ｎ＝２またはｎ＝３のストライドを適用することができる。当業者は、プーリング層のためのスライディング機構が、例えば、２または３の共通のカーネルサイズを使用する畳み込み層と同様の方法で動作し、平均または最大値がプーリングウィンドウにおいて選択されるという違いはあることを理解するであろう。
【００４２】
実施形態において、プーリングユニット２００は、処理されたデータを受信し、互いに対して空間的にシフトされ得る配列のセットに対して計算を実行する。実施形態において、プーリング結果１２４は、ステートマシン（図示せず）によって、例えば、クロックサイクルごとに１つ、出力配列に引き込まれるかまたはシフトされる。ステートマシンは、データをＳＲＡＭ１０２または他の何らかの後処理ユニット（図示せず）に送信する前に、プーリング結果１２４に対して追加の演算を実行することができる。
【００４３】
プーリングユニット２００は、プーリングユニット２００に結合された任意の数の構成要素の一連の動作を調整する制御ユニットなど、図２に示されていない構成要素およびサブ回路をさらに含み得ることが理解される。例えば、制御ユニットは、一連の演算自体を変更することなく、所与の演算に含まれるデータポイントの数および位置を判定することができる。
【００４４】
図３は、図１に示されるプーリングシステムを使用するための例示的なプロセスのフローチャートである。プロセス３００は、畳み込みエンジンからのデータが、例えば、プーリングユニットで、ｎサイクルごとに受信されると、ステップ３０２を開始する。実施形態において、データはデータ配列の形で受信され、ＣＮＮ内の畳み込み層の出力チャネルを表す。
【００４５】
ステップ３０４で、配列は、プーリング演算に従って整列される配列のセットに変換される。実施形態において、ステップ３０６でプーリング演算は、配列のセットからの少なくとも２つの配列を使用して、プーリング演算を適用し、プーリング結果、例えばサイクルごとに１つの結果を生成する。
【００４６】
最後に、ステップ３０８で、メモリデバイスに、例えば、算術サイクルごとに１行として、プーリング結果が出力される。
【００４７】
図４は、図２に示されるプーリングユニットアーキテクチャを使用するための例示的なプロセスのフローチャートである。プロセス４００は、ハードウェアベースのプーリングユニットが、それぞれが互いに事前定義された関係を有するデータ配列のセットを畳み込みエンジンから受信すると、ステップ４０２を開始する。
【００４８】
ステップ４０４で、ハードウェアベースのプーリングユニットを使用して、プーリング演算がデータ配列のセットからの少なくとも２つの配列内のデータに適用され、プーリング結果、例えば平均または最大プーリング結果が得られる。プーリング演算は、ストライド値に従って適用できる。さらに、このハードウェアベースのプーリング方法は、１：１の出力チャネルと入力チャネルとの関係を利用し、これは畳み込み結果を中間メモリに書き込む必要をなくす。
【００４９】
ステップ４０６で、プーリング結果は、例えば、それぞれがＣＮＮの層におけるニューロンを表す、サイクルごとのデータポイントの１行として出力される。
【００５０】
図５は、図２に示すプーリングユニットアーキテクチャを使用してプーリングを実行するためのプロセスを示す例示的なブロック図である。実施形態において、プーリングユニットアーキテクチャの行列処理装置５０２は、出力チャネル５０４を出力する。プーリング演算は固定された重みを使用する畳み込みとして扱うことができるため、行列処理装置を使用してプーリング演算を実行できる。ただし、通常、プーリングには出力チャネルが１つしかないため、一度にマルチ出力チャネル行列処理装置の唯一の出力チャネルを動作するのは、計算資源を不必要に拘束するかなり非効率的な作業である。したがって、計算効率を高めるために、実施形態において、出力チャネル５０４は、例えば、各行５０６〜５１０が次のサイクルで他に対してシフトされるように、図２に示すような行アライナによって整列されるいくつかの行５０６〜５１０に書き込むことができる。実施形態において、図５の行Ｙ＝０、Ｙ＝１、およびＹ＝２は、出力チャネル５０４を保持してもよく、それぞれのサイクル０から２に書き込まれ、格納されていてもよい。
【００５１】
例えば、サイクル０では、入力２０２の少なくとも第１のセクションが、例えば、左詰めで、行Ｙ＝０に格納される。次のサイクル、サイクル１において、同じセクションが行Ｙ＝１などに格納され、行５０６〜５１０を埋めるために３つの読み取りサイクルが必要である。行５０６５１０が入力されると、行５０６〜５１０からのデータを組み合わせて、プーリング計算を実行できる。例えば、行５０６〜５１０のそれぞれからの３つの値は、結果としてプーリング値５１４を生成する９つの値に組み合わされ得る。
【００５２】
なお、プーリング計算は並行して実行されてもよい。例えば、入ってくる出力チャネル５０４のストリームを維持するために、プーリング計算の数は、行列処理装置５０２における出力チャネルの総数に等しくてもよく、その結果、カーネルサイズに関係なく、行列処理装置５０２の全幅５１８に対応するプーリングデータが出力されてもよい。
【００５３】
実施形態において、１つの行から別の行へのシフトは、行列にわたって畳み込み、プーリング結果を生成するとき、プーリングウィンドウのシフトに対応する。実施形態において、プーリングウィンドウに起因するシフトは、サイクル数によって定義され、同じサイクル数によって定義される値を有するストライドに対応し得る。つまり、ストライドは、プーリングデータが出力される頻度を決定する。例えば、ストライドが２の場合、プーリング値は１つおきのサイクルで出力されるため、出力間で行（または列）がスキップされ得る。
【００５４】
実施形態において、一度に１つずつスライドする記憶装置の３行のスライディングウィンドウを作成するために、第３のサイクル５１２で、第１の行５０６の値を上書きしてもよく、その結果、サイクルが３つの行５０６〜５１０のセットを使用して、プーリングパラメータに基づいて、プーリング計算結果を出力する。
【００５５】
ストレージの行数はサポートされているカーネルのサイズに対応し、ウィンドウサイズ、ストライドサイズ、使用されるプーリングのタイプなどのパラメータは、プーリングプロセス自体とは無関係に判定および制御できることを理解されたい。
【００５６】
本発明の実施にとって計算システムまたはプログラミング言語が重要でないことが、当業者には認識されよう。また、上記のいくつかの要素が物理的および／または機能的にサブモジュールに分離され得るか、または一緒に組み合わされ得ることが、当業者には認識されよう。
【００５７】
前述の例および実施形態は例示であり、本開示の範囲を限定するものではないことが当業者には理解されよう。明細書を読み、図面を検討すると当業者に明らかであるすべての順列、強化、等価物、組み合わせ、および改善は、本開示の真の趣旨および範囲内に含まれることが意図される。また、任意の請求項の要素は、複数の依存関係、構成、および組み合わせを有することを含めて、異なって配置され得ることにも留意されたい。
【図１】
2021509747.tif 000003
【図２】
2021509747.tif 000004
【図３】
2021509747.tif 000005
【図４】
2021509747.tif 000006
【図５】
2021509747.tif 000007
【国際調査報告】
2021509747.tif 000008