これで仕事終わり?さいっこおおおお

ネコの気持ちになりきってのんびりと自由に技術メモを残していきます

vggのdiscussionが面白かった

初学者な猫

最近cnnを用いたdeep learningについて入門している猫です。

かなり浅くしか読めていませんが、vggの論文のsec 2.3 discussion を読んで、初学者なりに、おおなるほどと思ったことがあったのでメモしておきます。

以下に論文のリンクを貼っておきます。

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

おもしろひ

vggの特徴として、vggが発表されるまで流行っていた構成に比べ、畳み込み層のフィルタを小さく(5×5, 7×7などから3×3に)、そしてネットワーク全体の層を深くしたことがあります

そして、今回猫が面白いなと思った箇所は以下の部分です

It is easy to see that a stack of two 3×3 conv. layers (without spatial pooling in between) has an effective receptive field of 5×5; three such layers have a 7 × 7 effective receptive field.

まあ書いてあることは、3×3のフィルタを2つ積むなら、5×5を1つ積めばよくね?同様に、3×3を3つ積むなら、7×7を1つ積めばよくね?

ということなのですが、ざっくりとした僕の理解では、以下のようなことだと認識しています

参考文献[1]によると、

ここでは、入力サイズを (H, W )、フィルターサイズを (F H, F W )、出力サイズを (OH, OW )、パディングを P 、ストライドを S とします。その場合、出力サイズは 次の式 (7.1) で計算できます。

式が画像ですみません(猫)

計算

今回、パディングは0,ストライドは1,入力画像はW:10, H10としましょう。まあ簡単のためチャネル数も1として、、、

式(7.1)により計算すると、まず3×3の場合は、(OH,OW) = (8,8)で1つ目の出力がなされ、そして2つ目で8×8が入力となり、最終的に(OH,OW) = (6,6)が得られる。

次に5×5の場合、(OH,OW) = (10-5+1,10-5+1) = (6,6)となる

以上の計算より出力サイズは一緒になって良い感じになるよねって話だと思います、サイズの観点からしかみていないので浅い理解ですが

ではなぜ3×3?

論文では、reruを入れられることと、重みについて触れてくれています

So what have we gained by using, for instance, a stack of three 3×3 conv. layers instead of a single 7×7 layer? First, we incorporate three non-linear rectification layers instead of a single one, which makes the decision function more discriminative. Second, we decrease the number of parameters: assuming that both the input and the output of a three-layer 3 × 3 convolution stack has C channels, the stack is parametrised by 3(32 C2)= 27C2 weights; at the same time, a single 7 × 7 conv. layer would require 72 C2 = 49C2 parameters, i.e. 81% more.

1つ目はReluを増やせるので、表現力を増すことができるということだと思います。

2つ目なのですが、畳み込み層の重みは(filter size) × 入力ch数 × 出力ch数であるので、上記のような式となります。

引用を見ると(1 - 49 ÷ 27) *100 %も多いらしいですねこ

なるほどなあ

初学者にはこういったdiscussionはとても勉強になりました

参考文献

[1] ゼロから作るDeep Learning (pythonで学ぶディープラーニングの理論と実装)