骨架
堆叠 KNN attention pooling layers , 是 Graph Attention Networks的泛化,首先不需要提前计算图,which is difficult for some kind of data(有没有graph都可以),其次不需要输入整幅图,将图分割有利于计算。
算法
1. feature attention layer
Graph Attention Model 在最初的特征使用线性变换,也就是仿射变化对原始特征进行了处理,从F‘不一定等于F可以看出来。
对于一个样本的特征向量,如果特征维度是F的话,就使用维度为F的一个特征注意力向量w来对特征进行处理
即,每个元素相乘,因此该操作后特征维度不变,只是特征的影响能力会乘以一个权重,在总体流程图中以不同的颜色表示重要性。 【权重作用于特征】
2. Attention kernel
实质: 计算样本之间的相似性促进池化,作用于feature attention之后。
- cosine similarity:
- Inner product:
- Perceptron affine kernel:
- Inverse distance with weighted L2 norm (w is the feature weight):
使用softmax归一化,其他归一化也是可行的。
[attention kernels 实质是计算两个样本之间的相似性,如果样本之间的关系图没有给出的话,可以使用其中一种kernel计算affinity graph,使用另一种来计算规范化注意力]
3. kNN attention pooling layer
前面样本经过了特征注意力处理,然后对attention feature之后的样本进行attention 和normalized处理之后,整个过程如下:
其中
表示池化输出,
表示池化函数,作用于attention 之后归一化的结点,确定该结点是否激活。例如
[与GAM一样,括号内是一个结点新的输出,所以pooling layers 作用于结点,而不是特征,与之前的CNN等池化缩小feature map尺寸不一样]
如果给定了一个图可以直接来确定邻居节点。如果图较大,为了降低计算复杂度,随机选择K个样本用于计算。k是一个超参数。【我认为就是作者实现里面batch_size的大小,如果model 的设置里面k=None,那么k邻近就是batch_size的大小,如果k 有值,那么k邻近就是在batch_size里面选择k个样本】
后面堆叠基础层和半监督小样本学习都比较简单了,可以根据文章提供的源码对照分析。