딥러닝/기타

Auto Encoder와 Variational Auto Encoder의 직관적 차이

ZeroAct 2021. 12. 18.
728x90
반응형

VAE가 AE보다 좋다...? 학습도 이렇게.. 저렇게.. 하면 된다...? 정도만 알고 있었습니다.

누군가 둘이 뭐가 다르냐고 물어 봤을 때, "VAE가 AE 보다 좋아요" 라고만 말했던 기억이 있네요...

오늘은 이 답답함을 해소하고자 둘의 차이에 대한 직관적인 이해를 해보려 합니다.

 

이번 포스팅은 VAE와 AE의 차이에 대한 직관적 이해만을 목표로 합니다.

Understanding Variational Autoencoders (VAEs) | by Joseph Rocca | Towards Data Science

 

Understanding Variational Autoencoders (VAEs)

Building, step by step, the reasoning that leads to VAEs.

towardsdatascience.com

사실상 이 포스팅 일부를 한국어로 제 식대로 정리한 것입니다.

좀 더 전문적인 설명이 필요하시면 저 분의 포스팅을 정독하시기 바랍니다.

차원 축소

차원 축소는 이름 그대로 어떤 데이터를 표현하는 특징의 수를 줄이는 것입니다.

좀 더 직관적으로, 어떤 데이터를 표현하는데 100개의 특징이 필요하다면, 이를 50개, 10개 혹은 1개의 특징으로 줄여서 표현할 수 있도록 합니다.

이러한 차원 축소는 고차원의 데이터를 시각화하거나, 불필요한 특징을 없애서 오버피팅을 방지한다거나, 계산량을 줄인다거나 여러가지 용도로 사용될 수 있습니다.

 

당연하게도 차원 축소를 할 때, 최대한 기존 데이터의 특징을 적게 잃는 것이 좋은 차원 축소라고 할 수 있겠죠?

 

차원 축소를 좀 일반화 시켜보겠습니다.

encoder : 데이터를 압축된 벡터 혹은 값(latent vector)으로 변환한다.

decoder : 압축된 벡터 혹은 값(latent vector)을 기존 데이터 형태로 복원한다.

 

차원 축소의 목표를 정의하면,

"encoder를 통해 압축된 latent vector가 원본 데이터의 특징을 최대한 유지하면서,

압축된 latent vector를 decoder를 통해 복원하여 원본 데이터와의 차이는 최소화 하는 것"

이라고 할 수 있습니다.

PCA (Principal Component Analysis)

차원 축소하면 가장 먼저 떠오르는 것이죠.

PCA에 대한 자세한 설명은 조만간 따로 업로드 하겠습니다.

간단히 설명드리면 데이터를 잘 압축하는 linear transform matrix를 구하는 방법입니다.

잘 압축하는 linear transform matrix는 encoder가 되고,

이의 역행렬은 decoder가 됩니다.

Auto Encoder

PCA와는 다르게 encoder와 decoder는 우리가 neural network를 어떻게 구성하느냐에 따라 다르게 정의됩니다.

encoder와 decoder는 원본 데이터와 복원된 데이터의 차이(reconstruction loss)를 back-propagation하여 가중치를 반복적으로 업데이트하며 구해집니다.

 

encoder와 decoder를 단층으로 구성하고 non-linear activation function을 추가하지 않는다면 PCA 처럼,

encoder와 decoder는 단순 linear transform matrix가 됩니다.

 

Auto Encoder는 오직 reconstruction loss만을 최소화 시키기 위해 학습됩니다.

만약 encoder와 decoder의 깊이가 충분히 깊다면 임의의 데이터를 단 하나의 실수로도 압축이 가능하고,

reconstruction loss가 0이 되도록 만들 수도 있습니다.

Auto Encoder 의 한계

다시 차원 축소의 목표를 떠올려 봅시다.

차원 축소는 latent vector가 원본 데이터의 특징을 최대한으로 유지해야 합니다.

하지만, 하나의 실수로 압축이 된 경우 과연 원본 데이터의 특징을 잘 유지하고 있을 까요?

왼쪽은 자동차, 비행기, 새, 강아지를 하나의 1차원 벡터(실수)로 압축한 것이고,

오른쪽은 2차원의 벡터로 압축한 것입니다.

왼쪽은 무생물과 생물로만 구분이 되겠지만,

오른쪽은 무생물과 생물 그리고 날 수 있는 것과 아닌것으로 구분이 될 수 있습니다.

 

이러한 특징때문에 encoder와 decoder의 깊이 및 latent vector의 차원(dimension)을 정교하게 잘 결정해야 합니다.

 

우리는 직관적으로 이러한 특징이 over fitting을 유발한다는 것을 알 수 있습니다.

Over fitting이 발생하면 한 데이터에 해당하는 latent vector가 한 개만 존재하고,

학습 중에 나타나지 않은 압축 latent vector 에 대해서는 decoder가 전혀 엉뚱한 데이터로 복원하게 됩니다.

이 때문에 Auto Encoder는 본적없는 새로운 데이터를 생성하는 생성 모델로서는 사용이 불가능 합니다.

Variational Auto Encoder

만약 데이터의 latent vector 들이 적절한 차원에 적절하게 분포되어 있다면,

강아지의 latent vector 와 새의 latent vector 사이 어딘가에 닭이 있지 않을까요?

하지만 앞서 말씀드렸다시피 Auto Encoder의 latent vector 우리가 encoder와 decoder를 어떻게 구성했는지와 latent dimension을 어떻게 정했는지에 따라 달라진다고 했습니다.

때문에, latent vector 가 적절하게 분포되도록 하기위한 기준을 잡기가 어렵습니다.

또한, 학습 과정에서 reconstruction loss를 제외하고는 어떠한 제약 사항도 없기 때문에 잘 분포되기를 바라기는 어렵습니다.

 

VAE는 과적합을 피하고 latent space 가 새로운 데이터를 생성할 수 있도록 좋은 특성들을 가지도록 훈련하는 AE입니다.

여기서 좋은 특성을 가진다는 말은 regular 하다 혹은 organized 하다 라고 표현합니다.

왼쪽 그림은 latent space 상의 한 점이 하나의 데이터와 매핑이 되고, 학습 시 보지못한 점에 대해서는 완전 엉뚱한 데이터로 복원 되는 것을 보여줍니다. (irregular)

오른쪽 그림은 latent space 상에서 비슷한 위치에 있는 점은 비슷한 데이터를 나타내고, 서로 다른 두 점 사이의 점은 두점에 해당하는 데이터의 중간 특징을 가지고 있습니다. (regular)

 

AE는 과적합이되면 데이터를 한 점으로 압축하기 때문에 irregular한 latent space 가 나온다고 했습니다.

그래서 VAE는 데이터를 하나의 점이 아닌 여러개의 정규분포(Gaussian Distribution)로 나타냅니다.

latent vector의 차원을 2라고 하면 encoder는 두 개의 평균과 두 개의 표준편차를 내뱉게 됩니다.

그럼 두 개의 정규분포가 나오게 되고 각 분포에서 한 개의 값을 샘플링하여 총 두 개의 값이 나오게 됩니다.

이것이 VAE의 latent vector 입니다.

 

이렇게 encoder 가 특정 값이 아닌 분포를 예측하게 되면 어떤 점이 좋은지 직관적으로 이해해 봅시다.

자, 세모가 하나의 분포로 압축되도록 학습이 되었습니다.

기존에 한 점으로 압축 되었을 때는 그 점 주변의 점들은 아무런 의미 없는 데이터로 복원이 되었었죠?

하지만 이 경우 세모 분포의 가운데 주변도 세모로 복원이 되게 됩니다.

정규분포이기 때문에 세모 분포의 가운데가 샘플링이 많이 될테니 당연히 가운데로 갈 수록 완벽한 세모로 복원이 되고,

가운데에서 멀어질 수록 덜 세모같이 복원될 것 입니다.

이 그림은 여러 분포가 서로 겹쳐지도록 가깝게 학습된 latent space 입니다.

이렇게 학습이 된 경우 여전히 세모 분포의 가운데 부분의 latent vector는 세모로 복원이 되고,

동그라미 분포의 가운데 부분의 latent vector는 동그라미로 복원 됩니다.

하지만, 각 세모, 동그라미 분포의 가운데 부분과 멀어질 수록 덜 세모, 덜 동그라미 하게 복원이 될 것입니다.

그림의 가운데를 보면 덜 세모, 덜 동그라미, 덜 네모하게 복원되는 점이 생기게 된 것을 볼 수 있습니다.

 

하지만 각 분포가 멀리 멀리 퍼져 있다면 AE와 같은 이유로 다음 그림과 같은 과적합이 발생하게 됩니다.

어떻게 하면 VAE가 이상적인 latent space를 학습하도록 강제할 수 있을 까요?

바로, encoder에서 나오는 평균과 표준편차들이 표준 정규 분포를 이루도록 하면 됩니다.

이 다음부터는 수학적인 정리인데 다른 블로그를 보시는게 더 도움이 될 것 같아 다루지 않겠습니다.

결론

이번 포스팅에서는 AE와 VAE의 차이에 대한 직관적인 이해를 해보았습니다.

제 생각대로 말이 좀 변형된 부분이 있어 틀린 부분이 있을 수 있으니 지적 해주시면 감사하겠습니다~!

감사합니다.

728x90
반응형

댓글