본문 바로가기
AI Framework/PyTorch

[PyTorch] 3주차: 자동 미분과 Autograd

by cogito21_python 2024. 5. 30.
반응형

강의 목표

  • PyTorch의 자동 미분 기능인 Autograd의 기본 개념 이해
  • Autograd를 사용한 기울기 계산 및 활용법 습득
  • 실제 문제에 Autograd를 적용하여 모델 학습 이해

강의 내용

1. 자동 미분 개념

  • Autograd란 무엇인가?
    • 자동 미분(Automatic Differentiation)은 기계 학습 모델의 학습 과정에서 기울기(Gradient)를 자동으로 계산하는 기능입니다.
    • PyTorch의 Autograd는 후방 전달(Backpropagation) 알고리즘을 사용하여 연산 그래프를 통해 기울기를 계산합니다.
  • 자동 미분의 원리
    • 연산 그래프(Computation Graph)
    • 기울기 계산을 위한 그래프의 역전파

2. 기본 개념 실습

  • Tensor의 requires_grad 속성
    • requires_grad=True로 설정된 Tensor는 연산 기록을 추적하여 기울기를 계산할 수 있습니다.
     
import torch

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print(x)
  • 기울기 계산
    • 기본 연산을 통해 생성된 Tensor의 기울기 계산
     
y = x + 2
z = y * y * 2
result = z.mean()

result.backward()  # 기울기 계산

print(x.grad)  # x의 기울기 출력

 

3. Autograd를 활용한 기울기 계산

  • 예제 1: 간단한 함수의 기울기 계산
    • $f(x) = x^2 + 3x + 2$ 에 대한 기울기 계산
x = torch.tensor(2.0, requires_grad=True)

y = x**2 + 3*x + 2
y.backward()

print(x.grad)  # x에서의 기울기 출력
  • 예제 2: 다중 변수를 사용하는 함수의 기울기 계산
    • $f(x, y) = 3x^2 + 2xy + y^2$ 에 대한 기울기 계산
x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)

z = 3*x**2 + 2*x*y + y**2
z.backward()

print(x.grad)  # x에서의 기울기 출력
print(y.grad)  # y에서의 기울기 출력

 

4. 연산 그래프 이해

  • 연산 그래프의 생성 및 기울기 계산 과정 이해
    • 각 연산이 그래프의 노드로 표현되고, 역전파를 통해 기울기가 계산됩니다.
a = torch.tensor([2.0, 3.0], requires_grad=True)
b = torch.tensor([6.0, 4.0], requires_grad=True)

Q = 3*a**3 - b**2
external_grad = torch.tensor([1.0, 1.0])
Q.backward(gradient=external_grad)

print(a.grad)  # a의 기울기 출력
print(b.grad)  # b의 기울기 출력

 

5. 실습 및 과제

  • 실습 과제
    • Autograd를 활용한 다양한 함수의 기울기 계산 실습
    • 주어진 함수에 대해 기울기를 계산하고, 기울기를 활용한 간단한 최적화 문제 해결
# 실습 과제 예시
# 1. 주어진 함수 f(x) = 4x^3 + 2x^2 + x 에 대해 x=1에서의 기울기를 구하세요.
x = torch.tensor(1.0, requires_grad=True)
y = 4*x**3 + 2*x**2 + x
y.backward()
print(x.grad)

# 2. 다중 변수 함수 f(x, y) = x^2 + y^3 에 대해 x=2, y=3에서의 기울기를 구하세요.
x = torch.tensor(2.0, requires_grad=True)
y = torch.tensor(3.0, requires_grad=True)
z = x**2 + y**3
z.backward()
print(x.grad)
print(y.grad)
  • 과제 제출
    • Jupyter Notebook 파일로 제출
    • 제출 기한: 다음 강의 시작 전까지
반응형