AI/기술 트렌드

오토인코더부터 VQ-VAE까지

2026.01.14 16:00
55
0
1
  • 한눈에 보는 핵심요약
  • 표현 공간의 중요성을 이야기했습니다.

안녕하세요, 에디터 느리입니다:>

저는 요즘 여러 도메인의 논문들을 폭넓게 읽고 있는데요. 그러다 보면 토큰화 방식이나 멀티모달 처리, 제어 가능한 생성 기법과 같은 구현상의 논의를 넘어, 반드시 짚고 넘어가야 할 하나의 질문에 도달하게 됩니다.

모델은 이렇게 학습한 정보들을 내부에 어떤 형태로 담아두고 있을까요?

최근의 AI는 단순히 입력과 출력을 잘 맞추는 수준을 넘어, 내부에 담긴 정보를 어떻게 표현하고 구조화할 것인가라는 문제를 마주하고 있습니다. 이미지와 텍스트를 함께 다루거나 특정 속성만 조절해 결과를 생성하려 할 때, 모델은 ‘무엇이 중요한 정보인지’를 스스로 구분해 저장해야 합니다. 이 과정이 잘 설계되지 않으면, 모델은 분명 많은 것을 학습했음에도 불구하고 그 지식을 분리하거나, 조작하거나, 다른 맥락에서 재사용하기 어려워집니다. 그렇다면 표현은 어떤 형태를 가져야 할까요? 모든 정보를 하나의 연속적인 공간에 담는 방식이 적절할까요, 아니면 조금 더 명확한 단위로 나누어 표현하는 편이 나을까요?

오늘은 이러한 질문을 바탕으로 모델이 데이터를 내부적으로 요약하고 저장하는 공간, 즉 잠재 공간을 다루어본 방법들을 살펴보고자 합니다. 이 공간은 흔히 표현 공간이라고도 불리며 모델이 무엇을 기억하고 어떻게 활용하는지를 결정하는 핵심 요소입니다

오토인코더와 VAE

잠재 공간을 어떻게 만들고 활용할 것인가에 대한 가장 초기의 해답이 바로 오토인코더 계열 모델이었습니다. 이 질문에 대한 기본적인 접근을 이해하기 위해, 먼저 오토인코더와 VAE를 살펴보겠습니다. **오토인코더(Autoencoder)**와 **VAE(Variational Autoencoder)**는 모두 입력 데이터를 저차원 잠재 공간으로 압축한 후 다시 복원하는 구조를 가집니다. 하지만 그 속을 들여다보면 원리와 목적에서 큰 차이가 있죠.

먼저 오토인코더를 보겠습니다. 이름 그대로 데이터를 자동으로 인코딩해주는 모델로 가장 기본적인 표현 학습 모델 중 하나입니다. 입력 데이터를 자기 자신으로 복원하도록 학습되며 그 과정에서 데이터의 핵심 정보만을 담은 압축된 표현을 만들어냅니다. 인코더와 디코더 사이에 위치한 병목(Bottleneck) 구간은 정보의 흐름을 의도적으로 제한하는 역할을 합니다. 이 좁은 통로를 거치면서 불필요한 세부 사항은 걸러지고, 원본을 재구성하는 데 필요한 핵심적인 특징만이 잠재 표현으로 남게 되죠.

 

 

오토인코더의 기본 원리 출처: Autoencoders(Bank et al., 2017)


오토인코더는 크게 두 부분으로 구성되는데, 앞부분은 인코더(Encoder)라고 불리며 입력 데이터를 잠재 벡터로 변환합니다. 뒷부분은 디코더(Decoder)로서 이 잠재 벡터로부터 다시 원본과 같은 형태의 데이터를 복원해내죠. 요컨대 6이라고 적혀진 사진(Original Input)이 디코더로부터 나온 사진(Reconstructed Input)과 같아지도록 학습하는 것입니다. 잠재 공간 안에 있는 정보만 가지고도 원본을 재구성할 수 있다면, 잠재 공간이 원본 데이터의 핵심 요소를 담고 있음을 의미하겠죠.

본래 오토인코더는 압축과 복원이 목적이었지만 연구자들은 여기서 디코더의 구조에 주목했습니다. 디코더는 본질적으로 압축된 정보(벡터)를 받아서 원본 데이터를 만들어내는 장치입니다. 때문에 “그럼 잠재 공간의 좌표를 우리가 임의로 조작해서 디코더에 넣어주면, 새로운 이미지가 나오지 않을까?”라는 생각으로 확장된 것이죠. 당시에는 GAN 같은 강력한 생성 모델이 나오기 전이거나 초기 단계였기 때문에 학습된 오토인코더의 잠재 공간을 이용해 새로운 데이터를 만들 수 있다면 매우 효율적일 것이라 기대했습니다.

하지만 오토인코더에는 치명적인 한계가 있는데요. 바로 잠재 공간을 구성할 때 데이터의 의미나 구조를 부여하지 않는다는 점입니다. 오토인코더의 목표는 오직 입력된 데이터를 그대로 복원하는 것이기 때문에, 학습 과정에서 각 데이터를 잠재 공간의 아무 좌표에 불규칙하게 흩뿌려 놓고 단순히 그 좌표를 암기하는 식(Overfitting)으로 학습할 수 있습니다. 그러나 새로운 데이터를 만든다는 것은, 기존에 학습한 데이터 포인트들 사이의 중간 지점을 선택해 디코딩한다는 뜻입니다. 만약 잠재 공간이 의미적으로 매끄럽게 연결되어 있지 않고 불규칙하게 흩어져 있다면, 데이터 사이의 빈 공간을 선택했을 때 노이즈처럼 전혀 의미 없는 결과물이 나올 수 있습니다.

이러한 문제를 해결한 것이 바로 변분 오토인코더, VAE(Variational Autoencoder)입니다. VAE는 오토인코더의 재구성 능력은 유지하되, 잠재 공간에 통계적 구조를 부여 표현 공간을 얻도록 설계되었습니다.

 

 

오토인코더(좌)와 VAE(우) ⓒ deep daiv.

 

위 그림은 두 모델이 데이터를 처리하는 결정적인 구조적 차이를 보여줍니다. 오토인코더의 경우, 인코더가 입력 데이터를 처리해 파란색의 Latent Vector 하나를 바로 만들어냅니다. 데이터를 잠재 공간의 고정된 좌표(점) 하나로 찍어버리는 것이죠. 이 방식은 구조가 단순하지만, 점과 점 사이의 빈 공간을 고려하지 못한다는 한계가 있습니다. 반면 VAE는 과정이 다릅니다. 인코더가 잠재 벡터를 바로 내놓지 않고, 먼저 초록색 Mean Vector(평균)와 분홍색 Standard Deviation Vector(표준편차)를 각각 계산해 데이터가 위치할 확률 분포(범위)를 만듭니다. 이 분포 안에서 무작위로 값을 샘플링해 최종적인 Sampled Latent Vector를 만드는 것이죠. 덕분에 VAE는 데이터를 점이 아닌 구름 같은 분포로 저장하게 됩니다. 이 과정이 반복되면 잠재 공간의 빈틈이 자연스럽게 채워져, 우리는 잠재 공간의 값을 조정함으로써 새로운 데이터를 생성하거나 사진을 변형할 수 있습니다.

하지만 VAE에는 여전히 극복해야 할 몇 가지 과제가 있었는데요. 그 중 하나가 사후 붕괴(Posterior Collapse) 문제입니다. VAE는 학습 과정에서 잠재 공간을 깔끔한 정규분포(노이즈) 형태로 만들어야 한다는 강한 제약(Penalty)을 받습니다. 만약 디코더의 성능이 너무 뛰어나면, 모델은 굳이 페널티를 감수하며 인코더가 준 정보를 힘들게 해석하려 하지 않습니다. 오히려 “입력 정보를 아예 무시해서 페널티를 0으로 만들고, 이미지는 내 능력으로 대충 그리자”는 식으로 꼼수를 부리게 되죠. 결국 인코더가 전달하려던 데이터의 핵심 특징들이 무시되는 현상이 발생합니다. 또 다른 문제는 생성된 이미지가 다소 흐릿(Blurry)하다는 점입니다. VAE는 정답과 예측값의 차이를 계산할 때 틀릴 위험을 최소화하기 위해 가장 안전한 평균값을 선택하는 성향이 있습니다. 예를 들어, 선명한 검은색이나 흰색을 칠했다가 틀리는 것보다, 적당한 회색을 칠하는 것이 수학적으로 오차가 적겠죠. 이로 인해 디테일한 부분이 뭉개지고 전반적으로 뿌연 결과물이 나오게 됩니다.

이런 문제들을 근본적으로 해결하기 위해 등장한 모델이 바로 VQ-VAE입니다.

VQ-VAE: 연속에서 이산으로

VQ-VAE의 가장 큰 특징은 잠재 공간을 이산적(Discrete)으로 다룬다는 점입니다. VAE에서 잠재 벡터 z가 실수 좌표를 가지는 연속 공간 위를 자유롭게 움직였다면, VQ-VAE의 잠재 공간은 미리 정해진 유한한 개수의 대표 좌표들로 구성됩니다. 이 공간은 격자판처럼 동작하며, 각 좌표는 데이터의 특정 특징을 대표하는 하나의 기준점에 가깝습니다.

 

 

VQ-VAE의 구조 출처: Neural discrete representation learning(Oord et al., 2017)

 

VAE가 무지개처럼 모든 색이 연속적으로 이어진 스펙트럼이라면, VQ-VAE는 팔레트 위에 나눠서 올려진 물감 색상들에 가깝습니다. 중요한 건 VQ-VAE의 인코더가 곧바로 이 물감 하나를 고르는 것이 아니라는 점입니다. 인코더는 먼저 입력 이미지를 바탕으로 연속적인 잠재 벡터 z_e(x)를 만들어냅니다. 이후 이 벡터와 가장 비슷한 물감을 팔레트에서 찾아내 가장 가까운 하나로 대체하죠. 이처럼 **연속적인 표현을 가장 가까운 이산적 코드로 바꾸는 과정을 벡터 양자화(Vector Quantization)**라고 부릅니다. 이때 사용되는 것이 그림에서 가장 위에 있는 보라색 상자, 코드북입니다. 코드북에는 학습을 통해 얻어진 여러 개의 대표 벡터 e_k들이 저장되어 있고, 모델은 z_e(x)와의 거리가 가장 가까운 벡터 하나를 선택합니다. 쉽게 말해, “이 부분은 초록색과 가장 비슷하니, 딱 초록색으로 저장하자”고 결정하는 셈입니다.

이렇게 선택된 코드들은 실제 벡터 값 자체가 아니라 코드의 인덱스로 저장되며, 전체 이미지는 이러한 인덱스들의 배열, 즉 토큰 맵(token map) 형태로 표현됩니다. 디코더는 이 토큰 맵을 입력으로 받아, 각 토큰에 대응되는 특징을 조합해 다시 이미지를 복원합니다.

이 토큰 맵은 디코더가 보는 확실한 설명서 역할을 하는데요. 바로 이 지점에서 VAE의 문제가 해걸됩니다. 먼저 사후 붕괴가 방지됩니다. VQ-VAE는 잠재 변수를 억지로 정규분포로 만들 필요가 없습니다. 대신 학습을 통해 데이터의 특징을 가장 잘 표현하는 코드들로 코드북을 채우죠. 디코더 입장에서도 의미 없는 노이즈가 아니라 이미지를 구성하는 핵심 정보가 담긴 토큰들이 들어오기 때문에 이를 무시하지 않고 적극적으로 활용하게 됩니다. 또한 이를 통해 흐릿함 문제를 해결할 수 있는데요. VAE는 연속적인 공간에서 애매할 경우 안전한 평균값을 선택해 이미지를 뭉개버렸지만, VQ-VAE는 코드북에서 가장 적합한 것 하나를 강제로 선택해야 합니다. 중간은 없기에 디코더는 뭉개진 값이 아닌 선명한 특징을 받아 복원할 수 있죠.

 

 

128*128*3 사이즈 ImageNet의 원본 그림(좌), 32*32*1 사이즈 VQ-VAE가 재구성한그림(우) 출처: Neural discrete representation learning(Oord et al., 2017)

 

결과적으로 VQ-VAE는 VAE보다 훨씬 선명한 고해상도 이미지를 만들어냈습니다. 실제로 128*128 크기의 이미지를 32*32 크기의 토큰 맵으로 압축했음에도, 원본과 거의 구분이 안 될 정도로 정교한 복원 능력을 보여주었죠.

 

 

PixelCNN 사전 모델을 활용하여 VQ-VAE가 생성한 이미지 출처: Neural discrete representation learning(Oord et al., 2017)

 

더 나아가 새로운 이미지를 생성하는 능력도 보여주었습니다. VQ-VAE는 이미지를 불연속적인 토큰들로 압축하는데, 새로운 이미지를 만들려면 이 토큰들을 어떻게 배치해야 자연스러운지 알려주는 설계도가 필요합니다. 여기서 연구진은 PixelCNN이라는 별도의 모델을 도입해 이를 사전 모델(Prior Model)로 활용했습니다. 즉, VQ-VAE가 '이미지를 토큰으로 번역'하면, PixelCNN이 '토큰들의 문법을 배워 새로운 그림을 그리는' 방식인 셈이죠. 이 두 단계의 협업을 통해 VQ-VAE는 흐릿함 없이 선명하고 구조가 잘 잡힌 고해상도 이미지를 만들어냈습니다.

음성 분야에서의 성과는 더욱 흥미롭습니다. 연구진은 정답(텍스트)을 주지 않고 오로지 사람들의 목소리 녹음본만을 들려주었는데, VQ-VAE는 놀랍게도 스스로 언어의 기본 단위인 ‘음소(Phoneme)’를 구분해냈습니다. 잠재 공간이 '목소리 톤(화자 정보)'은 버리고, '말의 내용(언어 정보)'만을 뽑아낸 것입니다. 이를 활용하면 **화자 변환(Speaker Conversion)**도 가능해집니다. A라는 사람의 말 내용을 잠재 코드로 뽑아낸 뒤, B라는 사람의 목소리를 입히는 디코더에 넣으면, 내용은 그대로인데 목소리만 B로 바뀌는 마법 같은 일이 일어나는 것이죠. 이는 VQ-VAE가 데이터의 의미론적 특징을 얼마나 잘 이해하는지 보여주는 결정적인 증거입니다.

모델이 세상을 구조화하는 방법

VQ-VAE는 이제 최신 모델이라고 부르기에는 시간이 꽤 흘렀습니다. 하지만 이 모델이 남긴 가장 중요한 영향은 성능 지표가 아니라, 표현을 바라보는 관점의 변화였습니다. 전통적인 표현 학습에서는 연속적인 잠재 벡터가 이산적인 표현보다 더 풍부하고 표현력이 높다고 여겨져 왔습니다. 실제로 대부분의 오토인코더 계열 모델은 입력을 실수값 공간으로 압축함으로써, 데이터의 미세한 변화를 손실 없이 담아내는 것을 목표로 합니다. 이러한 흐름 속에서 VQ-VAE는 데이터를 연속적인 벡터로 요약하는 대신, 선택되고 조합될 수 있는 이산적 단위로 다루는 방식을 택했습니다. 이 선택은 단순히 생성 품질을 개선하기 위한 기법이라기보다, 모델 내부에 의미 있는 최소 단위를 명시적으로 만들려는 시도로 볼 수 있습니다. 그리고 이 발상은 이후 이미지 토큰화, 멀티모달 표현 정렬, 콘텐츠와 스타일의 분리 등 다양한 방향으로 확장되었죠.

물론 VQ-VAE에도 한계는 존재합니다. 대표적으로 코드북의 일부 벡터가 학습 과정에서 거의 선택되지 않는 죽은 코드(dead code) 문제가 있고, 순차적 prior 모델(PixelCNN 등)에 의존할 경우 샘플링 속도가 느리다는 단점도 있습니다. 또한 벡터 양자화 특성상 코드북을 안정적으로 최적화하는 것 자체가 쉽지 않은 문제였습니다.

하지만 이러한 한계들은 지난 몇 년간 꾸준히 개선되어 왔습니다. 코드북 활용률 문제는 clustering 기반 VQ-VAE나 코드 재초기화 전략을 통해 완화되었고, 최근에는 대규모 코드북에서도 거의 100% 활용률을 달성하는 기법들이 제안되고 있습니다. 생성 속도 문제 역시 VQ-Diffusion처럼 이산 잠재 공간과 확산 모델을 결합하는 방식으로 빠르게 극복되고 있으며, VQ-GAN 계열은 적대적 학습을 통해 품질과 효율을 동시에 끌어올렸습니다.

오늘날의 모델들은 더 복잡해졌고, 구조도 훨씬 정교해졌습니다. 그럼에도 불구하고 여전히 같은 질문이 남아 있습니다. 모델은 세상을 어떤 방식으로 구조화하여 이해하고 있을까요? 이 글이 특정 방법론을 넘어서, AI가 의미를 구성하는 방식에 대해 생각해 볼 수 있는 출발점이 되기를 바랍니다.

 

#AI
이 콘텐츠가 도움이 되셨나요?
이 글에 대한 의견을 남겨주세요!
서로의 생각을 공유할수록 인사이트가 커집니다.

    추천 콘텐츠