大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

畳み込みニューラルネットワーク

畳み込みニューラルネットワーク(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 始まりです。

  1. 位置 (0, 0):領域は [[0, 0, 0], [0, 0, 9], [0, 0, 9]]。左列は +1 を掛けてもゼロ、中央は重みゼロ、右列は −1 を掛けて −9 が二つ。合計 −18 は、型紙と反対の暗から明への境界です。
  2. 残り 15 位置:各行は [−18, −18, 18, 18]、[−27, −27, 27, 27]、[−27, −27, 27, 27]、[−18, −18, 18, 18] です。負値は棒の左端、正値は右端に対応し、3 行とも棒に掛かると大きさは 27 です。
  3. ReLU:各行は [0, 0, 18, 18]、[0, 0, 27, 27]、[0, 0, 27, 27]、[0, 0, 18, 18] になります。同じコントラスト方向の境界だけが残ります。
  4. プーリング:左の二つの窓は最大 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 と最大プーリングが非線形性を与えます。
  • 窓サイズとストライドを混同する。前者は読む範囲、後者は移動距離で、等しい場合がここでの重ならない配置です。
  • 特徴マップを縮小画像と読む。値は型紙への応答で、元の画素の明るさではありません。
  • 最大プーリングだけだと考える。平均プーリングやストライド付き畳み込みもあり、構造と目的で選びます。