Loading [MathJax]/jax/output/CommonHTML/jax.js
Backpropagation

앞서서 Feedforward를 통해서 weight 값을 update 하는 방법을 알았다.

Feed forward 방식의 update는 Multi-layers가 있는 Neural Network에서는 쉽게 사용이 어렵다.

그래서 나온 방식이 Backpropagation이다.

우선 앞서 나온 내용을 복습해야 한다.

2021.07.17 - [AI] - Gradient Descent

- Sigmoid activation function

σ(x)=11+ex

- Output (prediction) formula

ˆy=σ(w1x1+w2x2+b)

- Error function

Error(y,ˆy)=ylog(ˆy)(1y)log(1ˆy)

- The function that updates the weights

wiwi+α(yˆy)xi

bb+α(yˆy)

2021.07.18 - [AI] - Feedforward

- Matrix Calculate

ˆy=σ(w211w221w231)σ(w11w12w21w22w31w32)(x1x22)

 

다음과 같은 다중 Neural Networks가 있다고 생각해 보자.

이것을 Matrix로 표현하면 아래와 같다.

ˆy=σ(w211w221w231)σ(w11w12w21w22w31w32)(x1x21)

여기서 Layer 0의 Matrix는

Layer0=(w11w12w21w22w31w32)

이고 Layer 1은

Layer1=(w211w221w231)

가 된다.

각 가중치별 Error Function의 Vector 형태로 나타내면 은 EW011 의 형태로 나타나게 된다. 이것을 표현하면 아래와 같다.

E=(EW011EW012EW111EW021EW022EW121EW031EW032EW131)

핵심은

  • 각 가중치의 변화가 E 의 위치에 얼마나 영향을 주는가?

가 된다.

이것은 weight의 업데이트에서 사용할 수 있다.

wi=wiαE/wi 

이 공식을 아래와 같이 표현 가능하다.

wijwijα(EW0ij)

이제 미분에서 나오는 Chain Rule에 대해서 이해하자.

f(x) = y일때 y = 3x일 경우 y에 대한 x의 미분을 하면 결과는 3이된다. 이 결과를 갖는 y로 z를 미분하면 이것은 2가 되고 이 두개의 미분한 결과 값은 궁극적으로 z를 x로 미분한 값과 같게 된다.

z/x=y/xz/y

로 나타낼 수 있다.

이것을 Neural Network 관점에서 풀어보자면 다음과 같이 말할 수 있다.

  • Feed forward는 여러개의 함수를 곱한 결과물이다.
  • Back Propagation은 곱한 결과물을 미분하는 것이다.

이제 결과의 미분을 어떻게 Back Propagation하는지 위의 그림에서 z의 결과 값을 6.6로 만약에 변경했다고 생각해 보자. 이것은 기존 결과값에 10%를 더한 목표가 된다.

  • 6.6 = 2y = 3.3 = y = 3x = 1.1 = x

x가 1이 들어왔을 때 y가 3.3이 되기위한 weight는 3.3이 됨으로

아래와 같이 weight가 update 될 수 있다.

x의 weight 값을 10% 증가 시킴으로써 목표하는 z의 값을 얻어 낼 수 있다.

반대로 y의 weight값을 10% 올려서 목표하는 z의 값을 역시 얻어 낼 수 있게 된다.

결국 핵심은 x의 값이 z라는 값에 얼마의 변화량을 일으키냐가 핵심이 된다.

그럼 다시 본론으로 돌아가 보자.

이 그림은 다음과 같이 나타낼 수 있다.

E=(EW011EW012EW111EW021EW022EW121EW031EW032EW131)

이 것을 바탕으로 Layer 0 (영어로 Superscript라고 부른다)의 W11E 에 어떤 영향을 주는지 Chain rule을 사용해 보자.

EW011=Eˆyˆyhhh1h1W011

이중에 h1 변화에 따른 h의 변화율은 다음과 같이 표현 할 수 있다.

h=W111+W112

일때 h1으로 미분하면

h/h1=W111σ(h1)(1σ(h1))

이 된다.

Sigmoid의 미분은 다음 내용을 참고하자.

https://towardsdatascience.com/derivative-of-the-sigmoid-function-536880cf918e

2021.07.17 - [AI] - Sigmoid Function

이에 대한 관련 코드는 다음 github를 참고 하자.

https://github.com/udacity/deep-learning-v2-pytorch/tree/master/intro-neural-networks/student-admissions

728x90
반응형

'AI' 카테고리의 다른 글

Sum of the squared errors  (0) 2021.08.01
Predicting Student Admissions with Neural Networks  (0) 2021.08.01
Feedforward  (0) 2021.07.18
Gradient Descent  (0) 2021.07.18
Error Function  (0) 2021.07.18