Overview

Normalizing Flow는 단순한 분포로부터 변환을 통해 학습하여 복잡한 확률분포를 생성한다. 즉, 분포를 모델링한다. 아래 과정은 훈련 과정이며, 생성은 반대 방향으로 진행된다.

Normalizing Flow

Normalizing Flow(NF)는 단순한 확률 분포의 샘플을 Invertible Transformation(역전 가능한 변환)을 여러 번 거쳐 복잡한 실제 데이터 분포로 변환하는 생성 모델이다.

Base Distribution

확률밀도를 쉽게 계산할 수 있는 단순한 분포를 정의한다. 대표적으로 Gaussian Distribution을 사용한다.

$z \sim N(0, I)$

Invertible Transformation

역함수가 존재하는 함수 $f$를 적용한다.

$x = f(z)$

이 함수는 반드시 $z = f^{-1}(x)$를 계산할 수 있어야 한다.

Flow

변환을 여러 번 거치기 때문에 최종적으로 다음과 같은 형태가 된다.

$x = f_K \circ f_{K-1} \circ \cdots \circ f_1(z)$

Change of Variables

다차원이기 때문에 Jacobian Matrix를 사용한다.

  1. $x = f_{\theta}(z)$일 때, $z = f_{\theta}^{-1}(x)$이므로

    $\displaystyle p_X(x) = p_Z(z) \Big| \det \frac {\partial z} {\partial x} \Big|$

  2. 로그를 취하면

    $\displaystyle \log p_X(x) = \log p_Z(z) + \log \Big| \det \frac {\partial z} {\partial x} \Big|$

  3. 여러 변환을 적용한다면 $z_0 → z_1 → \cdots → z_K = x$ 이므로

    $\displaystyle \log p_X(x) = \log p_Z(z_0) + \sum_{k=1}^{K} \log \Big| \det \frac {\partial z_{k-1}} {\partial z_{k}} \Big|$

  4. 실제 데이터 $x$가 높은 확률을 가져야 하기 때문에 Maximum Likelihood을 계산한다.

    $\displaystyle \max_{\theta} \sum_{i=1}^N \log p_{\theta} (x_i)$