오토인코더의 종류는 다양하다. Single Auto Encoder, Deep Auto Encoder, Stacker Auto Encoder, Denoising Auto Encoder. 그리고 경우에 따라서는 Auto Encoder를 합칠 수도 있고 이러한 어플리케이션을 Google에서 볼 수 있다. 

여기에서는 각각의 단일 경우에 대해서만 그림과 간단한 설명으로 살펴 보도록 한다. 

Auto Encoder

: Encoder와 Decoder - 즉, 입력과 출력이 대칭이 되도록 네트워크를 디자인 한 오토인코더

Stacked Auto Encoder

: Latent space역시 단층이 아니라 여러 층이 될 수 있다. 이에 따라 이러한 네트워크를 Stacked layer라고 이름을 붙였다. 이러한 네트워크는 일반적으로 Single Auto Encoder보다 좋은 성능을 보인다. (Deep learning이 layer가 깊어 질 수록 성능이 좋아지는 것 처럼)

 

Deep Auto Encoder

더 이상 그리기가 힘들어서 캡쳐로 대체한다. (https://wiki.pathmind.com/deep-autoencoder

딥 오토안코더는 네트워크를 최소 4개 사용해야 한다. 그리고 Encoder와 Decoder를 대칭으로 사용해야 함. 

Denoising Auto Encoder

그림이 별로 없다. 설명을 많이 보충해야 할 것 같다. 

- 일단 상기의 그림을 보면 Encoder쪽 그림이 깨끗하지 못하다. 즉. Noise가 섞여 있다. Network에 Keras에서는 Gaussian잡음을 넣는 것는 코드를 지원하는 것으로 기억한다. 

- 그리고 가우시안 Noise를 넣은 다음에는 Encoder에 잡음이 섞인 Input'를 넣은 다음 압축(Copressed represenation)을 한다. 

- 그리고 Decoder는 해당 Compressed representation을 어떻게든 깨끗하게 처음처럼 Gaussian Noise가 섞이지 않은 처음 Input(주의!....Input'가 아님) 으로 복원하는 것을 목표로 한다. 

 

 

Sparse Encoder도 있는데 이건 시간나면 해 보겠다. 지금은..잘 모른다. =_ㅠ

 

 

 

저번 포스팅에서 오토인코더의 기본적인 개념에 대해서 알아 보았다. 

복습하면 오토인코더는 딥러닝을 2개 붙여놓은 것으로 

  • 하나의 딥러닝 구조는 Encoder로 Hidden(latent space)로 압축 하는 것. 
  • 하나의 딥러닝 구조는 Decoder Hidden(latent space)으로 압축된 것에서 원본으로 복원하는 것. 

이다. 즉, 단순히 출력 =입력이 되도록 하는 개념이다. 하지만 이런 Autoencoder도 여러 기법을 사용한다. 

예를 들어서 Denoising autoencoder, 그리고 Stacked encoder와 같은 방법이 존재한다. 

Denoising autoencoder(https://excelsior-cjh.tistory.com/187)

입력에 Noise를 추가하고 노이즈가 없는 우너본 입력을 Decoder가 구성하도록 학습시키는 것. 

Denoising AE 

일반적으로 Gaussian Random을 추가하며, 복원할 떄는 입력된 초기 값을 복원한다. 

- Denoising Auto Encoder를 사용하면 (Training Data + Noise) - Training Data를 학습한 결과가 Encoder에 넣어져서 노이즈를 붙이기 전 데이터와 노이즈를 붙였을 때 Data와의 차이를 구한다.

- 어떤 Data가 Noise에 대해 강력한 지 알 수 있다. 

- 예) 사람이라면 머리, 눈, 코가 가장 강력하게 구분하는 데 강력한 영향을 미치고, 주근깨 등은 적은 영향을 미침. 

- 따라서 Denoising Auto Encoder를 잘 활용하면 데이터가 별로 없는 상황에서도 어떤 특성이 가잔 영향력을 많이 미치는 지 비지도 학습으로 딥러닝을 수행할 수 있다. 

Stacked Auto Encoder(http://jaynewho.com/post/9)

Stacked Encoder의 구조

Auto Encoder자체가 비지도 학습이지만 Stacked Encoder는 Latent Space를 더 많이 사용하여 레이블되지 않은 데이터가 많을 때 사용하는 방법이다. 즉, Hidden layer를 더 많이 사용함으로써, 1)  전체 데이터를 학습시켜서 데이터를 레이블링한 다음 2)  하위 레이어를 사용하여 다시 학습시키는 방법을 사용하여 성능을 증가 시키는 방법을 사용한다. 

이 방법으로 일반적인 오토인코더보다 성능이 훨씬 개선되지만 정확한 수식이나 코드는 아직 보지 못했다. 최근에는 Denoising과 Stacked Auto Encoder를 섞어서 사용하는 것 같은데 이러한 방법에 대해서도 알아 봐야 할 것 같다. 다음에는 이, Stacked Denoising Auto Encoder아니면 Stacked나 Denoising Autoencoder의 코드를 알아 보도록 하겠다. 

-끝- 

 

 

Auto Encoder란 무엇인가

오토인코더란 비지도 학습의 하나로 사람이 라벨링을 해줘서 일일히 가르쳐 줘야 하는 지도학습과 달리(개, 고양이)분류를 하는 일반적으로 우리가 알고 있는 딥러닝과 같이

그림1. 지도 학습 알고리즘의 예시

레이블링을 따로 해 줄 필요가 없다. 

일반적으로 우리가 알고 있는 딥러닝의 구조가 그림2와 같다면 오토인코더의 구조는 그림3과 같다.

그림2. 딥러닝의 구조
그림3. 오토인코더의 구조

간단하게 설명하면 딥러닝을 2개 붙여놓은 구조이다.

  • 하나의 딥러닝 구조는 Encoder로 Hidden(latent space)로 압축 하는 것. 
  • 하나의 딥러닝 구조는 Decoder Hidden(latent space)으로 압축된 것에서 원본으로 복원하는 것. 

따라서 Auto Encoder를 거치면 원래의 Data를 비슷하게 복원할 수 있다.

하지만 Decoder는 Train Data즉 학습 Data만 제대로 복원할 수 있고 학습하지 않은 Data는 제대로 복원할 수 없다. 


 오토 인코더에 대해서는 자세한 수식도 있고 이에 대해서 설명한 글도 많이 있지만 이는 이해하지 못했으므로 추후에 포스팅 하도록 하고 이번에는 개념적인 것만 포스팅 하도록 한다. 

참고: https://lewisxyz000.tistory.com/22

+ Recent posts