G6.2 能量不變,為什麼它的 gradient 會跟著轉?
本篇重用1 篇
只要力的方向一起轉,就已經像物理了嗎?
EGNN 可以直接給出 equivariant vectors,但不一定保證力來自某個 energy。若我們要模擬分子,通常還希望能量變化與做功有一致關係。
一個自然做法是先學總能量 ,再把每個原子的力定義為
這裡先固定原子型別與 graph,式子中只寫出會變換的座標。Chmiela 等人 [1] 的 GDML 從 force 資料學習保守場,同樣利用 scalar potential 與力的關係;我們這裡採取先學 energy、再求 gradient 的構造,看看不變性還能帶來哪些幾何限制。
Invariant scalar 的 gradient 為什麼會轉?
把所有座標堆成一個向量 ,讓 在每個原子的空間分量上作用。共同 translation 堆成 。
假設 energy 滿足
令 。對 做 chain rule,左邊先經過 ,因此
再左乘 ,用 :
兩邊加負號,得到 。Energy 的值不變,不表示 gradient 的座標分量不變;gradient 必須用新的方向表示同一個變化。
Permutation 同理也是 orthogonal 重排:若 energy 不依原子順序,force 就隨原子重排。合起來得到 G6.0 的 force action。
共同平移,還給出什麼?
讓所有原子沿同一個向量 平移 。Energy 不變,對 微分:
因為任意 都成立,,因此
這不是額外設一個「總力懲罰」才得到,而是可微 invariant energy 的結果。若外場選定固定位置,energy 本來就不 translation-invariant,不能仍套這個結論。
旋轉又給出什麼?
在三維,沿小旋轉的軸向量 ,原子的一階位移是 。Energy 的方向導數為零:
第二步用 scalar triple product 的迴圈關係。任意 都成立,得到
這是總 torque(力矩) 為零的條件: 描述這個力對原點造成的轉動效果。它不要求每一對原子都有顯式的成對反向力;一般 many-body energy 可以有更複雜的互動,仍符合總量約束。
Energy conservation 還要說清楚範圍
若 光滑, 是 conservative force(保守力):沿路徑積分的做功由端點 potential difference 決定。在適當的連續動力學中,這能與 kinetic energy 一起構成能量守恆。
但數值積分軌跡仍可能有 discretization error。從 energy 求 force,不代表任意 solver 的有限步計算都會精確守恆。 同樣,直接預測一個 equivariant force,不保證它是某個 scalar energy 的 gradient。
補充訓練 force 時,autograd graph 不能提早切斷
為了讓 force loss 更新 energy network 參數,計算 時需保留可微 graph,例如 PyTorch 的 create_graph=True。只想評估 force 時不必保留高階 parameter graph,但仍需要對 coordinates 開啟 gradient。
課堂提問
一個直接預測 force 的模型測得 rotation defect 為零,能否據此證明沿任意閉合路徑的做功也為零?
先想一想,再展開看整理後的答案
不能。Rotation equivariance 只約束座標變換;閉合路徑做功為零是 conservative force 的性質,需要 scalar potential 或相應 integrability 條件。
動手看一次
改變旋轉與平移,觀察 energy 不變、force 一起旋轉與 total force 為零。數值來自解析 pair energy,不是預設的訓練成績。