본문 바로가기
AI Theory/Generative models

오토인코더(Autoencoder)가 뭐에요? - 3. This is AutoEncoder!

by climba 2022. 1. 26.
- Reference
Naver d2 이활석님의 '오토인코더의 모든것'
Kaist Edward Choi 교수님의 Programming for AI(AI 504, Fall2020)

Naver d2 이활석님의 '오토인코더의 모든것'과 Kaist Edward Choi 교수님의 AI 504 수업을 토대로 공부한 후 정리하였습니다.

0. 글 쓰기에 앞서

지난번 포스팅에서는 Neighborhood based training의 종류와 문제점에 대해 알아보았다. 또한 오토인코더의 등장 배경에 대해서 알아보았는데 이번 포스팅에서는 오토인코더의 구조와 학습 방법에 대해 조금 더 구체적으로 알아보자.

(지난번 포스팅 -> 오토인코더(Autoencoder)가 뭐에요? - 2.Why AutoEncoder?)

 

오토인코더(Autoencoder)가 뭐에요? - 2.Why AutoEncoder?

- Reference Naver d2 이활석님의 '오토인코더의 모든것' Kaist Edward Choi 교수님의 Programming for AI(AI 504, Fall2020) Naver d2 이활석님의 '오토인코더의 모든것'과 Kaist Edward Choi 교수님의 AI 504 수..

hyunsooworld.tistory.com

 

 

1. 오토인코더의 구조

오토인코더의 구조

오토인코더는 입력과 출력이 같은 구조다.

AutoEncoder가 초기에 각광받은 이유는 Unsupervised Learning 문제를 Supervised Learning 로 바꿔서 해결했기 때문이다. (ex: Dimensionality Reduction)

학습이 끝난 AutoEncoder는 보통 Encoder와 Decoder로 구분해서 해석한다.

 

Encoder 관점 : 최소한 학습 데이터는 latent vector로 표현을 잘 할 수 있다.(압축을 잘 한다)

=> 데이터의 추상화에 많이 사용

 

Decoder 관점 : 최소한 학습 데이터는 생성해 낼 수 있다.(Generator)

=> 생성된 데이터가 학습 데이터와 비슷함

 

General Autoencoder 구조(좌) Linear Autoencoder 구조(우)

Linear Autoencoder는 activation function 없이 쓰는 것을 의미한다.

 

Linear Autoencoder는 PCA와 같은 매니폴드(subspace)를 학습한다.

 

2. Stacking AutoEncoder for pre-training

AutoEncoder가 처음 나왔을때는 dimension reduction method로도 쓰였지만 네트워크 파라미터 초기화(pre-training)에도 많이 쓰였다(pre-training).

그 당시에는 pre-traing방법들이(Xavier initializer 등) 존재하지 않았고, 오토인코더로 pre-training을 시킨 후 학습을 진행하였더니 높은 성능을 보여 많이 사용했다고 한다.

 

그렇다면 AutoEncoder에서는 어떤식으로 pre-training이 진행될까?

AutoEncoder의 특징 중 하나는 "적어도 입력값에 대해서는 복원을 잘한다"라는 것이다.

즉 AutoEncoder는 layer by layer로 하나씩 initialize를 진행한다.

이때, Input값과 동일한 Output을 출력하도록 Weight를 초기화해준다.

Initialize W1
Initialize W2
Initialize W3
Backpropagation을 통해 알고리즘을 돌린다.

이러한 일련의 과정들을 AutoEncoder를 쌓아가면서 pre-training한다고해서 Stacking AutoEncoder라고 한다.

 

3. DAE (Denoising AutoEncoder)

DAE(Denoising AutoEncoder)란 기존의 AutoEnccoder에서 입력값에 noise를 추가해준 것을 의미한다.

DAE의 구조

 

갑자기 noise는 왜 추가해 주는 것일까?

결론부터 말하자면 noise를 추가한 DAE(Denoising AutoEncoder)가 AE(AutoEncoder)보다 성능이 더 좋기 때문이다.

 

이때 AutoEncoder의 특징이였던 "입력값과 출력값이 동일해야 한다"에서 입력값은 noise를 추가하기 전의 값으로 생각해야된다.

즉, noise를 input에다가 추가해서 학습시켜도, output으로는 noise가 없는 원래 input값이 나와야 한다.

 

❗ 여기서 noise는 사람이 데이터에 대해 의미적으로 똑같다고 생각할 만큼의 noise를 추가해 주는 것이다.

(-> 손글씨의 경우 사람이 noise를 추가하기 전과 후가 같은 글씨라는 것을 인식 할 수 있어야함)

또한 의미적으로는 같기 때문에 noise를 추가하더라도 manifold 상에서는 똑같은 곳에 분포되어 있을 것이다.

DAE의 성능 (AE보다 좋은가)

사람이 봐도 DAE가 AE 보다 edge를 더 잘 찾아낸다.
(zero-masking noise : 화소 하나 당 해당 %의 확률로 0으로 만듬)

오른쪽 표를 보면 noise의 추가 레벨이 커질수록 분류 모델의 에러가 줄어드는 것을 볼 수 있다.

이때 noise가 0인 부분이 일반적인 AutoEncoder이다.

(너무 많은 noise를 넣으면 오히려 학습이 잘 이루어지지 않는다.)

 

Bernoulli 관점에서 해석해 sample을 생성 할 때 역시 DAE의 경우 샘플 생성이 잘 된다.

4. 정리

이번 포스팅에서는 오토인코더의 구조와 학습 방법 그리고 DAE에 대해 알아보았다.

다음 포스팅에서는 오토인코더 부분의 핵심이라 할 수 있는 VAE(Variational Autoencoders)에 대해 알아보자.

댓글