동적 가우스 뉴턴 메트로폴리스 알고리즘

읽는 시간: 5 분
...

📝 원문 정보

  • Title: Dynamic Gauss Newton Metropolis Algorithm
  • ArXiv ID: 2001.03530
  • 발행일: 2020-01-13
  • 저자: Mehmet Ugurbil

📝 초록 (Abstract)

GNM: MCMC 자agger. 멋진 샘플러입니다. 이 파이썬 패키지는 동적 가우스-뉴턴-메트로폴리스(GNM) 알고리즘 기반의 아핀 불변 마르코프 연쇄 모노테카로(MCMC) 샘플러를 구현합니다. GNM 알고리즘은 $e^{-||f(x)||^2/2}$ 형태의 높이 비선형 사후 확률 분포 함수 샘플링에 특화되어 있습니다. 이 패키지는 원래 GNM 알고리즘의 백오프 전략 위에 동적 하이퍼파라미터 최적화 기능을 추가하여 샘플링 성능을 향상시키는 것을 포함하고 있습니다. 또한, 제이코비안 테스터와 오차 표시 생성기 등 사용자 편의를 위한 다양한 기능들이 코드에 포함되어 있습니다. 문제 정의 및 설치 가이드가 소개 부분에서 제공되며, 파이썬 패키지의 사용 방법을 설명하고 알고리즘과 예제를 통해 알고리즘 성능을 보여줍니다.

💡 논문 핵심 해설 (Deep Analysis)

This paper introduces the GNM algorithm, a specialized Python package for sampling from highly nonlinear posterior probability distribution functions. The core issue tackled by this research is related to non-linear least squares problems that arise in statistics and engineering, where the objective is to find parameters $x$ that minimize the difference between model predictions and real measurements. Traditional algorithms often struggle with efficiently sampling complex, high-dimensional distributions.

The GNM algorithm is designed to address these challenges effectively. It samples probability density functions of the form $p(x) \propto e^{-||f(x)||^2/2}$, which makes it particularly useful for dealing with complex models where parameter estimation can be highly nonlinear and difficult. One key feature of the GNM package is its dynamic hyper-parameter optimization that enhances performance by improving the back-off strategy used in sampling.

The paper demonstrates through examples that the GNM algorithm performs well across various non-linear problems, especially when combined with a back-off strategy to refine sampling outcomes. The results show significant improvements both in acceptance rates and autocorrelation times, indicating more efficient and accurate sampling compared to traditional methods. This makes the GNM algorithm an important tool for improving model estimation and prediction accuracy in complex systems.

📄 논문 본문 발췌 (Translation)

# 서론

문제 제기

GNM 알고리즘은 $p(x)\propto e^{-||f(x)||^2/2}$ 형태의 확률 밀도 함수 샘플링을 위한 알고리즘이다. 여기서 $x\in \mathbb{R}^n$는 “파라미터” 벡터, $f:\mathbb{R}^n\to\mathbb{R}^m$은 “모델” 함수이며, $||f(x)||^2=\sum_{k=1}^m f_k^2(x)$이다. 일반적으로 $m>n$이다. GNM 알고리즘은 고도로 비선형 문제에서 아핀 불변성을 통해 강력한 샘플링 성능을 제공한다.

이는 통계학에서 발생하는 비선형 최소 자승법 $\min_x ||f(x)||^2$와 관련이 있다. 예를 들어, $m(x)$가 파라미터 $x$에 대한 실험 결과를 예측하고 $y_k$가 측정값이라면, 적합도는 $\sum_{k=1}^m\frac{(m_k(x)-y_k)^2}{2\sigma_k^2}$로 표현된다. 만약 $f_k(x)=\frac{m_k(x)-y_k}{\sigma_k}$라고 하면, 이 합은 $||f(x)||^2/2$ 형태를 갖는다.

확률 밀도 함수 $p(x)$의 일반화에는 파라미터에 대한 가우시안 사전 확률 분포 $\pi:\mathbb{R}^n\to\mathbb{R}$가 추가될 수 있으며, 여기서 $\pi(x)=\frac{1}{Z}e^{-(x-m)^T H(x-m)/2}$이다. 여기서 $m$은 평균이고 $H$는 공분산의 역행렬인 정밀 행렬이다. 또한 지시 함수 $\chi:\mathbb{R}^n\to \{0,1\}$를 사용하여 모델 함수의 도메인을 제한할 수 있다.

사용자는 샘플러에서 $x$, $f(x)$ 및 $\nabla f(x)$, 즉 Jacobian을 계산하는 파이썬 코드를 작성해야 합니다. 사전 정보를 추가하는 것은 선택사항이며, 평균 벡터 $m\in\mathbb{R}^n$과 정밀 행렬 $H\in\mathbb{R}^{n\times n}$ (공분산의 역행렬)을 사용할 수 있다.

설치

gnm은 파이썬 패키지입니다. numpy가 필요하며, 예제와 결과 플롯에 matplotlib , 그리고 acor 기능에는 acor 도 필요합니다.

기본 파이썬 패키지로는 os, setuptools (또는 distutils), re, sys, copy, 및 json이 필요하며, 이들 대부분은 파이썬 설치 시 함께 제공됩니다.

파이썬 패키지인 gnm을 설치하는 가장 쉬운 방법은 pip 를 사용하는 것입니다.

BASH
$ pip install gnm
클릭하여 더 보기

수동으로 다운로드하려면, git clone 또는 여기서 zip 파일을 다운로드할 수 있습니다.

BASH
$ git clone https://github.com/mugurbil/gnm.git
클릭하여 더 보기

그런 다음 gnm 디렉토리에 들어가서 setup.py를 실행합니다.

BASH
$ python setup.py install
클릭하여 더 보기

설치 후 리포지토리를 정리하려면, setup.py의 clean 명령을 사용할 수 있습니다.

BASH
$ python setup.py clean
클릭하여 더 보기

예제

빠른 시작

gnm/examples 디렉토리에 있는 quickstart.py 파일에는 간단한 예가 포함되어 있습니다. 이 파일을 실행하면 Figure [[IMG_PROTECT_1]]과 같은 플롯이 생성됩니다.

BASH
$ python quickstart.py
클릭하여 더 보기

이 예제에서는 $n=m=1$, $f(x)=$, $f'(x)=$. 사전 정보는 평균 m=0과 정밀 행렬 $H=[1]$을 가지며, 이로 인해 $\pi(x)=e^{-x^2/2}$가 됩니다. 따라서 샘플링하려고 하는 확률 분포는 다음과 같습니다:

$$p(x) = \frac{1}{Z}\pi(x)e^{-|f(x)|^2/2}=\frac{1}{Z}e^{-x^2/2-(x^2-y)^2/(2\sigma^2)}.$$

[[IMG_PROTECT_1]]

우물

quick-start에서 사용된 문제를 더 어렵게 만들 수 있습니다. 이를 위해 y 값을 크게 설정할 수 있습니다. 이 예제는 $\sim$/well 폴더에 있습니다. 다음 명령을 통해 파일의 모든 옵션을 확인할 수 있습니다.

BASH
$ python well.py -h
클릭하여 더 보기

Jtest 및 간단한 2D

이 예제에서는 먼저 Jtest 사용법을 설명하고, 간단한 2D 예제를 샘플링합니다. 시각화를 위한 rotator가 있으며, 이는 평면 상에서 사후 확률 분포의 어떤 절편도 플롯할 수 있습니다.

지수 시간 시리즈

우리는 시간과 데이터 간의 관계를 설명하는 과정 $g(t)=\sum_{i=1}^{n} w_i e^{-\lambda_i t}$가 있다고 가정합니다. 측정값은 $y_k = g(t_k) + \epsilon_k$이며, 여기서 $k=1,...,m$, 노이즈는 독립적이고 동일하게 분포되며 $\epsilon_k\sim N(0,\sigma_k^2)$입니다. 따라서 파라미터는 $x=(w_1,...,w_d,\lambda_1,...,\lambda_d)$이며, $n=2d$입니다. 모델 함수는 $f_k(x)=\frac{g_k(t,x)-y_k}{\sigma_k}$, $k=1,...m$으로 주어집니다.

[[IMG_PROTECT_2]]

실험은 $n=4$, $m=10$로 수행되었습니다. 샘플러는 $10^5$ 샘플을 생성하였고 초기 $2000$ 샘플은 버려졌습니다. 사전 정보의 평균은 $[4., 2., 0.5, 1.]$, 정밀 행렬은 항등행렬에 $0.5$를 곱한 것입니다. 초기 추측값은 사전 정보의 평균입니다. 데이터는 입력을 $[1., 2.5, 0.5, 3.1]$으로 설정하고 표준 편차가 $0.1$인 랜덤 정규 분포 노이즈를 추가하여 생성되었습니다.

[[IMG_PROTECT_3]] [[IMG_PROTECT_4]]

최대 단계 확장 비율 수락률 Acor 시간 유효 크기 함수 호출 횟수
0 - 0.273 2880 3470 $1.00 \times 10^7$
1 Dynamic 0.653 1720 5810 $1.73 \times 10^7$
1 0.1 0.603 1390 7180 $1.73 \times 10^7$
1 0.5 0.411 1760 5680 $1.73 \times 10^7$
2 0.1 0.812 1510 6610 $2.12 \times 10^7$

지수 시간 시리즈 샘플링에 대한 샘플링 전략의 비교.

이 실험에서는 Table 4를 분석한 결과, 백오프 전략을 사용하여 수락률과 자기 상관 시간에서 유의미한 개선을 보였지만, 동적 백오프는 이 결론에 크게 영향을 미치지 않았음을 알 수 있습니다. 자기 상관 시간이 낮아질수록 유효 샘플 크기가 커집니다. 따라서 1단계 백오프의 경우 $8850$ 유효 샘플이 생성되었으며, 이는 함수 호출당 $0.0506$ 유효 샘플을 의미합니다. 반면에 백오프 없이는 $5952$ 유효 샘플이 생성되며, 이는 함수 호출당 $0.0531$ 유효 샘플을 의미합니다. 3단계 백오프의 경우 유효 샘플 당 함수 호출 수가 크게 증가하여 효율성이 떨어집니다.

[[IMG_PROTECT_5]]

Figure 4에서는 체인의 공분산이 안정적임을 관찰할 수 있으며, 이는 체인이 정상 상태에 도달했음을 의미합니다. Figure 5에서 각 단계별로 샘플이 수락되는 비율을 확인할 수 있습니다. 예제를 통해 사용 가능한 백오프 단계가 너무 많으면 효율성이 크게 떨어짐을 알 수 있지만, 첫 번째 백오프 단계는 약 30%의 수준에서 알고리즘의 수락률을 크게 증가시킵니다.

[[IMG_PROTECT_6]]

Reference

이 글은 ArXiv의 공개 자료를 바탕으로 AI가 자동 번역 및 요약한 내용입니다. 저작권은 원저자에게 있으며, 인류 지식 발전에 기여한 연구자분들께 감사드립니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키