[Day 10] Boostcamp AI-Tech

donggunseo·2021년 8월 13일
0

Boostcamp AI-Tech

목록 보기
10/34

2021년 8월 13일
2주차 DL Basic
강의수강 : 9강 ~ 10강

1. 학습내용 정리

Generative Model에 대해 배우고 대표적인 VAE나 GAN에 대해서 간략한 개론을 들을 수 있었다. 사실 이 부분에 대해서는 워낙 많은 논문들이 쏟아지고 있고 디테일한 method의 트렌드가 계속 바뀌고 있기 때문에 개념을 확실히 잡고 가는 것이 중요하다고 생각한다.

어떤 새로운 sample xsamplex_{sample}을 만들어서 그 sample이 우리가 원하는 타겟 클래스에 있을 확률에 대한 확률분포 xsamplep(x)x_{sample} \sim p(x)를 찾고 그에 대한 Density estimation을 하는 것이 목적이다. 예를 들어 개에 대한 이미지에 대해 학습하여 모델이 개의 이미지를 새롭게 generate해야한다면 p(x)p(x)가 높아야만 샘플이 개처럼 보인다는 것이다. 이렇게 확률로 따지는 모델을 explicit 모델 이라고 한다.

주어진 이미지에 대해서 모델이 이미지를 생성하기 위해 주어진 이미지로부터 feature들을 스스로 배워야 하기 때문에 Unsupervised representation learning에 속한다.

일반적으로 이미지를 생성함에 있어서 파라미터는 매우 많다. RGB 이미지만 생각해도 한 픽셀당 256x256x256 -1 의 파라미터수를 갖게 되는데, 이는 각 픽셀들이 완전히 independent 하지 않고 capture하는 feature에 따라 여러 픽셀들이 서로 dependent할 수 있다. 따라서 우리는 이 파라미터 숫자들을 줄이기 위해 Autoregressive model을 사용한다. 이전에 RNN에 대해서 설명할 때 언급하였지만 시퀀스데이터를 다룰 때 이를 conditional probability와 chain rule을 활용하여 이전의 데이터들이 주어졌을 때 그 다음 데이터가 나타날 확률의 곱들로 전체 joint probability를 나타낼 수 있었던 것을 기억하자. 기본적으로 RNN과 비슷하다고 생각하면 좋을 듯 하다. NADE(Neural Autoregressive Density Estimator)Pixel RNN이 그 예시이다.

(1) VAE(Variational Auto-encoder)

논문 : Auto-Encoding Variational Bayes(2013)
참고자료 : jaan.io, ratsgo.github.io VI, ratsgo.github.io VAE
VAE의 시작은 Variational inference로 시작된다. VI란 사후확률(posterior) 분포 p(xz)p(x|z)를 다루기 쉬운 확률분포 q(z)q(z)로 근사하는 것을 말한다. 사후확률 분포를 계산하는 게 어려운 경우는 다음과 같다.

  1. marginal probability, 즉 사후확률의 분모인 𝑝(𝑥)=Σ𝑧𝑝(𝑥,𝑧)를 계산하기 힘든 경우
  2. likelihood, 즉 𝑝(𝑥|𝑧)를 더 복잡하게 모델링하고 싶은 경우
  3. prior, 즉 𝑝(𝑧)를 더 복잡하게 모델링하고 싶은 경우

KL divergence 식과 Bayes theorem을 활용하면 다음과 같이 변형할 수 있다.

DKL(q(z)p(zx))=DKL(q(z)p(z))+logp(x)Ezq(z)[logp(xz)]D_{KL}(q(z)||p(z|x)) = D_{KL}(q(z)||p(z)) + \log p(x) - E_{z \sim q(z)}[\log p(x|z)]

실제 문제에서는 사전확률(prior) p(z)p(z)와 우도(likelihood) p(xz)p(x|z)의 파라미터 역시 알지 못하는 경우가 많다. 그러나 VI의 목적은 q(z)q(z)를 찾는 것이 목적이므로 p(z)p(z)의 파라미터는 임의로 고정시켜도 관계 없다고 한다(logp(x)\log p(x)). 이에 따라 우리는 q(z)q(z)의 파라미터를 찾는 것과 동시에 p(xz)p(x|z)의 파라미터 또한 추정해야 한다. 이때 EM algorithm을 사용한다. q(z)q(z)의 파라미터를 θq\theta_q, p(xz)p(x|z)의 파라미터를 θl\theta_l라고 할때 EM algorithm(Expectation-maximization algorithm)은 다음과 같은 과정을 수렴할 때까지 반복한다.

Expectaion : 𝐷𝐾𝐿(𝑞(𝑧)||𝑝(𝑧|𝑥))를 줄이는 θ𝑞를 찾는다. (몬테카를로 방법을 활용한 VI, SVI 등 적용)
Maximization : E-step에서 찾은 θ𝑞를 고정한 상태에서 log𝑝(𝑥)의 하한(lower bound)을 최대화하는 𝑝(𝑥|𝑧)의 파라메터 θ𝑙를 찾는다.

위의 식에 대해서 logp(x)\log p(x)에 대해 줄이면

logp(x)=Ezq(z)[logp(xz)]DKL(q(z)p(z))+DKL(q(z)p(zx))\log p(x) = E_{z \sim q(z)}[\log p(x|z)] - D_{KL}(q(z)||p(z)) + D_{KL}(q(z)||p(z|x))

이고, jansen's inequality에 의해 KLD는 항상 0보다 크거나 같기 때문에 logp(x)\log p(x)의 하한(ELBO)은 다음과 같다.

logp(x)Ezq(z)[logp(xz)]DKL(q(z)p(z))\log p(x) \geq E_{z \sim q(z)}[\log p(x|z)] - D_{KL}(q(z)||p(z))

E-step에는 KLD를 줄이기 위해 q만을 업데이트하므로 이 과정에서 logp(x)\log p(x)는 변하지 않지만 KLD를 줄이기 위해서는 결론적으로 logp(x)\log p(x)도 줄여야 한다. 따라서 θ𝑞를 고정한 상태에서 ELBO항의 값을 줄이는 방향으로 θ𝑙를 업데이트하면 원하는 결과를 얻을 수 있다.

다시 모델로 돌아와서, VI를 이용해 우리가 원하는 posterior distribution pθ(zx)p_{\theta}(z|x) 에 가장 근사한 variational distribution qϕ(zx)q_{\phi}(z|x) 을 최적화하는데 목적이 있다. 이는 곧 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)pθ(zx)qϕ(zx)]=Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]+Eqϕ(zx)[lnqϕ(zx)pθ(zx)]=Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]+DKL(qϕ(zx)pθ(x,z))\ln p_{\theta}(D) = \text{E}_ {q_{\phi}(\bold{z}|\bold{x})}[\ln p_{\theta}(\bold{x})] \\ = \text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{p_{\theta}(\bold{x}, \bold{z})}{p_{\theta}(\bold{z} | \bold{x})}] \\ =\text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{p_{\theta}(\bold{x}, \bold{z})q_{\phi}(\bold{z} | \bold{x})}{p_{\theta}(\bold{z} | \bold{x})q_{\phi}(\bold{z} | \bold{x})}] \\=\text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{p_{\theta}(\bold{x}, \bold{z})}{q_{\phi}(\bold{z}|\bold{x})}] + \text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{q_{\phi}(\bold{z}|\bold{x})}{p_{\theta}(\bold{z} | \bold{x})}] \\ =\text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{p_{\theta}(\bold{x}, \bold{z})}{q_{\phi}(\bold{z}|\bold{x})}] + D_{KL}(q_{\phi}(\bold{z}|\bold{x}) || p_{\theta}(\bold{x}, \bold{z}))

lnpθ(D)\ln p_{\theta}(D) 는 데이터에 대한 분포를 나타내므로 그 값이 고정되어 있다. 마지막 식의 첫 번째 항은 ELBO(Evidence Lower Bound)로 tractable quantity이다. 두 번째 항은 앞에서 언급하였던 KL divergence 항으로 우리가 줄이고자 하는 항이지만 intractable하다. 따라서 이 항을 줄이기 위해서는 ELBO를 maximize하는 것이 필요하다.

Eqϕ(zx)[lnpθ(x,z)qϕ(zx)]=lnpθ(x,z)p(z)qϕ(zx)qϕ(zx)dz=Eqϕ(zx)[pθ(xz)]DKL(qϕ(zx)p(z))\text{E}_ {q_{\phi}(\bold{z}|\bold{x})} [\ln \frac{p_{\theta}(\bold{x}, \bold{z})}{q_{\phi}(\bold{z}|\bold{x})}] = \displaystyle\int \ln \frac{p_{\theta}(\bold{x}, \bold{z})p(\bold{z})}{q_{\phi}(\bold{z}|\bold{x})}q_{\phi}(\bold{z}|\bold{x})d\bold{z} \\ = \text{E}_ {q_{\phi}(\bold{z}|\bold{x})}[p_{\theta}(\bold{x}|\bold{z})] - D_{KL}(q_{\phi}(\bold{z}|\bold{x}) || p(\bold{z}))

ELBO 항을 풀어보면 기댓값의 정의에 의해 다음과 같이 분해가 가능하다. 마지막 식의 첫 번째 항을 Reconstruction Term이라 하고 두 번째 항을 Prior Fitting Term이라 한다. Reconstruction Term은 결론적으로 decoder가 reconstruct 하는 loss를 줄여주는 역할이라고 할 수 있으며, Prior Fitting Term은 latent distribution(z\bold{z}-space)이 prior distribution과 비슷해 지도록 강제하는 항이다. Prior Fitting Term은 반드시 미분 가능해야 하므로 p(z)p(\bold{z})에 아무 분포나 사용할 수는 없다. 논문에서는 isotropic Gaussian distribution을 사용하며 그에 따른 minimize해야할 식이 다음과 같다.

DKL(qϕ(zx)N(0,1))=12i=1D(σzi2+μzi2ln(σzi2)1)D_{KL}(q_{\phi}(\bold{z}|\bold{x}) || \mathscr{N}(0,1)) = \frac{1}{2} \displaystyle\sum_{i=1}^D(\sigma_{\bold{z}_ i}^2 + \mu_{\bold{z}_ i}^2-\ln(\sigma_{\bold{z}_ i}^2)-1)

(2) Generative Adversarial Network(GAN)


논문 : Generative Adversarial Networks
참고자료 : ratsgo.github.io GAN
GAN은 Discriminator와 Generator로 구성된 게임이론에 비롯된 Generative model이다. D 입장에서 보면, 실제 데이터(xx)를 입력하면 높은 확률이 나오고(D(x)D(x)를 높임) 가짜 데이터(G(z)G(z))를 입력하면 확률이 낮아지도록 ((1D(G(z))(1-D(G(z)) 를 낮춤 = D(G(z))D(G(z))를 높임) 학습한다. G 입장에서는,
zero-mean Gaussian으로 뽑은 노이즈 z를 받아 생성된 가짜 데이터(G(z)G(z))를 넣었을 때 실제 데이터처럼 확률이 높게 나오도록 ((1D(G(z))(1-D(G(z)) 를 높임 = D(G(z))D(G(z))를 낮춤) 학습한다. 이 두 네트워크를 한 번에 학습하지 않고 하나를 고정하고 다른 것을 학습시키는 방식으로 따로따로 업데이트한다.

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

이상적인 경우, G가 학습이 매우 잘 되었으면 G(z)G(z)가 실제 데이터가 일치할 것이다(G(z)=x,pG(x)=pdata(x)G(z) = x, p_G(x) = p_{data}(x)). 이것을 기반으로 optimal discriminator를 DG(x)=pdata(x)pdata(x)+PG(x)D_G^* (x) = \frac{p_{data}(x)}{p_{data}(x) + P_G(x)}로 이를 목적식에 넣게 되면 데이터의 분포와 G가 생성하는 데이터의 분포 사이의 차이를 줄이는 최종적인 목적식이 다음과 같이 나오게 된다.

DKL[pdata,pdata+pG2]+DKL[pG,pdata+pG2]log4=2DJSD[pdata,pG]log4D_{KL}[p_{data}, \frac{p_{data}+p_{G}}{2}] + D_{KL}[p_{G}, \frac{p_{data}+p_{G}}{2}] - \log4 \\ =2 \cdot D_{JSD}[p_{data}, p_{G}] - \log4

DJSDD_{JSD}는 Jenson-Shannon Divergence라고 불리는데 자세한 정의는 이 글을 참고하면 좋다.

2. 과제

없음

3. 피어세션

랜덤 피어세션을 했는데 딱히 얻은게 없다. 우리 조 피어세션에서는 내가 VAE에 대해 잘 이해가 가지 않아 전반적인 설명을 요구하였고 용범님이 잘 설명해주셔서 위와 같은 학습정리를 얻을 수 있었다.

4. 마무리

주말에 VAE와 GAN에 대한 좀 더 자세한 공부를 해볼 예정이다.

0개의 댓글