1. Normalizing flow (NF)

Normalizing flow는 우리가 알고 싶은 distribution $\pi_x(x)$를 어떤 base density $\pi_u(u)$와 invertible 연산 $f$를 통해 모델링하는 것이다 [nf]. 예를 들어 $x,u$의 dimension이 $D$로 같고 $x=f(u)$라면 $x,u$의 distribution $\pi_x,\pi_u$는 다음과 같은 관계를 만족할 것이다.

$$ \pi_x(x) = \pi_u(f^{-1}(x))\Big|\text{det}\Big(\frac{\partial f^{-1}}{\partial x}\Big) \Big| $$

위와 같은 관계를 성립시키는 $f$를 찾는 것이 normalizing flow의 목적이라 할 수 있다. 여기서 $\pi_u$는 우리가 이미 알고 있고 sampling하기가 쉬운 distribution이어야 의미가 있을 것이다.

Normalizing flow의 목적은 문제에 따라 달라진다. 만약 $\pi_x$의 PDF는 모르고 sample만 알고 있는 경우는 density estimation이 목적이 된다. 즉, $x$의 PDF $\pi_x$를 찾는 것이 목적이다. 주어진 sample의 log likelihood $\log \pi_x$를 최대화하면 되는데 이 때 위의 식이 사용되는 것이다.

반대로 $x$의 sample은 모르고 PDF $\pi_x$만 아는 경우라면 sampling이 목적이 될 것이다. 즉, $x$의 sample을 얻는 것이 목적이 된다. 이 때는 위 식의 양변의 KL divergence를 줄여주는 $f$를 찾으면 된다. 아니면 반대로 $u$의 sample들을 이용해서 $\log \pi_u$를 최대화하는 $f$를 찾는 것도 방법이 될 수 있다.

$$ \pi_u(u) = \pi_x(f(u))\Big|\text{det}\Big(\frac{\partial f}{\partial u}\Big) \Big| $$

위에 기술된 방법들을 쓰기 위해서는 $f$의 inverse와 Jacobian의 determinant를 쉽게 구할 수 있어야 한다. 그래서 다음 section부터는 이러한 성질을 갖도록 $f$를 모델링하는 방법들을 알아볼 것이다.

참고로, inverse와 Jacobian의 determinant를 구하기 쉬운 $f$를 여러 개 합성하여 normalizing flow를 만들 수도 있다. 합성된 함수도 이 성질을 만족하기 때문이다. 예를 들어 $x=f_2(f_1(u))$라고 하면 $\pi_x,\pi_u$의 관계는 다음과 같다.

$$ \pi_x(x) = \pi_u(f_1^{-1}(f_2^{-1}(x)))\Big|\text{det}\Big(\frac{\partial f_2^{-1}}{\partial x}\Big) \text{det}\Big(\frac{\partial f_1^{-1}}{\partial x}\Big)\Big| $$

2. Real-valued Non-Volume Preserving (RealNVP)

RealNVP는 affine coupling layer라고 불리는 bijection를 이용한 normalizing flow이다 [realnvp]. $f$는 다음과 같이 모델링 된다.

$$ \begin{aligned}x_{1:d} &= u_{1:d} \\x_{d+1:D} &= u_{d+1:D} \odot \exp(\alpha(u_{1:d})) + \mu(u_{1:d})\end{aligned} $$

여기서 $f$의 inverse는 다음과 같이 쉽게 구할 수 있다.

$$ \begin{aligned}u_{1:d} &= x_{1:d} \\u_{d+1:D} &= (x_{d+1:D} - \mu(u_{1:d})) \odot \exp(-\alpha(u_{1:d}))\end{aligned} $$

$f$의 Jacobian을 계산하면 다음과 같은 lower triangular matrix matrix가 나온다.

$$ \frac{\partial x}{\partial u} = \begin{bmatrix} I_d & 0_{d \times (D-d)} \\ \ast & \text{diag}(\exp(\alpha(u_{1:d}))) \end{bmatrix} $$

따라서 determinant는 대각 성분의 곱이라서 다음과 같이 쉽게 구할 수 있다.

$$ \det \frac{\partial x}{\partial u} = \exp(\sum_{j=1}^{D-d}\alpha(u_{1:d})_j) $$

여기서 $\mu,\alpha$는 neural network로 모델링하면 된다.