convolution layer의 parameter 세는 방법 대충

1. Convolution neural network

 

convolution layer와 pooling layer에 의한 feature extraction

 

fully connected layer에 의한 decision making으로 이루어지는 neural network

 

etc-image-0
cnn의 가장 기본인 구조

 

fully connected layer는 convolution layer에 비해 parameter가 많으니까 없애려고하는 것이 대세이다.

 

일반적으로 학습하고자하는 모델의 parameter 수가 커질수록 학습이 어려워지고 generalization performance도 떨어진다

 

generalization performance  = 학습한 모델이 test data에 얼마나 잘 동작하는지

 

convolution layer를 최대한 deep하게 만들면서 parameter 수를 줄이고자

 

 

2. convolution layer의 parameter 수

 

기본적으로 kernel의 크기와 동일하다

 

etc-image-1

 

예를 들면 바로 위 그림에서 첫번째 layer의 경우 5*5*3 kernel 4개로 output을 냈으므로 5*5*3*4개 parameter을 가진다.

 

2번째 layer는 5*5*4 kernel 10개로 output을 냈으므로 5*5*4*10개 parameter를 가진다.

 

결국에는 output의 spatial dimension인 면 가로,세로는 의미없고 output channel과 kernel 크기가 결정한다

 

 

3. AlexNet의 parameter 수

 

layer의 parameter 수는 kernel의 크기

 

output channel과 kernel의 기본 shape로 결정

 

etc-image-2

보통은 kernel은 3*3같이 크기만 제시되지만 input의 channel과 동일해야 convolution이 가능해서 kernel의 channel을 유추 가능함

 

모형만 보고도 parameter가 어느 정도인지 감이 올 정도여야함

 

3-1) 첫번째 layer부터 차분하게 살펴보면

 

etc-image-3

11*11*3짜리 kernel로 convolution하여 2줄로 나눴다

 

당시 gpu가 성능이 부족해서 그렇다고 한다

 

총 parameter는 kernel 크기 11*11*3에 output channel 48*2를 곱한 11*11*3*(48*2)개

 

3-2) 두번째 layer를 보면

 

etc-image-4

 

5*5*48짜리 kernel을 convolution하여 128개의 channel을 만들었다.

 

총 2줄이니까 5*5*48*128*2개의 parameter를 가진다

 

3-3)

 

dense layer인 fully connected layer 부분을 보자.

 

각 input이 모든 output에 연결되기 때문에 parameter 수는 모든 input의 크기와 모든 output의 크기의 곱으로 나타난다

 

etc-image-5

13*13*128 input에서 1줄이 output 2048 모두에 연결이 되거든

 

(13*13*128*2) = input

 

(2048*2)=output

 

둘의 곱이 parameter

 

fully connected layer의 parameter 수가 convolution layer의 parameter 수에 비해 압도적으로 많다

 

etc-image-6

 

너무 당연한 것이 convolution은 kernel이 모든 input pixel에 공통으로 적용되는 shared parameter인데

 

fully connected layer는 모든 서로 다른 행 가중치들이 모든 hidden vector에 각각 적용되니까 많을 수 밖에 없다.

 

학습 속도를 높이기 위해서는 parameter 수를 줄이는 것이 일반적으로 중요하다

 

그래서 뒷단의 fully connected layer를 최소화시키고 앞의 convolution layer를 최대한 깊게 하는 것이 요즘 대세

728x90