ガウス過程の応用

はじめに

前回の記事では、特定の分布や関係を仮定せず、与えられたデータに柔軟に対応することのできるモデルということで、ガウス過程回帰について取り上げました。

本記事ではガウス過程をさらに深堀りし、Stanなどでガウス過程を自在に扱うための土台を固めたいと思います。

本記事の構成は以下の通りとします。

特に以下2章は力を入れました。

当初本記事と次回の記事はひとつの記事として公開していましたが、余りにも長すぎる記事だったので、二つに分けました。

ガウス過程の導入

まず、ガウス過程を用いたモデルについて一般化します。
入力の要素数を数をIとし、入力データの1サンプルをx=(x1,,xI)Tと表記し、全入力をN×I行列xを用いてX=(x1,,xN)Tとおきます。また出力データをy=(y1,,yN)Tとおきます。

ガウス過程モデルの一般式は以下になります。

(1)y(x)=βf(x)+ϵ(x)

ここでf=(f1(x),,fl(x))β=(β1,,βl)はそれぞれ、ガウス過程モデルとは別で設定された特徴ベクトルとその重みです。これらはガウス過程を適用する以前からデータにあてはめられたモデルになります。

ϵ(x)は右辺第一項のモデルで説明しきれなかった残差としての扱いですが、この残差がガウス過程に従うと仮定します。ガウス過程モデルは得られたデータに柔軟に近づこうとする挙動をとりますので、この性質を利用して右辺第一項で説明できなかった部分をガウス過程で補おうという目論見です。

各入力の誤差項が同じ標準偏差σをとると設定できたとき、ϵ(x)=(ϵ(x1),,ϵ(xN))が以下のガウス過程に従うとします。

(2)ϵ(x)Normal(0,σ2K)

上式ではϵが残差を説明するものであることから多変量正規分布の平均を0としています。また分散共分散行列Kは、ハイパーパラメータϕを持つカーネル関数kϕ(xm,xn)を要素に持つN×N行列です(m,n=1,,N)。

(3)K(m,n)=kϕ(ϵ(xm),ϵ(xn))

各入力の標準偏差をσで設定している為、K(m,n)成分は、ϵ(xm)ϵ(xn)の相関に等しくなり、

(4)kϕ(ϵ(xm),ϵ(xn))=cor(ϵ(xm),ϵ(xn))

となります。

ガウス過程では、カーネル関数によってxmxnの距離を定める空間を決定し、入力xmxnの距離によって出力ϵ(xm)ϵ(xn)の近さを決定します。また、カーネル関数によって決まる値は、cor(ϵ(xm),ϵ(xn))と解釈することができる、ということです。

ガウス過程潜在変数モデル

多変量正規分布のサンプリング

(2)式で用いられる多変量正規分布について、ランダムにサンプルを得る方法を紹介します。

平均0、分散共分散行列Σの多変量正規分布からのサンプルを得る場合、まず

(5)Σ=LLT

を満たす行列Lを求めます。(4)式のような行列の分解はコレスキー分解と呼ばれます。

次に、標準正規分布からの乱数x=(x1,,xN)を生成します。

(6)xNormal(0,1)

y=Lxの分布は、

(7)p(x)=1(2πNdetΣ)exp(12(xTI1x))exp(12xTI1x)

x=L1yを代入すると、変数変換による空間の単位当たり面積の変動を調整するヤコビアン|y/x|は定数だから、

(8)p(Lx)exp(12(L1y)TI1L1y)|yx|=exp(12y1(L1)TL1y)=exp(12y1(LLT)1y)=exp(12yTΣ1y)

となります。

このことから、Normal(0,Σ)に従う乱数を生成するには、標準正規分布に従うxをランダムに生成し、y=Lxと変換すればよいと分かります。

ガウス過程潜在変数モデルとは

モデルの残差ϵ(x)がガウス過程に従うとした(2)式を、先ほど紹介した多変量正規分布の乱数生成法を用いて変形すると、

K=LLT (9)ηNormal(0,1) ϵ(x)=Lη

となります。(η=(η1,,ηn)) このように、潜在変数ηを用いたガウス過程は、ガウス過程潜在変数モデル(Latent variable GP)と呼ばれ、出力が正規分布でないとき等に有用です。

Stanでの実装

以下、Stanマニュアルを引用してLatent variable GPの実装について軽く触れておきます。

Latent variable GPのStanでの実装は以下のようになります。

data{
  int<lower=1> N;
  real x[N];
  vector[N] y;
}

transformed data{
  real delta = 1e-9;
}

parameters {
  real<lower=0> rho;
  real<lower=0> alpha;
  real<lower=0> sigma;
  vector[N] eta;
}

model {
  vector[N] f;
  {
    matrix[N, N] L_K;
    matrix[N, N] K = cov_exp_quad(x, alpha, rho);

    // diagonal elements
    for (n in 1:N)
      K[n, n] = K[n, n] + delta;

    L_K = cholesky_decompose(K);
    f = L_K * eta;
  }
  eta ~ std_normal();
  y ~ normal(f, sigma);
}

ここで、K = cov_exp_quad(x, alpha, rho)はガウスカーネルをつくる便利な関数で、

(10)K(m,n)=kα,ρ(ϵ(xm),ϵ(xn))=α2exp(12ρ2i=1I(xm,ixn,i)2)

を要素に持つカーネル行列Kを作成してくれます。

また、for (n in 1:N) K[n, n] = K[n, n] + delta;とすることで、カーネル行列の対角要素に微小な値を加えていますが、こうすることでカーネル行列の逆行列の計算を安定化させています。また、コレスキー分解はその対象が正定値行列であることが必須ですが、対角要素に微小量を加えることで、その行列が正定値行列であることを保証することができます。

(9)の3式の計算は、それぞれL_K = cholesky_decompose(K);eta ~ std_normal();f = L_K * eta;と指定しています。

上のコードでは、残差ではなく出力yの平均値がfNormal(0,Kϕ)に従うと設定し、y ~ Normal(f, sigma)とすることで、平均fの正規分布に従うと設定していますが、この部分をポアソン分布等他の分布にすることで、様々なモデルを構築することが出来ます。

例えば、0か1のみをとる出力yにベルヌーイ分布を仮定し、yn=1となる確率p=(p1,,pN)を、入力xnのガウス過程を用いて説明する場合、

yBinomial(p) (11)p=inverselogit(f)  fNormal(μ,K)

と表現でき、これをStanで実行する場合、以下のようになります。

data{
  int<lower=1> N;
  real x[N];
  vector[N] y;
  ...
}

parameters{
  real mu; //muはpの期待値 観測データが近くに無い場合に漸近する値
  ...
}

transformed parameters{
  vector[N]<lower=0, upper=1> p;
  ...
  p = mu + f;
  ...
}
...
model {
  mu ~ std_normal()
  ...
  y ~ bernoulli(p);
}

ガウス過程の予測分布

ガウス過程モデルにおいて、入力xに含まれない値X=(x1,,xN)に対応する出力の値y=(y1,,yM)を予測したい場合、yyの同時分布を次のようにすればよいです。

(12)(y1yNy1yM)Normal(0,(KkkTk))

ここで、k(n,m)=kϕ(xn,xm)k(m,m)=kϕ(xm,xm)です。

カテゴリカルな変数を用いたカーネル

前回記事も含めこれまでは連続型変数を扱うことを前提にしていましたが、連続的な値をとらず、絶対的な大小関係ももたない質的変数カテゴリカルな変数)が入力に含まれる場合、量的変数と質的変数の両方の性質を考慮した空間を定義することのできるカーネルを設定する必要があります。しかし、質的変数には「距離」の概念が無いため、ガウスカーネル等のように、各入力の「近接性」を再現するカーネルで対応することはできません。では、どのようにカーネル関数を設定すればよいのでしょうか。

質的変数が1つの場合

まず、量的変数と質的変数を含んだ入力をw=(xT,zT)Tとし、x=(x1,,xI)を量的変数、z=(z1,,zJ)を質的変数とします。それに従い、(1)式、(2)式を

(1’)y(w)=βf(w)+ϵ(w)

(2’)ϵ(z)Normal(0,σ2K)

としておきます。

簡略のため、m1個の値をとる一つの質的変数z1について考えます。 w=(xT,z1)=(xT,u)(u=1,,m1)におけるϵ(x)を、

(13)ϵ(x)=(ϵ1(x)ϵm1(x))

と定義します。すると、量的変数についてはϵ(x)の各要素内でのガウス過程で完結させ、質的変数の影響については、ϵ(x)の各要素間の分散共分散行列を決定すれば、量的変数・質的変数双方の差異を考慮した相関関数cor(ϵ(wm),ϵ(wn))を指定できそうです。そこで、ϵ(x)

(14)ϵ(x)=Aη(x)

と推定することにします。

ここで、η(x)=(η1(x),,ηm1(x))Tは量的変数における「距離」を考慮する部分で、各要素がそれぞれ独立に、標準偏差σ、相関関数Kのガウス過程に従って生成されるものとします。

また、m1×m1行列Aは質的変数の影響を考慮する部分で、単位行ベクトルau(auauT=1u=1,,m1)を用いて

(15)A=(a1am1)

とし、ϵi(x)(i=1,,m1)を単位行ベクトルaiの指定する重みに基づくη(x)の要素の線形和で表現することにします。

すると、

(16)cor(ηz1m(xn),ηz1n(xm))=(kϕ(xm,xn)000kϕ(xm,xn)000kϕ(xm,xn))

(ηi(xn)ηi(xm)i=iのときのみkϕ(xm,xn)の相関をとる)だから、2つの入力wi=(xiT,zi)T(i=m,n)の相関関数cor(ϵ(wm),ϵ(wn))について、

(17)az1maz1nTkϕ(xm,xn)=cor(az1mη(xm),az1nη(xn))=cor(ϵz1m(xm),ϵz1n(xn))=cor(ϵ(wm),ϵ(wn))

が成り立ちます(zm,zn=1,,m1)。

ここで、τr,s=arTas(r=zm,s=zn,r,s=1,,m1,)とおくと、半正定値行列T=AATは、

(18)T=AAt=(a1am1)(a1am1)=(1a1a2Ta1am1Ta2a1T1a2am1Tam1a1Tam1am2T1)

と、τr,s(r,s)成分にもつ対角成分が1の行列(positive definite matrix with unit diagonal elements)になります。

以降、この性質をもつ行列をPDUDEと書きます。

以上のことから、

(19)T(r,s)kϕ(xm,xn)=cor(ϵ(wm),ϵ(wn))

は、質的変数と量的変数の影響を考慮することのできる相関関数ととらえることができます。

質的変数が2つ以上の場合

一般的なケースとして、J個の質的変数z=(z1,,zJ)Tの場合を考えます。

ここで、zj(j=1,,J)1,,mjの値をとるものとします。すると、式(19)の拡張により、ϵ(w)の相関は関数は以下のようになります。

(20)j=1J(τzj,r,skϕ(xm,xn))=cor(ϵ(wm),ϵwn)

τj,r,sは、J番目のPDUDETj(r,s)成分です。

特に、kϕ(xm,xn)に式(10)のガウスカーネルをもちいた場合、(20)式は以下のようになります。

(21)j=1J(τzj,r,skϕ(xm,xn))=j=1J(τzj,r,sexp(12ρ2i=1I(xim,xin)2))=(j=1Jτzj,r,s)exp(12ρ2i=1I(ximxin)2)

(21)は、量的変数の影響はexp(12ρ2i=1I(ximxin)2)で考慮し、質的変数の影響はそれとは独立に(j=1Jτzj,r,s)で考慮する、という構造を持っています。パラメータτzj,r,sは、質的変数zjについてr=zjmをとる入力wmと、s=zjnをとる入力wnの、zjのみによる共通性(相関)への影響を反映する役割を担っています。なお、式(21)ではshapeパラメータα2を考慮していませんが、これは(2)式でshapeパラメータの役割をσが受け持っている為です。

モデリングにおいては、τzj,r,sは正の値をとるように設定し、任意の2点の入力が無相関もしくは正の相関のみをとるようにします。

制約のあるPDUDE

前節では、PDUDEについて制約を設けない相関行列を用いていました。柔軟なモデリングにおいてはこれで問題ないのですが、質的変数が順序尺度であったり、カテゴリカルな変数であったりするということがあらかじめ自明な場合は、PDUDEに制約を持たせることで、その情報をモデルに反映させることができます。ここでは、sesがカテゴリカルな変数であることから、質的変数がカテゴリカルな場合にPDUDEに設ける制約について説明します。

結論からですが、m個の値をとるzがカテゴリカルな場合、下記のτr,s(r,s)成分に持つ等方性を持ったm×m相関行列Tが用いられます。

(22)τr,s={c   (0<c<1)   (rs)1   (r=s) 

r=sのとき、入力間の相関はzに関しては1、rsのとき、c(一定)にする、ということです。 Tは以下のように分解できます。

(23)T=(1c)(100010001)+c(111)(1,1,,1)

このとき、任意のm×1ベクトルaについて、 (24)aTTa=(1c)aTa+c(aT1)2>0 だから、Tは正定値行列なので、PDUDEです。Tが正定値行列であることは結構重要で、各要素の値を出力するカーネル関数k(zm,zn)が何かしらの特徴ベクトル空間の内積を表現するために必要な条件です。このあたりの詳細はこちらなどを見てください。また上記Tの各要素を出力する関数はisotropic correlation functionと呼ばれ、isotropic correlation functionによる出力を要素に持つ行列はcompound symmetric correlation matrixと呼ばれています。

上記のTをPDUDEに用いる場合、式(21)は下記のように変形できます。

(25)(j=1Jτzj,r,s)exp(12ρ2i=1I(ximxin)2)=j=1Jexp(ln(1c)I[rs])exp(12ρ2i=1I(ximxin)2)=exp(12ρ2i=1I(ximxin)2j=1Jln(1c)I[rs])

ここで、I[rs]は下記の関数になります。

(26)I[rs]={1   (rs)0   (r=s) 

(25)最後の項は、対数をとると

(27)log(exp(12ρ2i=1I(ximxin)2j=1Jln(1c)I[rs]))=12ρ2i=1I(ximxin)2j=1Jln(1c)I[rs]

となります。よって、対数スケールにおいて、量的変数についてはL2距離を、質的変数については0~1の値をとる距離を使用していることが分かります。

以上、カテゴリカルな変数を用いたカーネルについて説明しました。参考文献はこちらになります。制約のあるPDUDEについては、今回紹介したもののほかにも順序尺度に対するPDUDE,グループ相関に対するPDUDE等紹介されています。

まとめ

今回はガウス過程みまつわる理論を深堀りしてみました。ガウス過程潜在変数モデルカテゴリカルな変数への対応の2点が重要です。ここで紹介した内容は、次回の記事で実際のデータへ応用し、期待通り機能することを確かめたいと思います。

コメントを書く


※ コメントは承認されると表示されます

承認されたコメント一覧