상세 컨텐츠

본문 제목

[CV 논문 리뷰 스터디 / 3주차 / 공도웅] Generative Adversarial Nets

심화 스터디/CV 논문 리뷰

by 우주베게 2022. 9. 26. 03:01

본문

들어가기

 

 

2014년 Google Brain의 Ian Goodfellow가  NIPS에서 발표한 Generative Adversarial Nets을 통해 생성 모델링의 개념이 처음 도입되었다. 딥러닝의 아버지인 얀 르쿤 교수는 이를 가리켜 최신 10년 동안 가장 혁신적인 아이디어라고 밝혔다. 해당 논문이 발간된 이후, 엄청나게 많은 양의 GAN 관련 모델이 쏟아져 나오기 시작하는데, 모든 최신 생성모델들이 뿌리를 두고 있는 Generative Adversarial Nets 논문을 리뷰해보도록 하자.

 

 


 

0. Abstract

 

 

본 논문에서는 두 개의 모델을 적대적(adversarial)으로 동시에 학습시키는 생성모델(generative model)을 제안한다. 생성자 모델 (G, a generative model)은 데이터의 분포를 학습하고, 판별기 모델 (D, a discriminative model)은 추출된 샘플이 생성자 모델 (G)에 의해 생성된 데이터가 아니라 원래의 본 데이터에서 왔을 확률을 추정한다. 이러한 framework는 앞서 소개했던 두개의 모델을 min-max 하는 과정으로 인해 가능하다.

 


 

1. Introduction

 

 

제안하는 advisary nets 프레임 워크에서는 생성적 모델이 적대 관계의 적과 경쟁을 한다. 판별기 모델 (D, a discriminative model)은 샘플이 모델의 분포에서 왔을지, 실제 데이터의 분포에서 왔을지 결정하는 방법을 학습하게 된다.

 

본 논문에서는 생성자 모델 (G, a generative model)을 위조 지폐를 만들고, 그 위조 지폐가 적발되지 않도록 하는 위조지폐범에 비유하고 있으며 판별기 모델은 위조지폐를 검출하는 경찰에 비유하고 있다. 위조지폐범과 이를 잡는 경찰 사이의 경쟁은 각자의 모델이 각각의 방법을 개선시키면서 이루어지며 위조지폐가 실제 지폐와 구분하기 어려울 때 해당 과정이 종료된다. 

 

 

 

 

본 논문에서 소개하는 모델은 다층퍼셉트론을 이용한 모델로서 합성곱 레이어를 거치지 않는 아주 기초적인 모델이라고 할 수 있다. GAN이 작동되는 원리는 우선 생성자 모델 (G, a generative model)의 다층퍼셉트론에 랜덤 노이즈가 통과되고, 판별기 모델 (D, a discriminative model)은 생성 모델에 의해 생성된 샘플을 검증하는 방식이다. 두 모델 모두 역전파와 드롭 아웃 알고리즘만을 사용하여 학습을 진행하고, 생성모델에서 나온 샘플은 forward propagation만 사용한다.

 

즉, 다른 생성모델에서 사용하는 근사 추론(approximate inference)이나 마르코프 체인(Markov chains) 등의 복잡한 네트워크 필요없이 오직 forward propagaion, back propagation, drop out algorithm만으로 학습이 가능하다는 점을 언급하고 있다.

 

 


 

 

3. Adversarial Nets

 

 

적대적 신경망 (Adversarial nets)은 생성자 모델, 판별기 모델 모두 다층 퍼셉트론 구조일 때, 적용하기가 아주 간단하다.

 

 

GAN의 Framework

 

첫째로, 생성자 모델은 입력값인 noise variables의 분포 Pz(z)에서 분포 Pg를 따르는 데이터를 추출한다. 이를  데이터 공간 x를 G(z;θg)로 맵핑하여 나타낸다고 할 수 있다. 쉽게 해석하면, 샘플링된 랜덤한 노이즈 벡터 z를 입력으로 받아 학습데이터와 유사한 데이터를 생성하는 것이다. 이렇게 생성된 데이터는 생성모델 분포 Pg를 따르는 generated data라고 하고 G(z), G(z;θg)로 나타낸다. G(z;θg)에서 G는 θg를 파라미터로 가지고 있는 미분가능한 다층 퍼셉트론 구조를 가진 생성자 함수를 의미한다. 

 

 

그리고 두번째로, single scalar(스칼라) 값 (확률값 = 0,1 )을 output으로 가지는 판별기 모델 D(x;θd)를 정의할 수 있다. D는 x가 생성자 모델의 분포 Pg(Fake, generated data)가 아닌 원래 데이터 분포(Real data)에서 왔을 확률을 구한다. 즉, 생성자 모델에 의해 생성된 값 G(z)와 data를 입력으로 받아 진짜 데이터인지 아닌지의 여부를 0~1 사이의 값으로 나타낸다.

 

 

정리해보면, 판별자 모델 D는 생성자 모델 G에 의해 생성된 샘플과 실제 훈련 데이터에 대해 정확한 라벨링을 수행할 확률을 maximize하는 방향으로, 생성기 모델 G는 log(1D(G(z)))를 minimize하는 방향으로 학습을 진행한다. 이를 수식으로 나타내보면 아래와 같은 value function 목적함수로 나타낼 수 있고 아래의 식을 푸는 것이 곧 GAN의 학습 방식이라고 할 수 있다.

 

 

 

 


 

 

 

원본(real) data x를 판별자 (discriminator) 에 넣었을 때,

나오는 결과를 log로 취했을 때 얻는 기댓값

 

 


그리고 나오는 두번째 term의 의미.

 

 

 

 

생성기 모델 (generator)가 P z에서 샘플링 된 랜덤한 노이즈 벡터 z를 입력으로 받아

학습 데이터와 유사하게 생성한 데이터 G(z)와, 이를 판별기 모델 (discriminator) 에 넣었을 때,

그 결과를 ) 했을 때 얻는 기댓값

 

 


 

 

 

다시 목적함수로 돌아와서..

 

 

 

 

 

목적 함수 V(D,G)를 잘 살펴보면, G와 D가 목적함수를 바라보는 방향이 다르다는 것을 알 수 있다. 이를 G와 D의 각각의 관점 두개의 관점에서 살펴보도록 하자.

 

 


 

 

< D의 관점 > : D는 V(D,G) 최대화하는 것이다.

 

 

 

D는 입력받은 데이터가 학습 데이터에서 온 경우 1에 가까운 값을 반환하도록 학습한다. 반대로 생성기 모델에서 생성된 데이터 G(z)를 입력 받을 경우 0에 가까운 값을 반환하도록 한다.

 

이제 D가 아주 뛰어난 성능을 가져 가짜를 잘 판별한다고 가정하고 value function인

 

 

 


 

 

< G의 관점 >  : D와는 반대로G의 목적은 V(D,G)를 최소화시키는 것이다.

 

 

 

G의 관점에서 목적함수식이 최소화된다는 것은 곧 G가 실제 데이터의 분포 P data를 모방하는 P g를 잘 만들어낸다는 뜻이다.

G는 P z에서 샘플링 된 랜덤한 노이즈 벡터 z를 입력으로 받아 G(z)를 생성하는데, 이때 G(z) 실제 데이터의 분포 P data에서 샘플링 된 x와 유사하다면 D는 1에 가까운 확률 값을 반환할 것이다. 

 

마찬가지로, G가 아주 뛰어난 성능을 가져 진짜 같은 가짜를 잘 생성한다고 가정하고 value function인 V(G,D)의 구성요소 중 G와 관련이 있는 것은 두번째 term Ezpz(z) [log(1D(G(z)))] 이다. G(z)가 D를 통해 1에 가까운 확률 값을 반환 받는다면 괄호안의 log 수식은 log(11) 에 가까운 값이 되어 마이너스 무한대에 가까워진다. 즉, 목적 함수 V(D,G)는 굉장히 작은 값을 가지게 되는 것이다. 결과적으로 V(D,G)가 작아지기 위해서는 G가 학습 데이터를 잘 모방해야한다.

 

 

 

정리하자면, D는 V(D,G) 확률을 최대화시키기 위해 학습하고,

G는 V(D,G)를 최소화시키는 방향으로 학습된다.

 

 

 


 

*학습 초기에 Gradient가 너무 작은 문제??

 

실제로는, 앞서 보았던 목적함수식이 초기에는 생성기 모델 (G)의 원활한 학습을 위한 충분한 Gradient를 제공하지 못한다. 이러한 사실은 아래 그림을 통해 이해해 볼 수 있는데, 학습 초기에는 생성기 모델 (G)이 아래 왼쪽과 같은 형편없는 그림들을 생성한다. 이에, 판별자 모델 (D)는 굉장히 높은 확률로, 해당 생성이미지가 가짜라는 출력결과 즉, G(z) = 0에 가까운 값을 내보내게 되는데, 이때의 gradient값을 log(1-x) 그래프에서 확인해보면 굉장히 작음을 알 수 있다. 생성기 모델 (G)이 제대로된 학습하기에는 충분치 못한 gradient이기에 판별기 모델 (D)이 조기에 수렴해버리는 등의 경사소멸(vanishing gradients)을 야기할 수도 있다. 

 

 

출처 : 최윤제님의 '1시간만에 GAN(Generative Adversarial Network) 완전 정복하기' 발표 slide

 

 

 

이를 해결하기 위해, 휴리스틱하게 학습 초기에는 목적함수식을 log(1-x)에서 log(x)로 바꾸어주었다고 한다. 이를 통해, 학습초기에 생성기 (G) 모델이 높은 gradient 값을 통해 최대한 빠르게 판별기 모델 (D)를 속일 수 있는 방향으로 학습을 할 수 있게 된다. 아래 그림의 오른쪽 그래프를 보면, gradient가 음의 값을 가진 위의 그림과 달리 x가 0에 가까운 값을 가질 때, gradient 값이 무한대에 가깝다는 것을 확인할 수 있다. 

 

 

 

출처 : 최윤제님의 '1시간만에 GAN(Generative Adversarial Network) 완전 정복하기' 발표 slide


 

 

논문에서는 G와 D가 어떻게 학습을 진행하는지 아래와 같은 pedagogical한 그림을 제시하고 있다. 이를 통해, GAN의 학습과정을 개괄적으로 살펴보도록 하자.

 

 

 

 

위의 그림에서 초록색 실선은 P g를 의미한다. 즉, 생성자 모델이 입력값인 noise variables를 입력으로 받아 학습데이터와 유사한 데이터로 맵핑한 결과들의 분포를 의미한다. 검은색 굵은 점선은 실제 데이터의 분포를 의미한다. 파란색 점선은 판별기 모델이 출력한 값들의 분포를 의미한다.

 

 

 

초록색 실선 : 생성자 (generative) 분포 (=가짜)

파란색 점선 : 판별기 (discriminative) 분포

검은색 점선 : 실제 데이터 분포 (=진짜)

 

 

 

아래의 수평선 z는 uniform distribution을 따르는 noise를 의미하고, z위의 x 수평선은 생성자 모델 generator가 mapping하는 데이터의 분포를 의미한다.  z 수평선에서 x 수평선으로 매핑되는 화살표를 볼 수 있는데, 이 화살표가 바로, 임의의 z 공간에서 샘플 중에서 어떠한 값들이 샘플링 되어 x 수평선으로 mapping 되는지를 나타내는 것이다.

 

x 수평선 상에 mapping 된 점들은 위에서 살펴 보았던 생성자 모델에 의해 생성된 데이터, 생성모델 분포 Pg를 따르는 generated data인 G(z), G(z;θg) 이다. G(z), G(z;θg)의 분포 Pg가 앞서 살펴보았던 초록색 실선을 뜻한다. 

 

 

 

z 수평선 : noise의 분포 (  Z ~ P z(z) )

x 수평선 : 실제 data의 분포 ( X ~ P data(x) ), generator가 mapping하는 데이터의 분포

(  Z ~ P g(z) )의 위치를 확인할 수 있다)

 

 

 

 

본격적으로 GAN의 학습과정을 아래 그림을 통해 확인해보자.

 

 

 

 

(a): 학습초기에는 z에서 x공간으로 맵핑된 generated data(fake)의 분포가 실제 분포(real)과는 전혀 다르다. 이는 검은색 점선과 초록색 실선의 모양이 다르다는 점에서 확인할 수 있다. 그리고 판별기 모델 (D)의 성능 또한 저조한 것이 확인된다.

(b): 생성자 모델 (G) 을 고정하고 판별기 모델 (D) 을 학습한 결과이다. 판별기 모델 (D)이 실제 데이터(real)에 대해 안정적으로 1에 가까운 확률, 반대(fake)의 경우, 0에 가까운 확류를 출력하고 있다. 판별기 모델 (D)이 (a)보다는 안정적으로 real과 fake를 판별해내고 있음을 확인할 수 있다. 즉, D의 성능이 올라갔다.

(c): 이번에는 판별기 모델 (D)을 고정하고 생성자 모델 (G)를 학습한 결과이다. 생성자 모델 (G)는 z에서 x로의 맵핑이 실제 데이터의 분포와 가까운 분포를 형성하여 판별기 모델 (D)이 구별하기 힘든 방향으로 학습한다.

(d): b와 c 과정을 반복하면 real과 fake의 분포가 거의 비슷해져 구분할 수 없을 만큼 G가 학습되고, 마침내 D가 이 둘을 구분할 수 없게 되어 1/2의 확률을 출력한다.

 


 

4. Theoretical Results

 

 

G는 일때 얻어지는 샘플 G(z)의 확률분포를 P g 로 정의힌다. 그러므로, 아래의 Algorithm 1에 의해 P g가 실제 데이터의 분포 P data에 대한 좋은 estimator(추정량)로 수렴되도록 하는 것이 논문의 목표이다. Algorithm1은 목적함수인 value function을 최적화해주는 방식으로, 판별기 (Discriminator) 에 대한 weight를 먼저 업데이트 해주고, 그 다음 생성기 (Generator)에 대해서 weight update를 번갈아가며 해주는 방식을 제시한다.

 

 

 

 

 

 

Algorithm1을 해석하면 다음과 같다.

 


학습 epoch마다 아래의 과정 반복

    아래의 과정을 k번 반복 (논문에서 k = 1로 실험)

        m개의 노이즈 샘플 미니 배치를 P 로부터 샘플링
        m개의 실제 데이터샘플을 P 로부터 샘플링
        경사상승법을 이용해 식 전체를 최대화하도록 판별기 모델 (discriminator) 파라미터 업데이트!

        m개의 노이즈 샘플 미니 배치를 P g(z) 로부터 샘플링
        V(G,D)에서 를 최소화하도록 경사하강법을 이용해 생성자 모델 (generator) 파라미터 업데이트!

 

 

본 논문에 의하면, Algorithm1에 작성된 방식대로 무한한 capacity를 가지고, non-parametric한 모델 G, D가 Adversarial framework를 따라서 점차 성능을 높이면, 결국 G는 일때 얻어지는 샘플 G(z)의 확률분포 P g 가 실제 데이터의 분포 P data에 수렴하게 된다. 즉, global optimality는 P g = P data 이며, 이를 이론적인 수식을 통해 증명할 수 있음을 제시한다.

 

 

 

4.1  최적 해는 P g = P data 일 때 이다 ! ( Global Optimality of P g = P data )

 

가능한 모든 G에 대해서 최적의 판별기 (discriminator)는 다음과 같은 값을 가질 때 이다. 이를 수식적으로 증명해보자.

 

 

 

 

 

 

 

 

 

 

위의 과정을 통해 proposition 1이 타당하다는 결론을 얻었다. 

 

 

여기서 눈 여겨볼 부분은 D를 학습시키는 목적을 조건부 확률 P(Y = y | x )의 log-확률(log-likelihood)을 최대화하기 위함으로 해석할 수 있다는 것이다. 여기서 Y는 입력데이터 x가 P data에서 온건지 실제(real) 데이터의 샘플인지 (y=1) 아니면 생성기 모델 (Generator)가 모방해서 만든 데이터 즉, P g에서 온 것인지(y = 0) 나타내는 변수이다.

 

 

최적의 D를 구했을 때, 이를 우리의 목적함수 식에 대입하여  목적함수식을 global minimum of the virtual training criterion C(G)로 변환할 수 있고 그 과정은 다음과 같이 유도된다.

 

 

 

 

 

 

 

 

 

본 논문에서는 virtual training criterion C(G) 값은 생성기 모델 (generator)가 최소화 하는 기준이 되고, 이 값이 global minimum에 도달할 때는 오직 P g(x) = P data(x) 일 때라고 한다. 그리고 이 점에서의 C(G) 값은  -log4임을 Theorem1을 통해 밝힌다.

 

 

 

 

 

 

이를 직접 증명해보자.

 

 

KLD ( 쿨백 - 라이블러 발산 Kullback-Leibler divergence, KL 발산)

상대 엔트로피 (realtive entropy)로도 알려져 있는데, 두 가지 확률 분포 간의 유사도 (similarity)를 알아내는 데 사용하는 방법이다. 이것은 하나의 확률 분포 p가 두번째 기대 확률 분포 q와 어떻게 다른지를 측정한다.

두 확률 분포 사이의 KL 발산을 계산하는데 사용된 방정식 p(x)와 q(x)는 다음과 같다. 그 밖의 모든 점에서 p(x)가 q(x)와 같을 때 KL 발산은 0, 즉 최소가 된다.

 

 

 

JSD (옌센-섀넌 발산 Jensen-Shannon divergence, JS 발산)

두 확률 분포간의 유사도를 측정하는 또 다른 측정 기준이다. 이 발산을 정보 반경(information radius, IRaD)이라거나 평균에 대한 총 발산(total divergence to the average)이라고도 한다. 이 발산은 KL 발산을 바탕으로 삼는다. 그러나 KL 발산과는 달리 JS 발산은 본질적으로 대칭적이며 두 확률 분포 사이의 거리를 측정하는데 사용할 수 있다. 옌센-섀넌 발산의 제곱근을 취하면 옌센-섀년 거리가 되기 때문에, 이 발산을 거리 계량이라고 부를 수 있다. 

다음 아래의 방정식은 두 확률 분포 p와 q 사이의 옌센-섀넌 발산을 나타낸다. (p+q)는 중간점 측정기준(measure)이고, DKL은 쿨백-라이블러 발산이다.

 

 

 

 

4.1 절에서 본 논문이 말하고자 하는 바는 다음과 같다. 

 

앞서 정의한 minmax problem을 잘 풀기만 하면 (global optimal을 찾으면), 생성기 모델 (Generator)가 만드는 샘플들의 분포 P g가 실제 학습 데이터의 분포 P data와 정확히 일치하도록 할 수 있다는 것이다. 즉, 생성기 모델 (Generator)에 의해 만들어진 sample들을 판별기 모델 (Discriminator)가 실제와 구분할 수 없게 된다는 의미이다.

 

 

 

하지만, '어떤 모델을 사용하고, 어떤 알고리즘을 사용해야

해당 문제를 "잘" 풀어줄 것이냐' 별개의 문제이다. 

 

 

 

(출처 : 유재준님의 블로그 - https://jaejunyoo.blogspot.com/2017/01/generative-adversarial-nets-2.html)

 

 

 

 

4.2 Convergence of Algorithm 1 

 

 

이 논문에서는 이미  신경망 모델(MLP)을 사용하여 G와 D를 정의하고 각각을 fix한 상태에서 번갈아가며 문제를 풀어주는 전략을 제시했기 때문에 이제 남은 것은 제시한 알고리즘이 문제를 잘 풀어주는가? 혹은 Global Optimum인 P g = P data로 수렴하는가?를 확인하는 것이다.

 

 

 

 

Proposition2 . G, D가 충분한 능력을 갖고 있고 알고리즘 1의 각 단계에 있을 때, discriminator D는 G가 최적의 상태에 다다르게 만들어주고 p_g는 다음의 criterion을 향상시키는 방향으로 업데이트되어 p_data로 수렴한다.

Proof
Proposition 2에서 언급한 criterion에 있는 p_g의 함수인 V(G, D) = U(p_g, D)를 고려해봅시다. 우리는 U(pg, D)는 p_g에 있는 볼록한 부분(convex)이라는 걸 눈여겨 봐야합니다. 볼록 함수의 상한을 하위미분한 것은 최대값을 얻을 수 있는 점에서 함수를 미분한게 포함되어 있는데요, 수학적으로는 'f(x) = supα∈A fα(x) 와 fα(x)가 모든 α에 대해 x에서 convex일 때, β = argsupα∈A f_α(x)인 조건 아래 ∂fβ(x) ∈ ∂f 이다'로 표현할 수 있습니다. (하위미분 : 미분을 일반화하여 미분이 불가능한 볼록 함수를 미분하는데 사용하는 방법입니다.)

이를 좀더 알기 쉽게 나타내면 "corresponding한 G가 있을 때 최적의 D에서의 p_g를 만드는데 사용될 gradient를 계산하는게 U(p_g, D)에 들어있다"고 보시면 되겠습니다. supD U(pg,D)는 C(G)를 증명할 때 증명되었듯 균일한 global optima를 가진 p_g에 있는 convex입니다. 그러니 p_g를 조금씩, 그러나 충분할 정도로 업데이트 하다보면 p_g는 p_x에 수렴하게 됩니다. 이렇게 증명이 끝납니다.

출처 : https://velog.io/@minkyu4506/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0GANGenerative-Adversarial-Nets-%EB%A6%AC%EB%B7%B0

 

 

수학적으로 굉장히 어려워서 초록색 밑줄로 굉장하게 밑줄을 그어놓았다. 이에 대한 이해를 위해서는 많은 내용에 대한 공부가 필요할 것 같아서 KL, JSD 함수와 함께 차후에 좀 더 자세히 이해하도록 하자.

 

 

결론은, 해당 논문이 제시한 알고리즘 Algorithm1 이 실제로 global optimal을 찾아준다는 것까지 증명한 것이다. 다시 말해, G와 D가 충분한 capacity를 가진 환경에서 algorithm 1을 진행할 때, 각 스텝에서 discriminator가 주어진 G에 대해 최적점에 도달하는게 가능함을 보였고 만약 P g 가 위에서 제시한 criterion을 향상시키도록 업데이트 된다면,  P g = P data 에 수렴한다는 것 또한 보인 것이다.

 

 

 

** 논리적 허점??

 

 

해당 논문에서는 위에서 전개한 논리에 허점이 있음을 시인하고 이를 언급하고 있는데, 이는 다음과 같다. Adversarial nets는 함수 를 통해 분포 pg의 제한된 family만을 나타내게 되며, 논문에서 수행하는 최적화는 사실 P g를 직접 최적화 하는게 아닌 모델의 파라미터 를 최적화하는 것이다. 따라서, 앞서 전개한 증명과 완전히 합치하지 않으며 이는 최적의 모델로의 수렴이 보장되지 않음을 의미한다. 

 

 

그러나 실무에서 MLP가 보여주는 성능을 미루어보았을 때, 위와 같은 이론적 gurantee가 부족하다고 하더라도  충분히 실용적으로 사용할 수 있는 합리적인 모델이라는 사실을 말해준다.

 

 


 

 

5. Experiments

 

 


MNIST, TFD(Toronto Face Database), CIFAR-10에 대해 훈련.

generator에서는 ReLU, sigmoid activation을 섞어 사용.

discriminator에서는 maxout activation만을 사용.

discriminator 훈련시 드랍아웃 사용.

 

 

(저자들이 제안하는 프레임워크는 generator의 중간 레이어들에 dropout과 noise 추가를 이론적으로 허용하지만, 오직 generator의 최하단 레이어에만 노이즈를 추가했다고 함)

 

 

Gaussian Parzen window를 G에 의해 생성된 샘플들에 fitting하고 이렇게 추정된 분포 하에 얻어진 log-likelihood를 확인함으로써 P g 하에서 test set 데이터의 확률을 추정하였다. 이때 정규분포의 분산 파라미터는 교차검증을 통해 얻었다고 한다. 아래는 위의 방법으로 평가를 진행했을 때, GAN의 우수함을 보여주는 표이다.

 

(출처 : https://chaelin0722.github.io/paperreview/generative_adversarial_nets/)

 

 

 

 

 

 

 

 

 

아래의 그림은 Original 논문 이후에, NIPS에 2016 발간된 GAN tutorial 에서 발췌한 그림자료이다. GAN의 구동원리가 잘 정리되어있는 자료로 보여서 가져왔다. 시간이 허락한다면 해당 논문도 리뷰하면 좋을 것 같다는 생각이 든다. (57페이지에 달하는 논문이긴 하다..ㅎㅎ)

 

 

 

 

 

 

 


 

6. 코드 구현 

 

 

https://colab.research.google.com/drive/1OsKaImrqvrQmnRmXboOUi6f3nQ-T2i8H?usp=sharing 

 

Vanilla_GAN.ipynb

Colaboratory notebook

colab.research.google.com

 


 

 

7. Reference

 

https://chaelin0722.github.io/paperreview/generative_adversarial_nets/

 

[논문정리📃] Generative Adversarial Nets

-GAN-

chaelin0722.github.io

https://haawron.tistory.com/8

 

[학부생의 딥러닝] GANs | GAN : Generative Adversarial Nets

MNIST GAN - Git 새벽 두 시가 다 돼가는데 잠이 오질 않는다. 미뤄뒀던 GAN 리뷰나 해봐야겠다. Generative Adversarial Nets - https://arxiv.org/abs/1406.2661 URL에 써있듯이 2014년 6월에 나온 논문이다...

haawron.tistory.com

https://velog.io/@minkyu4506/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0GANGenerative-Adversarial-Nets-%EB%A6%AC%EB%B7%B0

 

[논문리뷰]GAN(Generative Adversarial Nets) 리뷰

안녕하세요. 밍기뉴와제제입니다. 이번에는 GAN을 리뷰해보겠습니다.

velog.io

https://jaejunyoo.blogspot.com/2017/01/generative-adversarial-nets-2.html

 

초짜 대학원생 입장에서 이해하는 Generative Adversarial Nets (2)

쉽게 풀어 설명하는 Generative Adversarial Nets (GAN)

jaejunyoo.blogspot.com

https://kh-mo.github.io/papers/2019/05/03/generative_adversarial_nets/

 

GAN, Generative Adversarial Nets · kh-mo's blog

GAN, Generative Adversarial Nets 03 May 2019 | 본 포스트는 딥러닝을 활용해 센세이션을 일으킨 Generative Model, GAN 논문을 정리한 것입니다. 2014년 NIPS에 억셉된 후 어마어마하게 발전된 개념이지요. 공부한

kh-mo.github.io

https://www.youtube.com/watch?v=jB1DxJMUlxY&t=549s 

https://www.youtube.com/watch?v=odpjk7_tGY0 

https://www.youtube.com/watch?v=-r9M4Cj9o_8&t=3545s 

 

관련글 더보기

댓글 영역