딥러닝

Autoencoder

관형이 2023. 8. 5. 16:55

서론

최근에 보아즈 멘토 멘티 수업에서 U-Net 논문을 읽고 공부를 했다. 그리고 나서 Autoencoder 공부하니 이해가 더 잘되는 기분이다. (유사한 점이 많다.) 신기한게 vgg paper 논문 공부때도 그렇고, 정말 필요한 부분을 공부할 수 있고, 연관성 높은 부분이 많아서 정말 좋다. CV 분야는 이번에 처음 공부하는데, 재밌어서 미니 플젝도 CV한다.

보아즈 잘 들어간 듯 쨌든 이번 시간에는 Autoencoder에 대해 설명하겠다.

 

목차

  • Autoencoder 기본 개념
  • Autoencoder 사용 이유
  • Autoencoder 탐구
  • PCA와의 비교

 

먼저 결론부터 말하자면, 머신러닝 비지도 차원 축소 기법인 PCA와 유사점이 많다. (차원 축소를 목표)

key point ! 를 살펴보자.

 

  • 비지도 학습 (표현 학습, 특징 학습)
  • 차원 축소
  • Encoder, Decoder 구조

 

Autoencoder 구조

 

autoencoder

 

구조는 input x가 들어가면 input x가 나오는 구조이다. (기본 신경망 구조)

 

encoder: 차원 축소

latent feature: 축소된 피처

decoder: 숫자 정보 차원 확장 (생성 모델)

 

input x 데이터가 encoder를 통해 핵심 정보만 추출된다. (latent feature)

이후 decoder의 과정을 통해 원본 이미지 input x와 유사하게 데이터를 복원한다.

 

Autoencoder 사용 이유

 

1. 차원 축소

2. 이미지 노이즈 제거 (Denoising AE)

3. 이상치 탐지

4. 추천 시스템

 

분야에서 주로 사용된다. 나는 그중에서 차원 축소를 중점적으로 설명할 것이다.

 

사용 목적 1: 차원의 저주

 

PCA를 사용하는 이유와 유사한데, 차원의 저주 때문이다.

차웡의 저주

위의 사진은 1차원, 2차원, 3차원 차원이다. 차원이 증가할 수록, 특성을 알기 위한 필요한 데이터의 양은 기하급수적으로 늘어난다.

 

위의 그림을 보면 1차원 일때, 5가지 데이터로도 데이터의 특성을 유추하기 쉽다. (데이터 분포의 방향이 오른쪽이다.)

2차원 예시도 1차원 보단 많은 데이터가 필요하겠지만, 데이터 분포의 특성을 이해하기 쉽다.

하지만 3차원의 공간 상에는 5개의 데이터로 특성을 이해하기 힘들다. 따라서 주어진 특성을 알기 위해선 더 많은 데이터가 필요하게 되는 것이다.

 

사용 목적 2: 다중 공산성 문제

 

위의 차원의 저주의 개념과 유사한데, 차원이 높은 데이터를 사용하다보면, 학습하는데 해가 되는 데이터가 많다. 또는 상관도가 높은 변수들은 학습에 해가 된다. 이때 해결 방법으로 차원 축소를 고려하는 것이다.

 

 

이것을 표현 학습, 특징 학습이라 한다.

이러한 과정은 직접 해야하는 것이 아닌, 특징점을 뽑기 위해 자동으로 발견하는 시스템을 갖는다

 

Autoencoder 탐구

 

1. 그렇다면, encoder 과정에서 latent feature을 추출한 뒤 왜 decoder로 다시 확장하는 것일까?

 

decoder과정으로 label이 없는 데이터에서도 학습을 가능하게 만들기 위해서이다.

 

목적에 따른 분류

latent feature: -> 다른 task에 적용(시각화, 분류 작업 등)

decoder: -> 분류 등 학습 구현, 생성 모델 만들기

 

기존 딥러닝 학습은 지도 학습이었다. 즉, label이 있어야 손실함수를 적용하고, w, b의 최적값을 찾을 수 있는데

label이 없는 경우도 학습을 할 수 있게 만들고 싶은 것이다. 해결 방법으로 

 

기존의 손실함수(loss function): L(y, y_pred)

auto encoder 손실함수(loss function): L(x, x_pred)

 

즉, 이전 label로 학습을 구현했던 것과 달리, 비지도 학습에서 input x와 AE과정을 거친 후 나온 output_x의 차이를 이용하여 차이가 최소가 되는 방향으로 학습을 진행한다는 의미이다.

이러한 이유로 decoder 과정으로 잠재된 피처를 확장 시키고(output x), 만약 input x에 latent feature가 유의하다면 (중요 특징들을 뽑았다면) output x와 원본 x에 차이가 적을 것이니까. 이 과정을 학습한다. (원본과 확장시킨 값의 차이가 최소가 되도록)

 

이러한 이유로 AE를 비지도 학습 말고, self supervised learning(자기 지도 학습)으로 부르기도 한다.

 

이때 decoder 생성 모형으로는 

  • variational AE
  • GAN

등이 사용되는데, 설명하지 않겠다.


 

2. PCA와의 차이점은 무엇일까?

 

PCA :

선형 차원 축소

 

AE:

1. 선형 -> PCA

2. 비선형

 

AE는 PCA를 포함한다 !

 

비선형 함수

 

먼저 머신 러닝 학습하면서 익혔던거 같이 PCA는 공분산 행렬을 이용하며, 분산이 커지는 방향으로 차원을 하나씩 매핑 시킨다. 이때 사용하는 축은 선형이다.

 

반면 AE는 학습 과정을 구현할 때 활성화 함수로 주로 비선형 함수(ReLU)를 사용한다. 이는 선형이 아닌 비선형 함수이다.

하지만 AE의 활성화 함수로 선형 함수를 사용 할때도 있다. 이것은 PCA 과정과 유사하고, 선형 함수일때는 PCA 과정과 동일하다. 

 

cf: convolutional AE

u-net 구조를 공부했으니 나중에 추가적으로 다룰 것이다. 이때 u-net 구조의 encoder와 decoder와 동일하다.

convolution을 이용하여 축소, 확장을 반복하는 구조이다. 

 

vgg paper와 u-net 리뷰할때 추가로 작성하도록 하겠다.

 

 


 

결론:

1. AE의 목적은 차원 축소이다.

2. AE는 비지도 학습이다. 

3. 다양한 목적을 위해 사용되며, PCA와 유사하다.