AutoGrad 구조 및 이해

2022. 2. 2. 13:14Deep Learning/PyTorch

torch.autograd는 신경망(NN) 훈련을 지원하는 PyTorch의 자동미분 엔진이다.

이 포스트를 읽으면, 어떻게 AutoGrad가 신경망 훈련을 돕는지 개념적인 이해를 할 수 있을 것이다.

 

신경망은 2가지 단계로 훈련이 일어난다.

1. Forward Propagation

2. Backward Propagation

 

전반적인 코드 흐름은 다음과 같다.

1. 모델 및 데이터를 생성 한다.

2. Forward pass : 입력 데이터를 모델로 예측한다.

3. 예측에 대한 loss값을 계산한다.

4. Backward pass : 각 모델 파라미터를 loss에 대해 미분하여 저장한다.

5. optimizer로 모델 파라미터의 최적값을 찾기 위해, 변수들을 업데이트 한다.

 

# AutoGrad에서의 미분

Tensor의 requires_grad=True로 설정하여 해당 Tensor의 모든 연산을 추적한다.

.backward()를 호출하면, 각 Tensor들의 미분 값을 계산하여 .grad에 저장한다.

 

만약 미분 연산이 필요하지 않거나, 값을 고정하고 싶은 경우에는 requires_grad=False로 설정하면 된다.

추가로 연산 도중에 미분연산을 제외하고 싶다면, torch.no_grad()의 컨텍스트 내에서 연산을 수행하면 된다.

 

# 계산 그래프

Forward pass에서, AutoGrad는 다음 2가지를 동시에 진행한다.

- 결과 Tensor를 위해 요청된 작업 실행

- DAG에서 작업의 미분 기능 유지

 

Backward pass는 DAG root에서 .backward()가 호출될 때 시작한다.

- 각 미분식 .grad_fn로 부터 미분값을 계산

- 각 Tensor의 .grad에 미분값을 누적하여 저장

- 연쇄 법칙을 이용하여, 단말 Tensor까지 전파

 

 

 

참고 : 

https://wikidocs.net/60754

https://youtu.be/MswxJw-8PvE

https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html

https://pytorch.org/tutorials/beginner/examples_autograd/two_layer_net_autograd.html

 

 

 

 

반응형

'Deep Learning > PyTorch' 카테고리의 다른 글

Module의 apply() 메서드  (0) 2022.01.28
PyTorch Containers  (0) 2022.01.28
Module 클래스  (0) 2022.01.28
PyTorch 란?  (0) 2022.01.28
Dataset의 기본 구성 요소  (0) 2022.01.28