[딥러닝 Express] Chapter 06. MLP(다층 퍼셉트론) - (2)

배규리·2024년 1월 11일

AI 기초

목록 보기
11/32
post-thumbnail

6. 역전파 학습 알고리즘

경사 하강법을 사용하여 가중치를 변경하는 학습 알고리즘을 정리해보면 아래와 같다.

  1. 가중치와 바이어스를 0부터 1사이의 난수로 초기화한다.
  2. 수렴할 때까지 모든 가중치에 대하여 다음을 반복한다.
  3. 손실함수 E의 그래디언트를 계산한다.(E를 w에 대하여 미분한 값)
  4. w(t+1) = w(t) + 학습률 * (손실함수 E의 그래디언트)

그럼 이전에 다루었던 예제를 통해서 역전파 알고리즘에 대해서 알아보자~👍


7. 역전파 알고리즘을 손으로 계산해보자.

순방향 패스

우린 바로 이전 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번 이상씩 진행하면 그 차이가 커지고 더 좋은 가중치를 발견할 수 있을 것이다.


흑흑 어렵다...수학공식이 나오기 시작했다!
오랜만에 미분도 해보고 직접 손으로 써보기도 하면서 이해하니까 재밌는거같기도하다,,, 다시 고등학생으로 돌아간 느낌?ㅎㅎ
역시 난 인공지능이랑 잘 맞아! 수학이 어려워도 재밌다 :)

참고자료
https://amber-chaeeunk.tistory.com/18

profile
백엔드 개발은 취미인 AI 개발자🥹

0개의 댓글