この記事では、ディープラーニングでよく使用される 8 種類の畳み込みについてまとめ、非常に鮮明な方法で直感的な理解を深め、ディープラーニングに役立つリファレンスを提供します。 これらは、シングルチャネル畳み込み、マルチチャネル畳み込み、3D 畳み込み、1 x 1 畳み込み、転置畳み込み、膨張畳み込み、分離畳み込み、およびグループ化畳み込みです。 単一チャネル畳み込み単一チャネル畳み込みディープラーニングでは、畳み込みは要素ごとの乗算とそれに続く加算です。 1 チャネルの画像の場合、畳み込みは次の図のようになります。ここで、フィルターは要素 [[0,1,2]、[2,2,0]、[0,1,2]] を持つ 3 x 3 行列です。フィルターは入力を横切ってスライドします。各位置で、要素ごとの乗算と加算を行っています。各スライド位置には番号が付けられます。最終的な出力は 3 x 3 の行列になります。 マルチチャンネル畳み込み多くのアプリケーションでは、複数のチャネルを持つ画像を扱います。典型的な例は RGB 画像です。次の図に示すように、各 RGB チャネルは元の画像の異なる側面を強調します。 この写真は雲南省元陽市で撮影された。 畳み込みニューラル ネットワークの各層で複数のフィルター カーネルを使用することをマルチチャネルと呼びます。畳み込みネットワーク層は通常、複数のチャネル (数百の畳み込みカーネル) で構成されます。各チャネルは、前のレイヤーのさまざまな側面から抽象的な特徴を抽出します。異なる深さのレイヤー間をどのように遷移するのでしょうか? 深さ n のレイヤーから次の深さ m のレイヤーにどのように遷移するのでしょうか? 「レイヤー」(フィルター)と「チャネル」(畳み込みカーネル) マルチチャンネル畳み込みは以下のようになります。各カーネルは前のレイヤーの入力チャネルに適用され、1 つの出力チャネルが生成されます。これはカーネルプロセスです。複数のチャネルを生成するには、すべてのカーネルに対してこのプロセスを繰り返します。これらの各チャネルは合計されて、単一の出力チャネルを形成します。 次の図は、マルチチャネル畳み込みプロセスをより明確に示しています。 入力層は 3 つのチャネルを持つ 5 x 5 x 3 のマトリックスです。フィルターは 3 x 3 x 3 のマトリックスです。まず、フィルター内の各カーネルが入力層の 3 つのチャネルに個別に適用され、合計されます。次に、3 つの畳み込みが実行され、サイズが 3×3 の 3 つのチャネルが生成されます。 マルチチャネル 2D 畳み込みの最初のステップ: フィルター内の各カーネルは、入力層の 3 つのチャネルに個別に適用されます。 マルチチャネル 2D 畳み込みの 2 番目のステップ: 次に、これら 3 つのチャネルを加算 (要素ごとに加算) して、1 つのチャネルを形成します。 3D畳み込み3D フィルターは、3 つの方向 (画像の高さ、幅、チャンネル) すべてに移動できます。各位置では、要素ごとの乗算と加算によって数値が得られます。フィルターは 3D 空間をスライドするため、出力される数値も 3D 空間に配置され、出力は 3D データになります。 2D 畳み込みにおけるオブジェクトの空間関係と同様に、3D 畳み込みは 3D 空間におけるオブジェクトの空間関係を記述できます。この 3D 関係は、血管などのオブジェクトが 3D 空間で蛇行するバイオメディカル画像、CT、MRI の 3D セグメンテーション/再構築などの重要な用途に使用されます。 1 x 1 畳み込み1 x 1 畳み込みは、入力層内のすべての数値を数値で乗算します。 入力層に複数のチャネルがある場合、この畳み込みは興味深い効果をもたらす可能性があります。次の図は、サイズ H x W x D の入力レイヤーに 1 x 1 畳み込みを適用する方法を示しています。フィルター サイズが 1 x 1 x D の 1 x 1 畳み込みの後、出力チャネルのサイズは H x W x 1 になります。このような 1 x 1 畳み込みを N 回適用し、結果を連結すると、サイズが H x W x N の出力レイヤーが得られます。 フィルタサイズが1 x 1 x Dの1 x 1畳み込み 当初、1 x 1 畳み込みは Networks of Networks 論文で提案されました。次に、Google Inception で多用された 1 x 1 畳み込みの利点をいくつか挙げます。
最初の 2 つの利点は上の図で確認できます。 1 x 1 畳み込み後、サイズが大幅に削減されます。元の入力に 200 個のチャネルがあると仮定すると、1 x 1 畳み込みによってこれらのチャネル (機能) が 1 つのチャネルに埋め込まれます。 3 つ目の利点は、1 x 1 畳み込みの後に、ReLU などの非線形アクティベーションを追加できるため、ネットワークがより複雑な関数を学習できることです。 転置畳み込み(逆畳み込み、デコンボリューション)多くのアプリケーションやネットワーク アーキテクチャでは、通常の畳み込みとは逆方向の変換、つまりアップサンプリングを実行することが必要な場合があります。例としては、高解像度画像を生成したり、オートエンコーダやセマンティックセグメンテーションなどの低次元の特徴マップを高次元空間にマッピングしたりすることが挙げられます。 従来、アップサンプリングは、補間スキームを適用するか、ルールを手動で作成することによって実現できます。しかし、ニューラル ネットワークなどの最新のアーキテクチャでは、人間の介入なしにネットワーク自体が正しい変換を自動的に学習できます。 下の図の例では、2 x 2 入力に 3 x 3 カーネルの転置畳み込みを適用し、2 x 2 境界を単位ストライドでパディングし、アップサンプリングされた出力のサイズは 4 x 4 になります。 入力 2 x 2 アップサンプリング出力 4 x 4 興味深いことに、同じ 2 x 2 入力画像は、複雑なパディングとストライドを適用することで、異なる画像サイズにマッピングできます。以下では、転置畳み込みが同じ 2 x 2 入力に適用され、単位ストライドを使用して 2 x 2 境界がゼロでパディングされ、出力のサイズが 5 x 5 になります。 入力 2 x 2 アップサンプリング出力 5 x 5 畳み込みでは、C をカーネル、Large を入力画像、Small を畳み込みからの出力画像として定義します。畳み込み(行列乗算)の後、大きな画像を小さな出力画像にダウンサンプリングします。行列乗算における畳み込みの実装は、C x Large = Small に従います。 次の例はこれがどのように機能するかを示しています。入力を 16 x 1 行列に平坦化し、カーネルをスパース行列 (4 x 16) に変換します。次に、スパース行列とフラット入力の間で行列乗算が適用されます。その後、結果のマトリックス (4×1) は 2×2 出力に変換されます。 畳み込みのための行列乗算: 大きな入力画像 (4 x 4) から小さな出力画像 (2 x 2) へ ここで、方程式の両辺に行列 CT の転置を乗算し、行列とその転置の乗算を使用して単位行列の特性を与えると、下の図に示すように、次の式 CT x Small = Large が得られます。 畳み込みのための行列乗算: 小さな入力画像 (2 x 2) から大きな出力画像 (4 x 4) へ 膨張畳み込み標準的な離散畳み込み: 標準畳み込み拡張畳み込みは次のようになります。 l = 1 の場合、拡張畳み込みは標準畳み込みになります。 膨張畳み込み 直感的に言えば、拡張畳み込みはカーネル要素間にスペースを挿入することによってカーネルを「拡張」します。この追加パラメータ l (拡張率) は、カーネルをどれだけ拡張するかを示します。実装は異なる場合がありますが、通常はカーネル要素間に l-1 個のスペースが挿入されます。次の図は、l = 1、2、4 の場合のカーネル サイズを示しています。 拡張畳み込み受容野 追加コストをかけずに広い受容野を観察します。 画像内の 3×3 の赤い点は、畳み込み後の出力画像が 3×3 ピクセルであることを示しています。 3 つの拡張畳み込みはすべて同じサイズの出力を提供しますが、モデルによって観察される受容野は大幅に異なります。 l = 1 の場合、受容野は 3 x 3、l = 2 の場合は 7 x 7、l = 3 の場合は受容野は 15 x 15 に増加します。興味深いことに、これらの操作に関連付けられたパラメータの数は基本的に同じです。 分離可能な畳み込み空間的に分離可能な畳み込み 空間的に分離可能な畳み込みは、画像の 2D 空間次元、つまり高さと幅に対して作用します。概念的には、空間的に分離可能な畳み込みは畳み込みを 2 つの別々の操作に分解します。以下に示す例では、カーネル (3x3 カーネル) が 3x1 カーネルと 1x3 カーネルに分割されています。 畳み込みでは、3x3 カーネルが画像と直接畳み込まれます。空間的に分離可能な畳み込みでは、最初に 3x1 カーネルが画像と畳み込まれます。次に 1x3 カーネルが適用されます。同じ操作を実行する場合、9 個ではなく 6 個の引数が必要になります。 さらに、空間的に分離可能な畳み込みでは、畳み込みよりも行列の乗算が少なくて済みます。具体的な例として、3×3 カーネル (ストライド = 1、パディング = 0) を使用した 5×5 画像の畳み込みでは、次の図に示すように、水平方向に 3 つの位置、垂直方向に 3 つの位置、合計 9 つの位置でカーネルをスキャンする必要があります。各位置で、9 つの要素ごとの乗算が適用されます。合計は 9 x 9 = 81 回の掛け算になります。 標準畳み込み 一方、空間的に分離可能な畳み込みの場合、まず 5 x 5 画像に 3 x 1 フィルターを適用します。このようなカーネルを水平方向に 5 つの位置、垂直方向に 3 つの位置でスキャンします。合計で 5×3 = 15 の場所があり、下の画像では点で表されています。各位置で、3 つの要素ごとの乗算が適用されます。つまり、15 x 3 = 45 回の乗算です。これで 3 x 5 のマトリックスができました。この行列は、水平方向に 3 つの位置、垂直方向に 3 つの位置で行列をスキャンする 1 x 3 カーネルで畳み込まれます。これらの 9 つの位置のそれぞれに対して、要素ごとの乗算が 3 回適用されます。このステップでは、9 x 3 = 27 回の乗算が必要です。したがって、全体として、空間的に分離可能な畳み込みには 45 + 27 = 72 回の乗算が必要となり、これは標準の畳み込みよりも少なくなります。 深さ方向分離畳み込み 深さ方向の分離可能な回転は、深さ方向の畳み込みと 1x1 畳み込みの 2 つのステップで構成されます。 これらの手順を説明する前に、前のセクションで説明した 2D 畳み込みと 1 x 1 畳み込みについての説明をもう一度確認しておくとよいでしょう。標準的な 2D 畳み込みを簡単に確認してみましょう。具体的な例を挙げると、入力レイヤーのサイズが 7 x 7 x 3 (高さ x 幅 x チャンネル) で、フィルターのサイズが 3 x 3 x 3 であるとします。 1 つのフィルターを使用した 2D 畳み込み後、出力層のサイズは 5 x 5 x 1 (チャネルは 1 つだけ) になります。 標準的な2D畳み込み。1つのフィルターを使用して1つの出力層を作成します。 通常、2 つのニューラル ネットワーク レイヤー間に複数のフィルターが適用されます。ここでは 128 個のフィルターがあると仮定します。これらの 128 個の 2D 畳み込みを適用すると、128 個の 5 x 5 x 1 出力マップが得られます。次に、これらのマップを 5 x 5 x 128 のサイズの単一のレイヤーに積み重ねます。これにより、入力層 (7 x 7 x 3) が出力層 (5 x 5 x 128) に変換されます。空間の寸法、つまり高さと幅は縮小し、奥行きは長くなります。 標準的な2D畳み込み。128個のフィルターを使用して128層の出力を作成します。 深さ方向に分離可能な畳み込みができたので、同じ変換をどのように実装できるかを見てみましょう。 まず、入力層に深さ方向の畳み込みを適用します。 2D 畳み込みでサイズ 3 x 3 x 3 の単一のフィルターを使用する代わりに、3 つのカーネルを個別に使用します。各フィルターのサイズは 3 x 3 x 1 です。各カーネルは入力層の 1 つのチャネルと畳み込まれます (すべてのチャネルではなく、1 つのチャネルのみ)。このような畳み込みはそれぞれ、サイズ 5×5×1 のグラフを提供します。次に、これらのグラフを積み重ねて 5×5×3 の画像を作成します。この後、出力サイズは 5 x 5 x 3 になります。空間次元は縮小されましたが、深さは以前と同じです。 深さ方向に分離可能な畳み込み - 手順 1: 2D 畳み込みでサイズ 3 x 3 x 3 の単一フィルターを使用する代わりに、3 つのカーネルを個別に使用します。各フィルターのサイズは 3 x 3 x 1 です。各カーネルは、入力層の 1 つのチャネル (すべてのチャネルではなく、1 つのチャネルのみ) と畳み込まれます。このような畳み込みはそれぞれ、サイズ 5×5×1 のグラフを提供します。次に、これらのグラフを積み重ねて 5×5×3 の画像を作成します。これにより、出力サイズは 5 x 5 x 3 になります。 深さ方向に分離可能な畳み込みの 2 番目のステップとして、深さを拡張するために、カーネル サイズが 1x1x3 の 1x1 畳み込みを適用します。 5 x 5 x 3 の入力画像を各 1 x 1 x 3 カーネルと比較すると、サイズが 5 x 5 x 1 のマップが生成されます。 したがって、128 個の 1x1 畳み込みを適用すると、サイズが 5 x 5 x 128 のレイヤーが得られます。 深さ方向に分離可能な畳み込み - ステップ 2: 複数の 1 x 1 畳み込みを適用して深さを変更します。 これら 2 つのステップを通じて、深さ方向に分離可能な畳み込みは入力層 (7 x 7 x 3) を出力層 (5 x 5 x 128) に変換します。 深さ方向に分離可能な畳み込みの全体のプロセスを下の図に示します。 深さ方向に分離可能な畳み込みの全プロセス では、深さ方向に分離可能な畳み込みの利点は何でしょうか? 効率性です! 2D 畳み込みと比較すると、深さ方向に分離可能な畳み込みに必要な操作が少なくなります。 2D 畳み込みの例の計算コストを確認してみましょう。 5x5 回シフトされた 3x3x3 カーネルが 128 個あります。つまり、128 x 3 x 3 x 3 x 5 x 5 = 86,400 回の乗算になります。 分離可能な畳み込みはどうでしょうか? 最初の深さ方向の畳み込みステップでは、3 つの 3x3x1 カーネルが 5x5 回移動します。つまり、3x3x3x1x5x5 = 675 回の掛け算になります。 1 x 1 畳み込みの 2 番目のステップでは、128 個の 1x1x3 カーネルが 5x5 回シフトされます。つまり、128 x 1 x 1 x 3 x 5 x 5 = 9,600 回の乗算になります。したがって、全体として、深さ方向に分離可能な畳み込みには 675 + 9600 = 10,275 回の乗算が必要です。これは 2D 畳み込みのコストのわずか 12% です。 グループ畳み込み2012 年に、グループ化畳み込みが AlexNet 論文で導入されました。これを実装した主な理由は、限られたメモリ(GPU あたり 1.5 GB のメモリ)で 2 つの GPU 上でネットワーク トレーニングを可能にするためです。以下の AlexNet では、ほとんどのレイヤーに 2 つの別々の畳み込みパスが示されています。これは、2 つの GPU 間でモデルを並列化します (もちろん、GPU がさらにあれば、マルチ GPU 並列化も実行できます)。 ここでは、グループ化畳み込みがどのように機能するかについて説明します。まず、従来の 2D 畳み込みは次の手順に従います。この例では、サイズ (7 x 7 x 3) の入力レイヤーが、128 個のフィルター (それぞれのサイズは 3 x 3 x 3) を適用して、サイズ (5 x 5 x 128) の出力レイヤーに変換されます。または、一般的には、サイズ (Hin x Win x Din) の入力レイヤーは、Dout カーネル (それぞれのサイズは hxwx Din) を適用することによって、サイズ (Hout x Wout x Dout) の出力レイヤーに変換されます。 標準的な2D畳み込み グループ畳み込みでは、フィルターは異なるグループに分割されます。各グループは、特定の深さを持つ従来の 2D 畳み込みを担当します。下記の通りです。 2つのフィルタバンクによるグループ化畳み込み 上記は、2 つのフィルター バンクを使用したグループ化畳み込みの図です。各フィルタ バンクでは、各フィルタの深さは、公称 2D 畳み込みの深さの半分だけです。深さはDin/2です。各フィルター バンクには Dout/2 フィルターが含まれています。最初のフィルタ バンク (赤) は入力層の前半 ([:,:0:Din/2]) と畳み込まれ、2 番目のフィルタ バンク (青) は入力層の後半 ([:,:,Din/2:Din]) と畳み込まれます。したがって、各フィルタ バンクは Dout/2 チャネルを作成します。全体として、2 つのグループは 2 x Dout/2 = Dout チャネルを作成します。次に、Dout チャネルを使用してこれらのチャネルを出力レイヤーにスタックします。 |
<<: ディープラーニングの背後にあるさまざまなアイデアや考え方を徹底的に理解する
>>: 中国聯通の専門家:5Gは5つの側面からAIを取り入れるべき
[[433351]]強化学習AIは囲碁、スタークラフト、王者栄耀などのゲームで絶対的な優位性を持って...
「顔スキャン」時代の到来が加速するにつれ、人々が旅行したり、出勤記録を取ったり、医療の予約を取ったり...
現在、DETR モデルはターゲット検出の主流のパラダイムとなっています。しかし、DETRアルゴリズム...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
GPT-4 などの大規模言語モデル (LLM) は多くの推論タスクで優れたパフォーマンスを発揮します...
検索拡張生成 (RAG) は、大規模言語モデル (LLM) の機能を強化する強力な手法として登場しま...
[[442512]]現在、人工知能や5Gなどの技術の助けを借りて、我が国のドローン開発は急速な成長の...
[[342088]]基本的なデータ構造の統合は、大規模システムの基礎となります。たとえば、Redis...
感情認識技術は、人工知能を使用して人の表情から感情を検出する、数十億ドル規模の新興産業です。しかし、...
誰もが知っているように、コンピューティング能力とデータは非常に重要ですが、それだけで十分でしょうか?...
調査によると、人工知能(AI)ソリューションは現在急速に成長している市場であり、2020年までに1,...
私はテスラの「純粋なビジュアルルート」に常に懐疑的でした。疑問なのは、アルゴリズムの進歩によってカメ...