오늘은 변분추론 2번째 강의를 공부했다.
일일 학습 정리로 매일 복습, 과제, 피어세션, 회고 정리했고 아래 링크 달았습니다.
log marginal likelihood, 즉 log p(x)
값은 최대화하기 어려우므로 이를 하한선인 ELBO
값으로 근사해서 ELBO값을 최대화 하는것이 목표다.변수 설명
x: 관측 데이터
z: 잠재 변수(latent variable)
: 데이터와 잠재 변수의 결합 확률 분포
: 잠재 변수에 대한 변분 분포
θ,ϕ: 모델의 파라미터
ELBO를 최대화하는것은 변분분포 와 실제 posterior 분포 간의 KL발산
을 최소화하는 것과 같다.
베르누이 분포들의 혼합을 이용해 이진데이터를 모델링하는 방법
N개의 binary 데이터가 르 파라미터로 가진 K개의 베르누이 분포(클러스터)에서 나왔다고 할 때,
로 모델링할 수 있다.
는 각 클러스터의 비율 다 더하면 1. prod에 log를 씌우면 sum으로 바뀐다.
각 클러스터의 파라미터 와 클러스터의 비율 를 추론해야한다.
숨겨진(관측되지 않은) 잠재 변수나 결측데이터가 있는 상황에서 MLE(최대가능도추정)을 수행하기위한 반복적인 최적화 방법
E-step(expectation)
현재 추정된 파라미터 를 사용해서 잠재변수 z의 조건부 기대값을 계산한다.
즉, 현재 파라미터를 기반으로 잠재변수를 추정한다.
M-step(Maximization)
위에서 계산된 기대값 을 최대화하는 파라미터 을 찾는다. 즉, 주어진 기대값을 최대화하도록 파라미터를 업데이트한다.
위의 E,M스텝을 번갈아 반복하면 파라미터 는 점진적으로 수렴한다.
이 반복에서 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 뭐가 더 좋을까?
팀원 배분은 어떻게 할까?
이번 주차는 진짜 힘들었다..
통계적 지식, 수리적 지식, 수식 다 잘 알지 못하는 상태에서 수준 높은 강의를 듣다 보니까 제대로 이해하기가 힘들었다.
이번 주차때 배운 내용은 추가적으로 주말에 공부를 계속 해야될 것 같다.
그리고 통계 기초내용은 따로 공부를 차근차근히 진행해둬야할 것 같다.