Latent Variable Models
D.Kingma의 "VariationalInference and Deep Learning: A New Synthesis" 논문을 앞부분 조금 읽어보자
우리가 일반적으로 알고있는 Auto Encoder는 과연 generative model일까?
-> 그렇지않다.
무엇때문에 Variational Auto Encoder가 Generative 모델이 될 수 있는지 살펴본다
VAE(Variational Auto - Encoder)
- Variational inference
- 목적은: Posterior distribution을 찾는거다.
- Posterior distribution은 observation이 주어졌을 때 내가 관심있어하는(찾고자하는) random variable의 확률분포다
- 하지만 Posterior distribution을 찾는게 불가능 할 경우가 많다
\begin{equation}
p_{\theta}(z \mid x)
\end{equation} - 그래서 얘를 학습할수있는(최적화 할 수있는) 상태로 근사하겠다
- 근사하는 분포가 바로 Variational distribution이다
\begin{equation}
q_{\phi}(z \mid x)
\end{equation} - Posterior distribution에 근사하는 Variational distribution을 찾는 일련의 과정을 Variational Inference 라고부른다
이 부분이 Variational Auto - Encoder의 Encoder부분에 해당한다
뭔지도모르는Posterior distribution에 근사하는 Variational distribution을 찾는게 목적인데 어불성설이 나타남
loss function이 있는데 target을 모른다 하지만 loss function을 줄이고싶다..
이걸! 가능하게 해주는게 variational distribution의 ELBO track이다.
ELBO를 계산해서 키움으로써 반대급부로 원하는 object를 얻고자한다.
-> 결과론적으로 계산할 수도 없는 임의의 Posterior distribution과 내가 optimization 하고자하는 variational distribution사이의 거리를 줄이는 어떤 목적을 ELBO를 maximize함으로써 얻을 수 있다.
이걸 활용해서 variational auto encoder를 학습하는게 제일 key idea다.
Posterior distribution은 계산할 수 없지만 ELBO는 계산할 수 있다.
궁극적으로 하려고 하는것은 어떤 x라는 입력(이미지라는 공간)이 있고 이 입력을 잘 표현할 수 있는 공간 z(latent space)를 찾고싶다
우리가 z에대한 확률분포 given x라는 posterior를 모르니까 이 posterior를 잘 찾기위해서 variational distribution(혹은 encoder)으로 근사하고싶다
하지만 posterior를 잘 모르니까 variational inference라는 테크닉으로 ELBO를 maximize하는것이 posterior distribution과 varitional distribution의 사이를 줄이는것과 같은 효과를 낸다.
ELBO는 reconstruction loss와 Prior Fitting Term으로 나뉜다.
encoder를 통해서 x라는 입력을 latent space로 보냈다가 다시 decoder로 돌아오는 이 reconstruction loss를 줄이는 것이 Reconstruction Term이다
x라는 이미지가 많이 있는데 이 이미지를 잔뜩 latent space로 올려놨다면 이미지는 latent space의 점들이 된다.
이 점들이 이루는 분포가 내가 가정하는 latent space의 prior distribution(사전분포)와 비슷하게 만들어주는 2가지 오브젝트를 동시에 만족해주는것과 같다.
이를 잘 설명해서 구현까지 한것이 Variational Auto Encoder다
그래서 Variational Auto Encoder가 Generative Model이 될 수 있다.
입력이 주어지고 얘를 latent space로 보내서 무언가를 찾고 얘를 다시 reconstruction 한 term으로 만들어지는데 generative모델이 되기 위해서는 latent space된 prior distribution으로 z를 sampling하고 얘를 Decoder를 태워서 나온 아웃풋(이미지들)들이 바로 generational result라고 본다.
그렇기때문에 엄밀하게 auto encoder는 generational 모델이 아니다
- key limitation
VAE는 explicit 모델이 아니다
-> 어떤 입력이 주어졌을 때 이 값이 얼마나 likely한지(그럴싸한지) 알기 힘들다
ElBO가 결국엔 reconstruction term과 prior fitting term(KL divergence term 으로 나뉘어졌는데 reconstruction은 neral network 2번 태우고 loss구하면되지만 KL divergence는 가우시안을 제외하고는 Closed Form이 나오는 경우가 많이 없다
SGD나 Adam으로 최적화 시키기위해 미분이 돼야한다 KL divergence는 자체로 적분이 있기때문에 Closed Form 을 뽑아낼 수 없으면 계산을 할 수 없다 그렇기 때문에 대부분의 VAE는 가우시안 prior를 사용한다.
- VAE의 가장 큰 단점
인코더를 활용할 때 prior fitting term이 KL divergence term을 활용한다는것이다.
그렇기 때문에 가우시안이 아닌경우 활용하기 힘들다.
Adversiarial Auto - encoder
Gaussian Distribution이 아닌 다른 prior distribution을 활용하기 위해 나왔다
AAE는 VAE의 prior fitting term을 GAN objective로 바꿔버린 것에 불과하다.
AAE는 잠재분포(latent distribution)를 샘플링한 어떤 분포라도 prior distribution에 맞출 수 있다.
성능도 VAE에 비해서 좋은 경우가 많다.
GAN(Generative Adversarial Network)
Generator. 위조지폐를 만들어서 경찰을 속이려는 범죄자
Discriminator. 본인이 가지고있는 지폐와 위조지폐를 보고 비교해서 판별하는 경찰
G와 D의 순환을 계속 반복하여 Generator 성능을 더 높이는 것이 GAN의 목적이다.
그러나 GAN의 장점은, 무엇보다도 Generator를 학습시키는 Discriminator가 점차 좋아진다는 데에 있다.
VAE와 GAN의 차이점
VAE
- VAE는 입력값 x를 인코더를 통해 latent vector z로 만들고, 만들어진 z를 다시 decoding하여 원래 x로 복 원시키도록 인코더와 디코더의 파라미터를 학습한다.
- 생성은 잠재분포 p θ(z)를 샘플링한 뒤 디코딩하여 x_new를 만들어낸다.
GAN
- z라는 잠재분포(latent distribution)에서 출발하여 Generator를 통해 Fake 이미지를 만들어낸다.
- Discriminator는 기존의 레이블된 이미지와 Fake 이미지를 비교하여 판독하며 분류기를 학습한다.
- Generator는 Discriminator가 Fake 이미지에 대해 True가 나오도록 위조기를 업데이트하여 학습한다.
- Discriminator는 판독을 더 잘해지도록 학습하고 Generator는 Discriminator를 더 잘 속이도록 학습한다.
- minimaxgame
minimaxgame은 일반적으로 한쪽은 높이고 싶어하고 한쪽은 낮추고 싶어하는거다.
GAN Objective
Discrminator 알고리즘
Discriminator입장으로(Generator에서 z를 제외하고 D만 볼경우)
아래의 수식은 Generator가 fix가 되어있을 때 얘를 항상 최적으로 갈라주는(최적화 Optimialization form) Optimal Discriminator이다
Generator 알고리즘
동일한 Loss에 대해서, Dicriminator는 최대화하려고 했다면 Generator는 최소화하려고 한다.
Optimal Discriminator를 Generator의 수식에 적용시키면, 다음과 같은 식을 유도할 수 있다.
이 수식을 통해, GAN의 목적은 실제 데이터의 분포와 학습한 데이터의 분포 사이에 Jenson-Shannon Divergence(JSD)를 최소화하는 것임을 알 수 있다.
이 수식은 Discriminator가 Optimal하다는 가정 하에, Generator 알고리즘에 대입해야 나오는 식이다.
실제로 Discriminator가 Optimal Discriminator에 수렴한다는 것을 보장하기힘들고,
그렇게되면 Ganerator가 위의 식과 같이 전개될 수 없다.
따라서 이론적으로는 타당하나 현실적으로는 JSD를 줄이는 방식을 사용하기 힘들기는 하다.
DCGAN
일반적인 GAN은 MLP를 사용해서 만들었고, DCGAN은 이를 이미지 도메인으로 개량 했다.
Generator에는 Deconvolution을 활용했고, Discriminator에는 Convolution 연산을 수행했다.
Info-GAN
학습할 때 z를 통해 이미지만 만드는게 아니라 c(random한 onehot vector)를 집어넣는다.
generation을 할 때 특정 모드(C라는 컨디션벡터(원-핫벡터)에 집중할수있게 해준다.
Text2Image
인풋이 문장이고 conditional GAN을 만들어서 이미지를 만든다.
-> 문장이 주어지면 이미지를 만든다.
Puzzle - GAN
이미지 안에 subpatch가 있기때문에, sub patch를 받아서 원래의 이미지를 복원
Cycle GAN
이미지사이의 도메인을 바꿀 수 있다.
Cycle-consistency loss
Cycle GAN은 Cycle-consistency loss라는 loss를 사용했다.
원래 도메인(달리는 말)을 다른 도메인(달리는 얼룩말)로 변경하려면 일반적으로 두 사진이 필요하다
하지만 Cycle-consistency loss는 임의의 말 이미지(물 마시는 말, 달리는 말)들과 임의의 얼룩말 이미지(물 마시는 얼룩말, 달리는 얼룩말)들을 잔뜩 모아두고, 이를 이용해 하나의 이미지를 다른 도메인의 이미지로 그냥 변형시켜준다.
-> 이 과정에서 GAN구조가 두개 들어있다.
Star - GAN
이미지를 원하는 형태로 Control 할 수 있게했다.
Progressive GAN
고해상도의 이미지를 만들 수 있다.
4X4 이미지부터 점진적으로 1024 X 1024 이미지까지 픽셀을 키워가는 생성방법을 사용했다
TRANSFORMER의 DALE를 더 공부해보자
'부스트캠프 AI Tech 2기 > 2기 U-Stage' 카테고리의 다른 글
3주차 PyTorch 프로젝트 구조 이해하기 (0) | 2021.08.17 |
---|---|
3주차 Introduction to PyTorch (0) | 2021.08.17 |
2주차 학습정리 (0) | 2021.08.13 |
2주차 Generative Models 1 (0) | 2021.08.13 |
2주차 Transformer (0) | 2021.08.12 |