AI

Difference between AE and VAE

아인샴 2023. 2. 7. 00:18

'단순화시키는 능력은 불필요한 것을 제거하여 필요한 것들이 말할 수 있도록 한다.' - 한스 호프만

 

데이터압축

데이터 압축이란 네트워크를 학습시키는데 필수적인 단계이다. 데이터를 압축시킴으로써 같은 양의 정보를 더 적은 양의 비트로 표현할 수 있다. 많은 속성들로 이뤄진 데이터셋은 학습할 때마다 다른데 이는 모델을 과적합시키기 마련이다. 그러므로 차원을 축소하는 기술이 데이터를 학습시키기 전에 적용되어야 한다.

 

이것이 AE와 VAE가 등장한 배경이다. 이들은 end-to-end 네트워크를 통해 입력데이터를 압축시킨다. AE와 VAE는 기본적으로 데이터를 높은 공간에서 낮은 공간차원으로 압축을 진행한다.

 

AE란?

오토인코더(AE)란 주어진 네트워크 구조에서 라벨링되지 않은 데이터의 임베딩 값들을 효율적으로 배우기 위해 존재한다. AE는 두가지 부분으로 나뉘어져 있는데 인코더와 디코더이다. 인코더는 고차원 영역에서 저차원 영역으로 데이터를 압축시킨다. (이를 latent space라고도 부른다), 그리고 디코더는 이와 반대로 한다. 이를테면 latent space를 고차원 영역으로 변환시키는 것이다. 디코더는 latent space가 데이터셋 공간으로부터 대부분의 정보를 함축하도록 하기 위해 사용된다. 그 방법은 디코더에 입력된 데이터 공간을 강제로 출력시키는 것이다. 

 

블록다이어그램

-블록다이어그램은 아래와 같다. 

학습하는 동안, 입력값 x는 e_theta(x)라는 함수에 입력된다. 그리고 입력값은 연속된 레이어를 통과하는 것이다. (변수 세타에 의해 파라미터된 레이어다.) 이 레이어들은 압축된 latent 벡터(공간) z를 얻기 위해서 차원을 축소시킨다. 레이어의 수와, 레이어의 타입, 사이즈, 그리고 latent space의 차원은 모두 사용자가 제어할 수 있는 파라미터들이다. 압축은 latent space의 차원이 input보다 작을 때 이뤄진다. 기본적으로 중복된 속성들을 제거하기 위함이다. 

 

디코더 d_phi(z)는 보통 (필수적이진 않지만) 인코더에서 사용되었던 층들인데 순서가 반대 형태인; near-compliment 층들로 구성되어있다. near-comlement layer of layer란 기존 layer 값이 전이되며 수행되었던 연산을 상쇄 시킬 수 있다는 뜻이다. 이를테면 conv->conv이동이다. 풀링에서 언풀리이다. fc에서 fc 하는 것 등등이 이에 해당된다. 

 

Loss function 

인코더-디코더 구조에서  전체적으로 학습되는 loss function 은 Input이 재구성된 output으로 되도록 만든다. 그렇기에 loss function 은 인코더 인풋과 디코더 아웃풋 사이에 mean squared error를 썼다. 

AE loss function

이 제안은 매우 낮은 latent space을 통해 최대 압축을 이루게 한다. 그러나 이와 동시에 에러값 또한 작아진다. 특정 값 이상으로 작아진 latent space를 축소시키는 행위는 정보의 큰 손실을 낳게 된다. 

 

latent space의 value/distribution 에는 한계가 없기에 디코더 함수를 적용시켜 인풋을 재구성할 수 있는 한 latent space는 어떤 것이든 될 수 있다(it can be anything)

 

latent space 시각화 

아래 보이는 것은 MNIST 데이터셋으로 학습시켜 생성된 latent space 의 예시이다. 

AE의 latent space

동일한 수치들이 latent space(잠재공간)에서 군집화 되는 경향을 확인할 수 있다. 또다른 주목할 점은 다른 어떠한 데이터 점과도 연관되지 않는 잠재공간도 있다는 것이다. 이러한 것들을 인코더의 인풋으로 사용하면 아웃풋은 mnist data의 어떤  수치로도 보이지 않는 것이 튀어나온다. (잘못 되었다는 뜻) 이것은 잠재공간이 정규화 되지 않았을 때 어떻게 되는지를 보여준다. 작은 영역/군집 을 갖고 있는 latent space는 생성 능력이 있지만 군집내에 속하는 latent space 의 점을 샘플링한다는 것을 의미하고 이는 군집이 속한 데이터 안에서의 variation 을 생성한다.

 Such a latent space only has a few regions/cluster that has the generative capability, which means that sampling any point in the latent space that belongs within a cluster will generate a variation of the data that the cluster belongs to.

그러나 전체 latent space는 생성 능력이 없다. 어떠한 군집에도 속하지 않은 영역들은 어쩌란 말인가 ㅠ 이들은 쓰레기 출력값을 낳는다. 

일단 네트워크가 학습되고, 학습 데이터가 제거된 상태라면 우리는 latent vector로 부터 랜덤하게 샘플링된 디코더라 생성한 output이 유효한지 아닌지 알 수가 없다!(?) 그렇기에 AE는 compression 에서만 주로 사용된다. 

 

-

유효한 입력값의 경우 AE는 기본적으로 중복을 제거하여 더 적은 수로 이를 압축시킬 수 있지만, 정규화 되지 않은 latent space AE 때문에 디코더는 유효한 input data를, latent space로 부터 샘플링된 벡터를 통해 유효한 input data를 낳을 수가 없다.

-

 

왜 AE를 압축하는데 쓴다고?

선형 AE의 latent space는 데이터의 주성분 분석을 하는 동안 얻은 고유공간을 아주 많이 닮았다. 인풋 공간의 차원 n의 선형 AE 과 latent space의 차원들은 m<n 으로 설정되어서 같은 벡터공간 차원을 PCA의 고유벡터인 첪번째 m으로 확장시킨다. 만약 AE가 PCA와 유사하다면, AE는 왜 쓰는 걸까? AE의 위력은 비선형성에 있다. 비선형적인 활성화 함수를 쓴다든가, hidden layer를 더 쓴다든가 하는 비-선형성을 더한느 행위는 AE로 하여금ㅁ 인풋데이터가 더 많은 것들을 표현하게 하고 더 낮은 차원에서 더 적은 정보손실을 갖게 한다. 

 

--------

Variational AE (VAE)

이게 무엇인고?

VAE는 AE안에서 정규화 되지 않은 latent space이슈를 해결하고 전체 공간에서의 생성능력을 제공한다. AE안에 있는 인코더는 latent vector를 산출한단 말임? 근데 VAE는 latent space안에서 벡터를 산출하는 대신, 매 인풋의 latent space마다 pre-defined distribution 에 대한 파라미터값들을 산출한다. 이 파라미터 값들을 통해 VAE는 latent distribution 이 정상적인 분포를 갖도록 제어하게 되는데, 이 제어가 latent space가 정규화되도록 만들게 된다. 

 

블록다이어그램 

VAE의 블록다이어그램은 아래와 같다. 학습하는 동안 인풋데이터 x는 인코더함수 e_theta(x)로 들어감. AE랑 똑같다! 여기까진 층들을 통과하고 (물론 변수 세타에 의해 파라미터화된것 까지) 차원은 축소되고 latent vector z 까지 만들어지겠지? 근데! 근데 latent vector가 인코더의 아웃풋이 아니다! 그 대신에 인코더는 각각의 latent variable 마다 평균과 표준편차 값을 산출한다. latent rector는 그럼 이러한 평균과 표준편차를 이용해 샘플링하고 그것이 디코더를 통해 input값을 재생성하도록 만든다. VAE의 디코더는 AE의 그것이랑 비슷하다. 

 

Loss function 

손실함수는 VAE의 목표에 의해서 정의되는데, VAE는 두가지 목표가 있다.

1) 인풋을 재구성하는 것  2) latent space가 정상적으로 분포될 것 

 

그렇기에 VAE의 학습 loss는 이러한 reconstruction loss(1)와 similarity loss(2)의 합으로 정의되어있다. AE와 같은 재구성 에러값이고, input과 재구성된 output사이의 mean squared loss 이다. similarity loss는 latent space분산과 표준 가우시안 분포의 KL divergence를 쓴다. 손실함수는 이렇게 두개 loss의 합으로 이뤄진다. 아래를 보면 안다. 

VAE loss function 이다.

 

방금 언급했다시피 latent vector는 디코더한테 입력되기 전에 인코더가 생성한 분포다.이 랜덤한 샘플링은 인코더로하여금 backpropabgation 이 어렵게 만드는데, 쥰내 랜덤하게 샘플링한 것 때문에 에러를 추적하기가 어렵기 때문이다. 그래서 우리는 reparameterization 트릭이라는 걸 썼다. 네트워크에 전파될 수 있는 에러가능성이 있는 샘플링 프로세스(스바 랜덤프로세스같음)를 쓴 것이다. latent vector z는 이제 인코더의 아웃풋에 대한 함수로 표현(정의)된다.

 

Latent space 시각화 

학습은 두 손실간의 균형을 찾으려고 노력한다. 결국에는 latent space의 분포가 유사한 인풋데이터들끼리 모인 군집화의 정규화된 유닛처럼 보이게 된다. 정규화된 유닛 조건이란 latent space가 골고루 퍼져있어서 군집사이에 치명적인 갭(틈)같은게 없다는 것을 의미한다. 

 

사실, 군집간 유사해 보이는 데이터로 말할 것 같으면 보통 같은 지역에서 오버랩되기 마련이다. 아래는 같은 MNIST데이터를 학습한 네트워크가 생성한 latent space의 예시이다. 또한 AE의 latent space를 시각화 하기 위해 쓰였다. 군집사이에 갭이 없는 것과, 해당 공간이 unit norm의 분포와 얼마나 닮았는지 유의해서 확인하면 된다. 

(하나도 안비슷한디 멀 비교하라고 하는걸까?)

주목해야할 점은 군집들ㅇ이 중첩된 영역에서 샘플된 latent vector를 구한다면, 우리는 변형된 데이터(morphed data)를 얻는 다는 것이다. 한 군집에서 다른 군집으로 이동하는 latent vector를 샘플링한다면 우리는 디코더 출력사이에서 스무쓰한 전환을 얻을 수 있게 됩니다. 

VAE의 latent vector가 정규화 되었다.

요약 

이 글에서 주로 데이터 압축과 생성에 대해 각각 AE와 VAE가 사용되는 것을 다뤘다. VAE는 AE의 non-regularized  잠재공간에 대한 이슈를 해결했다. 그렇게 함으로써 latent space로 부터 나온 vector에서 랜덤하게 추출된 값을 통해  데이터를 생성하는 것을 가능케 한것이다. AE와 VAE의 주요 특징은 아래와 같다. 

 

AE

  • Input data를 latent space에서 압축(변환)하는 데 사용함
  • latent variable 은 정규화되지 않음
  • 임의의 latent variable을 고를 경우 쓰레기 아웃풋이 출력됨
  • latent variable은 deterministic한 value 다, → generative capability가 부족하다. 

VAE

  • latennt variable을 통해 unit norm으로 제어한다. 
  • latent variable이 평균과 분산으로 압축된다. 
  • latent variable이 매끄럽고 연속적이다. 
  • latent variable의 랜덤변수가 디코더에서 의미있는 결과값을 생성한다. 
  • 디코더의 입력값은 확률적이다. 또한 디코더의 입력값은 인코더의 아웃풋이 가진 평균과 분산으로 생성한 가우시안에서 샘플링된다. 
  • latent space 는 정규화 되었다. → generativecapability 가 있다!

https://youtu.be/sV2FOdGqlX0

 

참조 

-https://towardsdatascience.com/difference-between-autoencoder-ae-and-variational-autoencoder-vae-ed7be1c038f2

 

Difference between AutoEncoder (AE) and Variational AutoEncoder (VAE)

How can you compress data or even generate data from random values? That is what Autoencoder and Variational Autoencoder are.

towardsdatascience.com