본문 바로가기

Deep Learning

Generative Adversarial Networks

*사용된 모든 영문 image의 출처는 cs231n 강의 자료입니다.*

 

<Generative Adversarial Networks>

    1. GAN introduction

    2. GAN

    3. Variants of GAN


GAN introduction

 

Branches of ML

 

Supervised Learning

"how to classify"

 

Unsupervised Learning

"Learn the distribution of training data"

 

 

 

 

Probability distribution

  • Probability variable이 특정한 값을 가질 확률을 나타내는 함수

 

Discrete probability distribution

Probability variable X의 개수를 정확히 셀 수 있을 때의 함수

 

Continuous probability distribution

Probability variable X의 개수를 정확히 셀 수 없을 때의 함수 (probility density function으로 표현)

e.g. Normal distribution

 

Kernel density estimation

 

 

Probability distribution in Image data

  • Image data는 다차원 feature 공간의 한 점으로 표현
  • Image의 distrbution을 근사하는 model train
  • Multivariate probability distribution

i.e. 2 feature Image data distribution

 

 

Generative Models

  • 실존하지 않지만 있을 법한 image 생성
  • A statistical model of the joint probability distribution
  • An architecture to generate new data instances

Discriminative vs. Generative

→ Original image들의 distribution을 잘 modeling하는 게 목표 !!

 → 시간이 지나면서 model이 original data의 distribution을 train

  • Pmodel = Distribution of images generated by the model
  • Pdata  = Distribution of actual images

    → Pmodel(x) approximates Pdata(x)


GAN

 

Generative Adversarial Network

  • GeneratorDiscriminator 두 network를 활용

 

 

Objective Function of GAN

 

  • Discriminator should Maximize V(D, G):

    Real image → 1, Fake image → 0

  • Generator should Minimize V(D, G):

    Generate된 Fake image가 Discriminator에 의해 1 이 나오게 train

    Ez~pz(z)[log(1 - D(G(z)))]만 Objective Function으로 사용

 

 

Discriminator:

    D(x) = probability: a sample came from the real distribution (Real: 1 ~ Fake: 0)    # 확률값

Generator:

    G(z) = new data instance

 

 

  • Sample x: From real data distribution
  • Sample latent code z: from Gaussian distribution

 

  • Ex~p_data(x)[logD(x)]: 원본 data distribution에서 sample x를 뽑아 logD(x)의 기대값 계산

    → Maximum when D(x) = 1

  • Ez~p_z(z)[log(1 - D(G(z)))]: noise distribution에서 sample z를 뽑아 log(1 - D(G(z)))의 기대값 계산

    → Maximum when D(G(z)) = 0

 

 

 

 

Goal of GAN

  • Pg → Pdata, D(G(z)) → 1/2

    G(z)의 fake image를 Discriminator가 더 이상 구분 불가

  • Pg에 noise 추가 시, Pdata와 다른 new data instance 생성

 

 

 

PyTorch Implementation (Toy GAN)

import torch
import torch.nn as nn

D = nn.Sequential(
	nn.Linear(784, 128),
    nn.ReLU(),
    nn.Linear(128, 1),
    nn.Sigmoid())
    
G = nn.Sequential(
	nn.Linear(100, 128),
    nn.ReLU(),
    nn.Linear(128, 784),
    nn.Tanh())
    
criterion = nn.BCELoss()

d_optimizer = torch.optim.Adam(D.parameters(), lr=0.01)
g_optimizer = torch.optim.Adam(G.parameters(), lr=0.01)
  • Use MNIST data set: 28 x 28 x 1 → 784 input dimension
  • Use BCE loss
  • Generator의 마지막 Tanh function: -1 ~ 1 → 0 ~ 255 pixel (다른 function 쓰더라도 pixel 범위만 mapping시키면 된다!)

 

# Assume x be real image of shape (batch_size, 784)
# Assume z be random noise of shape (batch_size, 100)

While True:
	# Train D
    loss = criterion(D(x), 1) + criterion(D(G(z)), 0)
    loss.backward()
    d_optimizer.step()
    
    # Train G
    loss = criterion(D(G(z)), 1)
    loss.backward()
    g_optimizer.step()
  • Train Discriminator loss: min((D(x) -1)² + D(G(z) - 0)²)
  • Train Generator loss: min(D(G(z) - 1)²)
  • 2 optimizer 사용 이유?

    → Discriminator와 Generator의 학습 격차에 따른 오류 방지

    (일반적으로 Generator는 new instance를 생성해야하기 때문에 초기에 Discriminator보다 loss 줄어드는 속도가 느림)

 

 

Visual of Experiment

  • Not cherry-picked (random)
  • Not memorized the training set → 노란색 box안 data가 마지막 data와 조금 다르다!
  • Competitive with the better generative models
  • Images represent sharp

Variants of GAN

 

Deep convolution layer

 

 

Deep Convolution GAN (DCGAN), 2015

DCGAN network

  • Use Deep Convolution network

 

 

Discriminator 

  • Use convolution, Leaky ReLU
  • Leaky ReLU: (음수값 x 0.01)로 음수 값 일부 반영

Reaky ReLU

 

Generator

  • Use deconvolution, ReLU
  • No pooling layer (Deep Convolution layer 사용)
  • Use Batch Normalization
  • Adam optimizer(lr=0.0002, beta1 = 0.5, beta2 = 0.999)

 

 

 

 

 

'Deep Learning' 카테고리의 다른 글

GAN generator Loss function  (0) 2022.06.15
Self-Supervised Learning  (0) 2022.06.14
Attention Models  (0) 2022.06.12
Convolution 연산 시, channel 수 / filter 수와 parameter 수 관계 정리  (0) 2022.06.09
Recurrent Neural Networks  (0) 2022.06.08