확산 모델(diffusion model)은 잡음(noise)에서 데이터(data)까지 굽은 경로(curved path)를 따라가기 때문에 표본 생성(sampling)에 20~50 단계(step)가 필요합니다. 흐름 매칭(Flow Matching; Lipman et al., 2023)과 정류 흐름(Rectified Flow; Liu et al., 2022)은 곧은 경로(straight path)를 학습합니다. 더 곧은 경로는 더 적은 단계와 더 빠른 추론(inference)을 뜻합니다. Stable Diffusion 3, Flux.1, AudioCraft 2는 모두 2024년에 흐름 매칭으로 전환했습니다.
유형: Build
언어: Python
선수 지식: Phase 8 · 06 (확산 모델 — DDPM 직접 구현), Phase 1 · 미적분(Calculus)
예상 시간: 약 45분
문제
DDPM의 역방향 과정(reverse process)은 N(0, I)에서 데이터 분포(data distribution)로 되돌아가는 1000 단계 확률적 행보(stochastic walk)입니다. DDIM은 이를 20~50 단계의 결정론적(deterministic) 과정으로 줄였습니다. 우리는 단계 수를 더 줄이고 싶고, 이상적으로는 1 단계로 끝내고자 합니다. 장벽은 역방향 과정을 푸는 상미분방정식(ODE)이 경직(stiff)되어 있고 경로가 굽어 있다는 점입니다.
만약 잡음에서 데이터까지의 경로가 *직선(straight line)*이 되도록 모델을 학습할 수 있다면, t=1에서 t=0까지 가는 오일러 단계(Euler step) 한 번이면 충분할 것입니다. 흐름 매칭은 이를 직접 구성합니다. x_1 ∼ N(0, I)에서 x_0 ∼ data까지 직선 보간(straight-line interpolation)을 정의하고, 신경망 벡터장(vector field) v_θ(x, t)가 그 시간 도함수(time derivative)를 맞추도록 학습한 뒤, 추론 시에는 이를 적분(integrate)합니다.
정류 흐름(Liu 2022)은 한 걸음 더 나아갑니다. 재흐름(reflow) 절차로 경로를 반복적으로 곧게 펴서, 점점 더 선형에 가까운 ODE를 만들어 냅니다. 두 번의 재흐름 반복(reflow iteration)을 거치고 나면 2 단계 표본기(sampler)가 50 단계 DDPM 품질에 맞먹게 됩니다.
사전 테스트
2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요
1.DDPM의 역방향 과정은 DDIM을 사용해도 20-50 단계가 필요합니다. 학습된 ODE 궤적의 어떤 근본적 성질이 단계 수를 더 줄이기 어렵게 만드나요?
2.조건부 흐름 매칭 손실(conditional flow matching loss)의 학습 목표(target)는 무엇인가요?
0/2 답변 완료
개념
직선 흐름(Straight-line flow)
다음과 같이 정의합니다.
x_t = t · x_1 + (1 - t) · x_0, t ∈ [0, 1]
여기서 x_0 ~ data, x_1 ~ N(0, I)입니다. 이 직선 위에서 시간 도함수는 상수입니다.
이것이 바로 조건부 흐름 매칭 손실(conditional flow matching loss)입니다(Lipman 2023). 학습은 시뮬레이션 없이(simulation-free) 진행됩니다. ODE를 풀어 펼칠(unroll) 필요 없이 (x_0, x_1, t)를 표집해 회귀(regress)할 뿐입니다.
표본 생성(Sampling)
추론 단계에서는 학습된 벡터장을 시간의 반대 방향으로 적분합니다.
x_{t-Δt} = x_t - Δt · v_θ(x_t, t)
x_1 ~ N(0, I)에서 시작해 t=0까지 오일러 단계를 내려갑니다.
정류 흐름(Rectified flow; Liu 2022)
직선 흐름을 학습해도 학습된 경로가 실제로 완전히 직선이 되지는 않습니다. 여러 x_0가 같은 x_1로 사상(mapping)될 수 있어 경로가 굽어지기 때문입니다. 정류 흐름의 재흐름 단계는 다음과 같습니다.
무작위로 짝지은(random pairing) 표본으로 흐름 모델 v_1을 학습합니다.
x_1에서 v_1을 적분해 도착한 x_0를 짝으로 묶어 N개의 쌍 (x_1, x_0)를 만듭니다.
이렇게 ODE로 짝지은(ODE-matched) 예제로 v_2를 학습합니다. 쌍이 맞춰졌으므로 그 사이의 직선 보간자(interpolant)는 더 평평해집니다.
필요하면 반복합니다.
실제로 두 번의 재흐름 반복만으로도 거의 선형에 가까운 흐름이 되어, 2~4 단계 추론이 가능해집니다. SDXL-Turbo, SD3-Turbo, LCM은 모두 흐름 매칭 모델에서 증류(distill)된 계열입니다.
왜 2024년에 이미지 영역에서 승리했는가
세 가지 이유가 있습니다.
시뮬레이션 없는 학습(Simulation-free training) — 학습 중 ODE를 풀어 펼칠 필요가 없어 구현이 단순합니다.
더 나은 손실 기하(loss geometry) — 직선 경로는 신호 대 잡음비(signal-to-noise ratio; SNR)가 일정한 반면, DDPM의 ε-손실은 스케줄(schedule) 양 끝에서 SNR이 나쁩니다.
빠른 추론 — SDXL-Turbo 품질이면 4~8 단계로 충분하며, 일관성 증류(consistency distillation)를 더하면 1 단계까지 줄일 수 있습니다.
흐름 매칭과 DDPM의 정확한 연결 관계
가우시안 조건부 경로(Gaussian-conditional path)를 사용하는 흐름 매칭은 특정한 잡음 스케줄을 가진 확산과 같습니다. x_t = α(t) x_0 + σ(t) x_1 스케줄을 고르면 흐름 매칭은 스트라토노비치(Stratonovich) 형태로 다시 표현된 확산을 복원하며, 이때 v = α'·x_0 - σ'·x_1이 됩니다. 가우시안 경로에 한해 두 방식은 대수적으로 동치(algebraically equivalent)입니다.
흐름 매칭이 새로 더한 것은 목표값(target)의 명료성(단순한 속도 벡터), 더 깨끗한 손실, 그리고 비가우시안 보간자(non-Gaussian interpolant)를 실험할 수 있는 자유입니다.
직접 만들기
code/main.py는 두 봉우리 가우시안 혼합(two-mode Gaussian mixture)에서 1차원 흐름 매칭을 구현합니다. 벡터장 v_θ(x, t)는 직선 목표값으로 학습한 아주 작은 다층 퍼셉트론(MLP)입니다. 추론 시 1, 2, 4, 20 단계의 오일러 적분을 수행해 표본 품질을 비교합니다.
defsample(net, num_steps):
x = rng.gauss(0, 1)
for i inrange(num_steps):
t = 1.0 - i / num_steps
dt = 1.0 / num_steps
x -= dt * net_forward(x, t)
return x
3단계: 단계 수 비교
4 단계 표본기가 이미 20 단계 품질에 맞먹는 결과를 보게 됩니다. 지연 시간(latency) 관점에서는 큰 차이입니다.
흔한 함정(Pitfalls)
시간 매개변수화(time parameterization). 흐름 매칭은 t ∈ [0, 1]을 사용하며 t=0이 데이터, t=1이 잡음입니다. DDPM은 t ∈ [0, T]를 사용하며 t=0이 데이터, t=T가 잡음입니다. 방향은 같지만 스케일이 다릅니다. 논문에서도 이 부분을 자주 혼동합니다.
스케줄 선택(schedule choice). 정류 흐름의 직선이 "유일한" 흐름 매칭 스케줄은 아닙니다. 코사인(cosine)이나 로짓-정규(logit-normal) t 표집을 사용해(SD3가 채택한 방식) 스케일 범위를 넓힐 수 있습니다.
재흐름 비용(reflow cost). 재흐름용 짝 데이터셋을 만들려면 표본 하나마다 전체 추론 한 번이 필요합니다. 정말로 1~2 단계 추론이 필요할 때만 재흐름을 수행합니다.
분류기 없는 안내(classifier-free guidance)는 여전히 적용됨. 선형 결합에서 ε 대신 v를 넣으면 됩니다. v_cfg = (1+w) v_cond - w v_uncond.
사용해보기
사용 사례
2026년 추천 스택
최고 품질 텍스트-이미지(text-to-image)
흐름 매칭 기반 SD3, Flux.1-dev
1~4 단계 텍스트-이미지
증류된 흐름 매칭: Flux.1-schnell, SD3-Turbo, SDXL-Turbo
실시간 추론
흐름 매칭 기반에서 일관성 증류한 LCM, PCM
오디오 생성
흐름 매칭 기반 Stable Audio 2.5, AudioCraft 2
비디오 생성
흐름 매칭과 확산이 혼합된 Sora, Veo, Stable Video
과학/물리(입자 궤적, 분자)
등변(equivariant) 벡터장과 결합한 흐름 매칭
2025~2026년에 "확산보다 빠르다"는 표현이 나오는 논문은 거의 대부분 흐름 매칭과 증류의 조합입니다.
산출물 만들기
outputs/skill-fm-tuner.md로 저장합니다. 이 스킬은 확산 형식의 모델 명세(diffusion-style model spec)를 받아 흐름 매칭 학습 설정(training config)으로 변환합니다. 스케줄 선택, 시간 표집 분포(uniform / logit-normal), 옵티마이저(optimizer), 재흐름 계획(reflow plan), 목표 단계 수(target step count), 평가 프로토콜(eval protocol)을 결정합니다.
연습문제
쉬움.code/main.py를 실행하고 실제 데이터 분포 대비 1 단계와 20 단계의 평균제곱오차(MSE)를 비교합니다.
중간. 균일(uniform) t 표집을 로짓-정규(logit-normal) 표집으로 바꿉니다. 중간 t에 표집을 집중했을 때 모델 품질이 개선되는지 확인합니다.
어려움. 재흐름 반복을 한 번 구현합니다. 첫 번째 모델을 적분해 짝지어진 (x_0, x_1)을 생성하고, 두 번째 모델을 그 쌍 위에서 학습한 뒤 1 단계 표본 품질을 비교합니다.
핵심 용어
용어
흔한 설명
실제 의미
흐름 매칭(Flow matching)
"직선 형태의 확산"
보간자 위에서 v_θ(x, t)가 x_1 - x_0를 맞추도록 학습합니다.
정류 흐름(Rectified flow)
"재흐름(reflow)"
학습된 흐름을 반복적으로 곧게 펴는 절차입니다.
속도장(Velocity field)
"v_θ"
x_t를 움직일 방향을 출력하는 모델입니다.
직선 보간자(Straight-line interpolant)
"경로(the path)"
x_t = (1-t)·x_0 + t·x_1로, 목표 도함수가 단순합니다.
오일러 표본기(Euler sampler)
"1차 ODE 풀이기"
경로가 직선일수록 잘 동작하는 가장 단순한 적분기입니다.
로짓-정규 t(Logit-normal t)
"SD3 표집"
경사(gradient)가 가장 강한 중간 값 근처로 t 표집을 집중합니다.
일관성 증류(Consistency distillation)
"1 단계 표본기"
어떤 x_t에서도 곧바로 x_0로 가도록 학생(student) 모델을 학습합니다.
속도 CFG(CFG with velocity)
"v-CFG"
v_cfg = (1+w) v_cond - w v_uncond로, 같은 기법을 새 변수에 적용한 것입니다.
운영 노트: Flux.1-schnell은 가장 빠른 형태의 흐름 매칭이다
흐름 매칭의 운영 환경 성공 사례는 Flux.1-schnell입니다. Flux-dev급 품질을 유지하면서 1~4 단계 추론으로 증류된 흐름 매칭 기반 DiT입니다. Niels의 "Run Flux on an 8GB machine" 노트북은 표준적인 배포 레시피로, T5와 CLIP으로 텍스트를 인코딩하고, 양자화(quantized)된 MMDiT로 잡음 제거(denoise)를 수행하며(schnell은 4 단계, dev는 50 단계), 마지막으로 VAE 디코더로 이미지를 복원합니다. 비용은 다음과 같습니다.
변형(Variant)
단계(Steps)
L4에서 1024² 지연 시간
상대 FLOPs
Flux.1-dev (원본)
50
약 15 s
1.0×
Flux.1-schnell
4
약 1.2 s
0.08× (12배 빠름)
SDXL-base
30
약 4 s
0.25×
SDXL-Lightning 2-step
2
약 0.3 s
0.03×
운영의 법칙은 단순합니다. 흐름 매칭 기반 + 증류(distillation) 조합이 2026년 빠른 텍스트-이미지의 기본값입니다. 주요 업체들은 모두 이 조합을 출시하고 있습니다. SD3-Turbo(SD3 + 흐름 + 증류), Flux-schnell(Flux-dev + 정류 흐름 직선화), CogView-4-Flash가 그 예이며, 순수 확산 기반 모델은 레거시 체크포인트로만 남아 있습니다.