[U stage DAY 10] Generative Models

먼지감자·2021년 8월 13일
1

AI Boostcamp 2기

목록 보기
9/48
post-custom-banner

강의 내용 복습

(09강) Generative Models 1

Introduction

강아지 사진이 주어졌다고 가정했을 때, 다음과 같은
확률분포 p(x)를 학습하고자 한다.

  • Generation : 강아지처럼 생긴 Xnew p(x)X_new ~ p(x) sampling
  • Densitiy Estimation : 이미지 x가 주어졌을 때 그 분포 p(x)를 확인하여 강아지인지, 아닌지 구분 (anomaly detection) // 입력이 주어졌을 때 확률값을 얻을 수 있는 모델(explicit model) / 단순히 generation 만 할 수 잇는 모델 (implicit model)
  • Unsupervised representation learning : 데이터가 공통적으로 가지고 있는 특징을 배운다 (feature learning)

그렇다면 우리는 어떻게 p(x)를 표현할까?

Learning a Generative Model

  • Basic Discrete Distribution

    • 베르누이 분포
      동전 던지기처럼 0또는 1 두가지 경우의 수가 나오는 분포 / 이 확률을 표현하기 위한 수는 한개가 필요함

      D = {head, tail}
      P(x = head) = p / p(x = tail) = 1-p
      x ~ Ber(p)

    • 카테고리 분포
      주사위 던지기처럼 n개의 경우의 수가 나오는 분포 / 이 확률을 표현하기 위한 수는 n-1개 , sum to one이기 때문에

      D = {1, ... ,m}
      P(Y = i) = pip_i i=1mpi=1\sum_{i=1}^{m} p_i = 1
      Y ~ Cat(p1, ..., pm)

  • Example
    (r,g,b) ~ p(R,G,B)
    RGB 이미지를 표현할 때 나올수 있는 경우의 수는
    256 x 256 x256
    이 분포를 표현하기 위해 필요한 parmeter의 수는
    256 x 256 x256 - 1

    X1 , .. ,Xn 까지 n개의 흑백사진이 있다고 가정했을 때,
    가능한 states 는 2n2^n
    p(x1, ... ,xm)를 표현하기 위해 필요한 parameter 수는
    2n12^n - 1

즉 엄청나게 많은 파라미터가 필요하다는 것
파라미터가 많으면 학습이 어렵기 때문에 수를 줄여야 한다.

n개의 픽셀이 모두 독립(fully independent)이라고 생각하면
가능한 states 는 2n2^n
이 분포를 표현하기 위해 필요한 parmeter의 수는 n개이다.
이렇게 하면 parameter수는 줄일 수 있지만 표현력이 떨어지기 때문에 아래와 같은 방법이 필요하다.

  • Conditional Independence
    • chain rule
      p(x1,,xn)=p(x1)p(x2x1)p(x3x1,x2)p(xnx1,,xn1)p\left(x_{1}, \ldots, x_{n}\right)=p\left(x_{1}\right) p\left(x_{2} \mid x_{1}\right) p\left(x_{3} \mid x_{1}, x_{2}\right) \cdots p\left(x_{n} \mid x_{1}, \cdots, x_{n-1}\right)
      결합확률 분포를 조건부 확률의 곱으로 바꾼다.
    • Bayes' rule
      p(xy)=p(x,y)p(y)=p(yx)p(x)p(y)\begin{aligned} &p(x \mid y)=\frac{p(x, y)}{p(y)}=\frac{p(y \mid x) p(x)}{p(y)} \end{aligned}
    • Coiditional independence
      z 가 주어졌을 때 x,y가 독립이라면 x라는 변수를 표현할때에 z가 주어지면 y 는 상관이 없다는 얘기
       If xyz , then p(xy,z)=p(xz)\begin{aligned} &\text { If } x \perp y \mid z \text { , then } p(x \mid y, z)=p(x \mid z) \end{aligned}
      chain rule 의 뒷단에 있는 수식을 날려줄 수 있다.

chain rule을 사용하면 fully dependent 모델과 param 수는 같다. 하지만 이 chian rule과 Coiditional independence을 조합하면 Conditional Independence를 표현할 수 있다.

먼저 chain rule을 사용했을 때 parameter 갯수는 다음과 같다,

p(x1,,xn)=p(x1)p(x2x1)p(x3x1,x2)p(xnx1,,xn1)p(x1):1 parameterp(x2x1):2 parameters (one per p(x2x1=0) and one per p(x2x1=1))p(x3x1,x2):4 parametersp\left(x_{1}, \ldots, x_{n}\right)=p\left(x_{1}\right) p\left(x_{2} \mid x_{1}\right) p\left(x_{3} \mid x_{1}, x_{2}\right) \cdots p\left(x_{n} \mid x_{1}, \cdots, x_{n-1}\right) \\ {p\left(x_{1}\right)} : \text {1 parameter}\\ p\left(x_{2} \mid x_{1}\right) : \text {2 parameters (one per $p\left(x_{2} \mid x_{1} = 0 \right)$ and one per $p\left(x_{2} \mid x_{1} = 1\right)$)}\\ p\left(x_{3} \mid x_{1}, x_{2}\right) : \text{4 parameters}

총 파라미터 수는 1+2+22+...+2n1=2n11+2+2^2+ ... +2^{n-1} = 2^n -1로, 기존의 갯수와 달라진 것이 없다.

i+1번째 픽셀은 i 번째 픽셀에만 dependent하다고 가정하면(Markov assumption),

Xi+1X1,...,Xi1Xi Markov assumption X_{i+1} \perp X_{1}, ... , X_{i-1} \perp X_{i} \text { Markov assumption }

chain rule로 얻어지는 수식이 다음과 같이 간단하게 표현된다.

p(x1,,xn)=p(x1)p(x2x1)p(x3x2)p(xnxn1)p\left(x_{1}, \ldots, x_{n}\right)=p\left(x_{1}\right) p\left(x_{2} \mid x_{1}\right) p\left(x_{3} \mid x_{2}\right) \cdots p\left(x_{n} \mid x_{n-1}\right)

이 경우 필요한 parameter 개수는 2n-1 개이다.

결론은 chain rule로 결합분포를 조건부 확률로 바꾼뒤 Markov assumption과 Conditional independence를 사용하여 파라미터 갯수를 조절할 수 있다는 것이다.

이처럼 chain rule, Conditional independence를 잘 활용한 모델을 Auto-regressive Model 이라고 한다.

Auto-regressive Model


28 x 28 흑백 이미지를 가지고 있다고 가정했을 떄
우리의 목표는 분포 p(x)=p(x1,...,x784)p(x) = p(x_1, ... , x_784) 를 학습하는 것이다.
chain rule, Conditional independence 을 사용하여 Auto-regressive Model을 만들어보자.

이때, 주의할 것은 이전 한개에만 dependent하지않고 이전 모든 데이터에 dependent해도 Auto-regressive Model이라고 부른다.
또한 Auto-regressive Model을 만들기 위해 데이터에 순서를 정해야하는데 (ordering) 이 순서에 따라 성능이 좌우되기도 한다.

  • Nade(Neural Autoregressive Density Estimator)

    앞선 모든 데이터에 dependent 하게 만든 모델.

    p(xix1:i1)=σ(αihi+bi) where hi=σ(W<ix1:i1+c)p\left(x_{i} \mid x_{1: i-1}\right)=\sigma\left(\alpha_{i} \mathbf{h}_{i}+b_{i}\right) \text { where } \mathbf{h}_{i}=\sigma\left(W_{<i} x_{1: i-1}+\mathbf{c}\right)
    • explicit model 로, 주어진 데이터에 대해 확률(density)을 계산할 수 있다.
    • 마지막 레이어에 가우시안 분포를 사용해서 continuous하게 만들었다.
  • Pixel RNN

    • RNN을 통해 generate하는 모델
    • ordering에 따라 두가지의 모델로 나뉜다.
      • Row LSTM
      • Diagonal BiLSTM

(10강) Generative Models 2

Variational Auto-encoder

autoencoder는 generative model이 아니다.

  • Variational inference (VI)


    관찰값이 주어졌을 때, 내가 관심있는 랜덤 변수의 분포인 사후확률(Posterior distribution)을 가장 잘 근사할 수 있는 분포를 구하는 것이 목표이다.
    이를 근사한 것이 바로 Variational distribution이다. KL divergence를 사용하여
    Variational distribution를 구한다.
lnpθ(D)=Eqϕ(zx)[lnpθ(x)]=Eqϕ(zx)[lnpθ(x,z)pθ(zx)]=Eqϕ(zx)[lnpθ(x,z)qϕ(zx)qϕ(zx)pθ(zx)]=Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]+Eqϕ(zx)[lnqϕ(zx)pθ(zx)]=Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]ELBO +DKL(qϕ(zx)pθ(zx))Objective \begin{aligned} \ln p_{\theta}(D) &=\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln p_{\theta}(x)\right] \\ &=\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{p_{\theta}(x, z)}{p_{\theta}(z \mid x)}\right] \\ &=\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{p_{\theta}(x, z) q_{\phi}(z \mid x)}{q_{\phi}(z \mid x) p_{\theta}(z \mid x)}\right] \\ &=\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{p_{\theta}(x, z)}{q_{\phi}(z \mid x)}\right]+\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{q_{\phi}(z \mid x)}{p_{\theta}(z \mid x)}\right] \\ &=\underbrace{\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{p_{\theta}(x, z)}{q_{\phi}(z \mid x)}\right]}_{\text {ELBO } \uparrow}+\underbrace{D_{K L}\left(q_{\phi}(z \mid x) \| p_{\theta}(z \mid x)\right)}_{\text {Objective } \downarrow} \end{aligned}

어떻게 구할것이냐, 궁극적으로는 우리가 Posterior distribution과 Variational distribution의 KL divergence를 줄이는 것이 목적인데, 이게 불가능 하므로 ELBO를 계산해서 키움으로서 반대급부로 내가 원하는 KL divergence의 값을 줄일 수 있는 것이다.

ELBO를 나누어 보면 , Reconstruction term과 Prior Fitting Term으로 나뉜다.

Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]ELBO =ϕϕlnpθ(xz)p(z)qϕ(zx)qϕ(zx)dz=Eqϕ(zx)[pθ(xz)]Reconstruction Term +DKL(qϕ(zx)pθ(zx))Prior Fitting Term  This term minimizes  the reconstruction loss  of an auto-encoder.  This term enforces the  latent distribution to be  simiarto the prior  distribution. \begin{aligned} \underbrace{\mathbb{E}_{q_{\phi}(z \mid x)}\left[\ln \frac{p_{\theta}(x, z)}{q_{\phi}(z \mid x)}\right]}_{\text {ELBO } \uparrow} &=\int_{\phi_{\phi}} \ln \frac{p_{\theta}(x \mid z) p(z)}{q_{\phi}(z \mid x)} q_{\phi}(z \mid x) d z \\ &=\underbrace{\mathbb{E}_{q_{\phi}(z \mid x)\left[p_{\theta}(x \mid z)\right]}}_{\text {Reconstruction Term }} + \quad \underbrace{D_{K L}\left(q_{\phi}(z \mid x) \| p_{\theta}(z \mid x)\right)}_{\text {Prior Fitting Term }}\\ & \begin{array}{c} \text { This term minimizes } \\ \text { the reconstruction loss } \\ \text { of an auto-encoder. } \end{array} \begin{array}{c} \text { This term enforces the } \\ \text { latent distribution to be } \\ \text { simiarto the prior } \text { distribution. } \end{array} \\ \end{aligned}

Reconstruction term은 encoder를 통해 x를 latent space로 보냈다가 다시 decorder를 통해 돌아올 때 reconstruction loss 를 줄이는 역할이고,ㅡ
Prior Fitting Term은 x라는 이미지들을 latent space에 올렸을 때 이루는 분포가 Prior distribution과 같아지도록 하는 역할이다.

  • VAE의 한계
    • explicit mocel이 아니다 : 입력이 주어졌을 때 likelihood를 계산하는 것이 어렵다(intractable model)
    • Prior Fitting Term 가 미분가능해야 한다. : KL divergence를 사용하므로 대부분 모든 output dimension이 독립인 isotropic Gaussian 을 사용한다. 이때의 loss function은 다음과 같다.
      DKL(qϕ(zx)N(0,l))=12i=1D(σzi2+μzi2ln(σzi2)1)D_{K L}\left(q_{\phi}(z \mid x) \| \mathcal{N}(0, l)\right)=\frac{1}{2} \sum_{i=1}^{D}\left(\sigma_{z_{i}}^{2}+\mu_{z_{i}}^{2}-\ln \left(\sigma_{z_{i}}^{2}\right)-1\right)

하지만 prior dustribution으로 가우시안분포를 사용하지 않을 때는 AAE(Adversarial Auto Encoder) 를 사용한다.
GAN을 활용해서 latent distribution 사이의 분포를 맞춰주는 것, 이는 VAE의 prior fitting term 을 GAN objective func으로 바꿔주는 것이다. 이렇게 하면 샘플링만 가능하면 어떤 것이든 latent 분포로 사용할 수 있다.

Generative Adversarial Network

  • GAN이란?
    Generative Adversarial Network는 생성자(generator, G)와 구분자(discirimiator, D), 두 네트워크를 적대적(adversarial)으로 학습시키는 비지도 학습 기반 생성모델(unsupervised generative model)이다.

    G는 입력 z를 받아 실제 데이터와 유사한 데이터를 만들어내도록 학습되고, D는 G가 생성한 가짜 데이터를 구별하도록 학습된다. 이렇게 적대적으로 학습하여 실제 데이터의 분포에 가까운 데이터를 생성하는 것이 GAN의 목표이다.

  • GAN과 VAE의 차이

    VAE는 encoder(q)와 decoder(p)로 구성되며 encoder는 관측된 데이터 x를 받아서 잠재변수 z를 만들어내고, decoder는 encoder가 만든 z를 활용해 x를 복원해내는 역할을 한다.

    GAN은 Generator(G) 와 Discriminator(D)로 구성되며 G는 Zero-Mean Gaussian으로 생성된 z를 받아서 가짜 데이터를 만들고, D는 진짜와 가짜를 구분하도록 학습된다. GAN의 가장큰 장점은 두 네트워크가 적대적으로 학습하며 성능이 점점 좋아진다는 것이다.

  • GAN의 목적함수

    minGmaxDV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log{1D(G(z))}]\min _{G} \max _{D} V(D, G)=E_{x \sim p_{\text {data }}(x)}[\log D(x)]+E_{z \sim p_{z}(z)}[\log \{1-D(G(z))\}]

    GAN은 G와 D사이의 minmax게임, 즉 G는 목적함수를 작게만드는 방향으로 학습하고, D는 목적함수를 크게만드는 방향으로 학습하며 균형점을 찾아가는 방식이다.

    먼저 D입장에서 본 목적함수는 다음과 같다.

    maxDV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log{1D(G(z))}]\max _{D} V(D, G)=E_{x \sim p_{\text {data }}(x)}[\log D(x)]+E_{z \sim p_{z}(z)}[\log \{1-D(G(z))\}]

    실제 데이터(x)를 입력하면 높은 확률이 나오도록 하고(D(x)를 높임), 가짜 데이터(G(z))를 입력하면 확률이 낮아지도록(1−D(G(z))를 낮춤=D(G(z))를 높임) 학습된다. 다시 말해 D는 실제 데이터와 G가 만든 가상데이터를 잘 구분하도록 조금씩 업데이트된다.

    다음은 G의 입장에서 본 목적함수이다.

    minGV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log{1D(G(z))}]\min _{G} V(D, G)=E_{x \sim p_{\text {data }}(x)}[\log D(x)]+E_{z \sim p_{z}(z)}[\log \{1-D(G(z))\}]

    Zero-Mean Gaussian으로 뽑은 노이즈 z를 받아 생성된 가짜 데이터(G(z))를 D에 넣었을 때, 실제 데이터처럼 확률이 높게 나오도록(1−D(G(z))를 높임=D(G(z))를 낮춤) 학습된다. 다시 말해 G는 D가 잘 구분하지 못하는 데이터를 생성하도록 조금씩 업데이트된다.

    G가 학습이 매우 잘되어 G가 생성한 데이터의 분포가 실제 분포가 일치하는 경우 (G(x)=x,pg(x)=pdata(x)G(x) = x, p_g(x) = p_{data}(x)), 최적의 구분자 (optimal discriminator) D는 다음과 같다.

D=maxDV(D)=Expdata (x)[logD(x)]+Ezpz(z)[log{1D(G(z))}]=Expdata (x)[logD(x)]+Expg(x)[log{1D(x)}]=xpdata (x)logD(x)dx+xpg(x)log{1D(x)}dx=xpdata (x)logD(x)+pg(x)log{1D(x)}dx\begin{aligned} D^{*}=& \max _{D} V(D) \\ =& E_{x \sim p_{\text {data }}(x)}[\log D(x)]+E_{z \sim p_{z}(z)}[\log \{1-D(G(z))\}] \\ =&E_{x \sim p_{\text {data }}(x)}[\log D(x)]+E_{x \sim p_{g}(x)}[\log \{1-D(x)\}] \\ =&\int_{x} p_{\text {data }}(x) \log D(x) d x+\int_{x} p_{g}(x) \log \{1-D(x)\} d x \\ =&\int_{x} p_{\text {data }}(x) \log D(x)+p_{g}(x) \log \{1-D(x)\} d x \end{aligned}

위의 식이 최대화되는 지점은 우리가 알고자 하는 D(x)로 미분한 값이 0이 되는 지점이고, 식을 정리하면 다음과 같다.

D(x)=pdata (x)pdata (x)+pg(x)D^{*}(x)=\frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)}

위의 식에 pg(x)=pdata(x)p_g(x) = p_{data}(x)를 대입해서 풀명 최적의 구분자 D는 1/2로 수렴한다.

이제 목적함수를 최적화하는 과정은 실제 데이터 분포와 G가 생성한 데이터 분포간의 차이를 최소화하는 것이다. 두 분포의 차이는 젠슨-섀넌 다이버전스(Jensen-Shannon divergence)로 계산하여 이를 최소화한다.

minGV(D,G)=Expdata (x)[logD(x)]+Expg(x)[log{1D(x)}]=Expdata (x)[logpdata (x)pdata (x)+pg(x)]+Expg(x)[logpg(x)pdata (x)+pg(x)]=xpdata (x)logpdata (x)pdata (x)+pg(x)dx+xpg(x)logpg(x)pdata (x)+pg(x)dx=log4+xpdata (x)log2pdata (x)pdata (x)+pg(x)dx+xpg(x)log2pg(x)pdata (x)+pg(x)dx=log4+xpdata (x)logpdata (x)pdata (x)+pg(x)2dx+xpg(x)logpg(x)pdata (x)+pg(x)2dx=log4+KLD(pdata (x)pdata (x)+pg(x)2)+KLD(pg(x)pdata (x)+pg(x)2)=log4+2JSD(pdata (x)pg(x))\begin{aligned} \min _{G} V\left(D^{*}, G\right) &=E_{x \sim p_{\text {data }}(x)}\left[\log D^{*}(x)\right]+E_{x \sim p_{g}(x)}\left[\log \left\{1-D^{*}(x)\right\}\right] \\ &=E_{x \sim p_{\text {data }}(x)}\left[\log \frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)}\right]+E_{x \sim p_{g}(x)}\left[\log \frac{p_{g}(x)}{p_{\text {data }}(x)+p_{g}(x)}\right] \\ &=\int_{x} p_{\text {data }}(x) \log \frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)} d x+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{\text {data }}(x)+p_{g}(x)} d x \\ &=-\log 4+\int_{x} p_{\text {data }}(x) \log \frac{2 \cdot p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)} d x+\int_{x} p_{g}(x) \log \frac{2 \cdot p_{g}(x)}{p_{\text {data }}(x)+p_{g}(x)} d x \\ &=-\log 4+\int_{x} p_{\text {data }}(x) \log \frac{p_{\text {data }}(x)}{\frac{p_{\text {data }}(x)+p_{g}(x)}{2}} d x+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{\frac{p_{\text {data }}(x)+p_{g}(x)}{2}} d x \\ &=-\log 4+K L D\left(p_{\text {data }}(x) \| \frac{p_{\text {data }}(x)+p_{g}(x)}{2}\right)+K L D\left(p_{g}(x) \| \frac{p_{\text {data }}(x)+p_{g}(x)}{2}\right) \\ &=-\log 4+2 \cdot J S D\left(p_{\text {data }}(x) \| p_{g}(x)\right) \end{aligned}
  • GAN 변형 모델들

    • DCGAN
      Deep Convolutional GAN(DCGAN)은 GAN을 개선한 모델. GAN은 학습이 어렵다는 점이 최대 단점인데, DCGAN은 대부분의 상황에서 안정적으로 학습이 되는 아키텍처이다.

    • CycleGAN

    • Progressive-GAN


참고

GAN : https://ratsgo.github.io/generative%20model/2017/12/20/gan/
advanced GAN :
https://ratsgo.github.io/generative%20model/2017/12/21/gans/


과제 수행 과정 및 결과

없음


피어 세션

  • VAE의 구조
    VAE는 인풋, 인코더, 레이턴트 스페이스, 디코더, 아웃풋의 구조
    encoding 해서 나오는 레이턴트 벡터가 점 하나만 있는 것이 아니라 주변에 노이즈를 부여
    노이즈를 부여하는 과정에서 가우시안 분포 활용
    노이즈 부여의 의미는 변형을 시키는데 있음

  • VAE와 트랜스포머의 구조 차이점
    트랜스포머는 인코더, 디코더의 구조
    VAE는 인코더 이후 레이턴트 스페이스로 보내는 임베딩 연산이 추가적으로 존재

  • 레이턴트 스페이스의 장점
    데이터 변형이 용이함

  • 변형은 ELBO로 이뤄지는지
    강화 학습 등 다양한 방법론 존재.
    ELBO는 x가 z로 인코딩과 디코딩 후의 probability를 의미
    ELBO로 변형이 이루어지지는 않음

  • GAN을 활용 방안
    sinGAN, 게임 쪽에서 활용되기도 함


학습 회고

이번주는 체력이 부족해서 공부하기가 많이 힘들었다.
다음주부터 아침에 간단한 운동이라도 해서 체력을 늘려가야겠다.
본격적으로 deep learning 에 대해 배운 일주일이었는데 내가 많이 부족하다는 것을 알았고
더 확실하게 개념을 잡고 가야겠다.
또 강의 영상을 받아쓰는 형식으로 블로그 글을 쓰니 남이 보면 이해못할 글이다.
강의 내용과 추가 공부내용을 적절히 합쳐 가치있는 글을 쓰자.

profile
ML/AI Engineer
post-custom-banner

0개의 댓글