シリーズ記事ディレクトリ
ニューラル ネットワークの学習ノート 1 - ResNet 残差ネットワーク、バッチ正規化の理解とコード
ニューラル ネットワークの学習ノート 2 - VGGNet ニューラル ネットワークの構造と受容野の理解とコード
記事ディレクトリ
A. 変圧器モデル
最近、CV の分野で Transformer が非常に人気があります。Transformer は 2017 年に Google によって Computation and Language で公開されました。当時は主に NLP 自然言語処理の分野、主に言語分野の機械翻訳タスク向けに提案されていました。 NLP。それ以前は、このようなタスクを扱うために誰もが使用していたモデルは RNN や LSTM などのテンポラル ネットワークでしたが、このようなモデルでは必然的にメモリ長の制限や使用できる文情報の制限、勾配爆発や勾配の問題が発生します。 LSTM は RNN に基づいてこの種の問題をある程度軽減しますが、この種の RNN ベースのネットワーク モデルのもう 1 つの重大な問題は、並列化できないことです。時刻 tn のデータを計算したい場合は、時刻 tn-1 のデータを計算する必要があり、並列化できないため計算効率が非常に低いという問題があります。これらの問題に対して、Google チームは Transformer (中国名トランスフォーマー) を提案しました。現在の Transformer は、NLP、CNN、RNN に次ぐ 4 番目に大きいタイプの基本モデルであると考えられています。おそらく、これが Attending Is All You のゴールド コンテンツです。必要。トランスフォーマーの中核は、アテンション メカニズム Attendance に依存するモデルを提案することです。
1. 補足事項
1. 並列コンピューティング
データ並列モデル トレーニングでは、トレーニング タスクが複数のプロセス (デバイス) に分割され、各プロセスは同じモデル パラメーターと同じコンピューティング タスクを維持しますが、異なるデータ (バッチ データ) を処理します。データの並列処理により、並列トレーニング デバイスを追加することでトレーニングのスループットを向上させることができます。
入力データはトレーニング データセット全体を分割します。
- 並列プロセス数に応じて分割され、各プロセスは自身の分割データのみを読み込みます
- 読み込みは特定のプロセスのみを担当し、並列プロセス数に応じて分割し、対応するプロセスに異なるデータブロックを送信します。
RNN シリーズ モデルは、X1 から Xn まで順番に計算する必要があります。この問題により、GPU 上でもコンピューティング パフォーマンスが低下し、シーケンスが長すぎると、初期の隠された履歴情報が失われ、反復処理が行われてしまいます。
RNN が並列化できない理由は、X0、X1、X2 はわかっているものの、計算する際には Xi だけでなく、直前に Xi-1 で計算した依存関係 ht-1 も入力する必要があるからです。 X0から得られるh0と、h0とX1から得られるh1を順番に計算しなければなりません。また、このデータのバッチ ([X0,X1,X2,...,Xn]) を完全な行列としてトランスフォーマーと同時に直接処理することはできず、1 つずつ処理する必要があります。
Transformer の並列化とは、トレーニング フェーズでのデータの並列化を指します。テスト フェーズでは、エンコーダのみ並列化できますが、デコーダは並列化できません。デコーダ フェーズでは、Transformer はコード レベルで少し異なる場合があります。 。
Transformer の並列化は主にセルフアテンション モジュールに反映されると考えられ、Encoder 側では Transformer がシーケンス全体を並列処理し、入力シーケンス全体の出力を Encoder 側を介して取得できます。アテンション モジュールでは、X1、X2、…、Xn からの特定のシーケンスについて、セルフ アテンション モジュールは Xi,Xj の内積結果を直接計算できます。バッチの問題を考慮しない場合、時刻 i における X の値を表す時系列 Xi が入力されると仮定します (または、ビデオを入力すると理解できます。Xi は i 番目のフレーム画像を表します)。トレーニング時には、X0、X1、X2 を 1 つずつ入力するのではなく、すべてのトレーニング セット Xi が同時にモデルに入力されます。したがって、トランスフォーマーはこのデータのバッチを同時に処理 (さまざまな行列演算) でき、並列化することもできます。
2、バッチノルムとレイヤーノルム
BatchNorm は一般に CV フィールドで使用されますが、LayerNorm は一般に NLP フィールドで使用されます。これは 2 つのタスク間の本質的な違いによって決定されます。視覚的特徴は客観的に存在する特徴ですが、セマンティック特徴はコンテキスト セマンティクスによって決定される統計のようなものです。 . の特徴があるため、正規化方法も異なります。
BatchNorm バッチ正規化: バッチ正規化は、中間層の単一ニューロンに対する正規化操作であり、バッチの方向が正規化されます。バッチ サイズ N のサンプルで、l 番目の層ネットワーク内の各ニューロンによって出力される N 個の結果を計算し、各ニューロンによって出力される N 個の結果の平均と分散を計算し、平均と分散を使用して N 個の結果を比較します。出力結果は正規化されるため、正規化されたディメンションがバッチで実行されます。
LayerNorm 層正規化: 層正規化は、中間層のすべてのニューロンを正規化し、チャネルの方向を正規化します。l 層ネットワークの各ニューロンの入力サンプルごとに、Batch 内の各ニューロンの出力を計算します。入力サンプルごとに、すべてのニューロンの出力結果の平均と分散を計算し、平均と分散を使用して正規化します。この入力サンプルの出力結果では、正規化されたディメンションがレイヤー全体で実行されます。
すべては平均と分散をより適切に取得するためです
2. エンコーダ-デコーダ(エンコード-デコード)
エンコーダーは自然言語シーケンスを隠れ層 (自然言語シーケンスの数学的表現を含む) にマッピングする役割を果たし、次にデコーダーは隠れ層を自然言語シーケンスにマッピングします。
自己回帰ステップ:
1. 自然言語シーケンスをエンコーダーに入力します
。 2. エンコーダーによって出力された隠れ層がデコーダーに入力されます。
3. デコーダーを開始します。
4. 最初の単語を取得します
。 5. 最初の単語をドロップしてデコーダーに入力します。 2 番目のワードを取得します
。 6. デコーダがターミネータを出力し、シーケンスの生成が完了するまで、このプロセスを繰り返します。
元の論文のモデル図:
これは実際にはエンコーダとデコーダのアーキテクチャであり、単純に次のように分割できます。
左側の領域はエンコーダです。
入力: エンコーダ入力
Positional Enocding: 位置エンコーディング
Nx: スタックされた n 個のレイヤー
Multi-Head Attendant: マルチヘッド アテンション メカニズム レイヤー
Add & Norm: 残差設定と同様、正規化された
Feed Forward: フィードフォワード ニューラル通信網
最初のサブレイヤ接続構造は、マルチヘッド セルフ アテンション サブレイヤ (qkv はエンコーダ入力から取得され、q=k=v)、正規化レイヤ、および残差接続で構成されます。
2 番目のサブレイヤー接続構造は、フィードフォワード完全接続サブレイヤーと正規化層、および残りの接続で構成されます。
エンコーダー エンコーダー: N=6 の同一レイヤーで構成され、各レイヤーには 2 つのサブレイヤーが含まれます。最初のサブレイヤーはマルチヘッド アテンション レイヤー (マルチヘッド アテンション レイヤー)、次に単純な全結合レイヤーです。各サブレイヤーには、残留接続 (residual connection) と正規化 (normalization) が追加されています。
右側の領域はデコーダです。
出力: デコーダ入力 位置
エンコーディング: 位置エンコーディング
Nx: n 個のレイヤーがスタックされます。
マスクされたマルチヘッド アテンション: マスク付きのマルチヘッド アテンション メカニズム レイヤー。背後の値をマスクして、その重みが0
Multi-Head Attendant: マルチヘッド アテンション メカニズム層
Add & Norm: 同様の残差設定、正規化された
Feed Forward: フィードフォワード ニューラル ネットワーク
第 1 サブレイヤ接続構造には、マルチヘッド マスク セルフ アテンション サブレイヤ (qkv はデコーダ入力、q=k=v からマスク マスクとして得られる)、正規化レイヤ、および残留接続が含まれます。
2 番目のサブレイヤー接続構造は、マルチヘッド アテンション サブレイヤー (kv はエンコーダーの出力から、q はデコーダーの最初のサブレイヤーの出力から来ます)、正規化レイヤー、および残差接続で構成されます。
第3の副層接続構造には、フィードフォワード完全接続副層と正規化層、および残留接続が含まれる。
デコーダ デコーダ: N=6 の同一のレイヤで構成されていますが、ここのレイヤはエンコーダとは異なります。ここのレイヤには、セルフ アテンション レイヤ、エンコーダ デコーダ アテンション レイヤ、最後に完全接続レイヤを含む 3 つのサブレイヤが含まれています。最初の 2 つのサブレイヤーは、マルチヘッド アテンション レイヤーに基づいています。ここでの特別なポイントはマスキングであり、マスキングの役割は、将来の出力単語がトレーニング中に使用されないようにすることです。たとえば、トレーニング中、最初の単語は 2 番目の単語の生成結果を参照できません。マスキングによりこの情報が 0 に変わり、位置 i を予測するための情報が i より小さい出力のみに基づくことができるようになります。
3. アテンションメカニズム アテンション
いわゆるアテンション機構は、局所的な情報、例えば画像内の特定の画像領域に焦点を当てる機構である。タスクが変化すると、注目領域も変化する傾向があります。その本質は、ネットワークによって独自に学習された一連の重み係数と、無関係な背景領域を抑制しながら関心のある領域を強調する「動的重み付け」方法です。
コンピュータ ビジョンの分野では、注意メカニズムは、強い注意と弱い注意の 2 つのカテゴリに大別できます。強い注意は動的な変化を強調する一種のランダム予測であるため、うまく機能しますが、微分不可能な性質のため、その応用は非常に限定されます。それに対して、ソフト アテンションはどこでも微分可能、つまり勾配降下法に基づくニューラル ネットワークのトレーニングを通じて取得できるため、その応用範囲は比較的広範です。ソフト アテンションはさまざまな次元 (チャネル、空間、時間、カテゴリーなど) から始まり、
現在主流の注意メカニズムは、チャネル注意、空間注意、自己注意の 3 種類に分類できます。
注意メカニズムを引き起こす方法に着目すると、それは 2 つのカテゴリーに分類できます。1 つは非自発的促進、もう 1 つは自発的促進です。このうち、非自発的プロンプトとは、対象物自体の顕著な特徴に起因する注意傾向を指し、自律的プロンプトとは、事前知識の介在により事前の重みを持った対象物に対する注意傾向を指す。つまり、不随意的手がかりは対象そのものから来るものであるのに対し、自発的手がかりは主観的な傾向から来るものであることが理解できる。
注意と自己注意のメカニズムの違いについては、このブログを参照して具体的に理解できます。
4. 自己注意
- q はクエリを表し、将来的に各 k と照合されます。
- k はキーを表し、後で各 q によって照合されます。
- v は値を表し、データから抽出された情報です。
- その後の q と k のマッチング プロセスは、この 2 つの間の相関を計算すると理解でき、相関が大きいほど v の重みが大きくなります。
- q=k=v のとき、それは自己注意メカニズムと呼ばれます
入力ソースの構成要素が一連の <Key,Value> データのペアで構成されているとすると、ターゲット内の特定の要素 Query が与えられたとき、Query と各 Key の類似度または相関関係を計算することで、それぞれの A Key は Value の重み係数に対応し、Value が重み付けされて合計されて、最終的な Attendance 値が取得されます。したがって、本質的に、アテンション メカニズムは入力内の要素の値の値に重みを付けて合計するものであり、クエリとキーは値に対応する重み係数を計算するために使用されます。
さらに、別の理解の仕方があり、クエリ、キー、値を一種のソフト アドレッシング (Soft Addressing) として理解することもできます。Value はメモリに格納されている内容、Key はメモリのアドレスとみなすことができます。Key==Queryの場合、Keyアドレスに対応するメモリ内のValue値を取り出すことをハードアドレッシングといいます。ソフトアドレッシングとは、KeyとQueryの類似度を計算してアドレス指定することで、KeyアドレスのメモリのValue値を求めるだけでなく、全メモリのValue値の加重和を求める方式です。各 Value の重み (重要度) は、Key と Query の間の類似性を通じて計算され、最終的な出力はすべての Value 値とその重みの加重合計になります。
アテンション機構の具体的な計算プロセスは、現在のメソッドのほとんどが抽象化されている場合、2 つのプロセスに要約できます。最初のプロセスはクエリとキーに従って重み係数を計算することであり、2 番目のプロセスは値に重みを付けることです。重み係数の合計に従って。最初のプロセスは 2 つのステージにさらに分割できます: 最初のステージではクエリとキーに基づいて 2 つの間の類似性または相関関係が計算され、2 番目のステージでは最初のステージの元のスコアが正規化されます。
5. マルチヘッドアテンション
モデル図によれば、元の V、K、Q が処理のために線形層に別々に入力され、より低い次元に投影され、h 回のスケーリングされたドット積アテンションを実行して h 個の出力が得られることがわかります。 、最後に出力を結合した後、線形投影を実行します。
アテンション メカニズムの複数の並列実行を通じて、独立したアテンション出力が連結され、目的の次元に線形に変換されます。直感的には、複数のアテンション ヘッドにより、シーケンスのさまざまな部分に対するアテンション操作が可能になり、モデルがさまざまな位置のさまざまな表現サブスペースからの情報に同時に注意できるようになります。
マルチヘッド アテンションは、同じクエリの複数の異なるバージョンを利用して複数のアテンション モジュールを並行して実装することで機能します。このアイデアは、さまざまな重み行列を使用してクエリを線形変換して、複数のクエリを取得することです。新しく形成された各クエリは基本的に異なるタイプの関連情報を必要とするため、アテンション モデルはコンテキスト ベクトルの計算により多くの情報を導入できます。
各ヘッドはクエリと入力行列の独自の表現を作成し、モデルがより多くの情報を学習できるようにします。たとえば、言語モデルをトレーニングする場合、ある注意ヘッドは特定の動詞 (歩く、運転する、買うなど) と名詞 (学生、車、リンゴなど) の関係に注意を払うことを学習し、別の注意ヘッドは次のことを学習します。代名詞 (例: 彼、彼女、それ) と名詞の関係は畳み込みのように学習できることに注意してください。
各ヘッドは、独自の注意スコアのベクトルと、対応する注意の重みのベクトルも作成します。
B. VIT(ビジョントランスフォーマー)モデル
深層学習の勃興以来、CV分野ではCNNが主流のモデルとして実績を上げてきたのに対し、NLP分野では自己注意構造をベースとしたTransformerが活躍します。Transformer 構造は NLP 分野の標準になっていますが、コンピューター ビジョンの分野での応用は依然として非常に限定されています。
ViT (ビジョン トランスフォーマー) は、2020 年に Google が提案したモデルで、Transformer を画像分類に直接適用するもので、この記事の実験を通じて、与えられた最良のモデルは、ImageNet1K 上で 88.55% の精度を達成できます (Google 独自の事前トレーニングで初)これは、Transformer が CV フィールドで実際に効果的であることを示しており、その効果は非常に驚くべきものです。VITはNLPとCVの統合を促進し、マルチモーダル分野の発展を促進します。
1. トランスとイメージ
ハードウェアがサポートするシーケンスの長さは一般に数百から数千であり、トランスフォーマーは 2D 画像を 1D シーケンスに変換する必要があります。たとえば、画像の入力サイズが 224x224 であり、シーケンスは 224x224 に基づいて伸長されます。次に、シーケンスの長さ 224x224=50176 では、正方形の複雑さが大きすぎます。
シーケンスの長さを短縮する方法:
1. 特徴マップを入力として純化します。たとえば、resnet の後の段階の特徴マップは比較的小さく、トランスフォーマーの入力として使用できます。
2. スタンドアロン アテンションは、自己注意を分離し、それをローカルの小さなウィンドウに分割し、入力を制御します。
3. 軸方向の注意 軸の注意、高さと幅 hw を 2 つの 1 次元行列に分割し、それぞれ自己注意を行います。
4. vit は画像を n 個のパッチに分割し、各パッチを要素として入力します (絵は文、パッチは単語に相当します)。
2. モデル分析
- 与えられた画像 (左下隅) を n 個のパッチに分割します
- パッチを要素として扱い、シーケンス内に配置します。
- 各パッチは、完全に接続されたレイヤーである平坦化パッチの線形投影レイヤーによって処理されます。
- パッチに位置コードを追加して、パッチ + 位置の埋め込み層トークンを取得します。
- 追加の学習可能な埋め込みと位置コーディングを通じて追加のクラス トークン (0*) を追加し、トークン間で情報を交換するときに必要な情報を学習します
- DropOut/DropPath 正規化処理を使用する
- 受信した Transformer Encoder モジュールの処理
- 埋め込み (0*) および MLP ヘッドによる分類 一般分類ヘッド
- MLP クロスエントロピー関数を使用したモデルのトレーニング
1. 埋め込み層
Transformer Encoder は図から、そのような画像の小さな部分を読み取ります。その理由は、それぞれの小さな画像をトークン (NLP ではトークンは 1 つまたは複数の単語として理解できます) として扱い、Transformer で各トークン間の相関を計算するためです。
これは畳み込みニューラル ネットワークとは大きく異なります。従来、CNN は畳み込み + プーリングの方法で継続的にダウンサンプリングを行っていたため、理論的には、モデルの深さを深くすることでモデルの受容野を増加させるという目的を達成できました。ただし、これには 2 つの欠点があります。
実際の結果は、エッジに対する CNN の応答が非常に弱いことを示しています。これも非常にわかりやすいのですが、ピクセルの端に近づくほど畳み込みの回数が少なくなるため、当然勾配更新時の寄与も少なくなります。
CNN は、隣接するピクセルとの相関のみを計算できます。スライディング ウィンドウの畳み込みの特性により、非フィールド ピクセルを結合して計算することは不可能です。たとえば、左上隅のピクセルを右下隅のピクセルと結合して畳み込むことはできません。これにより、一部の空間情報が利用できなくなります。同時に、MAEの論文によれば、自然画像は冗長である、つまり隣接するピクセルによって表される情報が類似しているため、ドメインピクセルを計算するだけでは画像の特徴を最大限に活用することはできない。
ViT に戻ると、画像を小さなパッチ (パッチ) に分割するだけでは十分ではなく、Transformer Encoder に必要なのは [num_token, token_dim] の形状を持つベクトルです。画像データの場合、[H,W,C]の形状が要件を満たしていないため変換する必要があり、このEmbedding層を介して画像データをトークンに変換する必要があります。
ViT-B/16 を例に挙げます。入力画像が 224x224x3 で、トークンの元の画像の形状が 16x16x3 であるとすると、画像は (224/16)^2 = 196 個のパッチ、つまり 196 個に分割できます。画像ブロック を作成し、各画像ブロックを 1 次元ベクトルに線形マッピングすると、この 1 次元ベクトルの長さは 16 16 3=768 次元になります。196 個のトークンの最終的な次元は [196, 768] です。
同時に、トークンは位置エンコーディングを追加できることに注意してください。セルフアテンション機構により、文字位置が無いと画像から切り出したパッチが乱れてしまうため、位置コードを付加すると識別精度が高くなります。このうち、位置コーディングも 1-D、2-D、Relative に分けられますが、大きな違いはありません。
さらに、入力テンソルには追加のクラス トークン (0*) も必要です。クラス トークン (0*) は、NLP であっても画像であっても、主に画像の全体的な特徴として使用されます。そのデータ形式は [1,768] です。便利です後から他のトークンの情報と直接つなぎますこれは分類情報を後で取り出して別途予測する必要があり、形状が[196, 768]から[197, 768]に変化するためです]。
2. トランスエンコーダーモジュール
Transformer Encoder は、従来の CNN と同様に、エンコーダー ブロックを複数回スタックするもので、主にいくつかの部分で構成されます。
-
レイヤー正規化:
バッチ正規化と比較して、BN はすべてのサンプルについて特定の特徴マップの平均と分散を計算し、この特徴マップのニューロンを正規化します。LN は、特定のサンプルについてサンプルのすべての特徴マップの平均と分散を計算し、サンプルを正規化します。BN は、異なるミニバッチのデータ分布に大きな違いがなく、BN は各ノードの平均と分散を保存するために変数を開く必要があり、スペース消費がわずかに大きい状況に適しており、BN はシナリオに適しています。 mini_batch を使用します。LN は正規化を実行するために 1 つのサンプルだけを必要とします。これにより、BN 内のミニバッチ データの分布の影響を受ける問題を回避でき、各ノードの平均と分散を保存するためのスペースを空ける必要がありません。 -
K、Q、V:
K=Q=V、それぞれは [197,768]、つまり KQV 次元は 197x(768/Lx) であり、後続の出力はスプライス後に 768 に復元されます。 -
マルチヘッドアテンション:
この構造は一種のセルフアテンションであり、上で詳しく説明しています。 -
DropOut/DropPath:
ViT-B/16 モデルは DropOut を使用しますが、実際に再現されたコードは DropPath を使用します。この 2 つは最終結果にほとんど影響を与えないため、ここでは詳しく説明しません。 -
MLP ブロック:
全結合層 + GELU 活性化関数 + DropOut で構成され、逆ボトルネック構造を採用し、一度全結合した後に入力特徴層を拡大し、チャネルを元のサイズの 4 倍に拡張し、後者の全結合層は元の数に復元されます。したがって、MLP ブロック後のテンソルの形状は変わりません。 -
Lx:
L 個スタックする
3.MLPヘッドモジュール
Transformer Encoder の後、出力テンソルの形状は入力テンソルの形状と同じになります。ViT-B/16 を例に取ると、入力は [197, 768] ですが、出力は依然として [197, 768] です。 。下流タスクが分類モデルの場合、分類結果を取得するには、対応するクラス トークン (0*) を抽出する必要があります。Vision Transformer によれば、MLP は全結合層 + Tanh 活性化 + 全結合層で構成されています。ただし、実際の使用では全結合層を直接分類することができるため、後で各カテゴリの確率を取得する必要がある場合は、ソフトマックス活性化関数を接続する必要があります。
C. ボトルネックトランスフォーマー (BoTNet) ネットワークハイブリッドモデル
セルフ アテンションをさまざまなコンピューター ビジョン タスクに組み込む、シンプルだが強力なバックボーンで、画像分類、ターゲット検出、インスタンス セグメンテーションなど、CNN + アテンションの組み合わせです。この方法により、インスタンスのセグメンテーションとオブジェクト検出のベースラインが大幅に改善されると同時に、パラメータが削減されてレイテンシーが最小限に抑えられます。
畳み込みとセルフ アテンションを組み合わせる理由の 1 つは、純粋な ViT タイプの構造が入力サイズに特に敏感であり、変更できないためです。ただし、ターゲットの検出、インスタンスのセグメンテーション、その他のタスクの入力は、1024 × 1024 1024 の大きな画像になる場合があります。ハード Train が純粋な Transformer である場合、計算量がマシンにとって多すぎる可能性があります。
BoTNet は、アテンション モジュールを CNN の元のバックボーンに統合し、ResNet でのみ 3 × 3 畳み込みをマルチヘッド セルフ アテンション (MHSA) に置き換え、その他の変更は行いません。resnet モデルは私の以前のブログで見ることができます
1. マルチヘッドセルフアテンションモジュール
この MHSA ブロックは革新の中核ポイントであり、高さと幅の相対位置コードはそれぞれ Rh と Rw です。ここで、q、k、v はそれぞれクエリ、キー、重みを表します。Ten と X はそれぞれ要素ごとの合計と行列の乗算を表し、1x1 は点ごとの畳み込みを表します。青色の部分は、それぞれ位置エンコード位置エンコードと値マッピング値投影を表します。
具体的な手順:
- 入力 X を渡します。X の形式は H × W × d でなければなりません。それぞれ、入力特徴行列の高さと幅、および 1 つのトークンの次元を表します。
- X をそれぞれ WQ、WK、WV とする
- 2 つの学習可能なパラメーター ベクトル Rh と Rw を初期化して、高さと幅の異なる位置の位置コードをそれぞれ表し、ブロードキャスト メカニズムを通じてそれらを加算します。つまり、2 次元 ( i , j ) 位置コードは Rhi の 2 つです。 + Rwj d 次元ベクトル加算。VIT の 1 次元位置エンコーディングとは異なります。位置コードを表す r を出力します。
- ここで、q、w、v、r という 4 つのパラメーターがあり、それらの行列形式は H × W × d であることに注意してください。qr で行列乗算を実行して content-position を取得し、qrT を出力し、qk で行列乗算を実行して content-content-content を取得し、qkT を出力します。
- qrT と qkT の行列加算を実行し、得られた行列に対してソフトマックス正規化インデックス処理を実行します。処理された出力値の行列形式は H W × H Wです。
- 最後に、出力値と重み V の間で行列乗算が実行され、出力 Z が得られます。
以前の Transformer の MHSA とは異なります。
- 処理対象が一次元ではなく、CNNモデルに近いため、それに関連した特徴が多くあります。
- ここでの正規化では、レイヤー ノルムではなく、CNN と一致するバッチ ノルムが使用されます。
- 非線形アクティベーション。BoTNet は 3 つの非線形アクティベーションを使用します。
- 左側の content-position モジュールは 2 次元の位置エンコーディングを導入しています。これが Transformer との最大の違いです。
BotNet は、ResNet の 4 番目のブロックのボトルネックを MHSA (マルチヘッド セルフ アテンション) モジュールに置き換えて、ボトルネック トランスフォーマー (BoT) という名前の新しいモジュールを形成します。ResNet-50 C5 構造の置き換えのみの最終テストでは、coco データセット上のマスク R-CNN のインスタンス セグメンテーションでマスク AP が 44.4%、ボックス AP が 49.7% を達成しました。分類タスクでは、ImageNet で 84.7% のトップ 1 精度が達成されました。また、EfficientNet よりも 2.33 倍高速です。
MHSA は非常に強力なので、C2 から C5 までのすべての 3X3 畳み込み層を MHSA に置き換えてみてはいかがでしょうか。これらをすべてMHSAに置き換えると計算量は幾何級数的、あるいは指数関数的に増加すると論文中では述べられていますが、もたらされるメリットは比例しません。したがって、最終的には C5 の構造のみが変更され、C5 のボトルネックのすべてが MHSA を使用しているわけではない可能性があります。
二、ボトルネック変圧器
ボトルネックトランスフォーマーは、マルチヘッドセルフアテンション構造の前後に 1 × 1 の畳み込みを追加することによって得られます。Bottleneck Transformer と ViT の Transformer ブロックは実際には関連しており、構造的にはそれほど異なるものではありません。著者は論文の中で、MHSA を使用した ResNet ボトルネック ブロックは、ボトルネック構造とその他の小さな違い (残差構造、正則化層など) を備えた Transformer ブロックとみなすことができると最初に述べました。
一番右は単一の C5 レイヤーで、前のレイヤーの出力を縮小します。入力としての縮小次元は 2048 から 512 (÷4) に縮小され、MHSA モジュールを通じて H×W×512 の出力が得られます。 512 から 2048 (×4) に拡大して出力します。
D. まとめ
Transformer、VIT、BoTNet の原理とモデル構造の基礎的な検討はこれで終了ですが、実際の使用については、適切な機会がなかったり、ハードウェアの制限があったりするため、一時的に実施できない可能性があります。その理由は、実験結果は当時 SOTA に達していましたが、CNN よりも多くのデータセットが必要だったためです。小規模なデータセットでのトレーニングの精度は CNN ほど良くありませんが、大規模なデータセットでは ViT の方が高い精度を持っています。私に欠けているのは、より多くのデータとより優れたトレーニング プラットフォームです。この違いを直感的に説明すると、ViT はセルフ アテンションの独自のメカニズムにより、トークンとピクセル間のトークン間でより多くの情報を使用しますが、CNN はフィールド内のピクセルのみを計算するため、同じパラメーターの場合、ViT はより多くの情報を取得します。 , これはある程度より深いモデルとみなすことができます。したがって、ViT は小規模なデータセットでは適合が不十分です。したがって、実際の開発では、数千万レベルの大きなデータ セットでトレーニングし、トレーニング前の重みを取得し、その後、小さなデータ セットで移行を実行します。論文では vit が比較的安価であると述べていますが、高価であることを示しています。これは、そのようなことを意味しますが、これはすべて大規模なデータセットに関連したものであり、小規模および中規模のデータセットのレベルでは、CNN は依然として非常に使いやすいです。