Ch.8 PyTorch로 나만의 AI 만들기
텐서 — AI의 레고 블록
NumPy를 알면 PyTorch도 안다
GPT, Claude, Llama, Gemini — 거의 모든 주요 LLM이 PyTorch로 개발됩니다. 지금까지 NumPy로 배운 코드를 PyTorch로 바꾸면 GPU 가속과 자동 미분이 추가됩니다.
NumPy만으로도 되는데 왜 PyTorch가 필요할까?
PyTorch 텐서 — NumPy 배열에 GPU 연산과 자동 미분(Autograd)이 추가된 강력한 도구입니다.
핵심 내용
거의 같지만 더 강력합니다
텐서(Tensor), GPU 가속, 자동 미분(Autograd)
텐서를 만들고 행렬 연산해봅시다
💡 PyTorch는 로컬 환경에서 실행하세요 (pip install torch)
import torch
# === 텐서: NumPy 배열 + GPU + 자동 미분 ===
# 1. 텐서 생성
x = torch.tensor([1.0, 2.0, 3.0])
print(f"텐서: {x}")
print(f"크기: {x.shape}")
print(f"타입: {x.dtype}")
# 2. 행렬 연산 (NumPy와 거의 동일)
A = torch.randn(3, 4) # 3×4 랜덤 행렬
B = torch.randn(4, 2) # 4×2 랜덤 행렬
C = A @ B # 3×2 결과
print(f"\n행렬 곱셈: {A.shape} × {B.shape} = {C.shape}")
# 3. 자동 미분 — PyTorch의 핵심!
w = torch.tensor(0.0, requires_grad=True) # "기울기 추적"
target = torch.tensor(3.0)
loss = (w - target) ** 2
print(f"\nw = {w.item():.4f}, 손실 = {loss.item():.4f}")
# 역전파 — 한 줄로 기울기 계산!
loss.backward()
print(f"기울기 (∂L/∂w) = {w.grad.item():.4f}")
print(f"수동 계산: 2 × ({w.item():.4f} - 3) = {2 * (w.item() - 3):.4f} (일치!)")실행 결과
순수 파이썬으로 텐서 연산과 자동 미분을 구현해봅시다
# === 순수 파이썬 텐서 + 자동 미분 ===
class Tensor:
"""미니 텐서: 값 + 기울기 추적"""
def __init__(self, data, requires_grad=False):
self.data = data # 실제 값
self.grad = 0.0 # 기울기
self.requires_grad = requires_grad
def __mul__(self, other):
result = Tensor(self.data * other.data)
# 역전파 시 기울기 전파 기록
result._backward = lambda g: (
setattr(self, 'grad', self.grad + other.data * g),
setattr(other, 'grad', other.grad + self.data * g),
)
result.requires_grad = True
return result
def backward(self, grad=1.0):
if hasattr(self, '_backward'):
self._backward(grad)
# 1. 텐서 생성 (w는 학습할 가중치)
x = Tensor(3.0)
w = Tensor(2.0, requires_grad=True)
# 2. 순전파: y = x * w
y = x * w
print(f"x = {x.data}, w = {w.data}")
print(f"y = x * w = {y.data}")
# 3. 역전파: dy/dw = x, dy/dx = w
y.backward(1.0)
print(f"\n자동 미분 결과:")
print(f" dL/dw = {w.grad} (= x의 값)")
print(f" dL/dx = {x.grad} (= w의 값)")
# 4. 경사하강법 시뮬레이션
lr = 0.1
w_new = w.data - lr * w.grad
print(f"\n경사하강법 (lr={lr}):")
print(f" w: {w.data} → {w_new}")PyTorch에서 기울기를 자동으로 계산하려면 텐서 생성 시 어떤 옵션이 필요한가요?
PyTorch의 행렬 곱셈 연산자(@)는 NumPy와 동일하다.
PyTorch 텐서를 GPU에서 연산하려면 어떤 메서드를 사용하나요?
다음 코드의 빈칸을 채우세요. import torch x = torch.___([1.0, 2.0, 3.0]) # 리스트에서 텐서 생성
torch.___([1.0, 2.0, 3.0])
PyTorch 텐서와 NumPy 배열은 메모리를 공유할 수 있다.
PyTorch 텐서!
핵심 용어
import numpy as np
→ import torch
np.array([1,2,3])
→ torch.tensor([1,2,3])
a @ b
→ a @ b (동일!)
(CPU만)
→ a.to('cuda') ([[GPU]] 연산!)
수동 기울기 계산
→ loss.backward() (오토그래드!)
정리 노트
텐서 — NumPy 배열의 진화형
NumPy → PyTorch 전환
- 배열 생성
- np.array → torch.tensor (거의 동일한 문법)
- 행렬 곱
- @ 연산자 동일하게 사용 가능
- GPU 가속
- .to('cuda') 한 줄로 GPU 연산 전환
- 자동 미분
- requires_grad=True + backward()로 기울기 자동 계산
PyTorch만의 강점
- 오토그래드
- 순전파 시 모든 연산을 자동 기록 → backward()로 역전파
- GPU 병렬 처리
- 대규모 행렬 연산을 수십 배 빠르게 실행
- 딥러닝 생태계
- GPT, Claude, Llama 등 거의 모든 LLM이 PyTorch 기반
NumPy를 알면 PyTorch도 안다 — 문법은 거의 동일하고, GPU + 자동 미분이 추가된 것뿐
시각 자료
핵심 정리
- 1PyTorch 텐서 = NumPy 배열 + GPU + 자동 미분
- 2torch.tensor(), randn(), @ 연산자로 행렬 연산
- 3requires_grad=True + backward()로 기울기 자동 계산
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작