일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 캐나다 TDBAnk
- 딥러닝
- iterm2환경설정
- agnoster폰트
- 캐나다 은행계좌 개설
- 프라이탁 존버
- 콘도렌트
- GAN
- 프라이탁
- 캐나다콘도렌트
- MachineLearning
- DTW
- pytorch
- 터미널꾸미기
- Generative model
- agnoster폰트깨짐
- 캐나다 TD 한국인 예약
- Docker
- Flow
- 캐나다 은행 계좌 개설
- 캐나다 TD 한국인 직원 예약
- 캐나다 TD 예약
- EATS
- GenerativeModel
- iterm2자동완성
- 머신러닝
- agnoster폰트꺠짐
- iterm2꾸미기
- Normalizing flow
- 캐나다월세
- Today
- Total
TechNOTE
Normalizing flow 설명 본문
지난번에, GAN, judy-son.tistory.com/7
그리고 VAE judy-son.tistory.com/11
리뷰를 했었다. 이어서 Generative Model 시리즈이당
Flow-based Generative Model 의 리뷰를 해 볼까 한다. 다음 글을 아주 많이 참고하였다.
lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html
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하게 학습한다. 다음 그림이 세 모델의 차이점을 잘 설명해 주고 있다.
2. Normalizing Flow
flow-based generative model 의 기초가 되는 논문이다. arxiv.org/pdf/1505.05770.pdf
Normalizing flow 의 목적은, 어떤 쉬운 분포 (gaussian) z 에, invertable한 연산 f들을 해 주어서, 결국 복잡한 확률분포 p(x)를 모델링 할 수 있도록 하는 것이다. 다음 그림을 참고하도록 하자.
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 를 이용한 모델들은 추후에 다뤄 보도록 하겠당 끝 ^_^ ,,
'딥러닝, 연구' 카테고리의 다른 글
Set python3 as default in ubuntu (0) | 2021.04.28 |
---|---|
[논문리뷰] Glow: Generative Flow with Invertible 1×1 Convolutions (2) | 2020.12.02 |
[논문리뷰] VAE(Auto-Encoding Variational Bayes) (0) | 2020.11.27 |
[논문리뷰] CGANS with Projection Discriminator (0) | 2020.11.23 |
[리뷰] GAN, Generative Adversarial Nets (0) | 2020.11.21 |