DeepLearning勉強会 - 講義ノート4

Convolutional Neural Networks(畳み込みニューラルネットワーク)の続きです。前半はこちら

Convolutional Networks

主な概念

  • ストライド (stride): フィルタを順に適用していく際に、何ピクセルずらすのかという値です。

    • stride = 1: 出力が入力の大体同じサイズになります。
    • stride = 2: 出力が入力の大体半分のサイズになります。 image
  • 大体といった理由は画像の端に何をするかによって変わるためです。

    • valid padding: 普通に画像の端からフィルタを適用していきます。こうすると、例えばstride = 1でも出力が入力より少し小さくなります。
    • same padding: 例えばstride = 1の場合、出力がちょうど入力と同じサイズになるために、元の画像の周りに0を詰め込んでいきます。

畳みこみ (Convolution) についての補足

離散畳み込み1 の計算は以下のイメージです。

Screen Shot 2016-06-20 at 01.42.57.png

例:

image_sample

filter_sample

の畳み込み(stride=1, valid padding)を計算します。

まずは赤の部分:

$$ (3\times0 + 3\times1 + 2\times2 + 0\times2) + (0\times2 + 1\times0 + 0\times1) + (3\times0+1\times1+2\times2) = 12 $$

同様に全部適用すると、以下の結果が得られます:

conv_result

Pooling

  • 畳み込み層でstride=1を使って、たくさんフィルタを使うとパラメータ数がどんどん多くなります。過学習と計算速度と考えるとパラメータ数を減らすことが必要です。
  • もしstride=2を使うと、たくさんの情報がなくなってしまいます。そのため、stride=1にして、得られた結果を近所の要素をなんとか結合するとより良い結果がでます。この工夫はプーリングです。
  • 一番使われるのはマックスプーリング (max pooling) です。

image

  • よく使われるパータンは: 畳み込み → ReLU → プーリング
  • プーリングはtranslation invarianceの少し効果があります。

その他のGoogleテクニック

というのはGoogLeNetで使うテクニックです。Googleだけ主唱で、どうやら良いらしいです。

1x1 Convolutions

image

実際には1x1 convolutionsを使うことがあります。これはパラメータを増やすため一番簡単で計算楽な方法です(畳み込みではなくただの行列掛け算です)。

Inception Module

image

1つの層でたくさんの畳み込み、プーリングなどを組み合わせて、結果をでかいベクトルに順序に並ぶことです。

  1. 機械学習分野ではこれを畳み込みと言いますが、数学の厳密って言えば畳込みではなく、相互相関 (cross-correlation) です。