본문 바로가기
Have Done/MLP

MLP from Scratch with Numpy [1 / 7] - feed forward1

by 에아오요이가야 2022. 1. 3.

계획의 시작 MLP입니다. MLP with 2 layer 모델로 MNIST 분류 문제를 풀어보겠습니다.

우선 아주 쉽게 축소하여 한번 가봅시다!

[그림 1] 2-layer MLP 의 축약 예시 입니다. 추상화?

보통 Hidden layer의 수와 Output layer의 수를 합쳐서 layer 수를 결정하는 것으로 추정됩니다.

아마 곱해지는 행렬이 2개라서 그런것 같습니다.

 

[그림 1] 에 추상화된 MLP 모델이 그려져 있습니다.

 

Input layer를 [1 x 3] vector \(I\)

 

Hidden layer를 [1 x 4] vector \(H\)

 

Output layer를 [1 x 3] vector \(O\)

 

\(W^0\), \(W^1\) 은 행렬입니다.

 

행렬 곱셈에는 in(곱해지는 것)과 out(결과)을 알고 있다면 그 형태에 끼워 맞춘 행렬을 만들 수가 있습니다.

 

[그림 1] 예시에서 \(W^0\) 행렬의 형태는 3개의 node를 가진 input layer \(I\)와 4개를 가진 hidden layer \(H\)에 의해서 결정됩니다.

 

뭘까요~? 

 

input layer \( I \)가 3개의 node를 갖고있기에 [1 x 3] 형태의 벡터라고 생각하고,

 

hidden layer \( H \)도 4개의 node를 갖고있으니 [1 x 4] 형태의 벡터라고 생각할 수 있습니다.

 

그러면~~ [1 x 3] 형태의 벡터가 [1 x 4] 형태의 벡터로 계산되어 지기 위해 \( W^0 \) 행렬은 [3 x 4]의 형태를 띄면 됩니다~!

 

input layer \( I \) 와 \( W^0 \) 행렬의 곱셈 결과는 [1 x 4]형태의 hidden layer \( H \)벡터를 얻을 수 있겠죠?

 

이를 수식으로 보시겠습니다.

[그림 2] input layer와 행렬[W^0]을 이용하여 hidden layer을 계산해낸 모습

 

같은 방식으로 output layer까지의 계산을 해보겠습니다.

 

[그림 3]hidden layer와 행렬[W^1]을 이용하여 output layer을 계산해낸 모습

여기에 사용된 # 기호는 갯수를 나타내는 기호 입니다. 예를 들어 [#나에게온카톡 = 0] 뭐 이런식입니다.

#input =3 , #hidden=4 #output = 3이 되겠네요.

 

첨자[문자 아래에 쓰여있는 작은 숫자]를 설정하는 것 에 어려움이 있으신 분들이 있을 줄로 압니다.

설명은 의미가 없고 직접 손으로 쓰시면 5분이내로 깨닫으실 겁니다.

 

힌트는? 패턴을 묶어낸다 입니다~

 

자 이제 추상화된 요약본은 이해가 되셨을거라 믿고 MNIST에 직접 적용해 보도록 하겠습니다.

 

댓글