MLP/CNN 파라미터 수를 구해보자!

2022.02.08 18:00 8,262 조회

안녕하세요 데이크루 월드파파 입니다.


딥러닝에서 모델링을 하다보면 파라미터 수를 확인하고자 하는데요,

MLP/CNN 에서의 파라미터 수를 구하는 방법을 설명 드리고자 합니다.



1.    MLP(Multi-Layer Perceptron) 파라미터 수

 

인풋 데이터가 9개의 피처를 가지고 있다고 해보겠습니다.

실제 MLP 실습 모형


위의 그림과 같이 1층, 2층에 각각에 16개의 퍼셉트론을 지정해주고

마지막 아웃풋을 1개로 지정할 시 파라미터수는 몇개가 나올까요?

 

Model.summary() 를 해보면 다음과 같은 결과가 나옵니다.

MLP의 Model.summary() 출력값


그럼 MLP의 파라미터 수는 다음과 같이 구할 수 있습니다.


입력층의 9개의 퍼셉트론 + 1개의 bias = 10개를

1층의 16개의 퍼셉트론 갯수와 곱해주면 160개가 나옵니다.

 

그리고 1층의 16개의 퍼셉트론 + 1개의 bias = 17개를

2층의 16개의 퍼셉트론 갯수와 곱해주면 272개가 나옵니다

 

마지막으로 2층의 16개의 퍼셉트론 + 1개의 bias = 17개를

출력층의 1개의 퍼셉트론 갯수와 곱해주면 17개가 나옵니다.

 

따라서 다 더해주면 160 + 272 + 17 = 449개가 됩니다.

 

 

그림으로 정리하자면 다음과 같습니다.

 

 

2.    CNN(Convolutional Neural Network) 파라미터 수

 

그럼 조금 더 복잡한 CNN의 파라미터 수를 구해봅시다.

 

우선 인풋 데이터 28*28*1를 가지고 있다고 하였을 시,

실제 CNN 실습 모형


위의 그림처럼 3*3커널이 32개가 있고

MaxPooling을 2*2사이즈로 합니다.

이후 3*3커널이 64개가 있고

MaxPooling을 2*2사이즈로 또 한번 합니다.

이것을 1차원으로 Flatten 해주고

절반을 드롭아웃을 해주고

아웃풋을 10개로 만들어준다면

파라미터 수는 몇개가 될까요?

 

Model.summary() 를 해보면 다음과 같습니다.

 

CNN의 Model.summary() 출력값


차근차근 그럼 CNN의 파라미터 수를 살펴보겠습니다.

 

Conv2d param이 320개인 이유

1개 인풋 수 * 3X3 * 32개 커널 + 32개 커널 비아 = 320

 

Conv2d_1 param이 18496인 이유

32개 인풋 수 * 3*3 * 64개 커널 + 64개 커널 비아 = 18496

 

마지막 output param이 16010인 이유

5*5*64인 Shape를 Flatten 펼치면 1600개 퍼셉트론이 나옵니다.

위 1번의 MLP 설명에 따라

(1600개 퍼셉트론 + 1 bias) * 10개의 아웃풋 = 16010

 

CNN 파라미터 갯수는 다음 공식을 따를 수 있습니다.

즉,

Conv layer의 가중치 수 = Conv layer에서 커널 사이즈 제곱 * 입력 이미지 채널 수 * 커널의 수

Conv layer의 편향 수 = 커널의 수

Conv layer의 파라미터 수 = Conv layer의 가중치 수 + Conv layer의 편향 수

 

그럼 첫번째 conv2d 를 예시로 들어보겠습니다.

param이 320개인 이유는,

Wc = Conv layer의 가중치 수 = 3^2 * 1 * 32 = 288

Bc = Conv layer의 편향 수 = 32

Wc + Bc = 320 이 됩니다.

 

참고로,

Maxpooling에 의해서 아웃풋 Shape가 변하는 공식은 다음을 따릅니다.

즉,

아웃풋 이미지 사이즈 =

(인풋 이미지의 사이즈 – 커널의 너비 사이즈 + 2* 패딩 사이즈)/스트라이드 + 1

이 됩니다.

 

정리하자면 다음 그림과 같습니다.


다음의 사이트에서 자세한 내용을 참고 할 수 있습니다.

https://seongkyun.github.io/study/2019/01/25/num_of_parameters


다소 헷갈릴 수 있으나 차근차근 실습해보시길 바랍니다!

감사합니다.



* 본 포스팅은 데이콘 서포터즈 “데이크루" 1기 활동의 일환입니다.