지식정리 - 밑바닥부터 시작하는 딥러닝 5
Contents
- TOC {:toc}
Ch1. 정규분포와 MLE
확률 분포를 근사하는 가장 간단한 방법은 정규 분포에 근사시키는 것이다.
- 정규분포
- Central limit theorem : 평균이
이고 분산이 인 임의 확률 분포에서 뽑은 크기의 표본의 평균( )의 분포는 평균이 이고 분산이 인 정규분포에 근사한다.
- 표본합의 분포 : Central limit theorem을 변형해서 표본합의 분포도 정규분포를 따르며 그 분포는 평균이
이고 분산이 임을 보일 수 있다.
- 생성 모델을 만드는 순서
- Modeling : 어떤 분포를 따를 것이다라는 것을 가정하는 과정
- 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가 여러 개 있도록 개량한 확률 분포 함수
이라고 할 때
※
따라서
GMM에서
MLE를 구하기 위해서 log를 씌운 다음에 편미분을 해보면 log-sum 꼴 이라서 해석적으로 해를 못 구하는 것을 알 수 있다. 그래서 GMM에서는 EM 알고리즘을 통해 parameter estimation을 한다.
- KL divergence : 두 확률 분포 사이의 차이(거리)를 구할 수 있는 방법
따라서
MLE 과정은 모집단 확률분포
GMM을 포함해 여러 생성 모델은 latent variable을 가진다.
KL divergence 항은 항상 음이 아닌 값이기 때문에
ELBO 항(Evidence Lower BOund)은 sum-log 꼴이라서 MLE를 구하기 쉽다. 다만 파라미터가
- E-step : 거치면 ELBO가 log likelihood랑 같아진다
- M-step : log likelihood가 증가한다
최적화의 종료 시점을 판단하기 위해서 log likelihood의 평균을 사용한다. log likelihood의 평균은 점점 작아지며 어느 시점에 거의 변화가 없어지는데 임계값을 설정해서 종료 시점을 판단한다.
- GMM에 EM 알고리즘 적용하기
- E-step 적용
- M-step 적용
먼저
해를 풀면 다음과 같다.
마찬가지로
Ch3. VAE (Variational AutoEncoder)
VAE에서는 확률 변수
E-step에서
- Encoder : 관측 변수를 잠재 변수로 바꾸는 과정
* nn은 neural net을 말한다.
위 내용을 수식에 적용하면 최적화 대상이 다음과 같아진다.
VAE에서는 decoder를 사용하여
- Decoder : 잠재 변수를 관측 변수로 바꾸는 과정
기댓값을 구하는 과정에 Monte Carlo method를 이용하여 다음과 같이 식을 나타낼 수 있다.
한편으로
두 정규 분포의 KL divergence는 다음과 같이 구할 수 있다.
*
좀 더 일반적으로는 다음이 성립한다.
따라서
신경망에서 위 함수를 loss function으로 계산하면 된다.
encoder에서
이 문제를 해결하기 위해서 reparameterization trick을 사용한다.
*
다음과 같이 샘플링을 진행하면 기울기가 흘러갈 수 있게 된다.
참조 : 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와 차이점은
Markov property에 따라서
단계 별로 T개, 2개, 1개의 샘플에서 loss를 유도하는 과정을 설명하겠다.
- T개 샘플에서 loss 계산
computation cost가 커서 사용하기 어려운 방법이다.
- 2개 샘플에서 loss 계산
다음은 기댓값과 분산에 적용되는 몇 가지 정리들이다.
평균(
각 정규분포를 따르는 연속확률변수에 대해서
gaussian noise의 특징은 두 개의 gaussian noise를 합쳐도 하나의 gaussian noise가 된다는 것이다. 따라서
이를 바탕으로 유도한 ELBO식을 더 변형한다.
discrete uniform distribution
최종적인 Loss 계산은 다음과 같다.
T개 샘플링 할 필요없이 2번만 샘플링하면 되지만 더 최적화가 가능하다.
- 1개 샘플에서 loss 계산
1개 샘플로 loss를 구하기 위해서는
3개의 정규분포가 곱 또는 나누기 연산에 의해 결합한 형태이기 때문에
exp 항만 계산하면 평균과 분산을 구할 수 있다.
*
따라서
엄밀하게는 함수에 정규화 상수를 곱해야하지만 상수항은 무시해도 되므로 정규분포로 취급한다.
다음은 loss를 유도할 차례이다.
neural net이 꼭
- neural net이
를 예측하게 하는 방식
- neural net이
의 noise를 예측하게 하는 방식
기존의 loss function에 대입하여 식을 정리하면 다음과 같이 loss가 나온다.
논문에서는 noise를 예측하는 방식의 성능이 더 좋았다고 한다.
Diffusion에서 새로운 데이터를 샘플링하는 과정은 다음과 같다. noise를 예측하는 구조를 기준으로 설명하지만 다른 경우도 중간 과정을 예측하기 때문에 동일한 과정을 따른다. 아래 과정을 T부터 연쇄적으로 적용하면 된다.
마지막
참조 : MNIST 학습 Diffusion 구현 코드 (pytorch)
generative model을 사용해서 어떠한 조건에서 데이터를 생성하기 위해서는 조건부 확률 분포를 모델링해야 된다.
위 방식으로 Loss function을 유도해서 모델을 학습시킬 수 있다. 하지만 이렇게 신경망에 조건만 추가하여 학습시키면 경우에 따라 조건을 무시하게 될 수 있다. 따라서 score function을 기반으로 한 guidance의 도입이 필요하다.
score를 유도하기 위해서는 Tweedie’s formula가 사용된다.
- Tweedie’s formula
이를 이용하여
이때
따라서
- classifier guidance
classification을 할 수 있는 다른 모델을 이용하는 방법이다. 정답인 조건의 softmax에 대한
- classifier-free guidance
classifier guidance의 식을 조금 변형하면 classifier-free guidance 식을 얻을 수 있다.
이때
classifier-free guidance에서는 조건이 없을 때와 있을 때 각각의 score를 계산해 조건부 score를 구할 수 있다.
참조 : MNIST 학습 score based classifier free guidance diffusion 구현 코드 (pytorch)