Contents

  • TOC {:toc}

Ch1. 정규분포와 MLE

확률 분포를 근사하는 가장 간단한 방법은 정규 분포에 근사시키는 것이다.

  • 정규분포

  • Central limit theorem : 평균이 이고 분산이 인 임의 확률 분포에서 뽑은 크기의 표본의 평균()의 분포는 평균이 이고 분산이 인 정규분포에 근사한다.

  • 표본합의 분포 : Central limit theorem을 변형해서 표본합의 분포도 정규분포를 따르며 그 분포는 평균이 이고 분산이 임을 보일 수 있다.

  • 생성 모델을 만드는 순서
  1. Modeling : 어떤 분포를 따를 것이다라는 것을 가정하는 과정
  2. Inference(parameter estimation) : 샘플 데이터에 맞도록 파라메터를 조정하는 과정
  • Likelihood function : parameter 샘플 가 뽑힐 확률 밀도 함수에 log를 씌운 함수

  • Maximum Likelihood Estimation(MLE) : Likelihood가 최대가 될 때 샘플 데이터가 뽑힐 확률이 최대이다.

  • 정규분포의 MLE : 정규분포는 MLE를 해석적(analytic, closed form solution)으로 구할 수가 있다

  • 다변수 정규분포

단일 변수일때와 마찬가지로 MLE를 해석적으로 구할 수 있다.

Ch2. GMM과 EM 알고리즘

GMM (Gaussian mixture model) : peak가 여러 개 있도록 개량한 확률 분포 함수

이라고 할 때

는 joint probability고 는 conditional probability

따라서

GMM에서 에 의해 결정되는 확률 변수 는 관측되는 변수가 아니기 때문에 latent variable(잠재 변수)이라고 한다.

MLE를 구하기 위해서 log를 씌운 다음에 편미분을 해보면 log-sum 꼴 이라서 해석적으로 해를 못 구하는 것을 알 수 있다. 그래서 GMM에서는 EM 알고리즘을 통해 parameter estimation을 한다.

  • KL divergence : 두 확률 분포 사이의 차이(거리)를 구할 수 있는 방법

참조 : KL-divergence에 대한 포스팅

따라서

MLE 과정은 모집단 확률분포 와 모델 확률분포 의 KL divergence distance를 최소화하는 를 구하는 것과 동일한 과정인 것을 알 수 있다.

GMM을 포함해 여러 생성 모델은 latent variable을 가진다. 를 근사하는 임의 확률분포 를 가정하여 latent variable이 포함된 확률 분포의 log likelihood를 아래와 같이 표현할 수 있다. 이므로 우변에 곱할 수 있다.

KL divergence 항은 항상 음이 아닌 값이기 때문에 은 모든 에 대한 ELBO 항의 합보다 항상 크다.

ELBO 항(Evidence Lower BOund)은 sum-log 꼴이라서 MLE를 구하기 쉽다. 다만 파라미터가 , 로 2개가 되기 때문에 하나를 고정한 상태로 번갈아가며 각 파라미터에 대해서 최적화를 진행한다. 를 최적화하는 과정은 Expectation value 단계(E-step)라고 하고 에 대해서 최적화하는 과정은 Maximization 단계(M-step)라고 한다. E-step과 M-step을 반복하는 것을 EM 알고리즘이라고 한다.

  • E-step : 거치면 ELBO가 log likelihood랑 같아진다

  • M-step : log likelihood가 증가한다

최적화의 종료 시점을 판단하기 위해서 log likelihood의 평균을 사용한다. log likelihood의 평균은 점점 작아지며 어느 시점에 거의 변화가 없어지는데 임계값을 설정해서 종료 시점을 판단한다.

  • GMM에 EM 알고리즘 적용하기

  • E-step 적용

  • M-step 적용

먼저 에 대해서 최적화를 적용한다. 는 합이 1이 되어야 한다는 조건이 있어서 Lagrange multiplier method(라그랑주 승수법)로 구하면 된다.

해를 풀면 다음과 같다.

마찬가지로 에 대해서도 해를 구해줄 수 있다.

Ch3. VAE (Variational AutoEncoder)

VAE에서는 확률 변수 가 연속 확률 변수이다.

E-step에서

가 연속 확률 변수이기 때문에 를 계산하는 과정에 적분이 필요하다. 따라서 를 계산해서 로 사용하는 것이 어렵다. VAE에서는 를 평균이 이고 분산이 인 정규 분포로 한정하여 로 근사시킨다.

  • Encoder : 관측 변수를 잠재 변수로 바꾸는 과정

* nn은 neural net을 말한다. 는 대각 행렬로 한정한다.

값은 의 형태와 무관하기 때문에 에 대해서 ELBO항을 최대화시켜주면 의 거리가 최소화된다. 근사적으로 최적값을 구하는 것이기 때문에 variational approximation이라고 한다.

위 내용을 수식에 적용하면 최적화 대상이 다음과 같아진다.

VAE에서는 decoder를 사용하여 를 모델링한다.

  • Decoder : 잠재 변수를 관측 변수로 바꾸는 과정

기댓값을 구하는 과정에 Monte Carlo method를 이용하여 다음과 같이 식을 나타낼 수 있다.

한편으로

두 정규 분포의 KL divergence는 다음과 같이 구할 수 있다.

* 의 차원수

좀 더 일반적으로는 다음이 성립한다.

따라서

신경망에서 위 함수를 loss function으로 계산하면 된다.

encoder에서 를 샘플링하는 과정은 미분이 어렵기 때문에 backpropagation할 때 기울기가 흘러갈 수가 없는 문제가 생긴다.

이 문제를 해결하기 위해서 reparameterization trick을 사용한다.

* 은 hadamard product

다음과 같이 샘플링을 진행하면 기울기가 흘러갈 수 있게 된다.

참조 : MNIST 학습 VAE 구현 코드 (pytorch)

  • hierarchical VAE

latent variable의 변환을 여러 번 하면 hierarchical VAE가 된다. 다음은 2계층 VAE에 대한 설명이다.

이때 라는 가정을 하면

참조 : MNIST 학습 conditional hierarchical VAE 구현 코드 (pytorch)

Ch4. Diffusion

Diffusion에서는 encoder 과정을 gaussian noise 추가로 대체하고 잠재 변수와 관측 변수의 차원을 동일하게 설정한다.

특히 일 때 는 표준정규분포가 된다.

decoder는 VAE와 동일한 계산 과정을 거친다. decoder는 denoise하는 역할을 한다.

Diffusion에서 ELBO는 다음과 같다. VAE의 ELBO와 차이점은 으로 바뀌었다는 점과 로 바뀌었다는 점, 가 noise 추가로 대체되었기 때문에 가 제거됐다.

가 없기 때문에 제외시켰다.

Markov property에 따라서

단계 별로 T개, 2개, 1개의 샘플에서 loss를 유도하는 과정을 설명하겠다.

  • T개 샘플에서 loss 계산

에서 T개의 를 샘플링한 후에 Monte Carlo method로 근사해서 loss를 구하면 된다.

computation cost가 커서 사용하기 어려운 방법이다.

  • 2개 샘플에서 loss 계산

다음은 기댓값과 분산에 적용되는 몇 가지 정리들이다.

평균()이 0이라면

각 정규분포를 따르는 연속확률변수에 대해서

gaussian noise의 특징은 두 개의 gaussian noise를 합쳐도 하나의 gaussian noise가 된다는 것이다. 따라서 도 정규분포를 따르며 해석적으로 구할 수 있다.

에 대해서 를 연쇄적으로 적용할 수 있기 때문에 다음과 같이 일반화하여 식을 작성할 수 있다.

이를 바탕으로 유도한 ELBO식을 더 변형한다.

discrete uniform distribution 에 대해서

를 이용하여 합을 변형하고 Monte Carlo method로 근사하면

최종적인 Loss 계산은 다음과 같다.

T개 샘플링 할 필요없이 2번만 샘플링하면 되지만 더 최적화가 가능하다.

  • 1개 샘플에서 loss 계산

1개 샘플로 loss를 구하기 위해서는 를 이용해야한다.

3개의 정규분포가 곱 또는 나누기 연산에 의해 결합한 형태이기 때문에 역시 정규분포 형태를 따른다.

exp 항만 계산하면 평균과 분산을 구할 수 있다.

* 과 관련이 없는 항이다.

의 exp 항은 다음과 같다.

따라서

엄밀하게는 함수에 정규화 상수를 곱해야하지만 상수항은 무시해도 되므로 정규분포로 취급한다.

다음은 loss를 유도할 차례이다. 은 ELBO를 변형한 최적화 대상이다.

는 스칼라라서 sum 밖으로 뺄 수 있다. 분자의 개별 원소에 대해서 제곱 후 합한 것은 L2 norm의 제곱과 동일하기 때문에 최종 loss는 다음과 같다.

neural net이 꼭 을 예측할 필요는 없다. 다른 2가지 방식을 소개한다.

  • neural net이 를 예측하게 하는 방식

의 구조와 유사하게 를 구성한다. neural net은 를 예측한다.

  • neural net이 의 noise를 예측하게 하는 방식

를 예측하는 방식과 유사한 구조에서 가 아닌 의 noise를 예측한다.

기존의 loss function에 대입하여 식을 정리하면 다음과 같이 loss가 나온다.

\limits is allowed only on operators Loss(x*0)=\Vert \operatorname\*{nn}\limits*\theta(x_t,t)-\epsilon\Vert^2

논문에서는 noise를 예측하는 방식의 성능이 더 좋았다고 한다.

Diffusion에서 새로운 데이터를 샘플링하는 과정은 다음과 같다. noise를 예측하는 구조를 기준으로 설명하지만 다른 경우도 중간 과정을 예측하기 때문에 동일한 과정을 따른다. 아래 과정을 T부터 연쇄적으로 적용하면 된다.

마지막 를 구하는 과정에서는 noise를 추가하지 않는 것이 더 좋은 성능을 보인다고 한다.

참조 : MNIST 학습 Diffusion 구현 코드 (pytorch)

generative model을 사용해서 어떠한 조건에서 데이터를 생성하기 위해서는 조건부 확률 분포를 모델링해야 된다.

위 방식으로 Loss function을 유도해서 모델을 학습시킬 수 있다. 하지만 이렇게 신경망에 조건만 추가하여 학습시키면 경우에 따라 조건을 무시하게 될 수 있다. 따라서 score function을 기반으로 한 guidance의 도입이 필요하다.

score를 유도하기 위해서는 Tweedie’s formula가 사용된다.

  • Tweedie’s formula

일 때

이를 이용하여

이때 를 score라고 한다. score는 과 상수배만큼 차이나기 때문에 신경망이 score를 예측하도록 할 수 있다.

따라서 만 알면 조건부 score를 구할 수 있다. 를 구하는 방식은 2가지가 있다.

  • classifier guidance

classification을 할 수 있는 다른 모델을 이용하는 방법이다. 정답인 조건의 softmax에 대한 의 gradient를 구하기만 하면 되지만 classifier 모델을 따로 학습시켜야 한다는 단점이 있다. 는 classifier의 gradient를 얼마나 반영할 것인지에 대한 하이퍼파라미터이다.

  • classifier-free guidance

classifier guidance의 식을 조금 변형하면 classifier-free guidance 식을 얻을 수 있다.

이때 를 조건이 0인 경우로 생각하면 다음과 같이 식이 얻어진다.

classifier-free guidance에서는 조건이 없을 때와 있을 때 각각의 score를 계산해 조건부 score를 구할 수 있다.

참조 : MNIST 학습 score based classifier free guidance diffusion 구현 코드 (pytorch)