오뚝이개발자

딥러닝 행렬 계산 도식화, 행렬 계산 과정 본문

AI/케라스 창시자에게 배우는 딥러닝

딥러닝 행렬 계산 도식화, 행렬 계산 과정

땅어 2021. 10. 3. 15:17
728x90
300x250

 

 

딥러닝 층을 구성할 때 행렬 계산이 어떻게 이루어지는지를 이해하는 것이 중요하다. 그래야 행과 열의 수를 잘 맞추어 계산을 할 수 있기 때문이다. 이 글에선 Keras를 사용한 코드에서 실제 행렬 연산이 어떻게 이루어지는지 그림으로 도식화하여 설명하고자 한다. 아래와 같은 간단한 딥러닝 모델을 구성하는 코드가 있다고 해보자.

network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))
network.fit(train_images, train_labels, epochs=5, batch_size=128)

keras의 Dense() 메서드 안의 수는 차원 수(은닉 유닛 수)를 나타낸다. 코드에서 첫 줄의 행렬 연산을 그림으로 표현하면 아래와 같다.

먼저 input 행렬을 살펴보자.

  • batch_size=128이므로 128개의 sample data를 보겠다는 의미이다. 따라서 input 행렬의 행은 128이 된다.
  • input 행렬의 열 갯수는 하나의 sample data가 몇 차원 벡터로 나타내지는지를 가리킨다. 코드 첫 번째 줄에서 input_shape=(28*28,)로 나타내므로 input 행렬의 열 갯수는 784가 된다.

다음으로 W1 행렬을 살펴보자.

  • 먼저 첫 째줄에서 512개의 hidden unit을 사용하기로 했으므로 W1의 열 갯수는 512개가 된다.
  • W1의 행 갯수는 결국 input에서 하나의 sample data와 연산을 해야하므로 784개가 된다.

회색으로 작게 표현한 사각형은 bias를 나타낸다.

  • bias는 항상 뉴런에 붙어있다.
  • 즉, 뉴런 수 = bias 차원 수
  • 따라서, 여기서 b는 1x512 사이즈이다.

위에서 계산한 dense1은 다시 두 번째 hidden layer의 input이 된다. 이 input과 연산이 행해지는 W2는 위에서 설명한 것과 같은 원리로 코드 상에 10개의 은닉 유닛을 쓰기로 하였으므로, 512x10 사이즈가 된다. 결과적으로 result는 128*10의 행렬이 나온다.

 

 

 

728x90
300x250
Comments