2022. 2. 2. 13:14ㆍDeep 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://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 |