Ch.8 PyTorch로 나만의 AI 만들기

텐서 — AI의 레고 블록

PyTorch 텐서가 NumPy 배열 + GPU + 자동 미분임을 이해한다텐서의 생성, 연산, 속성을 다룰 수 있다requires_grad로 자동 미분을 체험한다

NumPy를 알면 PyTorch도 안다

GPT, Claude, Llama, Gemini — 거의 모든 주요 LLM이 PyTorch로 개발됩니다. 지금까지 NumPy로 배운 코드를 PyTorch로 바꾸면 GPU 가속과 자동 미분이 추가됩니다.

NumPy만으로도 되는데 왜 PyTorch가 필요할까?

PyTorch 텐서 — NumPy 배열에 GPU 연산과 자동 미분(Autograd)이 추가된 강력한 도구입니다.


article

핵심 내용

거의 같지만 더 강력합니다

텐서(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 텐서!

key

핵심 용어

📦

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() (오토그래드!)

edit_note

정리 노트

텐서 — 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 + 자동 미분이 추가된 것뿐

image

시각 자료

다이어그램: py-scene-tensor
check_circle

핵심 정리

  • 1PyTorch 텐서 = NumPy 배열 + GPU + 자동 미분
  • 2torch.tensor(), randn(), @ 연산자로 행렬 연산
  • 3requires_grad=True + backward()로 기울기 자동 계산

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작