위 그림은 유명한 generative model 도식.

의외로 처음 GAN을 가르칠때는 대부분 스킵하지만 

공부할 수록 정말 공부할게 많은 그림이라고 생각이 든다. 

 

-----------------------------------------------------------------------------------

 

첫번째 분류인 Explicit / Implicit 구분은 명시적으로 어떠한 분포를 적고 모델링하느냐 아니냐의 차이

Explicit : 명시적으로 어떠한 확률 분포를 정해서 분석 (수식으로 분포를 정의할 수 있는 경우 )

Implicit : 명시적으로 확률 분포를 정하지 않고 모델링 (ex. GAN, NeRF)

 

Explicit의 두 갈래 중 

Tractable : 식을 적당하게 풀 수 있는 선에서 작성하되, 그 풀이는 명확하게

Approximate : 식은 정확하게 쓰되, 그 풀이가 간단하지 않으니 대체 식을 사용해서 풀이를 적당히 우회 

 

 

Generative model을 공부하기 위한 초석

 

머신러닝은 Probability Density를 찾기 위한 과정이다.

예를 들어 Classification 모델의 결과물은 입력 이미지가 각 Class에 해당할 확률을 의미한다.

모델의 출력물을 확률로 해석하도록 학습하거나, 모델의 출력물이 확률 분포를 담을 수 있도록 수식을 설계하는 것  

 

Generative model도 결국 random성을 가진  noise가 들어가서
train data의 분포를 닮은 inference image가 나오는 것 처럼 언뜻 생각되지만,
그건 inference 과정에서의 해석이고 

train 과정을 잘 살펴보면 train data의 집합이 들어가서 distribution을 출력하도록 학습이 된다. 

 

Prior vs Posterior

Prior는 말그대로 사전확률.

어떠한 사건이 관측되기 전에 선험적으로 알고 있는 확률이다.  EX) P(A)

Posterior는 어떠한 사건이 관측되고 나서 업데이트된 확률이다.  EX) P(A|B) : B라는 사건이 관측되고 나서의 A의 확률

 

 

 

위와 같은 식에서 P(A)는 사전 확률, P(B|A)는 likelihood, P(A|B)는 posterior 확률이다. 

 

따라서 Posterior ∝ likelihood * prior라는 식을 얻을 수 있다. (P(B)도 하나의 사전확률로 고정이니까)

 

 

이러한 분포를 추정하는 방법에서는 Maximum Likelihood와 Maximum a Posterior 방식 두가지가 있다.

prior는 구할 수가 없으니, likelighood를 구해서 가장 높은 모델을 고르거나

Posterior가 가장 높아지는 모델을 고르거나 하는 상황이다. 

 

경험적으로 Maximum likelihood의 결과가 더 좋다고 알려져있다. 

 

따라서 초창기의 GAN을 비롯한 VAE등의 generative model 들은 Maximum likelihood를 loss로 사용한다 

 

 

'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
01. GAN의 성능지표 비교 설명 - IS vs FID  (0) 2022.02.04
[GAN] Intro - GAN이란?  (0) 2020.11.10

GAN의 성능지표가 되는 score 두 가지 비교

(요즈음은 대부분 FID, IS만 사용하는 것 같다.

이미 IS/ FID만으로 아래 세 가지 value를 담을 수 있으며, FID와 LPIPS가 겹치는 개념이라서 인듯하다.)

 

우선 GAN이 달성해야 하는 목표는 아래 세가지라고 볼 수 있다.

1. 얼마나 실제 같은 real한 이미지가 나오는지 (Quality)

2. 이미지가 다양하게 만들어지는지 (Diversity)

3. 얼마나 실제 이미지(=학습 이미지)의 분포와 비슷하게 나오는지 (Similarity)

 

 

+ IS, FID 부분은 아래 블로그를 참조했으며, 수식 및 이미지도 가져와서 사용했다.

https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

 

GAN — How to measure GAN performance?

In GANs, the objective function for the generator and the discriminator usually measures how well they are doing relative to the opponent…

jonathan-hui.medium.com


IS : Inception Score

Inception 모델(Classification)에서 이미지 및 그 레이블의 편차의 다양성을 담기 위해 설계된 수치 

 

IS 설명

: Diversity란 결국 Randomness와 같은 의미로, entrophy를 통해 측정한다. 

엔트로피는 random의 정도를 표현하는 값으로,

random할수록 = 예측 불가능할 수록 = diversity 할수록 => 높은 값이 나온다. 

즉, 엔트로피에 기반한 IS 역시 diverse 할수록 높은 값이 나와야 한다.

 

: 다만, GAN 모델의 학습 방향 자체는 이와 달리  

즉 낮은 엔트로피를 갖도록 학습이 된다. (이때 y는 class label, x는 image)

 (이러한 학습 방향을 통해 이미지의 quality를 높인다.

  class label y를 잘 예측한다는 뜻은 더욱 실제와 비슷한 이미지가 나온다는 뜻)

 

+) 엔트로피에 대한 짧은 remind

: 아래 두 분포에서 y값을 가지고 x를 역추적 하기 더 어려운 것은 p2(blue)이다. 

따라서 p1보다 p2의 엔트로피가 더 높다. 

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

 

따라서 IS 는 KL divergence를 기반으로, "P(y|x)와 p(y)의 분포의 다른 정도"를 계산한다. 

 

+ KL divergence는 두 분포의 다른 정도를 표현함으로써, 그 값이 낮을 수록 두 분포가 유사하다는 뜻이다.

이 역시 엔트로피 기반으로 두 분포가 유사할 수록 엔트로피가 낮기 때문에 더 낮은 KL divergence 값이 나온다. 

 

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732


FID : Frechet Inception Distance

FID 역시 inception model을 기반으로 한 수치로, inception model에서 추출한 feature간의 거리를 측정한다.

 

FID 설명

: 기존에 simmilarity를 판단하기 위해 pixel 간의 단순 거리를 측정하는 L2 loss 등이 있었다. 

다만 L1, L2 loss는 단순히 pixel 간의 값을 빼서 계산하는 값으로 실제 사람이 인지하는 두 이미지 간의 차이와는 

그 대소관계가 다르다. 

 

: 따라서, 실제 이미지 x와 생성된 결과 이미지 g를 각각 inception model에 통과시킨 후 추출한 피쳐의

평균과 공분산을 계산하여 두 분포 사이의 거리를 나타내어 계산한다. (similarity)

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

+ ) 앞의 항 : x와 g 사이의 평균의 L2 loss, 뒤의 항 : 두 분포 사이의 공분산을 구하는 diagonal 계산식

 

GAN은 학습 이미지의 분포를 더 잘 담을 수록 더 좋은 성능을 내는 것이니,

두 분포사이의 차이가 적을 수록 = FID 값이 작을 수록 더 좋은 성능이다.

 


'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
02. Generative model - 기본1 prior vs posterior  (0) 2022.02.15
[GAN] Intro - GAN이란?  (0) 2020.11.10

1. GAN

     : Generative Adversarial Network


-> Generative Adversarial Network

 

  생성한다. 무엇을 생성할까 ? 답부터 말하자면 모든 것이 될 수 있다.

대표적으로는 image classification 문제에서 정답이 아닌 이미지를 생성할 때 사용된다. 아래와 같은 GAN의 구조에서 G 가 generative, 즉 생성하는 모델인데 그 결과는 실제 데이터와 구분 짓기 위해 fake라고 한다.


 

-> Generative Adversarial Network

적대적이다.

  GAN 구조를 살펴보면 생성하는 모델인 Ganerative model과 그것을 구분해내기 위해 Discriminator model이 있다.

그 두 모델을 경찰과 위조지폐범으로 비유하는 경우가 많은데, 딥러닝에 대한 기본 지식이 있는 사람이라면 쉽게 받아들일 수 있다. 

 

  먼저 Generative 모델은 입력으로 주어지는 noise를 갖고 fake data를 만들려고 한다. 물론 초기에는 아주 형편없는 이미지가 만들어진다. 당연히 discriminator model은 이를 쉽게 fake data라고 구분해낼 수 있다. 하지만 이러한 과정을 반복하면서 Generator는 discriminator의 감시망을 피할 수 있는 data를 만드는 법을 배운다. 


  물론, discriminator도 가만히 있지는 않는다. 몇 step을 반복한 후에는 generator를 고정시키고 discriminator를 학습시켜 발전된 fake data 역시 구분할 수 있게 발전한다. 이렇듯 서로 피드백하며 학습되는 구조 덕분에 adversarial이라는 이름이 붙게 된다. 

+ Recent posts