深層学習・ディープラーニングでも必要な
畳み込みニューラルネットワーク /
Convolutional Neural Network ; CNN
の基本的な内容について知りたい.
「これから、機械学習やディープラーニングの学習をしたいから、
その基本となる畳み込みニューラルネットワーク /
Convolutional Neural Network ; CNNの理解を深めたい」という方に向けた記事.
yhayato1320.hatenablog.com
yhayato1320.hatenablog.com
Index
全体の構造
まずは CNN の大枠を理解するために、CNN のネットワーク構造の全体から見ていく.
畳み込みニューラルネットワーク / Convolutional Neural Network : CNN は
全結合 / Fully Connected のニューラルネットワークに加えて、
「畳み込み層 / Convolution Layer」と「プーリング層 / Pooling Layer」が
新しく組み込まれたネットワーク構造.
つまり、CNN の理解には、各層の理解が必要なる.
畳み込み層
畳み込み層 / Convolution Layer の理解に必要になってくる要素は以下の 3 つ.
- 畳み込み演算
- パディング / Padding
- ストライド / Stride
畳み込み演算
畳み込み演算は畳み込み層 / Convolution Layer で行われるメインの計算である.
後述する
パディング/ Padding、
ストライド / Strideは
畳み込み演算の設定、パラメータのようなものである.
畳み込み演算は、画像処理におけるフィルター演算に相当する.
yhayato1320.hatenablog.com
畳み込み演算を理解する手がかりとして、下図の具体的な計算方法を考えていく.
畳み込み演算は、入力の行列データに対して、
フィルター行列を適用して、行列データを出力する.
おおまかな、処理の流れを以下に記す.
- 入力の行列データに、フィルター行列を適用する範囲を決定する.
- 適用する範囲に対して、フィルター行列との和積演算 (要素を乗算し、その和を求める) を行う.
- その結果を対応する出力行列の一部に格納する.
フィルター行列を適用する範囲をずらして (スライドさせて) いくことで、
このプロセスを繰り返し、入力の行列データ全体に適用する
フィルター行列の値は、何でも良いわけではなく、
このフィルター行列の値は、学習していくパラメータになるわけである.
全結合のニューラルネットネットワークと同様に、
最後にバイアスパラメータを (各要素に) 足し合わせて出力となる.
パディング / Padding
畳み込み層の処理を行う前に、入力データの周辺に固定のデータ (0など) を
埋める処理を行うことがある.
これを パディング / Padding といって、畳み込み演算ではよく用いられる処理.
畳み込み演算における、Padding とは pad (詰め物)を埋めることを意味し、埋め込みの意味.
では、「何」を「どこ」に埋め込むかというと、「任意の数値」を「入力の行列の外側」に埋め込む処理を行う.
畳み込み演算は、入力の行列のサイズがフィルターの大きさ以上でなければ計算できない.
そこで、「任意の数値(影響はなくすため0が多い)」を「入力の行列の外側」に埋め込んだ後に畳み込み演算を行う.
上の例では、入力データ周辺に幅 1 のパディングを適用している.
パディングをすることで出力の行列の大きさをコントロールする.
パディングの幅を大きくすることで、畳み込み演算の出力を大きくできる.
フィルターを適用する位置の間隔をストライド / Stride という.
ストライド / stride は英語で歩く、闊歩すると意味で、
フィルター行列が入力の行列データを移動していく
(歩いていく、少しづづずれていく) ようなイメージ.
上の例では、フィルター行列が、
入力の行列データの上を1マスずつずれていくように
移動しているが、動く幅も畳み込み演算の1つの設定になる.
その動く幅を
ストライド / Stride と呼ぶ.
例えば、下のようにストライドを にすると、フィルターを適用する間隔が 要素ごとになる.
ストライドを大きくすると、
出力された行列の大きさが小さくすることができることがわかる.
出力サイズ
上で、述べてきた、パディング / Padding と ストライド / Stride で大きさを
畳み込み演算の出力の大きさをコントロールすることができることがわかる.
では、ここで、入力のサイズとパディング / Padding、 ストライド / Stride の関係を
定式することで、出力サイズがどのように計算されるかを考える.
プーリング層 / Pooling Layer
プーリング層 / Pooling Layer では、縦・横方向の空間を小さくする演算を行う.
部分サンプリング / Sub-Sumpling とも呼ばれる処理.
対象の領域を一つの要素に集約するような処理を行い、空間サイズを小さくする.
上の処理は、 の Max Pooling をストライド 2 で行った場合.
具体的な処理の流れは、
- 処理を適応する入力の行列データの範囲を決定
- 決定した範囲の要素の中で、最大の要素を計算
- その結果を対応する出力行列の一部に格納
このプロセスを繰り返し、入力の行列データ全体に適用する
yhayato1320.hatenablog.com
プーリング層 の特徴
- 学習するパラメータがない
- チャンネル数は変化しない
- 微小な位置変化にロバスト
まとめ
畳み込みニューラルネットワーク(Convolutional Neural Network : CNN) は
畳み込み層 / Convolution Layer とプーリング層 / Pooling Layer の2つ処理を繰り返し行う構造である.
畳み込み層 / Convolution Layer は畳み込み演算を行うことで、
入力データ (画像等) から特徴を抽出するパラメータを学習する.
プーリング層 / Pooling Layer では、入力データの情報を縮小させていく.
参考