{"notes":[{"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/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/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":"2013 年末、AlexNet が画像認識で CNN の大勝利を示してから一年あまり。ニューヨーク大学の Joan Bruna、Wojciech Zaremba、Yann LeCun と、ニューヨーク市立大学シティカレッジの Arthur Szlam は、格子ではないデータにも畳み込みを使えるかを考えました。\n\n気象観測網、3D メッシュ上の温度、SNS、推薦システム。どれも「誰と誰が近いか」という構造がありますが、規則的な上下左右はありません。\n\nこの論文は、グラフ上で CNN を作る二つの方法を提案します。三年後の ChebNet と GCN は、そのスペクトル側の構成を簡略化したものです。GCN 論文も、この論文のスペクトルグラフ畳み込みに基づくと明記しています。\n\n## 問題設定\n\n著者はまず、CNN がパラメーターを節約できる理由を三つに分けます。格子上では、三つの構造を同時に使っています。\n\n1. **平行移動**：同じフィルターを各位置で繰り返し使う、重み共有です。\n2. **距離**：フィルターは近くの小領域だけを見て、フィルターの支持領域は入力全体よりはるかに小さくなります。\n3. **多尺度の二分クラスタリング**：格子を段階的に半分ずつまとめられるので、ストライド付き畳み込みやプーリングができます。\n\n入力に $n$ 座標があり、出力が $m$ 次元なら、全結合層は $n\\cdot m$ パラメーター、普通は $O(n^2)$ を要します。平行移動か局所接続の片方だけでも特徴マップ一枚あたり $O(n)$ に下がり、両方使えば $O(k\\cdot S)$ になります。$k$ は特徴マップ数、$S$ はフィルターサイズで、$n$ に依存しません。\n\nグラフには平行移動がなく、よい座標もあるとは限りません。重み付きグラフ $W$ だけから、この三つをどこまで取り戻せるかが問いです。\n\n## 解決方法\n\n### 空間での構成：局所接続とクラスタリング\n\n一つ目は、空間で直接処理する方法です。グラフの重みが「近く」を定義します。たとえば閾値 $\\delta$ を決め、$W_{ij}>\\delta$ のノードを隣とします。フィルターを隣にだけ接続すれば、パラメーターは $O(n^2)$ から $O(S\\cdot n)$ に下がります。$S$ は平均隣接ノード数です。\n\n次に、多尺度の階層クラスタリングを行い、第 $k$ 層でノードを $d_k$ 群に分けます。各層では、まず隣にだけ接続する疎なフィルタリングをし、各群でプーリングします。\n\n$$\nx_{k+1,j}=L_k\\,h\\left(\\sum_{i=1}^{f_{k-1}}F_{k,i,j}\\,x_{k,i}\\right)\n$$\n\n$F_{k,i,j}$ は隣接位置だけに値を持つ疎行列、$h$ は非線形関数、$L_k$ は各群でのプーリングです。\n\n[![原論文 Figure 2：三つの解像度の空間構成。左端の灰色ノードが元のグラフ。赤い領域が一層目の局所フィルタリングとクラスタリングを示し、中央の少数の赤いノードになる。緑の領域でもう一度処理し、右端の緑ノードになる。各層でノードが減り、特徴量の次元が増える。](/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png)](/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png)\n\n*原論文 Figure 2（Bruna ら）、[**PDF 4 ページ**](https://arxiv.org/pdf/1312.6203v3#page=4)より。原キャプションは省略。*\n\n右へ一層進むたび、空間解像度が下がり、特徴量の次元が増えます。CNN のピラミッドと同じです。\n\nグラフへの要件は少ないものの、根本的な制約があります。異なる位置のフィルターが個別に学習し、重みを共有できません。パラメーター数は $O(n)$ で、$O(1)$ への削減には至りません。\n\n### スペクトルでの構成：ラプラシアンの固有ベクトル\n\n二つ目は、スペクトル領域へ迂回する方法です。組合せラプラシアン $L=D-W$ で、信号がグラフ上でどれほど滑らかかを測ります。\n\n$$\n\\left\\|\\nabla x\\right\\|_W^2=\\sum_i\\sum_jW_{ij}\\left[x(i)-x(j)\\right]^2\n$$\n\nもっとも滑らかなのは定数ベクトルです。それに直交する中でもっとも滑らかなもの、さらに前の二本に直交する中でもっとも滑らかなもの、と探すと、$L$ の固有ベクトル $v_0, v_1, \\dots$ が得られます。固有値が小さいほど滑らかです。格子のフーリエ基底と同じことで、格子のラプラシアンの固有ベクトルは正弦波です。\n\nそこで、この基底での対角演算として畳み込みを定義します。\n\n$$\nx_{k+1,j}=h\\left(V\\sum_{i=1}^{f_{k-1}}F_{k,i,j}V^\\top x_{k,i}\\right)\n$$\n\n$V$ は固有ベクトル行列、$F_{k,i,j}$ は各周波数に係数を掛ける対角行列です。実際には、滑らかな幾何構造を持つ低周波側の $d$ 本だけを残します。各層のパラメーターは $f_{k-1}\\cdot f_k\\cdot d$ で、依然 $O(n)$ です。\n\n厄介さも率直に挙げています。多くのグラフでは、意味を持つのは最低周波数付近のわずかな固有ベクトルだけです。順伝播も逆伝播も密な $V$ と $V^\\top$ を掛けるため高コストで、非線形性は空間側で適用する必要があり、スペクトル領域にとどまれません。\n\n### CNN を再発見する\n\n論文には、きれいな観察があります。データの共分散行列をグラフの重みにすると、自然画像では平行移動不変性により共分散が二画素の変位だけで決まります。固有ベクトルはおおむね周波数順のフーリエ基底になります。このとき $VF V^\\top$ はフーリエ基底で対角化される平行移動不変な演算、つまり普通の畳み込みです。\n\n画像が格子だとあらかじめ知らなくても、データからグラフを作れば、標準 CNN を取り戻せるのです。\n\n### 滑らかな係数、局所的なフィルター\n\nパラメーターを $O(1)$ にするため、著者は格子上の双対関係を使います。空間で急速に減衰する信号は、スペクトル領域で滑らかになります。逆に周波数応答が滑らかなフィルターは、空間で集中しやすくなります。\n\nそこで周波数ごとの係数を自由に学ばず、固有値順に並べた一次元上で少数の制御点だけを学び、その間を三次スプラインで補間します。\n\n$$\n\\mathrm{diag}\\left(F_{k,i,j}\\right)=\\mathcal K\\,\\alpha_{k,i,j}\n$$\n\n$\\mathcal K$ は固定の三次スプラインカーネル、$\\alpha$ が学習する係数です。制御点数を $n$ に合わせて増やす必要はなく、パラメーターは $O(1)$ になります。\n\n64 ノードのパスで比べましょう。真ん中にインパルスを置き、64 個の自由係数と、6 制御点から補間した滑らかな係数でそれぞれフィルタリングし、応答が何ノードに広がるかを見ます。\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\nrng = np.random.default_rng(0)\n\nn = 64                                     # 64 ノードのパス\nW = np.zeros((n, n))\nfor i in range(n - 1):\n    W[i, i + 1] = W[i + 1, i] = 1\nL = np.diag(W.sum(1)) - W                  # 組合せラプラシアン L = D - W\nlam, V = np.linalg.eigh(L)                 # 低周波から高周波へ\n\nx = np.zeros(n)\nx[n // 2] = 1                              # 中央にインパルスを置く\n\ndef spread(y, ratio=0.05):\n    return int((np.abs(y) > ratio * np.abs(y).max()).sum())   # 応答が最大値の 5% を超えるノード数\n\nfrom scipy.interpolate import CubicSpline\n\nfree = rng.normal(size=n)                                   # 各周波数に自由係数、計 64 個\nknots = np.linspace(0, n - 1, 6)\nsmooth = CubicSpline(knots, rng.normal(size=6))(np.arange(n))  # 6 制御点だけを学び、三次スプライン補間\n\nfor name, g, params in [(\"自由係数\", free, n), (\"滑らかな係数\", smooth, 6)]:\n    y = V @ (g * (V.T @ x))                                 # フィルタリング：V diag(g) V^T x\n    print(f\"{name}：{params:>2} パラメーター、応答は {spread(y):>2} ノード\")\n```\n\n```text\n自由係数：64 パラメーター、応答は 60 ノード\n滑らかな係数： 6 パラメーター、応答は 15 ノード\n```\n\n自由係数のフィルターはパスのほぼ全体に届き、滑らかな係数のフィルターはインパルス周辺に集中します。乱数シードを変えても傾向は同じです。\n\nただし滑らかさで局所性は増すものの、数ステップ以内にだけ届く保証はありません。この穴は、のちの ChebNet が多項式で埋めます。\n\n## 議論\n\n### サブサンプリングした MNIST\n\n最初の実験は、28×28 の MNIST をランダムに 400 座標へサンプリングします。点は二次元平面上にありますが格子ではなく、普通の畳み込みは使えません。\n\n| 方法 | パラメーター数 | 誤り率 |\n| --- | ---: | ---: |\n| 最近傍 | — | 4.11% |\n| 全結合 400-FC800-FC50-10 | $3.6\\times10^5$ | 1.8% |\n| 空間構成、一層 | $7.2\\times10^4$ | 1.8% |\n| 空間構成、二層 | $1.6\\times10^5$ | **1.3%** |\n| スペクトル構成、自由係数 | $3.2\\times10^3$ | 2.6% |\n| スペクトル構成、滑らかな係数（$q=32$） | $1.6\\times10^3$ | 2.3% |\n| スペクトル構成、滑らかな係数（$q=20$、幅広） | $5\\times10^3$ | 1.8% |\n\n最良は空間構成の二層ネットワークで、誤り率 1.3% です。スペクトル構成は少し劣りますが、パラメーターは全結合の約百分の一。滑らかさを加えると 2.6% から 2.3%、幅を広げると 1.8% になります。\n\n著者の説明では、MNIST の数字は局所的で方向を持つ線からなり、空間に強く集中した測定が必要です。局所接続はもともと局所的ですが、スペクトル構成は保証がなく、滑らかさを加えてようやく集中しやすくなります。\n\n[![原論文 Figure 6：六つの小図で、400 個のサンプル点上のフィルター応答を色で示す。(a)(b) は空間構成の異なる二群で学んだフィルターで、小領域だけに色がある。(c)(d) は自由係数のスペクトルフィルターで、色が全体に散らばる。(e)(f) は滑らかな係数のスペクトルフィルターで、局所に集中している。](/content/papers/assets/4bf962fd0048720795737f14a2ce523576f6e02d4fb66c41a36bd5192d92ffed.png)](/content/papers/assets/4bf962fd0048720795737f14a2ce523576f6e02d4fb66c41a36bd5192d92ffed.png)\n\n*原論文 Figure 6（Bruna ら）、[**PDF 10 ページ**](https://arxiv.org/pdf/1312.6203v3#page=10)より。原キャプションは省略。*\n\n三種類を並べた図です。(a)(b) は空間構成で、重み共有がないため、異なる二群で似た特徴を別々に学んでいます。(c)(d) は自由係数のスペクトルフィルターで、全体に応答が散ります。著者はこれを局所現象を記述するときのフーリエ解析の根本的限界としています。(e)(f) は滑らかさを加えると再び集中し、同じフィルターが異なる位置の似た特徴を検出できるようになります。ようやく畳み込みらしくなります。\n\n### 球面上の MNIST\n\n二つ目の実験は MNIST を単位球面上のランダムな 4,096 点に投影し、各画像をランダムに回転します。\n\n軽い回転では、最近傍の誤り率は 19% に上がり、ニューラルネットワークは 5.6%〜7% です。畳み込み型の構成は全結合と同等で、パラメーターは大幅に少なくなります。全結合は約 $10^7$ パラメーターで 5.6%、滑らかなスペクトル構成は約 $9\\times10^5$ で 6% です。\n\n完全にランダムな回転では、最近傍は 80%、全結合は 52%、滑らかなスペクトル構成は表中最良の 50% ですが、どれも十分ではありません。著者は、完全な回転・平行移動不変性が必要で、三次元回転群は非可換なので、さらに深い構成が必要かもしれないと述べています。\n\n## 結論\n\nこの論文は二つの道を示しました。空間構成はグラフ上の局所接続とクラスタ内プーリングで $O(n)$ に減らせますが、重み共有がありません。スペクトル構成はラプラシアンの固有ベクトルをフーリエ基底にし、滑らかな周波数係数から空間的な局所性を得て、$O(1)$ にできます。\n\nスペクトル側の代償も残りました。固有値分解が必要で、変換ごとに $n\\times n$ の密行列を掛け、局所性も近似です。三年後、ChebNet は滑らかなスプラインをラプラシアンの多項式に替え、局所性を保証し、固有値分解も省きました。さらに三か月後、GCN は多項式を一次まで削ります。\n\n\n> [!TIP]\n> \n> 続く二段階の簡略化は、こちらのノートをどうぞ。\n> \n> - **[[16.06] ChebNet：多項式で十分](/blog/papers/graph-learning/chebnet)**\n> - **[[16.09] GCN：一つのパラメーターで足りる？](/blog/papers/graph-learning/gcn)**\n\n\n共分散行列から CNN を取り戻す例は、今読んでも面白いものです。畳み込みは、ある基底での対角演算と見なせます。格子はその基底を用意してくれますが、グラフでは自分で探す必要があるのです。\n","imageSizes":{"/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png":{"width":1210,"height":448},"/content/papers/assets/4bf962fd0048720795737f14a2ce523576f6e02d4fb66c41a36bd5192d92ffed.png":{"width":908,"height":1208}}}
