nn.Module — 모델 설계도
__init__에서 부품을 등록하고 forward에서 조립한다 — 모든 PyTorch 모델의 기본 패턴.
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 모델을 만들어봅시다
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 모델의 기본 패턴
nn.Module에서 데이터가 층을 통과하는 흐름을 정의하는 메서드는?
model(x)를 호출하면 forward(x)가 자동으로 실행된다.
nn.Linear(4, 8)의 파라미터 수는 총 몇 개인가? (편향 포함)
class MyModel(nn.___): — 빈칸은?
nn.Module에서 __init__()에 등록하지 않은 층은 model.parameters()에 포함되지 않는다.