# Ch3 練習題：GNN 與 Message Passing

> 概念 2 題＋demo 實作 2 題。詳解在最後。

## 題目

**Q1（手算一輪）** 三個原子排成直線：A—B—C，鍵長都在 cutoff 內，但 A 與 C 距離超過 cutoff。元素特徵（one-hot，[Ni, H]）：A = Ni = (1,0)、B = H = (0,1)、C = Ni = (1,0)。
用 demo 的更新規則「新特徵 = (自己 + 鄰居總和) / (1 + 鄰居數)」：
(a) 第 1 輪後，A、B、C 的特徵各是多少？
(b) 第 1 輪後，A「知道」C 存在嗎？第 2 輪後呢？（用數字說明）

**Q2（感受野）** 某模型 r_cut = 4 Å、message passing 3 輪。
(a) 有效感受野多大？
(b) 兩個距離 14 Å 的帶電缺陷之間的靜電交互作用，這個模型看得到嗎？為什麼？
(c) MACE 為什麼能用 2 輪就達到別人多輪的效果？（一句話）

**Q3（demo 預測題）** 打開 `interactive/gnn-message-passing.html`。先紙上作答再驗證：
(a) r_cut = 3.2 Å 時，點選 H 原子當中心——它有幾個鄰居？
(b) 把 r_cut 降到 2.0 Å——哪些原子會變「孤島」？孤島原子兩輪後的特徵環是什麼顏色組成？
(c) 第 2 輪結束時，H 的金色高亮（感受野）覆蓋了哪些原子？

**Q4（規範自由度）** 兩個訓練得一樣好的 MLIP，對同一個 Pt(111) slab 給出的「總能」差了 37 eV，但兩者算出的 H* 吸附能只差 0.02 eV。解釋為什麼這完全正常，以及它對「跨模型比較」的操作性教訓。

---

## 詳解

**A1**
(a) 鄰居：A↔B、B↔C（A–C 無邊）。
A' = (A + B)/2 = (0.5, 0.5)；C' = (C + B)/2 = (0.5, 0.5)；B' = (B + A + C)/3 = (2/3, 1/3)。
(b) 第 1 輪後 A 的特徵只混入了 B——**A 還不知道 C**（A' 裡的 Ni 成分來自它自己）。第 2 輪：A'' = (A' + B')/2 = ((0.5+2/3)/2, (0.5+1/3)/2) ≈ (0.583, 0.417)——B' 已經帶著 C 的資訊，所以 **C 的存在間接傳到了 A**。這就是「2-hop 資訊要 2 輪」。

**A2**
(a) 3 × 4 = **12 Å**。
(b) 看不到。14 Å > 12 Å，在感受野外；而且就算在內，cutoff 圖也只編碼「短程幾何路徑」，長程庫侖 1/r 的物理形式並不在模型的歸納偏置裡——這是兩層原因。
(c) MACE 用高階（many-body）訊息，一輪就聚合多體幾何，不必靠堆輪數。

**A3**
(a) 2 個（兩個第二層金屬，距離 ~2.06 Å）。
(b) r_cut = 2.0 Å 時 H 變孤島（H–M 2.06 Å > 2.0）；金屬間 2.54 Å 也超過——**全部原子都是孤島**。孤島的特徵環永遠是自己元素的純色（資訊進不來）。
(c) hop ≤ 2 的原子：兩個直接鄰居（第二層）＋它們的鄰居（第一層的幾顆）——實際以 demo 高亮為準；重點是「鄰居的鄰居」進來了。

**A4** E = Σ εᵢ 有規範自由度：把每個原子能量平移一個常數（例如每個 Pt 平移 c），總能整體平移 N·c，但**任何同參考系的能量差不變**。37 eV 的總能差只是兩個模型選了不同的「能量零點」；吸附能 = E(slab+H) − E(slab) − ½E(H₂) 在各自模型內部相減，零點消掉。教訓：**跨模型（或模型 vs DFT）永遠比較能量差，且三項必須出自同一個模型/設定**。
