Show GN: Micro Diffusion - 공부를 위한 작은 Diffusion 모델
(github.com/Siwoo4985)안녕하세요, 약 한 달 전에 텍스트 Diffusion 모델을 처음부터 구현해서 공개했습니다. 최근 Geeknews를 보다가 문득 생각나서 이제야 올려봅니다.
만들게 된 계기
Andrej Karpathy의 MicroGPT를 보고 "이렇게 짧은 코드로 GPT의 핵심을 설명할 수 있구나"라는 인상을 받았습니다. 마침 Diffusion도 공부하고 싶던 참이라, 둘을 합쳐서 "Diffusion을 같은 방식으로 이해할 수 있는 코드를 만들면 재밌겠다" 는 생각으로 시작한 교육용 프로젝트입니다.
AR vs Diffusion: 뭐가 다른가요?
LLM 시대의 텍스트 생성은 거의 전부 Autoregressive(AR) 방식입니다. 왼쪽에서 오른쪽으로 토큰을 하나씩 예측하는 방식이죠.
Discrete Diffusion은 반대입니다. 전체 시퀀스를 한꺼번에 놓고, 노이즈(마스킹)에서 점진적으로 복원합니다.
이름 "emma"를 예로 들면:
Forward (학습 - 노이즈 추가):
t=0 : e m m a ← 원본
t=25: e _ m a ← 일부 마스킹
t=50: _ _ m _ ← 더 마스킹
t=100: _ _ _ _ ← 완전 마스킹
Reverse (생성 - 노이즈 제거):
t=100: _ _ _ _ ← 빈 상태로 시작
t=75: _ m _ _ ← 확신 높은 위치부터 복원
t=50: e m _ a
t=0 : e m m a ← 완성
AR이 "단어를 한 글자씩 쓰는 것"이라면, Diffusion은 "십자말풀이를 푸는 것"에 가깝습니다.
구현 구조
세 가지 버전이 있어서 난이도별로 선택해서 볼 수 있습니다.
-
train_minimal.py— 2-layer MLP / NumPy만 사용 (가장 단순) -
train_pure.py— 3-layer MLP + skip connection / NumPy만 사용 -
train.py— 4-layer Transformer / PyTorch 사용
세 버전 모두 동일한 diffusion 루프를 공유합니다. 디노이저 아키텍처만 다릅니다.
학습 데이터는 32,000개의 영어 이름, 파라미터는 170K~239K 수준입니다.
바로 실행해볼 수 있습니다:
pip install numpy # 최소 버전
python train_minimal.py
피드백이나 PR 환영합니다!