Lecture 13 | Generative Models

2022. 3. 27. 13:39

Lecture 13 | Generative Models

Unsupervised Learning

지도학습

  • 데이터 x를 레이블 y에 매핑시키는 함수를 배우는 것

비지도 학습

  • 레이블이 없는 학습 데이터만 가지고 데이터에 숨어있는 기본적인 구조를 학습시키는 것

비지도 학습이 인기있는 이유

  • 레이블이 없기 때문에 데이터의 비용이 적다.
  • 데이터의 숨겨진 구조를 잘 찾는다면 visual world의 구조를 이해할 수 있는 아주 좋은 발판이 된다.

 

Generative Models

비지도 학습 중 하나인 생성모델에 대해서 알아보자

목적

  • 동일한 분포에서 새로운 샘플들을 생성해 내는 것

비지도 학습의 핵심문제는 학습 데이터의 근본이 되는 분포를 추정하는 것이다.

비지도 학습은 크게 2가지로 나뉜다.

  • Explicit density: 생성 모델 $P_{model}$의 분포가 어떨지 명시적으로 정의하는 경우
  • Implicit density: $P_{model}$을 생성하는 것을 같지만 분포를 추정하지 않는 경우

 

PixelRNN & PixelCNN

Fully visible belief network

특징

  • Explicit density model : 밀도를 명시적으로 정의 하고 모델링

과정

  • 체인룰로 likelihood p(x)를 1차원분포들 간의 곱의 형태로 분해(decompose)한다.
  • 이후 likelihood를 정의했으니 이제 모델을 학습시키려면 학습 데이터의 likelihood를 최대화시킨다. (MLE)

문제점

  • p(x)는 이전의 모든 픽셀의 값들의 영향을 받기 때문에 매우 복잡하다.

→ 따라서 Neural Netwrok를 이용!

 

Q. 그런데 픽셀들의 순서는 어떻게 다룰까?

 

PixelRNN

  • 이미지를 각각의 픽셀로 나눈 후
  • 좌상단부터 시작하여 화살표 방향으로의 연결성을 기반으로 순차적으로 픽셀을 생성
  • 그 후 이러한 방향성을 기반으로 한 픽셀들간의 종속성을 RNN(LSTM)을 이용하여 모델링

 

단점

  • 잘 동작하지만 순차적인 생성 방식이기 때문에 아주 느리다.

 

PixelCNN

context region에서 CNN을 사용 즉, 특정 픽셀을 생성할 때 특정 픽셀만 고려한다.

  • 각 픽셀에서 CNN을 수행한다. 이떄 CNN에서는 출력값을 가지고 softmax loss를 계산할 수 있다.
  • 또한 여기서 레이블은 0~255가 되고 PixelCNN 역시 likelihood가 최대가 되도록 학습시킨다.

 

PixelCNN은 픽셀이 ground truth를 가지고 라벨(0~255)들의 대하여 classification을 하는 것이라고 볼 수 있다.

 

 

장점

  • PixelRNN보다 빠르다

→ Train time에서 하는 일은 학습데이터의 likelihood를 최대화하는 것인데 학습 데이터는 이미 우리가 알고있는 값이기 때문에 학습 과정을 병렬화 할 수 있다.

 

 

단점

  • test time에는 현재 픽셀을 생성하기 위해 이전 픽셀부터 순차적으로 처리해야 한다. 따라서 여전히 느리다.

 

Generation Sample (PixelCNN)

 

Summary

Pros

  • 명시적으로 likelihood p(x)를 계산할 수 있다.
  • 학습 데이터의 명시적 likelihood가 주어지면 그것은 좋은 지표가 될 수 있다.

Con

  • 생성과정이 순차적이기 때문에 상당히 느리다.

 

Variational Autoencoder (VAE)

  • PixelCNN은 계산가능한 밀도 함수를 정의하고 training data의 likelihood를 최적화시킨다.
  • 반면에 VAE의 경우 직접 게산이 불가능한 확률 모델을 정의한다. 따라서 식을 직접 최적화시킬 수 없다.
  • 따라서 VAE에서는 likelihood의 lower bound를 구해서 최적화시켜야 한다.

 

Autoencoder

Encoder

  • AE의 목적은 데이터 생성이 아니라 레이블되지 않은 학습 데이터로부터 저차원의 feature representation을 학습 하기 위한 비지도 학습이다.
  • 여기서 Encoder는 입력데이터 x를 fearture z로 변환하는 매핑함수의 역할을 한다.
  • 이때 z는 x의 중요한 특징들이 담겨져있는 벡터이기 때문에 dimentionality reducetion이라고도 한다.

 

Q. How to learn this feature representation?

 

 

Decoder

  • AE는 원본을 다시 복원하는데 사용될 수 있는 특징들을 학습하는 방식을 취한다.
  • 복원하는데 사용될 수 있는 특징 z는 Decoder에 들어가 입력 x와 동일한 차원의 data를 만들고 이때 Decoder는 기본적으로 Encoder와 동일한 구조를 갖는다.

 

Loss function

  • AE는 이렇게 Decoder로 만들어진 데이터와 입력으로 주어진 데이터를 가지고 L2 loss를 구한다.(이때 loss가 의미하는 것은 원본이미지를 얼마나 잘 복원했는가를 의미, 즉 생성된 이미지와 원본 이미지의 차이 == Loss)

 

Autoencoder 활용

  • 학습이 끝난 AE는 decoder를 버린다.

 

Autoencoder 특징

  • AE가 학습 데이터의 variation을 잘 포착해 낼 수 있다는 직관을 가질 수 있다. 즉, 잠재 변수인 z가 학습 데이터의 variation을 잘 자지고 있는 것이다.

 

Variational Autoencoder

VAE는 AE의 z가 학습 데이터의 variation을 잘 가지고 있다는 사실을 기반으로 만든 모델이다.

  • 기본적으로 VAE는 AE의 decoder구조만을 사용하여 만든 생성 모델이다.
  • 생성과정에는 z에 대한 prior로부터 샘플링을 수행한다. (attributes들이 어떤 distribution을 따른느지에 대한 prior를 정의해야한다.)
  • Conditional distribution p(x|z)로부터 샘플링하여 데이터 x를 생성해낸다. 이를 위해서 먼저 z를 샘플링하고 z를 이용해서 이미지 x를 샘플링한다.

 

  • 생성모델의 목적은 새로운 데이터를 잘 생성하기 위해 true parameter를 잘 추정해야 한다.

 

Q. How should we represent this model? (어떻게 모델을 설계하면 좋을까?)

  • 우선 prior p(z)를 간단한 Gaussian과 같은 분포로 선택한다.
  • 그 다음 p(x|z)를 통해 이미지를 생성한다. 하지만 이는 복잡하기 때문에 Neural Network로 표현한다.

 

Q. How to train the model? (어떻게 모델을 학습 할까?)

 

 

  • training data의 likelihood를 최대화하도록 학습한다. (MLE)

 

문제점!!!

→ Intractable!!

 

Intractability

  • 우리는 모든 z에 대해서 p(x|z)를 적분하고 싶지만 이것은 계산할 수 없다.

 

따라서 한 가지를 정의하여 이를 해결한다.

→ p(z|x)에 근사화시킨는 q(z|x)를 정의!!

 

 

Probabilistic generation model(확률론적 생성 모델)

따라서 VAE의 목적은 확률론적(계산을 할 수 없으므로 근사화시킨느 방법) 생성 모델을 만들고 싶은것이다.

  • Encoder에서는 x에대한 z의 평균과 공분산을 만들고 Decoder에서는 z에대한 x의 평균과 공분산을 만들어 각각 샘플링을 한다.

 

VAE 전체 계산 과정

각각의 항의 의미

  • 첫 번째항 : 이 항은 샘플링을 통해서 계산할 수있다. 샘플링 과정에서 미분이 가능하도록 하는 re-parameterization trick을 사용한다.
  • 두 번째항 : 이 항은 두 가우시안 분포 간의 KL divergence이다. q(z|x)는 encoder에서 발생하는 분포로 편균/공분산을 가지는 가우시안 분포이다. 또한 prior p(x) 역시 가우시안이다. KL에서 두 분포가 모두 가우시안이면 closed form solution으로 풀 수 있다.
  • 이 항은 q(z|x)와 p(z|x)강의 KL이다. 기존 p(z|x)는 계산 불가능하기 때문에 q로 근사화 시킨것이다. 이 항은 여전히 문제가 되지만 단서 하나가 있다. KL은 두 분포강의 거리를 나타내므로 정의로 보면 항상 0보다 크다.

 

  • 따라서 계산이 불가능한 항은 항상 0보다 크기때문에 계산이 가능한 앞에 두 항의 lower bound를 구해 이 lower bound값이 최대가 되도록 최적화 시키는 것이다.
  • 즉 data likelihood의 lower bound를 최적화 시키는 것이고 이는 data likelihood가 적어도 우리가 최대화시킨 lower bound보다는 항상 높다는 것을 의미한다.

 

정리

  • 입력 x가 들어오면 encoder과정인 p(z|x)를 해야하지만 계산이 불가능하기 때문에 p(z|x)를 근사화시킨 q(z|x)로 z를 샘플링하고
  • Decoder에서는 p(x|z)를 가지고 x를 샘플링하여
  • 최종적으로 lower bound를 최대화 시키는 최적화 방법을 사용한다.

 

Generating Data

  • VAE를 학습한 후 data를 생성해 낼 때는 decoder만을 사용한다.
  • 학습된 $\theta$를 가진 p(x|z)분포에서 샘플링하여 data를 생성한다.
  • 이렇게 생성해낸 z분포에서 적절한 백분위 범위에서 z1, z2를 뽑아 표시하면 위와 같다.
  • z1, z2가 변함에 따라 생성된 이미지는 아주 부드럽게 변하고 있는 것을 볼 수 있다.
  • 이렇게 뽑아 낼 수 있는 이유는 prior z는 diagonal convariance를 가정했기 때문에 z의 각 차원이 독립적이며 이로인해 각 차원마다 독립적인 해석이 가능한 요소들이 인코딩 될 수 있기 때문이다.

 

Generation Sample (VAE)

 

Generative Adversarial Networks (GAN)

  • 사실 우리가 생성모델에게 원하는 것은 샘플링을 잘 하는 능력이다. 이는 우리가 가진 분포에서 샘플링만 잘하면 된다는 의미이다.
  • 따라서 GAN은 직접 확률분포를 모델링하지 않는다.
  • GAN에서는 게임이론의 접근법을 사용하여 2-player game이라는 방식으로 학습분포를 학습한다.

 

GAN

  • GAN은 간단히 말하면 복잡한 고차원 학습분포로부터 샘플링을 하는 것이다. 하지만 이를 직접 할 수 있는 방법을 없다.
  • 따라서 gaussian random noise같은 간단한 분포에서 샘플링하고 그단순한 분포에서 우리가원한느 학습 분포로 transformation하는 함수를 배우고자 한다.

 

Q. What can we use to represent this complex transformation?

→ Neural Network를 사용!!

 

 

Two-player game

Two-player game

  • Generator Network: 사실적인 이미지를 생성하여 discriminator를 속이는 것이 목표
  • Discriminator: 입력이미지가 실제인지 거짓인지로 구별하는 것이 목표

 

GAN Idea

  • discriminator가 아주 잘 학습이 되서 진짜인지 가짜인지를 아주 잘 구별할 수 있다면 generator는 discriminator를 잘 속이기 위해서 더 실제같은 가짜이미지를 만들 수 있어야한다.

 

MinMax objective function

  • 여기서 $\log{D_{\theta_d}}(x)$는 실제 데이터 x가 데이터 분포 $p_{data}$에 속할 likelihood이다.
  • 따라서 실제 데이터에 대한 likelihood인 $\theta_d$를 최대화 시키고 가짜 데이터(생성한 데이터)에 대한 likelihood인 $\theta_g$를 최소화 시키는 방법으로 학습한다.

 

Update

  • 위와 같은 minmax 방법을 사용하기 때문에 discriminator는 gradient ascent방법을 통해 $\theta_d$를 최대화시키는 최적화 방법을 사용하고 generator는 gradient descent방법을 통해 $\theta_g$를 최소화시키는 방법으로 최적화를 진행한다.

 

Problem : 실제로는 generator의 objective function이 학습이 잘 안된다.

→ Loss그래프를 보면 Loss의 기울기 즉 gradient가 오른쪽으로 갈 수록 점차 커진다. 이는 D(G(x))가 1에 가까울 수록 기울기도 커진다는 의미이고 generator가 discriminator를 잘 속이고 있으면 gradient도 점점 더 커진다는 것을 의미한다. 여기서 문제가 된는 것은 gradient가 generator가 생성을 잘 하고 있는 지역에만 몰려있다는 점이다.

Solution

 

  • 따라서 discriminator가 올바르게 판별할 분포의 likelihood를 최소화하는 것 대신에 잘 못 판별할 likelihood를 최대화한다.

 

과정

  • 전체적인 학습 순서는 discriminator를 조금 학습 시키고 그 다음 generator를 학습시키는 방식이다. (여기서 학습이란 단순히 판별하고 생성하는 것이 아닌 파라미터를 업데이트 시키는 것을 의미)

 

과정 설명

  • 먼저 discriminator를 k번 진행한다.
    • noise p(z)로부터 z를 얻는다.
    • 실제 데이터 p(x)로부터 x를 얻는다.
    • 이후 생성모델을 통해 가짜이미지를 만들고 graident ascent를 통해 discriminator를 업데이트한다.
  • 똑같이 noise p(z)로 부터 z를 얻고
  • gradient ascent를 통해 generator를 업데이트 한다.

 

Generation Sample (GAE)

 

Recap


Syllabus

Youtube

BELATED ARTICLES

more