learn.ericfromkorea.com / small-stable-diffusion

노이즈에서 그림이 태어나는 법

차량·동물 13종만 배운 작은 디퓨전 모델을 바닥부터 — 진짜 숫자로 따라가기

차례
  1. 디퓨전이 뭐야?
  2. 재료 — 데이터
  3. 전방 과정 — 노이즈로 녹이기
  4. 모델 — 노이즈 예측기
  5. 학습
  6. 역과정 — 그림 만들기
STEP 0

디퓨전이 뭐야?

그림 그리는 AI(Stable Diffusion)는 사실 지우개의 달인이에요. 먼저 깨끗한 사진에 노이즈(모래폭풍 같은 점)를 조금씩 더해서 완전히 뭉개버립니다. 그리고 그걸 거꾸로 한 단계씩 지워서 원래 그림으로 되돌리는 법을 연습하죠.

🏖️ 비유: 모래사장에 그린 그림 위에 모래를 한 줌씩 뿌려 덮은 다음, 그 과정을 거꾸로 외워서 모래를 한 줌씩 걷어내며 그림을 복원하는 것과 같아요. 충분히 연습하면 아무 모래더미(노이즈)에서 시작해도 그림을 만들어낼 수 있어요.

이 페이지에서는 차량·동물 13종만 배운 작은 모델을 바닥부터 만들어, 노이즈에서 그림이 태어나는 과정을 진짜 숫자와 함께 따라가 봅니다.

STEP 1

재료 — 무엇을 가르칠까

큰 사진 전체 대신, 물체가 들어있는 네모(bounding box)만 잘라 가운데 오게 했어요. 작은 그림이라도 대상이 선명해야 모델이 잘 배웁니다.

데이터 요약
이미지 수
10400장COCO 사진에서 객체만 잘라냄
클래스
13종동물 10 + 차량 3, 이것만 잘 그림
이미지 크기
64×64×3작게 줄여 빨리 학습
데이터 샘플
클래스별 실제 학습 이미지 (64×64). 이 13종 밖의 것은 모델이 만들지 못합니다.
STEP 2

전방 과정 — 그림을 노이즈로 녹이기

한 장의 진짜 얼룩말 사진에 노이즈를 점점 더해봤어요. 단계 t가 커질수록 원본은 사라지고 모래폭풍만 남습니다. 이건 학습이 아니라 정해진 공식이에요.

전방 노이즈 과정
실제 q_sample 공식으로 만든 노이즈 추가 과정 (지어낸 그림 아님)
노이즈 스케줄(실제 값)
단계 수 T
1000노이즈를 더하는 칸 수
스케줄
cosine단계마다 얼마나 더할지 정하는 곡선
남은 원본 t=0
1.0거의 100% 원본
남은 원본 t=500
0.4923절반쯤 뭉개짐
남은 원본 t=999
2e-09사실상 0% — 완전 노이즈
노이즈 스케줄 곡선
왼쪽: 한 스텝당 노이즈량 β / 오른쪽: 단계가 갈수록 남는 원본 비율
🔑 핵심 공식: x_t = √ᾱ·원본 + √(1-ᾱ)·노이즈 — ᾱ(남은 원본 비율)만 알면 어느 단계든 한 번에 노이즈를 섞을 수 있어요.
STEP 3

모델 — 노이즈를 알아맞히는 기계

모델이 하는 일은 딱 하나예요: "이 뭉개진 그림에 더해진 노이즈가 뭐였을까?"를 맞히기. 노이즈를 맞히면 그걸 빼서 한 단계 더 깨끗하게 만들 수 있죠. 이 일을 1000번 반복합니다.

모델 구조는 UNet — 그림을 점점 작게 줄였다가(요약) 다시 키우며(복원) 세부를 채우고, 멀리 떨어진 픽셀끼리도 정보를 주고받는 어텐션을 넣었어요.

노이즈 예측기(UNet)
UNet 파라미터
37.1M노이즈를 예측하는 신경망 크기
입력
노이즈 섞인 그림 + 단계 t지금 얼마나 뭉개졌는지 알려줌
출력
더해진 노이즈 추정이걸 빼면 한 단계 깨끗해짐
STEP 4

학습 — 노이즈 맞히기 연습

학습은 단순해요. 그림에 무작위 단계 t의 노이즈를 섞고, 모델에게 맞혀보라 한 뒤, 틀린 만큼(예측 노이즈와 진짜 노이즈의 차이) 혼내줍니다. 이걸 수만 번 반복하면 노이즈를 점점 잘 맞히게 돼요.

학습 경과(실제 값)
학습 스텝
16,200배치를 본 횟수
처음 손실
0.1107노이즈 예측이 서툴 때
나중 손실
0.0584노이즈를 잘 맞히게 됨
📉 손실(loss): "예측한 노이즈"와 "진짜 더한 노이즈"가 얼마나 다른지예요. 작아질수록 모델이 노이즈를 잘 알아맞힌다는 뜻.
STEP 5

역과정 — 노이즈에서 그림 만들기

이제 진짜 마법! 아무 노이즈에서 시작해, 모델이 "여기 섞인 노이즈는 이거야"라고 조금씩 알려주면 그만큼 지웁니다. 1000번 지우고 나면 노이즈가 그림으로 변해요.

역과정
순수 노이즈(t=999)에서 시작해 한 단계씩 지워가며 만든 그림 (실제 생성)

직접 만든 샘플들

무엇을 그릴지 정해주지 않은 무조건부 생성이라, 배운 13종 중 아무거나 닮은 게 나와요. 조금 흐릿하지만 동물·차량 같은 형태와 색이 보입니다.

생성 샘플
학습된 작은 디퓨전 모델이 노이즈에서 만들어낸 그림들
다음

다음 단계

지금은 "아무거나" 그렸지만, 다음 페이지에서는 "고양이를 그려줘"처럼 원하는 종류를 골라 그리게 만들고(조건부 생성 + CFG), 마지막엔 진짜 Stable Diffusion처럼 작은 잠재공간에서 더 빠르게 그리는 법 (잠재공간 디퓨전)을 배웁니다.

바닥부터 직접 구현 · 모든 숫자는 실제 실행 결과