材料科学中的数据挖掘:晶体图神经网络解读与代码解析
?PaperWeekly 原創 ·?作者|張瑋瑋
學校|東北大學碩士
研究方向|情緒識別
論文標題:
Crystal Graph Neural Networks for Data Mining in Materials Science
論文鏈接:
https://storage.googleapis.com/rimcs_cgnn/cgnn_matsci_May_27_2019.pdf
代碼鏈接:
https://github.com/Tony-Y/cgnn
OQMD 數據庫(這個數據庫比較大,提供 python API 與晶體結構可視化,可以使用 MySQL 讀入):OQMD [2]
晶體材料性質一般通過輸入晶胞內的原子數目、原子分子坐標、晶格常數利用密度泛函理論(DFT)計算得出。機器學習方法在加速新材料設計方面正變得越來越流行,其預測材料性能的準確性接近從頭算計算,但計算速度要快數量級。最近有人提出用稱為晶體圖來表示晶體材料 [1],適應于晶體圖的卷積神經網絡利用平衡鍵距作為空間信息成功地預測了材料的體積特性。
預備知識
1.1 晶格常數(點陣常數)
晶胞三個棱的常數以及這三個棱之間的夾角 6 個參數組成。按晶格常數的不同可以分為七大晶系。在本文中點陣矢量定義為 。
1.2 原子坐標
原子坐標有兩種表示形式:分數坐標和笛卡爾坐標。分數坐標是把點陣矢量看成是單位矢量下確定原子位置; 笛卡爾坐標是絕對坐標,是直角坐標系與斜角坐標系的統稱,考慮點陣常數的大小。本文利用的是原子的分數坐標 。笛卡爾坐標可以和分數坐標相互轉換,在 定義的晶胞中,第 個原子的笛卡爾位置計算為 ,單元格體積 必須大于 0。
1.3 晶體性質
晶體材料的總能量取決于晶體結構 ,并且可以使用 DFT 來近似計算,其中,原子數目為 。近似能量表示為:,可以通過最小化總能量來得到平衡結構:
表示平衡能的最小值。DFT 計算也給出體積特性,如形成能 、單位單元體積 、帶隙 和總磁化強度 。
1.4 數據集
現有的理論材料數據庫包含了無機晶體材料的松弛結構及其性能。The Materials Project(MP)數據庫擁有 86k 條目,大多與實驗觀察到的結構有關。The Open Quantum Materials Database(OQMD v1.2)包含 563k 個與實驗和假設化合物相關的條目。?
晶體圖神經網絡
晶體圖神經網絡(CGNNs)引入了一種比例不變的圖協調器(Crystal Graph Coordinator)來構成晶體圖,用于在 OQMD 數據集上訓練 CGNN 模型。CGNN模型對每一種測試材料的形成能、單元體積、帶隙和總磁化強度等體積特性進行了預測,其平均誤差小于數據庫中相應的誤差。將預測的帶隙和總磁化率用于金屬絕緣體和非磁-磁材料二元分類。?
CGNN 框架如圖 1 所示,CG-Gen 是原子序數的函數,會產生平衡結構下的晶體圖 , 是有向邊的集合 。P-CGNN 是一個預測平衡特性的多任務模型,。S-CGNN 是在 條件下,推導出晶胞形狀 和原子分數坐標 。本文通過預測的晶胞體積來縮放 來獲得平衡晶胞 。?
2.1 The Crystal Graph Coordinator
為了訓練 CGNN 和 CG-Gen,框架需要一組由平衡結構組成的晶體圖。在晶體學中,用泰森多邊形找出原子的最近鄰居,參考文獻 [1] 運用了該方法。CGNN 引入了一種晶體圖協調器,它通過聚類來連接原子間的原子間距。由于使用了體積校正因子和縮放距離,晶體圖在單位單元的任何均勻變形下都具有不變性。偽代碼如下圖所示:
源代碼如下所示:
def?get_neighbors(geom):elems?=?[Element.from_Z(z)?for?z?in?geom.atomic_numbers]#通過原子序數來得到元素種類;OQMD數據庫共有89種化學元素,原子序數為1到83,89到94 radii?=?np.array([get_radius(e)?for?e?in?elems])#原子半徑是從PyMatGen庫獲得cutoff?=?radii[:,np.newaxis]?+?radii[np.newaxis,?:]#將任意兩個原子的半徑相加,比如有4種原子,則返回一個4*4的矩陣。vol_atom?=?(4?*?np.pi?/?3)?*?np.array([r**3?for?r?in?radii]).sum()#將晶胞內的原子體積相加factor_vol?=?(geom.volume?/?vol_atom)**(1.0/3.0)#體積校正因子通過晶胞體積和原子體積之和得來factor?=?factor_vol?*?RADIUS_FACTORcutoff?*=?factor#得到截止半徑candidates?=?get_nbrs(geom.cart_coords,?geom.lattice.matrix,?cutoff)#這部分代碼函數在下文提供,主要是將原子的笛卡爾坐標轉換為分子坐標并且得到當前原子小于截止半徑范圍內的候選鄰居原子。neighbors?=?[]for?j?in?range(len(candidates)):dists?=?[]for?nbr?in?candidates[j]:i?=?nbr[0]#第一維表示原子索引d?=?nbr[1]#第二維表示距離r?=?nbr[2]dists.append(d?/?cutoff[j,i])#距離歸一到[0,1],以便進行后續的聚類X?=?np.array(dists).reshape((-1,?1))nnc_nbrs?=?get_nnc_loop(X)#得到最近鄰居原子的位置索引neighbors.append([candidates[j][i][0]?for?i?in?nnc_nbrs])return?neighbors def?get_nbrs(crystal_xyz,?crystal_lat,?R_max):A?=?np.transpose(crystal_lat)B?=?np.linalg.inv(A)crystal_red?=?np.matmul(crystal_xyz,?np.transpose(B))#笛卡爾坐標系轉換為分數坐標系crystal_nbrs?=?pbc.get_shortest_distances(crystal_red,?A,?R_max,crdn_only=True)#得到當前原子小于截止半徑范圍內的候選鄰居原子return?crystal_nbrs得到的晶體圖如下例所示:
2.2 Crystal Graph Neural Networks
作者對模型結構的介紹可以見 Architectures-CGNN(tony-y.github.io)[3]
CGNN 體系結構從原子序數 的嵌入層開始構造,得到初始隱藏狀態:。?
T 個卷積塊會產生一系列更高維的隱藏特征:。卷積塊由邊神經網絡 (EdgeNet)、門控卷積和多層全連接神經網絡(MFCNet)組成,如圖 3(b) 所示。圖 3(c) 所示的 EdgeNet 可以表示為:
本文設計了 EdgeNet 層的三個變體:Original EdgeNet Layer,Fast EdgeNet Layer,Aggregate EdgeNet Layer。
門控卷積表示為 ,MFCNet 各層使用 權值矩陣。graph-level 表示 是由所有的隱藏層狀態 ,按照以下步驟進行:在每一步中,隱藏狀態使用 Gated Pooling 機制匯合為:
然后,graph-level 狀態表示為 被加權平均為:
送入 graph-level MFCNet 輸出 ,最后層的輸出作為線性回歸模型的輸入來預測目標值。
class?GGNN(nn.Module):"""Gated?Graph?Neural?NetworksNodes?->?Embedding?->?Gated?Convolutions?->?Graph?Pooling?->?Full?Connections?->?Linear?Regression"""def?__init__(self,?n_node_feat,?n_hidden_feat,?n_graph_feat,?n_conv,?n_fc,activation,?use_batch_norm,?node_activation,?use_node_batch_norm,edge_activation,?use_edge_batch_norm,?n_edge_net_feat,?n_edge_net_layers,edge_net_activation,?use_edge_net_batch_norm,?use_fast_edge_network,fast_edge_network_type,?use_aggregated_edge_network,?edge_net_cardinality,edge_net_width,?use_edge_net_shortcut,?n_postconv_net_layers,postconv_net_activation,?use_postconv_net_batch_norm,?conv_type,conv_bias=False,?edge_net_bias=False,?postconv_net_bias=False,full_pooling=False,?gated_pooling=False,use_extension=False):super(GGNN,?self).__init__() #設置激活函數,論文共設置了softplus,ssp,elu,relu,selu,celu六種激活函數act_fn?=?get_activation(activation)if?node_activation?is?not?None:node_act_fn?=?get_activation(node_activation)else:node_act_fn?=?Noneif?edge_activation?is?not?None:edge_act_fn?=?get_activation(edge_activation)else:edge_act_fn?=?Nonepostconv_net_act_fn?=?get_activation(postconv_net_activation) #EdgeNet層的三個變體if?n_edge_net_layers?<?1:edge_nets?=?[None?for?i?in?range(n_conv)]else:edge_net_act_fn?=?get_activation(edge_net_activation)if?use_aggregated_edge_network:#AggregatedEdgeNetworkedge_nets?=?[AggregatedEdgeNetwork(n_hidden_feat,?n_edge_net_feat,n_edge_net_layers,?cardinality=edge_net_cardinality,width=edge_net_width,?activation=edge_net_act_fn,use_batch_norm=use_edge_net_batch_norm,bias=edge_net_bias,use_shortcut=use_edge_net_shortcut)for?i?in?range(n_conv)]elif?use_fast_edge_network:#FastEdgeNetworkedge_nets?=?[FastEdgeNetwork(n_hidden_feat,?n_edge_net_feat,n_edge_net_layers,?activation=edge_net_act_fn,net_type=fast_edge_network_type,use_batch_norm=use_edge_net_batch_norm,bias=edge_net_bias,use_shortcut=use_edge_net_shortcut)for?i?in?range(n_conv)]else:#Original?EdgeNet?Layeredge_nets?=?[EdgeNetwork(n_hidden_feat,?n_edge_net_feat,n_edge_net_layers,?activation=edge_net_act_fn,use_batch_norm=use_edge_net_batch_norm,bias=edge_net_bias,use_shortcut=use_edge_net_shortcut)for?i?in?range(n_conv)]if?n_postconv_net_layers?<?1:postconv_nets?=?[None?for?i?in?range(n_conv)]else:postconv_nets?=?[PostconvolutionNetwork(n_hidden_feat,?n_hidden_feat,n_postconv_net_layers,activation=postconv_net_act_fn,use_batch_norm=use_postconv_net_batch_norm,bias=postconv_net_bias)for?i?in?range(n_conv)]self.embedding?=?NodeEmbedding(n_node_feat,?n_hidden_feat)#節點嵌入層,使用線性層self.convs?=?[GatedGraphConvolution(n_hidden_feat,?n_hidden_feat,node_activation=node_act_fn,edge_activation=edge_act_fn,use_node_batch_norm=use_node_batch_norm,use_edge_batch_norm=use_edge_batch_norm,bias=conv_bias,conv_type=conv_type,edge_network=edge_nets[i],postconv_network=postconv_nets[i])for?i?in?range(n_conv)]#門卷積層self.convs?=?nn.ModuleList(self.convs)if?full_pooling:n_steps?=?n_convif?gated_pooling:self.pre_poolings?=?[GatedPooling(n_hidden_feat)for?_?in?range(n_conv)]else:self.pre_poolings?=?[LinearPooling(n_hidden_feat)for?_?in?range(n_conv)]else:n_steps?=?1self.pre_poolings?=?[None?for?_?in?range(n_conv-1)]if?gated_pooling:self.pre_poolings.append(GatedPooling(n_hidden_feat))else:self.pre_poolings.append(LinearPooling(n_hidden_feat))self.pre_poolings?=?nn.ModuleList(self.pre_poolings)#門pooling層self.pooling?=?GraphPooling(n_hidden_feat,?n_steps,?activation=act_fn,use_batch_norm=use_batch_norm)#多層全連接神經網絡self.fcs?=?[FullConnection(n_hidden_feat,?n_graph_feat,activation=act_fn,?use_batch_norm=use_batch_norm)]self.fcs?+=?[FullConnection(n_graph_feat,?n_graph_feat,activation=act_fn,?use_batch_norm=use_batch_norm)for?i?in?range(n_fc-1)]self.fcs?=?nn.ModuleList(self.fcs)#線性回歸self.regression?=?LinearRegression(n_graph_feat)if?use_extension:self.extension?=?Extension()else:self.extension?=?Nonedef?forward(self,?input):#模型順序如下:Nodes -> Embedding -> Gated Convolutions -> Graph Pooling -> Full Connections -> Linear Regressionx?=?self.embedding(input.nodes)y?=?[]for?conv,?pre_pooling?in?zip(self.convs,?self.pre_poolings):x?=?conv(x,?input.edge_sources,?input.edge_targets)if?pre_pooling?is?not?None:y.append(pre_pooling(x,?input.graph_indices,?input.node_counts))x?=?self.pooling(y)for?fc?in?self.fcs:x?=?fc(x)x?=?self.regression(x)if?self.extension?is?not?None:x?=?self.extension(x,?input.node_counts)return?x實驗結果
研究使用的數據集包括從 OQMD 的 561,888 個不同條目中提取的松弛結構、形成能、晶胞體積、帶隙和總磁化率。P-GCNN 模型分別進行了形成能預測、晶胞體積預測、帶隙預測,其預測結果如下所示:
測試集中非磁體有 30,299 個,磁體有 25,629 個。非磁體組的總磁化率幾乎為零,占檢測組總磁化率的 54.2%,而磁性組的均值為 /atom,標準差為 /atom,最大值為 /atom。與帶隙數據一樣,全題磁化數據在零處非負偏置,但磁數據具有大于 1 的正偏度 1.66 和 4.72 的高峰度,表明具有重尾分布。金屬絕緣體和非磁-磁材料分類結果如下:
結果與討論
對于 OQMD 測試集中的每一種材料,P-CGNN 模型成功地預測了其形成能、單元體積、帶隙和總磁化強度,并將其分為金屬和絕緣體、非磁體和磁體。重要的是,預測沒有使用空間距離鍵長信息。并且 CGNN 模型提供了與基于 DFT 的材料性質預測的準確性。
當 CG-Gen 從適當的材料數據庫中幾乎完全學習了晶體圖上的合成化學時,就可以實現材料數據挖掘。由于晶體圖形序列是由對應的圖形轉換序列生成的,因此整個圖形轉換序列集合可以看作是存儲了材料合成的完整信息的物質基因組,就像人類基因組是人類核酸序列的完整集合一樣。
參考文獻
[1] Xie T, Grossman J C. Crystal graph convolutional neural networks for an accurate and interpretable prediction of material properties[J]. Physical review letters, 2018, 120(14): 145301.
[2] http://www.oqmd.org/
[3] https://tony-y.github.io/cgnn/architectures/
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的材料科学中的数据挖掘:晶体图神经网络解读与代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 24张IT工程师技能图谱,这些你都会吗?
- 下一篇: g41怎么设置从硬盘启动 G41主板如何