
경사 하강법을 사용하여 가중치를 변경하는 학습 알고리즘을 정리해보면 아래와 같다.
그럼 이전에 다루었던 예제를 통해서 역전파 알고리즘에 대해서 알아보자~👍

우린 바로 이전 VELOG에서 순방향 패스 과정을 걸쳐 출력값 유닛 y에 대해
nety = 0.89239
outy = 0.709383
으로 구했던 바 있다.
🤷♀️참고
nety는 일반 가중치와 바이어스로 도출된 출력값,
outy는 활성화 함수를 거쳐서 나온 최종 출력값을 의미한다.
그렇다면 우리가 원하던 출력값과의 오차를 손실함수 MSE를 사용하여 구해보면 아래와 같다.
E = 0.5 x (targety - outy)^2
= 0.5 x (0.0 - 0.709383)^2
= 0.251612
우리는 신경망의 각 가중치를 업데이트하여 실제 출력이 목표 출력에 가까워 지도록 하여
신경망 전체의 오차를 최소화하여야 한다.
아래는 w7이 총 오차에 주는 영향에 대해 게산하기 위한 과정이다.
즉 E(오차)를 w7에 대해 미분한 값이다!
체인룰을 적용하면 아래와 같이 표현 가능하다.

각각에 대해서는 우리가 값을 도출해낼 수 있을 것이다.
첫 번째 o1에 대한 E의 변화량은 오차 계산방식(여기서는 MSE함수)의 미분값
두 번째 zo1에 대한 o1의 변화량은 활성화 함수(여기서는 시그모이드 함수)의 미분값
세 번째 w7에 대한 zo1의 변화량은 이전에 입력값에 대한 출력값을 도출해내는 함수의 미분값으로 표현할 수 있을 것이다.
그 후에 이 값을 알아내면 아래의 식에 대입하여 새로운 가중치값으로 업데이트 해주면 된다!🥹

위의 방식과 똑같이 진행하면 된다.
마지막으로는 다시 손실함수를 측정하여서 모델이 개선되었는지 여부를 판단하면 된다.
처음에 오차가 매우 조금 줄어든다고 느낄 수 있는데, 해당 과정을 10000번 이상씩 진행하면 그 차이가 커지고 더 좋은 가중치를 발견할 수 있을 것이다.
흑흑 어렵다...수학공식이 나오기 시작했다!
오랜만에 미분도 해보고 직접 손으로 써보기도 하면서 이해하니까 재밌는거같기도하다,,, 다시 고등학생으로 돌아간 느낌?ㅎㅎ
역시 난 인공지능이랑 잘 맞아! 수학이 어려워도 재밌다 :)