logo

가우스 과정 📂확률론

가우스 과정

정의 1

확률과정 {Xt}\left\{ X_{t} \right\} 의 모든 유한 부분집합 S={Xtk}k=1n{Xt}S = \left\{ X_{t_{k}} \right\}_{k=1}^{n} \subset \left\{ X_{t} \right\} 에 대해 SS 의 원소들의 모든 선형결합 k=1nakXtk,{ak}k=1nR \sum_{k=1}^{n} a_{k} X_{t_{k}} \qquad , \left\{ a_{k} \right\}_{k=1}^{n} \subset \mathbb{R} 다변량 정규분포를 따르면 {Xt}\left\{ X_{t} \right\}가우시안 프로세스Gaussian process라고 한다.

설명

비전공자가 보기에는 정의가 조금 지나치게 수학적으로 보일 수 있는데, 직관적으로 보았을 땐 위너 프로세스와 크게 다르지 않다. 물론 정의에 따라 엄밀하게 따져보면 위너 프로세스는 가우시안 프로세스지만 그 역은 성립하지 않는다.

기하 브라운 운동은 각 시점에서 로그-정규분포를 따르므로 가우시안 프로세스가 아니다.

응용

베이지안에서는 사전 분포 그 자체로. 머신러닝에서는 랜덤한 데이터를 만들어내는 등으로 자주 쓰인다. 예로써 [x1,xn]\left[ x_{1} , x_{n} \right] 에서 가우시안 프로세스를 만드는 수단으로는 다음과 같이 가우시안 커널 k=k(u,v)k = k(u,v)공분산행렬 Σ\Sigma 를 만들어서 다변량정규분포에서 샘플링하는 방법이 널리 사용되고 있다. k(u,v)=exp(12(uv)2)Σ=[k(x1,x1)k(x1,x2)k(x1,xn)k(x2,x1)k(x2,x2)k(x2,xn)k(xn,x1)k(xn,x2)k(xn,xn)] \begin{align*} k \left( u, v \right) =& \exp \left( - {\frac{ 1 }{ 2 }} \left( u - v \right)^{2} \right) \\ \Sigma =& \begin{bmatrix} k \left( x_{1} , x_{1} \right) & k \left( x_{1} , x_{2} \right) & \cdots & k \left( x_{1} , x_{n} \right) \\ k \left( x_{2} , x_{1} \right) & k \left( x_{2} , x_{2} \right) & \cdots & k \left( x_{2} , x_{n} \right) \\ \vdots & \vdots & \ddots & \vdots \\ k \left( x_{n} , x_{1} \right) & k \left( x_{n} , x_{2} \right) & \cdots & k \left( x_{n} , x_{n} \right) \end{bmatrix} \end{align*}

다음은 가우시안 프로세스를 샘플링하는 예제 코드를 줄리아로 구현한 것이다. 중간에 Σ\Sigma 에 아주 작게 εI\varepsilon I 을 더하는 이유는 수치적인 오류를 방지하기 위함이다.

R1\mathbb{R}^{1} 에서 샘플링

alt text

using Distributions, LinearAlgebra, Plots

k(u, v) = exp(-abs2(u - v) / 2)
x = LinRange(-5, 5, 100)
Σ = [k(x[i],x[j],1) for i ∈ 1:100, j ∈ 1:100]
ϵ = 1e-6
Σ += ϵ*I
plot(x, [rand(MvNormal(zeros(100), Σ)) for _ in 1:10],
    legend = :none, title = "Gaussian Process", lw = 2, alpha = .5)

R2\mathbb{R}^{2} 에서 샘플링

R1\mathbb{R}^{1} 에서와 달리 커널 함수에 들어가는 좌표가 22차원 벡터로 대체된다. 그러나 샘플링이 다변량 정규분포를 따르는 랜덤 벡터로써 얻어지는 것엔 차이가 없다. 그 벡터를 행렬의 모양으로 바꾸는 것이 핵심이다.

alt text

using Distributions, LinearAlgebra, Plots

k(u, v) = exp(-norm(u - v) / 2)
L = 100
x = LinRange(-5, 5, L)
Σ = reshape([k(u, v) for u in collect.(Base.product(x, x)) for v in collect.(Base.product(x, x))], L^2, L^2)
ϵ = 1e-6
Σ += ϵ*I
heatmap(x, x, reshape(rand(MvNormal(zeros(L^2), Σ)), L, L),
    title = "Gaussian Process", size = [400, 400])

같이보기


  1. Yang. (2008). LRD of Fractional Brownian Motion and Application in Data Network: p3. ↩︎