인공지능

Vision 생성 모델 - VAE, GAN

원담 2025. 5. 28. 15:16
728x90

Autoencoder

Autoencoder입력 데이터를 압축하고 다시 복원하는 신경망 구조입니다. 주로 차원 축소, 노이즈 제거, 데이터 표현 학습 등에 사용됩니다.

입력 x → [Encoder] → 잠재 표현 z → [Decoder] → 복원된 x
구성요소
역할
Encoder 입력 데이터를 압축(인코딩)
Latent vector z 압축된 데이터의 핵심 정보
Decoder z를 다시 원래 입력처럼 복원(디코딩)

VAE (Variational Autoencoder)

VAE는 이미지를 생성할 수 있는 모델Autoencoder 구조를 기반으로 확률 분포 추론(Bayesian Inference)을 응용한 방식입니다.

Generative Models 개요

Maximum Likelihood는 데이터가 주어졌을 때 가장 잘 설명할 수 있는 모델의 파라미터 θ를 찾는 방법이다.

Maximum Likelihood Estimation
├── Explicit Density (분포를 명시적으로 정의)
│   ├── Tractable Density (정확히 계산 가능)
│   └── Approximate Density (계산 어렵지만 근사 가능) ← VAE
│        └── Variational (근사 분포 q 사용)
└── Implicit Density (분포를 직접 정의하지 않음) ← GAN

  • 데이터를 가장 잘 설명하는 확률 분포의 파라미터 θ를 찾는 것 (MLE 기반)
  • Explicit density: 확률 분포를 직접 정의
    • 예: VAE, PixelRNN
  • Implicit density: 확률 분포를 직접 정의하지 않고 샘플링 기반으로 학습
    • 예: GAN

Generatige Models

VAE 등장

  • Auto-Encoding Variational Bayes
  • VAE는 근사적으로 푸는 방법으로 고안됨
  • Explicit density > Approximate density > Variational에 속한다
  • Posterior를 직접 구하기 어려우므로 → Variational Inference를 사용
  • 즉, 확률을 추정해야 하니까 근사 분포 q(z|x)로 대체

Autoencoder와의 비교

  • Autoencoder 구조: Encoder (E)로 압축 → Decoder (D)로 복원
  • VAE는 이 구조를 활용하지만 잠재 공간 z를 확률분포로 처리한다는 점이 다름
항목  일반 Autoencoder  VAE (Variational Autoencoder)
구조 Encoder → z → Decoder Encoder → 확률분포 z → 샘플링 → Decoder
z 공간 고정된 벡터 값 (예: [1.2, -0.8]) 확률로 표현된 공간 (예: 평균과 표준편차로 나타낸 정규분포)
목적 단순히 압축 & 복원 확률적으로 "다양한" 생성도 가능하게 학습

"VAE는 일반 Autoencoder처럼 Encoder/Decoder 구조를 갖지만, z라는 잠재 공간(latent space)을 하나의 값이 아닌 ‘확률분포(정규분포)’로 표현하기 때문에, 더 유연하고 생성에 강력한 모델이 된다."

일반 Autoencoder -> 마치 사진을 JPEG로 압축했다가 다시 펴는 느낌

  • 이미지를 압축 → 딱 하나의 고정된 숫자 벡터로 저장
  • 다시 그 벡터를 디코더에 넣어서 이미지 복원

VAE -> "강아지 사진"> "대부분 갈색, 약간 귀가 큰 편" 같은 확률적 특징으로 저장 -> 샘플링하면 비슷하지만 다른 강아지들 생성

  • 이미지를 압축 → "이 이미지는 평균이 이렇고, 퍼짐도 이래요" 라는 확률분포로 저장
  • 이 분포에서 샘플링해서 다양한 z를 얻고 → 복원 가능

auto encoder vs VAE

왜 VAE가 필요한가?

예를 들어, 강아지 사진 수천 장을 보고 나서 "비슷한 스타일의 강아지 사진"을 만들어내는 모델을 원한다

  • 기존의 Autoencoder는 이미지 압축/복원에 뛰어나지만, 새로운 이미지를 생성하기엔 적합하지 않다.
  • 왜냐하면 잠재공간(latent space)이 연속적이지 않아서 조작하기 어렵기 때문이다.

그래서 나온 게 VAE (Variational Autoencoder)

핵심 차이점은 VAE는 이미지를 인코딩할 때, 한 개의 값이 아니라 평균(μ)과 표준편차(σ)를 통해 정규분포(가우시안)에서 무작위로 샘플링된 값을 사용한다는 점. 즉, 고정된 벡터가 아닌 확률적인 벡터로부터 생성하고 이렇게 하면 latent 공간이 부드럽게 연결되어 있어서, 비슷한 z는 비슷한 이미지를 만들고 그래서 latent vector를 조작해서 다양한 이미지를 생성할 수 있게 되는 것이다.

Bayesian 관점으로 이해하는 VAE (왜 Variational?)

Bayesian Inference란? 단순히 정답을 맞히는 게 아니라, "이게 정답일 확률이 얼마일까?"를 함께 고려한다.

  • 즉, 사전지식(Prior) + 현재 데이터(Likelihood)사후확률(Posterior)

문제는 Posterior를 수식으로 직접 구하는 게 너무 어려워서(적분 못함) 대안으로 나온 것이 Variational Inference (근사기법)이다.Posterior 분포를 직접 계산하지 않고, 대신 q(z|x)라는 쉽게 계산되는 근사 분포를 사용하자!
→ 그래서 이름이 Variational Autoencoder 이다.

VAE 구조 요약: 어떻게 학습하나요?

  1. 이미지 x를 Encoder에 넣어 → 평균 μ와 표준편차 σ를 구함
  2. 이걸로 z를 샘플링 (정규분포에서)
  3. z를 Decoder에 넣어서 → 복원된 이미지 x' 생성
  4. 학습 목표:
    • 원래 이미지와 복원 이미지가 비슷하도록 (재구성 손실)
    • z가 정규분포에서 잘 뽑히도록 (KL Divergence 손실)

학습 핵심: ELBO (Evidence Lower Bound) = 재구성 손실 + KL Divergence
→ 우리가 만든 근사분포(q)가 진짜분포(p)에 최대한 비슷해지도록 조정한다.

VAE 활용

  • z 공간(latent space)을 조작해서 숫자를 생성할 수 있다.
  • z를 바꾸면 모양이 조금씩 변한 숫자가 나옴 (2D, 5D, 10D 등 차원이 높아질수록 다양성↑)
  • 응용 분야:
    • 이미지 생성 (숫자, 얼굴 등)
    • 데이터 압축
    • 새로운 데이터 생성

단점: 이미지가 뿌옇고 품질이 낮을 수 있음 → 그래서 이후 GAN, VQ-VAE, Diffusion 같은 모델들이 등장함

요약정리

항목 설명
Autoencoder 압축-복원만 가능, 생성 능력 부족
VAE Autoencoder + 확률 모델링 → 이미지 생성 가능
Variational 의미 정확한 posterior 계산 대신, 근사 분포로 추정
핵심 학습 Reconstruction + KL Divergence 최소화 (ELBO 최적화)
장점 latent 공간을 조작해서 다양한 이미지 생성 가능
단점 생성 이미지 품질이 GAN보다 낮음

주요 논문

모델 
한 줄 요약
VAE 확률적으로 z를 뽑아서 이미지를 생성
β-VAE z의 의미를 깔끔하게 분리(disentangle)
VQ-VAE z를 딱 정해진 코드 중 하나로 제한해서 안정화
VQ-VAE 2 여러 단계로 나눠서 정밀한 이미지 생성

GAN이란?

Generative Adversarial Networks는 이미지나 텍스트처럼 새로운 데이터를 생성하는 인공지능 모델입니다. 핵심은 두 개의 AI가 서로 ‘대결’(Adversarial) 하듯 경쟁하면서 점점 더 정교해지는 구조이다.

구성 
요소설명
Generator (G) 랜덤한 z (노이즈 벡터)를 받아 그럴듯한 이미지(가짜)를 생성
Discriminator (D) 이미지가 진짜인지 가짜인지 구별하는 모델
→ 즉, G는 속이려고 하고, D는 잡아내려고 하며 서로 경쟁합니다.

학습 과정

  • Step 1: D는 진짜 이미지(x)는 1에 가깝게, 가짜 이미지(G(z))는 0에 가깝게 판단하려고 학습합니다.
  • Step 2: G는 D가 G(z)도 1이라고 판단하게 만들도록 학습합니다. (속이기!)

이 수식은 G와 D가 번갈아 최적화되며 서로 경쟁한다

목적  등장한 모델
이미지나 데이터 생성 VAE (Variational AutoEncoder)
더 선명하고 사실적인 생성 GAN (Generative Adversarial Network)
항목
 VAE  VQ-VAE
z의 형태 연속적인 잠재 벡터 (ex. z ~ N(μ, σ²)) 고정된 codebook 중 하나 (이산적)
z 선택 방식 확률 분포(베이지안)에서 샘플링 가장 가까운 벡터 하나를 거리 기반으로 선택
확률 사용 Yes (Variational Inference, ELBO, KL divergence 등) No (확률 모델링 없음)
대표적 기법 재구성 손실 + KL divergence 재구성 손실 + codebook loss + commitment loss

GAN 기술 발전 1차 (2015~2019)

2015~2019년은 GAN의 기본 개념부터 고해상도 이미지 생성, 안정성 향상까지 기술적으로 큰 발전이 있었던 시기입니다.

ProGAN (2018)

Progressive Growing of GANs for Improved Quality, Stability, and Variation

  • 처음부터 고해상도 이미지를 학습시키면 불안정 → 해결책은?
  • 저해상도 → 고해상도로 점점 이미지 해상도를 키워가며 학습
  • Generator(G): 4x4 → 8x8 → … → 1024x1024로 점진적 업스케일링
  • Discriminator(D): 같은 방식으로 점진적으로 고해상도 판별
  • 학습 안정성 향상
  • 고품질 얼굴 이미지 생성 가능

SAGAN (2019)

Self-Attention GAN

  • 기존 CNN 기반 GAN은 국소적인 영역만 보게 됨
  • SAGAN은 Self-Attention 도입 → 이미지 전역의 정보를 보며 생성
  • Attention map을 통해, 멀리 떨어진 픽셀 간 관계도 반영
  • Generator와 Discriminator에 Self-Attention Layer 삽입
  • 객체 간의 일관된 관계 유지
  • 더 정교하고 일관성 있는 이미지 생성 가능

BigGAN (2019)

Large Scale GAN for High Fidelity Image Synthesis

  • SAGAN을 더 큰 데이터셋, 더 큰 모델 크기로 확장한 버전
  • Truncation trick 사용: 품질 ↔ 다양성 trade-off 제어
  • 대용량 데이터셋에서 강력한 성능 발휘
  • 정밀하고 세밀한 이미지 생성
  • truncation 값을 조절하면서 생성 이미지 품질이 달라지는 모습 제시
    • 그래서 z를 평균 근처의 값만 뽑게 제한함
    • 그 결과 이미지는 덜 다양하지만 훨씬 선명하고 현실적

정리 비교

모델 핵심 기술 주요 장점
ProGAN 점진적 해상도 증가 학습 안정성, 고해상도
SAGAN Self-Attention 장거리 관계 반영
BigGAN 대형 모델 + 트릭 고품질, 다양성 제어

GAN 기술 발전 2차 (StyleGAN)

전통적인 GAN은 z라는 잠재벡터를 곧바로 이미지 생성 네트워크에 넣었지만, StyleGAN은 이를 중간에서 스타일(style) 벡터로 변환하여 다양한 레벨의 조정이 가능하게 함.

  • Mapping Network: z → style(w) 공간으로 변환
  • AdaIN: 스타일(w)을 각 층마다 주입해서 이미지의 coarse/mid/fine feature 조절
  • Style Mixing: 얼굴의 일부 스타일만 섞어주는 기능 (눈은 A, 입은 B처럼)
  • Noise 입력: 세부 디테일을 랜덤 하게 추가 (예: 머리카락의 결 등)
  • 스타일 조정이 자유롭고, 세밀한 이미지 조작 가능

StyleGAN 2 (2020)

  • StyleGAN1에서는 물방울 같은 artifact가 종종 생김
  • 그래서 AdaIN 개선 + Path Length Regularization 추가

구조 개선

  • 기존 AdaIN 대신 weight demodulation (가중치 변환) 방식 도입
  • Progressive Growing 대신 Residual 구조 실험: MSG-GAN, Skip Connection 등

StyleGAN은 기존 GAN에 비해, '스타일 조절'이 가능한 고화질 이미지 생성기로 진화한 형태입니다. 특히 얼굴처럼 다양한 세부 특징을 가진 이미지를 만들거나 조작할 때 매우 강력합니다.

GAN 기술 발전 3차(VQ-GAN, ViT-VQGAN 중심)

VQ-GAN (2021) – 이미지 생성 고도화

Transformer는 이미지 생성에 좋지만 연산량이 너무 큼 → 그래서 VQ-VAE + GAN + Transformer 조합으로 해결

  • 기존에 이미지를 Transformer로 생성하려 했는데 → 너무 느리고 무겁고 연산량이 많다.
  • VAE는 이미지가 흐릿하게 나오고, GAN은 선명하긴 한데 불안정하게 학습되는 문제가 있었다.

해결

  • VAE처럼 이미지를 압축해서 정보를 줄이고 GAN처럼 선명한 이미지를 생성하는 구조를 합친 게 바로 VQ-GAN이다
  • VQ (Vector Quantization): 이미지를 코드북(codebook)에 있는 대표 벡터들로 요약하는 것
  • 이 압축된 정보만 Transformer에게 주니까 훨씬 빨라지고 효율적이다.

"Transformer는 무거우니까, 이미지를 미리 '짧은 요약 정보'로 압축해서 빠르고 선명하게 이미지 생성하자!"

Transformer + Sliding Window

Transformer는 한 번에 전체 이미지를 다 보면서 계산하려고 하는데 이미지가 크면 클수록 계산이 엄청 느려지고, 메모리도 많이 쓰는 문제가 있었다. 그래서 Transformer가 이미지 전체를 한꺼번에 보지 않고, 마치 "작은 창(window)"을 옮겨가며 주변만 살펴보면서 이미지를 만들어 가도록 하였다.

  • Transformer가 codebook 벡터 시퀀스를 보고 이미지 구조를 예측함
  • Sliding window 방식: Transformer가 한 번에 전체 이미지 안 보고, 창처럼 슬라이딩하면서 주위 패치들만 봄 → 고해상도 생성 가능
  • 조건 생성 가능 (Conditional generation): 예를 들어, "야경"이라고 조건 넣으면 야경 이미지가 생성됨 
    • 조건을 숫자로 바꿔서, Transformer의 입력에 붙여줍니다
    • "야경" → [야경]이라는 토큰을 코드북 벡터 앞에 추가 "고양이" → [고양이] 토큰을 함께 입력
    • 그러면 Transformer는 입력을 받아 "야경"을 고려한 이미지 구조를 생성합니다.
    • 예: "야경"에 해당하는 벡터 + 이미지 코드북 벡터들을 함께 넣기
    • 이걸 통해 모델은 "무엇을 그릴지" 방향을 잡게 됩니다

ViT-VQGAN (2022) – Transformer를 이미지 이해에까지 확장

VQ-GAN은 이미지 생성에 좋긴 하지만, 이미지를 이해하거나 분류는 잘 못한다. 생성뿐 아니라, AI가 이미지를 이해하는 일도 같이 하게 하고 싶다는 니즈가 있었다.

ViT (Vision Transformer)를 결합해서, Transformer가 이미지 생성도 하고, 이미지 안에 무엇이 있는지도 파악할 수 있도록 만든 게 ViT-VQGAN이다. 그림을 보고 ‘이건 강아지야’처럼 이해하고, 생성까지 같이 할 수 있다.

"이젠 Transformer가 이미지를 만들기만 하는 게 아니라, 이해도 할 수 있게 해 보자!

  • ViT-VQGAN = VQ-GAN + Vision Transformer (ViT)
  • 두 가지 역할:
    1. Image Generation – Transformer가 Codebook 시퀀스를 생성해서 디코더가 이미지를 복원
    2. Image Understanding – Codebook 시퀀스 기반으로 분류도 가능 (예: 강아지? 고양이?)

예시

  • 고해상도 생성: 자연 이미지, 위성사진, 실내 인테리어까지 다양한 스타일을 정교하게 복원
  • 조건부 생성: 스케치 → 현실 이미지, 여름 → 겨울 등 다양한 변환 가능

Image Translation

  • 한 스타일에서 다른 스타일로 바꾸는 기술
    • 예: 그림 ↔ 사진, 말 ↔ 얼룩말
    • 계절 변화: 여름 → 겨울, 가을 → 봄
  • 이처럼 GAN은 단순히 이미지를 복사하는 게 아니라 변형할 수도 있음
모델핵심  아이디어 특징
VQ-GAN CNN + VQ + GAN 효율적 압축 + 고해상도 생성
Transformer Autoregressive 패치 간 관계 예측
ViT-VQGAN VQ-GAN + ViT 이미지 생성 & 분류

GAN 기술 발전(Latetn Editing)

Latent Editing이란?

  • GAN에서 z (latent vector)는 이미지의 설계도 같은 역할을 한다
  • 이 벡터를 조금만 바꾸면 얼굴의 나이, 표정, 머리색 등을 자연스럽게 바꿀 수 있다
  • 즉, 이미지를 수정하거나 조작할 수 있는 방법이에요. (= 이미지 편집, 속성 변화)

어떻게 바꾸는가? (Latent Space 탐색 방식)

  • Unsupervised
    • z 벡터를 대충 이 방향으로 바꿔보면 어떤 변화가 나올까? 하고 해 보는 방식.
    • 직접 원하는 속성을 지정하지 않아도, 여러 방향으로 바꿔보다가 결과로 확인
    • 예시
      • GANSpace: PCA로 잘 바뀌는 방향 찾기
        • 이미지를 바꾸기 쉬운 방향을 수학적으로 찾음. 예: z 벡터를 1번 축으로 돌리면 "웃는 얼굴"로 바뀐다!
      • SeFa: 행렬 분해로 이미지 변화 잘 일으키는 축 찾기
        • 이미지에 큰 영향을 주는 방향을 수학적으로 분해해서 찾음. 바꾸면 얼굴 나이, 표정 등 크게 바뀜
      • Low-Rank: 특정 위치의 변화를 국소적으로 제어
        • 얼굴 전체 말고 "눈", "입"처럼 부분만 바꿀 수 있게 z 벡터를 쪼개서 조절
  • Supervised
    • 예: "안경을 추가하고 싶어" → 그런 속성을 학습 데이터에서 직접 지정해서 바꾸는 방식.
    • 어떤 방향(z의 특정 벡터 방향)이 안경 추가인지 학습을 통해 알아냄.
    • 예시
      • InterFaceGAN: 예를 들어 "남성 vs 여성" 구 분기로 그 차이를 벡터화
        • 예: 남/여 얼굴 그 분기(분류기)를 학습시켜서 → 그 경계 방향이 "성별 벡터"구나!라고 찾아냄
      • StyleFlow: 흐름 기반으로 부드럽게 속성 변화
        • 속성을 바꿀 때 ‘툭’ 바뀌는 게 아니라 자연스럽고 부드럽게 이어지는 방향을 찾아냄
      • StyleSpace: 속성별로 채널을 나눠서 독립적으로 조작 (ex. 눈만 키우기 등)
        • 얼굴 전체를 바꾸지 않고, 눈, 입, 코 등 특정 부위만 독립적으로 바꾸는 기술 → "눈만 키우기", "입만 작게" 가능
키워드 설명
Latent space 이미지 정보를 압축한 "벡터 공간"
Latent Editing 벡터를 조작해 이미지 속성 바꾸기
Unsupervised 속성 없이 방향만 조작
Supervised 속성(나이, 성별 등) 지정해서 조작
SeFa / GANSpace / StyleSpace 편집 방식 이름
InterFaceGAN 속성별 구분기 기반 벡터 조작
Inversion 이미지 → 벡터로 변환
Manipulation 벡터 조작 후 이미지로 복원
728x90

'인공지능' 카테고리의 다른 글

Multimodal 모델  (3) 2025.05.29
Vision 생성모델 - Diffusion  (1) 2025.05.28
CV 분야에서 Transformers  (1) 2025.05.28
Post Transformer(feat. GPT, BERT)  (2) 2025.05.27
RNN 기반 Sequence-to-Sequence 모델과 Attention  (3) 2025.05.27