On the journey of

[CSE] Generative Model 개괄 (1) 본문

Experiences & Study/CSE URP' 29

[CSE] Generative Model 개괄 (1)

dlrpskdi 2023. 7. 7. 10:27

1. Generative Model이란?

- 목적은 데이터의 '분포'를 학습하여 모방하기 위한 것으로, input data와 label이 있을 때 P(x|y,theta) (이때 x - input data, y- label, theta - model parameter) 를 구하는 것이라고 할 수 있다. 

 

2. Generative Model 개요

크게 지도적 / 비지도적 생성모델의 2가지 종류가 있다. 

 가. 지도적 생성모델 : Label이 있는 데이터에 대해 각 클래스별 확률분포를 추정한 다음 베이즈 정리를 사용해 P(Y|X)를 계산하는 방법을 사용하는 모델이다. 

: 베이즈 정리와 사전 확률을 활용한 사후 확률의 계산

 

 나. 비지도적 생성모델: Label이 없는 데이터를 사용하기에, 데이터 input X 자체의 분포를 학습하여 그 모분포를 추정하는 모델이다. 실제 대부분의 생성모델은 비지도적 생성모델이며 GAN 기반의 모델류는 원본의 확률분포를 학습하여 새로운 데이터를 생성하는 비지도적 생성모델의 대표 주자라고 할 수 있다.

 

3. 딥러닝을 이용한 생성 모델에 이용되는 수학

ⓒlan Goodfellow Prof. , Tutorial on Generative Adversarial Networks, 2017

 

생성모델을 크게 3가지 종류로 구분한 굿펠로우 교수의 자료이다. GAN 기반, GEN 모델 등 GAN와 GEN을 명확히 구분할 수 있으며 Density를 기준으로 3개 종류로 구분되는 것을 확인할 수 있다.

  • Tractable Density : 데이터 X를 보고 확률분포를 '직접' 구하는 방법
  • Approximate Density : 데이터 X를 보고 확률분포를 '추정'하는 방법
  • Implicit Density : 데이터 X의 분포를 몰라도 되는 방법

3-1. Tractable Density - Pixel RNN / CNN

이전 픽셀이 어떤 것인지에 따라 다음 픽셀에 무엇이 나오는지를 순차적으로 확인, 학습하는 모델이다. Chain Rule(체인규칙)을 통해 직접적으로 학습 데이터의 분포를 구하는 것이라고 볼 수 있다. 도식화한 것은 아래와 같다. 

3-2. Approximate Density ( VAE: Variational Auto - Encoder)

Auto- Encoder은 input x가 있을 때, 이 input을 언제든지 reconstruct(다시 만들어낼 수 있는)할 수 있는 z를 만드는 것이 목적이다. VAE는, 이 인코더와 결이 유사하다. input x가 만들어지는 확률 분포를 찾는 것이 목적이기 때문이다. 

실제로 Auto-Encoder(왼쪽 그림)의 경우, 원본 데이터를 저차원으로 압축하여 vector(latent vector; 잠재벡터) 형태로 저장한 후, 이를 decoder에서 원본 데이터처럼 복원하는 것이다. VAE는 이러한 잠재벡터에 정규분포 항을 추가하여 latent vector를 조금씩 변형하면서 복원하는 것이 목적이다. 차이가 있다면, 정규분포 항과 같은 noise를 추가함으로써 보다 다양한 데이터를 생성해낼 수 있다는 장점이 있다는 것 :)

 

VAE의 디코더는 인코더가 만들어낸 z의 평균과 분산을 모수로 하는 정규분포를 전제로, 데이터의 사후확률 P(z|x)를 학습한다. 하지만 사후확률의 계산이 어려운 만큼 다루기 쉬운 분포인 q(z)를 근사하는 추론(변분추론)을 주로 사용한다. 

변분추론은, P(z|x) 간의 KL-Divergence르 계산하여, 이 값이 줄어드는 쪽으로 q(z) 업데이트를 반복하여 최종적인 결과물을 얻어내는 방법론이다. 이때, KL-Divergence란 확률분포 간 엔트로피의 차이를 의미한다. 

#KL Divergence Python으로 구해보기 : Pytorch
import torch
import torch.nn.functional as F
pred = torch.randn(100,10) #배치사이즈, 클래스 개수
target = torch.randn(100n10)

kld =  F.kl_div(F.log_softmax(pred,dim=1), F.softmax(target,dim=1), reduction='batchmean')

3-3. Implicit Density(GAN: Generative Adversarial Networks)

: GAN에서는 G(Generator // Generative Model)에는 실제 데이터가 들어가지 않으며, D(Discriminator, Discriminate Model)만드로 그 차이를 구분한다. 

위와 같은 식으로 표현할 수 있는데, 여기서 D(x)는 true data distribution(실제 데이터분포)로부터 온 x의 확률, G(z)는 랜덤 벡터 z로부터 생성된 데이터를 의미한다. 여기서, 위 식의 minmax V(D,G) (V는 Value의 머리글자)가 오르면 D가 더 좋다는 의미이며, 반대로 V가 내려가면 G가 더 좋다는 의미이다.