머리말
생성이란 무엇인가
손글씨 숫자를 맞히는 분류기는 그림을 받아 답 하나를 내놓는다. 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)는 출발점의 잡음과 걸음마다 다시 넣는 잡음을 정하는 수로(「랑주뱅과 역방향 미분방정식」), 걸음 수·샘플러·걸음 일정(steps, sampler_name, scheduler)은 같은 길을 몇 걸음에 어떤 걸음법으로 걷느냐로(「샘플러」), cfg 와 negative 는 조건을 넣은 예측과 넣지 않은 예측의 차이를 몇 배로 키우느냐로(「가이던스」), positive 에 넣는 글은 신경망으로 들어가는 벡터 줄로(「글을 읽는 인코더」), latent_image 는 그림을 작게 줄인 잠재 그림으로(「잠재 디퓨전」), model 은 잡음을 맞히는 신경망으로(「U-Net」, 「디퓨전 트랜스포머」) 보인다. cfg 를 8에서 3으로 내리면 걸음마다 무엇이 줄어드는지, 샘플러를 euler 에서 dpmpp_2m 으로 바꾸면 무엇이 나아지는지가 먼저 떠오른다.
누구를 위한 책인가
신경망을 조금은 다뤄 본 사람을 독자로 생각했다. 손글씨 숫자를 맞히는 분류기를 PyTorch 로 한 번쯤 학습시켜 봤고, 역전파가 손실의 기울기를 층마다 거꾸로 전해 주는 계산이라는 것을 아는 정도다. 그래서 MLP 는 따로 한 장을 두지 않고, 「생성을 가르치는 법」에서 분류기를 거꾸로 세워 보는 도구로 짧게 되짚는다. 수학은 미분과 확률의 기초면 된다. 정규분포, 평균과 분산을 들어 봤으면 나머지는 쓰는 자리에서 푼다. 조건부 확률만은 이 책 전체를 꿰는 문법이라 첫 장에서 처음부터 다시 세운다.
본문과 코드 출력에 나오는 숫자는 모두 직접 돌린 코드에서 나온 값이다. 모델의 층 수, 채널 수, 샘플러의 계산은 기억이 아니라 공개된 코드(ComfyUI 등)와 원 논문에서 확인했다. 다만 조건 걸기와 영상을 다룬 장의 모델 이름은 2026년의 사례다. 이 분야의 모델은 몇 달이면 바뀐다. 이름은 바뀌어도 「왜 층을 여러 개 뽑는가」, 「왜 참조 그림을 같은 토큰 줄에 이어 붙이는가」 같은 까닭은 오래 남으므로, 본문의 줄기는 그 까닭에 두었다.
다루지 않는 것. 생성 모델 이야기는 VAE 에서 시작한다. 정규화 흐름(normalizing flow), GAN, LSTM·RNN 은 다루지 않는다. 「플로우 매칭: 길을 통째로 배우기」는 이름이 정규화 흐름과 비슷하지만 다른 것이다. 열 방정식의 유도, 랑주뱅 방정식의 물리, 최적 수송의 수학처럼 깊은 이론은 결론과 쓰임만 적고, 유도는 아래 「다섯 권의 지도」의 이론 책으로 잇는다.
책의 지도
이 책은 개념을 한 층씩 쌓아 올린다. 출발점은 확률의 문법 하나다. 세로 막대 하나를 사이에 둔 p(그림 ∣ 라벨)과 p(라벨 ∣ 그림)이 왜 전혀 다른 일인지를 보는 데서 시작한다(기본기). 라벨을 받아 그림을 내놓도록 신경망을 가르치면 왜 흐린 평균 그림이 나오는지, 늘 같은 답을 내는 생성기는 왜 찾아보기 표와 다를 게 없는지를 본 뒤, 오토인코더의 한계를 VAE 가 한 단계씩 푸는 길을 따라간다(오토인코더와 VAE). 다음은 조건이다. 망가뜨린 그림을 고치는 복원기에 얼마나 망가졌는지를 알려 주면, 고치기를 수없이 되풀이하다 처음부터 만드는 법을 터득하는 수리공이 된다. 조건을 세밀하게 줄수록 VAE 의 그림과 ELBO 가 어떻게 달라지는지도 여기서 잰다(조건을 붙여가기). 그다음은 그림을 나누는 축이다. 실눈을 뜨고 보면 형체와 구도가 보이고, 돋보기를 끼고 보면 세밀한 결이 보인다. 그림을 굵은 무늬와 가는 무늬의 대역으로 나눠 보고, 합성곱과 U-Net 을 그 대역을 고르고 나눠 읽는 장치로 짓고, 잡음이 가는 무늬부터 덮는다는 것을 확인한다(신호와 스펙트럼). 그렇게 쌓은 직관을 합치면 디퓨전이 나온다. 잡음 수준을 한 단계씩 줄이며 그때 살아남은 대역을 고치는 일, 곧 대역별로 나눠 여러 번 디노이징하는 일이다. 스코어, 잡음 맞히기, 역방향 미분방정식, 플로우 매칭은 그 일을 서로 다른 말로 적은 것이고, 신경망에게 잡음·속도·원래 그림 가운데 무엇을 맞히게 할지에는 매니폴드 가설이 얽힌 트레이드오프가 있다(직관을 합치기). 마지막으로 그 모델을 크게 키우고 원하는 대로 부리는 법, 곧 트랜스포머와 잠재 공간, 디퓨전 트랜스포머, 가이던스와 글·그림 조건, 영상으로 간다(구조와 조건, 영상).
flowchart TB
subgraph P0["기본기"]
a1["조건부 확률분포"]
end
subgraph P1["오토인코더와 VAE"]
direction LR
b1["생성을 가르치는 법"] --> b2["오토인코더에서 VAE 로"]
end
subgraph P2["조건을 붙여가기"]
direction LR
c1["디노이징과 조건부 디노이징"] --> c2["조건과 ELBO"]
end
subgraph P3["신호와 스펙트럼"]
direction LR
d1["그림을 나누는 축"] --> d2["합성곱"] --> d3["퍼짐"] --> d4["U-Net"]
end
subgraph P4["직관을 합치기"]
direction LR
e1["스코어"] --> e2["잡음을 맞히는 신경망"] --> e3["랑주뱅과 역방향 미분방정식"] --> e4["플로우 매칭"] --> e5["예측의 대상"] --> e6["샘플러"]
end
subgraph P5["구조와 조건, 영상"]
direction LR
f1["어텐션과 트랜스포머"] --> f2["잠재 디퓨전"] --> f3["디퓨전 트랜스포머"] --> f4["가이던스"] --> f5["글을 읽는 인코더"] --> f6["그림으로 조건 걸기"] --> f7["영상 생성"]
end
P0 --> P1 --> P2 --> P3 --> P4 --> P5 --> z["부록 A 강화학습으로 이어지는 다리"]
장마다 무엇에 막혀서 무엇을 묻는지를 한 줄씩 적으면 이렇다.
| 장 | 부 | 앞에서 막혀서 묻는 것 |
|---|---|---|
| 「조건부 확률분포: p(a∣b) 와 p(b∣a)」 | 기본기 | 사진을 받아 라벨을 내는 앱과 라벨을 받아 사진을 그리는 앱은 같은 꼴로 적힌다. 세로 막대의 양쪽을 바꾸면 무엇이 달라질까. 조건부 확률, 베이즈 정리와 사전·사후, 표로 적을 수 없는 p(그림 ∣ 라벨) |
| 「생성을 가르치는 법: 분류기를 뒤집으면」 | 오토인코더와 VAE | 라벨 하나에 맞는 그림이 수천 장인데 무엇을 맞히라고 가르칠까. 분류기를 뒤집으면 평균 그림이 나오고, 늘 같은 답을 내면 찾아보기 표와 다를 게 없다 |
| 「오토인코더에서 VAE 로」 | 오토인코더와 VAE | 라벨이 정하지 못한 흩어짐을 정할 값을 그림 자신에서 얻자. 오토인코더의 두 한계(데이터 사이가 비어 있다, 어디서 뽑을지 정해지지 않았다)를 구름, 사전분포, 재매개변수화, ELBO 로 한 단계씩 푼다 |
| 「디노이징과 조건부 디노이징: 고치다 보면 만들게 된다」 | 조건을 붙여가기 | 정답이 분명한 일만 가르쳐서 그림을 만들 수는 없을까. 망가진 그림 고치기, 망가진 정도를 조건으로 알려 주기, 고치기를 거듭해 만들기 |
| 「조건과 ELBO」 | 조건을 붙여가기 | 조건을 세밀하게 주면 VAE 그림도 선명해질까. 조건의 값, 모델이 스스로 만든 조건, 다 배운 모델 안의 속성 벡터 |
| 「그림을 나누는 축: 스펙트럼」 | 신호와 스펙트럼 | 흐림이란 그림의 어떤 무늬를 잃은 것일까. 공간 주파수, 푸리에 변환, 세기 스펙트럼, 대역 |
| 「합성곱: 이웃만 보는 MLP」 | 신호와 스펙트럼 | 블러의 비율을 바꾸면 다른 대역을 고를 수 있을까, 그 비율을 데이터가 고르게 할 수 있을까. 가중치 공유, 수용 영역, 채널 |
| 「퍼짐: 그림에 잡음을 섞으면」 | 신호와 스펙트럼 | 수리공이 믿은 「이만큼 망가진 그림」이 맞으려면 망가뜨리는 길을 정해 둬야 한다. 순방향 과정, 열 방정식, 잡음은 가는 무늬부터 덮는다, 잡음 일정 |
| 「U-Net: 여러 해상도로 잡음을 읽는다」 | 신호와 스펙트럼 | 잡음 수준마다 살아남는 대역이 다르니, 한 신경망이 굵은 대역과 가는 대역을 함께 읽어야 한다 |
| 「스코어: 퍼지기 전으로 되돌리는 방향」 | 직관을 합치기 | 수리공의 걸음은 왜 데이터에 닿았을까. 퍼진 분포를 식 그대로 거꾸로 풀면 터진다. 점 하나하나를 되돌리려면 무엇을 알아야 할까 |
| 「잡음을 맞히는 신경망: DDPM과 잡음 제거 스코어 매칭」 | 직관을 합치기 | 잡음을 섞은 짝으로 바늘도 배울 수 있을까. 디퓨전은 대역별로 나눠 여러 번 디노이징하는 일이고, VAE 의 ELBO 가 그대로 손실이 된다 |
| 「랑주뱅과 역방향 미분방정식: 샘플을 뽑는 길」 | 직관을 합치기 | 바늘을 배웠으니 이제 걸어야 한다. 걸음마다 잡음을 왜 다시 넣을까 |
| 「플로우 매칭: 길을 통째로 배우기」 | 직관을 합치기 | 휜 길을 천 걸음 걷기는 느리다. 처음부터 곧은 길을 정해 그 속도를 배우면 |
| 「예측의 대상: 잡음·속도장·이미지」 | 직관을 합치기 | 같은 정보인 잡음·속도·원래 그림 가운데 무엇을 맞히게 할까. 잡음 수준마다 다른 배점, 매니폴드 가설, 잡음에서 출발해 그림으로 돌아온 길 |
| 「샘플러: 같은 길을 걷는 여러 걸음법」 | 직관을 합치기 | 길은 정했지만 몇 걸음에 어떻게 걸을지는 정하지 않았다. 오일러부터 2차 방법, 걸음 일정, 증류까지 |
| 「어텐션과 트랜스포머: 멀리 떨어진 칸끼리 읽기」 | 구조와 조건, 영상 | U-Net 이 끼워 넣은 「멀리 읽는 부품」은 무엇일까. 셀프·크로스 어텐션, 위치 인코딩, 앞에서 계산한 것을 적어 두고 다시 쓰는 KV 캐시 |
| 「잠재 디퓨전: 작게 줄여 놓고 퍼뜨리기」 | 구조와 조건, 영상 | 큰 그림에서 직접 퍼뜨리면 계산이 너무 크다. VAE 를 압축기로 다시 꺼내고, 되살리기를 우선하는 압축기와 뜻을 잘 담는 인코더 사이의 목표 충돌까지 |
| 「디퓨전 트랜스포머: U-Net 자리에 트랜스포머를」 | 구조와 조건, 영상 | U-Net 을 떠난 까닭(모든 토큰이 서로 읽는 한 가지 통로, 글·참조 그림·영상을 같은 줄에 잇는 유연함, 키우기 쉬움), 패치, adaLN-Zero, 합동 어텐션, 주요 모델 견주기, 픽셀 위의 큰 패치 |
| 「가이던스: 조건 쪽으로 더 세게」 | 구조와 조건, 영상 | 조건을 넣고 배워도 모델은 조건을 반쯤만 따른다 |
| 「글을 읽는 인코더: CLIP의 마지막 층에서 언어모델의 여러 층으로」 | 구조와 조건, 영상 | 가이던스는 조건을 세게 할 뿐, 조건 벡터가 문장을 잘못 담으면 소용없다 |
| 「그림으로 조건 걸기: 참조 이미지 여러 장」 | 구조와 조건, 영상 | 「이 얼굴」, 「이 옷」은 글로 전해지지 않는다. 참조 그림 여러 장은 어디로 들어가야 할까 |
| 「영상 생성: 시퀀스와 디퓨전 사이」 | 구조와 조건, 영상 | 그림이 줄을 이루면 길이와 오류 누적이 문제가 된다. 학습 때 과거를 어디서 가져올까 |
| 부록 A 「강화학습으로 이어지는 다리」 | 다리 | 디퓨전 모델을 사람의 선호나 보상으로 다듬으려면 언어모델의 무엇이 디퓨전의 어디에 서야 할까 |
처음부터 차례로 읽기를 권한다. 장마다 바로 앞 장의 막힌 곳에서 출발하기 때문이다. 이를테면 「잡음을 맞히는 신경망」은 「디노이징과 조건부 디노이징」의 수리공, 「퍼짐」의 잡음이 덮는 순서, 「그림을 나누는 축」의 대역을 한데 모아 디퓨전을 세우고, 「샘플러」가 걸음마다 부르는 신경망의 속은 「어텐션과 트랜스포머」부터 「디퓨전 트랜스포머」까지에서 다시 짓는다.
다섯 권의 지도
이 책은 다섯 권짜리 묶음의 한 권이다. 다섯 권은 두 줄로 선다.
| 줄 | 책 | 독자에게 하는 일 |
|---|---|---|
| 큰 줄기 | 『MLP에서 디퓨전 트랜스포머까지』(이 책), 『생성모델의 강화학습』 | 처음부터 끝까지 읽는 책. 이 책이 그림을 만드는 모델을 짓고, 강화학습 책이 만든 모델을 사람의 선호와 보상으로 다듬는다 |
| 토대 | 『ML 입문자를 위한 동역학』, 『미분기하학의 언어들』, 『정보기하학』 | 큰 줄기를 읽다가 이론이 더 궁금해질 때 찾아 들어가는 책 |
열 방정식, 랑주뱅 방정식, KL 발산 같은 이론이 이 책에 처음 나오는 자리에서는 이 책만으로 따라올 수 있을 만큼 두세 문장으로 소개하고, 유도와 깊은 설명은 토대 책의 그 절로 잇는 길잡이 상자를 두었다. 예를 들어 「퍼짐」의 열 방정식에는 동역학 책 「열 방정식: 이웃 평균을 연속으로 쓰면」으로, 「랑주뱅과 역방향 미분방정식」의 랑주뱅 샘플링에는 같은 책 「랑주뱅 방정식: 힘에 끌려가며 흔들리는 길」로, 「오토인코더에서 VAE 로」의 KL 발산에는 정보기하학 책 「KL 발산: 방향이 있는 확률의 자」로 가는 길잡이가 있다. 부록 A 는 강화학습 책 「디퓨전에서 DPO를 쓰려면」으로 이어진다. 길잡이는 건너뛰어도 이 책을 따라오는 데 지장이 없다.
이 책을 읽는 법
수식 색과 기호 표. 수식의 기호는 개념마다 정해 둔 색으로 칠했고, 수식 바로 아래에 기호마다 뜻을 적은 작은 표를 붙였다. 이 책에서 가장 자주 나오는 식, 그림에 잡음을 섞는 식으로 보이면 이렇다.
데이터와 그림은 언제나 초록(x), 잡음은 짙은 청록(ε), 잡음 일정은 회청(αt, σt)이다. 같은 개념은 책 전체에서, 그리고 위젯과 그림 안에서도 같은 색이다. 본문 속 짧은 식도 같은 색으로 칠했다. 색을 구별하기 어렵다면 기호 표만으로도 읽을 수 있게 썼다.
이 책의 약속 몇 가지. 시간 t는 0이 데이터, 1이 순수한 잡음이고, 그림을 만들 때는 t를 1에서 0으로 줄이며 걷는다. 논문에 따라 방향을 거꾸로 적기도 하니, 논문을 함께 읽을 때는 이것부터 확인하자. 표준정규 잡음은 언제나 ε이고, z 는 주로 VAE 와 잠재 디퓨전의 잠재 변수에 쓴다. 사람 이름은 원어의 성을 한글로 적고 처음 나올 때 원어를 함께 적는다.
위젯. 「직접 움직여 보기」 줄이 있는 자리에는 값을 바꿔 가며 결과를 바로 보는 위젯이 들어 있다. 위젯에 「문제 N 불러오기」 단추가 있으면 그 문제의 값이 들어가므로, 손으로 푼 답을 위젯으로 맞춰 볼 수 있다.
설계 노트. 본문 곁의 「설계 노트」 상자는 모델을 만든 사람들이 왜 그렇게 설계했는지를 모은 곁글이다. 건너뛰어도 된다.
연습문제와 함께 풀기. 개념 절 끝에는 문제가 붙어 있다. 문제마다 아래에 세 사람이 그 문제를 실제로 풀며 틀리고 바로잡는 대화가 이어진다. 대화를 읽기 전에 먼저 혼자 풀어 보길 권한다. 장의 마지막 페이지에는 그 대화에서 학생들이 실제로 틀린 곳을 「자주 하는 실수」 표로 모았다.
대화에 나오는 세 사람은 다음과 같다.
| 인물 | 소개 |
|---|---|
![]() 선생님 |
강의자. 정답을 먼저 말하는 대신 모순이 드러나는 질문을 던진다. |
![]() 김민준 |
학부 3학년. ML 강의를 몇 개 들었고 softmax, numpy, PyTorch 과제를 해 본 수준이다. 코드로 먼저 돌려 보고 답이 빠르다. |
![]() 이서연 |
수학과 3학년. 해석학과 선형대수는 탄탄하지만 물리 감각은 약하다. 이상한 결과를 스스로 알아채고 조건과 범위를 따진다. |


