畳み込みニューラルネットワークとは
畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)とは深層学習におけるネットワークの組み方の一種であり、画像や動画認識において広く使われているモデルの一つである。
CNNの構造として畳み込み層とプーリング層と呼ばれる2つの層が画像の特徴を取り出しながら受け渡して行き、最終的に全結合層へとつながって行く。
畳み込み層
畳み込み層の仕事とは画像にフィルタ(カーネル)をスライドさせながら畳み込む処理を行い特徴マップを得ること
畳み込むとは画像上にフィルタを乗っけて、その「フィルタ内の画像ベクトル」と「畳み込みに使用するそのフィルタのベクトル」との間の掛け算、内積を行うこと。
特徴→分類するためのもの
フィルター→CNNにおいて学習させるもの
活性化関数としてReLUが用いられる。
ゼロパディング
入力の特徴マップの周辺を0で埋めること
→なぜこのようなことをするかというと。普通に畳み込みを行うと端の領域は他の領域を比べて畳み込まれる回数が少なくなってしまうため。
メリット
端のデータに対する畳み込み回数が増えるので端の特徴も考慮されるようになる
畳み込み演算の回数が増えるのでパラメーターの更新が多く実行される
カーネルのサイズや、層の数を調整できる
→ Convolution層とPooling層で出力サイズは次第に小さくなるのでゼロパディングでサイズを増やしたりすると層の数を増やすことができる。
フィルタの設定
畳み込みに使用するフィルタについて、設定しなければいけないパラメーター
使用するフィルタの数 (だいたいは2の階乗の値がとられる)
ストライド
ストライドとは畳み込みの適用間隔のこと。
出力サイズ:O フィルタサイズ:F 高さ:H パディング:P ストライド:S
O(h) = H + 2P - F(h) / S + 1
CNNの構成要素
CNNは各層と活性化関数といくつかのパラメータの組み合わせでできている。
Fully Connected層
Fully Connected層では一般的なニューラルネットワークでも見られることができる。
各層のユニットは次の層にユニットと全て繋がっている。
それぞれのユニットとの接続は重みを持っている。入力は1次元のベクトルで出力も1次元のベクトルとなる。
CNNでは出力層の手前で使われていることが多く、この部分が検出された特徴の組み合わせから、予測結果に分類するための識別部となる。
また最終的な出力層のユニットの数は分類される数と一致している必要がある。出力層での出力値がそのカテゴリと予測される確率となる。
出力ユニットの値の計算はそれぞれの入力ユニットの値と接続の重みを内積してバイアスを足す
y = f(x1w1 + x2w2 + ・・・・ + b) 入力ユニットの値:x 接続の重み:w バイアス:b f()活性化関数
問題点
一次元ベクトルを入力値として一次元ベクトルを出力するため、空間的な位置情報・音声であればシーク位置・画像であればRGBチャンネルなど
そのような3次元以上(空間的な情報)を扱うことができない。
活性化関数としてはReLUがよく使われる
Rectified Linear Units(ReLU)
マイナスの数字が生じたときに0に変換してくれる。
これによって学習値が0付近で立ち往生したり、無限に向かったりすることがなくなる。
フィルタの設定
必要なパラメーターが以下の4つ
・フィルタの数(K) : 使用するフィルタの数。大体は2の階乗の値が取られる
・フィルタの大きさ(F) : 使用するフィルタの大きさ
・フィルタの移動幅(S) : フィルタを移動させる幅
・パディング(P) : 画像の端の領域をどれくらい埋めるか
これらのパラメーターの値から、Convolutional Layerのサイズを計算することが可能です。
32x32x3の画像に5x5x3のフィルタを、移動幅1、パディング2で適用するとします。まず、パディングを加味すると画像のサイズは32+2*2=36となります。ここから幅5のフィルタを移動幅1でとる場合、36-5+1で32となります。つまり、最終的には32x32x3の層ができることになります。
これらのパラメーターはCaffeなどのライブラリを使用する際にも設定が必要なため、その意味とサイズの計算方法を頭に入れておくとよいと思います。
Convolution層
フィルタごとに畳み込み演算した出力が次の層の1つのユニットとなる。
Fully Connected層と同様にフィルタごとに内積を計算しバイアスを足して活性化関数を適用する。
→基本的に畳み込みと呼ばれる前述のことを行う階層。
プーリング層
Convolution層の後にだいたい適用される。入力データをより扱いやすい形に変形するために情報を圧縮し、down samplingする
畳み込み層から出力された特徴マップを、さらに縮小して当たらな特徴マップとする。
この際に着目する領域のどの値を用いるかで、最大値を得ることで画像の多少のずれも吸収される
よって、この処理により画像の位置移動に対する普遍性を獲得したことになる??
max pooling
小領域(特徴マップ上)に対して最大のものを選択する操作を行う。
これによって
微小な位置変化に対して強くなる
ある程度過学習を抑制する
計算コストを下げる
などの効果がある。
まとめ
→ 畳み込み層は画像の局所的な特徴を抽出する。
→ プーリング層は局所的な特徴をまとめあげる処理をする。
→→ この2つの処理とは、入力画像の特徴を維持しながら画像を縮小処理している。
今までの画像縮小処理と異なるところは、画像の特徴を維持しながら画像の持つ情報量を大幅に圧縮できるところ。
→ つまり画像の抽象化が可能
ネットワークに記憶された、この抽象化された画像イメージを用いて、入力される画像を認識、つまり画像の分類をすることが可能。
CNNの進化
・フィルタを小さくし、階層を深くする
・PoolingやFCのレイヤをなくす
などの構成を行うことで精度をあげていく。