Graph library —— DIG

前言

瞭解調研一些 GNN library。

如果大家對大圖資料上高效可擴充套件的 GNN 和基於圖的隱私計算感興趣,歡迎關注我的 Github,之後會不斷更新相關的論文和程式碼的學習筆記。

DIG: Dive into Graphs

開發文件:Link

DIG 的優勢

與目前的圖深度學習庫 PyTorch Geometric(PyG)和 Deep Graph Library(DGL)相比,雖然 PyG 和 DGL 支援基本的圖深度學習操作,但 DIG 為更高層次的、面向研究的圖深度學習任務提供了一個統一的測試平臺,如graph generation,self-supervised learning,,explainability 以及 3D graphs。

DIG 可以使使用者在可擴充套件框架內進行開發,並使用共同的資料集和評估指標與當前的 baseline 進行比較。

DIG 的介紹

DIG 包括資料介面的統一實現、通用演算法和常用任務的評估指標。

DIG 的目標是使研究人員能夠輕鬆地實現和評估演算法。目前考慮以下研究方向

Graph Generation

dig。ggraph

Self-supervised Learning on Graphs

dig。sslgraph

Explainability of Graph Neural Networks

dig。xgraph

Deep Learning on 3D Graphs

dig。threedgraph

例項可參考 examples

Graph library -- DIG、AutoGL、CogDL

以圖生成的 tutorial 為例。

Tutorial for Graph Generation

如何使用 GraphDF 來實現一個深度圖生成模型來生成化學分子圖。

Graph Generation

在藥物發現和化學科學中,一個基本的問題是設計和合成具有某些理想特性(如高藥物相似性)的新型分子。這個問題仍然非常具有挑戰性,因為分子的空間是離散的和非常巨大的。一個有希望的解決方案是構建一個可以自動生成新型分子圖的 graph generator。最近,許多方法被提出來用於生成分子圖,如 JT-VAE、GCPN、GraphAF、GraphEBM 和 GraphDF。

為了生成分子圖,我們首先需要決定生成什麼來形成分子圖。一般來說,以下三種圖的形成方法在現有的分子圖生成方法中使用最為廣泛。

Tree-based method 。首先生成分子的樹狀結構,樹的節點代表分子圖的一個 motif 或子圖,如一個芳香環。然後,對於樹上的任何兩個相連的子圖,決定它們之間的結合點,最後透過結合所有的子圖形成一個分子圖。例如 JT-VAE。

One-shot method 。分子圖透過明確地生成其節點型別矩陣和鄰接張量而形成。這種方法的一個例子是GraphEBM。

Sequential method 。分子圖一步一步形成的,每一步只生成一個節點或一條邊。這種方法的例子有 GCPN、GraphAF和GraphDF。

在分子圖生成方法確定後,可以使用任何深度生成模型(如VAE、GAN 和 flow)來構建 graph generator,其中 embedding 被模型對映到生成目標。

Random Generation Example

以 ZINC250k 資料集為例,用 GraphDF 訓練隨機分子圖生成模型。首先載入配置引數,為 ZINC250k 資料集設定資料集載入器。

import

json

from

dig。ggraph。dataset

import

ZINC250k

from

torch_geometric。data

import

DenseDataLoader

conf

=

json

load

open

‘config/rand_gen_zinc250k_config_dict。json’

))

dataset

=

ZINC250k

one_shot

=

False

use_aug

=

True

loader

=

DenseDataLoader

dataset

batch_size

=

conf

‘batch_size’

],

shuffle

=

True

接下來初始化一個分子圖 generator,並在 ZINC250k 資料集上訓練該模型。訓練 10 epochs,每個epoch的檢查點被儲存在 “rand_gen_zinc250k” 資料夾下。

from

dig。ggraph。method

import

GraphDF

runner

=

GraphDF

()

lr

=

0。001

wd

=

0

max_epochs

=

10

save_interval

=

1

save_dir

=

‘rand_gen_zinc250k’

runner

train_rand_gen

loader

=

loader

lr

=

lr

wd

=

wd

max_epochs

=

max_epochs

model_conf_dict

=

conf

‘model’

],

save_interval

=

save_interval

save_dir

=

save_dir

訓練完成後,可以使用訓練好的 graph generator 來生成分子圖。生成的分子由一個 rdkit。Chem。Mol 物件的列表表示。

from

rdkit

import

RDLogger

RDLogger

DisableLog

‘rdApp。*’

ckpt_path

=

‘rand_gen_zinc250k/rand_gen_ckpt_10。pth’

n_mols

=

100

mols

_

=

runner

run_rand_gen

model_conf_dict

=

conf

‘model’

],

checkpoint_path

=

ckpt_path

n_mols

=

n_mols

atomic_num_list

=

conf

‘atom_list’

])

最後可以呼叫評估器,透過有效性比率和唯一性比率評估生成的分子。

from

dig。ggraph。evaluation

import

RandGenEvaluator

evaluator

=

RandGenEvaluator

()

input_dict

=

{

‘mols’

mols

}

print

‘Evaluating。。。’

evaluator

eval

input_dict

Property Optimization Example

如何利用 GraphDF 方法來生成具有高懲罰性 logP 得分的分子。在 GraphDF 中,這種分子性質的最佳化是透過在化學空間中搜索分子來完成的,並帶有強化學習。具體來說,將順序生成程式制定為馬爾科夫決策過程,並使用近似策略最佳化演算法(一種常用的強化學習演算法)來微調預先訓練好的 GraphDF 模型。獎勵取決於懲罰性 logP 得分,以鼓勵模型生成具有高懲罰性 logP 得分的分子。

首先載入配置引數並初始化一個分子圖生成器:

import

json

from

dig。ggraph。method

import

GraphDF

with

open

‘config/prop_opt_plogp_config_dict。json’

as

f

conf

=

json

load

f

runner

=

GraphDF

()

接下來,載入預訓練的模型,並開始進行微調:

from

rdkit

import

RDLogger

RDLogger

DisableLog

‘rdApp。*’

pretrain_path

=

‘saved_ckpts/prop_opt/pretrain_plogp。pth’

lr

=

0。0001

wd

=

0

warm_up

=

0

max_iters

=

200

save_interval

=

20

save_dir

=

‘prop_opt_plogp’

runner

train_prop_opt

lr

=

lr

wd

=

wd

max_iters

=

max_iters

warm_up

=

warm_up

model_conf_dict

=

model_conf_dict

pretrain_path

=

pretrain_path

save_interval

=

save_interval

save_dir

=

save_dir

當微調完成後,可以用訓練好的模型生成具有高懲罰性對數得分的分子圖資料。生成的分子由 rdkit。Chem。Mol 物件的列表表示。

from

dig。ggraph。evaluation

import

PropOptEvaluator

checkpoint_path

=

‘prop_opt_plogp/prop_opt_net_199。pth’

n_mols

=

100

mols

=

runner

run_prop_opt

model_conf_dict

=

conf

‘model’

],

checkpoint_path

=

checkpoint_path

n_mols

=

n_mols

num_min_node

=

conf

‘num_min_node’

],

num_max_node

=

conf

‘num_max_node’

],

temperature

=

conf

‘temperature’

],

atomic_num_list

=

conf

‘atom_list’

])

最後,可以呼叫評估器,在所有生成的分子中找出懲罰性 logP 得分最高的三個分子。

from

dig。ggraph。evaluation

import

PropOptEvaluator

evaluator

=

PropOptEvaluator

()

input_dict

=

{

‘mols’

mols

}

print

‘Evaluating。。。’

evaluator

eval

input_dict

AutoGL

開發文件:Link

AutoGL 是為研究人員和開發人員開發的,用於快速對圖資料集和任務進行自動ML。

下面的工作流程顯示了AutoGL的整體框架。

Graph library -- DIG、AutoGL、CogDL

AutoGL使用

AutoGL Dataset

來支援基於圖的機器學習資料集,該資料集基於 PyTorch Geometric (PyG)中的資料集,並添加了一些支援,以與

自動求解器框架

進行融合。

不同的基於圖的機器學習任務由不同的

AutoGL Solvers

來解決,它利用四個主要模組來自動解決給定的任務,即

Auto Feature Engineer

Auto Model

Neural Architecture Search

HyperParameter Optimization

Auto Ensemble

Quick Start

以引文網路資料集 Cora 為例

AutoGL Learning

基於 AutoGL 的概念,自動圖學習旨在自動解決由圖表示的資料的任務。與傳統的學習框架不同,自動圖學習和AutoML 一樣,不需要人類參與實驗迴圈。只需要提供資料集和任務給

AutoGL Solvers

解決器。這個框架會自動為你找到合適的方法和超引數。

下圖描述了 AutoGL 框架的工作流程。

dataset

來維護使用者提供的圖資料集。需要建立一個

solver

來指定目標任務。在

solver

內部,有五個子模組來幫助完成自動圖任務,即

auto feature engineer

auto model

neural architecture search

hyperparameter optimization

auto ensemble

,將自動預處理/增強資料,選擇和最佳化深度模型,並以最佳方式進行組合。

以資料集

Cora

為例,在上面進行自動圖學習。

首先,使用

dataset

模組獲得

Cora

資料集:

from

autogl。datasets

import

build_dataset_from_name

cora_dataset

=

build_dataset_from_name

‘cora’

該資料集將自動下載。可參考 AutoGL Dataset 和 autogl。datasets 瞭解更多關於資料集構造、可用資料集、新增本地資料集等的細節。

在得出資料集後,可以建立一個

node classification solver

來處理自動訓練過程。

import

torch

device

=

torch

device

‘cuda’

if

torch

cuda

is_available

()

else

‘cpu’

from

autogl。solver

import

AutoNodeClassifier

solver

=

AutoNodeClassifier

feature_module

=

‘deepgl’

graph_models

=

‘gcn’

‘gat’

],

hpo_module

=

‘anneal’

ensemble_module

=

‘voting’

device

=

device

上述建立了一個

node classification solver

,使用

deepgl

作為 feature engineer ,並使用

anneal

超引數最佳化器來最佳化給定的三個模型

[‘gcn’,‘gat’]

。然後,得出的模型將使用

voting

合集器進行合集。

solver

fit

cora_dataset

time_limit

=

3600

solver

get_leaderboard

()

show

()

time_limit

被設定為3600,這樣整個自動圖學習過程不會超過1小時。

solver。show()

將展示由

solver

維護的模型,以及它們在驗證資料集上的表現。

然後可以使用提供的評估函式進行預測和評估結果。

from

autogl。module。train

import

Acc

predicted

=

solver

predict_proba

()

print

‘Test accuracy: ’

Acc

evaluate

predicted

cora_dataset

data

y

cora_dataset

data

test_mask

cpu

()

numpy

()))

CogDL

開發文件:Link

CogDL 是一個圖表示學習工具包,它允許研究人員和開發人員輕鬆地訓練和比較用於節點分類、圖分類和圖學習中其他重要任務的 baseline 或設計自己的模型。

CogDL 的貢獻總結如下:

High Efficiency

:CogDL 利用精心最佳化的運算器來加速 GNN 模型的訓練並節省 GPU 記憶體。

Easy-to-Use

:CogDL 提供了易於使用的 API,以使用 hyper-parameter search 來執行實驗。

Extensibility

:CogDL 的設計可以很容易將GNN模型應用到基於該框架的新場景中。

Reproducibility

:CogDL 為圖學習中大多數重要任務的最先進模型提供了可重複的實驗結果。

Cora

為資料集進行節點分類的實驗例子

# basic usage

experiment

dataset

=

“cora”

model

=

“gcn”

# set other hyper-parameters

experiment

dataset

=

“cora”

model

=

“gcn”

hidden_size

=

32

max_epoch

=

200

# run over multiple models on different seeds

experiment

dataset

=

“cora”

model

=

“gcn”

“gat”

],

seed

=

1

2

])

# automl usage

def

search_space

trial

):

return

{

“lr”

trial

suggest_categorical

“lr”

1e-3

5e-3

1e-2

]),

“hidden_size”

trial

suggest_categorical

“hidden_size”

32

64

128

]),

“dropout”

trial

suggest_uniform

“dropout”

0。5

0。8

),

}

experiment

dataset

=

“cora”

model

=

“gcn”

seed

=

1

2

],

search_space

=

search_space