今回は「畳み込みニューラルネットワークの代表的なモデル - KIKAGAKU」を学んだ。
学習内容
Functional API
複数の入出力が発生するようなモデルの場合、Sequential API では記述できないため、Functional API を使って記述する。
VGGNet(2014)
VGGNet は非常にシンプルでわかりやすいアーキテクチャであるのに精度が高い。
VGGNet の特徴
- 3×3 フィルタのみを使用
- 同一チャネルの複数の畳み込み層と Max Pooling を 1 セットとし、繰り返す
- Max Pooling 後の出力チャネル数を 2 倍にする」
3×3 フィルタを使用するのは、上下左右中心の情報が受容できる最も小さなサイズであるため。
パラメータ数が半減できるのに精度は高い。
GoogLeNet / Inception(2014)
GoogLeNet は Inception モジュールとして、複数のネットワークを1つにまとめ、モジュールを積み重ねる、Network In Network の構成がなされている。
Inception モジュールの内部では、異なるフィルタサイズの複数の畳み込み層を同時に通して、結合する処理が行われる。これはパラメータ数を削減して計算コストを下げつつ、複雑なアーキテクチャを組むために行われる。
また、Global Average Pooling も GoogLeNet で採用され、CNN で特徴マップを全結合層へつなぐ際に使用される。
これまでは特徴マップの各画素を順番に切り取って並べることでベクトル化していたのに対し、GAP では一つの特徴マップから Average Pooling で 1×1 のサイズにしたものを並べてベクトル化する。
ResNet(2015)
ResNet は Residual モジュールを採用している。
層を深くすることで精度が向上する一方、深くしすぎると逆伝播時に勾配消失してしまう問題があり、その対策として
Residual モジュールが提案された。
Residualモジュールに、1×1 畳み込みを加えて、パラメータを削減しより効率的に学習を行える Bottleneck モジュールも提案された。
He 初期化は、活性化関数に ReLU を用いる際の、最適な重みの初期値として、平均 0 標準偏差 1 の正規分布からランダムに設定する。
Batch Normalization も ResNet で提案された。
ResNet は最大 152
層まで深くしたアーキテクチャが提案されており、各バリエーションの構成は以下の通り。
- ResNet18
- ResNet34
- ResNet50
- ResNet101
- ResNet152
MobileNet (2017)
MobileNet はモデルサイズの軽量化を図りながら、高精度の予測を可能としたモデルであり、物体検出などの速度が求められる問題設定のバックボーンとして使用されている。
Depthwise Separable Convolution は、畳み込みの計算を Depthwise Convolution と Pointwise Convolution に分解することで、通常の畳み込み処理からパラメータ数を大きく削減することに成功した。
Depthwise Convolution は、 3 チャネルの画像に対し、各チャネルごとに 1 枚ずつフィルタを用意し、チャネル単位で畳み込みを行うが、各チャネルでの計算結果を足し合わせる処理は行わない。
Depthwise
Convolution では入力画像のチャネル数分のチャネルを持った特徴マップが出力される。
TensorFlow では layers.DepthWiseConv2D() で実装できる。
Pointwise Convolution は、1×1 のフィルタをDepthwise Convolution
で出力された特徴マップのチャネル数分用意して、畳み込み計算を行う。
TensorFlow では、layers.Conv2D(kernel_size=1, strides=1) で実装できる。