자 이제까지 데이터를 입력받으면 [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의 결괏값이 달라질까요?
위에 코드 식을 보시면 바꿀수 있는 게
변화!
Cost의 변화를 알기 위해선 Cost값을 미분해보면 됩니다. 뭐에 대해 미분하면 될까요
우선

분해는 조립의 역순이기 때문에
식은




뭐 중간 단계들은 복잡하고 이런저런 스킬들이 필요하지만!
최종 결과만 이해하시면 됩니다. 생각보다 쉬운 모습...입니다...ㅎ (어렵긴 한데 손으로 써보시면 이해되실 겁니다.....ㅎ)
너무 힘드셨죠..ㅎ
다음 포스팅에서
'Have Done > MLP' 카테고리의 다른 글
MLP from Scratch with Numpy [7 / 7] - 전체 코딩의 흐름 (0) | 2022.01.06 |
---|---|
MLP from Scratch with Numpy [6 / 7] - backpropagation2 (0) | 2022.01.06 |
MLP from Scratch with Numpy [4 / 7] - feed forward 코딩 흐름 (0) | 2022.01.05 |
MLP from Scratch with Numpy [3 / 7] - Activation (0) | 2022.01.04 |
MLP from Scratch with Numpy [2 / 7] - feed forward2 (0) | 2022.01.03 |
댓글