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

다층 퍼셉트론

~25 min · mlp, fully-connected, depth

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

반드시 알아야 할 가장 단순한 신경망

MLP는 간단히 말해 선형층 → 비선형 활성화 → 선형층 → 비선형 활성화 → 선형층으로 이어지고, 마지막 선형층이 로짓을 만들어. 이 퀘스트에서 다루는 모든 아키텍처는 이 틀을 특정 목적에 맞게 바꾸거나 다듬은 형태야. CNN은 이미지에 맞는 합성곱으로 선형 연산을 대체하고, Transformer는 어텐션을 추가하며, 순환 신경망은 매 타임스텝마다 같은 MLP를 재사용해.

표 형태 데이터와 단순한 회귀·분류 문제에서는 은닉 유닛 64–256개로 이루어진 2-3층 MLP에 적절한 활성화 함수(ReLU/GELU)를 쓰는 구성이 합리적인 출발점이야. 잘 튜닝된 그래디언트 부스팅 모델을 이기는 경우는 드물지만, 이 분야의 나머지 내용을 배우기에는 올바른 구조야.

MLP를 지나는 텐서 크기

층을 지날 때마다 텐서 크기를 추적해. 입력은 x: [B, in_dim], 첫 번째 은닉 표현은 h₁: [B, hidden_dim], 두 번째 은닉 표현은 h₂: [B, hidden_dim], 출력은 y: [B, out_dim]이야. PyTorch 표기 방식에서 두 층을 잇는 가중치 행렬의 크기는 [out, in]이고, 편향의 크기는 [out]이야.

팁: 신경망 전체가 사실상 하나의 거대한 층으로 끝난다면, 신경망이 없는 것과 크게 다르지 않아. Multilayer의 핵심은 뒤쪽 층들이 조합해서 사용할 수 있는 중간 은닉 표현을 만드는 데 있어.

깊이와 너비가 바꾸는 것

너비는 층마다 유닛을 더 두어 하나의 추상화 수준에서 더 많은 특징을 병렬로 다루게 해. 깊이는 층을 더 쌓아 여러 추상화 사이에 더 풍부한 조합 구조를 만들게 해. 제대로 된 신경망에는 둘 다 필요해. 표 형태 데이터 문제는 대부분 적당한 너비(128–512)의 은닉층 2-3개면 충분하지만, 이미지와 텍스트에서는 깊이와 목적에 특화된 아키텍처가 더 큰 영향을 미쳐.

원칙: 은닉 표현이 MLP의 핵심이야. 출력층은 그 위에 얹혀 은닉 표현을 읽는 얇은 판독기일 뿐이야.

Code

텐서 크기를 명시한 MLP·python
import torch, torch.nn as nn

class MLP(nn.Module):
    def __init__(self, in_dim, hidden_dim, out_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(in_dim, hidden_dim),     # [B, in_dim] -> [B, hidden_dim]
            nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim), # [B, hidden_dim] -> [B, hidden_dim]
            nn.ReLU(),
            nn.Linear(hidden_dim, out_dim),    # [B, hidden_dim] -> [B, out_dim]
        )
    def forward(self, x):
        return self.net(x)

model = MLP(in_dim=20, hidden_dim=128, out_dim=3)
x = torch.randn(64, 20)
logits = model(x)
print(logits.shape)  # torch.Size([64, 3])
n_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print("params:", n_params)

External links

Exercise

입력 차원 28*28(flat MNIST), 은닉 차원 256, 출력 차원 10인 3층 MLP를 만들어. 무작위 배치 32개를 순전파하고 모든 중간 텐서 크기를 출력해. 손으로 계산한 값과 매개변수 수가 일치하는지도 확인해.

Progress

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

댓글 0

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

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