IT/Machine Learning

MLP 파라미터(param) 개수 자세히 알기 (feat. 케라스)

엘티엘 2020. 12. 17. 20:07

케라스(keras) 코드를 활용해 MLP 파라미터 개수에 대해서 살펴보려고 한다.

 

모델을 만들자

먼저 아래처럼 간단한 분류 모델을 만들었다.

import tensorflow as tf
from sklearn.datasets import load_iris
import numpy as np

iris_data = load_iris()

x = iris_data['data']
y = iris_data['target']

print(x.shape)
print(np.unique(y))

[출력결과]

x는 4개의 feature 를 가지고 있는 150개(row)의 데이터이고, y는 3개의 label을 가지고 있다.

 

이를 학습/분류 하기 위해서 아래같은 간단한 MLP(Multi Layer Perceptron) 모델을 만들었다 

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(32, input_dim=x.shape[1]),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(len(np.unique(y)), activation='softmax')])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x, y, epochs=100, validation_split=0.2)

[출력결과]

학습후 모델 평가를 해보니 84%의 정확도가 나왔다. (편의상 train/test/eval 데이터셋은 나누지 않았다)

 

파라미터 개수 확인해보자

오늘 살펴볼 부분인 파라미터 개수를 확인해보자

keras 에서는 summary() 함수를 통해서 모델의 정보를 확인할 수 있다 (layer 개수, parameter 개수 등)

맨 처음 dense_3(Dense) Layer를 보면 제일 오른쪽에 Param #이 160 이다. 왜 그럴까?

일단, 결론부터 말하면, input_dim=4 이고, layer의 노드 개수가 32 개이므로, 4X32 + 32 = 160 이다.

 

4X32 + 32 = 160에 대해서 좀 더 자세히 알아보자. 

dense_3(Dense) Layer는 결국 4개의 데이터가 들어와서 32개의 데이터로 나가야 한다.

행렬 연산으로 설명하자면 이런 모습이다.

  • (1 X 4) X (? X ?) = (1 X 32)

행렬곱셉 조건에 의해서 이것이 가능하려면 (? X ?) 이 (4 X 32) 되어야 한다. (자세한 내용은 행렬곱셉 참고)

이것이  4X32 + 32 = 160 에서, 앞쪽 4X32 이다.

그렇다면 뒤쪽 + 32 는 무엇일까? 바로 32개 노드에 더해지는 상수이다.

 

전체를 정리하면 정리하면, 다음과 같다

  • (각 Layer의 파라미터 개수) = (input_dim X 노드수 + 노드수)

 

이를 위에 summary 결과에 적용해보면 값이 일치함을 확인할 수 있다.

  • dense_4: 160 = 4 X 32 + 32
  • dense_5: 528 = 32 X 16 + 16
  • dense_6: 51 = 16 X 3 + 3

 

파라미터 개수와 모델 size의 관계

파라미터 개수별 모델 size를 확인해보자. (dense_3, dense_5 의 unit수를 조정하면서 결과를 비교해봤다)

사이즈를 계산하는 여러가지 방법이 있지만, 가장 직관적인 방법으로 모델을 파일로 저장하고, 해당 파일의 크기를 확인해봤다.

편의상 과정은 생략하고 결과만 정리하면 아래와 같다.

노드수 dense_3: 16
dense_5: 8
dense_3: 32
dense_5: 16
dense_3: 64
dense_5: 32
파라미터 개수 243 739 2499
파일 사이즈(byte) 36416 43128 63640

 

모델에는 파라미터 외에 다양한 정보가 저장되어 있기 때문에,

완벽하게 비례 하지는 않지만, 거의 정비례한다 (33000 + 13 byte * param)

 

 

반응형