Variational AutoEncoder(VAE)

|

참고1 참고2 pytorch 코드

Variational autoencoder

  • $p(x, z) = p(x\vert z)p(z)$
    • : data
    • : latent variable

Generation process

  • 각 datapoint i에 대해
    1. 를 draw한다.
    2. 를 draw한다.

위 과정을 graphical model로 표시하면 다음 그림과 같다.

IMAGE

Goal of objective

우리가 원하는 것은 데이터가 주어졌을 때, 이를 가장 잘 표현하는 z를 찾고싶은 것!

  • 여기서 인데 이를 구하기 힘듬!
  • 그래서 posterior를 근사시킬 필요가 있으며,
  • Variational inference는 posterior를 어떤 distribution family들 로 근사시킨다.
    • 와 유사하도록 $\lambda$ 값을 찾아나간다.
    • 3.png
  • 유사한 값을 찾기위해 KL-divergence를 쓰고, 정리해보면 다음처럼 나온다.
    • 그래서 를 minimize하는 것은
    • 를 maximize하는 것!
      • 가 decoder
      • 를 encoder
      • 로 만들어버린 뒤 위 식을 maximize, 즉 위 식에 -를 곱한 값을 loss function으로 하고 학습시키면 VAE 완성

(1) 식 유도.. 증명의 맨 첫줄의 x,z는 X,Z이다. (전체 셋을 의미함) 1.png 2.png

sigmoid와 softmax의 차이

|

sigmoid

NN의 activation function으로 sigmoid를 많이 썼었지… 처음엔 actiovation function이 step function이었는데 이는 output이 0, 1 밖에 되지 않는 단점이 있었다. sigmoid는 $\frac{1}{1+e^{-x}}$ 꼴이라서 0~1사이의 값을 표현할 수 있었다.

softmax

위 식은 $K$차원의 벡터 $z$를 $(0,\ 1)$사이의 범위를 갖도록 치환한다고 볼 수 있다.

비교

  • sigmoid를 사용하면 해당 뉴런의 입력과 weight, bias로 출력이 결정된다.
  • softmax를 사용하면 전체 뉴런들의 출력값과 비교를 해서 출력이 결정된다.(non-locality)

+ softmax cost function

cost function은 위의 softmax함수를 가지고 실제 distribution과 cross-entropy를 구하면, 다음과 같다.

ch 7. Inferring a Binomial Proportion via the Metropolis Algorithm

|

호객행위

d3를 가지고 만들어본 예제이다. 왼쪽이 실제 distribution이며, 오른쪽이 sampling을 한 결과이며, burn-in은 따로 하지 않았다.

population

markov-chain

sampled

Intro

  • 우리가 원하는건 posterior $p(\theta \vert D)$
  • 근데 항상 evidence가 marginalize하기 쉽지 않다.
    • Ch 5에서는 likelihood의 conjugate prior를 찾아서 posterior를 구했음
    • Ch 6는 그냥 prior를 discrete하게 쪼개놓고 구했음 (굳이 정리를 하지 않았음)
      • 잘게 쪼개면 더 정확해진다
  • Ch 6는 좋은 방법이지만 parameter가 많아지면 어떡할랭?
    • 1000개씩 6개의 파라미터면 $1000^6$이 돼버림..
  • posterior와 비례하는 어떤 함수를 가지고있고, 계산할 수 있으면
  • 많은 수의 random value들로 시뮬레이션해서 posterior distribution을 근사시켜보자!

Metropolis algorithm

예제

  • 정치인이 여러 섬들을 다니면서 유세를 할 것이다.
  • 섬은 총 7개가 있으며, 각 섬마다 인구 수는 다르다.
  • 정치인은
    • 현재 섬에 머무를지,
    • 서쪽 섬으로 갈지,
    • 동쪽 섬으로 갈지 판단해야한다.
  • 지금 섬의 인구와, 다음에 갈 섬으로 제안된 곳의 인구 수만 알 수있다.

algorithm

  • proposal distribution
    • 동전을 던져 왼쪽으로 갈지, 오른쪽으로 갈지 정한다
  • 한쪽이 나왔다면
    • 한 쪽의 인구수가 더 많으면 무조건 이동
    • 아니라면 $P_{move} = P_{proposed} / P_{current}$의 확률로 감

근데 이게 먹힌다.

결과

MA.png

알아야할 것들

MA2.png

  • burn-in
    • 앞의 몇 스텝은 초기값에 따른 bias가 있으니 없앰
  • proposal distribution을 잘 선택해야함
    • narrow하면 수렴에 엄청 오래걸릴 것이다
    • 초기값이 심지어 target distribution이 flat하고 low한 곳이면 수렴이 힘들지..

근데 이게 여태 하던 posterior 추정이랑 뭔 상관?

  • Metropolis algorithm을 다시 한번 보면
    • 이동할 확률을 $\frac{P_{proposed}}{P_{current}}$로 구함
    • 즉 $P$가 normalized돼있지 않아도 됨!
      • $P = p(D\vert \theta)p(\theta)$로도 충분
    • 그래서 posterior를 추정할 때 좋지!

코드로 풀어보자!

동전던지기의 예제를 들어본다. $\theta$는 앞면이 나올 확률을 의미하는 parameter이다.

가정

  • Prior
    • $p(\theta): uniform(0,1)$
  • Likelihood
    • $p(z,N\vert \theta): \theta^{z}(1-\theta)^{(N-a)}$
  • data
    • 14번 던져서 11번이 앞면이 나옴.

Proposal distribution

$N(0, 0.2)$로 하며, 부적절한 $\theta$에 대해서는 prior나 likelihood가 0을 주면 된다.

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt

def prior(theta):
    '''
    theta에 대한 prior 확률을 return
    '''
    if theta < 0 or theta > 1:  # 여기서 처리해주자!
        return 0
    else:
        return 1

def likelihood(z, N, theta):
    '''
    theta가 주어졌을 때, z,N에 대해서 likelihood 확률을 return
    '''
    return (theta ** z)*((1-theta)**(N-z))

def proposal_dist(n):
    '''
    proposal distribution에서 n개 뽑아온다.
    '''
    return np.random.randn(n) * 0.2  # sigma는 0.2로...
N = 10000
burn_in = int(0.1*N)
theta_sampled = [0.5]

for i in range(N):
    theta = theta_sampled[-1]
    new_sample = proposal_dist(1)    
    proposed_theta = theta + new_sample
    
    # p(D\vert ∂)p(∂) 구하기
    h1 = prior(theta) * likelihood(11, 14, theta)
    h2 = prior(proposed_theta) * likelihood(11, 14, proposed_theta)
    
    if h2 > h1:  # 만약 proposed가 더 확률이 크면
        theta_sampled.append(proposed_theta)
    else:  # 아니면
        s = np.random.uniform(0, 1, 1)
        if s[0] < h2/h1:
            theta_sampled.append(proposed_theta)
        else:
            theta_sampled.append(theta)


theta_sampled = theta_sampled[burn_in:]  # 처음 나온 애들은 버려야지..
plt.hist(np.array(theta_sampled), bins=50)
plt.show()

Unknown.png 결과를 보면 잘 나오는 것을 알 수 있다.

ch 5. Inferring a Binomial Proportion via Exact Mathmatical Analysis

|

서론

계속 다루고 있는 확률 분포는 다음과 같은 성질을 가지고 있었다.

  1. 상호 배타적인 two outcome.
  2. stationary probability (어떤 outcome의 확률이 달라지지 않음)
  3. data independent (순서에 따라 달라지지 않음)

Binomial에 대해서 어떤 prior belief들을 보기 시작할껀데… 먼저 likelihood function부터 정의해보도록하자

5.1 The likelihood function: Bernoulli distribution

  • $p(y\vert \theta) = \theta^y(1-\theta)^{(1-y)}$
    • 위를 bernoulli distribution이라 한다.
    • y로 marginalize하면 1이 되지!
  • 근데 y가 고정된 data고 $\theta$를 variable로 생각해볼 수 있다.
    • 이 경우 $\theta$의 likelihood function이라고 말할 수 있다.
    • 물론 이 경우 $\theta$의 확률과 연관은 되어있지만, pdf는 아니다.
      • $\int_0^1 \theta^y(1-\theta)^{(1-y)} d\theta = \frac{1}{2} \neq 1$
    • 이를 Bernoulli likelihood function이라 부른다.

5.2 A description of beliefs: The beta distribution

위에서 likelihood를 정의했는데, 당연히 $\theta$는 $[0, 1]$사이의 value이다. 우리가 prior를 정할 때 $p(\theta)$도 이 사이에서만 정의하면 된다. 이외에도 있으면 편리한 성질이 있는데

  • $p(y\vert \theta)p(\theta)$ 가 $p(\theta)$꼴로 나오면 좋겠다.
    • 그러면 prior랑 posterior가 같은 함수 형태를 이룬다.
    • 데이터가 연속적으로 나와도 계속 같은 형태를 유지..
  • $\int p(y\vert \theta)p(\theta)d\theta$가 analytically 풀리기를 기대함
    • $p(\theta)$가 $p(y\vert \theta)$의 conjugate prior !!!!
      • $p(y\vert \theta)$가 주어질 때, $p(\theta)$로 posterior를 만들 수 있고
      • 이 posterior가 prior와 같은 꼴일 때

이제 Bernoulli likelihood의 conjugate prior를 찾아보자! 꼴 일테지..

그래서 Beta distribution이 conjugate prior인데…

  • $B(a,b)$: Beta function (normalizing term)
    • $\int_0^1 \theta^{(a-1)}(1-\theta)^{(b-1)} d\theta$
    • TODO: Gamma function 찾아보기( $B(a, b) = \Gamma(a)\Gamma(b)/\Gamma(a+b)$라고 한다. )
  • a, b가 positive
  • a가 커지면 오른쪽으로 이동, b가 커지면 왼쪽
    • beta.png
  • mean: $\mu = \frac{a}{a+b}$
    • a » b 면 mean 커짐
  • std: $\sqrt{\mu(1-\mu)/(a+b+1)}$
    • a+b가 커지면 std 작아짐
  • 그림의 대각선은 fair한 동전이다. a=b=1은 uniform dist, 4면 gaussian과 비슷하넹..
    • 이는 1번만 보면 fair할 것 같으나 확신이 부족한 것, 4번씩 번갈아 observe하면 확신이 생겼다고 볼 수 있지…

      prior 설정 시에, a, b >= 1을 많이 쓴다. 그림의 대각선을 보면 fairness에 관한 믿음으로 쓸 수 있겠지….

5.2.2 The Posterior beta

이제 beta distribution을 사용하여 posterior를 구해보면

  • (1)에서 (2)가 되는 것은 beta dist의 정의에 따라 Normlize하면 당연히 그리 된다.
  • 결론: $beta(\theta; a,b)$를 prior로 하여 data가 N개중 z개 head 나온 seq라면 posterior는 $beta(\theta; a+z, b + N - z)$이다.
  • 다른 해석
    • mean을 구해보자
      • prior:
      • posterior:
        • 여기서 $z/N$은 data의 mean, $a/(a+b)$는 prior의 mean이며 이들의 weighted sum으로 볼 수 있다.

N번 돌리는데 왜 likelihood는 combination안하는가…?는 하나의 sequence가 observe 되었다고 가정하고 풀고있기 때문이다.

5.3 Three inferential goals

5.3.1 Estimating the binomial proportion

  • prior의 belief 정도에 따라 posterior가 어떻게 바뀌나 보자.. diff_prior.png

5.3.2 Predicting data

  • $p(y) = \int p(y\vert \theta)p(\theta) d\theta$로 모든 param의 belief들의 weighted sum으로 prediction이 가능하다고 했었다.
    • 요기서 $p(\theta)$가 observed data로 수정된 posterior belief…
    • 뭐 수식이 필요친 않고.. Observed data로 수정된 belief를 가지고, weighted sum한 것이 prediction이다.

5.3.3 Model comparison

Evidence

어떤 모델의 evidence라는건 Data가 주어졌을 때, 모델의 가능성?을 보여주는 척도

  • model과 data given -> 가능한 param에 대한 weighted sum
  • $p(D\vert M) = \int p(D\vert \theta, M)p(\theta\vert M)d\theta$

여기서 $p(D\vert M)$은 prior를 beta, likelihood를 bernoulli로 하면 $p(z,N)$과 같다.

증명>

엄청 헷갈리네… ㅠㅠ

어쨌든 여기서 $p(z,N)$이 evidence임을 증명했고…

이를 구해보면 (1),(2)에서 $B(a, b)p(z,N) = B(z+a, N-z+b)$

Beta function으로 data의 prior를 표현가능하다??

hyperparameter (a, b)는 사실 필요하지! $p(z,N\vert a,b)$

그림 재탕 diff_prior.png 위의 그림에서 P(D)는 사실 P(D\vert M)인데 Data에 따른 evidence가 왼쪽이 훨씬 큰 것을 알 수 있다.

ch 4. Bayes' rule

|

4.1. Bayes’ rule

  • $p(y \vert x)$ : posterior
    • x를 염두에 둔 belief의 정도
  • $p(x\vert y)$: likelihood
    • parameter가 y일 때 x가 나올 확률
  • $p(y)$: pior
    • x를 염두에 두지 않았을 때 parameter의 믿음의 정도
  • $\sum_y p(x\vert y)p(y)$: evidence
    • model에 따른 data의 확률 (parameter와 관계 없다.)

4.2.1 Data order invariance

  • D가 observe됨 -> $P(\theta \vert D)$ -> D’이 observe됨 -> $p(\theta \vert D, D’)$
  • 위와 같은 상황에서, D, D’이 observe되는 순서에 따라 $p(\theta \vert D, D’)$ 확률이 바뀌는가?
    • model의 likelihood, $p(D \vert \theta)$에 따라 달려있다.
    • 보통 invariant함 (i.i.d. : independent and identically distributed)

model이 복잡하면 prior의 확률들이 낮아지고, posterior의 확률들도 낮아짐.

4.3.4 Why Bayesian inference can be difficult

  1. marginalize하는 term은 결국 적분이 들어가는데 이게 힘들다.
    • MCMC로 sampling을 해본다.
  2. prior를 정하기가 힘듬
    • 이거는 그래도 대충 몇개 해보거나 섞어 쓰면 됨

4.4. Excercise

정리한거 날아감… ㅠㅜ