상위 목록: 하위 목록: 작성 날짜: 읽는 데 8 분 소요

판별 모델과 생성 모델

지금까지 다룬 모델은 대부분 입력을 보고 답을 고르는 모델이었습니다. 이미지를 보고 고양이인지 개인지 판단하고, 집의 정보를 보고 가격을 예측합니다. 이처럼 입력 \(x\)가 주어졌을 때 정답 \(y\)의 확률 \(p(y \mid x)\)를 학습하는 모델을 판별 모델(Discriminative Model)이라 합니다. 판별 모델은 고양이와 개를 구분하는 경계만 알면 되고, 고양이가 어떻게 생겼는지 전부 알 필요는 없습니다.

반대로 데이터 자체의 분포 \(p(x)\)를 학습하는 모델을 생성 모델(Generative Model)이라 합니다. 고양이 사진 수만 장을 학습해 “고양이 사진이란 어떤 픽셀 배치를 가지는가”를 이해하고, 그 분포에서 새로운 고양이 사진을 뽑아낼 수 있는 모델입니다. 학습 데이터에 없던, 그러나 그럴듯한 데이터를 만들어 낸다는 점에서 판별 모델보다 훨씬 어려운 문제를 풉니다.

생성이 어려운 이유는 데이터의 차원이 매우 높기 때문입니다. \(256 \times 256\) 컬러 이미지는 약 20만 개의 숫자로 이루어져 있으며, 이 숫자들을 무작위로 정하면 거의 언제나 잡음이 됩니다. 실제 사진은 이 거대한 공간에서 아주 좁은 영역에만 모여 있습니다. 생성 모델은 그 좁은 영역이 어디이고 어떤 모양인지를 학습해야 합니다.

생성 모델은 이미지와 음성의 생성, 데이터가 부족할 때 학습 데이터를 늘리는 데이터 증강, 정상 데이터의 분포를 학습해 벗어나는 데이터를 찾는 이상치 탐지 등에 활용됩니다. 자연어 처리 이론에서 다룬 대규모 언어 모델도 문장의 분포를 학습해 새로운 문장을 만드는 생성 모델입니다. 이 강좌에서는 생성 모델의 대표적인 네 가지 접근을 차례대로 다룹니다.



잠재 변수(Latent Variable)

대부분의 생성 모델은 잠재 변수(Latent Variable)라는 개념을 사용합니다. 얼굴 사진을 떠올려 보면, 20만 개의 픽셀 값은 서로 독립적이지 않고 성별, 나이, 표정, 조명 방향, 얼굴의 각도 같은 몇 가지 숨은 요인에 의해 대부분 결정됩니다. 이 숨은 요인을 수십에서 수백 차원의 벡터 \(z\)로 나타낸 것이 잠재 변수이며, 잠재 변수가 놓이는 공간을 잠재 공간(Latent Space)이라 합니다.

잠재 변수를 사용하면 생성은 두 단계로 나뉩니다. 먼저 정규 분포처럼 다루기 쉬운 분포에서 잠재 변수 \(z\)를 뽑고, 다음으로 신경망이 \(z\)를 실제 데이터 \(x\)로 변환합니다. 복잡한 데이터 분포를 직접 다루는 대신, 단순한 분포를 복잡한 분포로 바꾸는 함수를 학습하는 것입니다.

잘 학습된 잠재 공간에서는 가까운 점이 비슷한 데이터를 만들어 냅니다. 웃는 얼굴의 잠재 변수와 무표정한 얼굴의 잠재 변수 사이를 조금씩 이동하면, 표정이 서서히 바뀌는 얼굴들이 생성됩니다. 비지도 학습에서 다룬 차원 축소(Dimensionality Reduction)가 데이터의 핵심 요인을 찾는 일이었다면, 생성 모델은 그 요인에서 다시 데이터를 만들어 내는 일까지 해냅니다.



오토인코더(Autoencoder)

오토인코더(Autoencoder)는 입력을 그대로 다시 출력하도록 학습하는 신경망입니다. 입력을 작은 잠재 벡터로 압축하는 인코더(Encoder)와, 잠재 벡터를 원래 크기로 복원하는 디코더(Decoder)로 이루어집니다. 손실 함수는 입력과 복원 결과의 차이이며, 손실 함수에서 다룬 평균 제곱 오차를 주로 사용합니다.

입력을 그대로 출력하는 것은 쉬워 보이지만, 가운데의 잠재 벡터가 입력보다 훨씬 작다는 점이 핵심입니다. 20만 개의 숫자를 128개의 숫자로 줄였다가 다시 복원하려면, 인코더는 데이터의 가장 중요한 정보만 골라 압축하는 방법을 배워야 합니다. 정답 레이블 없이 입력 자체를 정답으로 삼으므로 비지도 학습의 일종입니다.

그러나 일반 오토인코더는 좋은 생성 모델이 되지 못합니다. 인코더는 학습 데이터를 잠재 공간의 흩어진 점들로 바꿀 뿐이고, 그 점들 사이의 빈 공간이 어떤 데이터에 대응하는지는 전혀 학습하지 않습니다. 잠재 공간에서 아무 점이나 골라 디코더에 넣으면, 대부분 의미 없는 흐릿한 결과가 나옵니다. 압축과 복원은 잘하지만 새로운 것을 만들어 내지는 못하는 것입니다.



변분 오토인코더(Variational Autoencoder)

2013년 킹마(Diederik Kingma)와 웰링(Max Welling)이 제안한 변분 오토인코더(Variational Autoencoder, VAE)는 잠재 공간을 빈틈없이 채우도록 오토인코더를 바꾸었습니다.

VAE의 인코더는 입력을 잠재 공간의 점 하나가 아니라 분포 하나로 바꿉니다. 입력마다 정규 분포의 평균 \(\mu\)와 표준 편차 \(\sigma\)를 출력하고, 그 분포에서 잠재 변수를 뽑아 디코더에 넣습니다. 같은 입력이라도 매번 조금씩 다른 위치에서 뽑히므로, 디코더는 점 주변의 영역 전체가 비슷한 데이터를 만들도록 학습됩니다.

여기에 한 가지 제약을 더합니다. 각 입력의 분포가 표준 정규 분포에 가까워지도록 벌점을 주는 것입니다. 이 벌점은 두 분포의 차이를 측정하는 KL 발산(Kullback-Leibler Divergence)으로 계산합니다.

\[\mathcal{L}_{\text{VAE}} = \underbrace{\lVert x - \hat{x} \rVert^{2}}_{\text{복원 오차}} + \underbrace{\frac{1}{2} \sum \left( \sigma^{2} + \mu^{2} - 1 - \log \sigma^{2} \right)}_{\text{KL 발산}}\]


두 항은 서로 반대 방향으로 당깁니다. 복원 오차는 입력을 잘 구별해 정확히 복원하도록 각 분포를 좁고 서로 멀리 떨어뜨리려 하고, KL 발산은 모든 분포를 원점 근처의 넓은 표준 정규 분포 쪽으로 끌어당깁니다. 평균이 1이고 표준 편차가 0.5인 분포라면 KL 발산은 약 0.818이며, 평균이 0이고 표준 편차가 1이 될 때 0이 됩니다. 두 힘이 균형을 이루면, 서로 다른 입력의 분포가 겹치면서 잠재 공간이 연속적으로 채워집니다. 학습이 끝난 뒤에는 표준 정규 분포에서 잠재 변수를 뽑아 디코더에 넣기만 하면 새로운 데이터가 생성됩니다.

분포에서 값을 뽑는 과정은 무작위이므로 그대로는 역전파를 할 수 없습니다. VAE는 잠재 변수를 \(z = \mu + \sigma \odot \varepsilon\)으로 계산해 이 문제를 해결합니다. 무작위성은 표준 정규 분포에서 뽑은 \(\varepsilon\)에만 두고, \(\mu\)와 \(\sigma\)는 평범한 덧셈과 곱셈으로 연결되므로 역전파로 기울기를 계산할 수 있습니다. 이를 재매개변수화 기법(Reparameterization Trick)이라 합니다.

VAE는 학습이 안정적이고 잠재 공간이 잘 정돈되어 있다는 장점이 있지만, 생성된 이미지가 흐릿해지는 경향이 있습니다. 복원 오차로 평균 제곱 오차를 쓰면, 여러 가능한 결과의 평균을 내는 것이 손실을 가장 줄이는 방법이 되기 때문입니다.



생성적 적대 신경망(GAN)

2014년 굿펠로(Ian Goodfellow) 연구진이 제안한 생성적 적대 신경망(Generative Adversarial Network, GAN)은 전혀 다른 방식으로 생성 모델을 학습합니다. 두 개의 신경망이 서로 경쟁하며 함께 발전하도록 만드는 것입니다.

  • 생성자(Generator) : 무작위 잡음 \(z\)를 받아 가짜 데이터 \(G(z)\)를 만듭니다. 목표는 판별자가 진짜로 착각할 만큼 그럴듯한 데이터를 만드는 것입니다.
  • 판별자(Discriminator) : 데이터를 받아 그것이 진짜일 확률 \(D(x)\)를 출력합니다. 목표는 진짜 데이터와 생성자가 만든 가짜 데이터를 정확히 구별하는 것입니다.


흔히 위조지폐범과 경찰에 비유합니다. 위조지폐범은 경찰을 속이려고 점점 정교한 지폐를 만들고, 경찰은 그것을 잡아내려고 점점 예리해집니다. 이 경쟁을 수식으로 나타내면 다음과 같습니다.

\[\min_{G} \max_{D} \ \mathbb{E}_{x} \left[ \log D(x) \right] + \mathbb{E}_{z} \left[ \log \left( 1 - D(G(z)) \right) \right]\]


판별자는 진짜 데이터에서 \(D(x)\)를 1로, 가짜 데이터에서 \(D(G(z))\)를 0으로 만들어 이 값을 최대화하려 하고, 생성자는 \(D(G(z))\)를 1로 만들어 값을 최소화하려 합니다. 판별자 입장에서 이 식은 손실 함수에서 다룬 이진 교차 엔트로피와 같습니다. 학습은 두 신경망을 번갈아 한 단계씩 갱신하는 방식으로 진행되며, 이상적으로는 생성자가 진짜와 구별할 수 없는 데이터를 만들어 판별자가 모든 데이터에 0.5를 출력하는 상태에 도달합니다.

GAN은 손실 함수가 “흐릿하면 가짜”라는 판별자의 판단이므로, VAE와 달리 매우 선명한 이미지를 만들어 냅니다. 이후 고해상도 얼굴을 생성하는 StyleGAN 등으로 발전하며, 실제 사진과 구별하기 어려운 이미지를 만들어 냈습니다.

대신 학습이 매우 불안정합니다. 두 신경망의 균형이 무너지면 학습이 진행되지 않는데, 판별자가 너무 강하면 생성자에게 전달되는 기울기가 사라지고, 생성자가 판별자의 약점 하나를 찾아내면 그것만 반복합니다. 특히 생성자가 판별자를 속이기 쉬운 몇 가지 결과만 반복해서 만드는 현상을 모드 붕괴(Mode Collapse)라 합니다. 숫자 0부터 9까지를 학습했는데 생성자가 1만 계속 만들어 내는 식입니다.



확산 모델(Diffusion Model)

확산 모델(Diffusion Model)은 현재 이미지 생성에서 가장 널리 쓰이는 방법입니다. 2020년 호(Jonathan Ho) 연구진이 발표한 DDPM(Denoising Diffusion Probabilistic Model)이 높은 품질을 보이면서 주목받았습니다. 확산 모델의 아이디어는 데이터를 망가뜨리는 과정을 거꾸로 학습하는 것입니다.

먼저 순방향 과정(Forward Process)에서는 실제 이미지에 아주 작은 잡음을 조금씩, 수백에서 천 번에 걸쳐 더합니다. 단계가 진행될수록 원래 이미지는 희미해지고, 마지막에는 아무 정보도 남지 않은 순수한 잡음이 됩니다. 이 과정에는 학습할 것이 없으며, 정해진 일정에 따라 잡음을 더할 뿐입니다. \(t\)번째 단계의 이미지는 원래 이미지 \(x_{0}\)와 잡음 \(\varepsilon\)을 섞은 형태로 한 번에 계산할 수 있습니다.

\[x_{t} = \sqrt{\bar{\alpha}_{t}} \, x_{0} + \sqrt{1 - \bar{\alpha}_{t}} \, \varepsilon\]


위 그래프는 1,000단계 동안 잡음을 더할 때, 원본 이미지에 곱해지는 계수 \(\sqrt{\bar{\alpha}_{t}}\)와 잡음에 곱해지는 계수 \(\sqrt{1 - \bar{\alpha}_{t}}\)의 변화입니다. 100단계에서는 원본의 비율이 약 0.947로 아직 이미지가 뚜렷하지만, 250단계에서는 약 0.724와 0.690으로 원본과 잡음이 비슷해지고, 500단계에서는 원본이 약 0.280으로 줄어들며, 1,000단계에서는 약 0.006으로 사실상 잡음만 남습니다.

다음으로 역방향 과정(Reverse Process)에서는 신경망이 이 과정을 거꾸로 수행하도록 학습합니다. 잡음이 섞인 이미지 \(x_{t}\)와 단계 \(t\)를 입력받아, 그 이미지에 섞인 잡음 \(\varepsilon\)이 무엇인지 예측하는 것입니다. 학습 데이터는 무한히 만들 수 있습니다. 실제 이미지에 임의의 단계만큼 잡음을 섞고, 섞은 잡음을 정답으로 삼으면 됩니다. 손실 함수는 예측한 잡음과 실제 잡음의 평균 제곱 오차입니다.

생성할 때는 순수한 잡음에서 출발해, 신경망이 예측한 잡음을 조금씩 걷어 내는 과정을 수백에서 천 번 반복합니다. 처음에는 전체적인 구도와 색이 정해지고, 단계가 진행될수록 세부적인 모양과 질감이 드러나며, 마지막에는 선명한 이미지가 나타납니다. 한 번에 이미지를 만드는 어려운 문제를, 잡음을 조금 걷어 내는 쉬운 문제 수백 개로 나눈 것입니다.

확산 모델은 GAN처럼 선명한 결과를 내면서도, 단순한 회귀 문제로 학습하므로 학습이 안정적이고 모드 붕괴도 거의 없습니다. 문장을 조건으로 넣어 “그 문장에 맞는 이미지”를 생성하도록 확장되면서, 문장으로 이미지를 만드는 서비스의 핵심 기술이 되었습니다. 단점은 생성할 때 신경망을 수백 번 실행해야 하므로 느리다는 점이며, 이를 수십 단계 이하로 줄이는 방법이 활발히 연구되고 있습니다.

  • Tip : 고해상도 이미지에서 확산 과정을 직접 수행하면 연산량이 매우 큽니다. 그래서 오토인코더로 이미지를 작은 잠재 공간으로 압축한 뒤 잠재 공간에서 확산 과정을 수행하는 방법이 널리 쓰이며, 이를 잠재 확산 모델(Latent Diffusion Model)이라 합니다. 여러 생성 모델의 아이디어가 결합된 사례입니다.



자기회귀 모델(Autoregressive Model)

지금까지의 방법들이 데이터 전체를 한 번에 또는 여러 단계에 걸쳐 만들었다면, 자기회귀 모델(Autoregressive Model)은 데이터를 조각으로 나누어 하나씩 순서대로 생성합니다. 문장이라면 토큰을 하나씩, 이미지라면 픽셀이나 이미지 조각을 하나씩 만들며, 각 조각은 앞에서 만든 모든 조각을 조건으로 생성됩니다.

\[p(x) = p(x_{1}) \, p(x_{2} \mid x_{1}) \, p(x_{3} \mid x_{1}, x_{2}) \cdots = \prod_{i=1}^{n} p(x_{i} \mid x_{1}, \ldots, x_{i-1})\]


전체 데이터의 확률을 조건부 확률의 곱으로 정확히 분해한 것이며, 각 조건부 확률은 다음 조각을 고르는 분류 문제가 됩니다. 그래서 손실 함수에서 다룬 교차 엔트로피로 단순하고 안정적으로 학습할 수 있고, 데이터의 확률을 정확히 계산할 수 있습니다. 자연어 처리 이론에서 다룬 대규모 언어 모델이 바로 이 방식으로 문장을 생성합니다.

자기회귀 모델의 단점은 조각을 하나씩 만들어야 하므로 생성 속도가 조각 수에 비례한다는 점입니다. 문장처럼 원래 순서가 있는 데이터에는 자연스럽지만, 이미지처럼 순서가 정해져 있지 않은 데이터에서는 어느 순서로 만들지를 임의로 정해야 합니다.



생성 모델의 평가

판별 모델은 정답과 비교해 정확도를 계산하면 되지만, 생성 모델은 평가가 어렵습니다. 새로 만든 이미지에는 정답이 없기 때문입니다. 좋은 생성 모델은 두 가지를 동시에 만족해야 합니다. 하나는 생성한 데이터가 진짜처럼 보이는가를 뜻하는 품질이고, 다른 하나는 학습 데이터의 다양한 모습을 고르게 만들어 내는가를 뜻하는 다양성입니다. 모드 붕괴가 일어난 GAN은 품질은 높아도 다양성이 낮습니다.

이미지 생성에서 가장 널리 쓰이는 지표는 FID(Fréchet Inception Distance)입니다. 미리 학습된 이미지 분류 신경망으로 실제 이미지들과 생성 이미지들의 특징 벡터를 각각 추출하고, 두 특징 분포가 얼마나 다른지를 측정합니다. 생성 이미지가 흐릿하면 특징이 달라지고, 다양성이 부족하면 분포의 퍼짐이 달라지므로, 두 측면을 하나의 숫자로 함께 반영합니다. 값이 낮을수록 실제 데이터에 가깝습니다.

그러나 FID는 분류 신경망이 학습한 특징에 의존하므로, 사람이 느끼는 품질과 항상 일치하지는 않습니다. 그래서 실제 연구와 서비스에서는 사람이 직접 결과를 비교하는 평가를 함께 사용합니다.



생성 모델 정리

방법 학습 방식 장점 한계
오토인코더 입력을 압축했다가 복원 단순, 차원 축소에 유용 잠재 공간에 빈틈이 있어 생성에 부적합
VAE 복원 오차 + KL 발산 안정적 학습, 정돈된 잠재 공간 생성 결과가 흐릿함
GAN 생성자와 판별자의 경쟁 선명한 결과, 빠른 생성 불안정한 학습, 모드 붕괴
확산 모델 잡음 예측을 반복 학습 높은 품질과 다양성, 안정적 학습 생성할 때 여러 단계가 필요해 느림
자기회귀 모델 다음 조각 예측 정확한 확률 계산, 안정적 학습 조각 수에 비례해 생성이 느림

생성 모델은 모두 단순한 분포를 데이터의 복잡한 분포로 바꾸는 방법을 학습합니다. 차이는 그 변환을 어떻게 학습하느냐에 있습니다. VAE는 잠재 공간을 정규 분포에 맞추고, GAN은 판별자를 속이도록 하며, 확산 모델은 잡음을 조금씩 걷어 내도록 하고, 자기회귀 모델은 다음 조각을 하나씩 예측하도록 학습합니다.

각 방법은 서로의 단점을 보완하며 결합되기도 합니다. 잠재 확산 모델은 오토인코더의 압축과 확산 모델의 생성을 결합했고, 이미지를 토큰으로 바꾸어 자기회귀 모델로 생성하는 방법도 있습니다. 생성 모델을 고를 때는 결과의 품질뿐 아니라 학습의 안정성, 생성 속도, 데이터의 형태를 함께 고려해야 합니다.



  • Writer by : 윤대희

댓글 남기기