240830 TIL #480 AI Tech #19 변분추론 -2 / 4주차 주간 학습 정리

김춘복·2024년 8월 30일
0

TIL : Today I Learned

목록 보기
481/571

Today I Learned

오늘은 변분추론 2번째 강의를 공부했다.


주간학습정리

일일 학습 정리로 매일 복습, 과제, 피어세션, 회고 정리했고 아래 링크 달았습니다.

강의 복습

MFVI(Mean-field Variational Inference)

  • log marginal likelihood, 즉 log p(x) 값은 최대화하기 어려우므로 이를 하한선인 ELBO 값으로 근사해서 ELBO값을 최대화 하는것이 목표다.
L(θ,ϕ)=Eqϕ(z)[logpθ(x,z)logqϕ(z)]L(\theta, \phi) = \Bbb{E}_{q_{\phi}(z)}[log p_\theta(x,z) - log q_\phi(z)]
  • 변수 설명

    x: 관측 데이터
    z: 잠재 변수(latent variable)
    pθ(x,z)p_\theta(x,z): 데이터와 잠재 변수의 결합 확률 분포
    pϕ(z)p_\phi(z): 잠재 변수에 대한 변분 분포
    θ,ϕ: 모델의 파라미터

  • ELBO를 최대화하는것은 변분분포 pϕ(z)p_\phi(z)와 실제 posterior 분포 pθ(xz)p_\theta(x|z)간의 KL발산을 최소화하는 것과 같다.


변분추론의 적용

Mixture of Bernoulli

베르누이 분포들의 혼합을 이용해 이진데이터를 모델링하는 방법

  • N개의 binary 데이터가 qkq_k르 파라미터로 가진 K개의 베르누이 분포(클러스터)에서 나왔다고 할 때,
    p(xnqk)=qkxn(1qk)1xnp(x_n|q_k) = q_k^{x_n}(1-q_k)^{1-x_n}로 모델링할 수 있다.

  • πk\pi_k는 각 클러스터의 비율 다 더하면 1. prod에 log를 씌우면 sum으로 바뀐다.
    각 클러스터의 파라미터 qkq_k와 클러스터의 비율 π\pi를 추론해야한다.

    p(x)=n=1Nk=1Kπkp(xnqk)p(x) = \prod_{n=1}^N\sum_{k=1}^K\pi_kp(x_n|q_k)
logp(x)=n=1Nlogk=1Kπkp(xnqk)log p(x) = \sum_{n=1}^Nlog\sum_{k=1}^K\pi_kp(x_n|q_k)

EM 알고리즘

숨겨진(관측되지 않은) 잠재 변수나 결측데이터가 있는 상황에서 MLE(최대가능도추정)을 수행하기위한 반복적인 최적화 방법

  • 최적화 해야되는 로그 가능도 함수
    잠재변수 z가 있으면 z에 대한 합때문에 직접적으로 최적화 하기 어렵다.
logp(xθ)=logzp(x.zθ)log p(x|\theta) = log \sum_zp(x.z|\theta)
  • E-step(expectation)
    현재 추정된 파라미터 θ(t)\theta^{(t)}를 사용해서 잠재변수 z의 조건부 기대값을 계산한다.
    즉, 현재 파라미터를 기반으로 잠재변수를 추정한다.

    Q(θθ(t)=Ezx,θ(t)[logp(x,zθ)]Q(\theta|\theta^{(t)} = \Bbb{E}_{z|x,\theta^{(t)}}[log p(x,z|\theta)]
  • M-step(Maximization)
    위에서 계산된 기대값 Q(θθ(t))Q(\theta|\theta^{(t)})을 최대화하는 파라미터 θ(t+1)\theta^{(t+1)}을 찾는다. 즉, 주어진 기대값을 최대화하도록 파라미터를 업데이트한다.

    θ(t+1)=arg maxθQ(θθ(t))\theta^{(t+1)} = \argmax_\theta Q(\theta|\theta^{(t)})
  • 위의 E,M스텝을 번갈아 반복하면 파라미터 θ\theta는 점진적으로 수렴한다.
    이 반복에서 EM 알고리즘은 로그가능도를 증가시켜 최적의 파라미터를 찾는다.

  • GMM(혼합가우시안모델), Mixture of Bernoulli, 결측데이터 처리, 클러스터링, 모수추정 등 다양한 분야에서 사용된다. 데이터가 불완전하거나 숨겨진 변수가 있을 때 유용하다.


과제

  • latent vector(잠재 벡터) = z는 encoder를 거쳐서 나온 mu와 logvar를 reparameterize(mu + std * epsilon)과정을 거쳐 나온다.

  • VAE의 손실함수에서도 torch.sing(x)를 거쳐야 한다.

def loss_function(recon_x, x, mu, logvar):
    MSE = nn.functional.mse_loss(recon_x * torch.sign(x), x, reduction='sum')
    KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
    return MSE + KLD

피어세션

  • 금요일이라 팀회고를 진행했다. 4주차 팀회고

  • 다다음주에 있을 프로젝트를 어떻게 진행할 지에 대해 토의했다.
    jira vs github project 뭐가 더 좋을까?
    팀원 배분은 어떻게 할까?


회고

  • 이번 주차는 진짜 힘들었다..
    통계적 지식, 수리적 지식, 수식 다 잘 알지 못하는 상태에서 수준 높은 강의를 듣다 보니까 제대로 이해하기가 힘들었다.

  • 이번 주차때 배운 내용은 추가적으로 주말에 공부를 계속 해야될 것 같다.

  • 그리고 통계 기초내용은 따로 공부를 차근차근히 진행해둬야할 것 같다.

profile
Backend Dev / Data Engineer

0개의 댓글