검색
← 모듈 로드맵

생성적 적대 신경망 (GAN)

논문 · 준전문가 · Ian J. Goodfellow 외 7명 · 2014 · NIPS 2014

원제 · Generative Adversarial Networks

생성자와 판별자를 겨루게 해 확률 계산 없이 진짜 같은 표본을 만드는 적대적 학습을 제안한 논문

먼저 알아야 할 것

확률 분포와 기댓값로그 손실(이진 교차 엔트로피)다층 퍼셉트론역전파와 경사 하강법KL 발산

다루는 내용

잡음을 받아 가짜 표본을 만드는 생성자 G와 진짜·가짜를 가려내는 판별자 D를 미니맥스 게임으로 함께 학습하는 생성적 적대 신경망(GAN)을 제안합니다. 판별자가 최적일 때 이 게임은 데이터 분포와 생성 분포 사이의 젠슨-섀넌 발산을 줄이는 것과 같고, 유일한 해는 생성 분포가 데이터 분포와 같아지는 점입니다. 마르코프 연쇄나 근사 추론 없이 역전파만으로 학습하며, MNIST·TFD·CIFAR-10에서 표본과 파젠 창 기반 로그 가능도로 가능성을 보였습니다. 명시적 확률이 없고 두 신경망의 동기화가 어렵다는 한계도 스스로 밝혔습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

우리는 적대적 과정을 통해 생성 모델을 추정하는 새로운 틀을 제안합니다. 이 틀에서는 두 모델을 동시에 학습합니다. 하나는 데이터 분포를 포착하는 생성 모델 G이고, 다른 하나는 어떤 표본이 G가 아니라 학습 데이터에서 왔을 확률을 추정하는 판별 모델 D입니다. G의 학습 절차는 D가 실수할 확률을 최대화하는 것입니다. 이 틀은 두 참가자가 벌이는 미니맥스 게임에 해당합니다. 임의의 함수 G와 D로 이루어진 공간에서는 유일한 해가 존재하며, 그 해에서 G는 학습 데이터 분포를 복원하고 D는 모든 곳에서 1/2이 됩니다. G와 D를 다층 퍼셉트론으로 정의하는 경우에는 시스템 전체를 역전파로 학습할 수 있습니다. 학습할 때든 표본을 생성할 때든 마르코프 연쇄나 펼친(unrolled) 근사 추론 신경망이 전혀 필요하지 않습니다. 실험에서는 생성된 표본을 정성적 · 정량적으로 평가해 이 틀의 잠재력을 보여 줍니다.

해설

생성적 적대 신경망 (GAN)

가짜를 만드는 신경망(생성자)과 가짜를 잡아내는 신경망(판별자)을 서로 겨루게 해서, 확률 계산 없이 진짜 같은 표본을 만드는 법을 배우게 한 논문입니다. 이후 몇 년 동안 이미지 생성 연구의 중심이 된 틀입니다.

항목내용
원제Generative Adversarial Networks (arXiv 본문 제목: Generative Adversarial Nets)
저자Ian J. Goodfellow 외 7명 (몬트리올대)
발표2014 · NIPS 2014 · arXiv 1406.2661
트랙 · 수준생성 모델 · 중급
먼저 알면 좋은 것확률 분포와 기댓값, 로그 손실(이진 교차 엔트로피), 다층 퍼셉트론, 역전파 · 경사 하강법, KL 발산

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • 생성 모델을 "확률을 직접 계산하는 모델"이 아니라 "판별자를 속이는 표본 생성기"로 학습할 수 있다는 것을 알게 됩니다.
  • 생성자 GG와 판별자 DD가 하나의 값 함수 V(D,G)V(D, G)를 두고 벌이는 미니맥스 게임의 식을 읽을 수 있게 됩니다.
  • 판별자가 최적일 때 이 게임이 "데이터 분포와 생성 분포 사이의 젠슨-섀넌 발산 줄이기"와 같다는 증명의 흐름을 따라갈 수 있습니다.
  • 실제 학습에서 왜 log⁡(1−D(G(z)))\log(1 - D(G(z))) 대신 log⁡D(G(z))\log D(G(z))를 키우는지, 그 실용적 이유를 숫자로 확인합니다.
  • 논문이 스스로 밝힌 약점(명시적 확률 없음, 두 신경망의 동기화 문제)을 이해합니다.

초록 (번역)

우리는 적대적 과정을 통해 생성 모델을 추정하는 새로운 틀을 제안합니다. 이 틀에서는 두 모델을 동시에 학습합니다. 하나는 데이터 분포를 포착하는 생성 모델 G이고, 다른 하나는 어떤 표본이 G가 아니라 학습 데이터에서 왔을 확률을 추정하는 판별 모델 D입니다. G의 학습 절차는 D가 실수할 확률을 최대화하는 것입니다. 이 틀은 두 참가자가 벌이는 미니맥스 게임에 해당합니다. 임의의 함수 G와 D로 이루어진 공간에서는 유일한 해가 존재하며, 그 해에서 G는 학습 데이터 분포를 복원하고 D는 모든 곳에서 1/2이 됩니다. G와 D를 다층 퍼셉트론으로 정의하는 경우에는 시스템 전체를 역전파로 학습할 수 있습니다. 학습할 때든 표본을 생성할 때든 마르코프 연쇄나 펼친(unrolled) 근사 추론 신경망이 전혀 필요하지 않습니다. 실험에서는 생성된 표본을 정성적 · 정량적으로 평가해 이 틀의 잠재력을 보여 줍니다.

무엇을 풀었나

2014년 무렵 딥러닝의 큰 성공은 대부분 판별 모델(discriminative model) 에서 나왔습니다. 사진을 넣으면 "고양이"라는 라벨을 내는 식의 모델입니다. 반면 사진 자체를 새로 만들어 내는 생성 모델(generative model) 은 뒤처져 있었습니다.

이유는 확률 계산이었습니다. 당시 주류였던 볼츠만 머신(RBM · DBM) 계열은 확률을 정규화하는 분배 함수(partition function) 와 그 기울기를 정확히 계산할 수 없었습니다. 그래서 마르코프 연쇄 몬테카를로(MCMC)로 근사했는데, 연쇄가 여러 봉우리(모드) 사이를 잘 오가지 못하는 혼합(mixing) 문제가 학습을 괴롭혔습니다.

논문의 질문은 이렇습니다. "확률 밀도를 아예 쓰지 않고, 잘 되는 판별 모델과 역전파만으로 생성 모델을 학습할 수는 없을까?" 답이 적대적 학습입니다.

핵심 아이디어

1. 두 신경망의 게임 — 위조범과 경찰

직관 (논문이 직접 든 비유): 생성자는 들키지 않고 쓸 위조지폐를 만드는 위조범 팀이고, 판별자는 위조지폐를 가려내려는 경찰입니다. 서로 경쟁하다 보면 두 팀 모두 실력이 늘고, 결국 위조지폐가 진짜와 구별되지 않게 됩니다.

단계별로 보면:

  1. 무작위 잡음 zz를 하나 뽑습니다(예: 균등분포나 정규분포에서).
  2. 생성자 GG가 zz를 받아 가짜 표본 G(z)G(z)를 만듭니다. 이 단계는 앞으로 한 번 계산하는 것뿐입니다.
  3. 판별자 DD는 진짜 데이터 xx와 가짜 G(z)G(z)를 받아 각각 "진짜일 확률"을 0~1 사이 숫자로 냅니다.
  4. DD는 진짜에는 1, 가짜에는 0에 가깝게 답하도록 학습합니다.
  5. GG는 DD가 자기 가짜에 1에 가까운 값을 주도록, 즉 DD가 틀리도록 학습합니다. GG의 기울기는 DD를 거쳐 역전파로 들어옵니다.

수식 (논문 식 1):

min⁡Gmax⁡DV(D,G)=Ex∼pdata(x)[log⁡D(x)]+Ez∼pz(z)[log⁡(1−D(G(z)))]\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}(x)}\big[\log D(x)\big] + \mathbb{E}_{z \sim p_z(z)}\big[\log\big(1 - D(G(z))\big)\big]

기호 풀이:

기호뜻
G(z;θg)G(z; \theta_g)생성자. 매개변수 θg\theta_g를 가진 다층 퍼셉트론으로, 잡음 zz를 데이터 공간으로 옮깁니다
D(x;θd)D(x; \theta_d)판별자. 스칼라 하나를 내며, xx가 pgp_g가 아니라 데이터에서 왔을 확률을 뜻합니다
pdatap_{\text{data}}실제 데이터의 분포
pzp_z잡음 zz의 사전 분포
pgp_gz∼pzz \sim p_z일 때 G(z)G(z)가 따르는 분포. 생성자가 "암묵적으로" 정의하는 분포입니다
E[⋅]\mathbb{E}[\cdot]기댓값. 실제로는 미니배치 평균으로 근사합니다
max⁡D\max_DDD는 VV를 키우려 합니다(잘 맞히기)
min⁡G\min_GGG는 같은 VV를 줄이려 합니다(속이기)

첫째 항은 "진짜를 진짜라고 할수록" 커지고, 둘째 항은 "가짜를 가짜라고 할수록" 커집니다. 판별자 입장에서는 이진 분류의 로그 가능도(log-likelihood)와 같습니다. 논문도 DD의 목표를 "xx가 pdatap_{\text{data}}에서 왔는지(y=1y=1) pgp_g에서 왔는지(y=0y=0)를 맞히는 조건부 확률의 로그 가능도 최대화"로 해석할 수 있다고 적습니다.

숫자로 해 보기 (해설용 예시 — 논문 수치 아님):

진짜 표본 하나에 D(x)=0.9D(x) = 0.9, 가짜 표본 하나에 D(G(z))=0.2D(G(z)) = 0.2라고 하겠습니다(자연로그 기준).

  • 첫째 항: log⁡0.9≈−0.105\log 0.9 \approx -0.105
  • 둘째 항: log⁡(1−0.2)=log⁡0.8≈−0.223\log(1 - 0.2) = \log 0.8 \approx -0.223
  • 합: V≈−0.328V \approx -0.328

판별자가 완벽하면(D(x)=1D(x)=1, D(G(z))=0D(G(z))=0) V=0V = 0이 최댓값입니다. 반대로 판별자가 아무것도 모르고 모든 입력에 0.50.5를 내면 V=log⁡0.5+log⁡0.5=−log⁡4≈−1.386V = \log 0.5 + \log 0.5 = -\log 4 \approx -1.386입니다. 이 −log⁡4-\log 4가 뒤에서 다시 나옵니다.

왜 이렇게 했나: 이전 방법은 p(x)p(x) 자체를 모델로 정의하고 그 가능도를 키웠습니다. 그러면 정규화 상수 계산이나 근사 추론이 따라붙습니다. GAN은 p(x)p(x)를 쓰지 않고 "구별할 수 있느냐"만 묻습니다. 구별은 분류 문제이고, 분류는 당시 역전파 · 드롭아웃 · 조각별 선형 유닛(ReLU, maxout)으로 이미 잘 풀리던 문제였습니다.

2. 판별자가 최적이면 무엇이 되나

직관: 어떤 지점 xx에서 진짜가 나올 가능성과 가짜가 나올 가능성을 둘 다 안다면, 가장 좋은 판정은 "진짜 비율"을 그대로 말하는 것입니다.

단계별로 보면:

  1. 생성자 GG를 고정합니다.
  2. 기댓값을 적분으로 바꾸면 VV는 xx마다 pdata(x)log⁡D(x)+pg(x)log⁡(1−D(x))p_{\text{data}}(x)\log D(x) + p_g(x)\log(1 - D(x))를 더한 것이 됩니다(논문 식 3).
  3. 각 xx에서 이 값을 가장 크게 만드는 D(x)D(x)를 따로 고르면 됩니다.
  4. 함수 y↦alog⁡y+clog⁡(1−y)y \mapsto a\log y + c\log(1-y)는 [0,1][0,1]에서 y=a/(a+c)y = a/(a+c)일 때 최대가 됩니다.

수식 (논문 명제 1 · 식 2):

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

기호 풀이:

  • DG∗D^*_G: 생성자가 GG로 고정됐을 때의 최적 판별자
  • 분자: 그 지점에서 진짜 데이터의 밀도
  • 분모: 진짜와 가짜 밀도의 합

(aa, cc는 위 4단계의 일반식에서 각각 pdata(x)p_{\text{data}}(x), pg(x)p_g(x) 자리입니다. 논문은 두 번째 계수를 bb로 씁니다.)

숫자로 해 보기 (해설용):

어떤 xx에서 pdata(x)=0.6p_{\text{data}}(x) = 0.6, pg(x)=0.2p_g(x) = 0.2라면 D∗=0.6/0.8=0.75D^* = 0.6 / 0.8 = 0.75입니다. 그 지점에선 "진짜일 확률 75%"가 최선의 답입니다. 생성자가 좋아져 pg(x)=0.6p_g(x) = 0.6이 되면 D∗=0.6/1.2=0.5D^* = 0.6/1.2 = 0.5, 즉 판별자가 반반으로 손을 듭니다.

3. 게임의 답은 "진짜 분포와 똑같아지기"

직관: 판별자가 늘 최선을 다한다고 가정하면, 생성자가 줄이는 값은 "두 분포가 얼마나 다른가"를 재는 거리와 같아집니다. 거리가 0이 되는 유일한 경우는 두 분포가 같을 때입니다.

단계별로 보면:

  1. 최적 판별자 DG∗D^*_G를 VV에 넣은 값을 C(G)C(G)라 부릅니다(논문 식 4).
  2. pg=pdatap_g = p_{\text{data}}이면 모든 곳에서 D∗=1/2D^* = 1/2이고, C(G)=log⁡12+log⁡12=−log⁡4C(G) = \log\frac12 + \log\frac12 = -\log 4입니다.
  3. 일반적인 경우 C(G)C(G)에서 −log⁡4-\log 4를 빼면 KL 발산 두 개의 합이 남습니다(식 5).
  4. 이 합은 젠슨-섀넌 발산(JSD)의 두 배입니다(식 6).
  5. JSD는 항상 0 이상이고 두 분포가 같을 때만 0이므로, C(G)C(G)의 전역 최솟값은 −log⁡4-\log 4이고 그때 pg=pdatap_g = p_{\text{data}}입니다(정리 1).

수식 (논문 식 5 · 6):

C(G)=−log⁡4+KL ⁣(pdata ∥ pdata+pg2)+KL ⁣(pg ∥ pdata+pg2)=−log⁡4+2⋅JSD(pdata ∥ pg)C(G) = -\log 4 + \mathrm{KL}\!\left(p_{\text{data}} \,\Big\|\, \frac{p_{\text{data}} + p_g}{2}\right) + \mathrm{KL}\!\left(p_g \,\Big\|\, \frac{p_{\text{data}} + p_g}{2}\right) = -\log 4 + 2\cdot \mathrm{JSD}(p_{\text{data}} \,\|\, p_g)

기호 풀이:

  • KL(p∥q)\mathrm{KL}(p\|q): 쿨백-라이블러 발산. qq로 pp를 흉내 낼 때 생기는 정보 손실. 0 이상이고, 대칭이 아닙니다.
  • pdata+pg2\frac{p_{\text{data}} + p_g}{2}: 두 분포를 반반 섞은 분포
  • JSD\mathrm{JSD}: 젠슨-섀넌 발산. 두 분포를 각각 "반반 섞은 분포"와 비교한 KL의 평균. 대칭이고 0 이상입니다.

숫자로 해 보기 (해설용 — 점 두 개짜리 장난감 분포):

데이터가 두 값 A, B만 갖는다고 하겠습니다. 진짜 분포 pdata=(0.5, 0.5)p_{\text{data}} = (0.5,\ 0.5), 아직 서툰 생성자 pg=(0.9, 0.1)p_g = (0.9,\ 0.1)입니다.

점pdatap_{\text{data}}pgp_gD∗D^*pdatalog⁡D∗p_{\text{data}} \log D^*pglog⁡(1−D∗)p_g \log(1 - D^*)
A0.50.90.5/1.4 ≈ 0.3570.5 × (−1.030) ≈ −0.5150.9 × (−0.442) ≈ −0.398
B0.50.10.5/0.6 ≈ 0.8330.5 × (−0.182) ≈ −0.0910.1 × (−1.792) ≈ −0.179
  • C(G)≈−0.515−0.398−0.091−0.179=−1.183C(G) \approx -0.515 - 0.398 - 0.091 - 0.179 = -1.183
  • −log⁡4≈−1.386-\log 4 \approx -1.386이므로 차이는 약 0.2030.203
  • 따라서 2⋅JSD≈0.2032\cdot\mathrm{JSD} \approx 0.203, JSD≈0.102\mathrm{JSD} \approx 0.102 (자연로그 단위)

생성자가 pg=(0.5,0.5)p_g = (0.5, 0.5)로 배우면 표의 D∗D^*가 모두 0.50.5가 되고 C(G)=−1.386C(G) = -1.386으로 떨어집니다. 생성자가 할 일은 이 차이 0.2030.203을 0으로 만드는 것입니다.

주의: 이 증명은 GG와 DD가 무한한 표현력을 가진다고 보는 비모수(nonparametric) 설정의 결과입니다. 실제 신경망은 pgp_g 자체가 아니라 매개변수 θg\theta_g를 최적화하고, 다층 퍼셉트론은 매개변수 공간에 여러 임계점을 만듭니다. 논문은 이론적 보장이 없더라도 다층 퍼셉트론이 실제로 잘 동작하므로 합리적인 선택이라고 봅니다.

4. 실제 학습 절차 — 번갈아 한 걸음씩

직관: 경찰을 완벽하게 훈련시킨 다음 위조범을 한 번 훈련시키는 방식은 너무 비쌉니다. 대신 경찰을 조금, 위조범을 조금씩 번갈아 훈련합니다.

단계별로 보면 (논문 알고리즘 1):

  1. 판별자를 kk단계 학습합니다. 각 단계에서 잡음 mm개, 진짜 데이터 mm개를 미니배치로 뽑고, 아래 값을 올라가는 방향(경사 상승)으로 θd\theta_d를 바꿉니다.
  2. 잡음 mm개를 새로 뽑고, 생성자 손실을 내려가는 방향(경사 하강)으로 θg\theta_g를 바꿉니다.
  3. 1~2를 반복합니다.

수식:

∇θd1m∑i=1m[log⁡D(x(i))+log⁡(1−D(G(z(i))))](상승)\nabla_{\theta_d} \frac{1}{m}\sum_{i=1}^{m}\Big[\log D\big(x^{(i)}\big) + \log\Big(1 - D\big(G(z^{(i)})\big)\Big)\Big] \quad (\text{상승})
∇θg1m∑i=1mlog⁡(1−D(G(z(i))))(하강)\nabla_{\theta_g} \frac{1}{m}\sum_{i=1}^{m}\log\Big(1 - D\big(G(z^{(i)})\big)\Big) \quad (\text{하강})

기호 풀이:

  • mm: 미니배치 크기
  • kk: 생성자 한 번 학습할 때 판별자를 학습하는 횟수. 논문 실험에서는 가장 싼 선택인 k=1k = 1을 썼습니다.
  • 갱신 규칙은 어떤 표준 경사 기반 방법이든 쓸 수 있으며, 논문 실험은 모멘텀을 썼습니다.

왜 이렇게 했나: 안쪽 루프에서 DD를 끝까지 최적화하면 계산이 감당할 수 없고, 유한한 데이터에서는 과적합도 생깁니다. GG가 충분히 천천히 바뀐다면 kk번만 갱신해도 DD가 최적 근처에 머문다는 것이 논문의 설명입니다.

5. 실전 요령 — 생성자 손실을 뒤집기

직관: 학습 초반에 생성자는 형편없어서 판별자가 가짜를 쉽게 알아봅니다. 이때 원래 식 그대로면 생성자가 받는 기울기가 거의 0이 되어 배우지를 못합니다. 그래서 "판별자가 틀릴 확률을 줄이기" 대신 "판별자가 속을 확률을 키우기"로 목표를 바꿉니다.

단계별로 보면:

  1. 원래 목표: log⁡(1−D(G(z)))\log(1 - D(G(z)))를 줄이기
  2. 바꾼 목표: log⁡D(G(z))\log D(G(z))를 키우기
  3. 두 목표는 GG와 DD의 동역학에서 같은 고정점을 갖지만, 바꾼 쪽이 학습 초반에 훨씬 강한 기울기를 줍니다(논문 3절).

숫자로 해 보기 (해설용 — 판별자 마지막 층을 시그모이드 D=σ(a)D = \sigma(a)로 가정):

판별자가 가짜를 거의 확신해 D(G(z))=0.01D(G(z)) = 0.01이라고 하겠습니다. 생성자의 기울기는 로짓 aa를 거쳐 흘러갑니다.

  • 원래 목표 log⁡(1−σ(a))\log(1-\sigma(a))의 aa에 대한 기울기: −σ(a)=−0.01-\sigma(a) = -0.01 → 크기 0.01
  • 바꾼 목표 log⁡σ(a)\log\sigma(a)의 aa에 대한 기울기: 1−σ(a)=0.991-\sigma(a) = 0.99 → 크기 0.99

같은 상황에서 기울기 크기가 약 99배 차이 납니다. 원래 식은 "이미 크게 지고 있을 때" 포화(saturate)되어 신호가 사라지고, 바꾼 식은 그때 오히려 신호가 큽니다. (이 99배는 위 가정에서 직접 계산한 설명용 숫자이며, 논문은 "훨씬 강한 기울기"라고만 적었습니다.)

6. 이론적 수렴 (명제 2)

GG와 DD가 충분한 표현력을 가지고, 매 단계 DD가 주어진 GG에 대해 최적에 도달하며, pgp_g를 기준식이 좋아지는 방향으로 갱신한다면 pgp_g는 pdatap_{\text{data}}로 수렴합니다. 근거는 DD를 최적으로 둔 기준이 pgp_g에 대해 볼록(convex)하고 전역 최적이 하나뿐이라는 점입니다. 다시 한 번, 이것은 pgp_g를 직접 움직인다는 이상적 가정 아래의 결과입니다.

처리 흐름

mermaid
flowchart LR
    Z[잡음 z ~ p_z] --> G[생성자 G]
    G --> F[가짜 표본 G z]
    R[진짜 데이터 x ~ p_data] --> D[판별자 D]
    F --> D
    D --> P[진짜일 확률 0~1]
    P --> LD[D 갱신: 진짜는 1 · 가짜는 0 쪽으로 k번]
    P --> LG[G 갱신: D가 가짜를 진짜로 보게 1번]
    LG -. D를 거친 역전파 .-> G
    LD -. 반복 .-> D

결과

실험 설정 (원문 기준)

  • 데이터셋: MNIST, 토론토 얼굴 데이터베이스(TFD), CIFAR-10
  • 생성자: ReLU와 시그모이드 활성화를 섞어 씀. 잡음은 생성자 맨 아래층 입력으로만 넣음
  • 판별자: maxout 활성화, 학습 시 드롭아웃 적용
  • 평가: 생성 표본에 가우시안 파젠 창(Parzen window)을 맞춰 테스트 데이터의 로그 가능도를 추정. 창 폭 σ\sigma는 검증 세트 교차 검증으로 정함

파젠 창 기반 로그 가능도 추정 (논문 표 1, 클수록 좋음)

모델MNISTTFD
DBN138 ± 21909 ± 66
Stacked CAE121 ± 1.62110 ± 50
Deep GSN214 ± 1.11890 ± 29
적대적 신경망(GAN)225 ± 22057 ± 26
  • MNIST에서는 비교 모델 중 가장 높았고, TFD에서는 Stacked CAE(2110)보다 낮았습니다.
  • 논문은 이 추정법이 분산이 꽤 크고 고차원에서 잘 동작하지 않지만, 저자들이 아는 한 가장 나은 방법이라고 밝힙니다.
  • 생성 표본(그림 2)은 골라낸 것이 아닌 공정한 무작위 추출이며, 가장 오른쪽 열에 가장 가까운 학습 예를 보여 학습 데이터를 외운 것이 아님을 보입니다. 마르코프 연쇄 혼합에 의존하지 않으므로 표본끼리 상관이 없습니다.
  • 논문은 이 표본이 기존 방법보다 낫다고 주장하지는 않고, "문헌의 더 나은 생성 모델과 적어도 겨룰 만하다"고 봅니다.

왜 중요한가 · 이후 영향

  • "구별"로 "생성"을 배운다는 발상: 확률 밀도를 명시하지 않는 암묵적 생성 모델을 역전파만으로 학습하는 길을 열었습니다. 이후 이미지 생성 연구가 한동안 이 틀을 중심으로 돌아갔고, 2020년 DDPM 논문도 비교 대상으로 BigGAN · StyleGAN2 · ProgressiveGAN 같은 GAN 계열을 듭니다.
  • 조건부 생성의 출발점: 논문은 결론에서 GG와 DD 모두에 조건 cc를 입력으로 넣으면 조건부 모델 p(x∣c)p(x \mid c)를 얻는다고 적었습니다. 클래스 · 텍스트 조건 생성으로 이어지는 방향입니다.
  • 날카로운 분포를 표현: 마르코프 연쇄 기반 방법은 모드 사이를 오가려면 분포가 어느 정도 흐릿해야 하지만, 적대적 신경망은 매우 날카로운(심지어 퇴화한) 분포도 표현할 수 있다고 논문은 설명합니다.
  • 판별자 특징의 재사용: 라벨이 적을 때 판별자의 특징을 분류기에 쓰는 준지도 학습을 향후 방향으로 제시했습니다.

한계 · 주의할 점

  • 명시적인 확률 pg(x)p_g(x)가 없습니다. 표본은 만들 수 있지만 "이 이미지의 확률은 얼마인가"를 바로 답하지 못합니다. 그래서 평가도 파젠 창 같은 간접 추정에 기댔고, 논문 스스로 이런 모델의 평가법 연구가 더 필요하다고 적었습니다.
  • 두 신경망의 동기화가 필요합니다. 특히 DD를 갱신하지 않고 GG만 너무 많이 학습하면, GG가 너무 많은 zz를 같은 xx로 몰아 다양성이 사라지는 상황이 생깁니다. 논문은 이를 "헬베티카 시나리오(Helvetica scenario)"라 부르며, 후속 연구에서 흔히 말하는 모드 붕괴(mode collapse) 에 해당합니다.
  • 이론과 실제의 간극: 수렴 증명은 무한 용량 · 매 단계 최적 판별자 · pgp_g 직접 갱신을 가정합니다. 실제 신경망 학습에는 이 보장이 그대로 적용되지 않습니다.
  • 실험 규모가 작습니다. 데이터셋은 MNIST · TFD · CIFAR-10이고, 정량 평가는 MNIST · TFD 두 곳의 파젠 창 추정뿐입니다. 고해상도 이미지 품질에 대한 결과는 이 논문에 없습니다.

이어서 읽을 것

용어 정리

용어쉬운 뜻
생성 모델 (generative model)데이터와 비슷한 새 표본을 만들어 내는 모델
판별 모델 (discriminative model)입력을 보고 라벨이나 확률을 맞히는 모델
생성자 (generator, GG)잡음을 받아 가짜 표본을 만드는 신경망
판별자 (discriminator, DD)입력이 진짜 데이터일 확률을 내는 신경망
미니맥스 게임 (minimax game)한쪽은 값을 키우고 다른 쪽은 같은 값을 줄이려는 2인 게임
잡음 사전 분포 (pzp_z)생성자 입력 zz를 뽑는 단순한 분포
분배 함수 (partition function)확률의 합을 1로 맞추는 정규화 상수. 볼츠만 머신에서 계산이 어려움
마르코프 연쇄 몬테카를로 (MCMC)확률적으로 한 걸음씩 옮겨 가며 표본을 얻는 근사 방법
KL 발산한 분포로 다른 분포를 흉내 낼 때 생기는 정보 손실의 크기
젠슨-섀넌 발산 (JSD)두 분포를 반반 섞은 분포와 각각 비교한 KL의 평균. 대칭이고 0 이상
포화 (saturation)함수가 평평해져 기울기가 거의 0이 되는 상태
파젠 창 추정 (Parzen window)표본마다 작은 가우시안을 얹어 밀도를 추정하는 방법
maxout여러 선형 함수 중 최댓값을 출력하는 활성화 함수
모드 붕괴 (mode collapse)생성자가 다양한 출력 대신 몇 가지 출력만 반복하는 현상(논문의 '헬베티카 시나리오')

스스로 점검

1. 생성자 GG를 고정했을 때 최적 판별자는 무엇이고, pg=pdatap_g = p_{\text{data}}일 때 그 값은 얼마인가요?

답: DG∗(x)=pdata(x)/(pdata(x)+pg(x))D^*_G(x) = p_{\text{data}}(x) / (p_{\text{data}}(x) + p_g(x))입니다. 두 분포가 같으면 분자가 분모의 절반이라 모든 곳에서 1/21/2이 되고, 이때 C(G)=−log⁡4C(G) = -\log 4로 전역 최솟값입니다.

2. 실제 학습에서 생성자가 log⁡(1−D(G(z)))\log(1 - D(G(z)))를 줄이는 대신 log⁡D(G(z))\log D(G(z))를 키우는 이유는 무엇인가요?

답: 학습 초반 GG가 서툴면 DD가 가짜를 확신해 log⁡(1−D(G(z)))\log(1 - D(G(z)))가 포화되고 기울기가 거의 사라집니다. 바꾼 목표는 같은 고정점을 가지면서 초반에 훨씬 강한 기울기를 줍니다.

3. 논문이 스스로 밝힌 GAN의 주요 단점 두 가지는 무엇인가요?

답: 첫째, pg(x)p_g(x)를 명시적으로 표현하지 않아 확률을 바로 계산할 수 없습니다. 둘째, DD와 GG를 잘 맞춰 학습해야 하며, DD 갱신 없이 GG만 많이 학습하면 여러 zz가 같은 xx로 몰려 다양성이 사라집니다(헬베티카 시나리오).

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

AI 원리부터 이해하기 · 생성 모델 모듈

생성 모델 모듈 학습

이 글은 생성 모델 모듈의 학습 자료입니다. 전체 10개 자료 중 5번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

arXiv (논문별 상이)

arXiv 1406.2661