변수와 함수의 관곌르 이용하여 역전파를 시도해보겠습니다. 우선 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
이상으로 모든 역전파가 끝났습니다.
댓글 없음:
댓글 쓰기