반응형

오차역전파

 

역전파(backpropagation)란?

인공 신경망을 읽다 보니 역전파가 나온다.

조직을 연상시키는 역전파는 아니겠지?

먼저 전파를 알면 역전파가 쉽다.

이 찌라시 전파시켜~

라디오 전파? 아니다.

멀리 퍼트려 알린다는 의미의 전파다.

역전파에서 역은 반대 방향을 의미한다.

인공 신경망에서 전파와 역전파.

인공 신경망에서 전파는 각 계층으로 입력된 데이터가 결과층까지 전달된다는 의미다.

입력에서 값이 들어오면 가중치를 곱해서 다음 히든 계층으로 전파된다.

여러 층을 거치고 마지막 히든층에서 최종 계산된 값이 결과층으로 전파된다.

입력에서 결과까지 값이 이동하는 것을 전파라 생각하면 된다.

 

전파

 

그런데 결과로 받은 값이 원래 기대한 값과 다를 수 있다.

강아지 사진을 보여줬는데 고양이나 말로 나왔다면 기대한 값이 아니다.

그렇다면 가중치 값이 잘못 설정되었다 볼 수 있다.

역으로 전파하면서(뒤로 다시 돌아가) 오차에 대한 가중치 값을 조정한다.

역전파

바로 역전파다.

강아지라고 나올 때까지 계속 돌려보낸다.

오차역전파

이제 역전파가 무슨 의미인지 안다.

오차 또한 강아지를 인식 못하고 다른 동물로 결과가 나오는 것을 말한다.

오차를 통해 스스로 학습하고 가중치를 고쳐 나간다.

이것이 바로 인공 신경망의 오차역전파이다.

사실 AI 프로그램을 개발하고 처음 값을 넣을 때 오차가 난다.

마치 찌개를 끓일 때 미세하게 간을 맞춰 가는 과정과 비슷하다고 본다.

 

실제 값으로 오차역전파 구현

이론적으로 이해는 했으니 이제 실제 값으로 계산을 해보자.

살짝 복잡할 수도 있으니 하나씩 짚어가며 계산을 해보자.

 

계층 간 이동시 각각 가중치를 곱한 값을 더해서 다음 계층으로 전달한다.

입력 계층에서 값을 받아 다음 계층으로 전파한다.

계층

입력 계층 1에서 w11은 출력 계층 1로 w12는 출력 계층 2로 전파된다.

입력 계층 2에서 w21은 출력 계층 1로 w22는 출력 계층 2로 전파된다.

이렇게 전파되는데 값이 다르면 오차값 e가 된다.

결괏값에 대한 오차다.

 

출력 1의 오차는 e_o_1이라고 정하자.

출력 2의 오차는 e_o_2라고 정하자.

오차를 역으로 가중치 비율만큼 다시 돌려보내야 한다.

오차

 

e_o_1은 입력 계층1의 w11과 입력 계층2의 w21 가중치를 사용했다.

e_o_2는 입력 계층1의 w12와 입력 계층2의 w22 가중치를 사용했다.

 

가중치 비율은 어떻게 구할까?

전파일 때 가중치 비율을 구해본다.

입력 계층1의 가중치는 w11과 w12다.

두 값의 합을 분모로 하고 w11과 w12를 각각 분자로 넣고 계산하면 각 가중치의 비율이 나온다.

비중

이렇게 입력 계층1과 2의 가중치에 대한 비율을 구했다.

결과에 오차가 발생했고 다시 돌아가야 한다.

이것을 역전파라고 하는데 전파와 약간 식이 다르다.

그 이유는 시작점이 어디냐에 따라 가중치를 사용해야 하기 때문이다.

전파일 때는 입력 계층에서 전달되는 가중치들을 잘 묶어서 비율을 계산한다.

역전파일 때는 출력 계층이 기준으로 받은 가중치들을 활용해야 한다.

입력 계층1의 오차는 출력 계층1의 w11 지분과 출력 계층2의 w12 지분을 사용한다.

 

역전파

 

실제 값을 넣어봤다.

 

출력1의 정답은 0.9인데 출력값은 0.3이면 오차 e1은 0.9 - 0.3 = 0.6이 된다. (e1 = 0.6)

출력2의 정답은 0.4인데 출력값은 0.1이면 오차 e2는 0.4 - 0.1 = 0.3이 된다. (e2 = 0.3) 

가중치 w11 = 1, w12 = 3, w21 = 2, w22 = 4라고 하자.

비중 구하는 식에 값을 대입하면 다음과 같이 나온다.

w11비중 = 1/4, w12비중 = 3/4, w21비중 = 2/6, w22비중 = 4/6이다.

소수점으로 바꾸면

w11 비중  = 0.25, w12 비중  = 0.75, w21 비중  = 0.33, w22 비중  = 0.67이다.

이 값을 가지고 역으로 전파해본다. 오차역전파~

 

e_i1 = e1(0.6) * (w11 비중  / (w11 비중  + w21 비중  )) + e2(0.3) * (w12 비중  / (w12 비중  + w22 비중  ))

= 0.6 * (0.25/(0.25 + 0.33)) + 0.3 * ( 0.75 / (0.75 + 0.67))

=0.42

 

여기서 오차는 정답(강아지)과 출력값(고양이, 말 등) 간의 차이를 의미한다.

강아지, 고양이 등 동물 이름이지만 노드에서는 확률 숫자로 판단한다.

정규화

갑자기 왜 정규화가 나오는가?

우리가 위 식에서 정규화를 위해 분모 (w11 + w12)를 사용한다.

정규화란 서로 다른 값을 일정 범위 표준 비율로 맞추어 계산하기 편하게 만드는 과정이다.

즉 30과 40에 대한 비율을 구한다면,

30+40 = 70을 분모로 잡고 30/70과 40/70을 구해서 비율을 맞추는 거다.

 

마무리

이렇게 어려운 오차역전파를 또 쉽게 접근해 봤다.

그래도 사실 볼 때마다 계산식을 다시 보곤 한다.

특히 잠 올 때 보면 다시 이해가 안 되곤 해서 정신 멀쩡할 때 보려고 이 글을 썼다.

잘못된 부분은 댓글로...

반응형