topic난이도 · 약 30

nn.Module — 모델 설계도

__init__에서 부품을 등록하고 forward에서 조립한다 — 모든 PyTorch 모델의 기본 패턴.

#nn.Module#nn.Linear#forward#모델 설계
왜 배우는가

GPT도, BERT도, Llama도 — 내부적으로 nn.Module을 상속한다. 모델의 '구조 정의'와 '실행'은 어떻게 분리되는가?

__init__에서 부품을 등록하고 forward에서 조립합니다

nn.Module 패턴: class MyModel(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(...) # 부품 등록 self.layer2 = nn.Linear(...) def forward(self, x): x = self.layer1(x) # 데이터 흐름 x = self.layer2(x) return x

nn.Module, nn.Linear, nn.Embedding, forward()

핵심 레이어설명
nn.Embedding(vocab, dim)토큰 ID → 벡터 (임베딩)
nn.Linear(in, out)행렬 곱 + 편향
nn.ReLU()활성화 함수 (음수 → 0)
nn.Softmax()확률 분포 변환
nn.Module 패턴 — __init__에서 부품 등록, forward에서 데이터 흐름 정의

가장 간단한 nn.Module 모델을 만들어봅시다

nn.Module을 상속하여 간단한 신경망을 정의. __init__에서 층 등록, forward에서 흐름 정의.

실행 결과

PyTorch 없이 nn.Module 패턴을 순수 파이썬으로 만들어봅시다

순수 파이썬으로 nn.Module 패턴을 재현.

nn.Module 구조설명
__init__()부품(층)을 등록하는 곳 — nn.Linear, nn.Embedding 등
forward()데이터가 층을 통과하는 흐름 정의 — 입력 → 출력
model(x)호출 시 forward(x)가 자동 실행 (__call__ 매직)
핵심 레이어설명
nn.Embedding토큰 ID → 벡터 변환 (어휘 크기 × 임베딩 차원)
nn.Linear행렬 곱 + 편향 — 파라미터 수 = in×out + out
nn.ReLU활성화 함수 — 음수를 0으로 변환하여 비선형성 추가
nn.Softmax출력을 확률 분포로 변환 (합=1)

GPT, BERT, Llama 모두 nn.Module을 상속하여 만든다 — 모든 PyTorch 모델의 기본 패턴

실기 드릴 5문항
edit실기 드릴 · 단답형

nn.Module에서 데이터가 층을 통과하는 흐름을 정의하는 메서드는?

check_circle실기 드릴 · OX

model(x)를 호출하면 forward(x)가 자동으로 실행된다.

edit실기 드릴 · 단답형

nn.Linear(4, 8)의 파라미터 수는 총 몇 개인가? (편향 포함)

edit실기 드릴 · 단답형

class MyModel(nn.___): — 빈칸은?

check_circle실기 드릴 · OX

nn.Module에서 __init__()에 등록하지 않은 층은 model.parameters()에 포함되지 않는다.