AffinityNet:Semi-supervised Few-shot Learning for Disease Type Prediction——疾病预测的半监督小样本学习_亲和网络
来源:步遥情感网
骨架
堆叠 KNN attention pooling layers , 是 的泛化,首先不需要提前计算图,which is difficult for some kind of data(有没有graph都可以),其次不需要输入整幅图,将图分割有利于计算。
算法
1. feature attention layer
Graph Attention Model 在最初的特征使用线性变换,也就是仿射变化对原始特征进行了处理,从F‘不一定等于F可以看出来。 对于一个样本的特征向量,如果特征维度是F的话,就使用维度为F的一个特征注意力向量w来对特征进行处理
w
=
(
w
1
,
w
2
,
⋯
 
,
w
F
)
∑
i
=
1
F
w
i
=
1
w = (w_1,w_2,\cdots,w_F) \quad \sum_{i=1}^{F}w_i=1
w=(w1,w2,⋯,wF)i=1∑Fwi=1
h
~
i
=
w
⊗
h
i
\widetilde{h}_i = w \otimes h_i
hi=w⊗hi即,每个元素相乘,因此该操作后特征维度不变,只是特征的影响能力会乘以一个权重,在总体流程图中以不同的颜色表示重要性。 【权重作用于特征】
2. Attention kernel
实质: 计算样本之间的相似性促进池化,作用于feature attention之后。
3. kNN attention pooling layer
前面样本经过了特征注意力处理,然后对attention feature之后的样本进行attention 和normalized处理之后,整个过程如下:
h
~
i
′
=
f
(
∑
j
∈
N
i
a
(
h
~
i
,
h
~
j
)
⋅
h
~
j
)
\widetilde{h}'_i = f(\sum _{j \in N_i}a(\widetilde{h}_i ,\widetilde{h}_j)\cdot \widetilde{h}_j )
hi′=f(j∈Ni∑a(hi,hj)⋅hj)其中
h
~
i
′
\widetilde{h}'_i
hi′ 表示池化输出,
f
f
f表示池化函数,作用于attention 之后归一化的结点,确定该结点是否激活。例如
f
(
h
)
=
m
a
x
(
W
h
+
b
,
0
)
f(h)=max(Wh+b,0)
f(h)=max(Wh+b,0) [与GAM一样,括号内是一个结点新的输出,所以pooling layers 作用于结点,而不是特征,与之前的CNN等池化缩小feature map尺寸不一样] 如果给定了一个图可以直接来确定邻居节点。如果图较大,为了降低计算复杂度,随机选择K个样本用于计算。k是一个超参数。【我认为就是作者实现里面batch_size的大小,如果model 的设置里面k=None,那么k邻近就是batch_size的大小,如果k 有值,那么k邻近就是在batch_size里面选择k个样本】