사쿠의 데이터 블로그

Auto Encoder(개념) 본문

Python(데이터 분석, 딥러닝)

Auto Encoder(개념)

토스트먹어 2019. 5. 25. 01:37

오토 인코더(Auto Encoder)는 무엇일까?

 

Input과 Output을 동일하게 만들어 주는 모델로 설명할 수 있을 것 같다.

 

 그럼,

1. Input과 Output을 동일하게 만드는... 쓸데 없어 보이는 일을 할까?

2. 모델의 구조는 왜 하필이면 이렇게 생긴걸까?

 

오늘은 두개의 질문에 스스로 답변을 해보려 한다.

 

그림1. 오토 인코더 예시

 

왜!? Input과 Output을 동일하게 만드려고 하는가?

만약, 오토인코더의 목적이 Input과 Ouput을 동일하게 만드는 것이라면 

누군가는 이렇게 생각 할 수 있겠다.

1
2
3
def AutoEncoder(input):
    output = input
    return output
cs

 

더이상 Input과 Ouput을 동일하게 만드는게 목적이 아님을 눈치챘을 것이다.

 

AutoEncoder의 목적은 latent space( =manifold)를 학습하는데 있다.

 

그림1에서 AE의 구조는 가운데 좁아지는 구간을 확인 할 수 있다. 

 

그럼, 이렇게 생각해 볼 수 있지 않을까?

 

1. 좁아지는 구간을 지나면서 

2. 다시 원래대로 돌아올 수 있다면

3. 이 좁아지는 구간이 핵심 일것이다

 

차원축소를 들어봤다면 이해가 쉽게 될 것이다. 

대표적으로 PCA는 데이터가 퍼져있는 방향으로 최표축을 이동하는 방법이다.

 

여타 차원 축소 방법들도 기가막힌 이론으로 이렇게 하면 된다. 라고 내용이 보장되어 있다.

하지만 이것들은 모두 비지도 학습이었다.

 

AE도 이와 마찬가지로 차원축소 역할을 하지만, 지도학습!! 이다.

차원축소 방법에서 분명한 차이점이 있다.

 

 

 

모델의 구조는 왜 하필이면 이렇게 생긴걸까?

 

그림2. Encoder 와 Decoder

사실 AE는 그림2와 같이 2개의 부분으로 나눠 볼 수 있다. 

먼저, Encoder는 Input 784차원을 --> Z만큼 2차원으로 축소하는 역할

Decoder는 이와 반대로 2차원 데이터를 --> Input 784차원으로 만드는 역할이다.

 

AE의 본래 목적이 차원 축소라면 Z는 Input보다 항상 작아야 할 것이다.

앞에서도 말했지만 본래 목적은 latent space(=manifold)를 학습하는데 있다.

 

그렇기 때문에 중간에 껴있는 Z는 10이 될 수도 있고 900, 1000이 될 수도 있다.

 

그럼 latent space는 무엇일까?

 

Latent Space 혹은 Manifold는 무엇일까?

그림3. 랜덤 노이즈와 이미지(사진)

3x5 증명사진이 15차원이라 가정하자. (사실은 더 크겟지만...)

그럼, 이 15차원의 공간에는 나의 얼굴이 나올 수 있고 여러분의 얼굴이 나올 수 도 있다. 

 

그럼 무한한 가능성을 가진 3x5 증명사진에서 랜덤으로 이미지를 뽑는다면

BTS의 사진이 나올 수 있을까?

 

 절대 불가능 할 것이다. 

 

나온다면 아마 그림3의 왼쪽처럼 노이즈화면이 나올 것이다. 

 

Latent Space란, 특정 차원에서 원하는 정보들이 모여있는 공간이다.

 

유명한 Mnist의 예시는 아래 그림과 같다.

그림4. AE로 구한 Mnist 데이터의 latent space

 

 

정리

1. Input과 Output을 동일하게 만드는... 쓸데 없어 보이는 일을 할까?

-> 차원 축소를 할 때, 지도학습으로 접근하기 위함

 

2. 모델의 구조는 왜 하필이면 이렇게 생긴걸까?

-> Latent Space를 알기 위함

 

3. Latent Space 혹은 Manifold란?

-> 높은 차원에서 특정 데이터들이 모여있는 공간

 

 

다음에는 자세한 코드를 살펴보겠습니다.

'Python(데이터 분석, 딥러닝)' 카테고리의 다른 글

Python에서 Bigquery 연동하기  (0) 2022.01.23
변수 중요도 측정 - Permutation importance  (0) 2019.10.27
Anomaly Detection with AE (2)  (0) 2019.05.26
Anomaly Detection with AE (1)  (1) 2019.05.25
Pytorch 설치  (0) 2019.05.19