TechNOTE

Normalizing flow 설명 본문

딥러닝, 연구

Normalizing flow 설명

JU1234 2020. 12. 1. 20:05

지난번에, GAN, judy-son.tistory.com/7

 

[리뷰] GAN, Generative Adversarial Nets

공부할 겸, 되짚어볼 겸 GAN 리뷰 시작해 본다! 시작!! 1. Basic Idea Generative Model 을 Estimation 할 때 Adversarial 하게 학습을 시키는 새로운 framework을 제시했다. Sample을 생성해 내는 Generator와,..

judy-son.tistory.com

그리고 VAE judy-son.tistory.com/11

 

[논문리뷰] VAE(Auto-Encoding Variational Bayes)

Auto-Encoding Variational Bayes 너무나도 유명한 논문.. 공부할 겸 다시 읽었다. 읽을 때마다 새로운 느낌이 드는 이유는 뭘까... 신비한 머신러닝의 세계~~ VAE 는 직관적으로 내용을 전부 이해하기에는

judy-son.tistory.com

리뷰를 했었다. 이어서 Generative Model 시리즈이당

Flow-based Generative Model 의 리뷰를 해 볼까 한다. 다음 글을 아주 많이 참고하였다. 

lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

 

Flow-based Deep Generative Models

In this post, we are looking into the third type of generative models: flow-based generative models. Different from GAN and VAE, they explicitly learn the probability density function of the input data.

lilianweng.github.io

 

1. 서론 : GAN, VAE, 그리고 Flow-based Model

GAN과 VAE 는 implicit 하게 실제 데이터의 분포를 학습한다. 그 이유는, 이 모델들에서 데이터를 학습하는 방식인 다음 식을 보았을 때, $p_{\theta}(x^{(i)}) = \int p_{\theta}(x^{(i)}|z)p_{\theta}(z) dz$ 모든 z에 대하여 적분해서 $p_{\theta}(x^{(i)})$ 를 알아 내는 것은 거의 불가능하기 때문이다. 따라서 VAE 같은 경우에는 $p_{\theta}(z)$ 를 $q_{\phi}(z|x)$ 로 변분 추론(variational inference) 하는 방법을 통해 확률 분포를 모델링한다. 

Flow based Model 은 이와 다르다. Invertable 한 transformation  으로 구성되어 데이터의 분포를 explicitly하게 학습한다. 다음 그림이 세 모델의 차이점을 잘 설명해 주고 있다. 

출처 : https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

2. Normalizing Flow 

flow-based generative model 의 기초가 되는 논문이다. arxiv.org/pdf/1505.05770.pdf

Normalizing flow 의 목적은, 어떤 쉬운 분포 (gaussian) z 에, invertable한 연산 f들을 해 주어서, 결국 복잡한 확률분포 p(x)를 모델링 할 수 있도록 하는 것이다. 다음 그림을 참고하도록 하자. 

출처 : https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

2. 1 Change of Variables Theorem 

Normalizing flow 들어가기 전에 이 개념을 알아야 한다... 어떤 single random variable z 를 가정하고,  $z\sim\pi(z)$  라고 할 때. 1-1 mapping function f 를 가정하고 새로운 random varaible $ x = f(z) $ 를 구성하자. f 는 invertable 해서 $ z = f^{-1}(x) $ 이다. 이로부터 x의 probability distribution $p(x)$ 를 어떻게 도출해 낼 수 있을까? 

이렇게 하면 된다.. 수식 입력하기 힘들다 latex 자꾸 오류난다 우씡 이건 단일변수일때 버전이고 multivariable 버전도 비슷하당. 

이렇게.. dz/dx가 determinant 로 바뀐것밖에 차이없다. 

2.2. Normalizing flow 

자 그럼 본론으로 돌아와서, 우리는 알고 있는 간단한 분포인 $p_0(z_0)$ 으로부터, 복잡한 분포인 $p_{K}(z_{K})를 모델링 해야 하므로, 이걸 어떻게 할까? 

$$ 
z_{i-1} \sim p_{i-1}(z_{i-1})
z_i = f_i(z_{i-1}), thus, z_{i-1} = f_i^{-1}(z_i)
$$

$$
p_i(z_i) = p_{i-1}(f_i^{-1}(z_i)) \det{\frac{df_i^{-1}}{dz_i}}
$$

이렇게 된다. 이제 $p_i(z_i)$ 식을 $z_{i-1}$ 에 대한 식으로 나타내서 이전 base distribution으로 복잡한 분포를 모델링할 수 있도록 해야 한다.

2.2.1 Inverse func theorem 

$y=f(x)$ 이고 $x= f^{-1}(y)$ 라면. 라면먹고싶다

$$
\frac{df^{-1}(y)}{dy} = \frac{dx}{dy} = (\frac{dy}{dx})^{-1} = (\frac{df(x)}{dx})^{-1}
$$

2.2.2 Jacobians of invertable func

$det(M)det(M^{-1}) = det(M*M^{-1}) = det(I) = 1$ 이므로 
$det(M^{-1}) = (det(M))^{-1}$

휴.. 이제 마지막 식에 로그 씌워 주면 

$$
logp_i(z_i) = logp_{i-1}(z_{i-1}) - log(\det{frac{df_i}{dz_{i-1}}})
$$ 

이렇게 되어서 이전 분포로부터 현재 분포를 도출해 낼 수 있다. 이걸 k번 반복해 준다고 생각하면 

다음과 같이 나타낼 수 있다. 

각각의 step 을 flow 라고 부르고, 전체를 통틀어서 normalizing flow 라고 부른다. 이 방식을 적용하기 위해서는 , transformation function $f_i$ 는 다음 두 가지 조건을 만족시켜야 한다. 

1. 쉽게 invertable 할 것 

2. Jacobian determinant 계산이 쉬울 것. 

이 Normalizing flow 를 이용한 모델들은 추후에 다뤄 보도록 하겠당 끝 ^_^ ,,

 

반응형
Comments