반응형

ㅁ 개요

 o 지금까지 앞으로 전진(순 전파)하면서 입력 값과 가중치를 연산하여 신호를 전달했다. 
 o 다음으로는 결과값에 대해 target 값과 모델의 결과 값을 비교해 오차를 계산
 o 오차를 이용해 가중치를 업데이트하여 모델을 정교하게 개선할 수 있지 않을까?
 o 그리고 Backpropagation이지만  앞에 왠만하면 Error를 붙여서 Error Backpropagation이라고 하자.
 o 그렇다면 하나이상 입력값이 왔을 때 어떻게 에러를 전달할 것인가?
  - 그냥 1/n 하여 균등 전달 하는 방법도 있고,
  - 가중치(Weight)에 비례하여 전달하는 방법이 있다. 가중치가 크면 클수록 영향이 크니까 에러도 많이 반영해야 하는 것이 아닌가? 라는 접근법이라고 보면 될 것이다.

w11와 w21의 가중치에 비례해 나뉘어 연결된 노드에 전달해야한다.
e1은 w11과 w21에 영향을 끼친다.

w11 업데이트 $$ w_{11} / (w_{11}+w_{21}) $$

w21 업데이트 $$ w_{21} / (w_{11} + w_{21}) $$

 

예시로 w11 = 4, w21 = 2라고 가정할때
$$ 4/(4+2) = 4/6 = 2/3 $$ $$ 2/(4+2) = 2/6 = 1/3 $$


ㅁ Backpropagation Errors Frome more output node

출력계층의 오차를 이용해 출력계층에 연결된 노드들의 가중치를 업데이트할 수가 있다.
그런데 계층2처럼 히든계층은 오차가 나오지 않기때문ㅇ ㅔ역전파를 할 수가 없다.
계층1(입력계층)과 계층2(히든계층)에서는 역전파를 구할 수가 없다. 

은닉계층의 Target Value가 없고, Target Value는 최종 출력노드만 가지고 있다.

은닉노드의 오차값은 어떻게 구할 것인가?
-> 은닉노드에서 출력 노드로 나갈때 오차를 나누어 전달하거나
-> 연결된 오차를 재조합하여 은닉계층의 노드 에러로 사용하면 어떨까?

 

ehidden,1는 연결노드 w11, w12로 나뉘어 전달되는 오차의 합이다. $$ e_{hidden,1} = (e_{hidden,1} * w_{11} / (W_{11} + w_{21})) + (e_{hidden,1} * w_{21} / (W_{12} + w_{22})) $$


$$ e_{hidden,1} = (e_{output1} * w_{11} / (w_{11} + w_{21} )) +  (e_{output2} * w_{12} / (w_{12} + w_{22} )) $$ 

ehidden1의 값은 연결노드 w11, w22로 나뉘어 전달되는 오차의 값이다. 

output 레이어에서 계산하면 다음과 같다.
$$ e1 = 0.275 = 0.175 + 0.1 $$ $$ e2 = 0.725 = 0.525 + 0.2 $$

 

그럼 히든 값의 가중치를 도출할 수 있으니까 이 값으로 다시 히든 레이어에서 똑같이 계산해주면 된다.
$$ e1 = 0.597 = 0.183 + 0.414 $$ $$ e2 = 0.403 = 0.092 + 0.311 $$


역전파도 계산해보니까 똑같이 곱셈의 합으로 나타낼 수 있을 것 같다. 
오차 역전파도 행렬의 곱으로 나타낼 수 있고, 이렇게 복잡하고 단순한것은 컴퓨터에게 맡기면 된다.
그럼 오차의 행렬 표현은 다음과 같이 나타낸다.

오차의 행렬 표현

 

은닉 계층의 행렬 표현은 다음과 같이 표현이 가능하겠다.

순정파일때 행렬은 세로로 써갔지만,
역전파는 가로로 써가면 된다.
이미 만들어진 가중치를 바꾸면 될 것 같고, 그게 전치행렬이다.
(~~~.T)로 썻던것! 
아래와 같이 셔옹할 수 있을 것 같다! 

역전파의 전치행렬 표현
기존에 만들어뒀가중치를 전치행렬하면 역전파에서 사용 가능


이렇게하면 할 수 있는 고민들
어차피 수식에서 가중치가 크면 더 많은 출력 오차가 들어온다.
신경망이 학습을 반복하면서 스스로 가중치를 찾아간다.
Feedforwarding & Backpropagation 모두 행렬 곱 사용이 가능하다. 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기