AI FOR COMPUTATIONAL CHEMISTRY · CH 3

原子是 node,配位圈是消息Graph Neural Network 與 message passing——MACE / CHGNet / MatterSim 共同的底層語言

這章講通了,後面三章只剩各家的口音差異

結構天生不配合神經網路 三個「不」

原子數不固定8 顆水分子和 800 原子的 slab,要用同一個模型。
原子沒有順序輸入檔裡把 3 號和 7 號對調,物理上是同一個結構。
座標系任意整體平移旋轉,能量不准變。
神經網路吃固定長度向量——怎麼餵?答案:圖表示 + 訊息傳遞(message passing)
把「不定長、無順序、座標系任意」翻譯成網路聽得懂的語言

圖表示:node、edge、cutoff graph representation

  • node(節點)=原子:帶一個特徵向量,初始值由元素決定
  • edge(邊)=距離 < rcut 的鄰近關係:帶距離與方向
  • 「找出 rcut 內所有鄰居」就是 ASE 的 neighbor list——你跑 RDF 時早就用過
edge 不是化學鍵——判據只有距離。金屬裡沒有定域共價鍵,照樣建圖建得理直氣壯。
embedding:元素的向量身分證one-hot 是最簡形式;現代 MLIP 用可學習的向量——模型自己學出一張「化學行為相似的元素靠得近」的週期表。
圖 = 結構的數學化身:原子是點、夠近就連線

Message passing:兩條式子 先聚合,再更新——讀懂即可,不用會推

mi = Σj∈N(i) φ(hj, rij)      h′i = ψ(hi, mi)
  • hj:鄰居 j 目前的特徵;φ:「鄰居的話怎麼聽」(依距離加權);Σ:把所有鄰居的話加起來
  • ψ:「聽完之後我變成什麼樣」;φ、ψ 裡的權重就是模型要學的參數
  • 為什麼用求和不用串接?求和對鄰居順序不敏感(permutation invariant)——對稱性寫進架構
所有原子「同時」跟鄰居打聽消息——這就是 message passing 的全部

配位圈的語言 這個設計有化學根據

第 1 輪結束每個原子知道自己的第一配位圈長什麼樣。
第 2 輪結束鄰居已吸收了「鄰居的鄰居」→ 間接知道第二配位圈
  • 局部性假設的化學根據:原子能量主要由局部配位環境決定(化學鍵短程+屏蔽)
  • 所以 rcut ≈ 5 Å、傳兩輪,對大多數體系就夠
  • 你不陌生:配位數、配位場、d-band center——全是「局部環境決定性質」的同一信仰
GNN 用學出來的高維向量,描述 d-band center 用一個數字描述的同一件事

動手:互動 demo 操作劇本 interactive/gnn-message-passing.html(離線可開)

點頂端的 H 原子當中心——看 cutoff 虛線圈住哪些鄰居(金色虛線環)
按「下一步」兩次——H 的特徵色環從純色逐步混入鄰居的顏色(資訊聚合的可視化)
把 rcut 拉到 2.0 Å——看「孤島原子」警告:沒有鄰居的原子,模型對它的環境一無所知
走到第 3 步——每個原子各自吐出 εi,加總成 Etotal;力=能量的梯度
這四個動作=本章全部核心概念

感受野:模型「看得到」的邊界 receptive field = k × rcut

2 × 5 Å
MACE:兩輪 × cutoff
=有效感受野 ~10 Å
  • 能力也是限制:10 Å 以外的世界,模型看不到
  • 長程靜電、長波長彈性場——天生在視野外(離子液體、帶電表面、鐵電體要小心)
  • 長程修正是進階主題;入門先知道邊界在哪
問「模型看得到這個物理嗎」之前,先算它的感受野

Readout 與力 E = Σ εi,F = −∇E

E = Σi εi(hi)每原子依最終特徵各出一份能量、加總——同一個模型天然適用任何大小的體系。
代價:單一 εi 沒有絕對物理意義(規範自由度)——只有總能差有意義。對應你熟的「吸附能必須同參考系相減」。
F = −∂E/∂r(自動微分)力不是另外訓練的輸出。好處:① 力場保證保守(能量守恆 MD 的前提)② 力標籤的梯度直接回傳能量模型。
notebook 第 7 節用數值微分驗證到 10⁻¹⁰ 的精度。
永遠比較能量差(吸附能、反應能),不要比較絕對值

20 行玩具 message passing 與互動 demo 同邏輯的數字版

pos  = np.array([[0,0],[2.5,0],[5.0,0],[1.25,2.2]])
elem = ["Ni","Fe","Ni","H"]
h = one_hot(elem)                          # 初始特徵

adj = neighbors_within(pos, r_cut=3.0)     # 建圖

for round_ in range(2):                    # 兩輪 message passing
    for i, nbrs in enumerate(adj):
        m = h[nbrs].sum(axis=0)            # 聚合:鄰居特徵求和
        h_new[i] = (h[i] + m) / (1 + len(nbrs))   # 更新:含自己取平均
    h = h_new
# 每列 = 一個原子「打聽完」的環境組成
完整可跑版在教材 ch03「最小 code」;工業級實作:CHGNet chgnet/graph/converter.py、MACE mace/modules/
真模型只是把「取平均」換成可學習的權重、把純量特徵升級成帶方向的特徵(Ch4)

常見誤解

「edge 就是化學鍵」edge 只代表距離夠近。鍵級、共價性,模型若需要會自己從資料學。
「message passing 是電子轉移」是資訊聚合的數學操作,不對應物理過程。別在組會說「電子傳了兩輪」。
「輪數越多越好」成本上升、特徵被過度平均(over-smoothing)。MACE 的解法是提高單輪訊息的階數,不是堆輪數。
「GNN 看得到長程靜電」cutoff 外天生看不到——先算感受野。
每個誤解都對應 demo 裡能親手戳破的操作

我學完後應該能說出什麼

  • 「node / edge / cutoff / embedding / message passing / readout 六個詞——用配位圈的語言講給同學聽。」
  • 「力是能量的梯度而不是另外訓練的輸出,這保證了能量守恆。」
  • 「感受野=輪數 × rcut,它劃出模型看得到與看不到的物理。」
下一章:MACE 的兩個升級——equivariance(轉杯水)與 higher-order message passing(一桌人)
GNN 是三個 repo 共同的底層語言——口音差異從下一章開始