| <nopad> | ||
| {{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#2e3039,#2e3039><colcolor=#fff,#fff> 종류 | 대화형 인공지능 (주요 목록) · 코드 생성 인공지능 · 그림 인공지능 · 영상 인공지능 · 음향 인공지능 · 3D 모델링· 지능형 에이전트 · VLA · 멀티모달 모델 · 언어 모델 · 월드 모델 |
| 프롬프트 | 프롬프트 · 프롬프트 엔지니어링 · 프롬프트 해킹 | |
| 아키텍처 | 트랜스포머 · GAN · 확산 모델 · 변분 오토인코더 · 자기회귀모델 | |
| 학습 | 자기지도학습 · 강화학습 (RLHF) | |
| 응용 | AI 개요 · 인공지능 검색 엔진 · 바이브 코딩 · 인공지능 로봇 (테슬라 옵티머스) | |
| 문화·밈 | AI 커버 · 쇼거스 · 인공지능 버츄얼 유튜버 · ChatGPT 지브리풍 이미지 생성 유행 · 와... 너 정말, **핵심을 찔렀어.** | |
| 기타 | AI 슬롭 · AI wrapper · 인공지능 환각 · 인공지능 벤치마크 · Model Context Protocol · 대중화 · 인공 일반 지능 · 인공지능 정렬 · Spiritual bliss attractor | }}}}}}}}} |
1. 개요
변분 오토인코더(VAE)는 오토인코더의 구조를 활용하면서도 생성 모델로서의 능력을 강화한 모델이다. 일반적인 오토인코더는 잠재 공간 [math(z)]가 어떻게 분포되어 있는지 명시적으로 제어하지 않기 때문에 잠재 공간에서 임의의 벡터 [math(z)]를 샘플링해 디코더에 넣어도 의미 있는 결과([math(\hat{x})])가 생성된다는 보장이 없다. 잠재 공간이 불규칙하거나 구멍이 많을 수 있기 때문이다.VAE는 이런 문제를 해결하기 위해 인코더가 잠재 변수 [math(z)]를 직접 출력하는 대신, [math(z)]가 따르는 확률 분포의 패러미터(주로 가우시안 분포의 평균 [math(\mu)]와 분산 [math(\sigma^2)])를 출력하도록 설계되었다. 잠재 변수 [math(z)]는 이 분포로부터 샘플링되며, 학습 과정에서 잠재 변수들의 분포가 특정 사전 분포(Prior Distribution)[1]를 따르도록 강제하는 제약 조건을 손실 함수에 추가한다. 이를 통해 VAE는 잘 구조화되고 연속적인 잠재 공간을 학습하게 되며, 이 공간에서 샘플링해 새로운 데이터를 생성하는 것이 가능해진다.
2. 핵심 아이디어
- 확률적 인코더 (Probabilistic Encoder): 입력 [math(x)]가 주어졌을 때 잠재 변수 [math(z)]의 조건부 확률 분포 [math(q_\phi(z|x))]를 학습한다. 일반적으로 이 분포는 가우시안 분포로 가정하며, 인코더 신경망 [math(\phi)]는 이 분포의 평균 벡터 [math(\mu_\phi(x))]와 분산 벡터 [math(\sigma^2_\phi(x))]를 출력한다.
- 확률적 디코더 (Probabilistic Decoder): 잠재 변수 [math(z)]가 주어졌을 때 원본 데이터 [math(x)]의 조건부 확률 분포 [math(p_\theta(x|z))]를 학습한다. 디코더 신경망 [math(\theta)]는 [math(z)]를 입력받아 [math(x)]의 분포 파라미터[2]를 출력하고, 이를 통해 [math(\hat{x})]를 재구성한다.
- 잠재 변수 샘플링: 인코더가 출력한 평균 [math(\mu_\phi(x))]와 분산 [math(\sigma^2_\phi(x))]을 따르는 가우시안 분포 [math(\mathcal{N}(\mu_\phi(x), \text{diag}(\sigma^2_\phi(x))))] 에서 잠재 변수 [math(z)]를 샘플링한다: [math(z \sim q_\phi(z|x))].
- 사전 분포 제약: 잠재 변수 [math(z)]의 분포 [math(q_\phi(z|x))]가 우리가 원하는 사전 분포 [math(p(z))] (보통 표준 정규 분포 [math(\mathcal{N}(0, I))])와 유사해지도록 손실 함수에 제약을 가한다.
3. 재매개변수화 트릭
그런데 VAE 학습 과정에는 한 가지 문제가 있다. 인코더가 출력한 분포로부터 [math(z)]를 샘플링하는 과정은 확률적 연산이기 때문에, 역전파 알고리즘을 통해 인코더의 파라미터 [math(\phi)]로 기울기(Gradient)를 전달할 수 없다는 것이 바로 그것.이 문제를 해결하기 위한 방법이 재매개변수화 트릭(Reparameterization Trick)이다. 재매개변수화 트릭을 사용하면 [math(z)]를 직접 샘플링하는 대신 고정된 표준 정규 분포 [math(\mathcal{N}(0, I))]에서 노이즈 변수 [math(\epsilon)]를 먼저 샘플링하고 그걸 인코더가 출력한 평균 [math(\mu_\phi(x))] 및 표준편차 [math(\sigma_\phi(x))] 와 결합해 [math(z)]를 결정론적으로 계산하게 된다.
[math(z = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilon)]
여기서 [math(\odot)]은 요소별 곱셈(element-wise multiplication)을 의미한다. 이렇게 하면 샘플링 과정이 네트워크의 외부[3] 로 분리되고, [math(z)]는 [math(\mu_\phi(x))]와 [math(\sigma_\phi(x))]에 대해 미분 가능한 결정론적 함수가 된다. 이렇게 해서 결과적으로 그래디언트가 인코더 파라미터 [math(\phi)]까지 문제없이 흘러갈 수 있게 된다.
4. 손실 함수(ELBO)
VAE의 손실 함수는 최대화하려는 목표인 증거 하한(Evidence Lower Bound, ELBO)에서 유도되며 보통 음수 ELBO를 최소화하는 형태로 사용된다. VAE의 손실 함수는 크게 두 가지 항으로 구성된다.- 재구성 손실 (Reconstruction Loss): 디코더가 잠재 변수 [math(z)]로부터 원본 입력 [math(x)]를 얼마나 잘 복원하는지를 측정한다. 이는 일반적인 오토인코더의 재구성 손실과 유사하며, [math(p_\theta(x|z))]의 로그 가능도(Log-likelihood) 기댓값으로 표현된다.
[math(L_{recon} = -\mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)])]
데이터가 연속적이면 MSE, 이진적이면 BCE 등을 사용하여 근사적으로 계산할 수 있다.
- KL 발산 (KL Divergence) 손실: 인코더가 추정한 잠재 변수의 분포 [math(q_\phi(z|x))]와 사전 분포 [math(p(z))] 사이의 차이를 측정한다. 이 항은 [math(q_\phi(z|x))]가 사전 분포 [math(p(z))] (보통 [math(\mathcal{N}(0, I))])에 가깝도록 정규화하는 역할을 한다. 두 분포 사이의 쿨백-라이블러 발산으로 계산된다.
[math(L_{KL} = D_{KL}(q_\phi(z|x) || p(z)))]
[math(q_\phi(z|x))]를 가우시안 [math(\mathcal{N}(\mu, \sigma^2 I))]로, [math(p(z))]를 표준 가우시안 [math(\mathcal{N}(0, I))]로 가정하면, KL 발산 항은 다음과 같이 해석적으로 계산 가능하다.
[math(D_{KL}(\mathcal{N}(\mu, \sigma^2 I) || \mathcal{N}(0, I)) = \frac{1}{2} \sum_{j=1}^J (\sigma_j^2 + \mu_j^2 - 1 - \log \sigma_j^2))][4]
따라서 VAE의 최종 손실 함수(최소화 대상)는 이 두 항의 합이다.
[math(L_{VAE} = L_{recon} + \beta L_{KL})]
여기서 [math(\beta)]는 두 손실 항 사이의 가중치를 조절하는 하이퍼파라미터이다.(β-VAE) 기본 VAE에서는 [math(\beta = 1)]이다.
5. 데이터 생성 과정
학습이 완료된 VAE는 사전 분포 [math(p(z))] (보통 [math(\mathcal{N}(0, I))])에서 잠재 변수 벡터 [math(z_{new})]를 샘플링할 수 있다. 샘플링된 [math(z_{new})]를 학습된 디코더 [math(g_\theta)]에 입력하면 새로운 데이터 [math(x_{new} = g_\theta(z_{new}))]가 생성된다. VAE는 잠재 공간이 잘 구조화되어 있기 때문에 잠재 공간 상에서 보간법(interpolation) 등 벡터 연산을 통해 의미론적으로 변화하는 데이터를 생성할 수도 있다.6. 종류
- 베타-VAE(β-VAE): VAE 손실 함수의 KL 발산 항에 가중치 [math(\beta)]를 도입하여 재구성과 잠재 변수 분포 제약 사이의 균형을 조절하는 모델. [math(\beta > 1)]이면 잠재 변수의 독립성(Disentanglement)을 더 강조할 수 있다.
- 조건부 VAE(Conditional VAE, CVAE): 특정 조건[5]을 입력으로 함께 받아 해당 조건에 맞는 데이터를 생성하는 VAE.
- 벡터 양자화 VAE(Vector Quantized VAE, VQ-VAE): 잠재 공간을 이산적인 코드북(Codebook)으로 양자화하는 VAE. 고품질 이미지 생성 등에서 좋은 성능을 보인다.
7. 한계
VAE의 생성 결과는 재구성 손실과 KL 발산 제약 사이의 미묘한 균형 때문에 GAN이 만들어내는 이미지보다 전반적으로 흐릿한 인상을 준다.[6] 또 학습 과정에서는 KL 소실 문제(KL Vanishing)를 겪을 수 있다. KL 소실문제란 강력한 디코더를 사용할 때 KL 발산 항이 0에 가까워지는 문제로 잠재 변수 [math(z)]가 입력[math(x)]의 정보를 제대로 담아내지 못하고 그저 사전 분포만을 따르는 결과가 초래된다.8. 다른 기법과의 비교
8.1. GAN
GAN은 생성 모델의 대표 주자이다. 이 모델은 생성자(Generator)와 판별자(Discriminator)가 서로 경쟁하며 학습하는 독특한 방식을 택한다. 이런 구조 덕분에 GAN은 VAE보다 훨씬 더 선명하고 사실적인 이미지를 만들어내는 경향이 있다.하지만 GAN에게도 약점은 있다. 학습 과정이 불안정해 모드 붕괴(Mode Collapse)같은 문제가 쉽게 발생할 수 있다는 것이 대표적. VAE는 GAN에 비해 비교적 학습이 안정적인 편이다. 잠재 공간에 있어서도 차이가 있다. VAE는 명시적으로 잠재 변수의 분포를 제어하기 때문에 잠재 공간이 잘 구조화된 경향이 있지만 GAN은 잠재 공간 구조에 대한 명시적인 제약이 없다.
마지막으로 언급할만한 것은 모델을 평가하는 방식에서의 차이. VAE는 로그 가능도(Log-likelihood) 같은 지표로 모델 성능을 평가하기 용이하지만 GAN은 모델 평가 자체가 더 어렵다.
[1] 보통 표준 정규 분포 [math(\mathcal{N}(0, I))]다.[2] 가우시안 분포의 평균, 또는 베르누이 분포의 확률 등이 있다.[3] [math(\epsilon)] 샘플링을 말한다[4] 여기서 [math(J)]는 잠재 공간의 차원이다.[5] 가령 MNIST 숫자 레이블을 예로 들 수 있다[6] 이러한 흐릿한 현상을 줄이기 위해 VAE를 여러 계층으로 구성하는 HVAE(Hierarchical VAE)를 도입하기도 했고, 이것이 더 발전해 확산 모델로 이어지게 된다.#