본문 바로가기
Visual Intelligence/Generative Model

[Generative Model] 오토인코더 (AutoEncoder)

by goatlab 2022. 12. 8.
728x90
반응형
SMALL

오토인코더 (AutoEncoder)

 

 

Autoencoding은 데이터 압축 알고리즘으로 압축 함수 (Encoding)와 압축 해제 함수 (Decoding)는 다음 과 같은 세 가지 특징을 갖는다.

 

  1. Autoencoder는 데이터에 민감하다. Autoencoder는 이제껏 훈련된 데이터와 비슷한 데이터로만 압축될 수 있다. 예를 들면, autoencoder는 MPEG-2 Audio Ⅲ (MP3) 압축 알고리즘과는 다르다. MP3 알고리즘은 일반적으로 소리에 관한 압축이지만 특정한 종류의 소리에 관한 것은 아니다. 얼굴 사진에 대해 학습된 autoencoder는 나무의 사진을 압축하는 데에는 좋은 성능을 내지 못하는데 그 이유는 autoencoder가 배우는 특징은 얼굴 특유의 것이기 때문이다.
  2. Autoencoder는 손실이 있다. 즉, 압축 해제된 결과물은 원본보다 좋지 않다. 이는 손실 없는 산술 압축과는 다르다.
  3. Autoencoder는 예제 데이터로부터 자동으로 학습하는데 유용한 성질을 가지고 있다. 데이터로부터 자동으로 학습한다는 의미는 특정 종류의 입력값에 대해 잘 작동하는 특별한 형태의 알고리즘을 쉽게 훈련시킬 수 있다는 것이다. 이는 새로운 공학적 방법 필요 없이 단지 데이터를 적절히 훈련하면 된다.

 

Autoencoder가 수많은 연구와 집중을 끌어들이는 또 다른 이유는 autoencoder가 비지도 학습의 문제를 풀어낼 잠재적인 수단으로 오랫동안 생각되었기 때문이다.

 

Autoencoder는 진정한 비지도 학습 기술이 아니라 self-supervised 기술이다. 이는 지도 학습의 일종 으로 입력 데이터로부터 타겟을 만들어낸다. 흥미로운 특징들을 학습하는 self-supervised 모델을 얻으려면 흥미로운 합성 목표 및 손실 함수를 제공해야 한다. 문제는 여기서 발생한다. 단순히 빠르게 입력값을 재구성하는 것을 학습시키는 것은 그렇게 좋은 선택이 아니다. 예를 들어, 픽셀 수준에서 사진의 재구성에 초점을 맞추는 것은 label-supervised learning에서 얻을 수 있는 흥미롭고 추상적인 특징 (feature)을 배우는 데 도움이 되지 않는다는 중요한 증거가 있다 (타겟이 ‘개’나 ‘자동차’처럼 인간이 발명 해낸 추상적인 개념들인 경우). 사실, 이와 관련된 가장 좋은 특징은 입력 재구성이 힘든 동시에, 범주화나 지역화 같은 주요 작업에서 높은 성능을 달성하는 것이다.

 

Autoencoder는 인코더 (Encoder)와 디코더 (Decoder)로 이루어진 신경망이다. 신경망의 전체적인 구조는 입력과 출력이 동일하며 좌우를 대칭으로 구축된 구조이다. 입력층과 출력층을 같게 구성한 뒤 중간에 은닉층을 적재하고, 은닉층을 기준으로 좌우 대칭이 되도록 한다. 이때, 은닉층의 노드의 값을 Code라고 부르며 인코더는 데이터 x를 입력 받아, 가중치의 곱과 합 그리고 활성함수의 조합으로 Code를 계산한다. 디코더는 Code값에 적당한 가중치를 곱하고 활성함수를 적용하여 입력층의 값과 같은 출력 층에 도달하도록 한다.

 

 

입력데이터는 인코더와 디코더를 거쳐 재구성된다. 입력 데이터와 재구성 데이터 사이의 손실을 최소화하는 가중치를 찾기 위해 네트워크가 훈련된다.

 

차원 축소

 

차원 축소란 많은 feature로 구성된 다차원의 데이터셋의 차원을 축소하여 새로운 차원의 데이터 세트를 생성한다. Autoencoder는 학습데이터셋의 입력 데이터에 대해서 복원을 잘하는 특징을 가지고 있으 며 이러한 특징을 활용해 입력 데이터를 잘 표현하는 가중치를 학습할 수 있다. Batch Normalization, Xavier Initialization 등의 기법이 제안되기 전에는 이러한 특징을 가진 autoencoder를 사용하여 Network parameter 초기화, pre-training에 많이 사용되었다.

 

Encoder를 이용하면 x를 어떤 코드값 h로 특징을 추출할 수 있는데, 이때 h의 크기를 x보다 작게 구성하면 차원 축소가 가능하다. 따라서,  autoencoder를 사용해 데이터 차원 축소 및 특징 추출이 가능하다. 차원 축소에 있어 흔히 사용되는 PCA (Principle Component Analysis)는 선형적인 한계가 있지만, autoencoder는 뉴런이 갖고 있는 비선형적인 성질 및 가해지는 Constraints로 인해 훨씬 뛰어난 차원 축소 능력을 갖고 있다.

 

PCA는 입력 데이터의 상관 계수 행렬에 대해 고유값 분해를 해, 상대적으로 큰 고유값과 매칭되는 고유벡 터들을 찾아서 입력 데이터를 그 벡터들로 투영시킨다. 이 과정에서 상대적으로 작은 고유값과 매칭되는 고유벡터들은 무시된다. 이러한 방식으로 PCA는 데이터에서 주성분 벡터를 찾아서 데이터의 차원을 축소시킨다.

 

Stacked AutoEncoder

 

주요로 사용되지는 않지만 single autoencoder는 단층 인코더와 단층 디코더로 구성되어 있다. 자연스럽게도 인코더에서는 code까지 여러 층을 적재하고, 이와 대칭이 되도록 디코더를 구축할 수 있는데 이런 형태의 autoencoder를 stacked autoencoder라고 부른다.

 

 

두 층으로 구성된 stacked autoencoder이다. 여러 층을 적재한 형태의 autoencoder는 일반적으로 single autoencoder 대비 더 좋은 성능을 보인다고 알려져 있다.

 

Denoising AutoEncoder

 

 

Denoising autoencoder는 입력 영상에 ‘Random Nosie’를 추가하여 이러한 noise를 제거하는 학습을 통해 autoencoder의 복원 능력을 더 강화하였다. 실제 computer vision 분야에서는 고의적으로 입력 데이터에 noise를 추가하고, 이를 토대로 학습된 모델에서 나온 결과값이 노이즈를 삽입하기 전의 원본 영상인지를 확인한다.

728x90
반응형
LIST