카테고리 없음

VAE / GAN 알고리즘

강블루 2023. 5. 7. 23:04

VAE (Variational Autoencoder)


VAE는 Autoencoder의 확장 버전으로, 입력 데이터의 차원을 축소시켜 잠재 변수(latent variable)를 학습하는 알고리즘입니다.

일반적인 Autoencoder는 입력 데이터를 인코딩(encoding)하여 저차원의 잠재 변수를 만들고, 디코딩(decoding)하여 복원된 출력을 만들어냅니다. 이 때, 인코더와 디코더는 주로 다층 퍼셉트론으로 구성됩니다.

반면 VAE는 잠재 변수의 분포를 모델링하여 다양한 입력 데이터를 생성할 수 있습니다. 

이를 위해 인코더는 입력 데이터를 잠재 변수의 평균과 분산으로 인코딩하고, 디코더는 잠재 변수에서 샘플링한 값을 디코딩하여 생성된 출력을 만들어냅니다. 이렇게 생성된 데이터는 원본 데이터와 비슷하게 보이지만, 더 많은 다양성을 가집니다.

VAE의 예제로는 MNIST 숫자 이미지 생성이 있습니다. VAE를 학습시켜 잠재 변수를 만들고, 이를 이용하여 새로운 숫자 이미지를 생성할 수 있습니다.

 

GAN (Generative Adversarial Network)

 

GAN은 VAE와 마찬가지로 생성 모델링 분야에서 매우 중요한 알고리즘입니다. GAN은 생성자(Generator)와 판별자(Discriminator) 두 개의 네트워크를 사용합니다.

생성자는 잠재 변수에서 샘플링한 값을 이용하여 가짜 데이터를 생성합니다. 판별자는 이 가짜 데이터와 진짜 데이터를 구분하도록 학습됩니다. 이 때 생성자는 판별자를 속이기 위해 더 실제같은 가짜 데이터를 생성하려고 노력하고, 판별자는 더욱 높은 정확도로 진짜와 가짜를 구분하려고 노력합니다.

GAN의 예제로는 CIFAR-10 이미지 생성이 있습니다. GAN을 학습시켜 새로운 이미지를 생성할 수 있습니다.

 

VAE와 GAN의 차이점

 

VAE와 GAN은 생성 모델링 분야에서 각각 다른 생성 방식과 목적을 가지고 있습니다.

VAE는 잠재 변수를 학습하여 잠재 공간에서 샘플링하는 방식으로 데이터를 생성합니다. 

이 때, 생성된 데이터는 입력 데이터와 유사하지만, 보다 다양하고 가우시안 분포를 따릅니다. 

따라서 VAE는 데이터의 분포를 모델링하고 재구성하는 능력을 갖고 있습니다.

반면 GAN은 생성자와 판별자 두 개의 네트워크를 사용하여 가짜 데이터를 생성합니다. 생성자는 잠재 변수에서 샘플링한 값을 이용하여 가짜 데이터를 생성하고, 판별자는 가짜 데이터와 진짜 데이터를 구분하도록 학습됩니다. 

이 때 생성자는 판별자를 속이기 위해 더 실제같은 가짜 데이터를 생성하려고 노력하고, 판별자는 더욱 높은 정확도로 진짜와 가짜를 구분하려고 노력합니다. 

따라서 GAN은 실제 데이터와 가장 유사한 가짜 데이터를 생성하는 능력을 갖고 있습니다.

또한 VAE는 잠재 변수를 학습하여 데이터를 생성하는 데 중점을 두고 있으며, GAN은 실제 데이터와 유사한 가짜 데이터를 생성하는 데 중점을 두고 있습니다.

 

예제

 

VAE의 예제로는 MNIST 숫자 이미지 생성이 있습니다. VAE를 학습시켜 잠재 변수를 만들고, 이를 이용하여 새로운 숫자 이미지를 생성할 수 있습니다.

GAN의 예제로는 CIFAR-10 이미지 생성이 있습니다. GAN을 학습시켜 새로운 이미지를 생성할 수 있습니다.

 

VAE 예제:

 

 

GAN 예제:

 

 

 

이 예제에서는 생성자와 판별자가 각각 따로 구현되어 있으며, 생성자는 100차원의 잠재 벡터를 입력으로 받아 28x28 크기의 이미지를 출력합니다. 

판별자는 28x28 크기의 이미지를 입력으로 받아 이 이미지가 진짜인지 가짜인지 판별하는 이진 분류기입니다.

먼저 생성자와 판별자를 컴파일하고, 판별자는 생성자가 만든 가짜 이미지를 구분하는 역할을 하므로 생성자를 학습할 때 판별자는 학습하지 않도록 합니다. 

그 다음, 각각의 학습을 반복하면서 판별자와 생성자를 번갈아 가며 학습합니다. 

판별자는 진짜 이미지와 가짜 이미지를 입력으로 받아 이진 분류를 수행하고, 생성자는 잠재 벡터를 입력으로 받아 가짜 이미지를 생성합니다.

 

이렇게 생성된 가짜 이미지를 다시 판별자에 입력하여 가짜 이미지를 진짜 이미지로 분류하도록 학습합니다. 

생성자는 자신이 만든 이미지가 진짜 이미지로 분류되도록 학습하게 됩니다.

GAN은 VAE와 달리 생성된 이미지가 실제 이미지와 상당히 유사하며, 다양한 분야에서 이미지 생성에 활용됩니다. 

하지만, 생성된 이미지가 진짜 이미지와 구분하기 어려운 만큼, 어떤 문제에서는 생성된 이미지가 현실적이지 않을 수 있습니다. 

또한, 학습이 불안정하여 모델이 수렴하지 않거나 모드 붕괴 문제가 발생할 수도 있습니다.