본문 바로가기
Have Done/MLP

MLP from Scratch with Numpy [5 / 7] - backpropagation1

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

자 이제까지 데이터를 입력받으면 [1 x 10] 확률 벡터를 만들어 내는 계산을 완료했습니다.

 

이를 feed forward라 부릅니다. 문제를 풀어본 상태라고 이해하시면 됩니다.

 

이젠 문제를 맞힐 수 있도록 혼내줄 겁니다. Back propagation!

 

feed_forward의 결과가 뭐였죠?! 다음과 같습니다.

Cost_function = cross_entropy(Output_layer, true_Label)
              = cross_entropy(softmax(np.dot(ReLU(np.dot(Input_layer ,  W_0)) , W_1)), true_Label)

 

이 길고 복잡해 보이는 식을 어떻게 건드려야 하나 두렵겠지만 어쨌든 하나씩 풀어가야 됩니다.

 

지난 포스팅에서 Cost function으로 쓰인 cross entropy함수의 의미가 뭐라고 했었죠?

 

두 집합의 다른 정도!입니다.

 

우리는 두 집합이 동일해지길 원합니다. 그러므로 Cost function으로 쓰인 cross entropy 0으로 만들어 주면 됩니다.

 

다 맞춰서 0이 되도록! 유도를 해 가는 과정이기 때문에 'cross entropy를 최소화한다'라고 생각하시면 됩니다.

 

근데 우리가 뭘 바꿀 수 있나요? 뭘 바꾸면 Cost_function의 결괏값이 달라질까요?

 

위에 코드 식을 보시면 바꿀수 있는 게 \(W^0, W^1\) 이거 두 개밖에 없습니다. 사이즈를 유지한 채로 행렬 내부의 값들을 바꿔줘야 합니다.

 

변화! 

 

Cost의 변화를 알기 위해선 Cost값을 미분해보면 됩니다. 뭐에 대해 미분하면 될까요

 

우선 \(Cost\) 함수를 먼저 풀어 써보겠습니다.

[그림 1] Cost 함수를 풀어써본 모오습

분해는 조립의 역순이기 때문에 \(W^1\) 에 대해서 먼저 미분하도록 하겠습니다

식은 \(\frac {\partial Cost}{\partial W^1}  \)입니다.

[그림 2] cost 함수를 \(W^1\)에 대하여 편미분 해본 보습

 

[그림 3] \(\delta^2\) 를 풀어써본 모습 제곱 아닙니당 첨자입니다

 

[그림 4] 풀어낸 모습
[그림 5] Cost 함수를 \(W^1\)에 대해 편미분한 최종결과

 

뭐 중간 단계들은 복잡하고 이런저런 스킬들이 필요하지만!

 

최종 결과만 이해하시면 됩니다. 생각보다 쉬운 모습...입니다...ㅎ (어렵긴 한데 손으로 써보시면 이해되실 겁니다.....ㅎ)

 

너무 힘드셨죠..ㅎ

 

다음 포스팅에서 \(W^0\) 에 대한 미분도 계산해보도록 합시다..

댓글