PyTorch - 최적화

JERRY·2025년 5월 19일
0

Deep Learning

목록 보기
25/35
post-thumbnail

자동 미분

autograd는 PyTorch에서 핵심적인 기능을 담당하는 하부 패키지이다.

autograd는 텐서의 연산에 대해 자동으로 미분값을 구해주는 기능을 한다.

  • 텐서 자료를 생성할 때, requires_grad인수를 True로 설정하거나
  • .requires_grad_(True)를 실행하면

그 텐서에 행해지는 모든 연산에 대한 미분값을 계산한다.

계산을 멈추고 싶으면 .detach()함수나 with을 이용해 torch.no_grad()를 이용하면 된다.

다음으로 이 x에 연산을 수행한다. 다음 코드의 y는 연산의 결과이므로 미분 함수를 가진다. grad_fn속성을 출력해 미분 함수를 확인 할 수 있다.

y.backward() 함수를 실행하면 x의 미분값이 자동으로 갱신된다. x의 grad속성을 확인하면 미분값이 들어 있는 것을 확인 할 수 있다. y를 구하기 위한 x의 연산을 수식으로 쓰면 다음과 같다.

y=i=143×xiy = \displaystyle\sum_{i=1}^4 3 \times x_i

이를 xix_i에 대해 미분 하면 미분 함수는 다음과 같다.

yxi=3\dfrac{\partial y}{\partial x_i} = 3

실제 미분값과 같은지 확인해보자.

backward()함수는 자동으로 미분값을 계산해 requires_grad인수가 True로 설정된 변수의 grad속성의 값을 갱신한다.
retain_graph 미분을 연산하기 위해서 사용했던 임시 그래프를 유지 할 것인가를 설정하는 것이다.
기본값은 False로 설정되어 있지만 동일한 연산에 대해 여러번 미분을 계산하기 위해서는 True로 설정되어 있어야한다.(tf.GradientTape에서 persistent와 같음)

torch.autograd.grad()함수를 사용해 tf.GradientTape처럼 사용할 수도 있다.

상황에 따라 특정 연산에는 미분값을 계산하고 싶지 않은 경우에는

  • .detach()함수
  • with torch.no_grad()



PyTorch 선형 회귀 구현

Gradient descent 방식

assign 대신에 data에 접근해서 값을 수정

tensor.data = 다른데이터

optimizer 사용하기

0개의 댓글