KDD 2022 | 图“预训练、提示、微调”范式下的图神经网络泛化框架

d445a5bc13c604c05f3defa8ec6263b7.gif

©作者 | 社媒派SMP

来源 | 社媒派SMP

本文是SIGKDD 2022入选论文“GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks”的解读。该论文由吉林大学计算机科学与技术学院王英教授课题组完成。

本文首次提出“Pre-training、Prompt、Fine-tuning”的概念将下游任务进行重构,使其具有与 Pretext 相似的任务目标,弥补 GNN 之间的任务差距,解决由传统 GNN 预训练中 Pretext 任务与下游任务之间内在训练目标差距导致的难以引出预训练的图知识、负迁移的问题。实验表明,该训练策略优于其它所有训练策略,包括监督学习、联合训练和传统的迁移学习。

ccea3c3a9b1473ddba92d6316910c2ef.png

论文标题:

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

c84c2e6710b65a2cf5089edee3d1199c.png

研究背景

图神经网络 (GNNs) 已经成为许多现实世界系统中分析图结构数据的技术,包括社交网络、推荐系统和知识图铺谱。GNN 的一般方法将输入视为一个底层的计算图,通过跨边缘传递消息学习节点表示。生成的节点表示可用于不同的下游任务,如链路预测、节点分类和节点属性拟合等。

最近在迁移学习领域中通过让 GNN 捕获可迁移的图模式以推广到不同的下游任务中。具体来说,大多数遵循“预先训练、微调”学习策略:使用容易获取的信息作为 Pretext 任务(如边缘预测)对 GNN 进行预训练,以预先训练的模型作为初始化对下游任务进行微调。

25c6f47ad2ed2c61b06f57773665465b.png

问题和挑战

论文注意到传统 GNN 预训练中 Pretext 任务与下游任务之间内在训练目标差距,不仅可能无法引出预训练的图知识,甚至会导致负迁移现象。此外,Pretext 任务既需要专业知识,也需要繁琐的手工试验。因此,论文首次提出“Pre-training、Prompt、Fine-tuning”的概念将下游任务进行重构,使其成为与 Pretext 任务相似的目标任务,以弥补预训练目标与微调目标之间的任务差距。

为了克服传统“Pre-training、Fine-tuning”的局限性,借鉴了自然语言处理中的“Prompt”技术。由于提示调优是NLP领域中特有的技术,因此很难设计适合 GNN 的 Prompt 模板。论文克服了两个主要的挑战:1)如何应用语义提示函数重构图数据中各种图机器学习任务;2)如何设计 Prompt 模板以更好地重新制定下游应用程序,提出图预训练和提示调优 (GPPT) 框架。


69f62bc436d34797dd7e89328319c921.png

方法

97effcce7c8377c5b812fa01b91c8f82.png

首先,采用 Masked Edge Prediction 任务对 GNN 进行预训练,将下游节点分类任务重构为链接预测任务。然后,为了缩小预训练目标和下游任务目标之间的的差距,利用成对的令牌模板中 Graph Prompt 函数将独立节点修改为标记对,其中每一个标记对包含代表下游问题的任务令牌(task token)和包含节点信息的结构令牌(structure token)。

任务令牌(表示节点标签)和结构令牌(描述节点)可以直接用于微调预训练模型且无需改变分类层。然后,利用节点链接预测得分重新制定节点分类方法,得分最高的任务标记被确定为节点标签。最后,通过实验验证了论文所提出的 GPPT 在监督学习、联合训练和传统迁移学习中的有效性,以及在小样本设置下这种学习模式的优越性。

041fa1724502c32e2a8a7b3efd2e338f.png

实验

我们在 8 个流行的基准数据集上评估了提出的框架 GPPT,包括引文网络 (Cora、Citeseer、Pubmed)、Reddit、CoraFull、Amazon-CoBuy(Computer 和 Photo)、Ogbn-arxiv。

9c17d6bb75383bd020cc8faa5cf08a30.png

基于提示的学习方法通常在基准测试上获得最好的性能,其中利用图聚类和邻域结构信息是 Prompt 令牌设计的关键。

f59dd283d770495e3b6aa4240e77f4cd.png

总结

我们创新性地提出了 GPPT,首个针对 GNN 进行“预训练、提示、微调”的迁移学习范式。首次设计了适用于图数据的图提示函数,以重新制定与 Pretext 任务相似的下游任务,从而减少二者训练目标差距。与此同时,我们还设计了任务和结构令牌生成方法,用于生成节点分类任务中的节点提示。此外,我们提出了平均提示初始化和正交正则化方法来提高提示调优性能。大量的实验表明,GPPT 在基准图数据集上优于传统的训练范式,同时提高了调优效率和对下游任务的更好的适应性。在未来的工作中,我们将在更具挑战性的知识图中探索图的提示功能,并尝试通过元学习来改进提示调优。

更多阅读

0db7f20ff8cec17aaac591cfe0ce576e.png

5a653e9859b7d59267e32686a33ae299.png

c7361d43030489e7eee9d13b88f994d7.png

06a073d3c582e6cfdba4de780731a7be.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

3eb1aedf9419671a239bd91729dd0ce6.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

a31b02b6f84ce47df37fae5fb56bacd1.png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是使用Tensorflow 2.9框架训练CNN模型的代码,数据集为NSL-KDD: ```python import tensorflow as tf from tensorflow.keras import layers import pandas as pd import numpy as np # 读取NSL-KDD数据集 train_df = pd.read_csv('KDDTrain+.txt', header=None) test_df = pd.read_csv('KDDTest+.txt', header=None) # 数据预处理 def preprocess(df): # 选取需要的特征列 features = [1, 2, 3, 41, 42, 43] x = df.iloc[:, features].values # 将字符串标签转换为整数 y = df.iloc[:, -1].replace({'normal':0, 'neptune':1, 'warezclient':2, 'ipsweep':3, 'portsweep':4, 'teardrop':5, 'nmap':6, 'satan':7, 'smurf':8, 'pod':9, 'back':10, 'guess_passwd':11, 'ftp_write':12, 'multihop':13, 'rootkit':14, 'buffer_overflow':15, 'imap':16, 'warezmaster':17, 'phf':18, 'land':19, 'loadmodule':20, 'spy':21, 'perl':22}).values # 对特征进行归一化处理 x = (x - x.mean()) / x.std() # 将标签转换为one-hot编码 y = tf.keras.utils.to_categorical(y, num_classes=23) return x, y x_train, y_train = preprocess(train_df) x_test, y_test = preprocess(test_df) # 构建CNN模型 model = tf.keras.Sequential([ layers.Reshape((6, 1), input_shape=(6,)), layers.Conv1D(32, 3, activation='relu'), layers.MaxPooling1D(2), layers.Conv1D(64, 3, activation='relu'), layers.MaxPooling1D(2), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dropout(0.5), layers.Dense(23, activation='softmax') ]) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test)) ``` 其中,`preprocess`函数用于对数据进行预处理,包括选取特征列、将标签转换为整数并进行one-hot编码、对特征进行归一化处理。`Sequential`模型中使用了两个`Conv1D`层和两个`MaxPooling1D`层,以及一个`Flatten`层、两个`Dense`层和一个`Dropout`层。最后使用`compile`方法编译模型,使用`fit`方法训练模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值