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

배치, 로짓, 출력 헤드

~22 min · batches, logits, heads

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

배치가 계산 단위야

신경망은 예시 하나가 아니라 여러 예시를 묶은 배치 단위로 작동해. 이미지 32개로 이루어진 배치는 형태가 [32, 3, 224, 224]인 텐서고, 문장 배치는 [32, seq_len, hidden_dim] 형태야. 첫 번째 차원은 거의 언제나 배치 차원이야. 이건 고민하지 않고 바로 떠올라야 해. x[0]은 배치의 첫 번째 예시를 뜻해.

GPU를 제대로 활용하려면 배치 처리가 필요해. 예시 하나만 순전파하면 칩의 병렬 처리 능력 대부분을 낭비하게 돼. 배치 크기를 두 배로 늘리면 보통 예시당 처리 시간은 절반으로 줄어들어. 다만 메모리 대역폭이나 VRAM이 한계에 도달하기 전까지만 그래.

팁: 튜토리얼에서 예시 하나만 순전파한다면 머릿속으로 배치 처리 코드로 다시 써봐. 실제 학습 루프는 언제나 배치 단위로 작동하고, 단일 예시 코드는 설명을 위한 지름길일 뿐이야.

로짓과 확률

로짓은 최종 선형층이 내보내는 정규화되지 않은 원시 출력이야. 양수와 음수를 포함한 모든 실수가 될 수 있어. 확률은 로짓을 소프트맥스(다중 클래스)나 시그모이드(이진 분류)에 통과시켜 얻어. PyTorch의 분류 손실 함수는 확률이 아니라 로짓을 받아. 수치적 안정성을 위해 내부에서 소프트맥스를 적용하기 때문이야. 따라서 모델이 로짓을 반환하는 게 올바른 기본값이야.

출력 헤드

‘헤드’는 신경망의 내부 표현을 과제에 필요한 출력으로 바꾸는 최종 층 또는 작은 층 묶음이야. 분류에는 nn.Linear(hidden_dim, num_classes)를 써. 회귀에는 nn.Linear(hidden_dim, 1)을 쓰고, 다중 레이블 분류에는 nn.Linear(hidden_dim, num_labels)와 시그모이드, BCE를 함께 써. 임베딩 학습에는 L2 정규화된 projection을 사용해.

사전학습 모델을 새로운 과제에 미세 조정할 때 보통 교체하는 부분이 바로 이 헤드야. 백본은 그대로 두고 헤드만 새로운 레이블 집합에 맞춰 다시 초기화해.

원칙: 확률이 아니라 로짓을 반환하고, 알맞은 손실 함수와 짝지어. 소프트맥스는 시각화하거나 후속 코드에서 실제 확률이 필요할 때만 적용해.

Code

과제별 헤드를 갖춘 배치 분류기·python
import torch, torch.nn as nn

class Backbone(nn.Module):
    def __init__(self, in_dim, hidden_dim):
        super().__init__()
        self.body = nn.Sequential(
            nn.Linear(in_dim, hidden_dim), nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim), nn.ReLU(),
        )
    def forward(self, x):
        return self.body(x)

backbone = Backbone(in_dim=512, hidden_dim=256)
head_clf = nn.Linear(256, 10)
head_reg = nn.Linear(256, 1)
head_emb = nn.Linear(256, 64)

x = torch.randn(32, 512)
z = backbone(x)
print(head_clf(z).shape)                         # [32, 10] logits
print(head_reg(z).shape)                         # [32, 1]  predictions
print(nn.functional.normalize(head_emb(z), dim=-1).shape)  # [32, 64]

External links

Exercise

10-클래스 분류, 스칼라 회귀, 32-d 임베딩을 위한 헤드 3개를 가진 백본을 만들어. 예시 16개로 이루어진 배치를 세 헤드 모두에 순전파해. 각 헤드의 출력 형태가 사용할 손실 함수와 맞는지 확인해.

Progress

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

댓글 0

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

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