오토인코더에서 VAE까지: 병목 · 잠재 공간 · ELBO 손계산
오토인코더 병목에서 ELBO 유도 · 정규분포 KL · β-VAE · VQ-VAE까지 손계산으로 잇는 수업
먼저 알아야 할 것
다루는 내용
오토인코더의 병목과 잡음 제거 오토인코더에서 출발해, 보통 오토인코더로 생성이 어려운 이유를 설명합니다. 로그 가능도 = ELBO + KL 간극을 유도하고 이산 2칸 예로 세 값을 계산하며, 정규분포 KL 닫힌 식과 재매개변수화를 정리합니다. β-VAE와 VQ-VAE(코드북 · straight-through)가 ELBO를 어떻게 바꿔 쓰는지 다룹니다.
해설
오토인코더에서 VAE까지: 병목 · 잠재 공간 · ELBO 손계산
오토인코더(autoencoder) 는 입력을 작은 벡터로 줄였다가 다시 펼쳐 원래대로 되돌리도록 배우는 신경망입니다. 이것을 확률 모델로 바꾸면 새 데이터를 뽑을 수 있는 변분 오토인코더(VAE) 가 됩니다. 이 수업은 그 사이를 한 걸음씩 잇습니다 — 병목, 잡음 제거, 잠재 공간, ELBO 유도(이산 2칸짜리 예로 손계산), 정규분포 KL, β-VAE, VQ-VAE.
| 항목 | 내용 |
|---|---|
| 참고 출처 | 스탠퍼드 CS236 강의 노트 Variational Autoencoders, 원 논문 Kingma · Welling(2013), Vincent 외(ICML 2008), Higgins 외(ICLR 2017), van den Oord 외(2017) |
| 트랙 · 수준 | 생성 모델 · 기초 |
| 이 수업이 다루는 범위 | 오토인코더와 병목, 잡음 제거 오토인코더, 잠재 공간의 구멍 문제, ELBO 유도와 간극, 정규분포 KL 닫힌 식, 재매개변수화 요약, β-VAE, VQ-VAE |
들어가기 전에
- 생성 모델 총론 — 잠재 변수 모델의 적분이 왜 어려운지.
- 정보 이론 최소한 — KL 발산의 정의와 "항상 0 이상" 성질.
- 딥러닝 문서로 배우기 (D2L) — MLP와 역전파.
한눈에 보기
- 오토인코더가 "압축 → 복원" 오차로 학습한다는 것과, 병목이 왜 필요한지 압니다.
- 보통 오토인코더로는 새 표본을 뽑기 어려운 이유(잠재 공간의 구멍)를 이해합니다.
- 을 유도하고, 2칸짜리 이산 예로 세 값을 직접 계산합니다.
- 정규분포 KL의 닫힌 식 에 숫자를 넣어 봅니다.
- β-VAE와 VQ-VAE가 ELBO를 어떻게 바꿔 쓰는지, 그리고 이후 모델(Stable Diffusion, Genie)과 어떻게 이어지는지 압니다.
1. 오토인코더: 좁은 문을 통과시키기
직관(해설용 비유). 긴 회의록을 세 줄 요약으로 줄였다가 다시 회의록으로 풀어 쓰는 연습을 한다고 해 봅시다. 세 줄에 담을 수 있는 것은 핵심뿐이라서, 이 연습을 반복하면 "무엇이 핵심인지"를 저절로 배웁니다.
단계.
- 인코더 가 입력 를 작은 벡터 로 줄입니다(병목, bottleneck).
- 디코더 가 를 다시 로 펼칩니다.
- 복원 오차 를 줄이도록 둘을 함께 학습합니다.
| 기호 | 뜻 |
|---|---|
| 인코더 신경망(입력 → 잠재 벡터) | |
| 디코더 신경망(잠재 벡터 → 복원) | |
| 잠재 벡터(코드). 입력보다 차원이 작음 | |
| 학습 데이터 개수 |
숫자로 해 보기(해설용). 28×28 흑백 이미지(784차원)를 32차원으로 줄이면 배 압축입니다. 병목이 없으면(잠재 차원 ≥ 입력 차원) 신경망은 그냥 입력을 그대로 베껴 오차 0을 만들 수 있어 아무것도 배우지 않습니다. 그래서 병목이 필요합니다.
잡음 제거 오토인코더(denoising autoencoder). Vincent 외(ICML 2008)는 입력 일부를 일부러 망가뜨린 를 넣고 원래 를 복원하게 했습니다. 베끼기만으로는 풀 수 없으니 데이터의 구조를 배웁니다. "망가진 것에서 원래를 되찾기"라는 아이디어는 훗날 확산 모델의 잡음 제거와 같은 뿌리입니다.
2. 왜 보통 오토인코더로는 생성이 어렵나
새 이미지를 만들려면 잠재 공간에서 아무 를 골라 디코더에 넣으면 될 것 같습니다. 하지만 보통 오토인코더는 학습 데이터의 코드가 잠재 공간 여기저기 띄엄띄엄 놓이도록 배웁니다. 코드 사이의 빈 곳(구멍)을 디코더에 넣으면 이상한 결과가 나옵니다.
해결 방향. 두 가지를 요구하면 됩니다.
- 코드들이 미리 정한 단순한 분포(예: 표준 정규분포 ) 근처에 모이게 한다.
- 각 입력을 점 하나가 아니라 작은 구름(분포) 으로 보내, 이웃 구름끼리 겹치며 빈틈을 메우게 한다.
이 두 요구를 확률적으로 정확히 표현한 것이 VAE의 목표 함수 ELBO입니다.
3. ELBO 유도: 로그 가능도 = 하한 + 간극
설정. 사전 분포 , 디코더 , 그리고 진짜 사후분포 를 흉내 내는 인코더 를 둡니다.
단계.
- 는 와 무관하므로 로 평균을 내도 그대로입니다: .
- 베이즈 정리로 를 넣고, 분자 · 분모에 를 곱하고 나눕니다.
- 로그를 두 덩어리로 나눕니다.
KL은 항상 0 이상이므로 ELBO는 의 하한 입니다. ELBO를 다시 정리하면 학습에 쓰는 꼴이 나옵니다.
| 기호 | 뜻 |
|---|---|
| 인코더가 내는 잠재 변수 분포(입력마다 다른 구름) | |
| 디코더가 내는 복원 분포 | |
| 사전 분포(보통 ) | |
| 복원 항 | 구름에서 뽑은 로 를 잘 복원하는가 |
| KL 항 | 구름이 사전 분포에서 너무 멀어지지 않았는가(2절의 요구 1) |
숫자로 해 보기(해설용, 이산 2칸 예). 잠재 변수가 두 값뿐이라고 합시다. , 관측한 에 대해 , 입니다.
- 진짜 가능도: ,
- 진짜 사후분포:
인코더 를 바꿔 가며 ELBO를 계산하면 다음과 같습니다.
| 인코더 | 복원 항 | KL(q‖사전) | ELBO | 간극 KL(q‖사후) |
|---|---|---|---|---|
| (0.5, 0.5) | −1.060 | 0 | −1.060 | 0.144 |
| (0.1, 0.9) | −0.621 | 0.368 | −0.989 | 0.072 |
| (0.25, 0.75) = 사후분포 | −0.785 | 0.131 | −0.916 | 0 |
세 줄 모두 "ELBO + 간극 = −0.916" 이 맞습니다. 인코더가 진짜 사후분포와 같아지면 간극이 0이 되고 ELBO가 로그 가능도와 같아집니다. 둘째 줄처럼 복원만 욕심내 쪽으로 쏠리면 KL 항 벌점이 커져 오히려 손해입니다.
왜 이렇게 하나. 를 직접 키우려면 적분이 필요하지만, ELBO는 에서 를 몇 개 뽑아 평균을 내면 계산됩니다. 그래서 ELBO를 키우면 (1) 가능도가 올라가거나 (2) 인코더가 사후분포에 가까워지는, 둘 다 좋은 일이 일어납니다.
4. 정규분포 KL과 재매개변수화
실제 VAE는 인코더가 평균 와 표준편차 를 내는 정규분포 를 쓰고, 사전 분포는 입니다. 이때 KL 항은 닫힌 식으로 계산됩니다(차원마다 더함).
숫자로 해 보기(해설용).
- :
- : (사전 분포와 똑같음)
- : — 구름을 점처럼 좁히면 벌점이 큽니다. 2절의 "점이 아니라 구름으로"를 이 항이 강제합니다.
- : — 원점에서 멀리 가도 벌점입니다.
재매개변수화(reparameterization) 요약. 를 에서 "뽑는" 연산은 미분이 안 됩니다. 그래서 , 로 바꿔 쓰면 무작위성은 에만 남고 로 기울기가 흐릅니다. 예: 이면 . 유도와 원 논문 설정은 VAE 원 논문 해설 에 자세히 있습니다.
flowchart LR
X[입력 x] --> E[인코더 q φ]
E --> MU[평균 μ]
E --> SG[표준편차 σ]
N[잡음 ε ~ N 0,1] --> Z[z = μ + σ·ε]
MU --> Z
SG --> Z
Z --> DEC[디코더 p θ x given z]
DEC --> R[복원 항]
MU --> K[KL 항<br/>½ μ²+σ²−1−ln σ²]
SG --> K
R --> L[손실 = −복원 + β·KL]
K --> L5. β-VAE: KL 항의 무게 조절
Higgins 외(ICLR 2017)는 ELBO의 KL 항에 가중치 를 붙였습니다.
이면 보통 VAE입니다. 논문은 로 사전 분포 쪽 압박을 키우면 잠재 차원 하나하나가 "회전 · 크기 · 위치" 같은 서로 독립적인 요인을 따로 맡는 분리된 표현(disentangled representation) 을 더 잘 배운다고 보고했습니다. 대가는 복원 품질입니다.
숫자로 해 보기(해설용). 복원 항이 −50, KL 항이 8인 표본에서 손실은 , 이면 입니다. 학습은 KL을 줄이는 쪽(잠재 정보를 덜 쓰는 쪽)에 더 힘을 쏟게 됩니다.
6. VQ-VAE: 잠재 공간을 사전(단어장)으로
van den Oord 외(2017)의 VQ-VAE 는 잠재 벡터를 연속값으로 두지 않고, 학습되는 코드북(codebook) 벡터 중 가장 가까운 것으로 바꿔(양자화) 씁니다. 그러면 이미지가 "코드 번호의 격자"가 되어, 그 위에서 자기회귀 모델(이미지는 PixelCNN, 음성은 WaveNet)로 사전 분포를 따로 배웁니다.
| 기호 | 뜻 |
|---|---|
| 인코더 출력(양자화 전) | |
| 선택된 코드북 벡터, | |
| 기울기 멈춤(앞으로는 그대로, 뒤로는 기울기 0) | |
| 둘째 항 | 코드북을 인코더 출력 쪽으로 당김 |
| 셋째 항 | 인코더가 고른 코드에서 멀어지지 않게 붙잡음(commitment), 논문은 |
양자화는 미분이 안 되므로 디코더 입력의 기울기를 인코더 출력으로 그대로 복사합니다(straight-through). 손실 첫 항은 논문 표기 그대로 로그 가능도로 적었으며, 실제 최소화할 때는 부호를 바꿔 씁니다.
숫자로 해 보기(해설용). 인코더 출력 , 코드북 , , . 거리 제곱은 이므로 이 선택됩니다. commitment 항은 입니다.
어디로 이어지나. "먼저 압축기(오토인코더)를 학습하고, 압축된 공간에서 생성 모델을 돌린다"는 2단계 구조는 잠재 확산(Stable Diffusion)과 Genie 의 동영상 토크나이저로 이어졌습니다. 로봇의 ACT 는 조건부 VAE(CVAE)로 시연의 다양성을 담습니다.
연습 문제
- 의 KL(사전 )을 구하세요.
- 풀이: 입니다.
- 3절 예에서 인코더가 일 때 KL(q‖사전)이 0인데도 ELBO가 로그 가능도보다 낮은 이유는?
- 풀이: 간극 때문입니다. 사전 분포와는 같지만 진짜 사후분포 와는 달라서입니다.
- 잠재 차원이 입력 차원보다 큰 오토인코더를 학습하면 어떤 문제가 생기나요?
- 풀이: 입력을 그대로 베끼는 항등 함수로 오차를 0으로 만들 수 있어, 유용한 구조를 배우지 않습니다.
- 코드북 크기 512, 잠재 격자 32×32인 VQ-VAE는 이미지 한 장을 몇 개의 코드 번호로 나타내나요? 번호 하나는 몇 비트인가요?
- 풀이: 개, 비트입니다(해설용 설정).
스스로 점검
- ELBO가 로그 가능도의 하한인 이유는?
- 답: 이고 KL은 항상 0 이상이기 때문입니다.
- KL 항이 없으면 VAE는 어떻게 되나요?
- 답: 인코더가 구름을 점처럼 좁히고 코드를 아무 데나 놓아 보통 오토인코더처럼 되며, 사전 분포에서 뽑은 로는 좋은 표본이 나오지 않습니다.
- VQ-VAE에서 straight-through가 필요한 이유는?
- 답: 가장 가까운 코드 고르기는 미분할 수 없어서, 디코더 쪽 기울기를 인코더 출력으로 그대로 복사해 인코더를 학습합니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 오토인코더 | 줄였다가 다시 펼쳐 원래대로 복원하도록 배우는 신경망 |
| 병목 | 인코더 출력의 차원을 작게 만든 좁은 통로 |
| 잡음 제거 오토인코더 | 망가진 입력에서 원래 입력을 복원하도록 배우는 오토인코더 |
| 잠재 공간 | 잠재 벡터들이 놓이는 공간 |
| 사후분포 | 관측 를 본 뒤 잠재 변수 의 분포 |
| ELBO | 로그 가능도의 하한(복원 항 − KL 항) |
| 재매개변수화 | 로 바꿔 무작위 추출을 미분 가능하게 하는 기법 |
| β-VAE | KL 항에 가중치 β를 곱한 VAE |
| 분리된 표현 | 잠재 차원마다 서로 다른 요인을 따로 담은 표현 |
| VQ-VAE | 잠재 벡터를 코드북의 가장 가까운 벡터로 바꿔 쓰는 VAE |
더 깊이 보려면
- 변분 오토인코더 (VAE) — SGVB 추정량 · AEVB 알고리즘 · 원 논문 결과
- CS236 VAE 노트: deepgenerativemodels.github.io/notes/vae
- VQ-VAE 원 논문: arxiv.org/abs/1711.00937
다음에 볼 것
- 변분 오토인코더 (VAE) — 오늘 유도한 ELBO를 원 논문의 표기와 실험으로 확인합니다.
- GAN 실전 — 가능도를 포기한 다른 갈래
라이선스
본문은 KAITABASE 자체 해설입니다. 참고 자료 CS236 노트는 별도 라이선스 표기가 없어 구성만 참고했고, 각 논문은 요약 · 인용만 했습니다. 이산 2칸 예, KL 숫자, 코드북 숫자는 이 수업을 위해 만든 해설용 예입니다.
출처
- CS236 노트 Variational Autoencoders: deepgenerativemodels.github.io/notes/vae
- Kingma · Welling, Auto-Encoding Variational Bayes(2013): arxiv.org/abs/1312.6114
- Vincent · Larochelle · Bengio · Manzagol, Extracting and Composing Robust Features with Denoising Autoencoders(ICML 2008): icml.cc/imls/conferences/2008/papers/592.…
- Higgins 외, β-VAE: Learning Basic Visual Concepts with a Constrained Variational Framework(ICLR 2017): openreview.net/forum
- van den Oord · Vinyals · Kavukcuoglu, Neural Discrete Representation Learning(2017): arxiv.org/abs/1711.00937
AI 원리부터 이해하기 · 생성 모델 모듈
생성 모델 모듈 학습
이 글은 생성 모델 모듈의 학습 자료입니다. 전체 10개 자료 중 2번째입니다.
출처·원문
원문 보기요약만