본문 바로가기
Python Library/PyTorch

[PyTorch] 자동 미분 (Automatic differentiation)

by goatlab 2022. 1. 13.
728x90
반응형
SMALL

자동 미분 (Autimatic differentiation)

 

신경망을 학습할 때 가장 자주 사용되는 알고리즘은 역전파이다. 이 알고리즘에서, 매개변수 (모델 가중치)는 주어진 매개변수에 대한 손실 함수의 변화도(gradient)에 따라 조정된다.

 

이러한 변화도를 계산하기 위해 PyTorch에는 torch.autograd라고 불리는 자동 미분 엔진이 내장되어 있다. 이는 모든 계산 그래프에 대한 변화도의 자동 계산을 지원한다.

 

import torch # 입력 x, 매개변수 w와 b , 그리고 일부 손실 함수가 있는 가장 간단한 단일 계층 신경망을 가정

x = torch.ones(5)  # input tensor
y = torch.zeros(3)  # expected output
w = torch.randn(5, 3, requires_grad=True)
b = torch.randn(3, requires_grad=True)
z = torch.matmul(x, w)+b
loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y)
 

Tensor, Function과 연산그래프 (Computational graph)

 

 
신경망에서, w와 b는 최적화를 해야 하는 매개변수이다. 따라서 이러한 변수들에 대한 손실 함수의 변화도를 계산할 수 있어야 한다. 이를 위해서 해당 tensor에 requires_grad 속성을 설정한다.
 
(requires_grad의 값은 tensor를 생성할 때 설정하거나, 나중에 x.requires_grad_(True) method를 사용하여 나중에 설정할 수도 있다.)

 

연산 그래프를 구성하기 위해 tensor에 적용하는 함수는 Function 클래스의 객체이다. 이 객체는 순전파 방향으로 함수를 계산하는 방법과, 역방향 전파 단계에서 도함수(derivative)를 계산하는 방법이 있다. 역방향 전파 함수에 대한 참조 (reference)는 tensor의 grad_fn 속성에 저장된다.

 

print('Gradient function for z =', z.grad_fn)
print('Gradient function for loss =', loss.grad_fn)
Out:

Gradient function for z = <AddBackward0 object at 0x7f2675b74400>
Gradient function for loss = <BinaryCrossEntropyWithLogitsBackward object at 0x7f2675b74400>

 

https://tutorials.pytorch.kr/beginner/basics/autogradqs_tutorial.html

 

torch.autograd를 사용한 자동 미분 — PyTorch Tutorials 1.10.0+cu102 documentation

Note Click here to download the full example code 파이토치(PyTorch) 기본 익히기 || 빠른 시작 || 텐서(Tensor) || Dataset과 Dataloader || 변형(Transform) || 신경망 모델 구성하기 || Autograd || 최적화(Optimization) || 모델 저

tutorials.pytorch.kr

 

728x90
반응형
LIST

'Python Library > PyTorch' 카테고리의 다른 글

[PyTorch] 모델 파라미터 최적화  (0) 2022.11.21
[PyTorch] 패션 MNIST  (0) 2022.11.17
[PyTorch] 모델 매개변수 (Parameter)  (0) 2022.01.13
[PyTorch] 모델 계층 (Layer)  (0) 2022.01.13
[PyTorch] 신경망 모델 구성  (0) 2022.01.13