본문 바로가기
Deep Learning/밑바닥부터 시작하는 딥러닝

[정리노트] [AutoEncoder의 모든것] Chap3. AutoEncoder란 무엇인가(feat. 자세히 알아보자)

by Steve-Lee 2020. 7. 12.

AutoEncoder의 모든 것

본 포스팅은 이활석님의 'AutoEncoder의 모든 것'에 대한 강연 자료를 바탕으로 학습을 하며 정리한 문서입니다. 이활석님의 동의를 받아 출처를 밝히며 강의 자료의 일부를 인용해왔습니다. 

AutoEncoder의 모든것 

더보기

AutoEncoder의 모든것 😀(Last Update 20.07.16.Thur - Chap4. VAE Architecture)

👉🏻 시작합니다! 🎈

Chap0. AutoEncoder란 무엇인가? 핵심만 짚어보자


👉🏻 Deep Neural Network의 학습방법 📗
- Backpropagation과 MLE
Chap1. Deep Neural Network의 학습 방법에 대해 알아보자(딥러닝 학습방법)😃


👉🏻 Manifold Learning이란 무엇인가? 📑

- Manifold Learning 및 Dimensionality Reduction에 대해 알아보자
Chap2. Manifold Learning이란 무엇인가

 

👉🏻 AutoEncoder 탐구하기 ⌛️
Chap3. AutoEncoder란 무엇인가(feat. 자세히 알아보자)

👉🏻 Variational AutoEncoder에 대해 알아보자 ☕️
Chap4. Variational AutoEncoder란 무엇인가(feat. 자세히 알아보자)

👉🏻 VAE 파생 모델에 대해 알아보자
- Conditional VAE, Adversarial AutoEncoder에 대해 알아보자
Chap4. VAE Architecture - Conditional VAE, Adversarial AutoEncoder

 

앞서 Chap 1. 에서는 AutoEncoder에 대해 간단히 살펴보았습니다.

 

AutoEncoder의 모든것 Chap1. Deep Neural Network의 학습 방법에 대해 알아보자

Chap1. Revisit Deep Neural Networks 이번 장에서는 Deep Neural Network의 학습 방법에 대해 알아봅니다 핵심은 Deep Neural Network가 학습할 때 Loss Fucntion을 해석하는 두 가지 관점의 차이를 이해하는 것..

deepinsight.tistory.com

간단하게 다시 한번 짚어보면 AutoEncoder란...

  • Unsupervised Learning
  • Representation Learning
  • Dimensionality Reduction
  • Generative Model Learing

 

이번 시간에는 AutoEncoder에 대해 보다 깊게 이해하는 시간을 가져보도록 하겠습니다. 그럼 시작하겠습니다.

 

What is AutoEncoder?

AutoEncoder에 대한 직관부터 알아보도록 하겠습니다

AutoEncoder란 무엇인가

AutoEncoder에 대한 핵심을 다시 한번 짚어보면 다음과 같습니다

  • 입력과 출력이 같은 구조
  • Bottleneck Hiddenlayer
    • Bottleneck layer는 다음과 같이 표현하기도 합니다
    • Latent Variable
    • Feature
    • Hidden representation

한 장의 슬라이드에 AutoEncoder에 대한 핵심 내용들이 잘 정리되어있습니다...역시 갓...!

AutoEncoder의 수식과 학습 방법에 대해 살펴보도록 하겠습니다.(슬라이드에 너무나도 설명이 잘 되어있습니다!)

 

AutoEncoder의 수식과 학습 방법

  • 수식
    • Input Data를 Encoder Network에 통과시켜 압축된 z값을 얻습니다
    • 압축된 z vector로부터 Input Data와 같은 크기의 출력 값을 생성합니다
    • 이때 Loss값은 입력값 x와 Decoder를 통과한 y값의 차이입니다
  • 학습 방법
    • Decoder Network를 통과한 Output layer의 출력 값은 Input값의 크기와 같아야 합니다(같은 이미지를 복원한다고 생각하시면 될 것 같습니다)
    • 이때 학습을 위해서는 출력 값과 입력값이 같아져야 합니다  

 

AutoEncoder가 각광을 받은 이유와 학습 후 얻을 수 있는 직관에 대해 살펴보겠습니다.

 

AutoEncoder 학습 후 얻을 수 있는 직관

  • Encoder 관점

    • 적어도(최소한) (training DB에 있는) input data를 잘 복원한다
    • 최소한의 성능을 보장한다
  • Decoder 관점
    • 최소한 training data를 만들어 줄 수 있다
    • 여담으로 GAN은 성능을 보장할 수 없다고 합니다(GAN에 대한 공부를 마친 뒤 이 부분에 대해서 포스팅을 하도록 하겠습니다)

한편 Activation Function 없이 사용하는 AutoEncoder를 Linear AutoEncoder라고 부르다고 합니다

 

Linear AutoEncoder를 사용하면 PCA와 같은 manifold를 배운다고 합니다(1990년대 논문에서 증명)

 

AutoEncoder 활용 예시

그렇다면 언제 AutoEncoder를 사용할까요?

 

  • AutoEncoder는 실제로 Input Data의 Feature를 추출할 때 많이 사용합니다
  • 주로 Dimension Reduction에 사용합니다
    • Network parameter 초기화, pre-training에 많이 사용되며
    • 이 때는 Batch-Norm, Xavier Initialization과 같은 기법들이 없었다고 합니다

다음으로는 AutoEncoder를 활용한 초기화 방법에 대해 알아보도록 하겠습니다. Stacking AutoEncoder를 통해 pre-training을 하는 방법에 대해 배워보도록 하겠습니다.

 

Stacking AutoEncoder for pre-training

우리는 다음의 AutoEncoder를 학습하고자 합니다

어떻게 하면 AutoEncoder를 좀 더 잘 학습시킬 수 있을까요?

AutoEncoder의 특징으로 다뤘던 '적어도 입력값에 대해서는 복원을 잘한다'는 특징이 기억나시나요?

 

 

Autoencoder는 (Training DB에 있는) Input Data에 대해서는 적어도 복원을 잘하는 특징을 가지고 있습니다. 따라서 이러한 특징을 활용해 Training DB에 있는 Input Data를 잘 표현하는 weight를 학습할 수 있습니다.

 

AutoEncoder를 쌓아가며 학습을 한다고 해서 Stacking AutoEncoder라고 합니다. 한 스텝씩 살펴보도록 하겠습니다.

 

(그림의 왼쪽은 우리가 학습에 사용할 AutoEncoder이며 오른쪽은 pre-training을 위해 weight를 학습하는 과정입니다)

1. (Training DB)에 있는 Input Data를 잘 표현하는 1번째 Layer의 1000개에 대한 weight를 학습하고자 합니다.1000개의 weight를 가진 layer를 지나 다시 Input Data를 복원하는 과정에서 데이터의 특징을 가지고 있는 weight를 학습하게 됩니다.
2. 그렇다면 다음 레이어의 weight를 학습하려면 어떻게 해야할까요? 마찬가지로 레이어의 weight를 복원하는 AutoEncoder를 구성하여 Input Data를 잘표현하는 weight를 학습할 수 있게 됩니다.
3. 동일한 방식으로 마지막 레이어의 weight도 학습을 할 수 있게 됩니다.
4. 이렇게 학습이 끝난 AutoEncoder로 weight를 Initialization해주고 모델의 학습을 위해 Backprop을 진행하면 됩니다. 

 

Batch-Norm, Xavier Initialization 등이 없던 시절에는 AutoEncoder의 이러한 특성을 활용해 모델을 초기화시키는 용도로 많이 사용했다고 합니다.

 

Denoising AutoEncoder

Denoising AutoEncoder는 무엇일까요?

Denoising AutoEncoder에서는 Input Data에 'random noise'를 추가해줍니다.

 

이때 random noise라 하면 사람이 데이터(이미지, 음성, 또는 텍스트...)에 대해 같다고 생각할 만큼의 noise를 추가해 주는 것입니다. 이런 noise를 추가하더라도 manifold상에서는 똑같은 곳에 분포된다는 가정이 있습니다. 

 

manifold상에서는 똑같지만 원본 데이터와는 다른 데이터로 Encoder와 Decoder를 학습하는 네트워크를 Denoising AutoEncoder라고 합니다.

 

Denoising AutoEncoder의 성능

그렇다면 Denoising AutoEncoder는 AutoEncoder에 비해 성능 향상이 있을까요??

 

위의 슬라이드는 Convolutional Network를 통해 훈련된 네트워크의 Filter를 시각화한 이미지입니다. 그림에서 볼 수 있는 것처럼 학습이 진행될수록 네트워크의 Filter는 low-level에서 high-level feature를 추출할 수 있게 됩니다. 

 

AutoEncoder와 Denoising AutoEncoder의 성능을 비교해 보도록 하겠습니다.

Denoising AutoEncoder를 보면 AutoEncoder에 비해 Filter가 Edge를 더 잘 탐지하는 모습을 보여줍니다. 이를 통해 Denoising AutoEncoder의 성능이 더 뛰어나다고 할 수 있겠습니다.

 

Stacked Denoising Auto-Encoder

Zero-masking noise를 변경시켜가면서 학습을 해보면 noise를 더해주는 것이 Network의 성능을 얼마나 향상해주는지 알 수 있습니다. 

 

그래프를 통해 보시는 것처럼 noise를 추가해주면 약 25% input에 대해 noise를 추가해 줬을 때 Loss값이 가장 낮은 것을 확인할 수 있습니다. 

 

마무리

이번 시간에는 AutoEncoder에 대해 조금 더 깊게 알아봤습니다. 아마도 여기까지는 큰 무리 없이 따라오셨을 것이라 생

각합니다.

 

'AutoEncoder의 모든 것'은 Chap4. Variational AutoEncoder에 모든 초점이 맞춰져 있습니다. Variational AutoEncoder를 배우기 전 AutoEncoder의 학습방법과 원리에 대한 이해가 있다면 VAE 학습에 대한 준비가 되었다고 생각합니다. 

 

다음 시간에는 VAE에 대해 다뤄보도록 하겠습니다. 이상 Steve-Lee였습니다. 감사합니다!

 

 

[정리노트] [AutoEncoder의 모든것] Chap4. Variational AutoEncoder란 무엇인가(feat. 자세히 알아보자)

AutoEncoder의 모든 것 본 포스팅은 이활석님의 'AutoEncoder의 모든 것'에 대한 강연 자료를 바탕으로 학습을 하며 정리한 문서입니다. 이활석님의 동의를 받아 출처를 밝히며 강의 자료의 일부를 인�

deepinsight.tistory.com

 

Reference

댓글