Flow-based Deep Generative Models

지금까지 작성한 생성 모델 GAN과 VAE는 모두 실제 데이터 $p(\bold{x}) \ (\bold{x} \in \mathcal{D})$의 확률 밀도 함수를 명시적으로 학습할 수 없었다. 왜냐하면 매우 어렵기 때문이다. $p(\bold{x}) = \int p(\bold{x}|\bold{z})p(\bold{z})d\bold{z}$ 와 같은 잠재 변수를 갖는 생성 모델을 예로 들면, 잠재 코드 $\bold{z}$의 가능한 값을 모두 살펴보는 것이 어렵기 때문에 계산이 매우 까다롭다.

Flow 기반 deep 생성 모델은 밀도 추정에 대한 강력한 통계적 툴인 normalizing flows의 도움으로 이 어려운 문제를 정복한다. $p(\bold{x})$의 좋은 추정을 통해 많은 downstream 작업을 효율적으로 완료할 수 있다. —관찰되지 않았지만 실제 새로운 데이터 포인트를 샘플링하는 것(데이터 생성), 미래 이벤트의 드문 것을 예측하는 것(밀도 추정), 잠재 변수 추론, 물완전한 데이터 샘플 채우기 등.

Types of Generative Models

여기서 빠르게 GAN, VAE, flow 기반 생성 모델의 차이를 요약한다.

  1. GAN은 비지도 학습 문제인 데이터 생성을 지도 학습 문제로 모델링하는 영리한 해법을 제공한다. 판별 모델은 생성 모델에 의해 생성된 가짜 샘플에서 실제 데이터를 구분하는 것을 학습한다. 두 모델은 minimax 게임을 플레이 하면서 학습된다.
  2. VAE는 Evidence Lower Bound(ELBO)를 최대화하여 데이터의 log-likelihood를 암시적으로 최적화 한다.
  3. Flow 기반 모델은 가역 변환의 시퀀스로 구성된다. 다른 두 개와 달리 데이터 분포 $p(\bold{x})$를 명시적으로 학습하므로 손실 함수는 단순히 음의 log-likelihood이다.

Untitled

Linear Algebra Basics Recap

flow 기반 모델로 들어가기 전에 2가지 핵심 개념을 이해해야 한다. 야코비안 행렬식과 change of variable rule이다.

Jacobian Matrix and Determinant

$n$-차원 입력 벡터 $\bold{x}$를 $m$-차원 출력 벡터에 매핑하는 함수 $\bold{f} : \mathbb{R}^n \mapsto \mathbb{R}^m$이 주어지면 이 함수의 1차 편도함수의 행렬을 Jacobian matrix $\bold{J}$라 하고 여기서 i번째 행과 j번째 열의 항목은 $\bold{J}_{ij} = {\partial f_i \over \partial x_j}$가 된다.

$$ \mathbf{J} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \dots & \frac{\partial f_1}{\partial x_n} \\[6pt] \vdots & \ddots & \vdots \\[6pt] \frac{\partial f_m}{\partial x_1} & \dots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} $$

행렬식은 정사각 행렬의 모든 요소의 함수로 계산된 1개의 실수이다. 행렬식은 오직 정사각 행렬에만 존재함에 유의하라. 행렬식의 절대값은 ‘행렬의 곱셈이 공간을 얼마나 확장하거나 축소하는지’를 나타내는 척도로 생각할 수 있다.

$n \times n$ 행렬 $\bold{M}$의 행렬식은 다음과 같다.

$$ \det M = \det \begin{bmatrix}a_{11} & a_{12} & \dots & a_{1n} \\a_{21} & a_{22} & \dots & a_{2n} \\\vdots & \vdots & & \vdots \\a_{n1} & a_{n2} & \dots & a_{nn} \\\end{bmatrix} = \sum_{j_1 j_2 \dots j_n} (-1)^{\tau(j_1 j_2 \dots j_n)} a_{1j_1} a_{2j_2} \dots a_{nj_n} $$

여기서 합산 $j_1j_2...j_n$ 아래 첨자는 집합 $\{1,2,..., n\}$의 모든 순열(permutation)이므로 총 $n!$의 항목이 존재한다. $\tau(.)$은 순열의 signature를 지시한다.

정사각행렬 $\bold{M}$의 행렬식은 그것이 가역인지 아닌지를 결정한다. $\det(\bold{M}) = 0$이면 $\bold{M}$은 가역이 아니다. (선형 종속 행이나 열을 갖는 singular 행렬이거나 행이나 열이 모두 0이다.) 반면 $\det(\bold{M}) \ne 0$이면 $\bold{M}$은 가역이다.