{"notes":[{"id":"graph-learning/chebnet","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ChebNet","subtitle":"多項式で十分","author":"Z. Yuan","paperDate":"2016-06-30","publishedOn":"2023-09-16","world":"external/chebnet","paperTitle":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","paperUrl":"https://arxiv.org/abs/1606.09375","bibliography":{"title":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","authors":["Michaël Defferrard","Xavier Bresson","Pierre Vandergheynst"],"url":"https://arxiv.org/abs/1606.09375","pdfUrl":"https://arxiv.org/pdf/1606.09375v3","codeUrl":"https://github.com/mdeff/cnn_graph","preprint":{"id":"1606.09375","submittedOn":"2016-06-30","url":"https://arxiv.org/abs/1606.09375"},"publication":{"venue":"NeurIPS","year":2016,"kind":"conference","url":"https://papers.nips.cc/paper_files/paper/2016/hash/04df4d434d481c5bb723be1b6df1ee65-Abstract.html"},"citation":"@misc{graphlearningchebnet2016,\n  title = {{Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering}},\n  author = {Michaël Defferrard and Xavier Bresson and Pierre Vandergheynst},\n  year = {2016},\n  eprint = {1606.09375},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1606.09375}\n}\n","citationPath":"/content/papers/citations/graph-learning/chebnet.52e0fac25946.bib"},"thumbnail":{"src":"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png","width":1144,"height":484},"locale":"ja","path":"/content/papers/ja/graph-learning/chebnet.45a88fa611f4.md","headings":[{"id":"問題設定","text":"問題設定","depth":2},{"id":"空間では平行移動を定義できない","text":"空間では平行移動を定義できない","depth":3},{"id":"スペクトルでは計算が重い","text":"スペクトルでは計算が重い","depth":3},{"id":"解決方法","text":"解決方法","depth":2},{"id":"多項式で局所性を得る","text":"多項式で局所性を得る","depth":3},{"id":"chebyshev-の再帰で速くする","text":"Chebyshev の再帰で速くする","depth":3},{"id":"グラフ上のプーリング","text":"グラフ上のプーリング","depth":3},{"id":"議論","text":"議論","depth":2},{"id":"まず格子で確かめる","text":"まず格子で確かめる","depth":3},{"id":"三つのフィルターを比べる","text":"三つのフィルターを比べる","depth":3},{"id":"よいグラフを作れているか","text":"よいグラフを作れているか","depth":3},{"id":"その後","text":"その後","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/spectral-networks","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Spectral Networks","subtitle":"スペクトル領域へ迂回","author":"Z. Yuan","paperDate":"2013-12-21","publishedOn":"2023-09-06","paperTitle":"Spectral Networks and Locally Connected Networks on Graphs","paperUrl":"https://arxiv.org/abs/1312.6203","bibliography":{"title":"Spectral Networks and Locally Connected Networks on Graphs","authors":["Joan Bruna","Wojciech Zaremba","Arthur Szlam","Yann LeCun"],"url":"https://arxiv.org/abs/1312.6203","pdfUrl":"https://arxiv.org/pdf/1312.6203v3","codeUrl":null,"preprint":{"id":"1312.6203","submittedOn":"2013-12-21","url":"https://arxiv.org/abs/1312.6203"},"publication":{"venue":"ICLR","year":2014,"kind":"conference","url":"https://iclr.cc/archive/2014/conference-proceedings/"},"citation":"@misc{graphlearningspectralnetworks2013,\n  title = {{Spectral Networks and Locally Connected Networks on Graphs}},\n  author = {Joan Bruna and Wojciech Zaremba and Arthur Szlam and Yann LeCun},\n  year = {2013},\n  eprint = {1312.6203},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1312.6203}\n}\n","citationPath":"/content/papers/citations/graph-learning/spectral-networks.ea286632c50d.bib"},"thumbnail":{"src":"/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png","width":1210,"height":448},"locale":"ja","path":"/content/papers/ja/graph-learning/spectral-networks.0b6c9dce8e05.md","headings":[{"id":"問題設定","text":"問題設定","depth":2},{"id":"解決方法","text":"解決方法","depth":2},{"id":"空間での構成局所接続とクラスタリング","text":"空間での構成：局所接続とクラスタリング","depth":3},{"id":"スペクトルでの構成ラプラシアンの固有ベクトル","text":"スペクトルでの構成：ラプラシアンの固有ベクトル","depth":3},{"id":"cnn-を再発見する","text":"CNN を再発見する","depth":3},{"id":"滑らかな係数局所的なフィルター","text":"滑らかな係数、局所的なフィルター","depth":3},{"id":"議論","text":"議論","depth":2},{"id":"サブサンプリングした-mnist","text":"サブサンプリングした MNIST","depth":3},{"id":"球面上の-mnist","text":"球面上の MNIST","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/chebnet","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/gcn","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"GCN","subtitle":"一つのパラメーターで足りる？","author":"Z. Yuan","paperDate":"2016-09-09","publishedOn":"2023-10-01","world":"external/gcn","paperTitle":"Semi-Supervised Classification with Graph Convolutional Networks","paperUrl":"https://arxiv.org/abs/1609.02907","bibliography":{"title":"Semi-Supervised Classification with Graph Convolutional Networks","authors":["Thomas N. Kipf","Max Welling"],"url":"https://arxiv.org/abs/1609.02907","pdfUrl":"https://arxiv.org/pdf/1609.02907v4","codeUrl":"https://github.com/tkipf/gcn","preprint":{"id":"1609.02907","submittedOn":"2016-09-09","url":"https://arxiv.org/abs/1609.02907"},"publication":{"venue":"ICLR","year":2017,"kind":"conference","url":"https://arxiv.org/abs/1609.02907"},"citation":"@misc{graphlearninggcn2016,\n  title = {{Semi-Supervised Classification with Graph Convolutional Networks}},\n  author = {Thomas N. Kipf and Max Welling},\n  year = {2016},\n  eprint = {1609.02907},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1609.02907}\n}\n","citationPath":"/content/papers/citations/graph-learning/gcn.43058ec3e77e.bib"},"thumbnail":{"src":"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png","width":1122,"height":400},"locale":"ja","path":"/content/papers/ja/graph-learning/gcn.f7c10b90f2d7.md","headings":[{"id":"問題設定","text":"問題設定","depth":2},{"id":"グラフを正則化項にする","text":"グラフを正則化項にする","depth":3},{"id":"解決方法","text":"解決方法","depth":2},{"id":"スペクトル領域から削っていく","text":"スペクトル領域から削っていく","depth":3},{"id":"gcn-の一層","text":"GCN の一層","depth":3},{"id":"二層で十分","text":"二層で十分","depth":3},{"id":"議論","text":"議論","depth":2},{"id":"実験設定","text":"実験設定","depth":3},{"id":"主な結果","text":"主な結果","depth":3},{"id":"どの伝播がよいか","text":"どの伝播がよいか","depth":3},{"id":"もっと深くすると","text":"もっと深くすると","depth":3},{"id":"wl-アルゴリズムとの関係","text":"WL アルゴリズムとの関係","depth":3},{"id":"四日後の評論","text":"四日後の評論","depth":3},{"id":"論文が挙げる制約","text":"論文が挙げる制約","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/chebnet","relation":"referenced","topic":""}]}],"text":"CNN が画像で役立つ理由は三つあります。カーネルは小領域だけを見て、同じ重みを全画像で使い、層を重ねるとより大きなパターンを組み立てられます。\n\nどれも格子に基づきます。画素には上下左右があり、「右に一マス移動」が明確です。SNS、脳の接続図、単語ベクトルの類似度はグラフで、各ノードで隣接ノード数が異なり、並び順にも意味がなく、平行移動そのものを定義できません。\n\nEPFL の Michaël Defferrard、Xavier Bresson、Pierre Vandergheynst はグラフ信号処理の出身です。Vandergheynst は以前 Hammond らと Chebyshev 多項式でグラフ上のウェーブレットを扱っており、同じ道具を CNN に持ち込みました。\n\n## 問題設定\n\n### 空間では平行移動を定義できない\n\nグラフの畳み込みを考えると、まず画像と同じように固定サイズのカーネルを各ノードの隣に合わせたくなります。しかし先に「隣をどう対応させるか」を解く必要があります。グラフでは、空間的な平行移動を記述する一意な数学的定義がありません。\n\nもう一つはスペクトル領域への迂回です。畳み込み定理によれば、畳み込みはフーリエ基底で対角化できる線形演算です。グラフにもフーリエ基底、すなわちラプラシアンの固有ベクトルがあります。\n\n### スペクトルでは計算が重い\n\n組合せラプラシアン $L=D-W$ も正規化ラプラシアン $L=I_n-D^{-1/2}WD^{-1/2}$ も、実対称半正定値行列で、$L=U\\Lambda U^\\top$ と分解できます。$U$ の各列が「フーリエモード」で、固有値 $\\lambda_l$ が周波数です。信号 $x\\in\\mathbb{R}^n$ のグラフフーリエ変換は $\\hat x=U^\\top x$ です。\n\nしたがってフィルタリングは、次のように書けます。\n\n$$\ny=g_\\theta(L)x=U\\,g_\\theta(\\Lambda)\\,U^\\top x\n$$\n\n直接的なのは、各周波数の係数を自由に学ぶ $g_\\theta(\\Lambda)=\\mathrm{diag}(\\theta)$ です。問題は二つ。フィルターが空間的に局所でなく、一度にグラフ全体へ作用する可能性があること。パラメーターがノード数と同じ $O(n)$ になることです。\n\nパラメーターを減らしても、計算は重いままです。2014 年の Bruna らのスペクトルネットワークは、滑らかなスプライン関数で周波数係数を表し、空間的局所性を得ました。それでも順伝播・逆伝播ごとに二回の $U$ の積があり、各 $O(n^2)$ です。$U$ 自体にも $L$ の固有値分解が必要で、$n\\times n$ の密行列を保存します。\n\n\n> [!TIP]\n> \n> Bruna らの空間とスペクトルの構成は、こちらのノートをどうぞ。\n> \n> - **[[13.12] Spectral Networks：スペクトル領域へ迂回](/blog/papers/graph-learning/spectral-networks)**\n\n\nここで目指すのは、グラフ上で**厳密に局所的**かつ**計算が速い**フィルターです。\n\n## 解決方法\n\n### 多項式で局所性を得る\n\n著者は、フィルターを $\\Lambda$ の多項式に制限します。\n\n$$\ng_\\theta(\\Lambda)=\\sum_{k=0}^{K-1}\\theta_k\\Lambda^k\n$$\n\n$(U\\Lambda U^\\top)^k=U\\Lambda^kU^\\top$ なので、ラプラシアンに直接多項式 $\\sum_k\\theta_kL^k$ を適用するのと同じです。$L$ の非零成分は隣接ノード間だけなので、$L^k$ は $k$ ステップ以内にしか届きません。最短距離が $k$ より大きい二ノードでは、$(L^k)_{ij}=0$ です。\n\n七ノードのパスの中心に 1 を置き、$L^k$ がどこに届くかを見ましょう。\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\n\n# 七ノードのパス：0-1-2-3-4-5-6\nn = 7\nA = np.zeros((n, n))\nfor i in range(n - 1):\n    A[i, i + 1] = A[i + 1, i] = 1\nd = A.sum(1)\nL = np.eye(n) - A / np.sqrt(np.outer(d, d))   # 正規化ラプラシアン\n\ndelta = np.zeros(n)\ndelta[3] = 1                                   # 中央のノードだけに 1 を置く\nfor k in range(4):\n    print(f\"L^{k} δ:\", (np.linalg.matrix_power(L, k) @ delta != 0).astype(int))\n```\n\n```text\nL^0 δ: [0 0 0 1 0 0 0]\nL^1 δ: [0 0 1 1 1 0 0]\nL^2 δ: [0 1 1 1 1 1 0]\nL^3 δ: [1 1 1 1 1 1 1]\n```\n\n次数が一つ増えるたび、影響範囲が一歩広がります。$K-1$ 次多項式の範囲は $K-1$ ステップ以内で、パラメーターはノード数によらず $K$ 個です。画像の 5×5 カーネルが 5×5 の領域だけを見るのと同じです。\n\n### Chebyshev の再帰で速くする\n\n局所性は得られましたが、固有値分解後にスペクトル領域で掛けるなら、依然 $O(n^2)$ です。\n\nそこで基底を Chebyshev 多項式 $T_k$ に変えます。安定した再帰関係があります。\n\n$$\nT_k(x)=2xT_{k-1}(x)-T_{k-2}(x),\\qquad T_0=1,\\quad T_1=x\n$$\n\nChebyshev 多項式の定義域は $[-1,1]$ なので、まず $\\tilde L=2L/\\lambda_{\\max}-I_n$ にスケーリングします。フィルターは次の形です。\n\n$$\ny=\\sum_{k=0}^{K-1}\\theta_kT_k(\\tilde L)\\,x\n$$\n\n$\\bar x_k=T_k(\\tilde L)x$ とすれば、$\\bar x_k=2\\tilde L\\bar x_{k-1}-\\bar x_{k-2}$ です。必要なのは $K$ 回の疎行列・ベクトル積だけで、計算量は $O(K|E|)$。固有値分解も $U$ の保存も要りません。\n\n先ほどのパスで、同じ $K=3$ のフィルターを二通りで計算し、一致を確かめます。\n\n```python\ntheta = np.array([0.5, -1.0, 0.3])            # K = 3、三つの Chebyshev 係数\nx = np.random.default_rng(0).random(n)\n\n# 方法 1：固有値分解してスペクトルでフィルターを掛ける\nlam, U = np.linalg.eigh(L)\nlam_max = lam.max()\nlam_s = 2 * lam / lam_max - 1                  # 周波数を [-1, 1] へスケーリング\ng = theta[0] + theta[1] * lam_s + theta[2] * (2 * lam_s**2 - 1)   # T0, T1, T2\ny_spec = U @ (g * (U.T @ x))\n\n# 方法 2：Chebyshev の再帰、疎行列積だけ\nL_s = 2 * L / lam_max - np.eye(n)\nx0, x1 = x, L_s @ x\nx2 = 2 * L_s @ x1 - x0\ny_rec = theta[0] * x0 + theta[1] * x1 + theta[2] * x2\n\nprint(\"スペクトル領域:\", y_spec)\nprint(\"再帰:\", y_rec)\n```\n\n```text\nスペクトル領域: [0.52 0.65 0.42 0.61 1.01 1.43 1.12]\n再帰: [0.52 0.65 0.42 0.61 1.01 1.43 1.12]\n```\n\nこの例では比較のため $\\lambda_{\\max}$ を固有値分解で求めましたが、実際には最大固有値の推定だけで済みます。正規化ラプラシアンの固有値は必ず 2 以下です。\n\n入出力が複数チャネルなら、第 $j$ 出力特徴マップは $y_j=\\sum_i g_{\\theta_{ij}}(L)x_i$ で、入出力チャネルのペアごとに $K$ 個の係数を持ちます。逆伝播も $K$ 回の疎行列積だけです。\n\n### グラフ上のプーリング\n\nCNN にはプーリングも必要です。Graclus の多階層クラスタリングで粗視化し、各層で隣接ノードを二つずつまとめ、ノード数をおよそ半減します。ペアは normalized cut を最大にする隣接ノードを選びます。\n\n粗視化後のノード順に意味はなく、プーリングのたびに対応表を引くのは遅く、並列化もしにくくなります。著者は、エッジのない「ダミーノード」を足し、各ノードがちょうど二つの子を持つ平衡二分木を作り、その構造に沿って並べ替えました。すると一次元信号のように、隣り合う二つの数値をまとめてプーリングできます。\n\n[![原論文 Figure 1：入力グラフ信号から、グラフ畳み込み層（畳み込み、非線形性）とグラフ粗視化（サンプリング、プーリング）で特徴を抽出し、全結合層で分類してラベルを出す。スペクトルフィルターの各周波数への応答も示している。](/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png)](/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png)\n\n*原論文 Figure 1（Defferrard ら）、[**PDF 2 ページ**](https://arxiv.org/pdf/1606.09375v3#page=2)より。原キャプションは省略。*\n\n全体はグラフ畳み込み、非線形性、粗視化、プーリングの組み合わせに全結合層を付けたもので、LeNet と同じ骨組みです。\n\n## 議論\n\n### まず格子で確かめる\n\n最初は MNIST です。28×28 の画素格子を 8 近傍グラフにし、ダミーノードを足すと 976 ノード、3,198 エッジです。TensorFlow チュートリアルの LeNet-5 に合わせ、画像版は 5×5 畳み込み、グラフ版は $K=25$ フィルターで、同程度の範囲を見ます。\n\n| モデル | アーキテクチャ | 精度 |\n| --- | --- | ---: |\n| 通常の CNN | C32-P4-C64-P4-FC512 | 99.33% |\n| グラフ CNN | GC32-P4-GC64-P4-FC512 | 99.14% |\n\n差はわずかです。著者は、グラフのエッジに上下左右の向きがない、スペクトルフィルターの**等方性**による可能性を挙げます。長所か短所かはタスク次第です。回転不変性が欲しいこともあるのと同じです。\n\n### 三つのフィルターを比べる\n\n同じ MNIST で、三種類のスペクトルフィルター（$K=25$）を比べます。\n\n| アーキテクチャ | 自由係数 | スプライン（Bruna ら） | Chebyshev |\n| --- | ---: | ---: | ---: |\n| GC10 | 95.75% | 97.26% | 97.48% |\n| GC32-P4-GC64-P4-FC512 | 96.28% | 97.15% | 99.14% |\n\n自由係数は局所性がなく、パラメーターも多く、最下位でした。Chebyshev はどちらの構成でも最良です。\n\n速度では、Bruna らの方法はノード数に対し $O(n^2)$、こちらは $O(n)$ です。20NEWS の単語数を 2,000 から 12,000 に増やすと、旧手法の一バッチは数十ミリ秒から約 1.2 秒に増えますが、Chebyshev は約 150 ミリ秒までです。\n\nそれでも普通の CNN よりはかなり遅く、MNIST 100 枚の一バッチは GPU で CNN が 31 ミリ秒、グラフ CNN が 200 ミリ秒です。一方、GPU による高速化率は 6.77 倍と 8 倍で、近い値です。\n\n### よいグラフを作れているか\n\n20NEWS はテキスト分類です。頻出 10,000 語をノードにし、word2vec で 16 近傍グラフを作ります。グラフ CNN は 68.26% で全結合を上回りますが、多項 Naive Bayes の 68.51% には届きません。\n\n著者は一節をグラフ品質に割いています。MNIST の格子をランダムグラフに替えると、同じ五層構成でも 99.14% から 95.39% に下がります。畳み込みの前提は局所性、定常性、構成性で、データのグラフがそれを満たして初めて意味を持ちます。\n\n### その後\n\n三か月後、Kipf と Welling の GCN は、この論文から多項式を一次に削り、二つの係数を一つに結びました。引用ネットワークの半教師あり分類では、$K=2$、$K=3$ の Chebyshev より正確で、Pubmed では約 5 ポイント差でした。\n\nGCN 公開四日後、Ferenc Huszár はブログで、簡略化しすぎると画像格子上では固定カーネルだけになると論じました。計算量は多くても、高次多項式の ChebNet のほうが有望に見えるとしています。[inFERENCe、2016-09-13](https://www.inference.vc/how-powerful-are-graph-convolutions-review-of-kipf-welling-2016-2/)\n\n\n> [!TIP]\n> \n> GCN の簡略化とこの議論は、こちらのノートをどうぞ。\n> \n> - **[[16.09] GCN：一つのパラメーターで足りる？](/blog/papers/graph-learning/gcn)**\n\n\n## 結論\n\nChebNet は、スペクトルグラフ畳み込みを理論から訓練できるネットワークにしました。多項式で $K-1$ ステップ以内に限定し、Chebyshev の再帰で疎行列積だけにし、固有値分解を省きます。MNIST では同構成の CNN と 0.19 ポイント差でした。\n\nもっとも重要なハイパーパラメーターは $K$ です。一層で見る距離と学ぶ係数の数を同時に決めます。引用ネットワークでは、GCN の実験は小さいほうが正確だと示しました。使う前にいくつか試したい値です。\n\nスペクトルの道は、その後 GCN のような一次近似へ進むことが多くなりました。それでもラプラシアンの固有ベクトルは退場せず、数年後の Graph Transformer でノードの位置符号化として再登場します。\n","imageSizes":{"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png":{"width":1144,"height":484}}}
