さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
図1は、入力画像に対してグループ畳み込みを実行するための例示的なコンピューティングシステム100のブロック図である。システム100は、一般的に、画像104を処理する、すなわち、画像のピクセルの強度値を処理するように構成される例示的な畳み込みニューラルネットワーク102を含む。畳み込みニューラルネットワーク102には、複数の畳み込みニューラルネットワーク層108に基づく例示的なニューラルネットワークアーキテクチャが含まれている。図1の例では、畳み込みニューラルネットワーク102には複数の畳み込みニューラルネットワーク層108が含まれている。例えば、畳み込みニューラルネットワーク102にはN個(またはNセット)の層が含まれる。ここで、Nは1より大きい整数である。
さまざまなタイプのCNNアーキテクチャ106を使用して、さまざまな機械学習タスクを実行できる。例えば、機械学習タスクは、コンピュータビジョンタスク(「画像処理タスク」とも呼ばれる)であり得る。言い換えれば、ニューラルネットワークは、入力画像を受信し、入力画像を処理して入力画像のネットワーク出力を生成するように、つまり、何らかの画像処理タスクを実行するように構成できる。本明細書では、入力画像の処理とは、ニューラルネットワークを使用して画像のピクセルの強度値を処理することを指す。例えば、タスクは画像分類であり得、所与の画像に対してニューラルネットワークによって生成される出力は、対象カテゴリのセットの各々に対するスコアであり得、各スコアは、画像にそのカテゴリに属する対象の画像が含まれている可能性の推定値を表す。
別の例として、タスクは画像埋め込み生成であり得、ニューラルネットワークによって生成される出力は入力画像の数値埋め込みであり得る。さらに別の例として、タスクは対象検出であり得、ニューラルネットワークによって生成される出力は、入力画像内の位置、例えば、特定のタイプの対象が描かれている画像内の境界ボックスまたはその他の幾何学的領域を識別できる。さらに別の例として、タスクは画像のセグメンテーションであり得、ニューラルネットワークによって生成される出力は、入力画像の各ピクセルについて、そのピクセルが複数のカテゴリのどれに属するかを定義できる。しかし、より一般的には、タスクは、画像以外の入力を処理するタスクを含む、さまざまなタスクのいずれかになり得る。
画像処理タスクの中には、対象検出、データ分類、パターン認識、または画像認識、さらにはデータモデリングや情報クラスタリングを伴う計算予測に関連し得る。例えば、タスクに対象検出が含まれ得、CNNは画像を処理して特定の対象を検出し、対象の検出時にその対象を識別する出力を生成する。別のタスクには、データ/画像分類が含まれ得る。この場合、CNNは画像を処理して画像の分類を決定し、画像の内容に基づいて画像の特定の分類出力を生成する。別のタスクにはパターン認識が含まれ得る。パターン認識では、CNNが画像を処理して画像内の特定のパターンを識別または認識し、画像の内容に基づいて認識されるパターンを示す出力を生成する。別のタスクには、一般的な画像認識が含まれ得る。この場合、CNNは画像を処理して画像のさまざまな要素を識別または認識し、画像の内容に基づいて認識される要素を示す出力を生成する。
いくつかの実装では、畳み込みニューラルネットワーク102は、例示的なモバイルデバイス110に実装されるか、または例示的なモバイルデバイス110によってアクセス可能である。モバイルデバイス110は、スマートフォン、タブレット、電子ノートブック、ラップトップ、ゲームコンソール、または関連するポータブルコンピューティングデバイスであり得る。他のいくつかの実装では、畳み込みニューラルネットワーク102は、サーババンク、サーバグループ、またはマルチプロセッサシステムなどの例示的なクラウドベースのシステムに統合されるか、または例示的なクラウドベースのシステムによってアクセス可能になる。
畳み込みニューラルネットワーク102は、1つまたは複数の機械学習ハードウェアアクセラレータ112を使用して実装することができる。各ハードウェアアクセラレータ112は、1つまたは複数の専用ハードウェア集積回路114に対応する。一般に、回路114は、ニューラルネットワーク計算を実行するハードウェア回路(例えば、専用ハードウェア回路)である。例えば、回路114の一部(またはすべて)は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、単一コアニューラルネットワークプロセッサ、またはマルチコアニューラルネットワークプロセッサなどの専用ハードウェア回路であり得る。回路114は、専用グラフィックス処理装置(GPU)である場合もある。
ハードウェア回路114は、ニューラルネットワークのワークロードの計算を加速するように演算可能である。いくつかの実装では、ハードウェア回路114には制御論理が含まれており、これはハードウェア、ソフトウェア、またはその両方で実装され得る。制御論理は、計算に使用されるデータの取得とルーティングを含む、ニューラルネットワーク計算の命令を発行するために使用される。回路114には、ニューラルネットワークの各層の入力、入力活性化、出力、出力活性化、およびパラメータを記憶するためのメモリを含めることができる。いくつかの実装では、回路114には専用メモリ、共有メモリ、またはその両方が含まれる。例えば、回路114には、入力、入力活性化、出力、または出力活性化を記憶するための入力/活性化メモリと、各ニューラルネットワーク層のそれぞれのパラメータセットを記憶するためのパラメータメモリを含めることができる。
回路114は、ハードウェア行列装置、計算タイルの配置、またはこれらの組み合わせなどの計算装置を含むことができる。計算装置は、ニューラルネットワークの層を介して入力を処理するためのニューラルネットワーク計算を実行するために使用される。いくつかの実装では、各行列装置または個々の計算タイルには、乗算および累算演算を実行する乗算累算セルなどの計算セルのアレイが1つまたは複数含まれている。例えば、各セルは入力と重み値の乗算を実行して積を生成し、複数のクロックサイクルにわたって積の累算(例えば、加算演算)を実行できる。
回路114は、入力行列のチャネル次元の所与の深さに対して、入力行列の対応する部分に対して異なる重みのフィルタを畳み込むために、完全畳み込み、深さ単位の畳み込み、およびグループ畳み込みを実装する。例えば、モバイルデバイス110は、畳み込みニューラルネットワーク102とモデルのCNN層108を使用して、受信した入力104に対する認識出力または検出出力などの画像処理出力120を生成する。例えば、入力104はラップトップ122の画像であり得、モバイルデバイス110は畳み込みニューラルネットワーク102を使用して画像を処理し、画像にラップトップの描写が含まれていることを検出または認識する。
図2は、入力データセット202の表現と、入力データセットからの入力を使用してグループ畳み込みを実行するための例示的なグループ化203とを含むブロック図である。いくつかの実装では、入力データセット202は、入力の多次元行列構造であるか、またはそこから導出される。例えば、行列構造は、各々が空間次元X×Yを持つZinチャネルを含む入力テンソルであり得る。行列構造(またはテンソル)は、入力のセット、活性化入力のセット、または重み入力のセットのいずれかを表すことができる。場合によっては、本明細書では、活性化入力のセットの行列構造を入力特徴マップと呼び、重み入力のセットの行列構造をカーネル行列構造と呼ぶ。
図2の例では、入力データセット202は、2つの(X、Y)空間次元と1つの(Z)チャネル次元の3次元を有する行列構造(またはテンソル)である。空間次元に関しては、いくつかの実装では、これらの次元は、活性化入力のセットの空間または位置に対応する。例えば、畳み込みニューラルネットワーク102が2次元の画像104を処理している場合、行列構造は、画像の空間座標、つまりX、Y座標に対応する2つの空間次元を持つことができる。チャネル次元に関しては、この次元は入力(例えば、活性化入力)からの特徴に対応する。チャネル次元は、Z、Zin、またはチャネル次元を参照して説明される。ここで、「チャネル」は画像のカラーチャネルに対応し得る。
システム100は、例えば入力データセット202のチャネル次元の深さレベルを参照して、グループ畳み込みの分割を決定するように構成されている。各入力チャネルには対応する深さレベルがあり得る。例えば、図2の行列構造には、Zin次元に沿って拡張される深さレベルがある。例として、例示的な行列構造202が、畳み込みニューラルネットワーク層への活性化入力のセットとして送信される3×3×3の画像を表す場合、画像のX次元とY次元(3×3)は空間次元であり得、Z次元(3)はR、G、およびB値に対応するチャネル次元であり得る。
上述のように、システム100は、例示的な入力特徴マップのチャネル次元に沿ってグループ畳み込みの分割を決定することができる。例えば、システム100は、チャネル次元に沿って入力グループ210-1の第1の分割と、チャネル次元に沿って入力グループ210-2の第2の分割を決定できる。いくつかの実装では、システム100は、チャネル次元に沿ってn個のグループ化210-nを決定する。ここで、nは1以上の整数である。入力特徴マップ202が、活性化入力のセットとして送信される3×3×3の画像を表す例では、グループ畳み込みの入力グループ210-1を定義する第1の分割は、9つの「1」活性化入力(例えば、赤の値)の特徴に対応し得、グループ畳み込みの入力グループ210-2を定義する第2の分割は、9つの「2」活性化入力(例えば、緑の値)の特徴に対応し得、グループ畳み込みの入力グループ210-3を定義する第3の分割は、9つの「3」活性化入力(例えば、青の値)の特徴に対応し得る。
上で説明したように、グループ畳み込みは、入力特徴マップを入力行列のチャネル次元に沿ってグループ化することによって畳み込み、グループ畳み込みを表す各入力グループ210-nは、対応する出力グループ220-nに関連付けられる。畳み込みニューラルネットワーク102は、1つまたは複数の畳み込みニューラルネットワーク層108を使用して、受信した入力202に対する出力206(例えば、分類)を生成する。例えば、各畳み込みニューラルネットワーク層には、カーネル204のセットが関連付けられている。カーネル204は、グループ畳み込みの構成に従って分割され得るため、各入力グループ210-nが対応するカーネル/重み行列と畳み込まれて畳み込み出力220-nが生成される。図2の例では、入力グループ210-1は対応するカーネル行列212と畳み込まれて畳み込み出力220-1が生成され、一方、入力グループ210-2は対応するカーネル行列214と畳み込まれて畳み込み出力220-2が生成される。
システム100は、制御パラメータgの値を動的に決定するように構成されており、gは1より大きい整数である。システム100は、Zin/gを計算することによってグループサイズを決定するようにも構成されている。ここで、Zinは入力テンソルのチャネル次元に沿った入力チャネルの数であり、gは制御パラメータによって定義されるグループの数である。制御パラメータgは、グループ畳み込みの数(例えば、分割)を定義するために使用される。場合によっては、gの値はシステム100で動的に決定されるか、または所与の演算に対してシステム100で事前定義され得る。例えば、グループ畳み込みの数を定義する制御パラメータgは、システム100のコンパイラによって事前定義(および/または埋め込み)することも、実行時に動的に決定することもできる。
いくつかの実装では、システム100は、要求される特定のタイプの機械学習タスクに基づいて、グループ畳み込みの数(例えば、分割)を定義し、そのタスクに応じて制御パラメータgの値を設定する。他のいくつかの実装では、システム100は、i)処理される機械学習タスクのタイプ、ii)畳み込みニューラルネットワークのニューラルアーキテクチャ、iii)コンピューティング環境、iv)性能目標、またはv)これらの組み合わせに基づいて、グループ畳み込みの数(例えば、分割)を定義する。例示的なコンピューティング環境には、クラウドベースのコンピューティング環境やモバイルデバイスコンピューティング環境が含まれ得る。性能目標には、速度、待ち時間、ハードウェア使用率、モデルの精度、パラメータサイズ、またはこれらの組み合わせが含まれ得る。
グループ畳み込みは、畳み込みの一般化される形式として記述することができる。いくつかの実装では、システム100は、制御パラメータに特定の値を割り当てることによって制御パラメータgを初期化する。制御パラメータgの初期化される値または割り当てられる値は、グループ畳み込みの分割を制御するために使用できる。例えば、システム100が、チャネル次元全体のデータを使用する畳み込み演算(例えば、完全畳み込み)が必要であると決定した場合、システム100は制御パラメータの値をg=1に設定し、行列構造202の関連データを使用して完全畳み込みをトリガーおよび/または実行する。
関連して、システム100は、より大規模なニューラルネットワーク計算における所与のステップに必要な深さ単位に分離可能な畳み込みのグループ化を決定することができる。例えば、システム100が、チャネル次元の一部のデータを使用する2つ以上の深さ単位に分離可能な畳み込みが必要であると決定した場合、システム100は制御パラメータを所望の値(例えば、g=4)に設定し、行列構造202内の関連するデータ部分を使用して2つ以上(例えば、4つ)の深さ単位に分離可能な畳み込みをトリガーおよび/または実行する。いくつかの実装では、2つ以上のグループ畳み込みの計算が、順次、同時に、またはこれらの組み合わせで実行される。例えば、2つ以上の深さ単位に分離可能な畳み込みの各々に対するそれぞれの計算セットの一部(またはすべて)は、順次または並列に実行できる。
上述のように、本文書で説明するグループ/グループ化畳み込み技術は、少なくとも、例示的なMLアクセラレータのハードウェアリソースの使用率メトリックおよび計算効率に対するより細かい制御を提供する。いくつかの実装では、これらのグループ畳み込み技術は、例示的な機械学習モデルのある属性または性能メトリックに影響を与え、制御するために使用される多目的ブロックまたは制御ノブを提供する。例えば、1からチャネル数(z)までの間の制御パラメータgの値を選択すると、完全畳み込みと深さ単位に分離可能な畳み込みの2つの例示的な制約間の連続体が提供される。これについては以下でさらに詳しく説明する。
図3は機械学習モデルの例示的な属性を示す。一般に、属性は、上記の畳み込みニューラルネットワーク102を使用して実行されるさまざまな畳み込み演算に対応する。例えば、属性302は、完全畳み込みの演算を実行するために使用されるパラメータ数と乗算累算セル(MAC)を示し、属性304は、深さ単位の畳み込みの演算を実行するために使用されるパラメータ数と乗算累算セルを示し、属性306は、グループ畳み込みの演算を実行するために使用されるパラメータ数と乗算累算セルを示す。
制御パラメータgおよびグループ畳み込みの構成は、所与のタスクに使用されるパラメータ(例えば、トレーニング可能なパラメータ)の数、ならびにタスクの演算を実行するために使用される乗算累算セルの数を制御するために決定および/または調整することができる。機械学習モデルのこれらの各例示的な属性302、304、306は、モデルのさまざまな性能メトリックに対応する影響を与える、または影響する可能性がある。例えば、トレーニング可能なパラメータの数および/または乗算累算セル(または演算)の数の増加または減少は、機械学習モデルの精度、速度、および/または待ち時間に対応する影響を与える。別の例では、完全畳み込みに比べて、深さ単位の畳み込みの使用は軽量で低コスト(つまり、リソースをあまり消費しない)のオプションになり得るが、MLアクセラレータの集積回路で深さ単位の畳み込みを実行すると、回路のハードウェアリソースの利用率が低下することがよくある。
例えば、深さ単位(または深さ単位に分離可能)畳み込みを実行する場合、数十または数百のハードウェア乗算累算セルを含む回路114の標準ハードウェアアレイでは、所与の計算サイクルでそれらのハードウェアセルの使用率が3%になる可能性があり、一方、待ち時間は最小限または少なくなる。したがって、深さ単位の畳み込みを使用すると高速になる可能性があるが、ハードウェアの使用率が低いため非効率的でもある。逆に、完全畳み込みを実行する場合、回路114のハードウェアアレイは大幅に高い使用率(例えば、73%)になる可能性があり、その結果、アレイの乗算累算セルの大部分が所与の計算サイクルに使用される。深さ単位の畳み込みと比較すると、完全畳み込みを実行する際のこのより高い使用率は、多くの場合、計算待ち時間が大幅に長くなるという代償を伴う。
上述のように、本文書で説明するグループ畳み込み技術は、例示的なMLハードウェアアクセラレータのハードウェアリソースの使用率メトリックおよび計算効率をより細かく制御する。制御パラメータgの値を1からチャネル数(z)までの間で選択すると、完全畳み込み(308)と深さ単位に分離可能な畳み込み(310)という2つの例示的な制約の間の連続体が実現される。システム100は、図2の例に示すように、チャネル次元の深さレベルを参照してグループ畳み込みの分割を決定できる。制御パラメータgは、グループ畳み込みの数(例えば、分割)を定義するために使用される。
図3の例示的なグラフ312は、完全畳み込み(308)と深さ単位の畳み込み(310)との間の連続体に沿って、2からチャネル数(z)までの間のgの異なる値(324)の選択に対する例示的なパラメータ数320およびMAC数322を示している。この例では、zin次元は256である。グラフ312は、グループ畳み込みの値(g)の対応する増加に対する、トレーニング可能なパラメータの数と乗算累算セル(または演算)の数の減少の例を示している。
上で説明したように、回路114には、グループ畳み込み層などの層の出力を計算するために回路の制御論理を使用して横断またはアクセスすることができるテンソルの要素に対応する位置を持つメモリを含めることができる。メモリから取得される要素(例えば、入力または活性化)は、層の複数の出力を計算するのに役立つ必要がある。重みの数(つまり、パラメータ)も、グループ化のサイズに応じて変化する。いくつかの実装では、メモリからのパラメータの転送がボトルネックとなり、計算の待ち時間が増加し得る。優先されるニューラルネットワークアーキテクチャを決定する際に、検索データまたはシミュレーションの例示的なセットから、パラメータ転送時間に関するボトルネックが示され得る。次に、開示されるグループ畳み込みの概念とグループ畳み込みベースのニューラルブロックを使用して、パラメータの数を減らし、機械学習タスクの計算時間を改善または加速するアーキテクチャを定義できる。
図4は、プロセスブロック410、プロセスブロック420、およびプロセスブロック430の例を示すブロック図である。各プロセスブロック410、420、430には、1つまたは複数の層ブロックが含まれる。一般に、各プロセスブロック410、420、430は、畳み込みニューラルネットワークの異なる層ブロックによって表すことができる。図4の例では、プロセスブロック410、420、および430の各々は、所与の畳み込み演算に対して実行される演算のサブセットであり得る。畳み込み演算は、畳み込みニューラルネットワーク102を使用して実行され、畳み込みニューラルネットワーク102は、上記の例示的なハードウェア集積回路114上に実装できる。
ニューラルネットワークブロックは、単一の層、または複数の層を含むニューラルネットワークの構成要素を記述することができる。モバイルビジョンモデルなどの例示的なコンピュータビジョンモデルで広く使用されている共通ブロックは、逆ボトルネック(IBN)層ブロック402(「IBN層402」)である。一般に、IBNブロックは、複数の畳み込み層をある方法で組み合わせた、より大きなニューラルアーキテクチャのマクロブロックであり得る。IBN層を含む複数のタイプの層(またはブロック)が、例示的な分類または対象検出ネットワークを形成するための構築ブロックとして使用される。
IBN層402は、点単位の畳み込み(404)、K×Kの深さ単位の畳み込み(405)、および最終的な点単位の畳み込み(406)を含むことができる。点単位の畳み込みはチャネル次元を拡張し、この点単位畳み込みの例が図4に「1×1畳み込み(拡張)」として示されている。K×Kの深さ単位畳み込みカーネルは、点単位の畳み込みに続いて、チャネル次元の拡張される深さに適用される。最終的な点単位の畳み込み(406)は、拡張されるチャネル次元をより小さい値に投影する。この最終的な点単位の畳み込みの例は、図4に「1×1畳み込み(投影)」として示されている。
IBN層ブロック402のようなK×Kの深さ単位の畳み込みの使用は非常に一般的である。これは、拡張後、大きなまたは拡張されるチャネル次元にわたる完全畳み込みを計算すると、処理および計算リソースの点で非常にコストがかかるためである。いくつかの実装では、点単位の畳み込み(404)とK×K深さ単位の畳み込み(405)は、融合IBN層407を表すK×K完全畳み込み(融合拡張)プロセスブロックに置き換えられる。一般に、融合IBN層407は、拡張および深さ単位の畳み込み演算を単一の完全畳み込みニューラルブロックに統合する。
完全畳み込みには、多数のパラメータ/重みが関与する可能性があり、集積回路のハードウェア計算リソースのかなりの割合が必要になり得る。前述のように、このようなリソースの例としては、回路114のハードウェア計算アレイ(例えば、シストリックアレイ)の乗算累算セル、集積回路114のベクトル装置、またはその両方が挙げられ得る。対照的に、以下に説明するブロック414、416、422、432などの開示されるニューラルブロック代替手段を使用して実装される開示されるグループ畳み込み技術は、入力チャネルのセット(例えば、大きな入力チャネル)のトレーニング可能なパラメータの数を増やすための改善されるアプローチを提供し、それによってモデルの精度を向上させるが、非グループ畳み込み代替手段に比べて計算コストは低くなる。
ここで、プロセスブロック410を参照すると、グループ化IBN漸進的投影(または漸進的拡張)ブロックが示されており、ここで、上述のK×K深さ単位の畳み込み(405)がK×Kグループ畳み込み(414)または(416)に置き換えられている。プロセスブロック410は、チャネル次元の漸進的投影を実行するためにK×Kグループ畳み込み(414)を実装する第1の例、またはチャネル次元の漸進的拡張を実行するためにK×Kグループ畳み込み(416)を実装する第2の例を有することができる。
プロセスブロック410の第1の例では、システム100は、入力特徴マップ(例えば、入力438)に1×1畳み込み(拡張)(404)を適用することにより、入力特徴マップから拡張特徴マップを生成することができる。入力特徴マップは、c1チャネルを有するh×w特徴マップであり得る。この拡張特徴マップは、c2チャネルを有するh×w特徴マップであり得る。ここで、c2はc1より大きい。いくつかの実装では、1×1畳み込みには入力フィルタよりも多くの出力フィルタがある。K×Kグループ畳み込み(414)は、拡張特徴マップに適用され、チャネル次元の漸進的投影を実行する。例えば、畳み込みニューラルネットワーク102は、畳み込みニューラルネットワーク102のグループ畳み込み層で実装されるグループ畳み込みを使用して、拡張特徴マップに対して漸進的投影を実行できる。グループ化IBN漸進的投影は、投影専用のパラメータとメインのK×K畳み込み演算子をトレードオフする柔軟性を提供できる。
プロセスブロック410のこの第1の例では、最終的な点単位の畳み込み(406)は、拡張されるチャネル次元をより小さい値に投影する。したがって、グループ畳み込みに関連付けられるK×Kカーネルは、1×1投影(406)がチャネルサイズを最終値まで下げる前に、チャネルサイズの初期縮小を実行できる。各加算ブロック418は、所与のプロセスブロック(例えば、410)に供給される入力438と例示的な畳み込み出力436を加算するために使用できるオプションの残差(またはスキップ)接続である。例示的な合計440は、対応するプロセスブロックで実行される演算の出力として渡される。
プロセスブロック410の第2の例では、システム100は、入力特徴マップ(例えば、入力438)に1×1畳み込み(拡張)(404)を適用することにより、入力特徴マップから初期拡張特徴マップを生成することができる。この初期拡張特徴マップは、c2チャネルを有するh×w特徴マップであり得る。ここで、c2はc1より大きい。システム100は、初期拡張特徴マップに対してK×Kグループ畳み込み(416)を適用することにより、初期拡張特徴マップから拡張特徴マップを生成する。例えば、畳み込みニューラルネットワーク102は、畳み込みニューラルネットワーク102のグループ畳み込み層で実装されるグループ畳み込みを使用して、初期拡張特徴マップから拡張特徴マップを生成することができる。拡張特徴マップは、c3チャネルを有するh×w特徴マップであり得る。ここで、c3はc2より大きい。このグループ化IBN漸進的拡張演算は、拡張専用のパラメータとメインのK×K畳み込み演算子をトレードオフする柔軟性を提供できる。グループ化IBN漸進的拡張では、拡張層の一部を融合せずに維持し、メインのK×K畳み込みの前にグループ間でチャネル単位の畳み込みを可能にし得る。プロセスブロック410の最終的な点単位の畳み込み(406)は、拡張されるチャネル次元をより小さい値に投影する。
ここで、プロセスブロック420を参照すると、このプロセスブロックは、上述の1×1畳み込み(拡張)(404)およびK×K深さ単位の畳み込み(405)がK×Kグループ畳み込み(422)に置き換えられる、融合グループ化IBNブロックである。このK×Kグループ畳み込み(422)には、少なくとも、点単位(404)+深さ単位(405)の対を置き換え、K×Kグループ畳み込み(422)を介してそれらの演算の態様を融合してチャネル次元を拡張できるため、「融合拡張」という指定が含まれている。したがって、プロセスブロック420では、システム100は、入力特徴マップにK×Kグループ畳み込み(422)を適用することにより、例示的な入力特徴マップ(例えば、入力438)から拡張特徴マップを生成することができる。例示的な入力特徴マップは、c1チャネルを有するh×w特徴マップであり得る。拡張特徴マップは、c2チャネルを有するh×w特徴マップであり得る。ここで、c2はc1より大きい。プロセスブロック420の最終的な点単位の畳み込み(406)は、拡張されるチャネル次元をより小さい値に投影する。前述のように、対応する合計440は、プロセスブロック420で実行される特定の演算の出力として渡される。
いくつかの実装では、融合グループ畳み込みブロック422は、融合IBN層407の代替手段を提供し、チャネル次元に沿ったより効率的な処理を可能にする。例えば、これらの効率は、コンピュータビジョンモデルの後の段階で実現され得る。場合によっては、これらの後の段階は、チャネル次元に沿った畳み込みに関連付けられたデータ解像度が非常に大きい場合に対応する。融合グループ畳み込みによって得られる処理速度の向上は、グループ畳み込み演算を含むプロセスブロック420が特定のタイプの専用集積回路を使用して実行される場合に特に最適化され得る。例えば、専用集積回路は、図6を参照して以下に説明するように、メモリからの層入力を回路の1つまたは複数の計算セルにブロードキャストするブロードキャスト入力バスを含むニューラルネットワークプロセッサであってもよい。
融合グループ畳み込みブロック422は、グループ化IBN層414に比べてわずかに高いパラメータ数を必要とし得る。完全畳み込みと深さ単位に分離可能な畳み込みの2つの制約間の連続体では、融合グループIBN422は連続体の上位にある。例えば、融合グループ化IBN層422は、深さ単位の畳み込みから完全な連続体までの連続体に沿った完全畳み込みにより近い可能性がある。
ここで、プロセスブロック430を参照すると、このプロセスブロックは、上述のK×Kの深さ単位の畳み込み(405)がK×Kのグループ畳み込み(432)に置き換えられるグループ化IBNブロックである。上述のように、システム100は、入力438に1×1畳み込み(404)を適用して、拡張特徴マップを生成する。K×Kグループ畳み込み(432)は、畳み込みニューラルネットワーク102のグループ畳み込み層で適用される。K×Kグループ畳み込み(432)は、入力フィルタと出力フィルタの合計数を同じにすることができる。他のプロセスブロックと同様に、プロセスブロック430の最終的な点単位の畳み込み(406)は、拡張されるチャネル次元をより小さい値に投影し、対応する合計440がプロセスブロック430で実行される特定の演算の出力として渡される。
プロセスブロック430で実行される畳み込み演算は、ベースラインIBN層に比べてより小さな拡張率を伴うことができる。これらのより小さな拡張率により、パラメータ数が減少し得る。パラメータ数を回復するために、プロセスブロック430(および他のプロセスブロック)の畳み込み演算では、チャネル間情報を活用するK×Kカーネルのグループ畳み込みを使用できる。K×Kグループ畳み込み(432)は、入力チャネル次元に沿った畳み込みを含む他のブロックタイプとインターリーブすることができる。このインターリーブパターンにより、グループ間の入力チャネル畳み込みの不足を軽減できる。
一般に、プロセスブロック410、430のそれぞれのアーキテクチャは、K×Kの深さ単位の畳み込みをK×Kのグループ畳み込みに置き換える。K×Kの深さ単位の畳み込みをK×Kグループ畳み込みに置き換えることの少なくとも1つの利点は、K×Kグループ畳み込みでは、完全畳み込みに比べて待ち時間が短縮され、より多くのトレーニング可能なパラメータが生成されることである。K×Kグループ畳み込みの使用による追加のトレーニング可能なパラメータは、モデルの精度の向上に貢献する。この精度の向上は、深さ単位の畳み込みと比較すると、待ち時間がわずかまたは最小限に増加するだけで達成できる。
深さ単位の畳み込みをグループ畳み込みに置き換えることは、モバイルデバイスまたはエッジコンピューティングアプリケーション用に構成されるテンソル処理装置(TPU)などの特定のタイプのハードウェアアクセラレータの畳み込み演算に固有のものであり得る。いくつかの実装では、K×Kの深さ単位の畳み込みに対して、K×Kグループ畳み込みは、集積回路114のハードウェアレイアウトに関してより効率的なハードウェアマッピングを実現するように構成され得る。例えば、入力チャネルと出力チャネルの1対1の関係ではなく、グループ畳み込みではブロックの概念を活用して、グループ内の入力チャネルに沿って畳み込みを実行できる。これにより、入力チャネルに沿ってより多くの情報を使用できるアルゴリズムの利点が得られ、コンピュータビジョンネットワークの1つまたは複数の層での表現能力が向上する。
ある機械学習タスクの計算がCNNのより深い層に進むにつれて、チャネル次元が大きくなる可能性がある。出力精度や計算/処理速度などのある性能の向上を実現するために、従来のアプローチでは、上記の融合IBN層407などの融合IBN層ブロックの使用が検討された。しかし、入力チャネル(zin)のそれぞれの次元が大きいため、完全畳み込みを実行するコストがかかり、計算速度が低下するため、融合IBN層の使用は非現実的になる。
従来のアプローチと比較して、プロセスブロック410、420、および430のそれぞれのグループ畳み込みは、ある処理ペナルティを最小限に抑えながら、モデルの性能を各々向上させることができるニューラルブロックの代替手段を提供する。例えば、融合グループ化IBNブロック422を使用して、従来のIBN層または融合IBN層に関連付けられる待ち時間や拡張/大規模データセット処理のペナルティなしに、性能の向上を実現できる。一般に、グループ畳み込みブロック414、416、422、432の各々は、1つまたは複数のグループ畳み込み層を含むことができるニューラルネットワークブロックである。さらに、各グループ畳み込みブロック414、416、422、432は、入力チャネル次元に沿って畳み込みを実装する他の層またはブロックタイプとインターリーブできる。インターリーブされるニューラルブロックの例を図5に示す。
インターリーブパターンは、グループ間の入力チャネル畳み込みの不足を軽減することができる。例えば、グループ畳み込みではチャネル間情報が使用されるが、そのような情報はグループのみに限定されており、グループを使用する場合は、チャネル次元に沿って情報を混合するためにシャッフル演算が通常必要になる。インターリーブパターンでは、これらの追加のシャッフル演算子(例えば、ShuffleNet)の使用も回避される。ブロック410および430と同様に、例えばブロック422を介した融合グループ畳み込み演算では、ベースラインIBNに比べてより多くのトレーニング可能なパラメータを生成でき、あるタイプのテンソル形状に対して、ベースラインIBNおよび融合IBN層と比較して処理速度の向上が可能になる(例えば、実行速度が速くなる)。
いくつかの実装では、深さ単位の畳み込みは入力チャネルと出力チャネルを同じサイズに制限するが、グループ畳み込みは異なるサイズを有効にすることができる。例えば、K×Kグループ畳み込み(414)カーネルは、1×1投影によってチャネルサイズが最終値まで下げられる前に、チャネルサイズの初期縮小を実行できる。ここでの1つの仮定は、グループ畳み込みによってチャネルが最終的なチャネル次元に縮小され、それにより、1×1投影が排除されると、グループあたりのチャネル深さ(zo)が小さいため、性能が最適よりも低くなる(例えば、低下する)可能性があるということである。しかし、これは、漸進的拡張の実装を可能にする集積回路構成によってグループ畳み込みがネイティブにサポートされている場合は、軽減できる。例えば、回路構成には、集積回路の個別のMACに入力を渡すことができる入力バスを含めることができる。これについては、図6~図9を参照して以下でさらに詳しく説明する。
システム100は、複数の異なるタイプのグループ畳み込みブロックから選択するように演算可能である。例えば、システム100は、上記のグループ畳み込みブロック414、416、422、432に加えて、K×Kグループ畳み込みを実装する融合投影グループ化畳み込みブロックを選択することもできる。融合投影グループ化畳み込みは、点単位の投影をK×Kメイン畳み込みに融合する(点単位の拡張を融合する代わりに)。テンソルの形状に応じて、融合投影グループ化IBNは、融合IBNと比較して同様の処理効率を達成しながら、より多くのトレーニング可能なパラメータを提供できる。融合投影グループ化IBNは、投影層の一部を融合せずに保持し、メインのK×K畳み込みの後にグループ間でチャネル単位の畳み込みを可能にする。
図5は、図1の例示的なコンピューティングシステムで使用できる機械学習モデル102の畳み込みニューラルネットワークの例示的なアーキテクチャ500である。ニューラルアーキテクチャ500は、畳み込み演算の複数のそれぞれのセットを実装して、例示的な入力画像のさまざまな特性を取得できる。いくつかの実装では、システム100は、図4の例を参照して上で説明したグループ化IBNオプションとグループ化されていないIBNオプションから、さまざまなIBN層/ブロックオプションを戦略的に選択して配置するように演算可能である。いくつかの実装では、システム100は、スタックされる、接続される、または組み合わせられる構成で演算を選択して配置し(つまり、それらを一緒に配置して組み合わせる)、大規模なコンピュータビジョンネットワーク/モデルを実装するために使用できる例示的なアーキテクチャ500を形成するように演算可能である。
図5の例では、アーキテクチャ500は、層ブロックのシーケンスを含み、シーケンス内の層ブロックの第1のサブセットの各々は、入力画像を処理するための演算を実行するように構成されている。より具体的には、アーキテクチャ500には、層ブロックの第1のサブセット502、層ブロックの第2のサブセット504、および層ブロックの第3のサブセット506が含まれる。いくつかの実装では、層ブロック502、504、506の少なくとも1つのサブセットに、2つ以上の異なるタイプのニューラルブロックの交互シーケンスを含めることができる。例えば、層ブロック502のサブセットは、融合IBN層と融合グループIBN層を含む交互のシーケンスを持つことができる。
融合IBN層は、拡張および深さ単位畳み込み演算を単一の完全畳み込みニューラルブロックに統合する融合IBN層407(上記)などの第1の個別ニューラルブロック512を表すことができる一方、融合グループIBN層は、点単位(404)+深さ単位(405)の対を置き換え、K×Kグループ畳み込み(422)を介してそれらの演算の態様を融合してチャネル次元を拡張することを可能にする融合グループIBN422などの第2の個別ニューラルブロック514を表すことができる。上で説明したように、このブロックは、チャネル次元に沿ったより効率的な処理を可能にする、融合IBN層407の代替手段を提供できる。
より具体的には、第1のニューラルブロック512はグループ化されていないIBNブロックであり得、第2のニューラルブロック514はグループ化IBNブロックであり得る。第1のニューラルブロック512と第2のニューラルブロック514の各々には、1つまたは複数の畳み込みニューラルネットワーク層が含まれる。したがって、層ブロック502には、グループ化IBN層とグループ化されていないIBN層の交互シーケンスを含めることができる。例えば、層ブロックの交互シーケンスには、非グループ畳み込み層ブロックとインターリーブされるグループ畳み込み層ブロックを含めることができる。
図6は、畳み込みニューラルネットワークの計算を実行するために使用される例示的なハードウェア計算タイル600(「計算タイル600」)を示す。複数の計算タイル600を配置または構成して、ニューラルネットワークプロセッサ、特定用途向け集積回路、またはハードウェアアクセラレータなどの専用プロセッサを形成できる。いくつかの実装では、計算タイル600は、上記のハードウェア集積回路114に含まれる複数の計算タイルのうちの1つである。
各計算タイル600は、多層ニューラルネットワークの1つまたは複数の層で必要な計算(例えば、ニューラルネットワーク計算)を独立して実行するように構成されている。例えば、計算タイル600は、計算タイル600のメモリ(後述)からローカルに取得されるデータおよび命令に基づいて複数の計算スレッドを実行するように構成される。場合によっては、データおよび命令は、ハードウェア集積回路114の通信/データバス602を介して計算タイル600で受信される。例えば、データバス602を各計算タイル600に結合して、異なる計算タイル600間でデータをルーティングし、命令を計算することができる。したがって、所与の計算タイル600の場合、タイル外部のソースから計算タイル600でデータおよび命令を受信できる。ソースは、別の計算タイル600、ハードウェア回路114の上位のコントローラ、ハードウェア回路114の外部のホストデバイス、またはこれらの組み合わせであり得る。
計算タイル600は、ニューラルネットワーク計算を実行するための命令およびオペランドを含むことができるデータ604のセットを受信する。以下に説明するように、データ604は、グループ畳み込み演算を実行するための命令およびオペランドであり得る。計算タイル600は、ローカル制御論理(例えば、コントローラ)を使用して、データ604の分析に応じて命令とオペランドを識別する。制御論理は、1つまたは複数の命令に基づいてオペランドを処理するための制御信号を生成する。例えば、制御論理は、命令の1つまたは複数のオペコードを使用して、計算タイル600の対応する構成要素のそれぞれの制御信号を生成する。構成要素は、制御信号に基づいて連携してグループ畳み込み演算を実行する。
図6の例では、ローカル制御論理は、少なくともテンソル制御装置606(「テンソル制御606」)およびメモリアクセス制御装置608(「DMA制御608」)によって表される。テンソル制御606には、テンソルトラバーサル装置(TTU)626が含まれる。一般に、テンソル制御606は、TTU626を使用して、ニューラルネットワーク計算のためのテンソルトラバーサル演算を管理する。これについては以下でさらに詳しく説明する。DMA制御608は、計算タイル600に含まれるローカルメモリのメモリ位置への所与の計算のオペランドの書き込み/記憶を管理する。DMA制御608は、ローカルメモリのメモリ位置からの所与の計算のオペランドの読み取り/取得も管理する。いくつかの実装では、DMA制御608はTTU626と連携してメモリアクセス演算を実行する。他のいくつかの実装では、DMA制御608には、TTU626との連携とは独立してメモリアクセス演算を実行するための専用のTTUが含まれている。
各計算タイル600には、ニューラルネットワーク層への入力を記憶し、層の重みを記憶するためのメモリが含まれている。入力と重みは、通信バス602を介して計算タイル600に到着するオペランド(またはデータ)に対応する。図6の例では、メモリには、ニューラルネットワーク層への入力を記憶する第1のメモリ610と、ニューラルネットワーク層の重みを記憶する第2のメモリ612とが含まれる。第1のメモリは、例えば8ビットのチャンクでデータを記憶、読み取り、またはその他の方法で管理するナローメモリであり得る一方、第2のメモリは、例えば32ビットのチャンクでデータを記憶、読み取り、またはその他の方法で管理するワイドメモリであり得る。第1のメモリと第2のメモリは各々、より多いビットまたはより少ないビットを持つデータを記憶、読み取り、および管理できる。いくつかの実装では、第1のメモリ610および第2のメモリ612の各々は、計算タイル600のより大きなローカルメモリのサブ部分である。他のいくつかの実装では、第1のメモリ610と第2のメモリ612の各々は、計算タイル600の個別のローカルメモリ装置である。
各計算タイル600には、計算タイル160に渡される入力および重み値に対応するオペランドを使用して、加算や乗算などの算術演算を実行するように構成されるそれぞれの計算装置614が含まれている。各計算装置614には複数の演算ブロックを含めることができる。図6の例では、演算ブロックは各々「セル#_」として識別される。各演算ブロック(またはセル)には、乗算累算セル616と合計レジスタ618が含まれる。乗算累算セル616は、入力と重みを使用して算術演算(例えば、乗算)を実行するように構成されている。
例えば、算術演算には、ナローメモリ610から取得される入力または活性化と、ワイドメモリ612から取得される重みを乗算して、1つまたは複数の累積値セットを生成することが含まれる。各計算タイル600には、計算装置614の個別のブロックまたは乗算累算セル616に入力をブロードキャストする、渡す、またはその他の方法で提供することを可能にするそれぞれの入力バス617が含まれる。いくつかの実装では、入力バス617は、ナローメモリから1つまたは複数の乗算累算セルにグループ畳み込み層の入力をブロードキャストするブロードキャスト入力バスである。合計レジスタ618は、累積出力値620のセットを形成するためにグループ化できる部分合計を記憶するために使用される。
各計算タイル600には、出力バス622と、出力バス622に結合される活性化装置626が含まれている。計算タイル600には、オプションで、出力バス622に結合される1つまたは複数のレジスタ624が含まれ得る。いくつかの実装では、1つまたは複数のレジスタ624の各々は、ニューラルネットワーク層の出力値620(例えば、累積値または部分合計)を活性化装置626にシフトするために使用される個々のシフトレジスタである。活性化装置626は、出力値620に非線形活性化機能を適用するように演算可能である。活性化装置626は、出力620に適用される活性化機能に基づいて、層の出力活性化のセットを生成するように演算可能である。
活性化装置626は、第1のメモリ610に結合され、出力活性化をナローメモリ610に渡してメモリに記憶するように構成されている。出力活性化は、ニューラルネットワーク層の層出力に対応する。例えば、出力活性化のセットは、入力特徴マップにグループ畳み込みを適用して出力特徴マップを生成するグループ畳み込み層の出力(または出力の一部)になり得る。したがって、出力活性化は出力特徴マップに対応し得る。いくつかの実装では、活性化装置626は、複数の部分合計または累積値を値のベクトルに集約するように演算可能である。
各計算タイル600には、計算タイルにおけるグループ畳み込み層の演算を管理および実装するように演算可能なオプションのグループ畳み込み制御635を含めることができる。例えば、計算タイル600は、入力特徴マップのチャネル次元に沿って1つまたは複数の入力グループ化にグループ畳み込みを適用することにより、グループ畳み込み層を介して入力セットを処理する命令を受信できる。1つまたは複数の入力グループ化の個々の入力は、メモリ610のさまざまな場所だけでなく、異なる計算タイル600にわたって記憶され得る。各メモリ位置はそれぞれのアドレスによって識別される。それぞれのグループ畳み込み入力を記憶する個々のメモリ位置(またはそのそれぞれのアドレス)は、第1のメモリ610に記憶されている多次元入力テンソルまたは入力特徴マップなどの入力テンソルの要素に対応し得る。
グループ畳み込み制御635は、1つまたは複数の乗算累算セル616にブロードキャストされる対応するグループ畳み込み入力のメモリアドレスを取得または決定することができる。いくつかの実装では、グループ畳み込み制御635はDMA制御608とデータ通信し、DMA制御608と対話して、対応するグループ畳み込み入力のメモリ位置にアクセスするためのアドレスを発行する。他のいくつかの実装では、グループ畳み込み制御635は、第1のメモリ610と直接通信して、対応するグループ畳み込み入力のメモリアドレスにアクセスする。グループ畳み込み制御635は、同様の演算を実行して、第2のメモリ612に記憶されているパラメータテンソルの重みにアクセスし、重みを対応する乗算累算セルに渡すか、または対応する乗算累算セルにロードすることができる。グループ畳み込み制御635については、図8を参照して以下でさらに説明する。
各計算タイル600は、1つまたは複数の計算スレッドを実行するように構成されている。いくつかの実装では、ハードウェア回路114は、計算タイル600の一部(またはすべて)を使用して、複数の計算スレッドを並列に実行する。計算スレッドは複数のクロックサイクルにわたって実行され得、ニューラルネットワーク層への入力を処理してニューラルネットワーク層の出力を生成するために使用される。例えば、計算スレッドのそれぞれのサブセットを1つまたは複数の計算タイル600に割り当てることで、例示的な入力特徴マップに対してグループ畳み込みを適用するグループ畳み込み層のループネストを実行できる。これについては以下でさらに詳しく説明する。図6には、計算タイル600内のさまざまな構成要素のそれぞれの属性を示す参照マップ630が含まれている。参照マップ630はわかりやすくするために示されているが、計算タイル600には含まれていない。属性には、特定の構成要素が装置、記憶デバイス、オペレータ、制御デバイス、またはデータパスであるかどうかが含まれる。
図7Aは、乗算累算セル616のサブセットへのパーティションの例示的なマッピングを示すブロック図である。図7Bは、ハードウェア計算タイル600の乗算累算セル616にそれぞれの入力を提供する例示的な入力バス617を示すブロック図である。
最初に図7Aを参照すると、上述のように、データおよび命令は、タイル外部のソースから計算タイル600で受信することができる。ソースは、別の計算タイル600、ハードウェア回路114の上位のコントローラ、ハードウェア回路114の外部のホストデバイス、またはこれらの組み合わせであり得る。実行されるグループ畳み込み演算のタイプに基づいて、システム100は、グループ畳み込みの数(例えば、分割)を表す制御パラメータgのさまざまな定義済み値から選択できる。例えば、システム100は、所与のニューラルネットワークアーキテクチャの異なるグループ畳み込みニューラルブロックに対してgの特定の値を選択できる。いくつかの実装では、gの値は、所与の演算に対して外部ホストで事前定義され、ハードウェア回路114のコントローラに渡される。
いくつかの実装では、上位のコントローラは、制御パラメータgに基づいて、入力特徴マップのチャネル次元(例えば、Zin)に沿って1つまたは複数のパーティションを識別する。システム100は、1つまたは複数のパーティションに基づいて、チャネル次元に沿って1つまたは複数のグループ化を形成することができる。図7の例では、入力チャネルのそれぞれのグループ化が、例示的な入力テンソルまたは入力特徴マップのZinに沿って形成されている。各それぞれのグループ化は、以下に説明するように、対応する乗算累算セル616-1、616-2、616-3、616-4にマッピングできる。さらに、入力チャネルの各グループ化には、それぞれのサイズが含まれる。より具体的には、各グループ化には、グループ化のそれぞれのサイズに対応するそれぞれの数の入力チャネルが含まれる。例えば、図7Aの図に示すように、グループ化またはパーティションのサイズパラメータSは、Zin/gによって定義できる。ここで、Zinは入力テンソルのチャネル次元に沿った入力チャネルの数であり、gは上記の制御パラメータによって定義されるグループの数である。
システム100は、計算装置614内の乗算累算セル616へのグループ化のマッピング700を決定するように演算可能である。例えば、マッピングは、計算タイル600でローカルに決定することも、集積回路114の上位のコントローラを使用して決定することもできる。いくつかの実装では、ホストデバイスがマッピングを決定し、マッピング命令を生成し、マッピング命令を上位のコントローラに渡し、次に、上位のコントローラが命令を計算タイル600に渡す。例えば、集積回路114には、外部ホストデバイスから上位のコントローラに渡されるデータまたは命令を受信するためのホストインターフェイスブロックを含めることができる。
いくつかの実装では、システム100(例えば、ホストまたは集積回路のコントローラ)は、各パーティション内のチャネルの数に基づいてマッピングを決定する。例えば、ホストデバイスまたは上位のコントローラのいずれかが、各計算タイル600内の計算装置614の構成を含む、集積回路114のハードウェア構成を記述する情報にアクセスできる。これらのハードウェア構成に基づいて、システム100は、計算装置614の乗算累算セルの数またはレイアウトを参照して、各グループ化のそれぞれのサイズを決定できる。例えば、システム100は、グループ化とそれぞれの入力の最適なマッピングを乗算累積セル616に決定して、計算装置614の全体的な使用率を最大化することができる。これについては以下でさらに詳しく説明する。
次に図7Bを参照すると、ナローメモリ610に結合される入力バス617が、1つまたは複数の乗算累算セル616に入力/活性化をブロードキャストする例示的なアーキテクチャが示されている。入力は、対応する乗算累算セル616によって受信されるように、一度に1つずつ入力バス617にシフトまたは送信することができる。
いくつかの実装では、入力バス617は、ナローメモリ610から取得されるグループ畳み込み層入力を1つまたは複数の乗算累算セル616にブロードキャストするブロードキャスト入力バスである。例えば、入力バス617は、集積回路114の個別の乗算累算セル616-1、616-2、616-3、616-nにそれぞれの入力を渡す(またはブロードキャストする)ことができる。したがって、入力バス617には、集積回路114が、上で説明した決定されたマッピングに基づいて、入力特徴マップのZin次元に沿った各グループ化の複数の入力を、対応する乗算累算セル616にブロードキャストできるようにするブロードキャスト機能が含まれている。
いくつかの実装では、セル616のサブセット内のいくつか(またはすべて)の乗算累算セル616間で同じ入力が共有される。入力バス617の幅は、計算装置614の所与のサブセットに対応する数の乗算累算セル616にブロードキャストされる入力を供給するのに十分な幅でなければならない。例えば、入力バス617の構造に関して、計算装置614内の乗算累算セル616の数が4であり、入力(または活性化)のデータ解像度/幅が8ビットである場合、入力バス617は、サイクルごとに最大4つの入力活性化を提供するように構成できる。この例では、各乗算累算セル616は、ブロードキャストされる4つの活性化のうち1つの活性化を受信できる。
システム100は、入力バス617を介して、入力特徴マップの第1のグループ化(Zinに沿って)のそれぞれの第1の入力(「0」)を、乗算累算セル616のサブセット内の各乗算累算セル616-1、616-2、616-3、616-nにブロードキャストすることができる。同様に、システム100は、入力バス617を介して、入力特徴マップの第2のグループ化(Zinに沿って)のそれぞれの第2の入力(「1」)を、乗算累算セル616のサブセット内の各乗算累算セル616-1、616-2、616-3、616-nにブロードキャストすることができる。ブロードキャストされる第1の入力と第2の入力は、グループ畳み込み層の計算中に再利用される。例えば、各入力702(「0」)、704(「1」)、706(「2」)、708(「3」)は、活性化テンソルのチャネル次元に沿った異なるグループ化に対応できる。
いくつかの実装では、各入力702、704、706、708は、各乗算累算セルにわたってブロードキャストされ、再利用されて、グループ畳み込み層の計算を並列化することができる。例えば、グループ畳み込みの一部を実行するために、再利用される入力は、ワイドメモリ612のメモリ位置から取得され、乗算累算セル616のそれぞれの重みレジスタにルーティングされる、異なる個々の重み値で乗算される。この再利用属性については、図8を参照して以下でさらに詳しく説明する。このように各Zinグループ化の計算を並列化することで、回路114は計算装置614と、装置内の対応する乗算累算セル616の利用率を最大化できる。より具体的には、少なくとも回路114の乗算累算セル616にわたる入力ブロードキャストを可能にするグループ畳み込みを実行するための回路アーキテクチャは、グループ畳み込みを実行するために使用される従来の回路アーキテクチャを超える利用率および効率レベルを達成することができる。
さらに、グループ畳み込みベースのニューラルブロックの少なくとも1つの利点は、演算強度を変更できることである。例えば、演算強度を調整して、乗算累算セル616で実行される演算の数と、取得される重みごとのセル全体の使用率を制御できる。これにより、システム100はパラメータ帯域幅を最適化できる。場合によっては、エッジでの推論計算用のアプリケーションではメモリ帯域幅が制限されることがある。グループ畳み込みを使用して、全体的な計算時間を最大化し、メモリから新しい重みを取得するための余分なメモリ演算の必要性を最小限に抑える(または回避する)ことができる。
図8は、完全畳み込み、深さ単位の畳み込み、およびグループ畳み込みの、ある属性を示す例示的なブロック図800である。より具体的には、ブロック図800は、完全畳み込み演算(802)、深さ単位の畳み込み演算(804)、およびグループ畳み込み演算(806)中に処理される入力のそれぞれの再利用属性を示している。図8の例では、ブロック802(完全畳み込み)とブロック806(グループ畳み込み)を参照して再利用が示されている。例えば、第1のブロック802は、各入力812が完全畳み込みの各出力チャネル813を計算するために再利用されることを示し、一方、第2のブロック804は、各入力814が深さ単位の畳み込みの対応する出力チャネル815を計算するために1回だけ使用されることを示す。
第3のブロック806は、所与のグループ畳み込みに対応する出力チャネル817、818を計算するときに、入力が再利用の尺度を持つことができることを示している。例えば、ブロック806では、各入力816は、対応する出力チャネル817、818を計算するときに特定の再利用係数(例えば、2)を持つ。グループ畳み込み層への入力の再利用係数は、その層で処理されるグループ化のサイズに対応する。場合によっては、入力チャネルからの各要素が再利用され、そのグループに属する出力チャネルが計算される。これを考慮して、再利用係数はグループのサイズに基づいて決定される。
いくつかの実装では、計算タイル600で受信される命令内の第1のオペコードは、入力テンソルのグループ畳み込み入力の分割およびそれに続くグループ化を示す制御パラメータgの値を指定し、命令内の第2のオペコードは、グループ化における入力の再利用係数を示すサイズパラメータの値を指定する。各計算タイル600は、ローカルグループ畳み込み制御635を使用して、計算タイル600のハードウェア構成、計算タイル600で実行されるグループ畳み込み、またはその両方に基づいてサイズパラメータを決定することもできる。
回路114は、計算装置614内に32個または64個の乗算累算セルを備えることができる。グループ畳み込み制御635は、計算タイル600でのグループ畳み込み演算を指定する命令内の1つまたは複数のオペコードを識別できる。例えば、グループ畳み込み制御635は、グループ畳み込みがK×Kグループ畳み込み(416)であることを決定し、チャネル次元の漸進的拡張を実行することができる。グループ畳み込み制御635は、この特定のタイプの畳み込み演算が、グループ化されるIBN漸進的拡張ニューラルブロック416の1つまたは複数のグループ畳み込み層で適用されることを決定できる。
いくつかの実装では、システム100は、特定のタイプの畳み込み演算に固有の制御パラメータgの定義済み値を選択できる。例えば、所与のグループ畳み込みニューラルブロック412、416、422、または432の場合、システム100は、各ニューラルブロックに関連付けられる異なるグループ畳み込み演算に対して、所定の制御値gから選択できる。グループ畳み込み演算のグループ化は、制御値から定義される。いくつかの実装では、所与の計算タイル600のグループ畳み込み制御635は、タイルの乗算累算セル616へのグループ化のローカルマッピング700を決定する。グループ畳み込み制御635は、グループ化ごとに、演算のグループ畳み込み入力816を処理するためのニューラルブロック416のグループ畳み込み層を識別し、グループ化と演算に応じてサイズパラメータSを設定できる。
前述のように、各グループ化には、グループ化のそれぞれのサイズに対応する入力チャネルのそれぞれの数が含まれているため、グループ化のサイズパラメータSはZin/gによって定義できる。各グループ化はグループ畳み込みを表し、出力グループ220-nの対応するチャネルに関連付けられる。各グループ化には、入力特徴マップから導出されたそれぞれの入力を含めることができる。図8の例では、各入力816は、入力テンソルのチャネル次元に沿った異なるグループ化からのものであり得る。いくつかの実装では、グループ畳み込み制御635は、命令の1つまたは複数のオペコードを分析し、オペコードに基づいて、計算タイル600がK×Kグループ畳み込み(416)を適用して、チャネル次元の数を増やすことを伴うチャネル次元の漸進的拡張を実行することを決定する。
グループ畳み込み制御635は、グループ畳み込みのさまざまな態様についてサイズパラメータSを決定し、K×Kグループ畳み込み(416)の進行に応じてグループ化のローカルマッピングを調整することができる。いくつかの実装では、この漸進的な拡張演算は、ニューラルネットワークの一部として静的に表現される。例えば、出力チャネル全体の拡張をeにするために、K×Kグループ畳み込み(416)は出力チャネルを係数g_eで拡張することができる。上で説明したように、この拡張の後に1×1の点単位の畳み込みを行うことができ、e/g_eの拡張を有するため、全体の拡張はg_e*e/g_e=eとなる。
次に、グループ畳み込みの計算を伴う例示的な演算について説明する。
64個の乗算累算セルの例を再度参照すると、グループ畳み込み制御635は、ワイドメモリ612からグループ畳み込み層の64個の異なる重み値を取得できる。例えば、グループ畳み込み制御635は、ハードウェア構成(例えば、セルの数)、グループ畳み込み層のタイプ、またはその両方に基づいて、64個の異なる重み値を取得できる。グループ畳み込み制御635は、メモリ610から対応する入力816を取得することもできる。取得される入力は、乗算累算セル616全体で再利用を有する必要がある。いくつかの実装では、取得される入力は64個の乗算累算セル全体で再利用を有する。いくつかの他の実装では、取得される入力は64個の乗算累算セルのサブセット全体で再利用を有する。一般に、グループ内のすべての入力は、同じグループ内の出力に対してある程度の再利用を有する。
この例では、入力816は、入力深さが乗算累算セルの数に対応するように、入力深さが64である入力特徴マップから選択することができる。計算タイル600は、64個のセルを使用して1000個の出力を計算できる。グループ畳み込み制御635はグループサイズを64に設定できるため、1つの入力値816を取得してブロードキャストするサイクルごとに、計算タイル600はその入力816を使用して1000個の出力のうち64個の出力を計算できる。したがって、グループサイズが十分に大きい場合、所与の計算タイル600は入力バスの100%使用率を達成できる。これは、1つの入力値を取得するサイクルごとに、64個のセルすべてが使用されるためである。
したがって、計算タイル600は、乗算累算セルの数に基づいてグループサイズを定義し、グループ畳み込みの、ある特性に応じて、完全畳み込みの処理ペナルティを招くことなく、乗算累算セルの完全な利用を達成することができる。単一の入力チャネルを伴う例では、グループサイズ=2の場合、これは計算タイル600が2つのチャネル要素(例えば、2つの入力816)を畳み込むことを意味する。したがって、計算タイル600は、グループサイズに基づいて、その個数のチャネル要素を畳み込む。完全畳み込みの場合、グループサイズは入力チャネル全体のサイズに等しくなる。
入力チャネルが1000個ある場合、完全畳み込みでは、システム100は1000個の入力チャネル全体を畳み込んで1つの出力チャネルを計算する。ここでの出力は、値または活性化のチャネルである。深さ単位の畳み込みの場合、システム100は1つの入力チャネルを計算して1つの出力チャネルを計算するだけである。この例では、グループサイズが1の場合、これは深さ単位の畳み込みである。グループサイズが2の場合、1つの出力チャネルを計算するには、2つの入力チャネルを畳み込む必要がある。グループサイズが4の場合、1つの出力チャネルを計算するには、4つの入力チャネルを畳み込む必要がある。
図9は、ハードウェア集積回路を使用してグループ畳み込みを適用することにより、例示的な画像を処理するために使用される例示的なプロセス900のフロー図である。ハードウェア集積回路は、複数のニューラルネットワーク層を含むCNNを実装するように構成されており、複数の層にはグループ畳み込み層が含まれる。例示的な画像は、上述の画像102であってもよく、または他のさまざまなタイプのデジタル画像および関連するグラフィックデータであってもよい。いくつかの実装では、プロセス900は、ニューラルネットワーク計算を高速化するために使用される技術の一部であり、これにより、他のデータ処理技術と比較して、画像処理出力の精度も向上できる。
プロセス900は、上述のシステム100を使用して実装または実行することができる。したがって、プロセス900の説明では、システム100の上記のコンピューティングリソースを参照し得る。プロセス900のステップまたはアクションは、この文書で説明されているデバイスおよびリソースの1つまたは複数のプロセッサによって実行可能なプログラムされるファームウェアまたはソフトウェア命令によって有効にすることができる。いくつかの実装では、プロセス900のステップは、ハードウェア集積回路を使用して、畳み込みニューラルネットワーク層、例えばグループ畳み込み層の出力を生成するための計算を実行するための方法に対応する。集積回路は、CNNを実装するように構成される専用ニューラルネットワークプロセッサまたはハードウェア機械学習アクセラレータにすることができる。
プロセス900を再度参照すると、システム100は、入力特徴マップに関連付けられる制御パラメータを識別する(902)。例えば、入力特徴マップのチャネル次元に沿って2つ以上のパーティションを定義する制御パラメータが識別される。システム100は、2つ以上のパーティションのマッピングを決定する(904)。より具体的には、システム100は、ハードウェア集積回路の計算装置内の乗算累算セルへのパーティションのマッピングを決定する。
グループ畳み込み層の場合、システム100は、ハードウェア集積回路を使用して、入力特徴マップに対してグループ畳み込みを適用する(906)。2つ以上のパーティションの各々について、グループ畳み込み層にグループ畳み込みを適用することは、乗算累算セルのサブセットにグループ畳み込み層の重みを提供する(908)ことを含む。例えば、システム100は、決定されたマッピングに基づいて、乗算累算セルのサブセットに重みを提供する。重みは、計算タイル600の例示的なワイドメモリから提供される。
システム100は、入力特徴マップの入力を乗算累算セルのサブセットに提供する(910)。例えば、入力特徴マップのそれぞれの入力は、集積回路の入力バスを介してサブセット内の各乗算累算セルに提供される。より具体的には、各ハードウェア計算タイル600には、所与の乗算累算セルに1つまたは複数の入力をブロードキャストするために使用されるそれぞれの入力バスが含まれる。
システム100は、それぞれの入力とグループ畳み込み層の対応する重みを使用して積を計算する(912)。例えば、積は、乗算累算セルの乗算回路を使用して、サブセット内の各乗算累算セルでそれぞれの入力と対応する重みを乗算することによって計算される。
システム100は、グループ畳み込み層の出力特徴マップを生成する(914)。例えば、グループ畳み込み層の出力特徴マップは、乗算累算セルのサブセット内の各乗算累算セル616で計算される複数のそれぞれの積の累積に基づいて生成される。グループ畳み込み層の計算タイル600内で実行される計算プロセスには、入力テンソルのそれぞれの要素に記憶されているデータ値(例えば、入力または活性化)と、パラメータテンソルのそれぞれの要素に記憶されているデータ値(例えば、重み)の乗算が含まれる。例えば、計算には、1つまたは複数のサイクルで入力値または活性化値と重み値を乗算して複数の積(例えば、部分合計)を生成し、その後、多数のサイクルにわたってそれらの積の累積を実行することが含まれる。いくつかの実装では、出力特徴マップを生成することは、入力チャネルの各グループ化(またはパーティション)のそれぞれのサイズに基づいて出力特徴マップを生成することを含む。
本明細書で説明する主題および機能演算の実施形態は、本明細書で開示される構造およびその構造的同等物を含む、デジタル電子回路、有形に具現化されるコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、またはそれらの1つもしくは複数の組み合わせで実装することができる。本明細書で説明する主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置によって実行されるか、またはデータ処理装置の演算を制御するための、有形の非一時的なプログラムキャリア上に符号化されるコンピュータプログラム命令の1つもしくは複数のモジュールとして実装することができる。
代替的にまたは追加的に、プログラム命令は、データ処理装置による実行のために適切な受信機装置に送信するために情報を符号化するために生成される、人工的に生成される伝播信号、例えば機械で生成される電気信号、光信号、または電磁信号上に符号化することができる。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらの1つもしくは複数の組み合わせとすることができる。
「コンピューティングシステム」という用語には、例えば、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサやコンピュータなど、データを処理するためのあらゆる種類の装置、デバイス、および機械が包含される。装置には、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用論理回路を含めることができる。装置には、ハードウェアに加えて、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つもしくは複数の組み合わせを構成するコードなど、問題のコンピュータプログラムの実行環境を作成するコードも含まれ得る。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとも呼ばれ得るまたはそれらとして説明され得る)は、コンパイル型もしくは解釈型言語または宣言型もしくは手続き型言語を含む任意の形式のプログラミング言語で記述することができ、スタンドアロンプログラムとして、またはコンピューティング環境での使用に適したモジュール、構成要素、サブルーチン、もしくはその他の装置として、任意の形式で展開することができる。
コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、対応する必要はない。プログラムは、他のプログラムもしくはデータを保持するファイルの一部(例えば、マークアップ言語文書に記憶される1つまたは複数のスクリプト)、問題のプログラム専用の単一のファイル、または複数の調整されるファイル(例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイル)に記憶できる。コンピュータプログラムは、1台のコンピュータ、または1つのサイトにあるか複数のサイトに分散され通信ネットワークによって相互接続される複数のコンピュータ上で実行されるように展開できる。
本明細書で説明するプロセスおよび論理フローは、入力データに対して演算を行い、出力を生成することによって機能を実行する1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルコンピュータによって実行することができる。プロセスおよび論理フローは、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(汎用グラフィックス処理装置)などの専用論理回路によって実行することもでき、装置を専用論理回路として実装することもできる。
コンピュータプログラムの実行に適したコンピュータとしては、例えば、汎用マイクロプロセッサまたは専用マイクロプロセッサまたはその両方、あるいは任意の他の種類の中央処理装置に基づき得る。一般的に、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリまたはその両方から命令とデータを受信する。いくつかのコンピュータの要素には、命令を実行するための中央処理装置と、命令とデータを記憶するための1つまたは複数のメモリデバイスがある。一般に、コンピュータには、磁気ディスク、光磁気ディスク、または光ディスクなどのデータを記憶するための1つまたは複数の大容量記憶デバイスも含まれるか、または、それらの記憶デバイスからデータを受信したり、それらの記憶デバイスにデータを転送したり、あるいはその両方を行うように動作的に結合される。しかし、コンピュータにはそのようなデバイスは必要ない。さらに、コンピュータは、ほんの数例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスなど、別のデバイスに組み込むことができる。
コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体には、あらゆる形式の不揮発性メモリ、媒体、およびメモリデバイスが含まれ、例として、半導体メモリデバイス(例えば、EPROM、EEPROM、およびフラッシュメモリデバイス)、磁気ディスク(例えば、内蔵ハードディスクまたはリムーバブルディスク)、光磁気ディスク、CD ROMおよびDVD-ROMディスクなどが含まれる。プロセッサとメモリは、専用論理回路によって補完され得るか、または専用論理回路に組み込まれ得る。
ユーザとの対話を可能にするために、本明細書で説明する主題の実施形態は、ユーザに情報を表示するための表示デバイス(例えば、LCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を提供できるキーボードおよびポインティングデバイス(例えば、マウスまたはトラックボール)とを備えたコンピュータ上で実装することができる。他の種類のデバイスを使用して、ユーザとの対話を提供することもできる。例えば、ユーザに提供されるフィードバックは、視覚フィードバック、聴覚フィードバックまたは、触覚フィードバックなど、あらゆる形式の感覚フィードバックにすることができ、ユーザからの入力は、音響、音声、または触覚入力など、あらゆる形式で受信できる。さらに、コンピュータは、ユーザが使用するデバイスに文書を送受信することで、ユーザと対話できる。例えば、ウェブブラウザから受信した要求に応じて、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信する。
本明細書で説明する主題の実施形態は、例えばデータサーバなどのバックエンド構成要素を含むコンピューティングシステム、または例えばアプリケーションサーバなどのミドルウェア構成要素を含むコンピューティングシステム、または例えばグラフィカルユーザインターフェイスもしくはウェブブラウザを備えたクライアントコンピュータなどのフロントエンド構成要素を含むコンピューティングシステムで実装することができ、ユーザはそれを介して本明細書で説明する主題の実装と対話することができ、あるいは、そのようなバックエンド、ミドルウェア、またはフロントエンド構成要素の1つまたは複数の任意の組み合わせで実装することができる。システムの構成要素は、通信ネットワークなど、デジタルデータ通信のあらゆる形式または媒体によって相互接続できる。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)や、インターネットなどのワイドエリアネットワーク(「WAN」)などが含まれる。
コンピューティングシステムには、クライアントとサーバが含まれ得る。一般に、クライアントとサーバは互いに離れており、通常は通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され、相互にクライアントとサーバの関係を持つコンピュータプログラムによって生じる。
本明細書には多くの具体的な実装の詳細が含まれているが、これらは発明の範囲または請求され得るものの範囲を制限するものとして解釈されるべきではなく、むしろ特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。本明細書において個別の実施形態の文脈で説明されているある特徴は、単一の実施形態で組み合わせて実装することもできる。逆に、単一の実施形態の文脈で説明されているさまざまな特徴は、複数の実施形態で個別に、または任意の適切なサブ組み合わせで実装することもできる。さらに、特徴はある組み合わせで機能すると上記で説明され得、当初はそのように請求されていたとしても、請求される組み合わせからの1つまたは複数の特徴が、場合によっては組み合わせから削除され得、請求される組み合わせは、サブ組み合わせまたはサブ組み合わせのバリエーションに向けられ得る。
同様に、図面では演算が特定の順序で描かれているが、これは、望ましい結果を得るために、そのような演算が図示される特定の順序または連続した順序で実行されること、または図示されるすべての演算が実行されることを要求するものとして理解されるべきではない。ある状況では、マルチタスクと並列処理が有利になり得る。さらに、上記の実施形態におけるさまざまなシステムモジュールおよび構成要素の分離は、すべての実施形態でそのような分離が必要であると理解されるべきではなく、説明されているプログラム構成要素およびシステムは、一般に、単一のソフトウェア製品に統合することも、複数のソフトウェア製品にパッケージ化することもできると理解されるべきである。
主題の特定の実施形態について説明した。他の実施形態は、以下の請求項の範囲内である。例えば、請求項に記載されているアクションは、異なる順序で実行されても、望ましい結果が得られ得る。一例として、添付の図に示されるプロセスでは、望ましい結果を得るために、必ずしも示される特定の順序、または連続した順序を必要としているわけではない。ある実装では、マルチタスクと並列処理が有利になり得る。