图神经网络中的虚拟节点
1.虚拟节点
当我们使用节点来构成图结构时,
-
regular node: 常规的节点即代表了某一个局部特征, 即局部节点特征。
-
virtual node: 普通的节点不同,有时会需要这样的一种特征, 该特征代表了该样本的全局信息,即全局特征, 而我们需要对这类全局特征来进行表示;
在py G 的实现中, 使用虚拟节点来代表这类全局特征,
2.虚拟节点的边
在将虚拟节点连接到所有的常规节点时, 需要确定,
- 是使用双向连接还是单向连接。
即确认让全局特征与局部节点之间的影响,是双向还是单向的,
比如, 如果全局特征代表的是该样本的整体位置信息,而常规节点代表的是局部节点特征,
那么, 虚拟节点代表的位置信息应该对每个常规节点都会产生影响, 但是,每个常规节点并不应该影响到全局的位置信息,
因为,此时的样本的位置信息是固定的,静态的, 因此,节点的特征不应该改变该全局特征。 此时应该构建局部节点与虚拟节点之间形成单向的边。
3.batch 构建
在 构建一个batch 的图数据结构时,
需要确保 样本之间的节点 能有效的隔离, 而不会产生跨样本之间节点的消息传递。
这是通过样本之间的节点 不会存在边的连接来保证的,
通过这种方式, 从而使用样本内的节点只会在样本内之间进行消息传播, 而不会导致跨样本的消息传递;
Visualizing Edge Index Isolation
Without Virtual NodesSample 1 (116 nodes):
edge_index[0]: [0, 1, 2, ..., 114]
edge_index[1]: [1, 2, 3, ..., 115]Sample 2: Starts at 116
edge_index[0]: [116, 117, ..., 230]
edge_index[1]: [117, 118, ..., 231]Isolation: No edge from 115→116.With Virtual NodesSample 1 (192 regular + 1 virtual):
Regular: [0, 1, ..., 190] → [1, 2, ..., 191]
Virtual: [192, 192, ...] → [0, 1, ...]Sample 2: Starts at 193, virtual at 386
Regular: [193, 194, ...] → [194, 195, ...]
Virtual: [386, 386, ...] → [193, 194, ...]Isolation: No edge from 192→193.