External Memory

プログラミング周辺知識の備忘録メイン

畳み込みニューラルネットワーク VGGNetとResNet + α

VGGNetとResNetはILSVRC competitionで優秀な畳み込みネットワークをだったもの。
それぞれ2014年準優勝、2015年優勝。

VGGNet

https://arxiv.org/pdf/1409.1556.pdf

3*3、または1*1の小さなフィルターサイズconv層を積層した深いCNNで16-19layer構成である。3*3で小さいというのはAlexNetの11*11 convなどと比較してのことだろう。


基本的な全体的な構造として、input layerおよびpooling layer(max pooling)間にconv層を連続して2-3層積層しており、pooling layerごとにチャンネル数は2倍、最後はFully-Connected(FC) 3層、softmax層である。

これは3*3のconv2層および3層は、それぞれ5*5、7*7のフィルターと空間的に同じ効果であるという考えからくる。3*3conv3層は7*7conv1層よりも非線形ReLU層の数の違いによりより弁別的で、3*3conv3層に置換した場合パラメータ数を55%ほど減らせるため正則化を適用しているとみなすことが出来るという利点があると述べている。

1*1conv層はNetwork in Networkでも述べられているように、
線形変換と非線形ReLU関数が導入されるのでよりネットワークが非線形性を増大させる効果がある。
この文献中では1*1conv層追加挿入で精度向上の効果はあったが、同じネットワーク構造で比較して1*1conv層を3*3conv層に置き換えた方が精度が良かったようである。



実際の学習時には、深いネットワークで学習するとき最初の4つのconv層と最後の3つのfully-connected層の重みの初期化には、浅いモデル(Table 1 A)で学習した重みパラメータを利用し、学習時に学習率を減らさずパラメータの変更を許している。


19 layer構成に対し、単一モデルでILSVRC-2012 datasetの分類でtop1 error 24.4%、top5 error 7.1%である。
この時学習時において画像サイズは384pixelから256-512pixelの範囲でscale jitteringされ、
テスト時は256,384,512の3種類でスケール変更して行われている。
このとき画像サイズに柔軟に対応するため、
FC層は7*7conv層と1*1conv層に置き換えられ(完全畳み込みネットワークFCN)、
最後にGlobal Average Poolingが用いられている。
FCNは計算効率や精度の面から画像をcropするよりは都合がよい。


またイメージサイズを256や386固定でrescaleして事前学習するなど学習速度にいろいろ工夫があるが、
"four NVIDIA Titan Black GPUs, training a single net took 2-3 weeks depending on the architecture."
とある。


ResNet

https://arxiv.org/pdf/1512.03385.pdf

深いネットワークモデルにおけるtraining accuracyの劣化(trainingの劣化なので過学習が原因ではない)の解決には、追加された層がidentity mappingであり、他の層が浅いモデルのコピーであるという考え方を用いる。


ここでは"shortcut connections"がIdentity Mappingを行う。
ショートカットの概念はHighway Networkのgating functionsにもあり、深いモデルに対してうまく機能している。
畳み込みネットワークの構造例3 All-CNN,Highway Network - External Memory

gating functionsと比べると、パラメータフリーである点と常にresidual functionsが機能している点で異なっている。よってHighwayでは100layer以上では精度が得られていない。


追加された層がIdentity Mappingとして構築された場合、深いモデルは浅いモデルよりエラーが大きくなることはないはずだが、ショートカットなしの場合は非線形層がIdentity Mappingを困難にしているようである。

実際Identity Mappingが最適となれば、Identity Mappingに近づくために非線形層の重みはゼロに向かう。よって最適関数がIdentity Mappingに近い場合は、Identity Mappingを参照にして摂動が見つかりやすくなる。
この考えよりIdentity Mappingにショートカットが用いられるのである。


residual mappingとショートカットのIdentity Mappingは以下のように表される。
\mathbf{y}=\mathcal{F}(\mathbf{x},{W_i})+\mathbf{x}
layerを2つショートカットするなら、
\mathcal{F}=W_2\sigma(W_1\mathbf{x})
となる。


層間で次元が変わる場合(poolingやstraide 2以上のconv)、ゼロパディングかもしくは以下の式(liner projection shortcuts)で次元を変える。
\mathbf{y}=\mathcal{F}(\mathbf{x},{W_i})+W_s\mathbf{x}


この文献においては、ゼロパディングとProjection Shortcutsで比較するとわずかにProjection Shortcutsのほうが良い性能が得られており、
また次元変更時のみでなくすべてのショートカットでProjection Shortcutsを用いることでさらに性能が向上している結果が得られているようだが、
著者はその差はわずかと判断して次元変更時のみProjection Shortcutsを適用している。


またResNetではpooling layerの代わりにstride 2のconvolution layerを用いている。
これはAll-CNNでも見られた手法である。


ネットワーク構造はVGGnetsを参考にしているようである。
文献中Table 1からわかるように全体のlayerの数によってショートカット距離や畳み込みのフィルターサイズ、チャンネル数が違っている。
チャンネル数は基本的にはoutputのサイズが1/2になればチャンネル数を2倍にしている。つまりstride 2のconvolution layer後のチャンネル数が2倍である。

(追記9/26:活性化関数の前にBatch Normalization(BN)を行っている。identity mappingと足し合わせた後reluを適用しているが、この場合BNは足し合わせる前にresidualのみにおいて行われる。)

50 layer以上積層した時に見られる構造をBottleneck Architecturesと呼んでおり、
これは精度向上ではなく経済的な問題でBottleneck選択しているようである(ボトルネックでないほうが精度は出るようである)。
また最後にGlobal Average Poolingを用いている。
(追記9/26:global average pooling後に1*1特徴マップのチャンネル数が所望のラベル分類数となるようにfully-connected layerを追加している。これはFCNの性質を壊さない。)


ImageNet 2012 classification datasetにおいて、152 layer ResNetで単一モデルtop-5 validation error は 4.49%、
6つの異なる深さのアンサンブルモデルではtest setにおけるtop-5 errorは3.57%である。


また、CIFAR10に対しては110層モデルで6.43%のerror率である。
1202層を積層しても7.93%error率で大幅に性能が劣化していない。
ここで110layerにおける学習時にウォーミングアップとして初期学習率0.01でerror率80%以下にした後、学習率を0.1に上げている。恐らく初期の学習が学習率0.1ではうまく進まなかったのだろう。


しかしCIFAR10でパッチサイズ128の64000stepは20layerでも個人的には計算時間的に難ありのように感じる…。

GoogLeNet Inception-v4, Inception-ResNet

https://arxiv.org/pdf/1602.07261.pdf

inceptionモデルは全体的な構造を維持した状態で、サブネットワークの調整を重ねに重ねたような複雑な構造をしているように見える。
文献に記載されているように、大きくアーキテクチャーを変更することに関して慎重だったらしく、単純化されず複雑化したという記載がある。
実際文献中に図示されているサブネットワーク構造を見ると、他のニューラルネットワークと比べて非常に複雑であるように見える。

この文献だけでは、どのような考え方でこのような構造になったのかの詳しい記載はなかった。

ILSVRC 2012 classificationでのInception-v4, Inception-ResNetのアンサンブルのtop5エラー率は3.08%で性能自体はかなりよく見える。


目についた記述としては、
Inception-ResNetではResNetの非常に深いモデルにおいて学習初期にニューロンが死ぬ問題を、residualにファクターを掛けることで回避している。
つまり
\mathbf{y}=\mathcal{F}(\mathbf{x},{W_i})+factor*\mathbf{x}
ということ。
ここでResNetでの初期学習の不安定性について言及している。