自分の勉強用メモ。
#CNN(Convolutional Neural Network)とは
畳み込みニューラルネットワークと言われ、画像や音声認識などいろいろな場面で使われているDNNの1つです。
CNNを利用した下記ののモデルもあるが、ここでは扱わない。
・物体検出(R-CNN/Fast/Faster/SSD/YOLOなど)
・セマンテックセグメンテーション(FCN/SegNet/RefineNet/PSPNet/)
##特徴
・畳み込み層で特徴を抽出している。
畳み込みを何度もかけることで、複雑な局所的特徴を抽出できる。
・プーリング層では領域内の最大値(または平均値)を取得する。
位置情報が多少ずれていても同じ結果となるように調整し、ロバスト性を持つ。
※ロバスト性とは、外的要因による変化を内部で阻止する仕組みや性質などを意味する表現。
・Convolutionレイヤ(畳み込み層)と、Pooloingレイヤ(プーリング層)の一般的なネットワークは下記のとおり。
ConvとPoolを繰り返し最後のレイヤで全結合層の処理をしsoftmaxで出力している。
X(入力データ) → Conv(畳み込み)→ Relu(活性化)→ Pool(プーリング)
→Conv → Relu → Pool → Affine → Softmax(出力層の活性化)
・全結合層のニューラルネットワークでは形状を無視して、入力データを同じ次元として扱ってしまいます。
CNNでは画像などの形状を理解でき、畳み込み層でフィルター、ストライド、パティングを活用します。
畳み込み層とプーリング層で、形状を意識してデータを特徴付けることができます。
畳み込み層の入出力のデータの形状は下記計算式で求めることができます。
出力高さ=(入力高さ + 2パティング ー フィルターの高さ)/ストライド
出力幅 =(入力幅 + 2パティング ー フィルターの幅 )/ストライド
※ここでは、コードの実装の詳細については触れませんが、
簡単に言うと、入力データ(4次元<個数,チャンネル数,高さ、幅>)とフィルタ(重み)を
im2colで2次元のデータに変換して行列計算します。
計算後、reshapeで元の次元に戻します。
##CNNの仲間たち
ネットワーク図や詳細についてはリンクの論文からご確認ください。
###LeNet
はじめてのCNN。1998年に提案されました。
活性化関数にシグモイド関数が使われています。(現在の主流は、Relu)
また、プーリング層ではサブサンプリングで縮小しています。(現在の主流は、Maxプーリング)
##AlexNet
ILSVRC2012年で優勝したモデル。
ディープラーニングの火付け役で、圧倒的な性能を見せつけ優勝しました。
5つの畳み込み層と3つの全結合層を持つ。
特徴として、パラメータの数が多いため過学習を起こしやすく、
2つの全結合層でドロップアウトを使っている。
###VGG
畳み込み層とプーリング層で構成されるベーシックなCNNです。
重みのある層は16層または19層まで重ねています。
3*3の小さなフィルターで畳み込みを連続して行なっていることが特徴です。
とてもシンプルな構成で応用が効くネットワーク。
その上、2014年のコンペでは2位の成績を納めるほど優秀。
#1位はGooglenet
###Googlenet
Googleのチームによって開発されたネットワークです。
インセプション構造を持っているのが特徴。
インセプション構造を積み重ねてネットワークを構築している。
インセプション構造では、サイズの異なるフィルターを複数適用してその結果を結合するため、
従来のCNNよりも表現力が高まっている。
また、1*1の畳み込みフィルタが多くの場所で使われており、次元削減(パラメータ数の削減)により
計算コストを低くする工夫がみられる。
Inceptionmoduleにより、モデルの表現力と計算時間のトレードオフの関係を改善している。
また、Auxiliary Lossの存在も特徴的だ。
ネットワークの中間層に直接誤差を加えることによって、勾配消失の対策をしている。
##Resnet
Microsoftのチームによって開発されたネットワークです。
残差ブロック構造を持っているのが特徴。
畳み込み層とスキップ構造を組み合わせ、入力データをそのまま「identity mapping(恒等写像)」で、
出力に渡しています。
これまでのネットワークでは層を深くしすぎると学習がうまくいかずに性能が落ちてしまう
という問題があったが、スキップ構造によってその問題を解決しました。
2015 ILSVRCで優勝してます。誤認識率3.5%!!