【E資格対策】畳み込みニューラルネットワーク

神経科学からの着想

  • 受容野 : ある刺激が特定の新規細胞や受容器によって感知される領域. CNNにおいては, 出力の1画素が集約している入力の領域を指す.
  • 単純型細胞 : 入力パターンの変化に敏感で, 画像の特徴抽出を行う. CNNの畳み込み処理は, 単純型細胞の働きから着想を得ている.
  • 複雑型細胞 : 入力パターンの変化に鈍感で, 単純型細胞で抽出された特徴の位置感度を低下させることで, 受容野内の物体の位置がわずかに移動しても同じ物体と認識できるようにする. CNNにおけるプーリング層は, 複雑型細胞の働きから着想を得ている.

畳み込み演算の構成要素

  • フィルタ(カーネル) : 入力画像に対する小さな行列であり, CNNにおいて学習によって最適化される重み. エッジ検出や特徴抽出などの処理に利用される. フィルタのサイズはハイパーパラメータである.
  • 特徴マップ : 入力にフィルタの重みを掛け合わせる畳み込み演算によって得られる. 出力値活性マップとも呼ぶ. 入力データの特徴を抽出した新しいデータとして表現される.
  • パディング : 畳み込み層を深くする際の情報損失を防ぐために, 入力画像の周囲に値を追加し, 画像サイズを維持する手法.
  • ストライド : フィルタを適用する際, どの程度の間隔でスライドさせるかを決めるハイパーパラメータ. ストライドを大きくすると計算量を削減できるが, 特徴マップの解像度が下がるため, 情報を損失する可能性がある.
  • チャネル : CNNにおける画像データ(特徴マップ)の深さを表す. チャネル数が多いほど, より高度なパターンや概念の学習が可能となる.

im2col

畳み込み演算を愚直に実装しようとすると, Numpy配列に対してforループを多用することになり, 処理が遅くなってしまう. そこで, im2colという関数を用いることで, 入力データを2次元配列に変換し, 行列演算を用いて高速に畳み込み演算を実行できるようにする.

畳み込みの出力サイズの計算

入力画像のサイズを (H,W)(H, W), フィルタのサイズを (FH,FW)(FH, FW), パディングを PP, ストライドを SS とすると, 畳み込み演算後の出力サイズ (OH,OW)(OH, OW) は以下のように計算される.

OH=H+2PFHS+1,OW=W+2PFWS+1OH = \left\lfloor \dfrac{H + 2P - FH}{S} \right\rfloor + 1, \quad OW = \left\lfloor \dfrac{W + 2P - FW}{S} \right\rfloor + 1

特別な畳み込み

point-wise畳み込み(1x1畳み込み)

1x1のフィルタで畳み込み, チャネル方向のみ畳み込みを行う手法.

depth-wise畳み込み

フィルタを1チャネルのみとし, チャネル方向への畳み込みを行わない手法. 出力のチャネル数は入力のチャネル数と同じになる.

グループ化(Group-wise)畳み込み

入力チャネルをいくつかのグループに分割し, 各グループ内で独立に畳み込みを行う手法.

分割するグループを GG とすると, 計算量が GG 倍削減される.

アップサンプリングと逆畳み込み

アップサンプリングは画像の解像度を上げる操作であり, そのための演算が**逆畳み込み(転置畳み込み)**である.

通常の畳み込みでは入力とフィルタの積和が出力となるが, 逆畳み込みでは積の結果がそのまま出力となる.

プーリング

プーリング層では, 入力データを扱いやすい形に変形するために, 最大値や平均値を用いて情報を圧縮し, ダウンサンプリングを行う.

以下のような特徴を持つ.

  • 学習するパラメータを持たない.
  • 演算の前後でチャネル数が変化しない.
  • 微小な位置変化に対してロバストである.

Lp pooling / Max pooling / Average pooling

入力サイズが H×W×CH \times W \times C の画像で, 画素 (i,j)(i, j) を中心とする Wf×HfW_f \times H_f の領域を取り, この中の画素の集合を Pi,jP_{i,j} とする. チャネル数を cc, プーリング層の出力の画素値を ui,j,cu_{i,j,c} とすると, Lp pooling は以下のように定義される.

ui,j,c=(1WfHf(p,q)Pi,jzp,q,cP)1Pu_{i,j,c} = \left( \dfrac{1}{W_f H_f} \sum_{(p, q) \in P_{i, j}} z_{p, q, c}^P \right)^{\frac{1}{P}}
  • P=1P = 1 のとき, ui,j,c=1WfHf(p,q)Pi,jzp,q,cu_{i,j,c} = \dfrac{1}{W_f H_f} \sum_{(p, q) \in P_{i, j}} z_{p, q, c} となり, Average pooling となる.
  • PP \to \infty のとき, ui,j,c=max(p,q)Pi,jzp,q,cu_{i,j,c} = \underset{(p, q) \in P_{i, j}}{\max} z_{p, q, c} となり, Max pooling となる.

Global Average Pooling(GAP)

各チャネルの画素平均を1つにまとめる手法.

GAPの重みパラメータはチャネル数と等しくなるため, 計算コストを抑えることができる.

参考文献