본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

순전파: 입력에서 예측과 손실까지

~8 min · forward-pass, prediction, loss

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

계산그래프를 정방향으로 실행하기

순전파는 입력에서 시작해 모델의 연산을 정의된 순서대로 실행하고 출력을 만드는 과정이야. 분류망이라면 입력을 선형층과 활성함수에 통과시켜 logits를 만들고, 목표 라벨과 함께 교차엔트로피를 계산할 수 있어.

단순한 완전연결층은 로 쓸 수 있어. 하지만 실제 모델에는 합성곱, 어텐션, 정규화, 잔차연결, 조건 분기처럼 더 다양한 연산이 들어가. 핵심은 각 출력이 앞의 어떤 값들에 의존하는지 계산그래프에 남는다는 거야.

모양과 자료형도 순전파의 일부

  1. 배치 입력 의 마지막 축이 첫 층의 입력 특성 수와 맞아야 해.
  2. 중간 활성 의 모양은 다음 층의 계약과 맞아야 해.
  3. 분류 logits에는 보통 아직 softmax를 따로 적용하지 않고, 안정적인 교차엔트로피 함수에 바로 넘겨.
  4. 손실은 보통 배치의 예제별 손실을 평균하거나 합쳐 스칼라로 줄여.

순전파만으로도 추론은 할 수 있어. 학습에서는 프레임워크가 역전파에 필요한 중간값과 연산 관계를 함께 기록해. 평가 모드에서는 기울기 기록을 끄고 dropout과 정규화 층의 동작도 평가 규칙으로 바꿔야 해.

손실은 예측과 목표를 잇는 마지막 노드

순전파의 출력만 계산했다고 모델이 배운 건 아니야. 손실이 계산그래프의 마지막에 연결되고, 그 손실을 각 매개변수로 미분한 뒤 최적화기가 값을 바꿔야 학습 한 걸음이 완성돼.

순전파는 예측을 만들고 계산 의존성을 기록해. 역전파는 그 기록을 거슬러 기울기를 구하지만, 매개변수를 실제로 바꾸는 건 최적화기야.

Code

순전파 한 번 실행하기·python
import torch
import torch.nn as nn
import torch.nn.functional as F

# 2-layer 망 — forward pass 만
class TinyNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(4, 8)
        self.fc2 = nn.Linear(8, 3)

    def forward(self, x):
        h = F.relu(self.fc1(x))      # layer 1 + ReLU
        return self.fc2(h)            # layer 2 → logits

net = TinyNet()
x = torch.randn(1, 4)                # 1 sample, 4 feature
y_true = torch.tensor([2])           # 정답 클래스 인덱스

logits = net(x)                       # forward pass
loss = F.cross_entropy(logits, y_true)
print(f"loss: {loss.item():.4f}")

Exercise

PyTorch로 10 → 64 → 32 → 1 완전연결망을 만들고 임의 입력을 통과시켜. 각 층 뒤의 출력 모양을 기록하고 배치 축과 특성 축을 구분해.
Hint
nn.LinearF.relu를 사용해. 배치가 1이면 모양은 (1, 10) → (1, 64) → (1, 32) → (1, 1)로 바뀌어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.