생성적 적대 신경망

편집 역사 토론
소프트웨어 통계 수치해석 마지막 수정: 2026-08-22 04:31:08

1. 개요[편집]

생성적 적대 신경망
Generative Adversarial Network
약칭GAN
제안Goodfellow et al. (2014), NeurIPS
구조생성기 G 대 판별기 D 의 2인 영합 게임
이론적 최적해pg = pdata 에서 젠센-섀넌 발산 최소
실제 쓰는 손실비포화(non-saturating) 손실 — 이론식과 다르다
3대 고질병모드 붕괴 · 기울기 소실 · 비수렴
현재 위치이미지 생성 주류는 확산모형에 내줌, 1스텝 생성에서 생존

위조지폐범과 경찰을 같이 키운다. 둘 다 실력이 늘면 지폐가 진짜 같아진다 — 는 것이 원논문의 비유였고, 실전에서는 둘 중 하나가 먼저 이겨 버리는 게 문제였다.

생성적 적대 신경망(Generative Adversarial Network, GAN)은 표본을 만들어 내는 생성기 GG 와 그 표본이 진짜인지 판정하는 판별기 DD 를 서로 대립하는 목적함수로 동시에 학습시켜, 명시적인 확률밀도를 쓰지 않고도 데이터 분포에서 표본을 뽑는 법을 배우게 하는 생성모형이다. 굿펠로(Ian Goodfellow) 등이 2014년에 내놓았고, 이후 6~7년간 이미지 생성 분야를 지배했다.1

이 모형의 결정적 특징은 가능도를 계산하지 않는다는 것이다. 변분 오토인코더는 로그가능도의 하한(ELBO)을 최대화하고, 자기회귀 모형은 가능도를 곧이곧대로 최대화한다. GAN은 밀도를 아예 안 쓰고, 대신 “두 표본 집합을 구분하는 분류기가 얼마나 잘 되느냐” 로 두 분포의 차이를 재는 암시적(implicit) 생성모형이다. 그래서 밀도 정규화 상수 같은 걸 걱정할 필요가 없고, 그 대가로 학습이 최적화 문제가 아니라 게임이 된다. 이 교환이 GAN의 모든 장점과 모든 병의 출처다.

2. 미니맥스 게임과 원논문의 결과[편집]

원논문의 가치함수는 다음과 같다. 잠재변수 zpzz \sim p_z (보통 표준정규)를 GG 가 데이터 공간으로 밀어 보낸 분포를 pgp_g 라 하자.

minGmaxDV(D,G)=Expdata[logD(x)]+Ezpz[log(1D(G(z)))]\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}\bigl[\log D(x)\bigr] + \mathbb{E}_{z \sim p_z}\bigl[\log\bigl(1 - D(G(z))\bigr)\bigr]

DD 입장에서는 진짜에 1, 가짜에 0을 주고 싶은 이진 교차엔트로피이고, GG 입장에서는 그걸 방해하고 싶은 것이다. GG 를 고정했을 때 최적 판별기는 변분법 없이 피적분함수를 점별로 최대화해 바로 나온다.

DG(x)=pdata(x)pdata(x)+pg(x)D^{*}_{G}(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_g(x)}

이걸 도로 대입하면 GG 가 실제로 최소화하고 있는 양이 드러난다.

C(G)=log4+2JSD(pdatapg)C(G) = -\log 4 + 2\,\mathrm{JSD}\bigl(p_{\text{data}} \,\Vert\, p_g\bigr)

전역 최소는 pg=pdatap_g = p_{\text{data}} 일 때 log4-\log 4. 최적 판별기 가정 아래 GAN 학습은 젠센-섀넌 발산 최소화라는 이 한 줄이 원논문의 이론적 심장이었다. 유도의 세부와 JSD의 유계성이 왜 축복이자 저주인지는 젠센-섀넌 발산 문서에 정리돼 있으니 여기서는 결론만 쓴다.

문제는 “최적 판별기 가정” 이다. 실제 학습은 DD 를 수렴시킨 뒤 GG 를 갱신하는 게 아니라 둘을 번갈아 한 스텝씩 굴린다. 그 순간 위의 유도는 전부 무효가 되고, 우리가 하고 있는 일은 “어떤 발산을 최소화하는 것”이 아니라 비볼록-비오목 게임의 안장점을 동시 경사법으로 찾는 것이 된다.

3. 비포화 손실 — 이론식과 코드가 다른 이유[편집]

원논문조차 3절에서 이미 실무 수정을 제안한다. 학습 초기에는 GG 가 형편없어서 D(G(z))0D(G(z)) \approx 0 이고, 그러면 log(1D(G(z)))\log(1 - D(G(z))) 가 평평해져 GG 로 갈 기울기가 사라진다. 그래서 GGlog(1D(G(z)))\log(1-D(G(z)))최소화하는 대신

maxG Ez[logD(G(z))]\max_G \ \mathbb{E}_{z}\bigl[\log D(G(z))\bigr]

최대화한다. 고정점은 같지만 기울기의 크기가 정반대로 붙는다 — D(G(z))D(G(z)) 가 0에 가까울수록 기울기가 커진다. 이것이 비포화 손실(non-saturating loss)이고, 오늘날 “GAN 손실”이라 부르는 코드는 사실상 전부 이쪽이다. 다시 말해 널리 인용되는 JSD 해석은 실제로 돌아가는 알고리즘의 것이 아니다. GAN 문헌을 읽을 때 처음 걸려 넘어지는 지점이라 짚고 넘어간다.2

4. 왜 이렇게 안 도는가[편집]

GAN이 악명 높은 이유는 실패 양상이 셋으로 갈리는데 처방이 서로 다르기 때문이다.

모드 붕괴(mode collapse). GG 가 데이터의 여러 모드 중 하나(혹은 몇 개)만 뱉고 나머지를 통째로 버린다. 목적함수 상으로는 정당한 행동이다 — DD 를 속이는 데는 한 종류만 완벽하게 잘 만들면 충분하고, “다양해야 한다”는 항이 목적함수 어디에도 없다. 굿펠로는 이를 minGmaxD\min_G \max_D 대신 maxDminG\max_D \min_G 를 푸는 쪽으로 동역학이 흘러 버린 상황으로 설명했다. 안쪽 minG\min_GDD 가 가장 속기 쉬운 점 하나에 질량을 몰아넣는 것이다. 처방: 미니배치 판별(minibatch discrimination), 언롤드 GAN, 판별기에 여러 스케일 통계 주기.

기울기 소실. 자연 이미지는 고차원 공간의 저차원 다양체 근처에 놓이고 pgp_g 도 마찬가지라, 두 지지집합이 겹칠 확률이 사실상 0이다. 그러면 DD 는 완벽하게 분리할 수 있고 JSD는 log2\log 2 에 포화하며, 포화한 상수의 기울기는 0이다. 판별기가 강해질수록 생성기가 못 배우는 역설이 여기서 나온다. 비포화 손실이 이걸 부분적으로 가려 주긴 하지만 근본 처방은 아니다.

비수렴 · 진동. 이게 가장 근본적이다. 두 플레이어의 파라미터를 θG,θD\theta_G, \theta_D 라 할 때 동시 경사법은 벡터장

v(θG,θD)=(θGLG, θDLD)v(\theta_G, \theta_D) = \bigl(-\nabla_{\theta_G} L_G,\ -\nabla_{\theta_D} L_D\bigr)

를 따라 흐른다. 단일 목적함수의 경사하강법과 달리 이 벡터장은 어떤 스칼라 함수의 기울기가 아니다. 즉 내려갈 “지형”이 존재하지 않는다. 야코비안의 고유값이 허수부를 가지면 궤적은 안장점 주위를 나선으로 돌고, 실수부가 양이면 바깥으로 튕겨 나간다. 내시 균형이 존재해도 경사법이 그리로 간다는 보장이 전혀 없는 것이다.3 손실 곡선이 안 내려간다고 학습이 망한 것도 아니고, 내려간다고 잘 되고 있는 것도 아니라는 GAN 특유의 답답함이 여기서 나온다. 게임 이론안장점 쪽 어휘가 이 대목에서 실질적으로 필요해진다.

5. 처방의 역사[편집]

  • WGAN(Arjovsky 등, 2017) — 척도 자체를 와서스타인 거리로 바꾼다. 최적수송 기반 거리는 지지집합이 안 겹쳐도 값이 연속적으로 변해 기울기가 살아 있다. 판별기가 확률을 뱉는 분류기에서 실수를 뱉는 비평가(critic)로 바뀌고, 1-립시츠 제약을 어떻게 거느냐가 남은 문제가 된다. 초판의 가중치 클리핑은 조잡했다.
  • 기울기 벌점(WGAN-GP, Gulrajani 등 2017) — 진짜·가짜를 잇는 선분 위 점에서 기울기 노름이 1에서 벗어나면 제곱 벌점. 하드 제약을 벌점법으로 바꾼 전형.
  • 스펙트럼 정규화(Miyato 등, 2018) — 각 층 가중치를 그 최대특이값으로 나눠 립시츠 상수를 층 단위로 1 이하로 묶는다. 벌점항도 하이퍼파라미터도 없고 거듭제곱법 한두 번이면 최대특이값이 나오므로 거의 공짜다. 그래서 지금도 기본값처럼 쓰인다.
  • 정칙화 벌점 R1(Mescheder 등, 2018) — 진짜 데이터 위에서 DD 의 기울기에 벌점을 걸면 국소 수렴이 증명된다는 결과. 이 논문 제목이 “GAN 학습법 중 실제로 수렴하는 것은 무엇인가”인데, 답이 “생각보다 별로 없다”였다.
  • TTUR(Heusel 등, 2017) — DDGG 에 다른 학습률을 준다. 별것 아닌 것 같지만 국소 수렴 보장이 딸려 온다.

6. 계보[편집]

  • DCGAN(Radford·Metz·Chintala, 2016) — 합성곱 신경망을 GAN에 안착시킨 구조 처방집. 풀링 대신 스트라이드 합성곱, 배치 정규화, 완전연결층 제거, LeakyReLU. 논문의 실질 기여는 이론이 아니라 “이렇게 하면 일단 학습이 되긴 한다” 는 레시피였고, 이후 몇 년간 모든 GAN 논문의 베이스라인이었다.
  • 조건부 GAN 계열 — pix2pix(짝지어진 영상 변환), CycleGAN(짝 없이 순환일관성으로), 초해상용 SRGAN. GAN 손실을 재구성 손실의 보조항으로 쓰는 이 패턴이 실은 산업적으로 가장 오래 살아남았다.
  • 프로그레시브 GAN(Karras 등, 2018) — 4×4에서 시작해 해상도를 점진적으로 키우며 층을 붙인다. 1024² 얼굴 생성이 처음으로 그럴듯해진 지점.
  • StyleGAN(Karras·Laine·Aila, 2019 이후) — 잠재벡터를 중간 잠재공간 W\mathcal{W} 로 매핑한 뒤 각 해상도에 스타일로 주입한다. 조잡한 특징과 세밀한 특징이 자연스럽게 분리되고, 잠재공간 편집이 가능해졌다. 이후 StyleGAN2가 물방울 아티팩트와 프로그레시브 학습의 부작용을 걷어냈고, StyleGAN3는 신호처리 관점에서 에일리어싱을 잡아 “질감이 화면에 붙어 있는” 문제를 고쳤다.

7. 평가지표와 그 한계[편집]

생성모형은 가능도가 없으면 평가가 곧바로 곤란해진다. 사실상의 표준 둘은 이렇다.

Inception Score(IS, Salimans 등 2016)는 사전학습 분류기의 조건부 라벨분포 p(yx)p(y \mid x) 가 뾰족하고(선명함) 주변분포 p(y)p(y) 가 넓기를(다양함) 요구한다. 치명적 결함이 하나 있는데, 실제 데이터를 아예 안 본다. ImageNet 1000클래스로 골고루 선명한 그림만 만들면 원본과 전혀 안 닮아도 점수가 높다.

FID(Fréchet Inception Distance, Heusel 등 2017)는 Inception 특징공간(2048차원)에서 진짜와 가짜 특징을 각각 가우시안으로 적합한 뒤 두 가우시안 사이의 프레셰 거리를 잰다.

FID=μrμg22+Tr(Σr+Σg2(ΣrΣg)1/2)\mathrm{FID} = \lVert \mu_r - \mu_g \rVert_2^2 + \mathrm{Tr}\Bigl(\Sigma_r + \Sigma_g - 2\bigl(\Sigma_r \Sigma_g\bigr)^{1/2}\Bigr)

IS보다 낫지만 한계가 뚜렷하다. (i) 특징이 가우시안이라는 가정에 근거가 없다. (ii) 표본 수에 따라 편향되어 5만 장 관례를 안 지키면 비교가 무의미하다. (iii) 리사이즈·JPEG 등 구현 세부에 민감하다. (iv) 훈련 데이터를 그대로 복사해 뱉는 모형이 만점을 받는다 — 기억(memorization)을 전혀 잡아내지 못한다. (v) ImageNet으로 학습된 백본이라 의료영상·유동장 같은 과학 데이터에는 특징공간 자체가 의미가 없다. 그래서 충실도와 커버리지를 분리해 재는 정밀도·재현율 계열 지표가 따로 제안됐지만, 논문 표에서는 여전히 FID 한 숫자가 관례로 남았다. “지표 하나가 분야를 지배하면 그 지표를 최적화하는 연구가 나온다”는 굿하트의 법칙이 여기서도 성립했다.4

8. 왜 확산모형에 자리를 내줬나[편집]

2021년 무렵부터 이미지 생성의 주류는 확산 모형으로 넘어갔다. 이유는 성능 숫자보다 학습의 성격에 있다.

확산모형의 목적함수는 잡음 제거 회귀, 즉 단일 손실의 평범한 최소화다. 게임이 아니니 위에서 본 비수렴·진동이 구조적으로 없고, 하이퍼파라미터에 둔감하며, 목적함수가 가능도 하한과 연결돼 모드 커버리지가 좋다. GAN이 몇 년에 걸쳐 벌점항과 학습률 트릭으로 겨우 얻어낸 안정성을, 확산모형은 애초에 게임을 안 함으로써 공짜로 얻었다. 데이터·모델 규모를 키울 때 무너지지 않는다는 점도 결정적이었다.

대신 확산모형은 표본 하나에 수십수백 번의 신경망 평가를 요구한다. 한 번의 순전파로 표본이 나오는 것은 여전히 GAN뿐이라, 적대적 손실은 실시간 초해상·음성 보코더·확산모형 증류(수백 스텝짜리 확산모형을 14스텝 생성기로 압축할 때 판별기를 붙이는 방식) 쪽에서 계속 살아 있다. 즉 GAN은 생성 패러다임의 자리에서는 물러났지만 손실함수로서는 남았다고 보는 편이 정확하다.

9. 시뮬레이션 쪽 응용[편집]

수치해석 바닥에서 GAN이 실제로 쓰인 곳은 “예쁜 그림 만들기”가 아니라 해상도와 비용의 교환이다.

  • 난류장 초해상. 조악한 격자의 유동장을 입력으로 받아 미세 스케일을 채워 넣는다. tempoGAN(Xie 등, SIGGRAPH 2018)은 공간 판별기에 시간 판별기를 추가해 프레임 사이에서 디테일이 깜빡이는 문제를 잡았고, Stengel 등(PNAS 2020)은 기후모형 출력의 풍속·일사량을 최대 50배까지 초해상하면서 결과가 난류의 통계적 성질과 모순되지 않도록 물리 손실을 얹었다. 중요한 단서: 이건 역문제를 푸는 것이 아니다. 잃어버린 소규모 정보는 복원 불가능하고, GAN이 만드는 것은 “통계적으로 그럴듯한” 소규모 구조다. 스펙트럼이나 구조함수 같은 통계량을 맞추는 데는 유효하지만 점별 필드가 정답이라고 주장하면 안 된다. 초해상도 문서의 경고가 그대로 적용된다.
  • 대리모델. 파라미터를 조건으로 받아 정상 유동장을 즉시 뱉는 조건부 GAN, 형상 최적화 루프 안에서 CFD 호출을 대체하는 용도. 대리 모델의 일종이지만 회귀형 대리모델과 달리 분포를 배운다는 점이 이득이자 위험이다 — 불확실성을 표현할 수 있는 대신, 모드를 빠뜨리면 그 설계 영역이 통째로 안 보인다. 최적화기는 정확히 그런 구멍을 파고든다.
  • 확률 미분방정식과 불확실성. PI-GAN(Yang·Zhang·Karniadakis, 2020)처럼 판별기를 물리 잔차와 결합해 확률적 계수를 갖는 PDE의 해 분포를 학습하는 계열. 물리 정보 신경망의 적대적 판본에 가깝다.
  • 데이터 증강 — 여기가 가장 오해가 많다. GAN으로 훈련 데이터를 불려도 원본 데이터에 없던 정보는 생기지 않는다. GAN은 pdatap_{\text{data}} 의 추정치에서 표본을 뽑을 뿐이므로, 만들어진 표본은 기껏해야 그 추정치만큼만 정확하다. 데이터가 부족한 상황에서는 판별기가 몇 안 되는 실제 표본을 외워 버려 학습 자체가 무너지고, 이를 막으려고 증강을 판별기 입력에 거는 기법(적응적 판별기 증강)이 따로 필요할 정도다. 물리 데이터에서는 여기에 더해 생성된 장이 보존 법칙을 안 지킨다는 문제가 붙는다. 비압축 유동인데 u0\nabla \cdot \mathbf{u} \neq 0 인 장을 뱉는 식이다. 발산 제거 투영을 후처리로 걸거나, 스트림함수·벡터포텐셜을 출력해 보존을 구조적으로 강제하거나, 물리 잔차를 손실에 넣는 세 가지 처방이 있고 셋 다 흔히 쓰인다.

10. 관련 문서[편집]

11. Footnotes[편집]

  1. Goodfellow, I. et al. (2014). “Generative Adversarial Nets.” NeurIPS 2014. 아이디어가 술집에서 나왔고 그날 밤에 구현해서 돌아갔다는 유명한 일화가 있다. 이후 10년간 수만 편의 후속 논문이 “왜 안 돌아가는가”를 다뤘다는 것을 생각하면, 첫날 밤에 돌아간 것은 상당한 운이었다.

  2. 그래서 “GAN은 JSD를 최소화한다”는 문장은 엄밀히 말해 아무도 쓰지 않는 손실에 대한 서술이다. 비포화 손실이 무엇을 최소화하는지는 별도 분석이 필요하고, Arjovsky·Bottou(2017)는 이것이 역방향 KL에서 JSD를 뺀 꼴과 관련된다는 것을 보였다. 부호가 반대인 항이 섞여 있으니 곱게 수렴할 리가 없다는 뜻이기도 하다.

  3. 손실 지형(loss landscape)이라는 단어가 GAN에서는 애초에 성립하지 않는다는 점이 중요하다. 단일 목적함수 최적화에서 통하던 직관 — “손실이 내려가면 좋아지고 있다” — 이 그대로 안 통하는 것이고, 그래서 GAN 학습 모니터링은 오랫동안 눈으로 샘플 보기가 정석이었다. 21세기 딥러닝의 표준 디버깅 도구가 육안이었다는 사실은 두고두고 회자될 만하다.

  4. Lucic 등(2018)의 “Are GANs Created Equal?”이 이 문제를 정면으로 다뤘다. 수십 개 변종을 같은 예산으로 하이퍼파라미터 탐색해 비교했더니, 어느 것도 원조 GAN을 통계적으로 유의하게 이기지 못했다. 대부분의 개선은 알고리즘이 아니라 튜닝 예산의 차이였던 셈이다. 이 논문 이후 GAN 논문의 실험 절이 눈에 띄게 길어졌다.