InceptionV3(GoogLeNet)アーキテクチャを見ていて、なぜconv1x1レイヤーが必要なのか理解できません。
たたみ込みの仕組みは知っていますが、パッチサイズ> 1で利益が得られます。
1x1xD
たたみ込みは、ネットワークのどこかに配置された場合の次元削減手法と考えることができます。
100x100x512
の入力ボリュームがあり、D
のセットで畳み込み、サイズが1x1x512
のフィルターを1つ1つフィルター処理する場合、機能の数を512からDに減らします。したがって、出力ボリュームは100x100xD
です。
ご覧のとおり、この(1x1x512)xD
たたみ込みは、完全に接続されたレイヤーと数学的に同等です。主な違いは、FCレイヤーは入力のサイズが固定されている必要があるのに対し、畳み込みレイヤーは空間範囲が100x100
以上のすべてのボリュームを入力で受け入れることができることです。
1x1xD
たたみ込みは、この同等性のため、完全に接続されたレイヤーを置き換えることができます。
さらに、1x1xD
畳み込みは、次のレイヤーへの入力の機能を削減するだけでなく、モデルの精度を高めるのに役立つ新しいパラメーターと新しい非線形性をネットワークに導入します。
1x1xD
たたみ込みが分類ネットワークの最後に配置されると、FCレイヤーとして正確に機能しますが、次元削減手法として考えるのではなく、形状を持つテンソルを出力するレイヤーとして考える方が直感的です。 WxHxnum_classes
。
出力テンソルの空間範囲(W
およびH
で識別される)は動的であり、ネットワークが分析した入力画像の場所によって決定されます。
ネットワークが200x200x3
の入力で定義されていて、入力にこのサイズの画像を与えると、出力はW = H = 1
およびdepth = num_classes
のマップになります。ただし、入力画像の空間範囲が200x200
よりも大きい場合、畳み込みネットワークは入力画像のさまざまな場所を分析し(標準の畳み込みと同じように)、W > 1
とH > 1
を使用してテンソルを生成します。これは、固定サイズの入力を受け入れて固定サイズの出力を生成するようにネットワークを制約するFCレイヤーでは不可能です。
1x1のたたみ込みは、入力ピクセルを出力ピクセルにマッピングするだけで、周囲の何も見ません。深度が非常に大きいボリュームを乗算するのは非常に遅いため、深度チャネルの数を減らすためによく使用されます。
input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)
input (256 depth) -> 4x4 convolution (256 depth)
一番下のものは約3.7倍遅いです。
理論的には、ニューラルネットワークは、ブルートフォースですべてを乗算する代わりに、これを使用してどの入力「色」を調べるかを「選択」できます。