🤖 Deep Learning
AE(Auto Encoder) vs VAE(Variational Auto Encoder)
date
May 29, 2025
slug
vae
author
status
Public
tags
Deep Learning
Generative Models
Diffusion Models
summary
AE는 주로 데이터 압축 및 특징 추출에 중점을 두는 반면, VAE는 새로운 데이터를 생성하는 생성 모델로써의 능력에 더 중점을 둡니다.
type
Post
thumbnail
category
🤖 Deep Learning
updatedAt
May 31, 2025 10:10 AM
AE(Autoencoder, 오토인코더)와 VAE(Variational Autoencoder, 변이형 오토인코더)는 둘 다 신경망을 사용하여 데이터의 저차원 표현(잠재 공간, latent space)을 학습하는 비지도 학습 모델입니다. 하지만 그 목표와 잠재 공간을 다루는 방식에서 중요한 차이가 있습니다.
간단히 말해, AE는 주로 데이터 압축 및 특징 추출에 중점을 두는 반면, VAE는 새로운 데이터를 생성하는 생성 모델(Generative Model)로서의 능력에 더 중점을 둡니다.
오토인코더 (AE, Autoencoder)
- 목표: 입력 데이터를 압축하여 저차원의 잠재 공간으로 인코딩(encoding)했다가, 다시 원래 차원으로 디코딩(decoding)하여 입력 데이터와 최대한 유사하게 복원하는 것을 목표로 합니다. 즉, 입력과 출력이 같은 '항등 함수'를 근사하려고 합니다.
- 구조:
- 인코더 (Encoder): 입력 데이터를 받아 저차원의 잠재 벡터(latent vector)로 압축합니다.
- 잠재 공간 (Latent Space) / 병목 (Bottleneck): 인코더가 생성한 압축된 표현이 존재하는 공간입니다.
- 디코더 (Decoder): 잠재 벡터를 받아 원래 차원의 데이터로 복원합니다.
- 학습 방식: 입력 데이터와 복원된 데이터 간의 복원 손실(Reconstruction Loss) (예: Mean Squared Error)을 최소화하도록 학습합니다.
- 잠재 공간의 특징:
- AE는 잠재 공간의 구조에 대해 특별한 제약을 가하지 않습니다. 따라서 학습된 잠재 공간은 불연속적이거나 의미론적으로 잘 구조화되어 있지 않을 수 있습니다.
- 잠재 공간의 특정 지점에서 샘플링하여 새로운 데이터를 생성하려고 해도, 그 지점이 학습 데이터가 밀집된 영역에서 벗어나 있다면 의미 없는 결과가 나올 가능성이 높습니다.
- 주요 용도:
- 차원 축소 (Dimensionality Reduction)
- 특징 학습 (Feature Learning)
- 데이터 노이즈 제거 (Denoising Autoencoder)
- 데이터 압축
변이형 오토인코더 (VAE, Variational Autoencoder)
- 목표: AE와 유사하게 입력 데이터를 인코딩하고 디코딩하지만, 생성 모델로서의 역할을 강조합니다. 즉, 학습 데이터의 분포를 학습하여 그럴듯한 새로운 데이터를 생성하는 것을 목표로 합니다.
- 구조: AE와 유사하지만, 인코더의 출력이 다릅니다.
- 인코더 (Encoder): 입력 데이터를 받아 잠재 공간에서의 확률 분포의 파라미터(일반적으로 정규 분포의 평균(μ)과 분산(σ^2))를 출력합니다.
- 잠재 공간 (Latent Space): 인코더가 출력한 평균과 분산을 따르는 확률 분포(예: 정규 분포)에서 샘플링하여 잠재 벡터를 얻습니다. 이 샘플링 과정에 '재매개변수화 트릭(Reparameterization Trick)'이 사용되어 역전파가 가능해집니다.
- 디코더 (Decoder): 샘플링된 잠재 벡터를 받아 데이터를 복원(생성)합니다.
- 학습 방식: 두 가지 손실 함수를 함께 사용합니다:
- 복원 손실 (Reconstruction Loss): AE와 동일하게 입력 데이터와 복원된 데이터 간의 유사도를 측정합니다.
- KL 발산 (KL Divergence) 손실 / 정규화 항: 인코더가 학습한 잠재 공간의 확률 분포가 우리가 가정한 사전 분포(Prior Distribution, 보통 표준 정규 분포 N(0,1))와 유사해지도록 강제합니다. 이는 잠재 공간이 연속적이고 잘 구조화되도록 만듭니다.
- 잠재 공간의 특징:
- KL 발산 손실 덕분에 VAE의 잠재 공간은 연속적이고 부드러우며(smooth), 의미론적으로 의미 있는 구조를 가지게 됩니다. 즉, 잠재 공간에서 가까운 지점들은 유사한 데이터를 생성하고, 한 지점에서 다른 지점으로 이동할 때 데이터가 점진적으로 변합니다.
- 이러한 구조 덕분에 학습된 사전 분포에서 새로운 잠재 벡터를 샘플링하고 디코더에 통과시키면 새롭고 그럴듯한 데이터를 생성할 수 있습니다.
- 주요 용도:
- 데이터 생성 (이미지, 텍스트, 오디오 등)
- 잠재 변수 모델링
- 데이터 보간 (Interpolation)
AE와 VAE의 핵심 차이점 요약
특징 | 오토인코더 (AE) | 변이형 오토인코더 (VAE) |
주요 목표 | 데이터 압축, 특징 학습, 복원 | 데이터 생성, 잠재 공간의 확률 분포 학습 |
잠재 공간 | 결정론적 매핑 (하나의 잠재 벡터) | 확률론적 매핑 (분포의 파라미터 → 샘플링) |
잠재 공간 구조 | 제약 없음, 불연속적이거나 비구조적일 수 있음 | 연속적, 부드러움, 사전 분포(예: 정규 분포)를 따르도록 강제 |
생성 능력 | 제한적 (잠재 공간에서 샘플링하기 어려움) | 뛰어남 (잠재 공간에서 샘플링하여 새로운 데이터 생성 가능) |
손실 함수 | 복원 손실 | 복원 손실 + KL 발산 손실 (정규화) |
모델 유형 | 표현 학습 모델 | 생성 모델 |
VAE의 잠재 공간과 샘플링 과정
일반적인 오토인코더(AE)는 입력 데이터 x가 주어지면 인코더를 통해 하나의 고정된 잠재 벡터 z를 만듭니다.
z=Encoder(x)
하지만 VAE는 다릅니다. VAE의 인코더는 입력 데이터 x가 주어졌을 때, 잠재 공간에서 이 데이터가 어떤 확률 분포를 따르는지를 나타내는 파라미터들을 출력합니다. 가장 흔하게는 정규 분포(Gaussian Distribution)를 가정하며, 이 경우 인코더는 다음 두 가지를 출력합니다:
- 평균 (Mean, μ): 이 데이터 포인트가 잠재 공간에서 가질 가능성이 가장 높은 중심 위치.
- 분산 (Variance, σ^2) 또는 로그 분산 (Log Variance, logσ^2): 이 데이터 포인트가 잠재 공간에서 얼마나 퍼져 있을 수 있는지(불확실성)를 나타내는 값. (실제로는 학습 안정성을 위해 로그 분산을 출력하고, 이를 변환하여 표준편차 σ를 구하는 경우가 많습니다.)
즉, 인코더의 출력은 다음과 같습니다:
(μ,σ^2)=Encoder(x)
"샘플링"의 의미
이제 인코더가 출력한 평균(μ)과 분산(σ^2)을 가진 정규 분포 N(μ,σ^2)를 알고 있습니다. "샘플링"이란, 이 확률 분포로부터 실제로 하나의 값(여기서는 잠재 벡터 z)을 뽑아내는 과정을 의미합니다.
정규 분포는 종 모양의 그래프를 가지며, 평균(μ) 주변의 값들이 나올 확률이 높고, 평균에서 멀어질수록 나올 확률이 낮아집니다. VAE는 이 분포에서 "무작위로" (하지만 분포의 형태를 반영하여) 하나의 점, 즉 잠재 벡터 z를 선택합니다.
왜 그냥 평균(μ)을 사용하지 않고 샘플링을 할까요?
- 생성 능력: VAE의 목표 중 하나는 새로운 데이터를 생성하는 것입니다. 잠재 공간이 연속적이고 부드러운 분포를 가지도록 강제하면(KL 발산 손실을 통해), 이 분포의 여러 지점에서 샘플링하여 다양한 데이터를 생성할 수 있습니다. 만약 항상 평균값만 사용한다면, 잠재 공간의 다양성을 충분히 활용하지 못하게 됩니다.
- 불확실성 모델링: 분산(σ^2)을 통해 각 데이터 포인트의 잠재 표현에 대한 불확실성을 모델링할 수 있습니다.
- 정규화 효과: KL 발산 손실과 함께 샘플링 과정은 잠재 공간이 특정 사전 분포(보통 표준 정규 분포 N(0,1))를 따르도록 강제하여, 잠재 공간이 너무 특정 데이터에만 맞춰지거나 과적합되는 것을 방지하고, 더 일반화된 표현을 학습하도록 돕습니다.
재매개변수화 트릭 (Reparameterization Trick)
여기서 한 가지 중요한 기술적인 문제가 있습니다. "무작위 샘플링" 과정은 미분이 불가능하여 신경망의 학습 과정인 역전파(Backpropagation)를 방해합니다.
이를 해결하기 위해 "재매개변수화 트릭(Reparameterization Trick)"이라는 기법을 사용합니다.
z를 N(μ,σ^2)에서 직접 샘플링하는 대신, 다음과 같이 변환합니다:
z=μ+σ⋅ϵ
여기서:
- μ: 인코더가 출력한 평균
- σ: 인코더가 출력한 분산으로부터 계산된 표준편차
- ϵ: 표준 정규 분포 N(0,1)에서 샘플링된 고정된 무작위 노이즈 (평균이 0이고 분산이 1인 정규 분포에서 뽑은 임의의 값)
이렇게 하면:
- 무작위성은 ϵ에만 의존하게 됩니다. ϵ은 학습 과정과 무관한 외부에서 주어지는 값입니다.
- μ와 σ는 인코더의 출력(즉, 신경망의 파라미터에 의해 결정됨)이므로 미분이 가능합니다.
- 따라서 전체 잠재 벡터 z를 생성하는 과정이 미분 가능해져서, 역전파를 통해 인코더와 디코더를 학습시킬 수 있게 됩니다.
결론적으로, VAE는 다음과 같은 과정을 거칩니다:
- 입력 데이터 x가 인코더에 들어갑니다.
- 인코더는 잠재 공간에서의 확률 분포(예: 정규 분포)의 파라미터인 평균 μ와 분산 σ^2를 출력합니다.
- 이 평균 μ와 표준편차 σ (분산에서 계산)를 사용하여, 표준 정규 분포에서 샘플링한 노이즈 ϵ과 결합하여 최종 잠재 벡터 z=μ+σ⋅ϵ를 "샘플링" 합니다.
- 이 샘플링된 잠재 벡터 z가 디코더로 들어가 데이터를 복원하거나 새로운 데이터를 생성합니다.
이 "샘플링" 과정은 VAE가 잠재 공간의 확률적 특성을 학습하고 이를 바탕으로 다양한 데이터를 생성할 수 있게 하는 핵심적인 메커니즘입니다.
어떻게 1개의 입력으로 평균(μ)과 표준편차(σ)를 만들 수 있을까요?
이것은 신경망(인코더)의 구조와 학습 방식 덕분입니다.
VAE의 인코더는 일반적인 신경망과 유사한 구조를 가집니다. 예를 들어, 여러 개의 완전 연결 계층(fully connected layers)이나 컨볼루션 계층(convolutional layers)으로 구성될 수 있습니다.
핵심은 인코더의 마지막 출력 계층입니다.
- 입력 데이터 처리: 입력 데이터 x가 인코더의 여러 계층을 통과하면서 특징(feature)들이 추출되고 변환됩니다.
- 두 개의 출력 헤드(Output Heads): 인코더의 마지막 부분은 두 개의 별도 출력 경로(또는 "헤드")를 가지도록 설계됩니다.
- 첫 번째 헤드: 잠재 공간에서의 평균(μ) 벡터를 출력합니다. 이 벡터의 차원 수는 우리가 정의한 잠재 공간의 차원 수와 같습니다.
- 두 번째 헤드: 잠재 공간에서의 로그 분산(logσ^2) 벡터를 출력합니다. (분산 σ^2을 직접 출력하는 대신 로그 분산을 출력하는 이유는 학습 안정성과 음수가 아닌 값을 보장하기 위함입니다.) 이 벡터의 차원 수도 잠재 공간의 차원 수와 같습니다.
- 신경망의 학습:
- 인코더 신경망의 가중치(weights)와 편향(biases)은 학습 데이터를 통해 최적화됩니다.
- 학습 과정에서 손실 함수(복원 손실 + KL 발산 손실)를 최소화하는 방향으로 가중치가 업데이트됩니다.
- 이 과정에서 인코더는 입력 데이터 x를 보고 "이 데이터 x를 가장 잘 나타내는 잠재 공간에서의 정규 분포는 평균이 μ이고 분산이 σ^2인 분포이다" 라고 "판단"하도록 학습됩니다.
- 즉, 신경망은 입력 데이터의 패턴을 인식하여, 그 패턴에 해당하는 적절한 μ와 σ^2 값을 예측(predict) 또는 추정(estimate)하도록 훈련되는 것입니다.
간단한 비유:
만약 우리가 사람의 키와 몸무게를 입력받아, 그 사람의 "건강 점수"를 나타내는 평균과 표준편차를 예측하는 신경망을 만든다고 상상해 보세요.
- 입력: 키 (예: 175cm), 몸무게 (예: 70kg)
- 신경망 (인코더): 이 키와 몸무게 정보를 바탕으로 여러 계산을 수행합니다.
- 출력:
- 건강 점수 평균 (예: 85점)
- 건강 점수 표준편차 (예: 5점)
이처럼, VAE의 인코더도 복잡한 입력 데이터(이미지 픽셀 값들, 텍스트 임베딩 등)를 받아, 그 데이터를 잠재 공간에서 표현할 수 있는 정규 분포의 파라미터인 μ와 σ^2를 "계산해내는" 함수라고 생각할 수 있습니다. 이 "계산"은 신경망의 학습된 가중치를 통해 이루어집니다.
요약:
하나의 입력 데이터가 인코더 신경망을 통과하면, 인코더의 마지막 부분에 설계된 두 개의 별도 출력 경로가 각각 해당 입력 데이터에 대한 잠재 공간에서의 평균 벡터(μ)와 로그 분산 벡터(logσ^2)를 출력합니다. 이는 신경망이 입력 데이터의 특징을 바탕으로 해당 분포의 파라미터를 "추정"하도록 학습되기 때문에 가능합니다.
잠재 공간과 데이터의 표현
- 잠재 공간 (Latent Space):
- VAE는 원본 데이터를 더 낮은 차원의 공간인 잠재 공간으로 압축하여 표현하려고 합니다. 이 잠재 공간은 원본 데이터의 중요한 특징들을 함축하고 있어야 합니다.
- 예를 들어, 손글씨 숫자 이미지 데이터셋(MNIST)을 학습한다면, 잠재 공간의 각 점은 특정 숫자 이미지의 압축된 표현이 됩니다.
- 입력 데이터 x의 잠재 표현 z:
- 우리가 원하는 것은 각 입력 데이터 x (예: 특정 숫자 '7' 이미지)에 대해 잠재 공간에서 이 x를 잘 나타내는 점(잠재 벡터 z)을 찾는 것입니다.
VAE의 확률론적 접근
일반적인 오토인코더(AE)는 입력 x에 대해 하나의 고정된 잠재 벡터 z를 결정론적으로 계산합니다.
하지만 VAE는 여기서 더 나아가 확률론적인 관점을 도입합니다.
- "입력 x가 주어졌을 때, 이 x에 해당하는 최적의 잠재 벡터 z는 정확히 이 점이다!"라고 단정하는 대신,
- "입력 x가 주어졌을 때, 이 x에 해당하는 잠재 벡터 z는 아마도 이 평균(μ)을 중심으로 이 정도의 표준편차(σ)를 가지는 영역(확률 분포) 안에 있을 것이다!"라고 생각합니다.
즉, VAE의 인코더는 입력 데이터 x를 보고, 이 x에 대한 잠재 벡터 z가 어떤 확률 분포 p(z∣x)를 따르는지 추정합니다. 그리고 계산의 편의성과 일반성을 위해 이 확률 분포 p(z∣x)를 정규 분포(Gaussian Distribution)로 가정하는 경우가 많습니다.
따라서, 인코더가 출력하는 μ와 σ는 다음과 같습니다:
- μ (평균): 입력 x에 대응되는 잠재 벡터 z들이 가장 밀집되어 있을 것으로 예상되는 중심 위치 (잠재 공간에서의 좌표).
- σ (표준편차): 입력 x에 대응되는 잠재 벡터 z들이 그 중심(μ)으로부터 어느 정도 퍼져 있을 수 있는지(불확실성의 정도).
비유를 통한 이해
손글씨 숫자 '7' 이미지를 예로 들어보겠습니다.
- 입력 x: 누군가가 쓴 '7' 이미지.
- VAE 인코더의 역할: 이 '7' 이미지를 보고, "이 이미지를 잠재 공간에서 표현한다면, 아마도 '이상적인 7의 형태'를 나타내는 중심점(μ) 근처에 있을 것이고, 필체의 미세한 차이 때문에 이 정도의 흩어짐(σ)을 가질 것이다"라고 판단하여 μ와 σ를 출력합니다.
즉, μ와 σ는 "특정 입력 데이터 x에 대한 잠재 벡터 z의 분포"에 대한 파라미터입니다.
이 분포에서 z를 샘플링한다는 것은, "이상적인 7의 형태(μ)"를 중심으로 약간의 "개성(σ⋅ϵ)"을 더한 구체적인 잠재 벡터 하나를 뽑아내는 것과 같습니다. 그리고 이 z를 디코더에 넣으면 다시 '7' 이미지가 (원본과 약간 다를 수 있는, 하지만 여전히 '7'로 인식 가능한) 생성되는 것입니다.
이것이 VAE가 단순한 복원을 넘어 새로운 데이터를 생성할 수 있는 이유 중 하나입니다. 잠재 공간을 확률 분포로 모델링함으로써, 그 분포 내의 다양한 지점에서 샘플링하여 다양한 결과물을 만들어낼 수 있기 때문입니다.