Normalizing Flow

Normalizing flow는 Evidence Lower Bound(ELBO)를 사용하는 VAE나 Discriminator-Generator의 GAN과는 완전히 다른 생성 모델이다. Normalizing Flow는 Change of Variables를 이용하여 단순한 분포(일반적으로 가우시안)에서 복잡한 분포(최종적으로 생성하려는)로 직접 변환하여 데이터를 생성한다.

여기서 데이터 분포를 변환한다는 것은 데이터를 변환한다는 것이 아니라 데이터가 존재하는 벡터 공간을 변환한다는 이야기다. 원본 데이터가 존재하는 벡터 공간을 데이터를 다루기 쉬운의 벡터 공간으로 변환하는데, 이때 벡터 공간을 선형으로 변환 가능하면 단순히 행렬 곱으로 가능하지만, 복잡한 데이터 분포는 선형으로 변환이 안되기 때문에 비선형 변환을 해야 한다. 또한 데이터를 생성하려면 변환 된 벡터 공간에서 샘플링 한 데이터를 다시 원본 데이터가 존재하는 벡터 공간으로 역 변환을 해야 하는데, normalizing flow는 바로 그 역변환을 학습하는 모델에 해당한다. 비슷한 개념이 diffusion 모델에도 적용되지만, diffusion model은 noise를 더하고 빼는 방법을 사용하므로 invertible이라는 제약 조건이 없다. 한편 autoencoder 류의 모델은 벡터 공간을 변환하는 것과 달리 데이터를 (일반적으로 저 차원인) 다른 벡터 공간에 투영(projection)하는 것에 기반한 방법이라 할 수 있다.

normalizing flows는 단순한 base 분포(일반적으로 가우시안) $p(\bold{u})$에서 뽑은 확률 변수 $\bold{u} \in \mathbb{R}^D$를 비선형이지만 가역인 변형 $\bold{f}:\mathbb{R}^D \to \mathbb{R}^D$에 전달하여 복잡한 확률 분포 $p(\bold{x})$를 생성한다. 즉 $p(\bold{x})$는 다음 프로세스에 의해 정의된다.

$$ \bold{x} = \bold{f}(\bold{u}) \\ \bold{u} \sim p(\bold{u}) $$

기본 분포가 단순하더라도 충분히 유연한 변환 $\bold{f}$을 사용하면 변형된 변수 $\bold{x}$에 대한 복잡한 분포를 유도할 수 있다.

$p(\bold{x})$에서 샘플링하는 것은 간단하다. 먼저 단순한 분포 $p(\bold{u})$에서 $\bold{u}$를 샘플한 다음 변환 함수 $\bold{x} = f(\bold{u})$를 계산하면 된다. normalizing flow에서는 기본 분포에서 복잡한 분포로 변환하는 것을 forward 변환이라고 한다.

$p(\bold{x})$를 계산하기 위해 $\bold{f}$가 가역이라는 사실을 이용한다. 복잡한 분포를 base 분포에 다시 매핑하여 ‘normalizes’하는 역 매핑을 $\bold{g}(\bold{x}) = \bold{f}^{-1}(\bold{x}) = \bold{u}$라 한다. (실제 모델에서 역 매핑은 모델의 성능을 평가하는 용도로 사용되며, 기본적인 훈련과 샘플링에서 필수적인 단계는 아님) change-of-variables 공식을 사용하여 다음을 얻을 수 있다.

$$ p_x(\bold{x}) = p_u(\bold{g}(\bold{x}))|\det \bold{J}(\bold{g})(\bold{x})| = p_u(\bold{u})|\det \bold{J}(\bold{f})(\bold{u})|^{-1} $$

여기서 $\bold{J}(\bold{f})(\bold{u}) = {\partial \bold{f} \over \partial \bold{u}}|_\bold{u}$는 $\bold{u}$에서 평가된 $\bold{f}$의 야코비안 행렬이다. 위 식의 양변에 log를 취하여 다음을 얻는다.

$$ \log p_x(\bold{x}) = \log p_u(\bold{u}) - \log |\det \bold{J}(\bold{f})(\bold{u})| $$

단순한 분포에서 원하는 수준의 복잡한 분포로 한 번에 변환할 수 없기 때문에 chain 형식으로 여러 매핑을 연결하여 점점 더 복잡한 분포로 변환하는 방식을 사용한다. (이러한 방식은 이후 diffusion model로 이어진다.)

이것은 다음과 같은 함수 합성으로 구성할 수 있다.

$$ \bold{f} = \bold{f}_N \circ ... \circ \bold{f}_1 $$

$\bold{f}$가 가역이므로 이에 대한 역도 다음처럼 구성된다.

$$ \bold{g} = \bold{g}_1 \circ ... \circ \bold{g}_N $$

이에 대한 log 야코비안 행렬식은 다음과 같이 주어진다.

$$ \log |\det \bold{J}(\bold{g})(\bold{x})| = \sum_{i=1}^N \log |\det \bold{J}(\bold{g}_i)(\bold{u}_i)| $$

확률 변수가 통과하는 경로를 flow라 하고 연속 분포에 의해 형성된 전체 체인을 normalizing flow라고 부른다. 방정식에서 계산에 필요한 변환 함수는 다음 두 가지 속성을 만족해야 한다.