본문 바로가기

학습공간/빅데이터활용실무

[11주차] Deep Generative Models

반응형

 Deep Generative Models (VAE, GAN)

기본 개념은 단순히 주어진 데이터만으로 구성되어있는 분포를 추정하여 찾아내는 것이다. 그다음 추정된 분포를 잘 활용하면 주어진 데이터와 매우 유사한 fake data 생성이 가능할 것이다. 서론에서 분포 추정을 조금 다룬 뒤, 대표적인 모델인 VAE, GAN 두 가지에 대해서 학습하도록 한다.

 

• Density Estimation (밀도 예측)
- 알 수 없는 실제 분포 \(𝑝\)(𝒙) 에 가장 가까운 데이터에 대한 분포 \(𝑝_𝜽\)(𝒙) 를 추정하는 것이다.
- 그리고, 추정한 분포로부터 우리는 sample 𝒙 를 뽑아낼 수도 있다.
- 가령, training dataset 𝐷 = {𝒙¹ 𝒙²,…, 𝒙ⁿ} 가 주어진다면, 단순한 𝑑 개의 저 차원 데이터{𝒙𝑖 = (𝒙𝑖₁,…,𝒙𝑖𝑑)}에 대하여
아래와 같이 가우시안 분포나 혼합 분포, 또는 커널 분포 추정으로 표현해볼 수 있다.

- but, what if the data distribution is complex and high-dimensional ?
고 차원 데이터는 단순 가우시안으로 해석되지 않는다.


• Deep Generative Models (딥러닝 생성 모델)
- 따라서, 고차원 이미지나 그래프 데이터를 뉴럴 넷을 이용하여 분포 함수를 표현해보고, 실제 데이터 분포에 가깝게 만들어내는 대표적인 두 가지 방법에 대해서 공부하도록 한다.

- Variational Autoencoder (VAE) and Generative Adversarial Network (GAN)
- 복잡하고, 고차원 데이터 분포에 대한 매우 효과적인 모델링이 가능하다.

- 알고리즘 요약: (분포 추정) 원본과 동일한 분포를 가지는 사본(fake data)를 만들어내는 과정
   -. 앞서의 오토인코더는 자기 자신을 출력으로 가지며, 차원 축소에 의의가 있었다.
   -. 이것은 복원에 사용되는 Decoder 부분을 잘 활용하여 학습 데이터 셋을 극대화시킨다.
(VAE)학습 데이터 𝜽 로, 추정치 𝝓 를 극대화하는 방법
(GAN)2 개의 서로 상반된 𝐺(𝜽) , 𝐷(𝝓) 경쟁으로 강화하는 방법

 

 VAE vs. GAN (cVAE vs cGAN) : 비교

Decoder 부분을 활용하여 새로운 데이터를 생성하는 reparameterization trick : 𝒛 개념을 익힌다.

 

• Variational Autoencoder (VAE)
  -. 이 모델의 기본 구조는 근본적으로 잠재 변수 모델로부터 새로운 데이터를 생성하는 것이다.
  -. 실제 분포를 추정하고 싶기 때문에, 이에 근사한 가능도를 최대로 할 수 있는 매개변수 θ 를 찾도록 학습한다.
Generative Model as a Latent Variable Model

  ※ \(𝑝_𝜽\)(𝒙) 의 다루기 힘든 문제를 해결하기 위하여 변분 추론(variational inference)을 사용할 것이다.
  -. \(𝑝_𝜽(𝒙)\) = \(E_{𝒛∽{\color{Blue}𝑝(𝒛)}}\)[\(𝑝_𝜽(𝒙|𝒛)\)]
  \(= \int {𝑝_𝜽(𝒙|𝒛)𝑝(𝒛)}\, 𝑑𝒛\) ⋯ 모든 \(𝒛_𝑖\) 가능도에 대해선 사실상 불가
  \(\simeq \frac{1}{𝑛}\sum \sideset{_{}^{}}{_{𝑖=1}^𝑛}{}\, 𝑝_𝜽(𝒙|𝒛_𝑖)\), \(𝒛_𝑖∽𝑝(𝒛)\) (approximation with samples of 𝒛 - intractable)
  ※ 여기에서 대용할 수 있는 근사 사후 분포(approximate posterior distribution) \(𝑞_𝝓\)(𝒛|𝒙) 를 소개한다.
  -. \(𝑝_𝜽(𝒙)\) = \(E_{𝒛∽{\color{Red}𝑞_𝝓(𝒛|𝒙)}}\)[\(𝑝_𝜽(𝒙|𝒛){\color{Red} \frac{𝑝(𝒛)}{𝑞_𝝓(𝒛|𝒙)} }\)] (approximate inference - more practical !) (with new parameters 𝝓)
⇒ Learn the parameters 𝜽 and 𝝓 (to maximize the lower bound of the likelihood of training data: \(𝑝_𝜽(𝒙)\)

(log-Likelihood : log \(𝑝_𝜽(𝒙)\) maximaize 문제는,,,)
    \[ \eqalign{ log\, 𝑝_𝜽(𝒙) &= log \int 𝑝_𝜽(𝒙|𝒛)𝑝(𝒛)\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ intractable}} \\ &= log \int 𝑝_𝜽(𝒙|𝒛) \frac{𝑝(𝒛)}{{\color{Red}𝑞_𝝓(𝒛|𝒙)}} {\color{Red}𝑞_𝝓(𝒛|𝒙)}\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ approximate inference}} \\ &≥ \int log\, [𝑝_𝜽(𝒙|𝒛) \frac{𝑝(𝒛)}{𝑞_𝝓(𝒛|𝒙)}] 𝑞_𝝓(𝒛|𝒙)\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ Jensen's inequality}} \\ &= \int log\, [𝑝_𝜽(𝒙|𝒛)] 𝑞_𝝓(𝒛|𝒙)\, 𝑑𝒛 − \int log\, [\frac{𝑞_𝝓(𝒛|𝒙)}{𝑝(𝒛)}] 𝑞_𝝓(𝒛|𝒙)\, 𝑑𝒛 \\ &= E_{𝒛∽𝑞_𝝓(𝒛|𝒙)} [log\, 𝑝_𝜽(𝒙|𝒛)] − 𝐷_{𝐾𝐿} [𝑞_𝝓(𝒛|𝒙)∥𝑝(𝒛)] \\ &= {−𝐿(𝒙)} {\color{Blue}\mbox{ ⋯ lower bound to }{log\, 𝑝_𝜽(𝒙)}} } \]
⇒ 따라서, 위 그림과 같이, 학습된 근사 추론을 사용하는 방향성 그래픽 모델이 된다.
⇒ 이것은 전통적인 autoencoder (autoencoder with regularizaed 𝒛) 와 유사하다.
⇒ 학습 데이터로부터 log-Likelihood 하한이 최대가 되는 parameters 𝜽 and 𝝓 를 학습시킨다.
    (log-Likelihood 하한에 대하여 음수를 취한 −𝐿(𝒙) minimize 문제로도 바꿀 수 있다...)

• VAE Training (max [log \(𝑝_𝜽(𝒙)\)] → min [−𝐿(𝒙)])
  -. Loss function 𝐿(𝒙) = [Reconstruction Error + Regularization] ⋯ (−𝐿(𝒙) : lower bound to log \(𝑝_𝜽(𝒙)\))
autoencoders 복원오류의 성질과 정규 분포를 씌운 DKL 거리가 멀어지지 않게 해주는 정규화 성질로 나뉜다.

  -. VAE as a Neural Network (* Reparametrization trick : 𝒛)
직접 샘플링하면 Backpropagation 불가하여 z 추가 (non-parameter 분포 사용)

  → 인코더로부터 𝒛 샘플링 후 디코더만 사용하여 새로운 데이터 생성 가능.

  -. 주어진 학습 데이터 셋에 대하여 목적 함수를 최소화 하도록 한다. (\(𝒛_𝑖\) are sampled from \(𝑞_𝝓(𝒛_𝑖|𝒙_𝑖)\) at each iteration)
\[ 𝐽(𝜽,𝝓) = \frac{1}{𝑛} \sum_{𝑖=1}^{𝑛} {[ -log\, 𝑝_𝜽(𝒙_𝑖|𝒛_𝑖) + 𝐷_{𝐾𝐿} [𝑞_𝝓(𝒛_𝑖|𝒙_𝑖)∥𝑁(𝟎,𝐈)] ]} \]
• VAE Inference (Generating Data)
  -. 인코더 : 기존 학습 분포로부터 𝒛 를 샘플링,
  -. 디코더 : 𝒛 결합으로 새로운 데이터 \(\hat{𝒙}\) 를 생성.


• Conditional VAE (cVAE) - 조건부 추가
  -. 위 내용에서 조건부 확률로 (Label) 𝒚 가 입력으로 들어간다는 점이 다르다. (with condition 𝒚)
  -. 데이터가 생성될 때 어떤 조건이 같이 고려되며 생성된다. 주어진 조건에 따른 데이터의 분포를 추정한다.

  ※ \(𝑝_𝜽\)(𝒙|𝒚) 의 다루기 힘든 문제를 해결하기 위하여 변분 추론(variational inference)을 사용할 것이다.
  -. \(𝑝_𝜽(𝒙|𝒚)\) = \(E_{𝒛∽{\color{Blue}𝑝(𝒛)}}\)[\(𝑝_𝜽(𝒙|𝒚,𝒛)\)]
  \(= \int {𝑝_𝜽(𝒙|𝒚,𝒛)𝑝(𝒛)}\, 𝑑𝒛\) ⋯ 모든 \(𝒛_𝑖\) 가능도에 대해선 사실상 불가
  \(\simeq \frac{1}{𝑛}\sum \sideset{_{}^{}}{_{𝑖=1}^𝑛}{}\, 𝑝_𝜽(𝒙|𝒚,𝒛_𝑖)\), \(𝒛_𝑖∽𝑝(𝒛)\) (approximation with samples of 𝒛 - intractable)
  ※ 여기에서 대용할 수 있는 근사 사후 분포(approximate posterior distribution) \(𝑞_𝝓\)(𝒛|𝒙,𝒚) 를 소개한다.
  -. \(𝑝_𝜽(𝒙|𝒚)\) = \(E_{𝒛∽{\color{Red}𝑞_𝝓(𝒛|𝒙,𝒚)}}\)[\(𝑝_𝜽(𝒙|𝒚,𝒛){\color{Red} \frac{𝑝(𝒛)}{𝑞_𝝓(𝒛|𝒙,𝒚)} }\)] (approximate inference - more practical !) (with new parameters 𝝓)
⇒ Learn the parameters 𝜽 and 𝝓 (to maximize the lower bound of the likelihood of training data: \(𝑝_𝜽(𝒙|𝒚)\)

(log-Likelihood : log \(𝑝_𝜽(𝒙|𝒚)\) maximaize 문제는,,,)
    \[ \eqalign{ log\, 𝑝_𝜽(𝒙|𝒚) &= log \int 𝑝_𝜽(𝒙|𝒚,𝒛)𝑝(𝒛)\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ intractable}} \\ &= log \int 𝑝_𝜽(𝒙|𝒚,𝒛) \frac{𝑝(𝒛)}{{\color{Red}𝑞_𝝓(𝒛|𝒙,𝒚)}} {\color{Red}𝑞_𝝓(𝒛|𝒙,𝒚)}\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ approximate inference}} \\ &≥ \int log\, [𝑝_𝜽(𝒙|𝒚,𝒛) \frac{𝑝(𝒛)}{𝑞_𝝓(𝒛|𝒙,𝒚)}] 𝑞_𝝓(𝒛|𝒙,𝒚)\, 𝑑𝒛 {\color{Blue}\mbox{ ⋯ Jensen's inequality}} \\ &= \int log\, [𝑝_𝜽(𝒙|𝒚,𝒛)] 𝑞_𝝓(𝒛|𝒙,𝒚)\, 𝑑𝒛 − \int log\, [\frac{𝑞_𝝓(𝒛|𝒙,𝒚)}{𝑝(𝒛)}] 𝑞_𝝓(𝒛|𝒙,𝒚)\, 𝑑𝒛 \\ &= E_{𝒛∽𝑞_𝝓(𝒛|𝒙,𝒚)} [log\, 𝑝_𝜽(𝒙|𝒚,𝒛)] − 𝐷_{𝐾𝐿} [𝑞_𝝓(𝒛|𝒙,𝒚)∥𝑝(𝒛)] \\ &= {−𝐿(𝒙|𝒚)} {\color{Blue}\mbox{ ⋯ lower bound to }{log\, 𝑝_𝜽(𝒙|𝒚)}} } \]
⇒ 위와 동일한 방식으로, 조건부가 반영된 형태로 log-Likelihood 하한을 구해낼 수가 있다.
    (log-Likelihood 하한에 대하여 음수를 취한 −𝐿(𝒙|𝒚) minimize 문제로도 바꿀 수 있다...)

• cVAE Training
  -. Loss function 𝐿(𝒙|𝒚) = [Reconstruction Error + Regularization] ⋯ (−𝐿(𝒙|𝒚) : lower bound to log \(𝑝_𝜽(𝒙|𝒚)\))
위와 동일하고, y 조건부가 고려되어 학습한다.

  -. cVAE as a Neural Network (* Reparametrization trick : 𝒛)
위와 동일하고, 인코더와 디코더 입력 단에 각각 y 조건부가 반영된다는 것만 다르다.

  → 차원 축소의 기능보다는 𝒚 조건부가 반영된 분포를 추정하는데 사용된다.

• cVAE Inference (Generating Data)
  -. 조건부 : (Label) 𝒚 입력으로 들어감,
  -. 인코더 : 기존 학습 분포로부터 𝒛 를 샘플링,
  -. 디코더 : (Label) 𝒚 기댓값을 가지는 새로운 데이터 \(\hat{𝒙}\) 를 𝒛 결합으로부터 생성.
• Generative Adversarial Network (GAN)
  -. 이 모델은 2 개의 뉴럴 넷을 사용하여 암시적 생성 모델로부터 새로운 데이터를 생성하는 것이다.
  -. Adversarial Learning 개념을 도입하여 Generative Model(\(𝐺_𝜽\))를 추정하도록 학습한다.
Generator 𝜽 (도둑) vs. Discriminator 𝝓 (경찰)

⇒ 도둑과 경찰이라는 뉴럴 넷의 싸움을 예시로 생각해보자. 우리는 진짜와 유사한 새로운 데이터를 생성해내기 위한 도둑이라는 모델이 필요하다. 여기에서 경찰이라는 새로운 모델을 도입하여, 서로가 서로를 강화시키도록 각각 학습시키게 된다면 어떻게 될까? Generator (도둑) 입장에서는 Real Data 와 매우 유사한 Fake Data 를 생성해낸다. 단, Discriminator (경찰) 가 정분류하지 못하도록 Fake Data 가 Real Data 에 가까워지도록 옵션을 건다. 다시 말하면 Fake Data(0) → Real Data(1) 가 될수있게 Maximize 하도록 학습한다. Discriminator (경찰) 은 Generator (도둑) 가 생성한 Fake Data 오분류 및 Real Data 정분류 하도록 학습한다.

  -. Analogy of Two Player MinMax Game - Adversarial Learning
     - Generator \(𝐺_𝜽\)
       : try to fool the discriminator by generating realistic fake data \(\tilde{𝒙} = 𝐺_𝜽(𝒛)\)
       : learn the parameters 𝜽 to make \(𝐷_𝝓(𝐺_𝜽(𝒛))\) close to 1 (real)
    - Discriminator \(𝐷_𝝓\)
       : try to distinguish between real data 𝒙 and fake data \(\tilde{𝒙} = 𝐺_𝜽(𝒛)\)
       : learn the parameters 𝝓 to make \(𝐷_𝝓(𝒙)\) close to 1 (real) and \(𝐷_𝝓(𝐺_𝜽(𝒛))\) close to 0 (fake)
\[ \operatorname*{max}\limits_{𝜽}\, \operatorname*{min}\limits_{𝝓}\, E_{𝒙∽𝑝_{𝑑𝑎𝑡𝑎}} [-log\, 𝐷_𝝓(𝒙)] + E_{𝒛∽𝑝(𝒛)} [-log\, (1-𝐷_𝝓(𝐺_𝜽(𝒛)))] \]
generative model 생성 방법은 VAE 방법과 유사하다.

⇒ 분포를 추정하여 새로운 데이터를 만드는 방식에 게임 전략 아이디어를 도입하면, 두 모델이 서로 강화되어 나중에는 Real / Fake 구분이 모호할 정도로 경계선이 없어지게 된다. 여기에서는 𝒛 샘플링에서 사용되는 분포의 종류가 상관 없지만, 일반적으로 단순 Normal 분포를 사용한다.

• GAN Training
  -. GAN as a Neural Network
     Discriminator \(𝐷_𝝓\), modeled as a neural network
      • It distinguishes between real data 𝒙 and fake data \(\tilde{𝒙} = 𝐺_𝜽(𝒛)\)
      • so that \(𝐷_𝝓(𝒙)\) → 1 (real) and \(𝐷_𝝓(𝐺_𝜽(𝒛))\) → 0 (fake)
     Generator \(𝐺_𝜽\), modeled as a neural network
      • It generates realistic fake data \(\tilde{𝒙} = 𝐺_𝜽(𝒛)\)
      • so that \(𝐷_𝝓(𝐺_𝜽(𝒛))\) → 1 (real)
     ※ We assume 𝑝(𝒛) = 𝑁(𝒛|𝟎,𝐈), gradient-based backpropagation 학습

  -. Given a training dataset \( 𝐷 = \{𝒙_1,𝒙_2,…,𝒙_𝑛\} \) such that \( 𝒙_𝑖 = {(𝒙_{𝑖1},…,𝒙_{𝑖𝑑})} \) is the 𝑖-th input vector of the 𝑑 input variables.
fake(0), real(1)

  -. The two cost functions : 2 개의 목적 함수 (동시 불가)
     \(𝒛_𝑖\) are sampled from the prior distribution 𝑝(𝒛) at each iteration.
      • Train \(𝐺_𝜽\) (while \(𝐷_𝝓\) frozen)
\[ \operatorname*{min}\limits_{𝜽}\, \frac{1}{𝑛} \sum_{𝑖=1}^{𝑛} [-log\, (𝐷_𝝓(𝐺_𝜽(𝒛_𝑖)))] \]
      • Train \(𝐷_𝝓\) (while \(𝐺_𝜽\) frozen)
\[ \operatorname*{min}\limits_{𝝓}\, \frac{1}{𝑛} \sum_{𝑖=1}^{𝑛} [-log\, 𝐷_𝝓(𝒙_𝑖) -log\, (1-𝐷_𝝓(𝐺_𝜽(𝒛_𝑖)))] \]
* similar to binary cross-entropy

  * Note: Joint training of the two networks is challenging and can easily be unstable.
  → 두 모델의 밸런스가 맞지 않으면 큰 효과를 내기 어려운 단점이 있다.

• GAN Inference (Generating Data)
  -. 인코더 : 기존 학습 분포로부터 𝒛 를 샘플링,
  -. 디코더 : 𝒛 결합으로 새로운 데이터 \(\tilde{𝒙}\) 를 생성.
VAE Decoder 파트와 동일하다.


• Conditional GAN (cGAN) - 조건부 추가 (Auxiliary Classifier GAN)
  -. 위와 동일하고, 암시적 조건부 생성 모델로부터 새로운 데이터를 생성한다.
  -. 달라지는 점은 Generator 조건으로 𝒚 를 주면, Discriminator 출력 시 𝒚 추정치를 같이 준다.
  -. Generator 는 조건 𝒚 를 만족하는 realistic data 를 생성하도록 학습하게 된다.
mapping y and z to x


• cGAN Training
  -. cGAN as a Neural Network
     Discriminator \(𝐷_𝝓\), modeled as a neural network
      • It distinguishes between real data 𝒙 and fake data \(\tilde{𝒙} = 𝐺_𝜽(𝒛)\) and predicts 𝒚
      • so that \(𝐷_𝝓(𝒙)\) → 1 (real) and \(𝐷_𝝓(𝐺_𝜽({\color{Red}𝒚},𝒛))\) → 0 (fake) and \(𝑓_𝝓(𝒙)→𝒚\) and \(𝑓_𝝓(𝐺_𝜽(𝒚,𝒛))→𝒚\)
     Generator \(𝐺_𝜽\), modeled as a neural network
      • It conditionally generates realistic fake data \(\tilde{𝒙} = 𝐺_𝜽({\color{Red}𝒚},𝒛)\) with condition 𝒚
      • so that \(𝐷_𝝓(𝐺_𝜽({\color{Red}𝒚},𝒛))\) → 1 (real) and \(𝑓_𝝓(𝐺_𝜽(𝒚,𝒛))→𝒚\)
     ※ We assume 𝑝(𝒛) = 𝑁(𝒛|𝟎,𝐈), gradient-based backpropagation 학습

  -. Given a training dataset \( 𝐷 = \{(𝒙_1,𝒚_1),(𝒙_2,𝒚_2),…,(𝒙_𝑛,𝒚_𝑛)\} \) such that \( 𝒙_𝑖 = {(𝒙_{𝑖1},…,𝒙_{𝑖𝑑})} \) is the 𝑖-th input vector of the 𝑑 input variables and \(𝒚_𝑖\) is the corresponding label of the output variable.
fake(0), real(1) with condition y

  -. The two cost functions : 2 개의 목적 함수를 최소화 (조건부 반영)
     \(𝒛_𝑖\) are sampled from the prior distribution 𝑝(𝒛) at each iteration.
      • Train \(𝐺_𝜽\) (while \(𝐷_𝝓\) frozen)
\[ \operatorname*{min}\limits_{𝜽}\, \frac{1}{𝑛} \sum_{𝑖=1}^{𝑛} [-log\, (𝐷_𝝓(𝐺_𝜽({\color{Red}𝒚_𝑖},𝒛_𝑖))) + {\color{Red}𝐿(𝒚_𝑖,𝑓_𝝓(𝐺_𝜽(𝒚_𝑖,𝒛_𝑖)))}] \]
      • Train \(𝐷_𝝓\) (while \(𝐺_𝜽\) frozen)
\[ \operatorname*{min}\limits_{𝝓}\, \frac{1}{𝑛} \sum_{𝑖=1}^{𝑛} [-log\, 𝐷_𝝓(𝒙_𝑖) -log\, (1-𝐷_𝝓(𝐺_𝜽({\color{Red}𝒚_𝑖},𝒛_𝑖))) + {\color{Red}𝐿(𝒚_𝑖,𝑓_𝝓(𝒙_𝑖)) + 𝐿(𝒚_𝑖,𝑓_𝝓(𝐺_𝜽(𝒚_𝑖,𝒛_𝑖)))}] \]

  * Note: Joint training of the two networks is challenging and can easily be unstable.
  → 두 모델의 밸런스가 맞지 않으면 큰 효과를 내기 어려운 단점이 있다.

• cGAN Inference (Generating Data)
  -. 조건부 : (Label) 𝒚 입력으로 들어감,
  -. 인코더 : 기존 학습 분포로부터 𝒛 를 샘플링,
  -. 디코더 : (Label) 𝒚 기댓값을 가지는 새로운 데이터 \(\tilde{𝒙}\) 를 𝒛 결합으로부터 생성.
학습 방법만 다를뿐 cVAE Decoder 와 동일하다.

 

 Applications: 응용

조건부 생성 모델(cVAE, cGAN) 이미지 생성 예제를 살펴본다. 여기에서는 MNIST 데이터 셋을 활용하였다. 이 두 가지 모델은 단순히 학습 방법에서 차이가 있는 것이고 결과물을 내는 부분에 대해서는 동일하다.

 

Example: Conditional Generative Models (CVAE, CGAN), MNIST dataset

 

• (from Lecture 13 of Stanford CS231n) 장·단점 비교,

  (1) Variational Autoencoders (VAE)

    - 가능도에 대한 변동 하한을 최적화한다. 유용한 잠재 표현과 추론 쿼리가 존재. 그러나, 현재 샘플 품질은 최고가 아니다.

  (2) Generative Adverarial Networks (GANs)

    - 게임 이론적 접근, 최고의 샘플! 그러나, 학습하기가 까다롭고 불안정 할 수 있으며 추론 쿼리가 없다.

반응형