グラフラプラシアン(Graph Laplacian)がなぜラプラシアンと呼ばれるのかを、普通の関数に対するラプラシアンオペレータと比較して直観的に説明する。ついでに普通の関数のときにラプラシアンとまとめて紹介されるナブラについて、それに対応する接続行列について紹介する。
グラフラプラシアンってカタカナで書くとめちゃくちゃ読みにくいな。Graph Laplacianなら全然読めるけど両方カタカナで空白つけないのが良くない。こういうのGraphが漢字なら日本語にしたとき丁度よいのだが。
Graph Laplacianの定義
無向グラフ
グラフの次数行列
いずれも
Graphラプラシアンの例
こういうグラフの場合を考えると、それぞれ次のようになる。
ここまでは普通の話。(ここからがマグマなんです)
Laplacianといわれる理由
名前からして実関数に対するラプラシアンオペレータと関係ないとおかしいだろうということで実際関係していることを直観的に示していく。簡単な場合を使って2変数関数
とおくと、これは関数に作用して関数値を返す演算子となり
となる。こっちのラプラシアンをGraph Laplacianと結びつけるために、この値を離散化して数値計算しようと試みてみる。もっとも単純な離散化のやり方は次だろう。
小さい
もう言いたいこと分かったと思うがこれは実平面を拡張したような次のグラフに対応している。
直観的に符号が定義と異なるが、このグラフから向きという概念をなくすということを考えればいい。このグラフはもともとの実平面の性質から数字の大小という意味で「向き」をもっているが、無向グラフの世界ではそのような概念は無いのでラプラシアンをグラフに作用させることを考えるにあたって「自分引く相手の総和」を用いることはまぁアナロジーとして許せる範囲だろう。
ついでにグラフ上の調和関数を考える時はゼロかゼロでないかが重要なので符号が逆転していても構わない。ということでGraph Laplacianは普通のラプラシアンのグラフに対する拡張っぽくなっていることが気持ち的には分かった。もっとうまい説明は無数にある気がしているが次にいく。
グラフに対するLaplacianと調和関数
ここまでの話を踏まえてグラフの頂点を定義域とする関数
書き換えると
ここで、
とでも定義してやれば同じように使える。注意しておくとこれは行列の計算でもなんでもなくてただ
関数
を満たすこと。まぁそらそうだよな。いくらでも他の書き方は存在します。
勾配に対応する接続行列
実関数の場合には
接続行列の定義
無向グラフ
少しだけ説明すると、有向グラフでは辺
接続行列の例
例をみたほうが早いだろう。Graphラプラシアンのときと同じグラフを用いる。
このグラフに対する接続行列は
が各要素の値となる。行が頂点に対応していて列が辺に対応している。もし列の値を埋めるなら必ず2つの要素が1になる列に注目して辺の両端に対応する所に1を埋めていくのが易しい。次に有向グラフの場合の例、さっきのグラフの各辺に適当に向きを入れてみる。
この場合も簡単で、結果は次のようになる。
有向グラフの場合は各列で
勾配と接続行列の関係
有向グラフを考えると、グラフ上の関数の勾配
少し書き方はビミョーな感じはするが、ようするにある点
ちなみに無向グラフに対しては差分を取るときの符号が決められないのでこのようにしてグラフ上の関数の勾配を考えることはできない。有向グラフの接続行列を考えるとGraph Laplacianと同じようにして勾配をあたえる計算式を作り出せる。
これを踏まえると接続行列の転置
に対応していることがわかる。
接続行列とグラフラプラシアンの関係
ここまでくると
次のようにしてってわけでもなんでもないが2行目の式から左辺の行列の
以上でグラフラプラシアンを普通のラプラシアンのグラフに対する拡張であるという風に解釈できた。ついでに勾配のナブラに対する接続行列も有向グラフの場合にはちゃんとイケてることも確認した。