グラフラプラシアンの解釈と接続行列

/ Math

グラフラプラシアン(Graph Laplacian)がなぜラプラシアンと呼ばれるのかを、普通の関数に対するラプラシアンオペレータと比較して直観的に説明する。ついでに普通の関数のときにラプラシアンとまとめて紹介されるナブラについて、それに対応する接続行列について紹介する。

グラフラプラシアンってカタカナで書くとめちゃくちゃ読みにくいな。Graph Laplacianなら全然読めるけど両方カタカナで空白つけないのが良くない。こういうのGraphが漢字なら日本語にしたとき丁度よいのだが。

Graph Laplacianの定義

無向グラフG=(V,E)|V|=nに対して次のn×n行列L(G)をGraph Laplacianといい、グラフGが何を指すか明らかなときは単にLとかく。もしくはLのときもある。

L(G)ij={deg(vi)(i=j)1(ij and {vi,vj}E)0(ij and {vi,vj}E)

L(G)ijはGraph Laplacianの(i,j)要素を示し、viVi番目の頂点を示す。degは頂点の次数。念のため次数とはその頂点につながっている辺の数のこと。

グラフの次数行列Dと隣接行列Aを用いるとグラフラプラシアンは次のようにかける。

L=DA

いずれもGによって決まる行列だが明らかなので省略する。次数行列(degree matrix)とは対角成分に頂点の次数を持つような対角行列(非対角成分がゼロ)、隣接行列(adjacency matrix)とは{0,1}のみを要素にもつ行列でi,j間のエッジが存在すれば1、そうでなければ0を取る。

Dij={deg(vi)(i=j)0(ij)Aij={1({vi,vj}E)0({vi,vj}E)

Graphラプラシアンの例

無向グラフの例

こういうグラフの場合を考えると、それぞれ次のようになる。

D=[200000040000002000000300000030000002],A=[011000101110110000010011010101000110]L=[211000141110112000010311010131000112]

ここまでは普通の話。(ここからがマグマなんです)

Laplacianといわれる理由

名前からして実関数に対するラプラシアンオペレータと関係ないとおかしいだろうということで実際関係していることを直観的に示していく。簡単な場合を使って2変数関数f(x,y)に対するラプラシアンを考える。

Δ2x2+2y2

とおくと、これは関数に作用して関数値を返す演算子となり

Δf(x,y)=2f(x,y)x2+2f(x,y)y2

となる。こっちのラプラシアンをGraph Laplacianと結びつけるために、この値を離散化して数値計算しようと試みてみる。もっとも単純な離散化のやり方は次だろう。

2f(x,y)x2=1h(f(x+h,y)f(x,y)hf(x,y)f(xh,y)h)=f(x+h,y)2(x,y)+f(xh,y)h2

小さいhをとって素朴に前進差分と後退差分を使って勾配を計算し、さらにその差から2階微分を求めている。yについても同じことをやると次がすぐにわかる。

2f(x,y)x2+2f(x,y)y2=f(x+h,y)+f(xh,y)+f(x,y+h)+f(x,yh)4f(x,y)h2

もう言いたいこと分かったと思うがこれは実平面を拡張したような次のグラフに対応している。

Graph Laplacianのイメージ

直観的に符号が定義と異なるが、このグラフから向きという概念をなくすということを考えればいい。このグラフはもともとの実平面の性質から数字の大小という意味で「向き」をもっているが、無向グラフの世界ではそのような概念は無いのでラプラシアンをグラフに作用させることを考えるにあたって「自分引く相手の総和」を用いることはまぁアナロジーとして許せる範囲だろう。

ついでにグラフ上の調和関数を考える時はゼロかゼロでないかが重要なので符号が逆転していても構わない。ということでGraph Laplacianは普通のラプラシアンのグラフに対する拡張っぽくなっていることが気持ち的には分かった。もっとうまい説明は無数にある気がしているが次にいく。

グラフに対するLaplacianと調和関数

ここまでの話を踏まえてグラフの頂点を定義域とする関数f:VRを考えると、実関数に対するラプラシアンから得た「自分引く相手の総和」というアナロジーから次の値をおもいつく。

Δf(v)=(v,e)E(f(v)f(e))(vV)

書き換えると

Δf(vi)=j=1nI({vi,vj}E)(f(vi)f(vj))

ここで、Iは指示関数(indicator function)で引数内が成り立つなら1、それ以外の場合にはゼロとなる便利なヤツ。実関数にたいするLaplacianがある種の演算子であったことを考えるとグラフに対するLaplacianもfという関数を介することなく定義されるべきだろう。そこで2番目のラプラシアンの定義式より、各f(vj)の係数を抜き出しておいたものをLとおくとこれはGraph Laplacianの定義そのもの。これは式をいじるまでもなく簡単に確かめられる。あとは

Lf(vi)j=1nLijf(vj),i=1,2,,n

とでも定義してやれば同じように使える。注意しておくとこれは行列の計算でもなんでもなくてただLfをこう定義しただけ。ようはLfによらずに決定されていてこのLを用いることでi=1,,nに対するf(vi)のラプラシアンが計算できていればいい。

関数f:VRについても調和関数かどうかがこれによって定義できる。f:VRがグラフG上で調和であるとはi=1,2,,nについて

Lf(vi)=0

を満たすこと。まぁそらそうだよな。いくらでも他の書き方は存在します。

勾配に対応する接続行列

実関数の場合にはΔ=というような式があったがこれに対応するものが有向グラフの場合にはある。もう一度いうと有向グラフの場合にはある。無向グラフには向きという概念が無いから勾配という概念に対応するものも無くてまぁ不思議ではないね。

接続行列の定義

無向グラフG=(V,E)|V|=n,|E|=mに対する接続行列(incidence matrix)Bはそれぞれの要素が次のようになるn×m行列

Bij={1(viej)0(viej)

vi,ejはそれぞれi番目の頂点とj番目の辺のこと。有向グラフの場合には次のようにやるのが自然だろう。

Bij={1(ej=(v,vi) for some v)1(ej=(vi,v) for some v)0(otherwise)

少しだけ説明すると、有向グラフでは辺e={v,w}においてvwの順番に意味があるので集合ではなくベクトルのような記法e=(v,w)を用いることが多い。集合の場合には要素の順番は考慮されないがベクトルの場合は考慮するので。ただ、完全にベクトルというわけではなく有向グラフの場合にもveなんかの使い方はゆるす。

接続行列の例

例をみたほうが早いだろう。Graphラプラシアンのときと同じグラフを用いる。

無向グラフの例

このグラフに対する接続行列はn=6,m=8n×m行列になり、

B=[101000001101100000110000010001100000110100000011]

が各要素の値となる。行が頂点に対応していて列が辺に対応している。もし列の値を埋めるなら必ず2つの要素が1になる列に注目して辺の両端に対応する所に1を埋めていくのが易しい。次に有向グラフの場合の例、さっきのグラフの各辺に適当に向きを入れてみる。

有向グラフの例

この場合も簡単で、結果は次のようになる。

B=[101000001101100000110000010001100000110100000011]

有向グラフの場合は各列で1,1がそれぞれ1回ずつあらわれる。

勾配と接続行列の関係

有向グラフを考えると、グラフ上の関数の勾配fを次のように与えるのが自然だろう。

f(v)={f(w)f(v),e=(v,w)Ef(v)f(w),e=(w,v)E

少し書き方はビミョーな感じはするが、ようするにある点vにおける勾配は、そこに接続している辺ごとに定義されていてその辺の向きによってどっちかの差分で定義されるというもの。これを実関数のときのアナロジーでいうと、関数f(x,y)のある点(a,b)における勾配はx成分fx(a,b)y成分fy(a,b)が存在するということに対応する。3変数関数なら3成分あるし4変数なら4成分というようにある点に対していくつかの勾配成分があることは自然なことだ。

ちなみに無向グラフに対しては差分を取るときの符号が決められないのでこのようにしてグラフ上の関数の勾配を考えることはできない。有向グラフの接続行列を考えるとGraph Laplacianと同じようにして勾配をあたえる計算式を作り出せる。

Bf(ej)i=1nBjif(vi),j=1,2,,m

これを踏まえると接続行列の転置Bがナブラ

=(x,y)

に対応していることがわかる。

接続行列とグラフラプラシアンの関係

ここまでくるとΔ=のアナロジーによりL=BBであってほしいが実際これは成り立つ。次のようにして示せる。

(BB)ij=k=1mBik(B)kj=k=1mBikBjk={k=1mBikBik(i=j)1(ij and ekE for some k)0(otherwise)={deg(vi)(i=j)1(ij and ekE for some k)0(otherwise)=L

次のようにしてってわけでもなんでもないが2行目の式から左辺の行列のi,j要素は接続行列のi行目とj行目の内積で表せるということがわかるので、あとは具体例も参照しつつi=jの場合とそうでない場合において何が起こるかを確かめていけばいい。明らかなように無向グラフの場合は接続行列の要素に負の値が無いからどうやってもL=BBとはならないことに注意。

以上でグラフラプラシアンを普通のラプラシアンのグラフに対する拡張であるという風に解釈できた。ついでに勾配のナブラに対する接続行列も有向グラフの場合にはちゃんとイケてることも確認した。