Deep Learning/GAN

[GAN] Probability Distribution

언킴 2021. 10. 30. 14:03
반응형

GAN을 설명하기 앞서 Supervised Learning과 Unsupervised Learning에 대해서 간략하게 다루고 넘어가자. Supervised Learning은 input으로 image가 들어오면 Discriminative Model이 해당 image를 분류하는 것을 학습한다. 여자와 남자의 image가 들어오면 해당 image가 남자인지, 여자인지 구별해 표시해주는 역할을 한다. 

 

Unsupervised Learning은 Generative Model을 예로 들 수 있다. 해당 model은 Latent code가 주어졌을 때 이에 맞게 image를 생성하는 것이며, Generative Model은 training data의 distribution 을 학습한다. 

 

간단한 Probability Distribution을 생각하면 가장 대표적인 게임인 주사위 던지기가 있다. 주사위를 던져서 나오는 확률값을 가지고 Probability Distribution을 만들 수 있고, 주사위 굴리기가 아니라 input을 image로 넣게 되면 아래와 같은 확률 분포를 뽑아낼 수 있을 것이다. 강아지와 나무의 경우 train data에 많이 존재하지 않아서 낮은 확률값을 보이고, 김태희의 경우 가장 많이 있어 확률 값이 가장 높은 것을 볼 수 있다. 

 

Generative model이 새로 생성한 image의 경우 pixel을 조정해서 만들기 때문에 실제 출력되는 image는 괴상한 형태를 띄게 될 것이다. 그러면 이 image는 원래의 train data는 존재하지 않기 때문에 확률값은 엄청나게 낮은 값이 나올 것이다. 

 

여기서 Generative model은 Discriminative Model이 자기가 생성한 이미지를 더이상 구별할 수 없을 때까지 이미지를 train data와 유사하게 만들어 내는 것을 한다. $Pdata(x)$가 실제 학습한 데이터의 분포고, $Pmodel(x)$는 Generative model이 생성한 데이터의 분포다. 

 

Generative Adversarial Networks

GAN은 총 두가지 model이 존재한다. 하나는 들어오는 입력값을 구별하는 역할을 수행하는 Discriminator model이고, 하나는 이미지를 생성하는 Generator model이다. 우리가 하고자 하는 것은 Generator model을 학습하려는 것인데, 그전에 Discriminator model을 학습시켜 진짜 image는 진짜로 학습하도록 하고, 가짜 image는 가짜라고 분류하는 것을 수행한다. input의 경우 image의 사이즈 만큼 들어가고 output의 경우 0, 1 진짜인지 가짜인지만 출력하면 되기 때문에 1차원의 값을 출력한다. 

 

반대로 Generator model의 경우에는 Latent Code를 입력받아 image를 생성하게 되고 생성된 image를 정교하게 만들어 Discriminator를 속여야된다. 진짜로 착각할 때 까지 학습을 진행한다. Discriminator Model의 Objective Function은 다음과 같다. 진짜 image는 1로 가짜 image는 0과 가까운 값을 출력하려고 학습한다.

 

$\underset{G}{min} \underset{D}{max} V(D,G) = E_{x\sim Pdata(x)}[logD(x)] + E_{z\sim p_z(z)}[log(1-D(G(z)))]$

$D\ should\ maximize\ V(D,G)$

$Maximum\ when\ D(x) = 1 $

$Maximum\ when\ D(G(z)) = 0 $

 

Genernator는 $E_{x\sim Pdata(x)}[logD(x)]$ 이 부분에서는 관여를 할 수 없다. 왜냐하면 아래의 그림에서 보이듯 진짜 image를 학습하는데 있어서는 Generator가 independent하기 때문에 변경할 수 없고, Discriminator의 Objective Function에서 $E_{z~p_z(z)}[log(1-D(G(z)))]$ 이 부분을 최소화 하는 작업을 수행한다.

 

$\underset{G}{min} \underset{D}{max} V(D,G) =  E_{z\sim p_z(z)}[log(1-D(G(z)))]$

$ G\ should\ minimize\ V(D,G)$

$Minimum\ when\ D(G(z)) = 1 $

 

 

Noise : z, Real : x, Generator : G, Dsicriminator : D

 

 

Generator 의 Objective Function은 $\underset{G}{min}\ E_{z\sim p_z(z)}[log(1-D(G(z)))]$로 $log(1-D(G(z)))$를 최소화 하는 쪽으로 접근하는게 맞지만 실제로 $D(G(z))$가 0일 때의 기울기 값은 상대적으로 작기 때문에 $log(D(G(z))$를 최대로 하는 값으로 접근법을 바꾸어 진행한다.