brunch

머신러닝에서 ELBO의 의미

ELBO를 최대한 쉽게 설명해 보기

by 낙타

뭔가를 확률로 모델링한다고 해봅시다. 여기서 뭔가란, 이미지 각 픽셀의 색깔, 문장에서 특정 자리에 들어갈 단어, 어떤 사람이 이 링크를 클릭할지 여부 같은 것들입니다. 실제 세상에서 관찰된 데이터(이미지, 문장, 클릭 로그)를 x라고 하고, x의 확률을 p(x)로 표현할 수 있습니다. p(x)를 evidence라고도 부르는데, 이미 관찰되어서 바뀔 수 없으며, 다른 확률 추정값의 근거라는 맥락에서 이해할 수 있는 이름입니다.


여기서 시작해서 ELBO까지 가려면 세 단계가 필요합니다.




첫 번째, 잠재변수를 도입합니다. 여기서 잠재변수란, 직접 관찰할 수는 없지만 x와 관련된 무엇입니다. MBTI를 생각해 보죠. 어떤 사람의 MBTI 유형이 무엇인지 직접 확인할 수는 없습니다. 질문 응답 등을 통해 추정할 뿐이죠. 그런데 만약 그 사람이 I 혹은 E형이라는 걸 안다면, 그의 행동 중 일부, 어쩌면 많은 부분을 설명할 수 있을 겁니다. 특정 상황에서 어떻게 행동을 할지도 어느 정도는 예측할 자신이 생깁니다. 그를 만난 적이 한 번도 없다고 해도 말이죠.


잠재변수는 MBTI 같은 것이어서, 새로운 변수를 추가한다고 문제가 더 어려워지는 것이 아니라 오히려 단순해집니다. 잠재변수를 통해 관찰된 현상 아래 숨어 있는 패턴을 포착하기 때문입니다. 같은 이유로 만약 x가 랜덤한 데이터라면 잠재변수를 도입해도 아무런 도움이 되지 않습니다.


잠재변수는 보통 z로 표기합니다. 조건부 확률 p(z|x)를 MBTI 예시에 대입하면, 어떤 사람의 행동 x가 관찰되었을 때, 그 사람의 MBTI가 z일 확률이라는 의미로 해석할 수 있습니다.




두 번째 단계로, q(z)라는 새로운 확률분포를 도입합니다. q(z)의 목적은 p(z|x)를 근사(approximate)하는 것입니다. 다만 이때 q(z)는 보통 우리가 통계학 수업에서 익히 이름을 들어본 잘 알려진 분포(e.g. 정규분포)를 따른다고 가정합니다. p(z|x)라는 막막한 대상에 이런 제약을 둠으로써 q(z)를 추정하는 문제를 좀 더 풀 만하게 바꿉니다.


그렇다고 확률분포를 아무렇게나 정하는 건 아닙니다. 도메인 지식을 활용해서 문제의 성격에 맞는, 말이 되는 분포를 써야 합니다. 가령, LDA(Latent Dirichlet Allocation) 같은 모델에서는 디리클레(Dirichlet) 분포와 다항분포를 사용합니다. 이렇게 q(z)의 확률분포를 정하면, 이제 우리의 문제는 그 분포의 파라미터를 추정하는 일이 됩니다.




세 번째로, q(z)가 얼마나 p(z|x)를 잘 근사하는지, 즉 비슷한지를 정량화해야 합니다. 그 방법으로는 KL-Divergence(쿨벡-라이블러 발산, KLD)라는 메트릭을 사용합니다. 표기하는 방법은 다음과 같습니다.

발산이라는 이름에서 느껴지듯이(?) 두 확률분포가 다를수록 값이 커집니다. 우리의 목적은 p(z|x)를 q(z)로 근사하는 것이기 때문에 이 KLD를 최소화해야 합니다. 참고로, KLD는 항상 0 이상의 값을 가집니다.

kld.png KL-Divergence


그런데 잠재변수 z는 관찰할 수 없다고 했는데, 보이지도 않는 p(z|x)를 어떻게 근사한다는 걸까요? 위에서 준비한 세 가지를 이용해 수식으로 풀어봅시다.

elbo.jpg ELBO

드디어 ELBO(Evidence Lower BOund)가 등장했습니다. 서두에서 p(x)를 evidence라고 했는데, KLD >= 0 이므로, (정확히는 로그를 취한) evidence는 항상 ELBO 이상의 값을 갖게 됩니다. 즉, ELBO는 evidence의 lower bound인 것이죠.


p(x)는 (정확한 값은 모르지만) 고정된 확률입니다. 합이 정해져 있으므로 ELBO항을 크게 만들수록 KLD는 작아집니다. 그래서 계산하기 어려운 KLD 대신에 ELBO를 최대화하는 파라미터를 찾는 것입니다. 이 수학적인 틀을 기본으로 해서, 각자의 방식으로 ELBO 최대화 문제를 푸는 여러 알고리즘이 있습니다.


변분 오토인코더(Variational Autoencoder, VAE)에서는 q(z)를 q(z|x)로 놓습니다. 원데이터 x로부터 잠재변수 z를 인코딩하고, 다시 z로부터 x를 디코딩하는 뉴럴넷을 학습합니다. 이때 ELBO 수식을 Reconstruction Error항과 Regularization항으로 분리해서 보면 의미가 직관적으로 해석됩니다. LDA의 경우는, 텍스트가 특정한 분포와 확률적인 프로세스에 따라 생성된다고 가정하고, 그 세팅에 맞춰서 ELBO를 최대화하는 파라미터를 찾습니다.


keyword
작가의 이전글같은 비용으로 더 효과적인 인센티브 설계하기