오토인코더와 표현 학습

src/content/documents/deep-learning/autoencoder-and-representation-learning.json

정답 없이 배우는 다른 길

지도학습은 입력마다 정답(Label)이 있어야 학습할 수 있다. 그런데 정답을 다는 데는 세 가지 현실적인 벽이 있다.

  • 비용 — 사람이 일일이 라벨을 달아야 하고, 전문 지식이 필요한 경우 비용이 더 커진다.

  • 애매한 문제 — 무엇이 “정답”인지 명확히 정의하기 어려운 문제도 많다.

  • 정보 손실 — 라벨로 깔끔하게 구분되지 못하는 데이터는 학습에서 버려진다.

이 벽을 넘는 발상이 “정답 없이, 데이터에서 스스로 학습하자”다. 그중 가장 단순한 방법은 입력 자신을 정답으로 삼는 것이다 — Auto-Encoder가 이 아이디어에서 출발한다.

Auto-Encoder: 압축했다가 복원하며 배운다

Auto(자동으로) + Encoder(데이터를 압축, 특징만 남김) + Decoder(압축된 데이터를 원래대로 복원) — 이름 그대로, 데이터를 압축했다가 다시 복원하는 과정을 스스로 학습하는 신경망이다.

구성 요소

역할

Encoder

입력을 점점 줄여 압축한다 — 중요한 특징만 남긴다

Latent Space (Bottleneck)

가장 압축된 형태. 가장 작은 차원으로 데이터를 표현한 지점

Decoder

압축된 정보(Latent Space)를 바탕으로 원본과 최대한 비슷하게 복원한다

입력과 출력이 최대한 같아지도록 학습시키는 과정에서, 중간의 Latent Space에는 데이터를 설명하는 데 꼭 필요한 특징만 압축되어 남는다. 목적은 “복원 자체”가 아니라, 그 과정에서 얻어지는 압축된 표현(특징)이다.

기존 차원 축소(PCA)와 무엇이 다른가

차원을 줄이는 방법으로 이미 PCA(주성분 분석)가 있다. 다만 PCA는 분산이 가장 큰 방향으로 데이터를 선형적으로 압축하기 때문에, 직선 관계(선형)로 설명되는 데이터에는 잘 맞지만 비선형 관계는 잘 담아내지 못한다. Auto-Encoder는 신경망이므로 비선형 활성 함수를 거치며 비선형적인 압축까지 학습할 수 있다.

코드로 압축과 복원 체감하기

실제 Auto-Encoder는 비선형 신경망이지만, 원리를 체감하기 위해 5차원 데이터를 2차원으로 선형 압축했다가 복원해본다. 여기서는 SVD(특이값 분해)로 최적의 선형 압축 방향을 구했는데, 이는 선형 Auto-Encoder가 도달할 수 있는 최적해와 같다.

import numpy as np

np.random.seed(0)
X = np.random.randn(20, 5)     # 샘플 20개, 특성(차원) 5개
X = X - X.mean(axis=0)          # 평균 0으로 중심화

# 선형 Auto-Encoder의 최적해와 동일한, 분산이 가장 큰 2개 방향을 찾는다
U, S, Vt = np.linalg.svd(X, full_matrices=False)
W_enc = Vt[:2].T                # (5, 2) 압축 방향 = Encoder

Z = X @ W_enc                    # 압축 (20, 2) = Latent Space
X_hat = Z @ W_enc.T               # 복원 (20, 5) = Decoder

recon_error = np.mean((X - X_hat) ** 2)
total_var = np.mean(X ** 2)
print(f"원본 shape: {X.shape}, 압축 shape: {Z.shape}")
print(f"복원 오차(MSE): {recon_error:.4f} (원본 분산 대비 {recon_error/total_var:.1%})")
원본 shape: (20, 5), 압축 shape: (20, 2)
복원 오차(MSE): 0.3806 (원본 분산 대비 40.4%)

5차원을 2차원으로(60% 압축) 줄이고도 원본 분산의 약 60%를 복원해냈다 — 완벽하지는 않지만, 무작위 데이터에서도 “중요한 방향”만 남기면 상당 부분을 되살릴 수 있다는 것을 보여준다. 실제 이미지·시계열처럼 특징이 뚜렷한 데이터라면 비선형 Auto-Encoder의 복원율은 이보다 훨씬 높다.

Vanilla AE의 한계

  • 압축 표현의 쓸모가 보장되지 않는다 — 복원이 잘 된다고 해서 그 표현이 분류·검색 같은 다른 과제에 유용하다는 보장은 없다.

  • Latent 공간이 불규칙하다 — 임의의 값을 Latent Space에 넣어도 의미 있는 출력이 나온다는 보장이 없어, 그대로는 생성 모델로 쓰기 어렵다.

  • 분포 밖 입력에 취약하다 — 학습 때 보지 못한 종류의 입력은 잘 복원하지 못한다(이 특성을 오히려 이상치 탐지에 활용하기도 한다).

Auto-Encoder의 확장

종류

핵심 아이디어

활용

Vanilla AE

입력을 압축했다가 그대로 복원

차원 축소, 특징 추출

Denoising AE

일부러 노이즈를 추가한 입력을 깨끗한 데이터로 복원하도록 학습

노이즈 제거, 강인한 특징 학습

Sparse AE

Latent Space에 희소성 제약을 걸어 활성 뉴런 수를 제한

중요 특징만 뽑아내는 압축

VAE (Variational AE)

Encoder 출력이 작은 변화에도 민감하지 않도록 제약

견고한 특징 학습, 단순 압축을 넘어 데이터 생성

Convolutional AE

CNN 기반으로 이미지의 공간적 구조를 반영

이미지 압축·노이즈 제거

Seq2Seq

RNN·LSTM·GRU로 순차 데이터에도 적용되도록 확장

시계열 특징 압축·패턴 학습

정리

Auto-Encoder는 입력 자신을 정답 삼아, 압축(Encoder)과 복원(Decoder)을 스스로 학습하는 비지도학습 방법이다. PCA와 달리 비선형 관계도 압축할 수 있지만, 복원이 잘 된다고 해서 그 표현이 항상 “쓸모 있다”는 보장은 없다는 한계도 함께 알아둬야 한다. 다음 글에서는 이 압축·복원 아이디어를 시퀀스 데이터로 확장한 Seq2Seq를 다룬다.

참고 자료

An Introduction to Autoencoders (arXiv, 2003.05991) — Auto-Encoder 구조와 Latent Space, 확장 모델에 대한 개괄 (2026-08-07 확인)

댓글 0

댓글을 불러오는 중…