스킬캠퍼스

오늘 끝나면

Autoencoder & VAE

  • Autoencoder & VAE의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 Autoencoder이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

힌튼 2006 → 킹마 2013 — 잠재공간과 재매개변수화 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

AI · Day 16 / 생성 모델

압축의 미학,
생성의 씨앗

데이터를 좁은 병목에 욱여넣었다가 다시 펼친다. 오토인코더는 그 압축으로 본질을 배운다. VAE는 그 압축을 확률분포로 바꾼다. 그래서 본 적 없는 데이터를 만드는 첫 생성 모델이 된다.

P.01AI · Day 16

딥러닝이 죽었다던 시절

2006년, 신경망은 두 번째 겨울을 지나고 있었다. "Deep한 망은 학습이 안 된다"가 상식이었다. 연구자 대부분이 SVM과 부스팅으로 떠났다.

그런데 2006년 Geoffrey Hinton이 Science에 논문 한 편을 던졌다. 제목은 Reducing the Dimensionality of Data with Neural Networks다. 깊은 망도 학습된다고 했다. 그 도구가 Autoencoder다.

이게 딥러닝 2차 부활의 신호탄이다. AlexNet보다 6년 빠르다. 압축이라는 단순한 아이디어가 멈춘 분야를 다시 움직였다.

딥러닝 2차 부활 · 2006
1987 · BallardAE 아이디어 원조1988 · Bourlard선형 AE = PCA 증명2006 · HintonDeep AE · 2차 부활2008 · VincentDenoising AE2013 · KingmaVAE 등장2017 · van den OordVQ-VAE → DALL·E연도 ↓

파란 점이 분기점이다. Hinton(2006)이 부활을, Kingma(2013)가 생성을 열었다

P.02AI · Day 16

병목이 의미를 만든다

구조는 모래시계다. 입력을 좁은 병목으로 압축한다. 다시 원래 크기로 펼쳐 자기 자신을 복원한다.

학습 목표는 하나, ‖x − x̂‖²를 줄이는 것이다. 복원 결과가 원본과 얼마나 비슷한지 MSE로 잰다. 그런데 왜 병목을 둘까? 병목이 없으면 망은 입력을 그대로 복사하는 항등 함수만 배운다. 손실이 0이라 그게 제일 쉬운 답이기 때문이다.

병목을 강제하면 달라진다. 784차원을 32차원으로 줄이려면 망은 어쩔 수 없이 7이라는 개념이나 0의 둥근 정도 같은 본질만 골라 담는다. 활성화가 선형이면 이 해는 PCA와 똑같다. 비선형을 넣는 순간 PCA를 압도한다.

ENCODER → 병목 → DECODER
x · 784z · 32병목x̂ · 784Encoder fθDecoder gφ압축 → 복원

좁은 병목이 항등 함수를 막고 본질만 남긴다. 손실은 ‖x − x̂‖²

P.03AI · Day 16

점이 아니라 분포로

학습이 끝난 AE에 랜덤 잠재 벡터를 디코더에 넣으면 새 숫자가 나올까? 결과는 대부분 쓰레기 이미지다.

왜 그럴까? AE는 각 샘플을 잠재 공간의 점 하나에 박아둘 뿐, 그 사이는 채우지 않는다. 점과 점 사이엔 디코더가 본 적 없는 큰 공백이 있다. 거기서 뽑으면 의미 없는 출력이 나온다.

2013년 Kingma와 Welling이 전환점을 만들었다. 잠재 z를 점이 아니라 분포로 인코딩하자는 발상이다. 인코더가 μσ를 내놓는다. 손실에 KL 항을 더해 잠재 공간을 표준정규 쪽으로 끌어당긴다. 그러면 공간이 빈틈없이 연속된다. 어디서 뽑아도 그럴듯한 결과가 나온다. 이 연속성이 VAE를 생성 모델로 만든 비밀이다.

AE 공백 vs VAE 연속
잠재 공간 탐험기 · z를 끌어 디코더가 그리는 숫자를 본다
잠재 평면 z (드래그)
017
z = (0.00, 0.00)
디코더 출력 x̂ (12×12)
선명도 ≈ 35%
현재 모드
VAE
가까운 점까지
0.88
선명도
35%
프로토타입 사이, VAE라 매끄럽게 섞임
점 사이 공백으로 z를 끌어보면 AE는 깨지고, VAE는 두 숫자를 매끄럽게 모핑한다. 이 연속성이 VAE를 생성 모델로 만든 비밀이다.
P.04AI · Day 16

역전파를 가능하게 한 한 수

VAE를 학습하려면 경사하강법이 필요하다. 그런데 한가운데 샘플링이라는 미분 불가능한 연산이 끼어 있다.

z ~ N(μ, σ²)에서 z를 뽑는 순간, 이건 랜덤 노드라 기울기가 정의되지 않는다. 디코더 쪽 손실을 인코더의 μ, σ까지 흘려보낼 길이 끊긴다. Kingma의 해법은 단순하다. 랜덤성을 바깥으로 밀어낸다.

z = μ + σ · ε, 여기서 ε ~ N(0,1)이다. 이제 랜덤한 건 외부 노이즈 ε뿐이다. μ와 σ로 가는 경로는 완전히 결정론적이다. 그래서 기울기가 흐른다. 샘플링을 연산 그래프 밖으로 빼낸 이 한 수가 나중에 Normalizing Flow와 Diffusion 설계에까지 영향을 준다.

파이썬 코드 보기
def reparameterize(mu, logvar):
    std = torch.exp(0.5 * logvar)   # sigma
    eps = torch.randn_like(std)     # eps ~ N(0,1)
    z = mu + std * eps              # z = mu + sigma*eps
    return z
# 단 3줄. 이 3줄이 VAE를 작동하게 했다.
REPARAMETERIZATION TRICK
μσε~N(0,1)×+zz = μ + σ · ε결정론적 경로 → 기울기 OK

랜덤성을 ε으로 밀어내 μ, σ는 결정론적이다. 그래서 역전파가 통한다

P.05AI · Day 16

정상만 봐도 이상을 찾는다

AE의 가장 강력한 실무 응용은 이상 탐지다. 원리는 단순하다. 정상 데이터만으로 학습하면 AE는 정상만 잘 복원한다.

그래서 처음 보는 불량 샘플이 들어오면 재구성 오차가 크게 튄다. 정상과 이상의 오차 분포가 갈라진다. 불량 유형별 라벨도 필요 없다. 반도체 웨이퍼 결함 검출, 제조 라인 품질 검사, 금융 이상거래 탐지가 모두 이 원리를 쓴다. 라벨링 비용이 사실상 0으로 수렴한다.

이 챕터의 교훈은 셋이다. 첫째, 제약이 의미를 만든다. 병목이 없으면 망은 본질을 골라낼 이유가 없다. 둘째, 정답 하나가 아니라 가능성의 분포를 다룬다. 셋째, 미분 가능성이 곧 학습 가능성이다.

Q. 왜 VAE가 만든 이미지는 GAN보다 흐릿할까?VAE의 재구성 손실은 MSE나 BCE, 즉 픽셀별 평균 오차를 줄인다. 모델이 불확실할 때 최적해는 "여러 정답의 평균"이 된다. 평균 이미지는 흐려진다. 게다가 KL 항이 잠재를 표준정규로 강제해 표현력을 제한한다. 반면 GAN은 판별자가 선명한 샘플을 요구해서 또렷하다 (대신 mode collapse 위험이 있다).
재구성 오차 분포
임계값▢ 정상■ 이상재구성 오차 →

정상만 학습하면 이상은 복원에 실패하고, 오차가 임계값 너머로 튄다 (AUC 0.85~0.95)

3줄 요약

  1. 1힌튼 2006 → 킹마 2013 — 잠재공간과 재매개변수화
  2. 2Autoencoder & VAE은 준비운동 → 지도학습 → 시퀀스 → 생성모델 → 실무 적용 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

Autoencoder

힌튼 2006 → 킹마 2013 — 잠재공간과 재매개변수화

모델

입력을 받아 예측이나 출력을 만드는 계산 규칙

손실

예측이 정답에서 얼마나 빗나갔는지 재는 숫자