Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

深層学習 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ありで実行

image.png

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

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

image.png

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

col2imの使用例

image.png

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

image.png

CNNの実行

image.png

この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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away