VGGNet는 왜 3*3 convolution을 사용했을까?

1. VGGNet

 

요즘도 많이 쓰인다

 

AlexNet보다 더 깊은 16층 19층 (11층도 있는듯?)

 

vgg16과 vgg19 구조

 

vgg 구조

 

그런데 AlexNet보다 더 간단한 구조를 사용했다.

 

구체적으로 Local Response normalization을 사용하지 않았고

 

비교적 작은 3*3 convolution layer와 2*2 max pooling layer만 사용했다

 

작은 size의 filter를 더 깊게 쌓으면서 input image의 receptive field를 더욱 크게 가져갔다.

 

심지어 filter size가 작아지면서 AlexNet보다 parameter가 작아졌다

 

그런데 더 깊게 쌓으면서 더 복잡한 non linear 함수관계를 학습할 수 있게 되었다

 

이 말은 image의 많은 영역을 고려하여 output을 출력한다는 것

 

더 깊지만 더 간단하여 기본적인 성능도 AlexNet보다 좋고

 

특별히 fine-tuning을 하지 않아도 output에 대한 다른 task로의 일반화 성능도 더 좋다고 알려져있다.

 

1*1 convolution은 그것의 진정한 의미를 위해 사용했다기 보다는 fully connected layer를 위해 활용

 

ReLU를 사용했고 input image는 224*224이고 3개의 Fully connected layer를 사용하여 AlexNet의 기본 세팅은 유지했다

 

dropout 사용

 

input image data의 각 채널 R,G,B의 pixel에 전체 image 데이터의  R,G,B pixel의 평균 값을 빼줬다는데

 

평균을 0으로 만드는 normalization을 수행함으로써 bias를 감소시켜

 

학습과정에서 평균이 큰 특정 데이터의 영향력을 줄이고 gradient의 안정성을 가져온다

 

 

2. 왜 VGG는 3*3 convolution만 사용했는가

 

결론적으로 말하면 3*3 convolution을 여러번 사용하면 더 큰 크기의 convolution을 적게 사용한 것과 동일한 receptive field를 얻을 수 있기 때문이다.

 

receptive field란 하나의 output pixel을 얻기 위한 kernel이 input과 겹쳐지는 영역의 크기로 당연하지만 kernel 크기와 비례할것

 

3*3 convolution layer 2번과 5*5 convolution layer 1번 사용하는 것은 receptive field가 같다

 

 

위 그림을 보면 3*3 kernel을 2번 사용하면 5*5kernel 1번 사용하는 것과 동일한 효과를 얻는다

 

그러면 둘은 무슨 차이가 있는가? parameter 수가 압도적으로 줄어든다

 

 

network가 deep해지면서 parameter 수가 커질 것 같지만 오히려 parameter 수는 엄청나게 줄었다

 

이것이 11*11*3으로 시작한 AlexNet과 결정적인 차이

 

receptive field 측면에서 네트워크를 깊게 구축하면서 오히려 parameter 수는 감소시켜

 

큰 kernel을 사용할때와 동일한 효과를 얻는다

TAGS.

Comments