2021 네이버 부스트캠프 - Ai tech

Week_7 CV-Autograd

미미수 2021. 9. 16. 16:15

Autograd 는 Automatic Gradient calculating API의 약자로서,

자동으로 gradient를 계산해주는 Deep Learning 특화 library 이다.

 

과거에는 backward pass로 미분값을 구할때 수식으로 전개해 일일히 대입하는 방법을 썼다.

autograd는 아래와 같은 computational graph를 사용해 자동으로 구할 수 있다.

 


 

Autograd

1. backward

backward는 backpropagation이다.

위 예시에서 눈에 띄는것은 보통 미분값을 구하고자 하는 변수가 y 라 할때,

y.backward()를 사용하는데, 사진에서는 backward(gradients)라고 되어 있다.

 

이 기능은 backprop의 chain rule을 살짝쿵 적용한 것으로, 위에서 내려오는 gradient가 스칼라 값일수도 있다는 것을 활용한것이다.

단순히, gradients라는 변수를 $\partial y$에 곱하는 역할을 한다.

 

 

2. Requires_grad = True

Requires grad가 True로 셋팅 되어 있을때는 gradient가 저장을 할 수 있는 변수로 생성이 된다. 

Requires_grad = False 인 변수에 backward함수를 실행하면 런타임에러가 발생한다.

 

 

3. Backward를 두번하면? retain_graph

에러가 발생합니다.

gradient는 backward할때마다 누적이 되기 때문에 [600, 0.6]이 나와야 합니다.

 

에러가 발생하는 이유는 메모리 때문입니다.

앞서 말했듯이, gradient는 computational graph를 통해 계산이 됩니다. computational graph의 전 과정을 컴퓨터가 계속 기억하고 있는것은 메모리 낭비이므로 이미 한번 gradient가 계산된 텐서는 computational graph에서 지워집니다. 따라서 에러가 발생하는것입니다.

 

메모리상에서 계속 유지하기 위해서는 retain_graph = True라는 설정을 넣으면 됩니다.

gradient가 정상적으로 축적되는것을 볼 수 있습니다.

 

 

'2021 네이버 부스트캠프 - Ai tech' 카테고리의 다른 글

Week 8/9/10 Level2- P Stage [Object Detection]  (0) 2021.10.15
Week_7 CV-Perceptual Loss  (0) 2021.09.24
Week_6 CV-Focal Loss  (0) 2021.09.14
Week_6 CV - Object Detection  (0) 2021.09.14
Week_6 Knowledge Distilation  (0) 2021.09.10