일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- category
- linear regression
- bayes ball algorithm
- 비트코인
- Miracle morning
- neural network
- ML
- probabilisticmodeling
- backpropagation
- 알고리즘
- Chain rule
- 일기
- meta-learner models
- neural network for causality
- 역전파
- 시계열분석
- LSTM
- 머신러닝
- gradient
- Causality
- diary
- 선형회귀분석
- English
- 암호화폐
- Montecarlo
- Causal Inference
- importancesampling
- SF
- MCMC
- UCB
- Today
- Total
zip-sa | Data is important
Monte Carlo (MC) 근사와 샘플링 기법 본문
다뤄볼 내용 :
- Monte Carlo Approximation
- Markov Chain Monte Carlo (MCMC)
- Metropolis-Hastings Algorithm
- Importance Sampling
0. 개요
MC 근사법은 매우 복잡하거나 정확하게 계산하기 어려운 확률 문제를 해결하기 위해 주로 사용되는 방법입니다. 특히 고차원 문제나 복잡한 확률 분포를 다룰 때, 랜덤 샘플링을 통해 근사치를 계산하여 효율적인 해법을 제공합니다.
1. Monte Carlo Approximation의 기본 개념
MC 근사는 복잡한 함수 ($f(z)$)와 확률 분포 ($p(z)$)의 기대값 ($E[f(z)]$)를 계산할 때 사용됩니다. 특히 정확한 계산이 불가능하거나 연산이 매우 오래 걸릴 때, 랜덤 샘플링을 통해 근사하는 것이 핵심입니다.
- 중요 요소
- 샘플의 수: $(L)$
- 샘플링 수가 충분히 많다면 고차원에서도 유용하게 적용 가능
샘플링 방법을 선택하기 전 상황
- 정확한 $(p(z))$를 알고 있을 때: 샘플링이 간단하며, 정확한 확률 분포를 따르는 샘플을 생성할 수 있습니다.
- 정확한 분포를 모르고 정규화 상수만 모를 때 ($\tilde{p}(z)$): 정규화되지 않은 확률 분포로부터 샘플링이 필요할 수 있습니다.
2. 기본 샘플링 알고리즘
2.1 표준 분포로부터 샘플링
Inverse Transform Sampling
Inverse CDF(누적 분포 함수)를 이용한 샘플링 방법입니다. 원하는 확률 분포의 CDF의 역함수를 사용하여 샘플링을 수행합니다. 예를 들어, 균등 분포에서 난수를 생성한 뒤 원하는 분포로 변환할 수 있습니다.
- 파란색 히스토그램: Inverse Transform Sampling을 통해 생성된 샘플의 분포입니다.
- 빨간색 선: 이론적인 지수 분포의 확률 밀도 함수(PDF)입니다
- 제한 사항
- 정확한 PDF(확률 밀도 함수)를 알아야 함.
- Inverse CDF가 계산되지 않을 수 있음.
- 정규화 상수를 알고 가정해야 함.
해당 기법의 자세한 구현 및 응용은 추후 다루도록 하겠습니다.
3. Rejection/Importance Sampling
3.1 Rejection Sampling (거절 샘플링)
거절 샘플링은 특정 분포에서 샘플을 생성할 때 활용되며, 대상 분포와 비교하여 샘플의 채택 여부를 결정합니다. 이 방법은 효율이 낮을 수 있지만, 특정 분포에서 직접 샘플을 추출하기 어려운 경우 유용합니다.
3.2 Importance Sampling (중요 샘플링)
중요 샘플링은 다른 분포에서 샘플링한 후, 각 샘플의 가중치를 조정하여 목표 기대값을 계산하는 방법입니다. 이는 특히 고차원 문제나 계산 비용이 높은 문제에서 자주 사용됩니다.
- 파란색 히스토그램: Uniform 분포에서 샘플을 추출한 뒤, 표준 정규 분포의 가중치를 적용한 샘플의 분포입니다.
- 빨간색 선: 목표 분포인 표준 정규 분포의 확률 밀도 함수(PDF)입니다.
- 장점: 직접적인 샘플링이 어려운 상황에서도 기대값을 추정할 수 있음.
- 단점: 가중치가 크거나 작은 샘플들이 결과에 과도한 영향을 미칠 수 있음.
Importance Sampling의 심화 내용은 추후 따로 다루도록 하겠습니다.
4. Markov Chain Monte Carlo (MCMC) 기초
MCMC는 확률 분포를 효과적으로 샘플링하는 방법으로, 복잡한 후방 분포를 추정할 때 많이 사용됩니다. MCMC는 마르코프 체인을 통해 연속적인 샘플을 생성하며, 관심 있는 확률 분포를 근사할 수 있습니다.
4.1 Markov Chain Monte Carlo (MCMC)
- 목적: $(q(z) = P(z|x))$를 추정
- 문제: $(P(x))$를 구하기 어려움
- 해결: $Posterior$를 추정할 수 있는 방법 제공
4.2 Markov Chain의 기본 개념
마르코프 체인은 연속된 랜덤 변수들의 시퀀스로, 이전 상태에만 의존하여 다음 상태로 전이됩니다. 이러한 체인은 특정 조건 하에 고유한 정적 분포로 수렴합니다.
- 정적 분포 (Stationary Distribution): 특정 전이 행렬 $(T)$를 계속 곱해도 상태가 변하지 않는 경우.
4.3 Metropolis-Hastings 알고리즘
Metropolis-Hastings 알고리즘은 제안된 분포와의 비교를 통해 샘플을 수락하거나 거부하는 방식입니다. 이는 확률적 샘플링의 효율성을 높이는 데 도움을 줍니다.
- Variance 조절: 분산을 작게 잡으면 수렴이 느려지고, 크게 잡으면 거절될 확률이 높아짐.
4.4 Gibbs Sampling
Gibbs 샘플링은 조건부 분포를 이용해 샘플을 반복적으로 생성하며, 모든 샘플이 항상 수락되는 방식입니다. 마르코프 블랭킷을 이용해 각 변수에 대해 순차적으로 샘플링합니다.
- 마르코프 블랭킷: 특정 변수를 샘플링할 때 고려해야 할 최소한의 주변 변수들.
MCMC 기법의 세부 구현과 PyTorch 코드 예제는 추후 추가 포스팅에서 다룰 예정입니다.
PyTorch 예제: 간단한 MCMC 구현
다음은 PyTorch를 사용하여 간단한 Metropolis-Hastings 알고리즘을 구현하는 예제입니다. 이 코드는 정규 분포에서 샘플을 생성하는 과정을 보여줍니다.
import torch
def target_distribution(x):
# 목표 분포: 정규 분포
return torch.exp(-0.5 * x**2) / torch.sqrt(torch.tensor(2 * torch.pi))
def metropolis_hastings(num_samples, proposal_std=1.0):
samples = [0.0] # 초기값
current = torch.tensor(samples[-1], dtype=torch.float32)
for _ in range(num_samples):
proposal = current + torch.randn(1) * proposal_std
acceptance_ratio = target_distribution(proposal) / target_distribution(current)
# 샘플 수락 여부 결정
if torch.rand(1) < acceptance_ratio:
samples.append(proposal.item())
current = proposal
else:
samples.append(current.item())
return samples
# 샘플 생성 및 시각화
samples = metropolis_hastings(1000)
print(samples[:5]) # 일부 샘플 출력
# 출력 결과
[0.0, 0.06982042640447617, 0.06982042640447617, 1.2540227174758911, 0.9184370040893555]
이 코드는 Metropolis-Hastings 알고리즘을 이용하여 정규 분포에서 샘플을 생성하며, 샘플 수락 여부는 현재 상태와 제안된 상태의 비율에 따라 결정됩니다.
해당 내용은 추후 별도로 더 깊게 다룰 예정이며, 자세한 구현 예제를 작성해볼 계획입니다.
'AI > ML' 카테고리의 다른 글
Causality and Machine Learning (6) | 2024.09.09 |
---|---|
Backpropagation with PyTorch (3) | 2024.08.16 |
Neural Network: Understanding the Basics and Implementation (5) | 2024.08.16 |
Building Machine Learning Models with PyTorch: Key Concepts and Fundamentals (5) | 2024.08.16 |
Machine Learning Life Cycle(with Titanic) (3) | 2024.08.16 |