Skip to content

19장. 만들어내는 기계 — 생성 모델

이 장의 질문: "그럴듯한 새 데이터를 만든다"는 것은 수학적으로 무슨 일인가? 생성이라는 문제를 정의하고, 상반된 철학의 두 고전 — 압축했다 복원하는 VAE, 위조꾼과 감별사를 겨루게 하는 GAN — 을 이해한다.

전제: 3장(확률 분포, 최대가능도), 7장(저차원 표현), 5장(교차 엔트로피).

생성 문제의 정의

판별 모델은 p(y|x) — 입력이 주어졌을 때 답의 분포 — 를 배웠다. 생성 모델의 야심은 더 크다. 데이터 자체의 분포 p(x)를 배우고, 거기서 새 표본을 뽑는 것.

이 말을 그림으로 이해하자. 픽셀 100만 개짜리 이미지 하나는 100만 차원 공간의 점 하나다. 그 광활한 공간에서 "말이 되는 이미지"들 — 실제 얼굴, 실제 풍경 — 은 지극히 얇은 영역에 몰려 산다(7장의 "본질은 저차원에 산다"). 무작위 픽셀을 찍으면 백색소음이 나오는 이유는 그 얇은 영역을 맞출 확률이 0이기 때문이다. 생성 모델의 일은 그 얇은 영역의 지도를 배우고, 지도 위의 새 지점을 찍는 것이다.

표준 전략은 공통이다: 다루기 쉬운 무작위성 — 보통 저차원의 표준 정규분포에서 뽑은 벡터 z(잠재 벡터) — 를 준비하고, z를 데이터로 변환하는 신경망(생성기, 디코더) 을 학습시킨다. 학습만 잘 되면 생성은 간단하다: 주사위를 굴려 z를 뽑고 변환기에 통과시키면 매번 새로운 표본이 나온다. 문제는 학습 신호다 — "이 생성물이 그럴듯한가"를 어떻게 숫자로 만들 것인가? 정답 쌍이 없으니 지도학습의 손실을 그대로 못 쓴다. 이 채점 문제에 대한 서로 다른 답이 생성 모델의 유파를 가른다.

VAE: 압축했다 복원하는 길

첫 번째 답 — 정답을 스스로 만들자. 원본을 압축했다가 복원하게 하고, 복원 오차로 채점하자.

인코더가 이미지 x를 잠재 벡터 z로 압축하고, 디코더가 z에서 x를 복원한다(오토인코더). 복원 오차를 줄이려면 z는 이미지의 본질을 담아야 한다 — 7장 PCA의 비선형·학습판이다. 그런데 이것만으로는 생성기가 못 된다. 인코더가 각 이미지를 잠재 공간의 제멋대로인 위치에 흩어 놓으면, 학습 이미지가 없던 "빈 공간"의 z를 디코더에 넣었을 때 쓰레기가 나온다. 생성하려면 잠재 공간이 빈틈없이 의미로 차 있어야 한다.

변분 오토인코더(VAE)의 처방 두 가지가 이를 해결한다. 첫째, 인코더가 점이 아니라 분포(평균과 퍼짐)를 출력하게 하고 거기서 z를 뽑는다 — 한 이미지가 잠재 공간의 한 점이 아니라 작은 구름을 담당하게 되어 공간이 매끄럽게 메워진다. 둘째, 그 구름들이 전체적으로 표준 정규분포 근처에 모이도록 벌점(두 분포의 거리 — 3장 끝에서 소개한 KL 발산)을 손실에 더한다 — 그래야 생성 시 표준 정규에서 뽑은 z가 항상 "의미 있는 영역"에 떨어진다. 최종 손실은:

L=복원 오차본질을 담아라+분포 벌점(KL)공간을 정돈하라

(이 손실은 사실 p(x)의 로그가능도에 대한 하한을 최대화하는 것으로 유도된다 — 3장의 최대가능도 원리가 여기서도 뿌리다. 유도의 세부보다 두 항의 역할 이해가 중요하다.) 학습 후 인코더는 버리고, 정규분포에서 z를 뽑아 디코더만 돌리면 생성기다.

VAE의 성격: 학습이 안정적이고(손실이 명시적이라 그냥 내려간다), 잠재 공간이 정돈되어 있어 보간이 아름답다 — 두 얼굴의 z를 잇는 직선 위를 걸으면 한 얼굴이 다른 얼굴로 부드럽게 변한다. 약점은 결과물이 흐릿하다는 것. 복원 오차(픽셀 평균 기반)는 "여러 그럴듯한 답의 평균"을 내놓는 쪽으로 모델을 밀고, 날카로운 디테일의 평균은 흐림이기 때문이다.

GAN: 감별사를 속이는 길

두 번째 답은 과격하다 — "그럴듯한가"의 채점 기준 자체를 신경망에게 배우게 하자.

적대적 생성망(GAN)은 두 망을 겨루게 한다. 생성기z에서 가짜 이미지를 만들고, 판별기는 진짜와 가짜를 구분한다(5장의 이진 분류기 그대로). 판별기는 감별에 성공하도록, 생성기는 판별기를 속이는 데 성공하도록 — 서로 반대 방향의 손실로 — 번갈아 학습한다. 위조지폐범과 감별사의 군비 경쟁이다. 경쟁이 이상적으로 진행되면 위조가 진품과 구별 불가능한 지점, 즉 생성 분포가 데이터 분포와 일치하는 지점에 도달한다.

이 설계의 천재성은 손실의 위탁에 있다. "그럴듯함"을 수식으로 적는 대신, 그 판단을 학습되는 판별기에게 맡겼다 — 판별기는 픽셀 평균 같은 무딘 잣대가 아니라 질감·구조의 미세한 어색함까지 잡아내므로, 생성기는 날카롭고 사실적인 이미지를 내놓도록 몰린다. VAE의 흐림이 없다.

대가는 학습의 불안정성이다. 이것은 밥그릇 바닥을 찾는 최적화(2장)가 아니라 두 플레이어의 균형점을 찾는 게임이고, 게임은 훨씬 다루기 어렵다. 판별기가 너무 강해지면 생성기가 배울 신호가 사라지고(모든 시도가 즉시 간파되면 피드백이 "다 틀렸어"뿐이다), 생성기가 얌체 전략을 찾으면 — 판별기를 속이는 한 종류의 이미지만 반복 생산 — 다양성이 죽는다(모드 붕괴: 숫자 생성기가 "1"만 그리는 고전적 실패). 손실 값이 품질을 말해 주지도 않아서(두 손실은 상대 평가다) 훈련 내내 샘플을 눈으로 봐야 한다. GAN 전성기의 수많은 기법이 이 균형 잡기의 노하우였다.

두 철학의 대차대조표

VAEGAN
채점 방식명시적 손실 (복원 + 분포 벌점)학습되는 판별기 (게임)
학습안정적 — 손실이 그냥 내려간다불안정 — 균형 게임, 모드 붕괴
결과물흐릿하지만 다양날카롭지만 다양성 위험
잠재 공간정돈됨 (보간·조작에 좋음)보장 없음

이 표를 관통하는 교훈이 있다 — 선명함(판별기식 채점)과 안정성(명시적 손실)을 동시에 갖고 싶다는 것. 두 진영 모두 그 답에 닿지 못했고, 그 답은 제3의 길에서 왔다. 미리 한 줄로 예고하면: "생성이라는 어려운 한 걸음을, 쉬운 걸음 천 개로 쪼갠다" — 다음 장의 확산 모델이며, 오늘날 이미지 생성의 왕좌다.

한편 이 장의 관점에서 재조명할 것이 하나 있다. GPT(18장)도 생성 모델이다 — p(x)를 "다음 토큰 분포의 곱" p(x1)p(x2|x1)p(x3|x1x2)로 분해해, 각 조각을 분류 문제로 배우는 자기회귀 방식. 시퀀스로 자연히 분해되는 텍스트에는 이 길이 완벽히 맞았고, 그래서 언어 생성에는 VAE도 GAN도 아닌 자기회귀가 왕이 되었다. 데이터의 구조가 생성 전략을 고른다.

손을 움직일 시간 — 코드랩 14에서 VAE와 GAN을 둘 다 밑바닥부터 구현해 손글씨 숫자를 생성한다. VAE의 잠재 공간 보간과 GAN의 모드 붕괴를 직접 눈으로 보는 것이 이 장의 완성이다.

핵심 요약

  • 생성 = 데이터 분포 p(x)를 배워 새 표본을 뽑는 것. 표준 전략은 "정규분포 잠재 벡터 z → 신경망 변환". 관건은 정답 쌍 없이 '그럴듯함'을 채점하는 방법이다.
  • VAE: 압축-복원 오차 + 잠재 공간 정돈 벌점(KL). 안정적이고 잠재 공간이 곱지만 결과가 흐릿하다(픽셀 평균의 저주).
  • GAN: 채점을 학습되는 판별기에 위탁한 2인 게임. 날카로운 결과, 그러나 균형 게임 특유의 불안정과 모드 붕괴.
  • GPT는 자기회귀 생성 모델 — 분포를 조건부 분포의 곱으로 분해해 분류 문제의 연쇄로 푼다. 데이터 구조가 생성 전략을 결정한다.

스스로 점검

  1. "무작위 픽셀을 찍으면 왜 절대 얼굴이 안 나오는가"를 이 장의 언어(얇은 영역, p(x))로 설명해 보라.
  2. VAE 손실의 두 항 중 하나씩을 빼면 각각 무엇이 무너지는가? (복원 항만 있을 때 / 벌점 항만 있을 때)
  3. GAN에서 판별기가 초반부터 완벽해지면 생성기 학습이 왜 멈추는지, "배울 신호"의 관점에서 설명해 보라.
  4. 텍스트 생성에서 자기회귀가 자연스러운 이유를, 이미지에는 왜 덜 자연스러운지와 대비해 생각해 보라. (힌트: 이미지의 픽셀에는 정해진 '순서'가 있는가?)

다음 장에서

한 번에 걸작을 그리라는 요구는 생성기에게 너무 가혹했다. 그렇다면 — 완성작에서 노이즈까지 서서히 망가뜨리는 과정을 먼저 정의하고, 그 역재생을 배우게 하면 어떨까. 쉬운 복원 천 걸음의 연쇄로 생성을 풀어낸 확산 모델, 오늘날 모든 이미지 생성 서비스의 심장이다.

20장. 노이즈에서 그림으로 — 확산 모델 →