Approximate Inference란 무엇인가?
Machine Learning 분야(특히 Probabilistic Learning 및 Generative Modeling)에서 활용되는 ‘복잡한’ 확률 Model의 경우 대부분 Appoximate Inference 과정을 수행하게 된다. 아래에서 언급하는 Model은 모두 확률 Model을 의미한다.
사실 여기서 말하는 Inference는 기존 ML 분야에서 언급하는 Inference와는 다른 특성을 띈다. 기존 ML 분야에서 언급하는 Inference는 Model 학습이 끝난 이후, 해당 Model을 대상으로 Query를 날리는 과정을 의미한다. 좀 더 쉽게 표현하자면, 어떤 현상을 설명하기 위한 Model이 완성된 이후 이 Model을 근거로 다른 질문을 던진다는 말이다. 예를 들어, 흡연 여부, 질병 여부 등을 변수로 포함하는 Model에서 ‘특정 질병을 가진 사람이 흡연자인가?’라는 질문을 던지는 경우가 이에 해당한다.
하지만 Approximate Inference를 이해할 때에는 위와 같은 간단한 예시가 별로 도움이 되지 않는 편이라고 생각한다. 용도 면에서 큰 차이가 있기 때문이다.
일반적인 Inference는 우리가 만든 Model로부터 직접적인 답(확률값?)을 얻어내는 경우에 사용된다. 이미 Model이 만들어졌다는 점에 주목하자. 그런데, 일반적으로 Approximate Inference는 Model을 학습하는 과정에서 수행이 되는 Inference이다. Model이 만들어지기 전에 Inference라는 말이 튀어나오기 때문에 위와는 다른 맥락의 접근이 필요한 것이다.
이 이야기를 하려면 필연적으로 Bayesian Inference를 다루어야 한다. Bayesian Inference는 현재 모델(Prior Dist.)이 새로이 투입되는 Data에 따라(Likelihood/Evidence) 어떻게 변화하는지(Posterior Dist.)를 알아내는 데에 쓰이는 방법이다. 대충 읽어보면 Bayes’ Rule을 이야기하는 것 같은데, 사실 그게 다다. 단, ‘Bayesian Inference를 한다’라는 말은 Data로 인해 변화한 Model의 분포를 찾는 Inference를 수행한다라는 협의를 담고 있다.
좀 더 문자를 사용해 말한다면, ‘사후확률을 유도해내는 수식 = Bayesian Inference’라는 소리
이 상황을 수식으로 풀어보면, 쉽게는 아래처럼 나타낼 수 있다.
그런데, 문제가 하나 있다. 잠재변수를 포함하거나, 시스템에 포함된 변수 자체가 많은 경우에는 Bayesian Inference를 통하여 정확한 값을 구해내는 것이 좀처럼 쉽지 않다는 것이다. 이 문제의 원인은 위 수식의 P(D)항이다.
간단하게 생각해보면, P(D)는 Data의 확률값이다. 이게 그런데 말이 쉽지, 도대체 Data의 확률값은 무슨 말일까? Data의 분포를 말하는 건가? — 뭐… 이 말도 틀린 말은 아니다. 하지만 예시를 하나 들여다보면 이게 그리 간단한 문제가 아님을 알 수 있게 된다.
Data D가 각 사람의 신장 값에 해당한다고 하면… D의 형태는 대략 (174, 162, 177, 192…) 이런 형태를 띄게 된다. 그럼 D의 분포는 우리가 흔히 아는 Histogram 형태로 표현될 수 있을 것 같다. 하지만 Generative Model, 즉 Data가 어떤 분포로부터 생성된다는 관점을 차용하게 되면, 우리가 손에 들고 있는 Data의 분포가 P(D)를 의미하지 않는다. 오히려 우리가 현재 갖고 있는 Data는 해당 Data의 분포를 다루는 어떤 Model로부터 생성이 되어 있는 것이고, 이 Model로부터 현재의 Data가 나타났을 확률로서 P(D)라는 표현을 사용하게 되는 것이다.
따라서 Model 내에 Latent Variable을 포함하는 경우엔 P(D)는 P(D, Z)를 Z에 대해 Marginalize 시킨 결과물이 된다. 문제는 Z는 우리가 직접 관측할 수 없는 변수이고, 우리의 확률 가정이 어떤 Z를 만들어내냐에 따라 P(D, Z)값은 달라진다는 점이다. 너무도 많은 경우의 수가 발생하는 셈이고, Z변수가 갖는 값의 복잡도에 따라 P(D)의 복잡도는 큰 폭으로 증가하게 된다. 일반적으로 Prob. Model에서 다루는 Z 변수는 Continuous Domain에 대해 값을 갖거나, 다양한 확률적 가정을 동반하고 있다.(Hierarchical Model을 이용하는 경우) 지저분하게 길게 적었는데, 이는 곧 ‘정확한 값을 구하기가 무척이나 어렵다’라는 얘기다.
정확한 값을 구할 수 없는 경우, 대부분은 그나마 비슷한 값이라도 구하자라는 쪽으로 접근 방식을 변경하기 마련이다. 근사적인 방법으로 우리의 목적인 사후확률, P(Z|D)를 구해보자는 것이 Approximate Inference이다. 그리고 이건 다 P(D) 때문이다…
P(Z|D)를 구하는 전략을 어떻게 세우냐에 따라 Approximate Inference는 크게 두 가지로 구분되어지곤 한다.
- Sampling Method: 실제로 해당 분포와 가까운 환경에서 만들어내는 Sample을 통해 목적 분포를 역추적하는 방법 : Markov Chain Monte Carlo(MCMC) / Metropolis-Hastings, Hamiltonian Monte Carlo 등등
- Variational Method: 변분법(Variational Calculus) 개념을 차용한 Optimization 전략 : Variational Inference
위 두 방법은 P(D)를 구하지 못함으로 인해 사후확률을 구하지 못한다는 한계를 보완하기 위해 각기 다른 방식을 활용한다.
조만간, 위의 두 방법론에 대한 자세한 포스팅을 할 수 있길 기원해보겠다. 일단은 개론(?)이라고 부르기에도 부족한 개괄적인 서술을 해놓는 데에 만족해보자…