issues
search
sweaterr
/
bayesian-methods-in-machine-learning
1
stars
1
forks
source link
5주차 variational autoencoder
#3
Open
sweaterr
opened
6 years ago
sweaterr
commented
6 years ago
Scaling Variational Inference & Unbiased estimates
Bayesian Method를 뉴럴넷과 합쳐 보자. 그러기 위한 선결지식 하나를 배운다 unbiased estimate
Unbias estimate는 무한히 샘플링 해서 분포를 추정하면, true distribution에 다가가는 추정을 말함
log를 취하면 unbias estimate가 아니게 됨
함수의 기대값을 샘플링한 함수값의 평균(average sample)으로 추정하는 것은unbiased지만, 다른 방식은 체크해야 한다.
체크하기 어려우면, average sample으로 문제를 변환해야 한다.
sweaterr
commented
6 years ago
Modeling a distribution of images
dataset을 p(x)로 모델링한다.
새로운 데이터를 생성할 수 있다.
outliers를 찾을 수 있다.
missing data를 다룰 수 있다.
데이터를 잘 표현 할 수 있다.
어떻게 p(x)를 모델링하나?
$\log \hat{p}(x) = CNN(x)$
확률로 모델링 하려면 합을 1로 만드는 normalize를 해야 하는데, 모든 이미지에 대해서 sum을 하는게 불가능
chain rule
이미지
$p(x_1, ..., x_d) = p(x_1)p(x_2|x_1)...p(x_d|x
1,...,x
{d-1})$
$p(x_k|x
1, ..., x
{k-1}) = RNN(x
1, ..., x
{k-1})$
한번에 한 픽셀만 생각하면 되기 때문에, normalize가 쉬워짐
그러나 이미지를 생성할 때도 한 픽셀씩 생성해야되기 때문에 무지 느림
$p(x_1, ..., x_d) = p(x_1)...p(x_d)$ => too restrictive
mixture of several GMM => Still too restictive
무한히 많은 GMM 믹스쳐? $p(x) = \int{p(x|t)p(t)dt}$
sweaterr
commented
6 years ago
Using CNNs with a mixure of Gaussians
$\mu(t) = CNN_1(t)$, $\Sigma(t) = CNN_2(t)$
100x100 픽셀 이미지의 경우 공분산 행렬이 10000x10000으로 너무 커지게 된다.
공분산 행렬의 대각 요소만 저장
$max_w p(X|w) = \int{p(X|T,w)p(T)dt}$ 문제를 풀어야 한다.
EM은 CNN이 포함된 모델을 적분해야 하므로 intractable 하다.
MCMC? 할수는 있으나 느림
Variational EM
EM 처럼 E-step에서 lower bound를 구하나, factorize 제약조건을 건다.
$\log p(X|w) >= L(w,q)$
maximize w q ${L(w,q)} $
subject to $q_i(t
i) = \tilde{q}(t
{i1}), ..., \tilde{q}(t_{im}) $
하지만 이 방식 조차 intractable 하다.
sweaterr
commented
6 years ago
Scaling variational EM
factorize 제약 조건 + 가우시안 제약을 걸어서 좀 더 approximate 하자.
$ maximize_{w,m_1,...m_N,s_1,...,s_N}$ $L(w,q_1, ..., q_N)$ subject to $q_i(t_i)=N(m
i, diag(s
{i}^2))$
각 가우시안이 연결되어 있지 않아서 너무 많은 parameter를 추가한다.
모든 가우시안을 같다고 하자 => too restrictive
$x_i$에 dependent 한 가우시안을 만든다.
$maximize_{w,\phi}$ $L(w,q_1, ..., q_N)$ subject to $q_i(t_i)=N(m(x_i,\phi), \text{diag}(s^2(x_i,\phi))$
lower bound $L(w,q_1, ..., q_N)$는 정의에 의해 $\sum
i{E
{q_i}\log{\frac{p(x_i|t_i,w)p(t_i)}{q_i(t_i)}}}$
Lower bound는 p와 q의 KL divergence를 최소화 하는 것이다
KL divergence는 normalize를 안해도 되는 좋은 성질이 있다.
$q_i(t_i)$ 가 원래 MCMC에서는 샘플링하기 어려웠으나, 가우시안 가정 때문에 샘플링 하기 쉬워짐
이미지 x를 CNN에 넣고, m과 s를 얻은 다음 가우시안에서 샘플링하면 된다.
고로 $t$의 true posterior의 기대값을 쉽게 근사할 수 있다.
$\hat{t_i} \sim N(m(x_i,\phi), \text{diag}(s^2(x_i,\phi)) $
이 샘플링 한 $\hat{t_i}$를 다시 두번째 뉴럴넷에 넣는다.
두번째 뉴럴넷의 아웃풋은 다시 원래 인풋 이미지와 가깝게 만들고, 이를 variational autoencoder라고 한다.
s가 0이고 t=m(x;phi)이면 일반적인 autoencoder가 된다.
sweaterr
commented
6 years ago
Scaling variational EM
목적함수 $\sum
i{E
{q_i}\log{\frac{p(x_i|t_i,w)p(t_i)}{q_i(t_i)}}}$ 를 좀 더 살펴보자
$= \sum
i{E
{q_i}\log{p(x_i|t_i,w)}} + \sum
i{E
{q_i}\log{\frac{p(t_i)}{q_i(t_i)}}}$
두번째 항은 p와 q의 마이너스 KL divergence이다. 목적함수는 q를 p로 푸쉬한다. regularization
첫번째 항은 가우시안이므로 $-||x_i - \mu(t_i)|| + const$ 가 된다. reconstruction loss가 된다.
$q(t_i) \approx p(t_i|x_i,w)$
이상한 데이터가 들어오면 q가 가우시안에서 멀어지므로 outlier를 잡을 수 있다.
새로운 이미지를 생성할 수 있다.
$\hat{t_i} \sim N(0,I)$ 를 샘플링한다.
ti를 decoder에 넣는다.
sweaterr
commented
6 years ago
Gradients of decoder
maximize $w,\phi$ of $ \sum
{i}{E
{q_i}\log{p(x_i|t_i,w)}} + \sum
i{E
{q_i}\log{\frac{p(t_i)}{q_i(t_i)}}}$
두번째 항인
KL 거리 부분은 analytically 계산할수 있다.
가우시안 간의 거리 이기 때문이다.
tensorflow가 알아서 gradient를 계산해준다.
첫번째 항은 기본적으로 샘플링으로 근사한다.
이미지를 인코더에 넣고 variation distribution $q(t_i)$ 의 파라메터를 얻는다.
$q(t_i)$에서 $t_i$를 하나 샘플링한다.
이 $t_i$를 디코더에 넣는다. 이 계산에 대한 gradient를 구한다. tensotflow가 알아서 해준다.
unbiased sample이고 gradient의 근사는 correct 하다.
gradient-of-decoder.pdf
sweaterr
commented
6 years ago
Log derivative trick
이제 $\phi$에 대해서 gradient를 구해보자.
$\phi$가 $q(t_i|x_i)$ 에 depend 하기 때문에, 첫번째항은 더 이상 기대값이 아니다.
그러므로, 샘플링으로 근사할 수 없다
$q(t_i|x_i,\phi)/q(t_i|x
i,\phi)$를 곱하고 $\nabla
{\phi} q(t_i|x_i,\phi)/q(t_i|x
i,\phi)$ 를 $\nabla
{\phi} \log q(t_i|x_i,\phi)$ 로 바꾸면 기대값으로 바꿀 수 있다.
이를 log-derivative trick 이라고 한다.
하지만 이 기대값은 correct 하지만(어느정도 동작하지만), 매우 loose한 approximation 이다.
왜냐하면 학습을 시작할 때 $\log p(x_i|t_i,w)$ 가 -100000같이 매우 낮은 수치이다.
이미지를 모델링하기 때문이다
이전에는 이 문제가 안나온 문제가 gradient를 씌운 상태였기 때문이다.
log-derivative-trick.pdf
sweaterr
commented
6 years ago
Reparameterization trick
log-derivative trick은 stochastic approximation of gradient 이다.
stochastic approximation of gradient의 variance는 매우 높다 => 훈련할 때 비효율
더 좋은 방법을 찾아보자
$t_i$를 샘플링 하는 대신 표준정규분포에서 $\epsilon_i$를 샘플링하고 $\epsilon_i$ 에서부터 $t_i$를 샘플링한다.
$t_i \sim q(t_i|x_i,\phi) = N(m_i, \text{diag}(s_i^2))$
$t_i = \epsilon_i \odot s_i + m_i = g(\epsilon_i,x_i,\phi)$
$\epsilon_i \sim p(\epsilon_i) = N(0,I)$
$ \sum
{i}\nabla
{\phi}{E_{q_i}\log{p(x_i|t_i,w)}} $
$ = \sum
{i}\nabla
{\phi}{E_{p(\epsilon_i)}\log{p(x_i|g(\epsilon_i,x_i,\phi),w)}} $
$ = \sum
{i}{E
{p(\epsilon
i)} \nabla
{\phi} \log{p(x_i|g(\epsilon_i,x_i,\phi),w)}} $
이제 인공적인 변수가 없다. 문제가 되던 p(x_i|t_i)도 없다.
요약
이미지를 무한의 수의 가우시안들의 믹스쳐로 모델링
학습을 위해
EM을 쓴다
q를 factorize된 Gaussian으로 근사한다
stochastic variation inference을 사용한다(t를 샘플링 해서 gradient를 구함)
autoencoder랑 비슷하나, 노이즈와 KL regularization이 있다.
좋은 이미지를 생성할 수 있다.
reparameterization-trick.pdf
Scaling Variational Inference & Unbiased estimates