머리말
생성이란 무엇인가
손글씨 숫자를 맞히는 분류기는 그림을 받아 답 하나를 내놓는다. 3이 적힌 그림을 넣으면 「3」이 나오고, 같은 그림에는 언제나 같은 답이 맞다. 생성은 방향이 거꾸로다. 「3」을 받아 그림을 내놓아야 하는데, 맞는 그림이 하나가 아니다. 사람들이 쓴 3은 굵기도 기울기도 모두 다르고, 그 모두가 정답이다. 정답 하나를 맞히도록 배운 신경망에게 「3을 하나 그려 봐」라고 하면, 여러 3과 두루 가까운 그림, 곧 모든 3을 겹쳐 놓은 흐린 평균 그림이 나온다.
그래서 생성 모델에는 무작위가 반드시 들어간다. 뽑을 때마다 다른 3이 나와야 하고, 그 3들이 실제 손글씨와 같은 비율로 나와야 한다. 흔한 모양은 자주, 드문 모양은 드물게. 어떤 값이 얼마나 자주 나오는지를 적은 것을 분포 (값마다 나오는 정도를 적은 것 / distribution)라 한다. 생성 모델이 배우는 것은 정답 하나가 아니라 데이터의 분포이고, 그림을 만드는 일은 그 분포에서 하나를 뽑는 일이다.
분포를 다루기 시작하면 주변 개념이 줄줄이 따라 들어온다. 두 분포가 얼마나 다른지 재는 자(KL 발산), 그림에 잡음을 섞어 분포를 고르게 퍼뜨리는 과정(열 방정식), 분포가 짙은 쪽을 가리키는 방향(스코어), 그 방향을 따라 흔들리며 걷는 길(랑주뱅 방정식), 그 길을 몇 걸음으로 나눠 걸을지 정하는 수치 풀이(오일러의 방법). 이름만 보면 신경망과 상관없어 보이는 개념들이다.
이 책이 하는 일
이 책은 그림 생성 모델의 관점에서 그 큰 줄기를 처음부터 끝까지 훑는다. 출발점은 독자가 이미 아는 MLP(층을 여러 겹 쌓아 입력을 출력으로 바꾸는 가장 기본적인 신경망)이고, 도착점은 FLUX.1, Qwen-Image, Z-Image 같은 요즘 그림 생성 모델의 몸통인 디퓨전 트랜스포머다. 이 모델들의 잡음 예측 신경망에는 합성곱 층이 하나도 없다. 그 사이를 잇는 것이 이 책이다.
앞에서 꼽은 개념들은 대부분 디퓨전보다 훨씬 오래되었다. 오일러는 1768–1770년에 미분방정식을 꺾은선으로 푸는 법을 펴냈고, 푸리에는 1800년대 초 열이 고체 속으로 퍼지는 법칙을 방정식으로 적었고, 랑주뱅은 1908년 물속 작은 알갱이의 떨림을 식으로 적었다. 수백 년에 걸쳐 수학과 물리학이 다듬어 온 개념들이 요즘 생성 모델 안에서 어느 자리를 맡아 어떻게 맞물려 돌아가는지, 그 구체적인 원리를 찾아가 보자는 것이 이 책의 취지다. 이 책은 개념마다 생성에 필요한 만큼을 다루고, 뿌리까지 파고들 곳에는 시리즈의 다른 책으로 이어지는 연결점을 두었다(아래 「다섯 권의 지도」).
이 공부를 마치면 이론을 이해하는 것 말고도 실제로 손에 남는 것이 있다. 그림 생성 도구 ComfyUI 나 디퓨전 모델을 돌리는 파이썬 라이브러리 diffusers 를 다루다 보면 뜻을 짐작하기 어려운 설정값과 옵션 이름이 잔뜩 나온다. 그 이름이 정확히 무엇을 뜻하는지, 값을 어떻게 바꾸면 어떤 효과가 나는지를 알게 되니, 모델을 내가 원하는 대로 다루고 조작하는 데에도 도움이 된다. 원리를 알면 훨씬 잘 응용할 수 있다. ComfyUI 에서 그림을 만드는 마디(KSampler)의 칸들을 바꿔 가며 좋은 그림을 뽑는 사람은 많지만, 칸 하나를 바꿨을 때 계산의 어느 자리가 바뀌는지까지 말할 수 있는 사람은 드물다. 이 책을 읽고 나면 시드(seed)는 출발점의 잡음과 걸음마다 다시 넣는 잡음을 정하는 수로(7장 「랑주뱅과 역방향 미분방정식」), 걸음 수·샘플러·걸음 일정(steps, sampler_name, scheduler)은 같은 길을 몇 걸음에 어떤 걸음법으로 걷느냐로(9장 「샘플러」), cfg 와 negative 는 조건을 넣은 예측과 넣지 않은 예측의 차이를 몇 배로 키우느냐로(13장 「가이던스」), positive 에 넣는 글은 신경망으로 들어가는 벡터 줄로(14장 「글을 읽는 인코더」), latent_image 는 그림을 작게 줄인 잠재 그림으로(11장 「잠재 디퓨전」), model 은 잡음을 맞히는 신경망으로(6장 「U-Net」, 12장 「디퓨전 트랜스포머」) 보인다. cfg 를 8에서 3으로 내리면 걸음마다 무엇이 줄어드는지, 샘플러를 euler 에서 dpmpp_2m 으로 바꾸면 무엇이 나아지는지가 먼저 떠오른다.
누구를 위한 책인가
신경망을 조금은 다뤄 본 사람을 독자로 생각했다. 손글씨 숫자를 맞히는 분류기를 PyTorch 로 한 번쯤 학습시켜 봤고, 역전파가 손실의 기울기를 층마다 거꾸로 전해 주는 계산이라는 것을 아는 정도다. 그래서 MLP 는 따로 한 장을 두지 않고, 1장 「MLP로 만든 VAE: 첫 생성 모델」에서 첫 생성 모델을 만드는 도구로 짧게 되짚는다. 수학은 미분과 확률의 기초면 된다. 정규분포, 평균과 분산, 조건부 확률을 들어 봤으면 나머지는 쓰는 자리에서 푼다.
본문과 코드 출력에 나오는 숫자는 모두 직접 돌린 코드에서 나온 값이다. 모델의 층 수, 채널 수, 샘플러의 계산은 기억이 아니라 공개된 코드(ComfyUI 등)와 원 논문에서 확인했다. 다만 조건 걸기와 영상을 다룬 장의 모델 이름은 2026년의 사례다. 이 분야의 모델은 몇 달이면 바뀐다. 이름은 바뀌어도 「왜 층을 여러 개 뽑는가」, 「왜 참조 그림을 같은 토큰 줄에 이어 붙이는가」 같은 까닭은 오래 남으므로, 본문의 줄기는 그 까닭에 두었다.
다루지 않는 것. 생성 모델 이야기는 VAE 에서 시작한다. 정규화 흐름(normalizing flow), GAN, LSTM·RNN 은 다루지 않는다. 8장 「플로우 매칭: 길을 통째로 배우기」는 이름이 정규화 흐름과 비슷하지만 다른 것이다. 열 방정식의 유도, 랑주뱅 방정식의 물리, 최적 수송의 수학처럼 깊은 이론은 결론과 쓰임만 적고, 유도는 아래 「다섯 권의 지도」의 이론 책으로 잇는다.
두 줄기가 엮이는 지도
이 책에는 줄기가 둘 있다. 하나는 구조, 곧 그림을 읽고 그림을 내놓는 신경망을 어떻게 짓느냐다. MLP 에서 합성곱, U-Net, 어텐션과 트랜스포머를 거쳐 잠재 공간으로 내려간다. 다른 하나는 이론, 곧 잡음과 데이터 사이의 길을 어떻게 정하고 어떻게 걷느냐다. VAE 에서 퍼짐, 스코어, 잡음 맞히기, 역방향 미분방정식, 플로우 매칭, 샘플러로 간다. 두 줄기는 한 장씩 엇갈려 나오다가 12장 「디퓨전 트랜스포머」에서 만난다. 그 뒤로는 만든 모델에 조건을 거는 법(13장 「가이던스」부터 15장 「그림으로 조건 걸기」까지)과 시간 축이 붙은 영상(16장 「영상 생성」)이 이어진다.
flowchart TB
subgraph S["구조: 그림을 읽는 신경망"]
direction LR
c1["1장 MLP"] --> c3["3장 합성곱"] --> c6["6장 U-Net"] --> c10["10장 어텐션과 트랜스포머"] --> c11["11장 잠재 디퓨전"]
end
subgraph T["이론: 잡음과 데이터 사이의 길"]
direction LR
t1["1장 VAE"] --> t2["2장 퍼짐"] --> t4["4장 스코어"] --> t5["5장 잡음을 맞히는 신경망"] --> t7["7장 랑주뱅과 역방향 미분방정식"] --> t8["8장 플로우 매칭"] --> t9["9장 샘플러"]
end
c11 --> m12["12장 디퓨전 트랜스포머"]
t9 --> m12
m12 --> g13["13장 가이던스"] --> g14["14장 글을 읽는 인코더"] --> g15["15장 그림으로 조건 걸기"] --> v16["16장 영상 생성"] --> a17["부록 A 강화학습으로 이어지는 다리"]
장마다 무엇에 막혀서 무엇을 묻는지를 한 줄씩 적으면 이렇다.
| 장 | 줄기 | 앞에서 막혀서 묻는 것 |
|---|---|---|
| 1장 「MLP로 만든 VAE: 첫 생성 모델」 | 구조 + 이론 | 맞출 정답이 없는 「그려 봐」를 정답 맞히기에 익숙한 신경망에게 어떻게 가르칠까. 오토인코더, VAE, 재매개변수화, ELBO(로그우도 아래에 받친 바닥), 조건을 넣는 조건부 VAE 와 얼굴 사진의 속성 벡터 |
| 2장 「퍼짐: 그림에 잡음을 섞으면」 | 이론 | VAE 그림은 흐릿하다. 인코더를 배우지 말고 잡음 섞기로 고정하면, 그 길은 어떻게 생겼을까 |
| 3장 「합성곱: 이웃만 보는 MLP」 | 구조 | 그림 크기의 MLP 는 층 하나에 가중치가 수천억 개다. 이웃만 보고, 모든 자리가 같은 비율을 쓰고, 그 비율을 사람 대신 데이터가 고르게 하면 |
| 4장 「스코어: 퍼지기 전으로 되돌리는 방향」 | 이론 | 퍼진 분포를 식 그대로 거꾸로 풀면 터진다. 점 하나하나를 되돌리려면 무엇을 알아야 할까 |
| 5장 「잡음을 맞히는 신경망: DDPM과 잡음 제거 스코어 매칭」 | 이론 + 구조 | 모르는 분포의 바늘을 그림만 가지고 어떻게 배울까. VAE 의 ELBO 가 그대로 손실이 된다 |
| 6장 「U-Net: 여러 해상도로 잡음을 읽는다」 | 구조 | 합성곱은 멀리 보지 못하고, 숫자 하나인 잡음 수준도 신경망에 넣어야 한다 |
| 7장 「랑주뱅과 역방향 미분방정식: 샘플을 뽑는 길」 | 이론 | 바늘을 배웠으니 이제 걸어야 한다. 걸음마다 잡음을 왜 다시 넣을까 |
| 8장 「플로우 매칭: 길을 통째로 배우기」 | 이론 | 휜 길을 천 걸음 걷기는 느리다. 처음부터 곧은 길을 정해 그 속도를 배우면 |
| 9장 「샘플러: 같은 길을 걷는 여러 걸음법」 | 이론 | 길은 정했지만 몇 걸음에 어떻게 걸을지는 정하지 않았다. 오일러부터 2차 방법, 걸음 일정, 증류까지 |
| 10장 「어텐션과 트랜스포머: 멀리 떨어진 칸끼리 읽기」 | 구조 | U-Net 이 끼워 넣은 「멀리 읽는 부품」은 무엇일까. 셀프·크로스 어텐션, 위치 인코딩, 앞에서 계산한 것을 적어 두고 다시 쓰는 KV 캐시 |
| 11장 「잠재 디퓨전: 작게 줄여 놓고 퍼뜨리기」 | 구조 | 큰 그림에서 직접 퍼뜨리면 계산이 너무 크다. 첫 생성 모델로 만든 VAE 를 압축기로 다시 꺼내고, 되살리기를 우선하는 압축기와 뜻을 잘 담는 인코더 사이의 목표 충돌까지 |
| 12장 「디퓨전 트랜스포머: U-Net 자리에 트랜스포머를」 | 만남 | U-Net 을 떠난 까닭(모든 토큰이 서로 읽는 한 가지 통로, 글·참조 그림·영상을 같은 줄에 잇는 유연함, 키우기 쉬움), 잠재 그림을 토큰으로 자르는 패치, 시간을 정규화의 배율로 넣는 adaLN-Zero, 글과 그림을 한 줄로 읽는 합동 어텐션, 주요 모델 견주기, 잡음 대신 그림 자체를 맞히는 쪽으로 돌아가는 흐름 |
| 13장 「가이던스: 조건 쪽으로 더 세게」 | 조건 | 조건을 넣고 배워도 모델은 조건을 반쯤만 따른다 |
| 14장 「글을 읽는 인코더: CLIP의 마지막 층에서 언어모델의 여러 층으로」 | 조건 | 가이던스는 조건을 세게 할 뿐, 조건 벡터가 문장을 잘못 담으면 소용없다 |
| 15장 「그림으로 조건 걸기: 참조 이미지 여러 장」 | 조건 | 「이 얼굴」, 「이 옷」은 글로 전해지지 않는다. 참조 그림 여러 장은 어디로 들어가야 할까 |
| 16장 「영상 생성: 시퀀스와 디퓨전 사이」 | 영상 | 그림이 줄을 이루면 길이와 오류 누적이 문제가 된다. 학습 때 과거를 어디서 가져올까 |
| 부록 A 「강화학습으로 이어지는 다리」 | 다리 | 디퓨전 모델을 사람의 선호나 보상으로 다듬으려면 언어모델의 무엇이 디퓨전의 어디에 서야 할까 |
처음부터 차례로 읽기를 권한다. 줄기가 둘이어도 장마다 바로 앞 장의 막힌 곳에서 출발하기 때문이다. 이를테면 6장 「U-Net」은 5장 「잡음을 맞히는 신경망」이 정한 일을 맡을 신경망을 짓고, 9장 「샘플러」가 걸음마다 부르는 신경망의 속은 10장 「어텐션과 트랜스포머」부터 12장 「디퓨전 트랜스포머」까지에서 다시 짓는다.
다섯 권의 지도
이 책은 다섯 권짜리 묶음의 한 권이다. 다섯 권은 두 줄로 선다.
| 줄 | 책 | 독자에게 하는 일 |
|---|---|---|
| 큰 줄기 | 『MLP에서 디퓨전 트랜스포머까지』(이 책), 『생성모델의 강화학습』 | 처음부터 끝까지 읽는 책. 이 책이 그림을 만드는 모델을 짓고, 강화학습 책이 만든 모델을 사람의 선호와 보상으로 다듬는다 |
| 토대 | 『ML 입문자를 위한 동역학』, 『미분기하학의 언어들』, 『정보기하학』 | 큰 줄기를 읽다가 이론이 더 궁금해질 때 찾아 들어가는 책 |
열 방정식, 랑주뱅 방정식, KL 발산 같은 이론이 이 책에 처음 나오는 자리에서는 이 책만으로 따라올 수 있을 만큼 두세 문장으로 소개하고, 유도와 깊은 설명은 토대 책의 그 절로 잇는 길잡이 상자를 두었다. 예를 들어 2장 「퍼짐」의 열 방정식에는 동역학 책 「열 방정식: 이웃 평균을 연속으로 쓰면」으로, 7장 「랑주뱅과 역방향 미분방정식」의 랑주뱅 샘플링에는 같은 책 「랑주뱅 방정식: 힘에 끌려가며 흔들리는 길」로, 1장 「MLP로 만든 VAE」의 KL 발산에는 정보기하학 책 「KL 발산: 방향이 있는 확률의 자」로 가는 길잡이가 있다. 부록 A 는 강화학습 책 19장 「디퓨전에서 DPO를 쓰려면」으로 이어진다. 길잡이는 건너뛰어도 이 책을 따라오는 데 지장이 없다.
이 책을 읽는 법
수식 색과 기호 표. 수식의 기호는 개념마다 정해 둔 색으로 칠했고, 수식 바로 아래에 기호마다 뜻을 적은 작은 표를 붙였다. 이 책에서 가장 자주 나오는 식, 그림에 잡음을 섞는 식으로 보이면 이렇다.
데이터와 그림은 언제나 초록(x), 잡음은 짙은 청록(ε), 잡음 일정은 회청(αt, σt)이다. 같은 개념은 책 전체에서, 그리고 위젯과 그림 안에서도 같은 색이다. 본문 속 짧은 식도 같은 색으로 칠했다. 색을 구별하기 어렵다면 기호 표만으로도 읽을 수 있게 썼다.
이 책의 약속 몇 가지. 시간 t는 0이 데이터, 1이 순수한 잡음이고, 그림을 만들 때는 t를 1에서 0으로 줄이며 걷는다. 논문에 따라 방향을 거꾸로 적기도 하니, 논문을 함께 읽을 때는 이것부터 확인하자. 표준정규 잡음은 언제나 ε이고, z 는 주로 VAE 와 잠재 디퓨전의 잠재 변수에 쓴다. 사람 이름은 원어의 성을 한글로 적고 처음 나올 때 원어를 함께 적는다.
위젯. 「직접 움직여 보기」 줄이 있는 자리에는 값을 바꿔 가며 결과를 바로 보는 위젯이 들어 있다. 위젯에 「문제 N 불러오기」 단추가 있으면 그 문제의 값이 들어가므로, 손으로 푼 답을 위젯으로 맞춰 볼 수 있다.
설계 노트. 본문 곁의 「설계 노트」 상자는 모델을 만든 사람들이 왜 그렇게 설계했는지를 모은 곁글이다. 건너뛰어도 된다.
연습문제와 함께 풀기. 개념 절 끝에는 문제가 붙어 있다. 문제마다 아래에 세 사람이 그 문제를 실제로 풀며 틀리고 바로잡는 대화가 이어진다. 대화를 읽기 전에 먼저 혼자 풀어 보길 권한다. 장의 마지막 페이지에는 그 대화에서 학생들이 실제로 틀린 곳을 「자주 하는 실수」 표로 모았다.
대화에 나오는 세 사람은 다음과 같다.
| 인물 | 소개 |
|---|---|
![]() 선생님 |
강의자. 정답을 먼저 말하는 대신 모순이 드러나는 질문을 던진다. |
![]() 김민준 |
학부 3학년. ML 강의를 몇 개 들었고 softmax, numpy, PyTorch 과제를 해 본 수준이다. 코드로 먼저 돌려 보고 답이 빠르다. |
![]() 이서연 |
수학과 3학년. 해석학과 선형대수는 탄탄하지만 물리 감각은 약하다. 이상한 결과를 스스로 알아채고 조건과 범위를 따진다. |


