앞선 게시글 (https://pasus.tistory.com/358)에서, 천이 커널(transition kernel)
메트로폴리스(Metropolis)가 처음 제안하고 이후 헤이스팅스(Hastings)가 일반화한 방법에 따르면, 이산(discrete) 상태 공간에서도 계산이 어려운 천이 커널의 명시적인 함수를 구하는 대신, 이전 샘플이 주어졌을 때 새로운 샘플을 추출하는 절차를 명확히 정의하는 방식으로 이를 해결한다.
메트로폴리스-헤이스팅스(MH, Metropolis-Hastings) 알고리즘은 가장 널리 사용되는 MCMC 방법으로서 한때 20세기 과학과 공학의 발전에 가장 큰 영향을 미친 10대 알고리즘으로 선정된 적이 있다고 한다.
우선 다음과 같이 목표 확률밀도함수가 주어졌다고 가정한다.
여기서
다음을
0. 첫 샘플
1. 새로운 후보 샘플을 추출한다.
여기서
2. 후보 샘플의 수락 확률(acceptance probability)을 계산한다.
3. 확률
즉 균등분포
4. 수락하면 새로운 샘플로 편입하고 (
MH 알고리즘은 매우 간단하다는 장점이 있지만, 제안 확률밀도함수
제안 확률밀도함수의 쉬운 예로서는 독립 샘플러(independent sampler)와 메트로폴리스 알고리즘을 들 수 있다. 독립 샘플러는 제안 확률밀도함수가 다음과 같이 현재의 샘플에 독립적인 것이다.
메트로폴리스 알고리즘은 다음과 같이 제안 확률밀도함수가 대칭이라고 가정한다.
그러면 수락 확률은 다음과 같이 목표 확률밀도함수만의 함수가 된다.
이 밖에 제안 확률밀도함수의 설계 방식에 따라 다양한 MCMC 알고리즘이 고안되어 왔다.
한편 MH 알고리즘으로 생성된 샘플 중 초기 '번인(burn-in)' 기간의 샘플은 무시하고, 마르코프 시퀀스가 정상 상태에 도달한 이후의 샘플만 사용해야 한다.
다음은 MH 알고리즘의 시뮬레이션 예이다. 목표 확률밀도함수는 다음과 같다.

그림에서 보듯이 두 개의 모드가 있는 확률밀도함수이다. 이런 확률밀도함수로 부터 샘플을 추출하는 것은 어렵다. 다음은 제안 확률밀도함수다. 샘플 추출이 용이하도록 다음과 같이 표준편차가
MH 알고리즘을 이용하여 30,000 개의 샘플 시퀀스를 생성하였다.

초기 번인(burn-in) 기간을 감안하여 5,000번째 이후의 샘플만을 이용하여 샘플의 히스토그램을 그려본 결과 목표 확률밀도함수와 거의 일치함을 확인할 수 있다.

다음은 예제 시뮬레이션에 사용된 매트랩 코드다.
%
% MCMC-MH algorithm
%
% (c) st.watermelon
clear;
% target pdf
p_pdf = @(x) 0.5*exp(-(x+2).^2) + 0.5 * exp(-(x-2).^2);
% Gaussian proposal pdf with mu-mean and 1-std
q_pdf = @(x, mu) 1/sqrt(2*pi)*exp(-(x-mu)^2/2);
% 0. initialize
n_step = 30000;
x = randn(1);
for t = 1 : n_step
% 1. sampling from proposal q(x_new|x_t)
x_new = randn(1) + x(t);
% 2. acceptance probability
alpha = min(1, ...
(p_pdf(x_new)*q_pdf(x(t),x_new)) / (p_pdf(x(t))*q_pdf(x_new,x(t)))...
);
% 3. accept or reject
u = rand(1);
if u < alpha
x = [x; x_new];
else
x = [x; x(t)];
end
end
% result
xx = linspace(-5,5,1000);
figure
plot(x), title('MC'), xlabel('time step')
figure
h = histogram(x(5000:end),'BinWidth',0.2, 'Normalization','probability','FaceColor','y');
hold on
plot(xx, p_pdf(xx)/max(p_pdf(xx))*max(h.Values),'Color','b','linewidth',1.5)
grid on
figure
plot(xx, p_pdf(xx)/max(p_pdf(xx)));
'AI 수학 > 랜덤프로세스' 카테고리의 다른 글
[MCMC] MCMC 개요 (0) | 2024.12.26 |
---|---|
정상 시퀀스 (Stationary Sequence) (0) | 2024.11.06 |
중요 샘플링 (Importance Sampling) (0) | 2021.01.06 |
혼합 랜덤변수 (Mixed Random Variables) (0) | 2020.12.27 |
랜덤변수의 함수와 샘플링 - 3 (0) | 2020.12.26 |
댓글