역전파 (Backpropagation) 유도하기

참고 자료: 모두의 연구소(https://www.youtube.com/watch?v=mmqkH2IK8to)

인공 신경망이 순전파 과정을 진행하여 예측값과 실제값의 오차를 계산하였을 때 어떻게 역전파 과정에서 경사 하강법을 사용하여 가중치를 업데이트를 한다. 이 과정을 직접 그려보고 이해해보자.

 

 

L번째 Layer의 K번째 데이터

L번째 Layer의 K번째 weight

G: non-linear activation function

 

 

마지막 weight(w11, w12, w21, w22) 업데이트 하기

 

첫번째 weight(w11)를 업데이트 하기

 

즉, weight를 업데이트 시키는 식은 기존 weight에 오차값(non-linear function이 고려된 보정된 오차 값)*초기 데이터를 빼는 식으로 학습이 된다.

w = w - learning_rate * delta(보정된 오차) * a(초기 데이터)

 

코드로 구현해서 chain rule 이해해보기

만약에 아래와 같은 코드가 있을때, chain rule이 어떻게 이루어질까

결과는 아래와 같을 것이다. 

requires_grad: 이 변수를 미분할 것이다. (이 옵션을 지정해주지 않으면, 미분을 할 수 없다.)

중간 변수(y, z, k)를 미분하기 위해서는 y.retain_grad()의 메소드를 활용한다.

- with torch.no_grad(): 이안에서는 미분을 해주지 않는다.(모델 테스트 시에는 불필요하게 메모리 쓸 필요 없기 때문!)

 

backward(): 미분진행,  backpropagation

 
x.grad: dk/dx에 5.을 입력한 결과를 출력