
645
17
기초부터 만드는 신경망
서의 속성에 자동으로 채워지기 때문에
_
grad
함수들의 결과를 별도로 저장하지 않아도 됩니다.
단지 순전파의 반대 순서로 각
_
grad
함수를 호출하여 각 함수가
out
.
g
에 접근하도록 하면 되죠.
def forward_and_backward(inp, targ):
# 순전파
l1 = inp @ w1 + b1
l2 = relu(l1)
out = l2 @ w2 + b2
# 사실 역전파에는 loss가 필요 없습니다!
loss = mse(out, targ)
# 역전파
mse_grad(out, targ)
lin_grad(l2, out, w2, b2)
relu_grad(l1, l2)
lin_grad(inp, l1, w1, b1)
이제
w1
.
g
,
b1
.
g
,
w2
.
g
,
b2
.
g
로 모델 파라미터의 그레이디언트에 접근할 수 있습니다. 모델을
성공적으로 정의했으니, 이번에는 정의한 모델을 파이토치의 모듈과 닮은 형태로 만들어보죠.
17.2.3
앞서 작성한 모든 함수는 순전파와 역전파를 계산하려고 정의했으며, 때에 따라 적절히 조합하
여 사용했죠. 하지만 이런 함수를 순전파와 역전파라는 관점에서 클래스 단위로 만들 수도 있
습니다. 즉
relu
와
relu
_
grad
함수의 역할을 한 클래스로 묶을 수 있습니다. 그리고