0.
학교에서 역전파 알고리즘을 배우고 손으로 직접 계산까지해보고 과제풀이도 하고 시험에도 출제되었다.
다층 퍼셉트론에 대해 간략히 쓰다가 역전파에 대해서 간단하게 설명이 막혀버려서 ... 이렇게 글을 쓴다. 생각보다 마무리 부분을 더 잘 쓴거 같다. 그냥 계산 과정 보기 싫으면 마무리만 보면 핵심만 요약 했다.
너무 복잡하고 내가 직접한 것은 올리긴했지만 그래도 컴터로 작업하는건 너무 힘들어서 참고좀 했다... 감사합니다...어떤 싸움을 해오신겁니까
출처 : https://wikidocs.net/37406
1. Feed Forward(순전파)
다음 그림에서 순전파를 진행하겠다.
처음에는 가중치 값을 랜덤하게 준다.
각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉충 뉴런의 시그모이드 함수의 입력값이 된다.
식으로 보는게 더 이해가 빠르다.
z1=w1x1+w2x2 = 0.3 * 0.1 + 0.25 * 0.2 = 0.08
z2=w3x1+w4x2 = 0.4 * 0.1 + 0.35 * 0.2 = 0.11
이 다음으로 h1,h2를 구해야 하는데 이건 활성화함수고 시그모이드라고 하겠다.
h1=sigmoid(z1)=0.51998934
h2=sigmoid(z2)=0.52747230
(시그모이드 계산법이 더러우니 생략한다. ㅋㅋ.. relu 쓰면 개편하긴한데. )
그다음 h1, h2 를 아니... 또 z3,z4 를 구해보자
z3=w5h1+w6h2=0.45h1+0.4h2=0.44498412
z4=w7h1+w8h2=0.7h1+0.6h2=0.68047592
이제 다시 시그모이드함수에 저 값을 넣어주면 된다.
σ1=sigmoid(z3)=0.60944600
σ2=sigmoid(z4)=0.66384491
마지막으로 해야할 일은 예측값과 실제값의 오차를 계산하는 오차 함수를 선택해야한다.
보통 MSE를 사용하니까 우리도 여기서 MSE를 사용하자
E1=21(실제값1 - 예측값1)^2 = 0.02193381
E2=21(실제값2 - 예측값2)^2 = 0.00203809
E=E1+E2=0.024
이렇게 오차가 0.024임을 알 수 있다.
2. 역전파 1단계
순전파가 앞에서 부터 저렇게 값을 줬다면 역전파는 출력된 값에서 입력 으로 가면서 가중치를 업데이트해간다.
1단계가 뭐냐면 이게 조금 복잡하기 때문에 출력에서 가운데로 가는걸 1단계 가운데에서 입력으로 가는걸 2단계로 하겠다.
자 이걸 이용하자.
여기서 업데이트 해야 할 가중치는 w5,w6,w7,w8 이다.
이걸 업데이트 하기위해선 gradient descent와 Chain Rule을 이용해야한다.
다음 식은 L 은 오차함수를 미분하고, h는 활성화 함수를 미분하고, y는 위 그림에서 보면 z를 의미하며 순전파과정에서 쓴 식을 미분해서 사용한다.
그냥 다 하자
이걸 이제 미분해줄거다 시그마에대해...
시그모이드의 미분은
z3의 w5에 대한 미분은 그냥 h1이다. 위에 보면 일차식이기 때문이다.
h1=0.51998934
이제 이걸 맨 위에 식에 다 곱해주면 0.02592286이 나온다.
이제 경사하강법을 통해 가중치를 업데이트 해주자.
하이퍼파라미터에 해당하는 학습률은 0.5라고하자.
3. 역전파 2단계
아까 한 과정을 똑같이 옆에 해주면 된다.
(반올림때려서 눈으로봐도 값이 다르지만 그냥 그런가보다.. 하자..)
나머지 w2+=0.25,w3+=0.4,w4+=0.35 로 계산 가능하다
4. 마무리
이 고생을 왜했는가?
자 우리는 입력을 넣었을 때 우리가 알고 있는 정답인 출력이 나오기를 기대한다. 근데 그게 쉽지가 않다. 그러기 위해서 우리는 다음 다층 퍼셉트론을 이용해서 그 정답과 아주 유사하게 나오는 학습파라미터 즉 w, 가중치를 찾아주고 싶은거다.
당연히 우리는 w에 대해서 모른다. 뭘 넣어야 저런 출력이 나오는지 직관적으로 이해 할 수 없다.
그래서 나온 방법이 위 방법이다. 요약하면
- 일단 w에 랜덤한 아무 숫자나 넣은다.( 좋고 적합한 수를 넣으면 계산량이 줄겟지?)
- 그 다음 feed forward 로 위에서 정한 w가 얼마나 정확한지 MSE오차함수를 이용해 판단한다.
- 그리고 이제 w를 업데이트 해야하므로 출력에서 입력쪽으로 그래디언트 디센트를 이용해서 미분값을 구해서 학습률을 업데이트 해준다.
- 이렇게 되면 우리는 새로운 w를 갖게 된다.
- 위에서는 안했지만 이런 새로운 w로 feed forward 하면 오차가 감소한 것을 확인할 수 있다.
- 이게 바로 1Epoch 한거다. 우리는 이걸 100번,1000번, 10000번 하니까 인간이 절대 컴터를 못이기는거 같다.
다음은 내가 과제로 직접 눈물흘리며 손으로 푼건다.
https://github.com/dhy02094/STUDY_TH/blob/master/확률과정론/역전파 계산.pdf
Uploaded by Notion2Tistory v1.1.0