Autograd


  • Automatic gradient의 약자로 Automatic differentiation라고도 불린다.
  • 기본적으로 행렬 연산을 하는 라이브러리로 대부분 DL library의 고유한 기능이다.
  • 과거에는 gradient를 일일히 손으로 계산하고 backward 를 수식으로 전개하여 일일히 구현을 해줬어야 한다.
  • Autograd의 Computational graph를 통해 Automatic differentiation을 편하게 구현할 수 있게 되었다.

Autograd - Tutorial


  1. backward
import torch
x = torch.randn(2, requires_grad = True)
y = x * 3
gradients = torch.tensor([100,0.1],dtype=torch.float)
y.backward(gradients) # gradients와 y함수를 무언가로 미분한 값의 곱
print(x.grad) # y함수를 x에 대해 미분

## 여러번 backward
# #y.backward(gradients,retain_graph=True)
# print(x.grad)
# y.backward(gradients)
# print(x.grad)
  • chain rule 을 이용한 back propagation 알고리즘 사용
  • backward를 호출하게 되면 중간 계산 과정은 저장하는 것이 아니라 날려버리기에, backward를 두 번 호출하게 되면 에러가 나타난다.
  • backward를 두 번 호출하고 싶으면 retain_graph =True를 설정하여 중간 계산 과정을 저장하여야 함.
  1. grad_fn
x = torch.randn(2, requires_grad=True)
y = x*3
z = x/2
w = x + y
print(w,y,z, end="\n")
  • 각 연산별 backward fucntion을 출력해준다.
  1. Class activation mapping (CAM)
  • hook: register_Forward_hook
  • register hook을 통해 중간 계층에 있는 결과와 gradient를 저장할 수 있다.

0개의 댓글