convolution layer의 parameter 세는 방법 대충

1. Convolution neural network

 

convolution layer와 pooling layer에 의한 feature extraction

 

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

 

cnn의 가장 기본인 구조

 

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

 

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

 

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

 

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

 

 

2. convolution layer의 parameter 수

 

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

 

 

예를 들면 바로 위 그림에서 첫번째 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로 결정

 

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

 

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

 

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

 

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

 

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

 

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

 

3-2) 두번째 layer를 보면

 

 

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의 크기의 곱으로 나타난다

 

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

 

(13*13*128*2) = input

 

(2048*2)=output

 

둘의 곱이 parameter

 

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

 

 

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

 

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

 

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

 

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

TAGS.

Comments