본문 바로가기

Model/Network

Autoencoder / VAE

반응형

AutoEncoder

 

AutoEncoder란?

 

image

입력을 출력으로 복사하는 신경망

  • 위 그림처럼 hidden layer의 뉴런 수를 input layer보다 작게 해서 data를 압축(=차원을 축소)하거나 input data에 noise를 추가한 후 원본을 복원할 수 있도록 network를 학습시키기도 한다.

AutoEncoder의 구성

 

  • Encoder : recognition network. input을 내부 표현으로 변환
  • Decoder : generative network. 내부 표현을 output으로 변환

AutoEncoder는 input, output의 뉴런 수가 같다는 것만 제외하면 일반적인 MLP와 동일한 구조. AutoEncoder는 입력을 재구성하기 때문에 output을 reconstruction이라고도 한다. 손실함수는 input과 reconstruction(output)의 차를 가지고 계산한다.

AutoEncoder의 종류

 

01. Undercomplete AutoEncoder

 

hidden layer의 뉴런이 input보다 작으면 input이 저차원으로 표현되는데 이를 Undercomplete AutoEncoder라고 한다. Undercomplete AutoEncoder는 output이 input과 같은 것을 출력하게 하기 위해 학습해야 한다. 이러한 학습을 통해 undercomplete AutoEncoder는 input에서 가장 중요한 feature를 학습하도록 만든다.

02. Stacked AutoEncoder

 

image

deep AutoEncoder라고도 한다. 여러 개의 hidden layer를 가지는 AutoEncoder. 레이어를 추가 할수록 AutoEncoder가 더 복잡한 부호화를 학습할 수 있다. hidden layer를 기준으로 대칭적인 구조를 가진다.

학습 기법 a. weight 묶기

 

AutoEncoder가 hidden layer를 기준으로 완벽하게 대칭일 경우에는 일반적으로 encoder의 weight와 decoder의 weight를 묶어준다. 그렇게 하면 네트워크의 weight 수가 절반으로 줄어듦으로 학습 속도를 높일 수 있고 overfitting을 줄일 수 있다. image AutoEncoder가 N개의 층을 가지고 있고  image 이 L번째 층의 weight를 나타낸다고 할 때 decoder의 weight는  image 로 정의할 수 있다.

: tied weight. 매핑하기 전의 input layer의 weight matrix의 전치행렬 WT 가 remapping weight matrix인 W′ 와 같은 경우에 해당 auto encoder는 tied weights를 가졌다고 말한다.

학습 기법 b. 한 번에 한 층씩 학습하기

 

image

한 번에 AutoEncoder 하나를 학습하고 이를 쌓아올려서 한 개의 Stacked AutoEncoder를 만드는 것이 훨씬 빠르다. deep한 AutoEncoder일 경우에 유용하다

단계1. 첫 번째 AutoEncoder는 input을 재구성하도록 학습

단계2. 두 번째 AutoEncoder가 첫 번째 hidden layer(Hidden1)의 출력을 재구성하도록 학습

단계3. 단계 1-2의 AutoEncoder를 합쳐 최종적으로 하나의 Stacked-AutoEncoder를 구현

03. Stacked AutoEncoder를 이용한 비지도 사전 학습

 

image

대부분이 labeled되지 않은 dataset이 있을 때, 전체 데이터를 사용해 Stacked-AutoEncoder를 학습시킨다. 그 후 AutoEncoder의 하위 layer를 재사용해 classification과 같은 문제를 해결하기 위한 신경망을 만들고 label된 데이터를 사용해 학습시킬 수 있다.

04. Denosing AutoEncoder

 

image

AutoEncoder가 의미있는 feature를 학습하도록 제약을 주는 다른 방법은 input에 noise를 추가하고 noise가 없는 원본 input을 재구성하도록 학습시키는 것.

noise는 input에 Gaussian noise를 추가하거나 dropout처럼 랜덤하게 input node를 꺼서 발생시킨다.

05. Sparse AutoEncoder

 

스크린샷 2019-09-12 오후 10 00 16

: sparse coding

스크린샷 2019-09-13 오후 10 17 17

: sparse autoencoder

AutoEncoder가 좋은 특성을 추출하게 하는 방법 중에 희소성(sparsity) 이 있다.

  • loss function에 적절한 항을 추가하여 AutoEncoder가 가운데 층(coding layer)에서 활성화되는 뉴런 수를 감소시킨다.
    • ex) coding layer에서 평균 5% 뉴런만 활성화되면 AutoEncoder는 5%만의 뉴런을 조합해 input을 재구성 해야하기 때문에 더 유용한 feature를 추출한다.
  • Sparse-AutoEncoder 만들기
    • training 시 coding layer의 실제 sparse 정도를 측정
      • 전체 학습 batch에 대해 coding layer의 평균적인 활성화를 계산
      • 각 뉴런에 대한 평균 활성화 정도를 계산하여 구한다
      • batch는 너무 작지 않게 설정
    • 손실 함수에 sparsity loss를 추가하여 뉴런이 크게 활성화 되지 않도록 규제한다
      • ex) 한 뉴런의 평균 활성화 0.3 / 목표 sparsity 0.1이면 이 뉴런은 활성화 되어야 함
    • Sparse-AutoEncoder에서는 KL-divergense를 사용. sparsity loss를 구한다
  • unsupervised learning이다.
  • sparse coding으로 data compression, 잡음 제거 및 color interpolation 해결 가능

KLD : KL-Divergense (Kullback-Leibler divergense)

 

image

  • 두 확률 분포의 차이를 계산하는 데 사용하는 함수.
  • 딥러닝 모델을 만들 때 학습 데이터셋의 분포 P(x)와 모델이 추정한 데이터의 분포 Q(x) 간의 차이를 KLD를 활용해 구할 수 있다.

image

  • Sparse-AutoEncoder에서는 coding layer에서 뉴런이 활성화 될 목표 확률 p와 실제 확률 q(학습 batch에 대한 평균 활성화) 사이의 발산을 측정한다.

image

  • 이 식을 사용해 coding layer의 각 뉴런에 대해 sparsity loss를 구하고 이 loss를 모두 합한 뒤 sparsity weight hyperparameter를 곱하여 손실 함수의 결과에 더해준다.

image

06. VAE : Variational AutoEncoder

 

VAE?

 

  • 2014년 D.Kingma, M.Wlling이 Auto-Encoding Variational Bayes에서 제안한 AutoEncoder의 한 종류.
  • 다른 AutoEncoder과의 차이점
    • probabilistic AutoEncoder이다 : training이 끝난 후에도 output이 부분적으로 우연에 의해 결정된다.
    • Generative AutoEncoder이다 : 학습 데이터셋에서 샘플링 된 것과 같은 새로운 샘플을 생성할 수 있다.

VAE의 구조

 

image

  • VAE의 coding layer의 차별성
    • 주어진 input에 의해 바로 coding을 만드는 것이 아니다.
    • Encoder : 평균 코딩 image와 표준편차 코딩 image을 만듦
    • 실제 코딩은 평균이 image, 표준편차가 image인 가우시안 분포에서 랜덤하게 샘플링됨
    • 이렇게 샘플링 된 코딩을 Decoder가 원본 입력으로 재구성하게 됨
    • VAE는 마치 가우시안 분포에서 샘플링된 것처럼 보이는 코딩을 만드는 경향이 있다.
      • 학습하는 동안 손실함수가 코딩을 가우시안 샘플들의 집합처럼 보이는 형태를 가진 coding space/latent space로 이동시키기 때문
    • 그러므로, VAE는 학습이 끝난 후 새로운 샘플을 가우시안 분포로부터 랜덤한 코딩을 샘플링 해 디코딩 해서 생성할 수 있다.
  • VAE의 손실함수
    • Reconstruction loss : AutoEncoder가 입력을 재구성하도록 만드는 일반적인 손실함수.
    • Latent loss : 가우시안 분포에서 샘플링된 것 같은 코딩을 가지도록 오토인코더를 제어.

Reference

 

EXCELSIOR-JH의 블로그 : link
라온피플의 블로그 : link

반응형

'Model > Network' 카테고리의 다른 글

Autoencoder  (0) 2020.04.12
Transformer  (0) 2020.04.12
Attention Network, Attention Model  (0) 2020.04.12
GAN(Generative Adversarial Network), 적대적 생성 신경망  (0) 2020.04.12