©PaperWeekly 原创 · 作者|张笑
单位|成都数联铭品
研究方向|图表示和知识挖掘
背景
在图像和自然语言处理领域,预训练和微调的模式取得较大成功,图表示模型的预训练方法还在起步阶段,其不仅需要增加前置的任务,同时还需要专业知识选择出与下游任务相关性强的样本和任务,再进行训练。否则很有可能出现反效果(类比于原始 BERT,NSP 任务实质上效果有限)。
动机
这篇论文考察的是生物化学领域,再具体点是分子结构和蛋白质结构。分子、蛋白质较容易获得独立的结构,同时它们都是限个小元素的排列组合而成,并且每个子结构的研究也比较丰富,比如元素周期表,化学键,蛋白质的多肽结构,子结构的初级功能也有一定的研究(分子的性质,合成分子性质的假设实验,蛋白质控制细胞凋亡和增殖等),有较丰富的整图级的预训练任务。
需要说明的是,本文的样本是多个独立的小结构,不同于社交网络或者用户-商品这类图谱(连通网络非常大)。所以对后者,仍然需要重新设计抽取小结构以及设置小结构任务的方案。针对这篇文章,下文将 graph-level 称为整图级。
本文主要工作在设计节点级别的预训练方案,补充整图级别预训练策略;实验发现,两类策略分开进行预训练,对下游任务的提升有限,甚至有时会起到反效果。
直观来说,作者想让节点的编码可以根据类别分开(类比原子的种类),同时不同功能的整图编码(整图中各节点编码的聚合 pooling)也能够分开,
即达到上图
的效果。
框架
3.1 准备知识
图上的监督学习:令图 , 和 分别表示节点 v 和边 上的特征属性。给定一系列图 和对应的标签 . 图水平的监督学习是学习图的向量表示 ,然后进行整图的标签预测,即 .
GNNs:对每个节点,记为目标节点 v,通过聚合 v 的所有邻居节点和相应的边的表示,迭代生成 v 的表示向量。
其中 为节点 v 的第 k 词迭代得到的表示向量, 表示节点 v 的邻居集合, .
图表示学习:为了得到全图 G 的表示向量 ,需要一个池化函数 readout:
3.2 图神经网络预训练策略
3.2.1 节点级预训练:使用无标签的数据,自监督学习特定领域的知识/规则,包括上下文预测和属性遮掩
(1)首先会选中一个中心节点,出于 GNN 的原理,K 层网络代表着中心节点可以吸收到不超过 K hop 的节点信息,选取中心节点的 K hop ego-network 为邻居;对于中心节点,选择
到
hop之间的部分作为上下文。具体构造应该是
网络除去
网络部分。选择
,则邻居和上下文存在重叠部分,称为上下文锚定节点,见 figure 2(a) 中绿色节点。
(2)由于图结构的组合特性(不同原子和不同连接方式,不像 NLP 中预测上下文是从固定词表里选择的),故这里引入一个 context GNN,用来编码被切割开的上下文子图,然后将锚定节点编码(固定长度的向量)进行平均,作为上下文向量,然后与中心节点的编码做内积。见 figure 2(a).
(3)对图 G 中的节点 v,对应的上下文向量记为
. 上下文预测的目标是一个二分类问题,即一个特定的邻居和一个特定的上下文编码是否属于同一个节点,采用 negative sampling 方式进行训练:
通过学习图结构中节点或边的属性分布规律,来捕获领域知识。类似于 BERT 中的完形填空模式,在分子图中可以遮掩掉某些原子然后去预测这些原子是什么(获取简单的化学领域知识),也可以遮掩掉边(使用边两段的端点编码均值作为边的向量,预测边属性,获取分子构成的基本规则)。
由于整图级表示
直接用于下游预测任务的微调,因此希望直接将特定领域信息编码进
中。对于分子和蛋白质,有比较多的已观测的属性,且它们组成的结构和相应的规则比较固定。所以整图级的预训练任务非常多,于是整图级的性质预测问题,即是一个多任务分类问题。
然而不是所有的预训练任务都对下游的任务有效,甚至会产生负迁移现象。作者认为,一方面,不是所有预训练任务与下游任务相关(需要领域专家进行任务选择);另一方面只采用整图级的预训练,会造成单个节点编码的分布不清晰现象,从而造成负面影响,故这里提出先做节点级的预训练,再做整图级的预训练。
作者通过实验,说明先进行节点级的预训练任务,再进行整图级的预测任务,就可以不需要挑选样本和任务,使得下游任务取得较好结果。
思考
(1)经典的 deep walk、node2vec、line、Deep Graph Infomax 等,均是在节点级别上进行编码,目标通常是预测节点属性或者链路预测,这样的编码在处理整图级别任务往往不是最优的;文章中阐述了,只使用整图级编码预训练,又会受节点编码区分不明显而限制模型效果。所以两者需要结合,可以类比 bert 的思想,填空是为了预测词,NSP 是整句的主题预测,即不仅考虑单词的语义,还要考虑句子的语义。
(2)对于其他网络如何抽取子结构及设计预训练任务?
整图级预训练任务需要结合具体场景提出,这对领域知识要求很高,且需要长时间的积累。
对于社交网络这种,大概率会是一个超大的连通网络,没有分割好的子结构。每个节点都取 ego-network 的话,差异都会非常明显,同时可能存在一些噪音数据(骚扰电话),所以在 ego 网络里进行一定的筛选,不仅可以提取关键的网络结构(需要模型关心的结构),而且将子图结构规整到一定程度的话,可以方便设计深度学习模型。
该方法是对每一个节点,生成它的 K 邻居子图,形成上面两幅图(c)。其中节点需要一个指标衡量排序,可选择 pagerank,且在一阶邻居个数少于 K 时,会选择二阶邻居,以此类推。每个节点 K 邻域还要根据 pagerank 值进行从大到小排序,从左到右排列。
接着再引入一个超参数H,代表树的深度,见上图最左边即为 K=3,H=3 的情形。此时“卷积”可以认为是每个节点 K 邻居那个样子(图中虚线椭圆画出的样子),移动的顺序是在树上从上到下,从左到右。这种方式跟标准的 CNN 很像了。
其中
, A 是邻接矩阵,D 是对角阵,元素为 A 的每行的和
. 此时 S(i,j) 表示第 i 个节点对 j 节点的亲密分。设置两个参数
和 t,分别表示亲密分数的下限和选取最大的 t 个节点作为邻居(邻居数长短不一),以此得到 i 节点的上下文节点序列,随后采用 transformer 进行建模。注意,与第一种方法不同的是,这里存在一些节点,满足条件的邻居个数少于 t 个,但不需要进行补齐。
跟 bert 一样,graph-bert 给序列中的每个节点要增加位置编码,记录绝对位置(全局算了一个分值进行排序)、相对位置(根据 S 进行抽取的序列排序,同 bert 中的位置编码)、以 hop 为基础的相对位置(距离中心节点跳数的排序),但是它使用的位置信息,不能够帮助从序列重构出子图,或者说位置信息有些缺失。
1~通过统计 G 中每一个节点的度,将节点从大到小排序,得到 sorted_nodes_set.
2~根据 sorted_nodes_set 和 G 中连接情况,生成一个辅助连接情况 auxiliary_link_set
def generate_auxiliary_link_set (G, sorted_nodes_set) auxiliary_link_set = [] for k, node in enumerate(sorted_nodes_set): neighbor_of_nodes = G.neighbor(node) tmp = [] for neighbor_of_node in neighbor_of_nodes: idx = sorted_nodes_set.index(neighbor_of_node) if idx < k: tmp.append(idx) auxiliary_link_set.append([tmp, len(neightbor)-len(tmp)]) return auxilary_link_set
2)假设一张大的网络 G,对任意 G 中的节点 v,可以取 v 的 K 度 ego-network,记作. 于是对该中心子图执行数据序列化计算,得到对应的 sorted_nodes_set和auxiliary_link_set
3)根据 auxiliary_link_set 构造 mask 矩阵,而后在 sorted_nodes_set 序列上进行 transformer
变形一:可以考虑对 ego-network 进行剪枝,可以选择根据边的权重或者节点权重限制图谱的规模,也可以根据边或者节点属性等控制保留那些结构,以此生成一个点对应的多个子图结构。
变形二:在图序列化的部分,将中心节点放在根节点,生成相应的排序和辅助集合。
变形三:transformer 的时候,先根据 sorted_nodes_set 的顺序和 auxiliary_link_set,生成相应的位置编码,然后节点编码+位置编码放入另一个 transformer 里。
▲ 辅助连接中第i个元素,第一位的表示与 sorted_nodes_set[i] 相连,并且在 sorted_nodes_set 中排在 i 的元素索引,第二位表示 sorted_nodes_set[i] 的度数减去第一位集合的大小。第二位元素可以认为是定义了图的层次,这个层次信息作为一类位置编码信息,进入 transformer block.
▲ 整体模型框架,先把层级位置编码+相对位置编码送入一个 transformer 模块,其中使用到的 Mask 矩阵由辅助连接变量构造,控制遍历图的层级顺序。
▲ 根据示例图 1 中的 mask 矩阵,我们需要将位置编码顺序逆转,然后 attention 时使用 mask,可以看到这是一种自回归的编码方式,辅以层次编码,自底向上的扫描网络;同理,可以将 mask 转置,采用自顶而下的方式扫描网络。
另外,由于已经引入了层级编码,那么使用 transformer 编码器结构,同样可以。(总之就是缝合怪)
在子图匹配中,常将图中的节点进行排序,同时生成一个结构辅助集合,节点排序和结构辅助集合可以复原原来的图结构。可以通过辅助结构训练位置编码,然后利用这个位置编码+节点排序序列放入 bert 等进行预训练。
[1] Strateyies For Pre-training Graph Neural Networks
[2] Graph-BERT : Only Attention is Needed for Learning Graph Representations
[3] Multi-Stage Self-Supervised Learning for Graph Convolutional Networks
[4] GResNet : Graph Resdual Network For Reviving Deep GNNS From Suspened Animation
[5] Depth-based subgraph convolutional auto-encoder for network representation learning
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读 ,也可以是学习心得 或技术干货 。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品 ,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱: hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」 也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」 订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。