畳み込みニューラルネットワーク
畳み込みニューラルネットワーク(CNN)は、小さな重みの格子を画像上で動かし、各領域のパターンへの応答を計算します。この格子がフィルタです。同じ重みを各位置で共有するため、少ないパラメータで同じ特徴を別の場所でも検出できます。
フィルタは型紙のようなものです。窓ごとに「この領域はこの形に合うか」を調べ、位置ごとに別の型紙を作る必要はありません。
畳み込み、ReLU、プーリング
画像の 3×3 領域とフィルタを要素ごとに掛け、9 項を足すと、特徴マップの 1 セルになります。右へ 1 セル移り、行末で次の行へ進みます。本課は画像からはみ出さない valid 方式なので、6×6 入力は 4×4 の特徴マップになります。16 位置で 9 個の重みを共有します。深層学習では、フィルタを反転しないこの相互相関も通常「畳み込み」と呼びます。
応答は負にもなります。明から暗への変化を検出するフィルタは、逆の境界に負の値を返します。ReLU は max(0, x) で負値をゼロにし、選んだ極性の一致を残すとともに非線形性を加えます。
最大プーリングは 2×2 の窓をストライド 2 で動かし、最大値を残して 4×4 を 2×2 にします。領域内の強い応答を保ち、正確な位置を捨てるため、局所的な位置ずれへの許容度が生まれます。任意の平行移動への不変性を保証するものではありません。
本課は手で選んだフィルタ一つと「畳み込み → ReLU → プーリング」1 回だけです。実際の CNN は複数のフィルタを学習して層を重ね、初期層のエッジを後段で形へ組み合わせます。活性化やダウンサンプリングが異なる構成もあります。
ステップ実行
既定の垂直エッジフィルタは、3 行とも [1, 0, −1] で「左の明るさ − 右の明るさ」を測ります。6×6 画像の行 1–4、列 2–3 に値 9 の縦棒があり、他はゼロです。添字は 0 始まりです。
- 位置
(0, 0):領域は[[0, 0, 0], [0, 0, 9], [0, 0, 9]]。左列は+1を掛けてもゼロ、中央は重みゼロ、右列は−1を掛けて−9が二つ。合計 −18 は、型紙と反対の暗から明への境界です。 - 残り 15 位置:各行は
[−18, −18, 18, 18]、[−27, −27, 27, 27]、[−27, −27, 27, 27]、[−18, −18, 18, 18]です。負値は棒の左端、正値は右端に対応し、3 行とも棒に掛かると大きさは 27 です。 - ReLU:各行は
[0, 0, 18, 18]、[0, 0, 27, 27]、[0, 0, 27, 27]、[0, 0, 18, 18]になります。同じコントラスト方向の境界だけが残ります。 - プーリング:左の二つの窓は最大 0、右は最大 27。出力
[[0, 27], [0, 27]]は右側の強い垂直エッジ応答を表します。
琥珀色の窓が走査し、作業台に現在の領域、9 個の積、総和を表示します。計算済みセルは正が濃色、負が青です。ReLU で青いセルが空になり、プーリングの完了時は結果の枠が緑になります。
パラメータと計算量
単一チャネルの 3×3 フィルタは、6×6 でも 4K 画像でも 9 個の重みです。全結合層は 28×28 画像に対し 1 ニューロン当たり 784 個の入力重みを使い、位置間の検出器共有を強制しません。畳み込みは同じ規則を各位置へ適用します。
本課の計算量は O(out_h · out_w · k²) で、出力セルごとに k×k の内積を計算します。核サイズ固定なら画像面積に比例します。複数の入出力チャネルではチャネル数も掛かります。
対照の「Random filter」は同じ手順でもエッジ構造のない重みを使い、分散した応答と、最初の押下で [[9, 9], [18, 9]] を出します(押すたびに別の固定された未学習フィルタへ切り替わります)。垂直フィルタの [[0, 27], [0, 27]] のように右端を特定できません。検出器の働きは重みの値から生まれ、実際の学習では勾配降下がその値を調整します。
入力パネルの 9 セルはクリックで −1、0、1 を循環し、変更するたび全工程を再計算します。
- すべて 1:局所的な明るさの合計になり、出力は
[[54, 54], [54, 54]]。明るさの情報は残りますが、このプーリング結果ではエッジを位置づけられません。 - 水平エッジ核の中央列をゼロ:
[[0, 0], [27, 27]]が[[0, 0], [18, 18]]になります。位置は保ち、ピークは 3 分の 1 弱まり(27 → 18)、外側の応答は半分になります(18 → 9)。 - 横棒の上端だけを点灯する核:先に
2×2出力を予測し、符号と位置を実行結果と比べます。
境界ケース
- valid とパディング:本課は
6×6 → 4×4。核 3、ストライド 1 なら各辺にゼロを 1 列足すと同じ空間サイズになります。任意のパディングがサイズを保つわけではありません。 - 平坦な領域:重みの総和がゼロの本課のエッジ核では、一定の明るさの左右差はゼロです。既定の角の
±18は窓がまだ棒の境界をまたぐためです。 - 反対の極性:暗から明は負の応答になり、ReLU が捨てます。負値も符号付き境界の有効な情報で、逆極性のフィルタなら利用できます。
- 割り切れないサイズ:
4×4は窓2×2、ストライド 2 で敷き詰められます。奇数サイズの余りは設定に応じて捨てるか埋めます。
よくある間違い
- 位置ごとに別のフィルタを想像する。重み共有をなくすと局所結合層になり、各ユニットが全入力を見る場合に全結合層となります。
- 線形な畳み込みを重ねるだけで非線形な表現力が増すと思う。線形層の合成は線形写像です。ただし境界やパラメータ構造は異なりえます。本課では ReLU と最大プーリングが非線形性を与えます。
- 窓サイズとストライドを混同する。前者は読む範囲、後者は移動距離で、等しい場合がここでの重ならない配置です。
- 特徴マップを縮小画像と読む。値は型紙への応答で、元の画素の明るさではありません。
- 最大プーリングだけだと考える。平均プーリングやストライド付き畳み込みもあり、構造と目的で選びます。