背景介绍
模型来自 “SSI–DDI: substructure–substructure interactions for drug–drug interaction prediction”,文章提出一种深度学习框架:SSI-DDI,该框架直接操作于药物的原始分子图,它将两种药物之间的DDI预测任务分解为识别它们各自子结构之间的成对相互作用。
同时使用两种或两种以上药物的做法在处理同时患有多个疾病或当需要多种药物的协同作用治疗疾病时很常见。但是同时服用几种药物可能会导致危及病人生命的副作用。这些副作用是由化学-物理相互作用导致,通常被称为药物-药物相互作用(DDI)。
机器学习和深度学习方法已被证明是改善这一问题的关键。论文提出了一个深度学习框架SSI-DDI,将子结构视为独立的实体,子结构间的相互作用将决定相应的药物是否会导致潜在的DDI。
模型描述
问题设置
有一个药物集合 G G G(其元素为Graph),一个反应类型集合 L = { I i } i = 1 M L=\left\{I_{i}\right\}_{i=1}^{M} L={Ii}i=1M,一个DDI数据集 D = { ( G x , G y , r ) i } i = 1 N D=\left\{(G_{x},G_{y},r)_{i}\right\}_{i=1}^{N} D={(Gx,Gy,r)i}i=1N,其中 G x ∈ G , G y ∈ G G_{x}\in G,G_{y}\in G Gx∈G,Gy∈G表示一对药物与类型为 I i I_{i} Ii的反应 r r r,我们需要找到一个模型 f f f可以计算出一对药物导致反应集合中各种反应的概率。
模型接收的输入为 ( G x , G y ) (G_{x},G_{y}) (Gx,Gy),药物 G x G_{x} Gx和 G y G_{y} Gy都可以由一个Graph G = ( V , E ) G=(V,E) G=(V,E) 表达,其节点集合 V = { v i } i = 1 n V=\left\{v_{i}\right\}_{i=1}^{n} V={vi}i=1n与边集合 E = { ( v s , v t ) i } i = 1 m E=\left\{(v_{s},v_{t})_{i}\right\}_{i=1}^{m} E={(vs,vt)i}i=1m,注意 G G G代表药物的化学分子图, v i v_{i} vi代表携带特征向量 h i ∈ R F h_{i}\in R^{F} hi∈RF的原子, ( v s , v t ) (v_{s},v_{t}) (vs,vt)代表原子 v s v_{s} vs与 v t v_{t} vt之间的键;
前置内容-GAT
Duvenaud 和 Kearnes 等人表明,对下游任务来说,在端到端方法中直接从化学实体的分子图中学习的特征比手工制作的分子表示(如分子指纹)的信息要多得多。 他们特别提到使用 GNN,这是一种专为图结构数据设计的深度学习方法;
为了得到GAT的第 l + 1 l+1 l+1层的节点特征 h i ( l + 1 ) h_{i}^{(l+1)} hi(l+1),我们进行以下操作:
- 在第 l l l层特征上进行线性变换: h ^ s ( l + 1 ) = W ( l + 1 ) h s ( l ) \widehat{h}_{s}^{(l+1)}=W^{(l+1)}h_{s}^{(l)} h s(l+1)=W(l+1)hs(l)其中, W ( l + 1 ) ∈ R F ′ × F W^{(l+1)}\in R^{F'\times F} W(l+1)∈RF′×F是一个可学习参数。
- 然后计算节点 i i i与邻居节点 j j j之间的注意力分布: α i j = e x p ( L e a k y R e L U ( a T [ h ^ i ( l + 1 ) ⊕ h ^ j ( l + 1 ) ] ) ) ∑ s ∈ N ( i ) ∪ { i } e x p ( L e a k y R e L U ( a T [ h ^ i ( l + 1 ) ⊕ h ^ s ( l + 1 ) ] ) ) \alpha_{ij}=\frac{exp(LeakyReLU(\textbf{a}^{T}[\widehat{h}_{i}^{(l+1)}\oplus \widehat{h}_{j}^{(l+1)}]))}{\sum_{s\in N(i)\cup\left\{i\right\}}exp(LeakyReLU(\textbf{a}^{T}[\widehat{h}_{i}^{(l+1)}\oplus \widehat{h}_{s}^{(l+1)}]))} αij=∑s∈N(i)∪{i}exp(LeakyReLU(aT[h i(l+1)⊕h s(l+1)]))exp(LeakyReLU(aT[h i(l+1)⊕h j(l+1)]))其中, a ∈ R 2 F ′ \textbf{a}\in R^{2F'} a∈R2F′是一个可学习参数。
- 更新节点信息: z i ( l + 1 ) = ∑ s ∈ N ( i ) ∪ { i } α i s h ^ s ( l + 1 ) z^{(l+1)}_{i}=\sum_{s\in N(i)\cup\left\{i\right\}}\alpha_{is}\widehat{h}_{s}^{(l+1)} zi(l+1)=s∈N(i)∪{i}∑αish s(l+1)为了增加非线性信号,我们使用激活函数输出新信息: h i ( l + 1 ) = σ ( z i ( l + 1 ) ) h_{i}^{(l+1)}=\sigma(z^{(l+1)}_{i}) hi(l+1)=σ(zi(l+1))
- 为了稳定学习过程并获得来自不同表示子空间的信息,采用具有 K K K 个头的多头注意机制: h i ( l + 1 ) = σ ( ∣ ∣ k = 1 K [ z i ( k ) ] ( l + 1 ) ) h_{i}^{(l+1)}=\sigma(||_{k=1}^{K}[z_{i}^{(k)}]^{(l+1)}) hi(l+1)=σ(∣∣k=1K[zi(k)](l+1))其中, ∣ ∣ || ∣∣表示拼接操作, [ z i ( k ) ] ( l + 1 ) [z_{i}^{(k)}]^{(l+1)} [zi(k)](l+1)表示第 l + 1 l+1 l+1层第 i i i个节点的,第 k k k个注意力空间的输出信息;
- 有时候,为了提高收敛速度并稳定学习过程,我们在每个 GAT 层的输出之后添加了一个归一化层,然后再应用激活函数: h i ( l + 1 ) = σ ( L a y e r N o r m ( z i ( l + 1 ) ) ) h_{i}^{(l+1)}=\sigma(LayerNorm(z^{(l+1)}_{i})) hi(l+1)=σ(LayerNorm(zi(l+1)))
子结构提取
首先给出模型架构如下:
使用
l
l
l层GAT提取药物的特征(两个输入药物的GAT通道共享权重),每次经过一层GAT,都会获得药物不同子结构的信息,在每一层GAT,使用下面的READOUT函数聚合药物所有子结构的信息得到药物分子图的图级表示:
g
x
(
l
)
=
∑
i
=
1
n
β
i
z
i
(
l
)
g_{x}^{(l)}=\sum_{i=1}^{n}\beta_{i}z_{i}^{(l)}
gx(l)=i=1∑nβizi(l)注意到,使用了信息
z
i
z_{i}
zi而不是
h
i
h_{i}
hi,这是因为实验表明,非线性的修饰在这个任务中不是很重要。其中的
β
i
\beta_{i}
βi表示了不同子结构的重要性,
β
i
\beta_{i}
βi由SAGPooling计算:
β
=
s
o
f
t
m
a
x
(
G
N
N
(
A
,
X
)
)
\beta=softmax(GNN(A,X))
β=softmax(GNN(A,X))其中
A
A
A是图的邻接矩阵,
X
X
X是图的节点特征,SAGPooling同时考虑节点的上下文信息和拓扑信息,以确定它们在整个图中的重要性;
下面展示了3层GNN提取子结构的例子:
在原始图中,每个节点对应一个原子,用不同的颜色表示。 在每个 GNN 层,一个节点(被黑色的环包围)通过在该层的感受野范围内聚合其周围的所有节点来更新。 这些周围的节点显示为正在更新的节点的颜色。 在 GNN 层中的节点更新之后,“每个节点”因此可以代表“一个子结构”,子结构信息由其周围的节点组成,节点本身是“子结构中心”;也就是说,我们在这个过程中获得了多尺度下的各个子结构信息,而
g
x
(
l
)
g_{x}^{(l)}
gx(l)就表示药物
G
x
G_{x}
Gx在尺度
l
l
l下的综合子结构信息;
下面通过co-attention融合多尺度的各个子结构信息从而得到各个子结构间的相互作用程度: γ i j = b T t a n h ( W x g x ( i ) + W y g y ( j ) ) , i , j = 1 , . . . , L \gamma_{ij}=\textbf{b}^{T}tanh(W_{x}g_{x}^{(i)}+W_{y}g_{y}^{(j)}),i,j=1,...,L γij=bTtanh(Wxgx(i)+Wygy(j)),i,j=1,...,L其中 L L L是GAT的层数, b \textbf{b} b是一个可学习向量, W x , W y W_{x},W_{y} Wx,Wy是可学习矩阵;我们使用不同的权重矩阵来避免类似的子结构被给予高分的情况,但这会使整个学习过程复杂化;
γ i j \gamma_{ij} γij表示药物 G x G_{x} Gx在 i i i尺度下的综合子结构信息,和药物 G y G_{y} Gy在 j j j尺度下的综合子结构信息,两者的相互作用程度;
下面预测药物-药物反应的概率: P ( G x , G y , r ) = σ ( ∑ i ∑ j γ i j ( g x ( i ) ) T M r g y ( j ) ) P(G_{x},G_{y},r)=\sigma(\sum_{i}\sum_{j}\gamma_{ij}(g_{x}^{(i)})^{T}M_{r}g_{y}^{(j)}) P(Gx,Gy,r)=σ(i∑j∑γij(gx(i))TMrgy(j))其中, M r M_{r} Mr是可学习参数,对应着类型为 I r I_{r} Ir的反应,每种反应 r r r都有一个独立的 M r M_{r} Mr,组合中的子结构信息都按重要性或相关程度加权,它是最终的 DDI 预测概率。
模型的损失函数使用交叉熵损失计算: L = − 1 N ∑ i = 1 N ( l o g ( p i ) ) L=-\frac{1}{N}\sum_{i=1}^{N}(log(p_{i})) L=−N1i=1∑N(log(pi))其中, N N N是数据集 D = { ( G x , G y , r ) i } i = 1 N D=\left\{(G_{x},G_{y},r)_{i}\right\}_{i=1}^{N} D={(Gx,Gy,r)i}i=1N的样本数, p i p_{i} pi是样本 i i i对应的正确反应类别概率。
实验结果
数据集使用从DrugBank中收集的数据,其中包含1704个药物,分类了86种反应的共计191400个DDI样本。实验结果如下所示:
为了研究模型在面对新药物时的表现,论文没有从数据集中直接划分训练集和验证集,论文将数据集中的药物划分为
G
n
e
w
G_{new}
Gnew和
G
o
l
d
G_{old}
Gold,并有:
G
n
e
w
∪
G
o
l
d
=
G
,
G
n
e
w
∩
G
o
l
d
=
∅
G_{new}\cup G_{old}=G,G_{new}\cap G_{old}=\emptyset
Gnew∪Gold=G,Gnew∩Gold=∅数据集划分按如下方式进行:
然后论文在两个验证集
D
s
1
D_{s1}
Ds1和
D
s
2
D_{s2}
Ds2上分别得到以下实验结果: