DEV.log

오토인코더(autoencoder) 본문

autoencoder

오토인코더(autoencoder)

magnae2016 2021. 11. 27. 22:54

(미술관에 GAN 딥러닝 실전 프로젝트, 2019)을 학습하고 개인 학습용으로 정리한 내용입니다.

1. 생성 모델링이란?

생성 모델은 (a)훈련 데이터셋에 있을 것 같은 (b)새롭고 완전히 다른 샘플을 생성합니다.

 

(a) 훈련 데이터셋에 있을 것 같은

\( \rightarrow \) 생성 모델은 원본 데이터와 같은 규칙으로 생성된 것처럼 보이는 특성을 만듭니다.

(b) 새롭고 완전히 다른 샘플을 생성

\( \rightarrow \) 생성 모델은 훈련 데이터셋에 있는 샘플을 단순히 재생산하지 않습니다.

생성 모델은 확률적이어야 합니다. 모델이 고정된 계산만 수행한다면 매번 동일한 값을 출력하기 때문에 새로운 데이터를 생성할 수 없습니다. 따라서 개별 샘플에 영향을 미칠 수 있는 확률적(랜덤 한) 요소를 포함해야 합니다.

 

샘플 데이터셋 \( X \)가 어떤 분포\( P_{data} \)로 생성되었다고 가정합니다.

생성 모델의 목표는 샘플 데이터셋 \( X \)를 사용하여 \( p_{data} \)에서 생성한 샘플을 흉내 내는 \( p_{model} \)을 만드는 것입니다.

이를 생성 모델이 달성하면 \( p_{model} \) 분포로부터 샘플링하여 \( p_{data} \)에서 뽑은 것 같은 샘플을 생성할 수 있습니다.

샘플 데이터셋 \( X \)를 생성했다고 가정한 \( p_{data} \)는 하나지만 \( p_{data} \)를 추정하기 위한 \( p_{model} \)은 무수히 많습니다.


생성 모델의 핵심이 되는 중요한 개념인 표현학습을 알아보겠습니다.

2. 표현 학습이란?

표현 학습의 핵심 아이디어는 데이터셋의 (a)각 샘플을 저차원의 잠재 공간 latent space 에 표현하고 이를 (b)원본 공간의 포인트에 매핑하는 것입니다. 표현 학습은 (c)데이터의 비선형 매니폴드를 찾고 이 공간을 완전하게 설명하기 위해 필요한 차원을 구성합니다.

 

(a) 각 샘플을 저차원의 잠재 공간에 표현하고

\( \rightarrow \) 잠재 공간의 각 포인트는 샘플에 대한 표현입니다. 

(b) 원본 공간의 포인트에 매핑

\( \rightarrow \) 매핑 함수 \( f \)를 학습하여 잠재 공간의 포인트를 원본 데이터 차원으로 매핑합니다.

(c) 데이터의 비선형 매니폴드를 찾고

\( \rightarrow \) 표현 학습은 샘플을 묘사하는데 가장 뛰어난 특성과 이런 특성을 원본 데이터에서 추출하는 방법을 학습합니다. 표현 학습은 샘플을 가장 잘 설명하는 고수준 특성을 만듭니다.


먼저, 고차원 데이터를 저차원 잠재 공간으로 매핑하는 평범한 오토인코더(AE)를 살펴보겠습니다.

3. 오토인코더(autoencoder, AE)란?

오토인코더(a)인코더와 (b)디코더로 이루어진 신경망입니다. 원본 입력은 인코더와 디코더를 지나 재구성 데이터가 됩니다.

입력과 재구성 사이의 손실을 최소화하는 인코더와 디코더의 가중치를 찾기 위해 네트워크가 훈련됩니다.

 

(a) 인코더 네트워크는 고차원 입력 데이터를 저차원 표현 벡터로 압축합니다.

\( \rightarrow \) 인코더는 입력 데이터를 잠재 공간의 한 포인트(표현 벡터)로 매핑합니다.

(b) 디코더 네트워크는 주어진 표현 벡터를 원본 차원으로 압축 해제합니다.

\( \rightarrow \) 디코더는 잠재 공간에 있는 포인트를 올바른 데이터로 변환하는 방법을 학습합니다.

 

AE 는 인코더와 디코더로 이루어진 신경망입니다.

1. 생성 모델링이란? 에서 알아본 생성 모델링의 목표에 오토인코더를 대입해보면 다음과 같습니다. 

(a) 훈련 데이터셋에 있을 것 같은

잠재 공간에서 랜덤한 포인트를 선택해 디코더를 통과시킨 후 실제와 같은 데이터를 얻는 것이 목표입니다.

(b) 새롭고 완전히 다른 샘플을 생성

이를 여러 번 실행했을 때 여러 종류의 숫자가 거의 비슷한 횟수로 추출되는 것이 목표입니다.

 

하지만 오토인코더를 생성 모델로 사용하기에는 여러 문제가 있습니다.

  1. AE는 잠재 공간을 연속적으로 만들지 않습니다.
    \( \rightarrow \) 2차원 잠재 공간에서 포인트 \((5, -5)\)가 숫자 7로 디코딩되더라도 포인트 \((5.1, -5.1)\)도 만족할만한 숫자 7을 만든다는 보장이 없습니다.
  2. 잠재 공간에서 랜덤 포인트를 선택하기 위한 방법이 명확하지 않습니다.
    \( \rightarrow \) 잠재 공간의 포인트 분포가 정의되어 있지 않습니다.
  3. AE는 잠재 공간에서 랜덤하게 샘플링했을 때 데이터의 다양성을 보장하지 않습니다.

이러한 문제는 잠재 공간에 차원을 추가하기 시작하면 더욱 뚜렷해집니다.


진정한 생성 모델로 만들기 위해 AE를 VAE로 바꾸어야 합니다.

4. 변이형 오토인코더(Variational Auto Encoder, VAE)

AE를 VAE로 변경하기 위해 바꾸어야 할 부분은 (a)인코더와 (b)손실 함수 딱 두 군데입니다.

 

(a) 인코더

오토인코더에서는 각 샘플이 잠재 공간의 한 포인트에 직접 매핑됩니다.

VAE는 각 샘플이 잠재 공간에 있는 포인트 주변의 다변수 정규 분포에 매핑됩니다.

https://towardsdatascience.com/intuitively-understanding-variational-autoencoders-1bfe67eb5daf

정규 분포란?

정규 분포는 1차원일 때는 평균(\( \mu \))과 분산(\( \sigma^2 \))으로 정의되는 종 모양의 곡선을 가진 확률 분포입니다.
평균이 \( \mu \)이고 표준 편차가 \( \sigma \)인 정규 분포에서 포인트 \( z \)를 샘플링할 수 있습니다.

$$ z = \mu + \sigma\epsilon $$

여기에서 \( \epsilon \)은 표준 정규 분포에서 샘플링됩니다.

 

인코더는 입력 이미지를 받아 잠재 공간의 다변수 정규 분포를 정의하는 2개의 벡터 평균 벡터(\( mu \))와 분산 벡터(\( log\_var \))로 인코딩 합니다.

\( \rightarrow \) 잠재 공간에서 \( mu \)와 \( log\_var \)로 정의되는 정규 분포로부터 포인트 \( z \)를 샘플링 합니다.

 

이는 오토인코더의 문제 1을 해결합니다.

VAE는 \( mu \) 주변의 지역에서 랜덤한 포인트를 샘플링하기 위해 디코더가 잠재 공간에서 같은 영역에 위치한 포인트들을 매우 비슷한 이미지로 디코딩하도록 합니다. 잠재 공간에서 랜덤한 포인트를 선택하더라도 디코더가 제대로 된 이미지를 디코딩할 수 있습니다.

 

(b) 손실 함수

VAE의 손실 함수는 재구성 손실과 쿨백-라이블러 발산을 사용합니다.

KL 발산은 한 확률 분포가 다른 분포와 얼마나 다른지 측정하는 도구입니다.

VAE에서 평균이 \( mu \)이고 분산이 \( log\_var \)인 정규 분포가 표준 정규 분포와 얼마나 다른지를 모든 차원에 대해서 측정합니다.

\( \rightarrow \) KL 발산 손실 항이 \( mu \)와 \( sigma \) 값이 표준 정규 분포에서 너무 멀리 벗어나지 않도록 만듭니다.

\( \rightarrow \) KL 발산 항은 샘플을 표준 정규 분포에서 크게 벗어난 \( mu \)와 \( log\_var \) 변수로 인코딩하는 네트워크에 벌칙을 가합니다.

 

이는 오토인코더의 문제 2를 해결합니다.

손실 함수에 KL 발산 항을 추가하는것으로

  • 잠재 공간에서 포인트를 선택할 때 사용할 수 있는 잘 정의된 분포(표준 정규 분포)를 가지게 됩니다.
  • 모든 인코딩된 분포를 표준 정규 분포에 가깝게 되도록 강제합니다.

https://lilianweng.github.io/lil-log/2018/08/12/from-autoencoder-to-beta-vae.html

VAE는 AE 구조를 조금 바꾸어 몇 가지 변화를 볼 수 있습니다.

  1. 잠재 공간이 국부적으로 연속적입니다.
    \( \rightarrow \) 인코더가 결정적이지 않고 확률적입니다.
  2. 표준 정규 분포에서 샘플링하여 디코딩할 새로운 포인트를 생성할 수 있습니다.
  3. VAE는 재구성 손실이 최소화되도록 스스로 여러 가지 형태를 학습합니다.

출처

https://www.hanbit.co.kr/store/books/look.php?p_code=B9882286651 

 

미술관에 GAN 딥러닝 실전 프로젝트

이 책은 케라스를 사용한 딥러닝 기초부터 AI 분야 최신 알고리즘까지 설명한다. 기계 스스로 그림을 그리고, 글을 쓰고, 음악을 작곡하고, 게임을 하는 딥러닝 생성 모델을 재현하는 과정에서

www.hanbit.co.kr

'autoencoder' 카테고리의 다른 글

오토인코더(autoencoder)  (0) 2021.11.27
0 Comments
댓글쓰기 폼