「CapsNet」カプセルネットワーク

まず、畳み込みネットワークの欠点

畳み込みニューラルネットワークはうまく機能しますが、回転や要素変換などの変換された画像の特徴を正確に抽出することはできません。

たとえば、下の図の文字Rを回転してフレームに入れると、CNNは下の図の3つのRが異なる文字であると誤って認識します。
ここに画像の説明を挿入
下の図に示すように、2つの写真があり、どちらも楕円形の輪郭、目、鼻、口で構成されています。CNNは、2つの写真でこれらの特徴を簡単に検出し、顔を検出すると考えることができます。しかし、明らかに右の写真の目と口の位置は変わっていますが、CNNはそれを通常の顔として認識しており、子要素間の位置関係を処理していません。
ここに画像の説明を挿入
これがポーズの概念につながります。ポーズは、オブジェクト間の相対的な関係を組み合わせたもので、4次元のポーズマトリックスとして数値で表されます。三次元オブジェクトのポーズの関係を表現することができ、オブジェクトの性質は並進回転のポーズです

CNNと比較すると、カプセルネットワークのもう1つの大きな利点は、データのごく一部を学習するだけで、最も高度な結果を達成できることです。この意味で、カプセル理論は実際には人間の脳の行動に近いものです。数を区別することを学ぶために、人間の脳は数十のデータ、最大数百のデータしか必要としませんが、CNNは良い結果を達成するために数万のデータを必要とします。

さらに、CNNは結果を表す単一のスカラーを出力しますが、カプセルは結果としてベクトルを出力できます。CNNは、畳み込み層を使用して特徴行列を取得します。ニューロンの活動における遠近法の不変性を実現するために、これは最大プーリング法によって実現されます。ただし、最大プーリングを使用することの致命的な欠点は、貴重な情報が失われ、フィーチャ間の相対的な空間関係が処理されないことです。しかし、カプセルネットワークでは、特徴的な状態の重要な情報がベクトルの形でカプセルによってカプセル化されます。

2、カプセルの定義

カプセルは複数のニューロンを持つキャリアです。各カプセルは、限られた観測条件と変形範囲内の視覚エンティティを認識し、インスタンス化パラメータのセットとその有意性値(つまり、エンティティの存在の確率)を出力します。このパラメータには、エンティティの正確な位置、色情報、および形状情報。その中で、視覚エンティティの存在の顕著度は局所的な非変形を持ち(エンティティタイプの認識確率は変化しません)、インスタンス化パラメータは同変です(インスタンス化パラメータもそれに応じて変化します)。

三、カプセルの動作原理

ここに画像の説明を挿入
ここに画像の説明を挿入
CNN:人工ニューロンは次の3つのステップで表すことができます。

ステップ1:入力スカラーのスカラー重み付け:wixi + b w_ {i} x_ {i} + bwバツ+b
ステップ2:加重入力スカラー合計:aj a_ {j}AJ= ∑ iwixi + b \ sum_ {i} w_ {i} x_ {i} + bwバツ+b
ステップ3:スカラーからスカラーへの非線形変換:hj h_ {j}hJ= f(aj)f \(a_ {j})f a J

CapsNet:カプセルには、上記の3つのステップのベクターバージョンと、入力アフィン変換の新しいステップがあります。

ステップ1:入力ベクトルの行列乗算
ステップ2:入力ベクトルのスカラー加重
ステップ3:加重された入力ベクトルの合計
ステップ4:ベクトルからベクトルへの非線形変換

活性化関数:

ここに画像の説明を挿入

3.1入力ベクトルの行列乗算

カプセルが受け取った入力ベクトル(上図のU 1 U_1U1U 2 U_2U2 U 3 U_3 U3)下層から3カプセル。これらのベクトルの長さはそれぞれ、下層カプセルによって検出された対応する特徴の確率をエンコードします。

3.2入力ベクトルのスカラー重み付け

ここに画像の説明を挿入

  • 上の図に示すように、左と右の四角い領域はそれぞれ2つの高レベルカプセルJとKであり、四角い領域の点は低レベルカプセル入力の分布です。低レベルのカプセルは、重みCを調整することにより、出力を送信する高レベルのカプセルを「決定」します。調整方法は、カプセルが出力を送信する前に、出力にこの重みを掛けてから、結果によりよく一致する上位レベルのカプセルに送信することです。
  • 低レベルのカプセルは、重み付けによってベクトルを高レベルのカプセルに入力し、高レベルのカプセルは、低レベルのカプセルからベクトルを受け取ります。すべての入力は、赤と青の点で表されます。これらのポイントが集まる場合、それは低レベルのカプセルの予測が互いに近いことを意味します。

重みに関する注意:

  1. 重みはすべて非負のスカラーです。
  2. 各下位レベルのカプセルiについて、すべての重みの合計は1に等しくなります(softmax関数によって重み付けされます)。
  3. 各低レベルカプセルiについて、重みの数は高レベルカプセルの数と同じです。
  4. これらの重みの値は、反復動的ルーティングアルゴリズムによって決定されます。

下部カプセルごとにiiiに関して、その重みは各高レベルカプセルに渡されるjjを定義しますjの出力の確率分布。

3.加重入力ベクトルの合計

このステップは、入力の組み合わせを表します。これは、スカラーではなくベクトルの合計であることを除いて、通常の人工ニューラルネットワークに似ています。

4.ベクトルからベクトルへの非線形変換

CapsNetのもう1つの大きな革新は、新しい非線形活性化関数です。この関数は、ベクトルを受け入れ、方向を変えずにその長さを1未満に圧縮します。

カプセル間の3つの動的ルーティング

下位レベルのカプセルは、これに「同意する」上位レベルのカプセルに出力を送信します。これが動的ルーティングアルゴリズムの本質です。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

  • 擬似コードの最初の行は、アルゴリズムの入力を指定します。行列の乗算によって取得された低レベルの入力ベクトルû、およびルーティングの反復回数rです。最後の行は、アルゴリズムの出力高レベルカプセルのベクトルV j V_ {j}を指定します。VJ
  • 2行目のBijb_ {ij}bI Jこれは、低レベルのベクトルの重みを高レベルのカプセルに格納する一時変数です。その値は、反復中に1つずつ更新されます。反復の最初のラウンドが開始されると、その値はcij c_ {に変換されます。ij} by softma xcI Jカプセル間の動的ルーティングアルゴリズムの開始時に、bij b_ {ij}bI Jの値はゼロに初期化されます(ただし、softmaxの後、同じ重みでゼロ以外のcij c_ {ij}に変換されます。cI J)。
  • 3行目は、4〜7行目のステップがr回繰り返されることを示しています(ルーティングの反復回数)。
  • 4行目は、すべての高レベルカプセルに対応する低レベルカプセルベクトルの重みを計算します。bi b_ {i}bの値は、softmaxの後にゼロ以外の重みcic_iに変換されますcそして、その要素の合計は1に等しい。それが最初の反復である場合、すべての係数cij c_ {ij}cI J等しくなります。たとえば、8つの低レベルカプセルと10の高レベルカプセルがある場合、すべてのcij c_ {ij}cI J重みはすべて0.1に等しくなります。この初期化により、不確実性が最大化されます。低レベルのカプセルは、出力がどの高レベルのカプセルに最も適しているかを認識しません。もちろん、このプロセスが繰り返されると、これらの一様分布は変化します。
  • 5行目では、高レベルのカプセルが含まれます。このステップでは、前のステップで決定されたルーティング係数によって重み付けされた入力ベクトルの合計を計算して、出力ベクトルsjs_jを取得します。sJ
  • 7行目は、ルーティングアルゴリズムの本質である重みを更新します。各高レベルカプセルのベクトルvjv_jを取りますvJ元の入力ベクトルû要素に要素を掛けて内部積(内積とも呼ばれ、カプセルの入力と出力の類似性を検出します(下の図は概略図))を乗算してから、元のを更新します。内積の結果bib_iの重みbこれにより、低レベルのカプセルがその出力を同様の出力を持つ高レベルのカプセルに送信するという効果が得られます。これは、ベクトル間の類似性を特徴付けるものです。このステップの後、アルゴリズムはステップ3にジャンプしてこのプロセスを再開し、r回繰り返します。

第四に、損失関数

  • 9つのゼロと1つの1(正しいラベル)で構成される10次元のワンホットエンコーディングベクトルをラベルとして使用します。損失関数の式では、正しいラベルに対応する出力カプセル、係数T c T_cTC 1です。

ここに画像の説明を挿入

  • 正しいラベルが9の場合、それは9番目のカプセル出力の損失関数T cT_cを意味します。TCは1で、残りの9は0です。T cT_cの場合TC 1の場合、式の損失関数の右項係数はゼロです。つまり、正しい出力項損失関数の値には左項の計算のみが含まれます。対応する左係数は0であり、右項係数は0です。は1であり、エラー出力項の損失関数の値には、正しい項の計算のみが含まれます。

ファイブ、エンコーダー

ここに画像の説明を挿入

  1. 入力画像28x28は、最初に1x256x9x9畳み込み層を通過して、256個の20x20特徴マップを取得します。
  2. 256x32x9x9(stride = 2)畳み込みの8グループを使用して、32x6x6特徴マップの8グループを取得します。
  3. 得られた特徴マップは10個のカプセルにベクトル化され、これらの10個のカプセルの出力ベクトルの長さは各カテゴリの確率です。

特徴マップをベクトルに変換する実際のプロセスは、2次元行列の各グループを1次元行列に展開することです(もちろん、複数の2次元行列がある場合、それらは展開後に前後にスプライスされます);次に、1次元行列のすべてのグループが新しい次元でスプライスされてVectorが形成されます(下の図は概略図です)。次のアイデアによれば、8つの畳み込みは1つの畳み込みに削減されます。基本的に、splitメソッドとconcatメソッドを使用して、ループから直接ベクトル化し、トレーニング効率を高速化します。

ここに画像の説明を挿入

6、デコーダー

ここに画像の説明を挿入

デコーダーは正しいカプセルから16次元のベクトルを受け取り、入力は3つの完全に接続されたレイヤーを通過して784ピクセルの出力を取得し、28×28ピクセルの画像を再構成することを学習します。損失関数は再構成された画像とのユークリッドです。入力画像の距離。

おすすめ

転載: blog.csdn.net/libo1004/article/details/111033576