Day 2 - Section 4 畳み込みニューラルネットワークの概念 のまとめ


この記事は個人的なお勉強用のメモです。

このお勉強の位置

深層学習 Day 2

Section 1 勾配消失問題
Section 2 学習率最適化手法
Section 3 過学習
Section 4 畳み込みニューラルネットワークの概念 ← これ
Section 5 最新のCNN

講義

CNN

畳み込みニューラルネットワーク
CNN(Convolutional Neural Network)

  • 入力層(入力画像)
  • 畳み込み層 * N
  • プーリング層 * M
  • 全結合層
  • 出力層(出力画像)

主に画像データで使われる。
音声データでも使われる場合がある。

畳み込み層

  1. 入力値をフィルター(全結合でいう重み)に通す。
    それぞれの要素とフィルターを掛けてすべて足す。
  2. 出力された値にバイアスを加える。
    それぞれの要素にバイアスの値を加える。
  3. 活性化関数を実行する。

→ 出力値が出力される。

縦、横、チャンネルの3次元データをそのまま学習し、
次に伝えられる。(=3次元の空間情報の学習が可能)

パディング

一般的にはゼロパティングが使われる。
入力画像の周りをゼロで埋める。

パディングの目的:
出力サイズを調整するため。
(パディング無しの場合、出力サイズがどんどん小さくなってしまう)

ストライド

フィルターをいくつずらすか、という数値。
ストライドを大きくすると、出力サイズが小さくなる(画像が小さくなる)。

チャンネル

奥行きを処理するもの。
入力データのチャンネル数=フィルターのチャンネル数

チャンネルの例:
RGBの計3チャンネル

im2col

4次元の画像データを2次元の行列に変換する関数。

4次元とは
1:画像データの個数(1つのバッチ内での画像データの個数)
2:チャンネル数(例:3(=RGB))
3:縦のサイズ
4:横のサイズ

画像データの個数を次元に加えることで、複数の画像データを
まとめて変換できることがメリット。

プーリング層

  • Maxプーリング
    対象領域の最大値
  • Averageプーリング
    対象領域の平均値

実装演習

im2colの動作確認

col.transposeありで実行

col.transposeするとデータの入れ替えが発生する。
入力データ内のフィルターサイズに相当する(3,3)のデータを1行に変換している。
フィルターで処理しやすくするためか。

col.transposeをコメントアウトして実行

こちらはデータの1行に、入力データ内で重複したデータが出力されている。
これではおそらくフィルターの処理が効かない。

col2imの使用例

変数の存在をすっかり忘れていた。
模範解答はこちら。(ただし、実行結果は同じ)

CNNの実行

このCNNでは画像データを扱っているが、これまで勉強してきたNNと同様に、
学習できていることがわかる。

CNNのポイントはim2col関数。
forward関数からim2col関数を呼び出している。

※学習データの正解率が1に近いので一見過学習かと思われるが
 学習データの精度とテストデータの精度に開きがないので、これは過学習ではない。
※ 実行が遅い場合はGPUを使うという方法がある。

確認テスト

出力サイズの計算

入力サイズ:6×6
フィルターサイズ:2×2
ストライド:1
パディング:1

\begin{align}
出力サイズ幅&=\frac{入力サイズ幅+パディング\times 2-フィルターサイズ幅}{ストライド}+1
\\
&=\frac{6+1\times 2 -2}{1}+1\\
&=7\\
出力サイズ高さ&=\frac{入力サイズ高さ+パディング\times 2-フィルターサイズ高さ}{ストライド}+1
\\
&=\frac{6+1\times 2 -2}{1}+1\\
&=7\\
\end{align}

修了テスト~練習問題~

問題64(畳み込み演算)

元のサイズ:224×224
チャンネル数:3
パディング:0
ストライド幅:1
フィルターサイズ:11×11

\begin{align}
出力サイズ高さ&=\frac{元のサイズ高さ+パティング\times 2 - フィルターサイズ高さ}{ストライド}+1\\
&=\frac{224+0\times 2-11}{1}+1\\
&=214\\
出力サイズ幅&=\frac{元のサイズ幅+パティング\times 2 - フィルターサイズ幅}{ストライド}+1\\
&=\frac{224+0\times 2-11}{1}+1\\
&=214\\
\end{align}

チャンネル数は3のまま。

問題65(畳み込み演算)

元のサイズ:224×224
チャンネル数:3
パディング:0
ストライド幅:4
フィルターサイズ:4×4

\begin{align}
出力サイズ高さ&=\frac{元のサイズ高さ+パティング\times 2 - フィルターサイズ高さ}{ストライド}+1\\
&=\frac{224+0\times 2-4}{4}+1\\
&=56\\
出力サイズ幅&=\frac{元のサイズ幅+パティング\times 2 - フィルターサイズ幅}{ストライド}+1\\
&=\frac{224+0\times 2-4}{4}+1\\
&=56\\
\end{align}

問題66(Maxプーリング)

2 4 3 2
4 6 3 4
4 6 5 4
10 24 1 2

フィルター:2×2
ストライド幅:1
パディング:0
Maxプーリング

6 6 4
6 6 5
24 24 5

問題67(Averageプーリング)

2 4 3 2
4 6 3 4
4 6 5 4
10 24 1 2

フィルター:2×2
ストライド幅:2
パディング:0
Averageプーリング

4 3
11 3