정답 없이 배우는 다른 길
지도학습은 입력마다 정답(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
댓글을 불러오는 중…