본문 바로가기

AI

Generative Models (pixel rnn/cnn, VAE, GAN)

 

Generative 모델의 큰 분류 

Generative models 
Explicit density Implicit density
Tractable density Approximate density Markov chain Direct
Fully Visible Belief Nets
- NADE
-MADE
Pixel RNN/CNN

change of variables
models (nonlinear ICA)
Vriational  Markov chain GSN GAN
Variational Autoencoder (VAE) Boltzmann Machine

 

 

Genrative model's GOAL : 비지도 학습의 일종으로, 동일한 분포에서 새로운 샘플들을 생성해 내는 것. 

Explicit density : 데이터의 분포에 대한 정보 필요. p(x) 

  -  Tractable density : 분포를 명시적으로 정의. 

  -  Approximate density : 분포를 추정 

Implicit density : 데이터의 분포를 측정할 필요 없음. 


Fully Visible beilief Network 

이미지 데이터 x가 있다고 할 때, x에 대한 확률(likelihood)인 p(x)를 모델링함. 

chain-rule을 사용해서 1차원 분포들간의 곱 형태로 표현 

 

 

 

Pixel RNN

시작점은 좌측 상단 / 우측 하단 에서 화살표 방향으로 진행. (양방향 bidirectional RNN model로도 사용 가능하다.) 

 

 

 

 

대각선 모양으로 1단계씩 t step 증가. 

그림의 그리드의 노드가 픽셀이라고 보면 됨. 

 

즉, 이전 픽셀의 정보를 사용하여 생성하는 RNN(LSTM) 구조. 

 

 

 

 

 

 

이 그림처럼 정사각형에서 5개의 픽셀이 masking 되어 있는 경우,  동그라미 쳐진 픽셀은 그 이전 정보들 (masking 되지 않은 픽셀들)을 사용하여 데이터를 생성하게 된다. 

 

 

 

 

 

 

 

 

하지만, Pixel RNN은 순차적인 방식이기에 매우 느림. 

새로운 이미지를 생성하기 위해 여러번의 feed forward를 거쳐야 함. 

 

이 문제를 해결하기 위해서 Pixel CNN 등장. 

 

 

 

Pixel CNN

마찬가지로 코너 픽셀에서부터 시작.  픽셀들간의 dependency를 CNN으로 modeling 함.

 

아래 그림에서, 회색은 이미 생성된 픽셀.

새로운 픽셀을 생성할 때, 이전 정보 모두를 사용하는 것이 아니라, 특정 영역만을 사용해서 다른 픽셀 값을 생성. 

 

 

Training 단계는 이전보다 빨라졌으나, generation 단계에서는 여전히 코너에서부터 sequential하게 진행되기 때문에 느림. 


VAE (Variational Autoencoder)

  • Intractable density function : 직접 계산이 불가능한 확률 모델을 정의. -> latent variable z 를 사용. 

 

Integral 을 가지고 있어, 직접 최적화 시킬 수 없다.

-> lower bound를 최저화 시키자!


Autoencoder(AE)에 대한 background 

Autoencoder : 레이블되지 않은 데이터(x)로부터 low-dimensional feature representation(z)을 학습시키는 방법. 
(원래 데이터 생성이 목적이 아니었음)
x를 z로 변환하는 mapping function의 역할을 했다. 즉, z가 x의 중요한 요소들이 담겨있는 feature들을 학습시키길 원함. 
일반적으로 z는 x보다 작기 때문에, dimension reduction의 효과도 기대할 수 있다. 

원본을 다시 복원하는데 사용될  수 있는 feature들을 학습시키는 방식을 취한다. 


Encoder는 pow-demsional feature들을 생성하기 위함이고, Decoder는 input data를 복원하기 위함이다. 
(인코더와 디코더 모두 CNN) 

마지막에 L2 Error function을 minimize 시켜, 그 둘이 최대
한 비슷하도록 만든다. 

이 과정을 반복하여, input data의 주된 특징을 잘 추출할 수 있도록 한다. 



 

Decoder는 loss값을 계산하는 용도로만 사용되기에, train 이 끝나면 decoder는 버려도 된다.

 

이때, Trained encoder가 학습한 feature mapping을 supervised model을 initialize하는데에 사용할 수 있다. 

 

-> 디코더 부분을 supervised-module로 대체 

 

추가적으로 classifier를 붙이면, 클래스 레이블을 출력하는 분류 문제로 바뀜. 

 

즉, 데이터가 부족한 지도학습의 초기 가중치로 AE를 사용할 수 있다. 


어떻게 AE로 새로운 이미지를 생성할까?

 

 

 

true parameter = seta star

 

생성모델이 새로운 데이터를 잘 생성하게 하려면, true parameter를 잘 추정해야 한다. 

 

prior(p(z))로는 심플한 가우시안 분포를 사용하기도 한다. 

 

베이즈 룰 사용.

 

 

 

 

 

 

log값을 직접 계산할 수는 없으니, lower-bound를 구하자! 

 

KL-Divergence는 항상 0보다 크거나 같으므로, 0이라고 가정하면 위 식의 lower bound를 구할 수 있다. 

따라서, 이 lower-bound를 optimize 할 수 있다. 

 

 

 


GAN

Game-theoretic approach      

  • 확률 분포를 명시할 필요 없음!!
  • 2-player game으로 학습하자

1. Generator network : 위조범. 경찰로 하여금 위조지폐라고 속이도록 생성함. 

2. Discriminator network : 경찰. 위조지폐와 실제 돈을 잘 구별할 수 있도록 분류함. 

 

  • Objective Function  : Minmax game

 

Discriminator는 목적함수를 최대화 시키고 싶어 함.  ->   D(x)는 1로, D(G(z))는 0으로! 

Generator는 목적함수를 최소화 시키고 싶어 함.  ->  D(G(z)) 를 1로! 

 

 

이때, min쪽에서 초기 grdient가 0에 가까워 초반 학습이 더딘 문제가 발생 -> min을 max로 변경하자. 그러기 위해서 1-를 제거, 

 

 

위 방법으로, 초기 gradient가 높아져서, 학습 진행 속도 향상! 

 

 

 

그림으로 보면, 아래처럼 변화. 

 

 

 

 

 

그런데, 이렇게 생성된 데이터들은 결과가 좋지 않음. 

 

그래서 이 문제를 해결하기 위해 Deep Convolutional GAN 등장. (DCGAN) 

 

 

 

 

 

 

DCGAN

generator가 cnn으로 주어짐.

 

그 결과, 굉장히 real한 데이터가 생성됨. step by step으로 generate됨. 

 

 

  • DCGANs의 특징 : Interpretable Vector Math 

 

 

 

 

 

 

 

 

 

https://jeongwooyeol0106.tistory.com/45 님의 블로그를 참고하여 작성했습니다.

'AI' 카테고리의 다른 글

도커 Basic  (2) 2024.07.15