---
title: "GAN의 수학적 증명"
url: https://agwo2.dev/mathematical_proofs_gan
author: "채은우 (Eunwoo Chae)"
date: 2024-07-08
tags: ["GAN", "증명", "수학"]
summary: "GAN 이론이 가능한 이유에 대한 수학적 증명"
---

# GAN의 수학적 증명

### 들어가는 말

수학 수학평가 내용이지만 따로 다듬지 않고 블로그에 기술한다. 내용 중 오타가 다수 존재할 수 있으니 혹시 발견한다면 댓글 등으로 알려주면 감사하겠다.

### 탐구동기

평소 인공지능을 다루던 중 GAN을 사용한 적이 있었는데, 수학 시간에 미적분학을 배우면서 GAN이 어떻게 동작할 수 있는지 GAN의 동작이 가능한 것인지에 대해 증명하고 싶어졌습니다. 그래서 GAN 논문과 관련한 블로그를 바탕으로 GAN의 목적이 달성 가능한 것인가에 대한 증명을 진행하였습니다.

### GAN이 무엇인가?

GAN(Generative Adversarial Networks, 생성적 적대 신경망)이란 비지도학습에 사용되는 머신러닝 프레임워크의 한 종류로서 다른 알고리즘과는 달리 이전에는 없던 새로운 데이터를 생성할 수 있는 특징을 가진다. 

#### GAN의 구조

![](https://blog.kakaocdn.net/dn/dJAN1m/btrB7MMr8o5/O8xVfWSnL9JEkqNVHyasqk/img.png)

GAN의 구조는 위와 같은 이미지를 통해 간단히 설명이 가능하다. GAN에는 Generator(이하 G)와 Discriminator(이하 D)가 존재하는데, 각각 G는 위조지폐범, D는 위조지폐 여부를 판별하는 경찰로 생각할 수 있다. GAN에서는 이러한 G와 D가 서로 적대적으로 행동하며, G는 자신이 만든 위조지폐가 D에 의해 걸리지 않도록 하기 위해 노력하고, D는 이와 반대로 G가 만든 위조지폐를 잘 판별하도록 학습을 진행하게 된다.

### GAN의 가능 여부에 대한 증명

이때 GAN의 목적은 위에서도 볼 수 있드시 G가 data distribution(이하 $p_{data}$)과 가장 유사한 generator distribution(이하 $p_g$)을 만드는 것이다.

이때 GAN은 아래와 같은 V(G, D)에 대한 min, max 문제로 정의될 수 있다.

$$
\min_G \max_D V(G, D) = \mathbb{E}_{x\sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1-D(G(z)))]
$$

$p_{data}=p_g$를 증명하기 위해 일단 임의로 가치함수에서 G가 항상 고정된 특정 결과를 나타낸다고 하면 아래와 같이 가치함수를 다시 쓸 수 있다. 이것의 의미는 D가 G의 결과와 상관없이 최적의 해를 찾는 상황을 나타내는 것이다.

$$
D^*(x)=\arg \max_D V(D)= \mathbb{E}_{x\sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1-D(G(z)))]
$$

D에 대해서 G를 고정하면 $z \rightarrow G(z) \rightarrow D(x)$ 이므로 아래와 같이 표현된다.

$$
= \mathbb{E}_{x\sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_g(x)}[\log(1-D(x))]
$$

다음과 같은 연속 확률 변수에서의 기댓값 정의를 통해 위 식을 그 아래와 같이 표현가능하다.

$$
\mathbb E (x)=\int_{-\infin}^{\infin}xf(x)dx
$$

$$
= \int_x p_{data}\log(D(x))dx + p_g(x)\log(1-D(x))dz
$$

최종적으로 $D^*(x)$는 위와 같이 정리된다. 그리고 이 적분식을 최대화하여 $D^*(x)$를 구할 수 있다.

적분식을 최대화 하는 것은 적분식 안에 식을 최대화하는 것과 같으므로 아래와 같이 전개할 수 있다.

$$
D^*(x)=\arg \max_D\ p_{data}\log(D(x))dx + p_g(x)\log(1-D(x))
$$

보다 쉬운 정리를 위해 $a=p_{data}(x), y = D(x), b=p_g(x)$ 라고 치환하여 다음과 같이 표현한다.

$$
 p_{data}\log(D(x))dx + p_g(x)\log(1-D(x))= a \log (y) +b\log (1-y)
$$

구하고자 하는 것이 $y$의 최댓값이고 이는 함수를 미분해서 0이 되는 지점을 통해 찾을 수 있으므로

$$
\frac{d}{dy}(a \log (y) +b\log (1-y))=\frac{a}{y}+\frac{-b}{1-y}=\frac{a-(a+b)y}{y(1-y)}=0
$$

최종적으로 어떤 고정된 G에 대해서 최적의 D값은 아래와 같다.

$$
D^*(x)=\frac{a}{a+b}=\frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)}
$$

가치함수를 위에서 구한 최적의 D값 $D^*(x)$를 대입하여 다시쓰면

$$
\min_G\max_D V(G,D)=\min_G V(G,D^*)= \mathbb E_{x\sim p_{data}(x)}[\log D^*(x)]+\mathbb E_{z\sim p_z(z)}[\log(1-D^*_G(G(z)))]
$$

다시 한 번 기댓값 정의를 적용하면

$$
=\int_x {p_{data}(x)}\log \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}dx+\int_x {p_{g}(x)}\log \frac{p_{g}(x)}{p_{data}(x)+p_g(x)}dx
$$

$$
=\int_x {p_{data}(x)}\log \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}dx+\int_x {p_{g}(x)}\log \frac{p_{g}(x)}{p_{data}(x)+p_g(x)}dx-\log(4)+\log(4)
$$

$$
=\int_x {p_{data}(x)}\log \frac{2\cdot p_{data}(x)}{p_{data}(x)+p_g(x)}+\int_x {p_{data}(x)}\log \frac{2\cdot p_{g}(x)}{p_{data}(x)+p_g(x)}-\log(4)
$$

위 식은 다음과 같은 KL 분포에 의해 그 아래와 같이 표현된다.

$$
KL(p_{data}||p_g)=\int_{-\infin}^{\infin}p_{data}(x)\log(\frac{p_{data(x)}}{p_g(x)})dx
$$

$$
= KL(p_{data}||\frac{p_{data}(x)+p_{g}(x)}{2})+KL(p_{g}||\frac{p_{data}(x)+p_{g}(x)}{2})-\log(4)
$$

JSD 분포 정의는 다음과 같이 표현이 가능하다. JSD를 간단하게만 설명하면 두개의 $p$와 $q$의 분포가 있을 때 두 확률분포의 거리를 나타내는 것이라고 할 수 있다.

$$
JSD(p||q)=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2})
$$

JSD 분포 정의를 통해 정리한 식은 다음과 같다.

$$
=2\cdot JSD(p_{data}||p_g)-\log(4)
$$

이때, $V(G, D)$를 최적화하는 min, max 문제를 푸는 것은 JSD값을 최소화하는 것과 같고$(\because \log(4))$, JSD는 두 분포 사이의 거리를 나타내는 것이므로 $p_{data}=p_g$일 때 JSD값은 0이다. 이외에는 JSD값은 항상 양수값을 가진다.

따라서 JSD를 최소화 시키는 $p_{data}=p_g$ 조건에서 $V(G, D)$의 최소가 만족한다.

### 참고 문헌

1. **Goodfellow, I., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., ... & Bengio, Y. (2014). Generative Adversarial Nets. arXiv preprint arXiv:1406.2661.**
2. Woo-niverse, "GAN 이해하기", Woo-niverse 블로그, 2022.
3. YouTube, "Generative Adversarial Networks - Tutorial", YouTube, 2022.
4. Naver Blog, "GAN의 기본 개념과 응용", Naver 블로그, 2016.
5. YouTube, "GAN의 이해와 활용", YouTube, 2022.
6. DI Big Data Study, "Generative Adversarial Networks - Overview", DI Big Data Study 블로그, 2020.
7. Memesoo99, "Generative Adversarial Networks (GAN) 설명", Memesoo99 블로그, 2021.

---
출처: https://agwo2.dev/mathematical_proofs_gan
