페이지

2022년 8월 12일 금요일

7.2 역전파 도전!

 변수와 함수의 관곌르 이용하여 역전파를 시도해보겠습니다. 우선 y에서 b까지의 역전파를 시도해보죠.


이 부분은 다음과 같이 구현할 수 있습니다.

y.grad = np.array(1.0)

C = y.creator # 1. 함수를 가져온다.
b = C.input # 2. 함수의 입력을 가져온다.
b.grad = C.backward(y.grad) # 3. 함수의 backward 메서드를 호출한다.

y의 인스턴스 변수 creator 에서 함수를 얻어오고, 그 함수의 input에서 입력 변수를 가져왔습니다. 그런 다음 함수의 backward메서드를 호출합니다. 이어서 변수 b에서 a로의 역전파를 보겠습니다.

B = b.creator # 1. 함수를 가져온다.
a = B.input   # 2. 함수의 입력을 가져온다.
a.grad = B.backward(b.grad) # 3. 함수의 backward메서드를 호출한다.

똑같은 흐름입니다. 구체적으로 다음과 같은 순서로 진행됩니다.

1. 함수를 가져온다.

2. 함수의 입력을 가져온다.

3. 함수의 backward메서드를 호출한다


마지막으로 변수 a에서 x로의 역전파까지 진행합니다.\

 A = a.creator  #1. 함수를 가져온다.
 x = A.input    # 함수의 입력을 가져온다.
 x.grad = A.backward(a.grad)    # 3. 함수의 backward메서드를 호출한다.
 print(x.grad)

3.297442541400256

이상으로 모든 역전파가 끝났습니다.


댓글 없음: