본문 바로가기
AI

Normalizing flow, Flow matching 정리

by 힢힢 2025. 10. 4.

 

이곳저곳 참고하면서 정리해본,,, flow matching ...

틀린 내용 많을 듯 😅

 


 

✦ Generative models

 

일반적으로 generative model은 우리가 잘 알고, 샘플링하기 쉬운 분포 z에서 생성하기 원하는 복잡한 데이터 분포 x로 변환하는 함수 g를 학습하는 방식으로 동작한다. 반대로, x에서 z로 매핑하는 함수를 f라고 할 때, 기존 방법들에서는 이 f와 g가 별개의 전혀 다른 함수이거나 GAN처럼 f가 존재하지 않는 경우도 있다. 이렇게 GAN, VAE는 실제 데이터의 분포를 명시적으로 모델링하지 않고 샘플링을 통해 implicit하게 학습한다.

Normalizing flow 또한 복잡한 데이터 분포를 모델링하기 위해 사용하는 생성 모델로, 간단한 분포에서 복잡한 데이터 분포로의 변환 f와 그 역변환이 가능한 함수 g를 학습한다. 이 때, g가 f의 역함수이기 때문에 invertible한 변환으로 구성되어 데이터의 분포를 명시적으로 모델링할 수 있다. 즉, x의 확률 분포는 z의 확률 분포로 표현할 수 있고, z의 확률 분포를 안다면 x의 확률 분포를 구할 수 있다.

 

 

✦ Normalizing Flow

 

확률 분포 x와 z의 총합은 1이 되어야 하고, 양 변을 x로 미분하면 x의 확률 분포를 구할 수 있다. 이를 고차원으로 일반화하면 세 번째 식이 되는데, 여기서 J는 야코비안 행렬로, z=f(x)에서 z의 각 성분에 대한 x의 편미분을 행렬로 정리한 것이다. 이를 익숙한 Log-likelihood로 표현하면 맨 아래와 같은 식을 얻을 수 있다. 

 

그런데, 보통 x는 복잡한 분포를 가지기 때문에 x와 z를 하나의 함수로만 연결해서 표현하는 것이 어렵다. 이에 여러 함수를 통해 연결하게 되고, 이는 위에서 두 번째 식과 같이 나타낼 수 있다. 최종 Log-likelihood 식은 맨 아래와 같이 표현된다. 

Normalizing flow에 있어서 충족해야 하는 조건은 f에 역함수가 존재해야 하고, 야코비안의 행렬식을 구할 수 있어야 한다. 또, 마지막 식을 보면 알 수 있듯이 z의 확률 분포를 계산할 수 있어야 x의 확률 분포를 알 수 있다. 그래서 많은 경우에 수식으로 계산할 수 있는 가우시안 분포를 z로 사용한다.

 

 

 

✦ Continuous Normalizing Flow (CNF)

 

앞서 말했듯, normalizing flow는 여러 함수를 연쇄적으로 합성하여 복잡한 데이터 분포와 단순한 데이터 분포 사이의 변환을 학습하는 생성 모델이다. 이에 연속적인 시간 변화에 따른 데이터 변화를 학습하는 continuous normalizing flow가 등장하였고, 이를 줄여서 CNF라고 한다. CNF는 여러 함수를 합성하는 것 대신, 데이터가 시간에 따라 어떻게 연속적으로 변화하는지를 묘사하는 미분방정식 (ODE)을 사용하여 변환 과정을 모델링한다. 구체적으로, latent variable z(t)가 시간에 따라 변화하면서 최종적으로 복잡한 데이터 x로 변환되며, 이는 아래와 같은 식으로 표현할 수 있다.

 

여기서 f는 learnable neural network로, 시간 t에서 latent vector z(t)가 어떤 방향으로 이동해야 할지를 결정하는 vector field 역할을 한다. 

 

초기 상태인 z(0)은 표준 정규분포처럼 단순한 분포에서 샘플링하고, 이 벡터는 시간에 따라 연속적으로 변하는 vector field, f에 의해 미분 방정식을 따라 t=0부터 t=T까지 적분 (ODE solve)하면 z(0)이 점차 z(T)로 바뀌어나간다. 이 때, z(T)가 모델링하고자 하는 복잡한 데이터 분포에 가까워지도록 파라미터 θ가 최적화된다. 

 

 

z(t)의 Log-likelihood의 시간 변화율은 위와 같이 vector field의 야코비안 행렬의 trace (대각 행렬의 합)로 구할 수 있다. 야코비안의 행렬식을 계산할 필요 없이 계산하기 더 쉬운 야코비안의 trace만 구하면 되므로 normalizing flow보다 더 효율적이다. 그런데, 샘플링이나 likelihood 계산을 하려면 미분방정식 (ODE)을 직접 풀어야 하는데, 대부분의 경우에는 미분방정식의 해를 구하는 것이 어렵기 때문에 아주 작은 시간 간격으로 값을 근사적으로 계속 계산 (적분)해가는 수치적 근사 (numerical approximation) 방식을 사용한다. 이를 자동화해주는 것이 ODE solver이고, 이 과정을 흔히 시뮬레이션이라고 부른다. 높은 정확도를 얻기 위해서는 더 작은 시간 간격으로 더 많은 계산 단계를 거쳐야 하기 때문에 많은 연산과 시간이 필요하다.

 

 

 

✦ Flow matching

 

Flow matching은 이러한 CNF의 vector field를 시뮬레이션 없이 효율적으로 학습하는 방식으로, 미분방정식을 적분해야 하는 부담을 피할 수 있다. 시작 분포 $p_0(x)$에서 목표 분포 $p_1(x)$로 데이터를 이동시키는 연속적인 경로를 vector field로 정의하고, 이 경로를 따라 중간 시간 t에서 각 샘플이 어떤 방향으로 움직여야 하는지를 직접 regression 방식으로 학습한다. 

 

 

✦ Conditional flow matching

 

conditional flow matching은 flow matching의 conditioned 버전으로, 특정 조건이 주어졌을 때 노이즈에서 실제 데이터를 복원하는 경로를 학습한다. $x_0$는 표준 정규분포에서 샘플링한 노이즈, $x_1$은 훈련 데이터에서 샘플링한 실제 데이터, c는 비디오나 텍스트와 같은 조건을 의미한다. 학습 과정에서는 $x_0$와 $x_1$ 사이를 선형으로 보간한 $x_t$를 정의한다. 이 때, $x_t$는 위에서 첫 번째 식으로 계산되며, 시간 t에 따른 중간 위치를 의미한다. ground truth flow velocity는 두 점 사이의 차이인 $x_1 - x_0$으로 정의된다. 그래서, 학습하고자 하는 vector field $v_{\theta}$와 ground truth 간의 차이를 L2 loss로 최소화한다. 

 

 

 

✦ Diffusion model

 

diffusion model은 복잡한 데이터 분포와 노이즈 분포 사이를 미리 정해진 스케줄인 forward process에 의해 점진적으로 변환하고, 학습된 모델을 통해 reverse process로 복원한다. 즉, 노이즈를 추가하는 방식이 시간 t에 따라 미리 정해진 함수로 결정되는 것이다. 위 식에서 $\beta_t$는 시간 t마다 노이즈를 얼마나 추가할지 정해주는 하이퍼 파라미터이고, 이는 훈련 정에 고정되어 있다. 이러한 스케줄은 deterministic하고, forward process에서 모든 샘플이 동일한 규칙에 따라 노이즈화된다. 이 방식은 데이터와 노이즈 사이의 변환 경로가 일정하게 제한되어 있기 때문에 샘플마다 최적의 이동 경로 (trajectory)를 반영하기가 어렵다. 또한, 많은 타임 스텝을 거치면서 점진적으로 데이터를 변화시켜야 하므로 훈련 시간이 길고, inference 속도가 느리다. 

 

반면, flow matching은 각 샘플 별로 노이즈와 생성 데이터 분포 사이의 직접적인 경로인 vector field를 학습한다. 학습이 완료된 후에는 vector field를 따라 ODE solver를 사용해 노이즈에서 데이터로 적은 스텝으로 변환할 수 있어 유연하고 효율적인 학습과 빠른 샘플링이 가능하다. 

 

이러한 flow matching 기법은 F5-TTS, Stable Diffusion 3 등 다양한 멀티모달 생성 모델에서 핵심적인 역할을 수행한다.

 

 

 


 

✦ 참고

 

https://velog.io/@guts4/FLOW-MATCHING-FOR-GENERATIVE-MODELING

 

FLOW MATCHING FOR GENERATIVE MODELING

논문링크 > https://arxiv.org/abs/2210.02747 저자소개 유튜브 영상 > https://www.youtube.com/watch?v=5ZSwYogAxYg Diffusion 모델보다 복잡한 데이터를 학습할 수 있는 Continous Normali

velog.io

 

https://seastar105.tistory.com/176

 

Flow Matching 설명

Introduction 디퓨전 계열이 생성 모델에서 엄청난 성능을 보여주며 주류가 되어 버린지는 한참 되었다. 그러나 여러 번에 걸친 샘플링이 디퓨전 모델의 좋은 성능을 만들어 주는 것처럼 보이지만

seastar105.tistory.com

 

https://ffighting.net/deep-learning-paper-review/normalizing-flow/normalizing-flow-using-deep-learning/

 

Normalizing Flow 설명 - 딥러닝에서의 활용

Normalizing Flow의 정의와 특징을 알아봅니다. 딥러닝으로 Normalizing Flow를 구현하기 위한 조건을 살펴봅니다. 마지막으로 딥러닝으로 Normalizing Flow를 구현한 모델인 NICE, RealNVP, Glow를 살펴봅니다.

ffighting.net

 

https://turingpost.co.kr/p/topic-20-flow-matching

 

Topic #20: Flow Matching이란 무엇인가?

플로우 매칭의 핵심 개념, 디퓨전 모델과의 연관성, 그리고 생성모델 훈련에 있어ᄉ

turingpost.co.kr

 

https://bayesian-bacteria.tistory.com/4

 

Flow matching for generative modeling

ICLR2023 Notable top 25% (10/8/8/5), Stable diffusion 3Motivation어떤 data-distribution 에서 simple-distribution (e.g. standard gaussian) 으로 변화하는 path (e.g. forward-diffusion process) 를 좀 더 잘 정의해서, 그것의 inverse (image g

bayesian-bacteria.tistory.com

 

https://arxiv.org/abs/2412.15322

 

MMAudio: Taming Multimodal Joint Training for High-Quality Video-to-Audio Synthesis

We propose to synthesize high-quality and synchronized audio, given video and optional text conditions, using a novel multimodal joint training framework MMAudio. In contrast to single-modality training conditioned on (limited) video data only, MMAudio is

arxiv.org