빅데이터 인공지능/딥러닝

[딥러닝] 오토인코더(Autoencoder)

doeunnkimm 2022. 12. 4. 00:56

▶오토인코더(Autoencoder)

이번 글에서는 딥러닝의 임베딩이라고도 말할 수 있는 오토인코더에 대해서 알아보겠습니다 :)

1. 등장 배경

  • 지난 번 RNN 구현해보는 글에서
  • 임베딩을 통해 차원을 축소해서 학습을 진행했었음 (layer를 하나더 쌓음으로써)
  • 차원축소는 비지도 학습 종류 중

 

그래서 차원축소는 왜 하는건데..?

 

  • 차원의 저주
    • input 데이터의 차원이 굉장히 크다고 하면 이 데이터로 학습을 하는 것은 어려움
  • 생성 모델
    • 차원축소를 함으로써 데이터가 가지고 있는 잠재적인 정보 추출 가능
    • 그 잠재적인 정보를 바탕으로 또 다른 형태의 데이터 생성 가능
      • 데이터 증강(Data Agmentation)과도 관련 있음

 

우리의 목표

 

  • 우리는 가능한한 차원을 적게 만들어야 함(적은 차원의 벡터로 만들어야 함)
  • 그렇지만, 그 과정에서 정보 loss를 최소화하는 방향으로 차원축소가 진행되어야 함

오토인코더는 차원축소의 딥러닝 버전 !
중요한 정보들을 응축하기 위해 사용

 

2. Autoencoder

Autoencoder의 목적

 

Autoencoder의 목적
input을 가장 잘 copy해서 input과 거의 동일한 output을 만들어 내도록 네트워크 학습 ❗

 

 

Autoencoder의 구성요소 3가지

 

Autoencoder의 구성요소
① encoder ② (latent) code ③ decoder

 

  • Encoder: \( z = f(x) \)
  • latent Code: \( z \)
  • Decoder: \( x = g(z) \)

 

  • Autoencoder의 목적: \( g(f(x)) = x \)

 

차원축소: Input → latent Code

 

  • Input 데이터로부터 알짜배기 정보만 저차원으로 축소 → latent Code에 중요한 정보를 모아둠!

 

Generative modeling (decoder) : latent Code → output

 

  • latnet Code(축약된 데이터)를 바탕으로 원래 데이터로 돌리는 작업
    • input → latent Code 과정에서 차원축소가 잘 되어
    • latent Code에 중요한 정보가 잘 담아졌다면
    • output 은 input과 거의 동일한 모습이 될 것

 

latent Code 그거 없으면 안 돼..?

 

= 고차원 데이터 상에서 그냥 예측 할거야

 

없는 상황의 문제점을 보기 위해 다음과 같은 상황이 있다고 해봅시다.

만약 첫 번째 이미지와 세 번째 이미지의 중간 정도의 이미지를 예측한다고 했을 때

아래 두 번째 이미지와 같은 위치에 공이 있어야 하겠다고 생각할 수 있습니다.

이제 이 이미지들의 위치를 고차원 데이터 상에서 표시해보겠습니다.

 

첫 번째 세 번째 이미지의 데이터의 위치와 위와 같다면 두 번째 이미지는 위와 같은 위치에 있을 것이라고 예상할 수 있습니다.

그런데 위 고차원의 데이터를 저차원으로 차원축소를 하면 (flatten) 다음과 같을 것 입니다.

이를 바로 generative modeling을 돌리면 다음과 같이 예상과는 다른 이미지가 도출되게 됩니다.

따라서 중간에 중요한 정보를 가지고 있는 latent code가 필요함을 보여주게 됩니다.

 

latent Code 예시

 

latent Code를 바탕으로 generative modeling을 했을 때 유의미한 결과를 얻을 수 있는 것을 확인할 수 있습니다.

 


하지만 Autoencoder를 활용을 해서 generative modeling을 할 때 성능이 상당히 좋지 못하다는 한계점이 존재합니다.

그래서 추가적인 방법들(ex. CAE, GAN 등)이 등장하게 되었습니다.

다음에는 이에 대해 알아보도록 하겠습니다 🙂

728x90
LIST