宮塩のお勉強部屋

某大学でARまわりの研究をしている学生です。

【Coursera】Deep Learning Specialization - Course 4: Week1 Convolutional Neural Networks

CourseraのDeep Learning Specialization(5つのコースから構成される)についてのメモ書きです。

Andrew先生のMachin Learningコースは調べるとたくさん資料が出てきますが、 Deep Learningコースは最近開講されたためかあまり出てこないですね。

くじら公園さんがCourse3まで要点をまとめてくれていて参考になったので 私もCourse4とCourse5について同じようにして記事にまとめようと思います。

くじら公園さんの記事はこちらです

p-baleine.hatenablog.com

Week1: Convolutional Neural Networks

Computer Vision

  • 画像分類、物体検出、スタイルトランスファーなどの画像を入力とする問題を考える.
  • これまでは全てのピクセルを特徴として入力していましたが、画像サイズが例えば1000[pix]×1000[pix]の場合はパラメータの数が100万オーダとなってしまい、Overfittingやメモリ・計算コストの問題が発生する.

Edge Detection Example

  • Computer Visionの問題では、浅い方のレイヤーでは画像内のedgeの情報が格納されている.
  • フィルターとのConvolution積(*で表す)を行うことでedgeを検出することが出来る.例えば3×3のフィルターの重みを
 
\begin{bmatrix}
1 & 0 & -1 \\\
1 & 0 & -1 \\\
1 & 0 & -1
\end{bmatrix}

とすれば垂直方向のEdgeを検出できる.

More Edge Detection

  • Convolution積による値が正の場合でも負の場合でも絶対値を取ることで等価に扱える.
  • フィルターのパラメータを変更することで、垂直方向だけでなく任意の方向に対してEdgeを検出することが出来る.
  • 誤差逆伝播によってフィルターの重みパラメータを決定する.

Padding

  • Convolutionを行うと、画像のサイズが小さくなり、画像の端があまり考慮されない(フィルターで呼び出される回数が少ない)という問題がある.これを解決するために、画像の周りにピクセルを追加することをPaddingと呼ぶ.
  • 画像のサイズを n×n、フィルターのサイズを f×f、Paddingのサイズを pとすると、出力画像のサイズは (n+2p-f+1)×(n+2p-f+1)とかける.
  • Valid ConvolutionsとSame Convolutionsの2種類のPaddingがある."Valid"の場合はPaddingは行わず画像のサイズが小さくなり、"Same"の場合は入力画像と出力画像のサイズが一致するように(つまり 2p-f+1=0となるように)Paddingを行う方法である.

Strided Convollutions

  • Convolutionの適用間隔のことをStridedと呼ぶ
  • Stridedの大きさを sとすると、出力画像のサイズは (\frac{n+2p-f}{s}+1 × \frac{n+2p-f}{s}+1)とかける(整数でない場合は切り捨てをする).
  • これまで議論してきた操作は数学的には厳密にはCross-correlationと呼ぶらしいが、慣例でConvolutionと呼ぶことに注意する.

Convolutions Over Volume

  • 画像およびフィルターについて奥行方向を考慮して3Dに拡張する.
  • 画像サイズを n×n×n_cとし、フィルターのサイズを f×f×n_cとすると出力画像のサイズは (n-f+1)×(n-f+1)×n_C^{'}となる.
  •  n_cはチャンネル数を表しており、入力画像とフィルターのチャンネル数は一致する必要がある.また、複数の方向についてedgeを抽出したい場合に適用したいフィルターの数を n_c^{'}で表す.

One Layer of a Convolutional Network

  • フィルターで畳み込みをした後は、バイアス項を足して活性化関数に入力するといった流れになる.
  • 表記方法については何通りかあるが、このコースでは以下で統一する( lを層のindexとする).
  •  f^{l}: Filter size,  p^{l}: Padding,  s^{l}: Stride,  f_C^{l}: Number of filters
  • フィルターのサイズは f^{l}×f^{l}×n_C^{l-1}
  • 活性化関数のサイズは a^{l}: n_H^{l}×n_W^{l}×n_C^{l}
  • Vectorizationする場合は、例えば活性化関数では A^{l}: m×n_H^{l}×n_W^{l}×n_C^{l}となる.

Simple Convolutional Network Example

  • 一般的に、層の数が深くなるほど画像サイズは小さくなり、チャンネル数が大きくなる傾向がある.
  • レイヤーの種類はConvolution(CONV)Pooling(POOL)Fully Connected(FC)の3つある.

Pooling Layers

  • Max Poolingという操作では、各領域の最大値をとって圧縮を行う.
  • 直感的な説明としては、値の大きい場所は大事な特徴であるため、その値を残しつつダウンサンプリングするイメージ.チャンネル数は変化しない.
  • ハイパーパラメータ( f: Filter size,  s: StrideはCONVと同様に出力サイズを計算できる)は学習する必要がない.
  • Average Poolingは各領域の平均をとる方法だが、Max Poolingに比べてあまり使われない.
  • Max Poolingを行う際はPaddingは使わない.

CNN Example

  • このコースでは、CONV layerとPOOL layerをまとめて1つのレイヤーとして数える(別々のレイヤーとして数える記法もある.)
  • FCはCourse1,2で議論してきた一般的なAffineレイヤーであり、最終的な判定を行う層である.
  • POOL層のパラメータの数は0であり、CONV層のパラメータの数は比較的少ない(多いのはFC層である.)

Why convolutions?

  • Convolutionを行うことのメリット(つまり、なぜパラメータの数が少なく済むのか)は以下の2つが挙げられる.
    • Parameter sharing: A feature detector(such as a vertical edge detector) that's useful in one part of the image is probably useful in another part of the image.
    • Sparsity of connections: In each layer, each output value depends only on a small number of inputs.
  • Transition invariance等の性質によりComputer Visionの問題でうまく機能する.
  • ロス関数や最適化についてはこれまでと同様.