Flows as Generative Models
이 포스트에서는 Flow를 사용하여 확률 분포를 변형하는 과정과 Flow가 Markov Process임을 보이겠다.
1. Flow를 이용한 Generative models
Generative Model의 목표는 Source Distribution \( p \) 에서 샘플 \( X_0 \) 를 뽑아서, Target Distribution \( q \) 에 따르는 샘플 \( X_1 \) 로 변환하는 것이다.
\[ X_0 \sim p, \quad X_1 \sim q \]
이 변환을 수행하는 방법 중 하나가 Flow Mapping 이다.
\[ X_t = \psi_t(X_0), \quad t \in [0,1] \]
여기서 \( \psi_t \) 는 시간 \( t \) 에 따라 변하는 매핑이며, 이를 통해 시간이 지나면서 \( X_0 \) 가 점진적으로 \( X_1 \) 로 변환된다.
2. Flow - Diffeomorphism
Flow \( \psi_t \) 는 다음과 같은 매핑을 수행하는 함수이다.
\[ \psi : [0,1] \times \mathbb{R}^d \to \mathbb{R}^d \]
이 함수는 시간 \( t \) 에 따라 변화하는 Diffeomorphism 이다. 즉, 모든 시간 \( t \) 에 대해 역변환 \( \psi_t^{-1}(x) \) 이 존재한다.
\[ X_t = \psi_t(X_0), \quad t \in [0,1], \quad X_0 \sim p \]
3. Flow는 Markov Process이다?
Flow 모델이 마르코프 과정(Markov Process) 임을 보이려면, 임의의 시간 \( t \) 이후의 상태가 오직 현재 상태 \( X_t \) 에만 의존함을 보이면 된다.
\[ X_s = \psi_s(X_0), \quad 0 \leq t < s \leq 1 \]
이제, \( X_0 \) 를 \( X_t \) 를 이용해 다시 표현하면,
\[ X_0 = \psi_t^{-1}(X_t) \]
이를 대입하면,
\[ X_s = \psi_s(X_0) = \psi_s(\psi_t^{-1}(X_t)) \]
여기서 새로운 매핑 \( \psi_{s|t} \) 를 정의한다.
\[ \psi_{s|t} := \psi_s \circ \psi_t^{-1} \]
이는 \( X_t \) 를 입력으로 받아 \( X_s \) 를 출력하는 변환이며, 역시 Diffeomorphism이다.
\[ X_s = \psi_{s|t}(X_t) \]
즉, \( X_s \) 는 오직 \( X_t \) 만을 기반으로 결정되므로, Flow는 마르코프 과정이다.
이 부분이 잘 이해가 안 갈 수 있는데 조금 더 직관적으로 생각해보자.
우리는 원래 \( X_s = \psi_s(X_0) \) 라는 식을 가지고 있다. 하지만 우리는 이를 \( X_t \) 를 기준으로 다시 표현하고 싶다.
이를 위해, \( X_t = \psi_t(X_0) \) 의 역변환을 이용하여 \( X_0 = \psi_t^{-1}(X_t) \) 로 바꾸어 준다.
그런 다음 이를 원래 식에 대입하면, 결국 \( X_s = \psi_s(\psi_t^{-1}(X_t)) \) 가 된다.
이제, 우리는 새로운 변환 \( \psi_{s|t} \) 를 정의하여 \( \psi_{s|t} := \psi_s \circ \psi_t^{-1} \) 로 두면, 결국 \( X_s = \psi_{s|t}(X_t) \) 라는 표현을 얻는다.
이 식은 무엇을 의미할까? 바로 미래 상태 \( X_s \) 는 오직 현재 상태 \( X_t \) 에만 의존한다는 것이다. 즉, 과거 상태 \( X_0 \) 가 필요하지 않다.
그래서 Flow 모델은 결국 Markov Process라는것이다
정리하자면
- Flow 모델을 사용하면, 소스 분포 \( p \) 에서 목표 분포 \( q \) 로 데이터를 변환할 수 있다.
- Flow 모델은 Continuous-Time Markov Process 로 볼 수 있다.
- Flow 모델은 Determininstic Markov Process이다.
결과적으로, Flow 기반 generative model의 목표는 다음과 같다
\[ X_1 = \psi_1(X_0) \sim q \]
즉, Flow \( \psi_t \) 를 통해 초기 분포 \( p \) 에서 샘플링한 데이터가 목표 분포 \( q \) 로 변환되도록 하는 것이다.
4. Flow와 Velocity Field
처음 논문 봤을떄 가장 헷갈리는 부분이었는데, 결국 Flow를 통해 Velocity Field를 구할수 있고 Velocity Field 를 통해 FLow를 구할수 있다는 말이다. Flow는 데이터의 전체적인 변형을 나타내고 Velocity Field는 각 지점에서의 순간적인 변화율을 나타낸다.
Flow \( \psi_t(x) \) 는 시간 \( t \) 에 따라 변하는 함수이며, 이 함수는 다음과 같은ODE를 따른다.
\[ \frac{d}{dt} \psi_t(x) = u_t(\psi_t(x)) \]
여기서 \( u_t(x) \) 는 Velocity Field 로, 데이터가 순간적으로 이동하는 방향과 속도를 결정한다.
처음 조건은 다음과 같다.
\[ \psi_0(x) = x \]
즉, \( t = 0 \) 에서는 Flow가 변형되지 않은 원래 데이터를 유지한다.
Velocity Field를 적분하면 Flow를 구할 수 있다.
\[ \psi_t(x) = x + \int_0^t u_s(\psi_s(x)) ds \]
반대로, Flow가 주어졌을 때 순간적인 변화율을 계산하여 Velocity Field를 구할 수 있다.
\[ u_t(x) = \dot{\psi_t}(\psi_t^{-1}(x)) \]
즉, Flow를 미분하고 inverse를 해서 각 위치에서의 순간 속도를 결정한다.
직관적으로 해석해보자면
- Flow \( \psi_t(x) \) → "데이터가 시간에 따라 변하는 전체 경로"
- Velocity Field \( u_t(x) \) → "각 지점에서 데이터가 순간적으로 이동하는 방향과 속도"
이렇게 생각하면 편하다. 정리하자면
- Velocity Field가 주어지면, 이를 적분하여 Flow를 구할 수 있고
- Flow가 주어지면, 미분을 통해 순간적인 변화율(즉, Velocity Field)을 계산할 수 있다.