【传知代码】LAD-GNN标签注意蒸馏(论文复现)
近年来,随着图神经网络(GNN)在各种复杂网络数据中的广泛应用,如何提升其在大规模图上的效率和性能成为了研究的热点之一。在这个背景下,标签注意蒸馏(Label Attention Distillation,简称LAD)作为一种新兴的技术,为优化GNN模型的训练和推理过程提供了一种创新的解决方案。
本文所涉及所有资源均在传知代码平台可获取
目录
概述
算法流程
核心逻辑
写在最后
概述
在当今的数据科学领域,Graph Neural Networks (GNNs) 已成为处理图结构数据的强大工具。然而,传统的GNN在图分类任务中面临一个重要挑战——嵌入不对齐问题。本文将介绍一篇名为“Label Attentive Distillation for GNN-Based Graph Classification”的论文,该论文提出了一种新颖的解决方案——LAD-GNN,以显著提升图分类的性能,您可以在 AAAI 上找到这篇论文的详细内容。
本文提出了一种新的图神经网络训练方法,称为 LAD-GNN。该方法通过标签注意蒸馏,显著提高了图分类任务的准确性。其主要思路是在训练过程中引入标签信息,通过师生模型架构,实现类友好的节点嵌入表示。
论文的主要创新点在于提出了一种名为标签注意蒸馏方法(LAD-GNN)的新颖方法。该方法通过引入标签注意编码器,将节点特征与标签信息结合在一起,生成更加理想的嵌入表示。标签注意编码器能够捕捉全局图信息,使得节点嵌入更加对齐,从而解决了传统GNN中常见的嵌入不对齐问题。此外,该方法采用了基于师生模型架构的蒸馏学习策略,教师模型通过标签注意编码器生成高质量的嵌入表示,学生模型通过蒸馏学习从教师模型中学习类友好的节点嵌入表示,从而优化图分类任务的性能。实验结果表明,LAD-GNN在多个基准数据集上显著提高了图分类的准确性,展示了其在图神经网络领域的创新性和有效性。以下是 LAD-GNN 的模型架构图:
该框架图可以看到该框架分为教师模型和学生模型两个阶段:
教师模型的训练过程是通过一种标签关注的训练方法进行的。在这个过程中,标签关注编码器会将真实标签编码成标签嵌入,并将其与由GNN骨干生成的节点嵌入结合,使用注意力机制形成一个理想的嵌入。这个理想嵌入被送入读出函数和分类头,以预测图的标签。标签关注编码器与GNN骨干一起训练,目的是最小化分类损失。
在学生模型的训练阶段,采用了一种基于蒸馏的方法。具体来说,教师模型训练完成后,生成的理想嵌入作为中间监督指导学生模型的训练。学生模型共享教师模型的分类头,通过最小化分类损失和蒸馏损失来继承教师模型的知识,生成有利于图级任务的节点嵌入。
在整个框架中,标签关注编码器起到了关键作用。它由标签编码器和多个注意力机制层组成,通过将标签嵌入和节点嵌入进行特征融合,捕捉两者之间复杂的关系,从而增强模型的表达能力。在实际操作中,标签编码器使用多层感知器(MLP)将标签编码成潜在嵌入,随后通过类似Transformer架构的注意力机制进行处理,形成高级的潜在表示。
算法流程
标签注意蒸馏方法:
教师模型:使用标签注意编码器,将节点特征与标签信息结合,生成理想的嵌入表示。
学生模型:通过蒸馏学习,从教师模型中学习类友好的节点嵌入表示,以优化图分类任务。
方法流程:
标签注意教师训练:通过标签注意编码器,将节点特征与标签信息融合,生成理想的嵌入表示,并进行图分类训练。
蒸馏学生学习:学生模型通过蒸馏学习,从教师模型的理想嵌入表示中学习,生成类友好的节点嵌入表示,以提升图分类性能。
核心逻辑
论文通过在10个基准数据集上的实验验证了 LAD-GNN 的有效性。结果表明,与现有的最先进GNN方法相比,LAD-GNN 显著提高了图分类的准确性。例如,在 IMDB-BINARY 数据集上,LAD-GNN 使用 GraphSAGE 骨干网实现了高达16.8%的准确性提升,这个结果比许多单独使用GNN训练的结果都更好:
MUTAG 教师训练:
MUTAG 学生训练:
运行模型很简单,只需要下面两行命令,第一个是先运行教师模型,数据集可以根据数据名称在–dataset MUTAG这里更改,然后还有seed,一般情况下需要使用10个不同的seed进行训练,然后取平均值,数据集不需要自己下载,会自己联网下载,运行过程中请不要使用科技,否则下载会失败。
使用标签注意编码器运行教师模型:
python main.py --dataset MUTAG --train_mode T --device 0 --seed 1 --nhid 64 --nlayers 2 --lr 0.01 --backbone GCN
老师模型训练完成之后使用该命令进行学生模型训练:
python main.py --dataset MUTAG --train_mode S --device 0 --seed 1 --nhid 64 --nlayers 2 --lr 0.001 --backbone GCN
代码目录如下:
LAD-GNN/
│
├── Figures/ # 图片目录
│ ├── motivation_fig.jpg # 动机示意图
│ ├── framework.jpg # 整体框架图
│ ├── dataset.jpg # 数据集示意图
│ └── result.jpg # 结果示意图
│
├── GNN_models/ # 存放不同的图神经网络模型
│ ├── base_model.py
│ ├── gat.py # 图注意力网络模型
│ ├── gcn.py # 图卷积网络模型
│ ├── gin.py # 图同构网络模型
│ ├── pna.py # 物理网络嵌入模型
│ └── sage.py # 子图聚合增强网络模型
│
├── checkpoints/ # 模型检查点目录
│ └── GCN/ # GCN模型的检查点
│
├── data/ # 数据集目录
│ └── MUTAG/ # 包含MUTAG数据集的子目录
│ ├── MUTAG
│ ├── processed
│ └── raw
│
├── README.md # 项目说明文件
├── main.py # 主要的Python脚本,用于执行模型训练和测试
├── test.py # 用于测试模型性能的脚本
├── requirements.txt # 项目依赖文件
└── utils.py # 包含一些辅助函数的脚本
写在最后
LAD-GNN标签注意蒸馏技术作为提升图神经网络(GNN)性能的创新方法,在当前复杂网络分析领域展现了巨大的潜力和前景。通过引入标签注意力机制,LAD-GNN有效地优化了模型的训练和推理过程,显著提升了模型在节点分类、图分类等任务中的准确性和效率。
本文深入探讨了LAD-GNN的技术原理,解析了其在信息传递和损失优化中的作用机制。通过实验效果的分析,我们展示了LAD-GNN在大规模图数据上优于传统方法的性能表现,特别是在处理标签稀疏或噪声数据时的优势。
未来,随着对复杂网络数据需求的增加,LAD-GNN技术有望在社交网络分析、生物信息学、推荐系统等多个领域得到广泛应用。然而,要实现其在实际工程中的全面应用,仍需解决模型扩展性、泛化能力以及计算效率等方面的挑战。因此,进一步的研究和探索将为推动LAD-GNN技术的进一步发展和应用提供重要的指导和支持。
通过本文的探讨,希望读者能够深入理解LAD-GNN技术的价值和应用前景,为其在未来的研究和实践中提供启发和指导。
详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。
相关文章:
【传知代码】LAD-GNN标签注意蒸馏(论文复现)
近年来,随着图神经网络(GNN)在各种复杂网络数据中的广泛应用,如何提升其在大规模图上的效率和性能成为了研究的热点之一。在这个背景下,标签注意蒸馏(Label Attention Distillation,简称LAD&…...
JVM调优篇:探索Java性能优化的必备种子面试题
JVM内存模型 首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。 正常…...
常见的内存泄漏及其解决方案
内存泄漏是Java开发中一个常见且令人头疼的问题,即使在使用垃圾回收机制的Java中,也无法完全避免内存泄漏的出现。当对象不再需要时却仍然占据着内存,导致内存使用量不断增加,最终可能导致 OutOfMemoryError。本文将深入探讨Java中…...
SQLSERVER 触发器记录表某个字段更新记录
想要记录该字段的原值和现有值,触发器写法: CREATE TRIGGER tr_UpdateEmployeeDepartment ON Employees AFTER UPDATE AS BEGINSET NOCOUNT ON; -- 避免多余的计数消息IF UPDATE(Department) -- 检查是否更新了 Department 字段BEGININSERT INTO Update…...
现代前端架构介绍(第一部分):App是如何由不同的构建块构成的
远离JavaScript疲劳和框架大战,了解真正重要的东西 几周前,我的同事们对我们的前端架构、代码结构和面临的挑战很感兴趣。在做了几次关于如何构建可扩展且健壮的前端的演讲后,我觉得把它们都总结一下并与社区分享我们的策略是一个不错的主意。…...
Android 11 关于按键拦截/按键事件处理分享
系统在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java处理按键事件,不管是物理按键还是 SystemUI的nav_bar上的虚拟按键(使用了KeyEvent类中的,比如:KeyEvent.KEYCODE_VOLUME_UP). 主要注意的有两个函数: interceptKeyBef…...
最新TomatoIDC开源虚拟主机销售系统源码/有插件系统模块+模版系统
源码简介: 最新TomatoIDC开源虚拟主机销售系统源码,它有一个方便扩展的插件和模版系统模块,使用实用。 TomatoIDC,一款遵循GPL3.0协议的开源虚拟主机销售系统,不仅有着可以轻松扩展的插件系统和模版系统,…...
简单的docker学习 第4章docker容器
第4章 Docker容器 4.1 容器基础 4.1.1 容器启动流程 通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到…...
PHP中如何声明数组
数组是一种数据结构,用于存储一系列的值或对象,这些值或对象可以通过索引(或键)来访问。在PHP中,数组是一种复合类型的数据结构,可以存储多个值,这些值可以是整型、字符串、布尔值,甚…...
JavaScript前端面试题——fetch
什么是fetch? fetch:fetch是浏览器内置的api,用于发送网络请求 ajax&axios&fetch的关系 ajax:ajax 是一种基于原生 JavaScript 的异步请求技术。它使用 XMLHttpRequest 对象来发送请求和接收响应。 axios:…...
在Qt中获取Windows中进程的PID
主要是用到了系统自带的工具【tasklist.exe】 利用 QProcess调用这个tasklist有一点坑,已经在代码中指出了。 指定为csv格式输出的话,在后处理时比较方便。 QList<quint64> listProcessIdentifier(QString processName) {QProcess process;QStrin…...
8.1-java+tomcat环境的配置+代理
一、回顾 1.安装nodejs,这是一个jdk一样的软件运行环境 yum -y list installed|grep epel yum -y install nodejs node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config .....淘宝镜像 3.安装vue/cli command line interface 命令行…...
gorm框架实现基本的增删改查
连接数据库 package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql" )func main() {db, err : gorm.Open("mysql","root:roottcp(127.0.0.1:3306)/test?charsetutf8mb4&parseTimeTrue&locLocal…...
AUTOSAR介绍
1、AUTOSAR架构介绍 AUTOSAR(AUTomotive Open System ARchitecture,汽车开放系统架构)是汽车和软件行业领先公司的全球合作联盟,为智能移动开发和建立标准化的软件框架以及开放的E/E系统架构。考虑到目前和未来市场中不同的汽车E/E架构,AUTOS…...
10. 计算机网络HTTP协议
1. 前言 无论是作为后端开发、前端开发、测试开发程序员或者是运维人员,在面试过程中,大概率都会被问到 HTTP 协议相关题目。 因为伴随着 2010 年之后移动互联网在全世界的高速发展,各种各样的浏览器(Chrome、FireFox、Safari 等)层出不穷,也诞生了诸多服务端开发的语言…...
“职场中,不要和上司作对”,真的很重要吗?你认同这句话吗?
在职场上,领导对下属的期望永远都只有两个字,不是忠诚,也不是能力,而是省心。 领导对下属的要求就是别让我操心。 在职场中,通常面临的首要问题就是如何与领导相处。 把职场中的前辈当作老师来尊重,你尊…...
可视化目标检测算法推理部署(一)Gradio的UI设计
引言 在先前RT-DETR模型的学习过程中,博主自己使用Flask框架搭建了一个用于模型推理的小案例: FlaskRT-DETR模型推理 在这个过程中,博主需要学习Flask、HTML等相关内容,并且博主做出的页面还很丑,那么,是…...
【PyTorch】基于YOLO的多目标检测项目(一)
【PyTorch】基于YOLO的多目标检测项目(一) 【PyTorch】基于YOLO的多目标检测项目(二) 目标检测是对图像中的现有目标进行定位和分类的过程。识别的对象在图像中显示有边界框。一般的目标检测方法有两种:基于区域提议的…...
spring boot 实现 Stream 钉钉事件订阅
1: 参考链接 https://open.dingtalk.com/document/orgapp/develop-stream-mode-push-server 2:钉钉开放平台订阅配置 配置之后运行一下上面提供的链接 里面的main方法,验证通道 3:订阅启动方式 EventListenerThread eventListenerThrea…...
基于 Rough.js 的 Vue 散点图绘制
本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 Rough.js 的 Vue 散点图绘制 应用场景 本代码展示了如何使用 Rough.js 库在 Vue 应用程序中绘制散点图。Rough.js 是一个轻量级 JavaScript 库,用于创建具有手绘风格的可视化效果。散点图是一…...
【c++】用c++指针传递来模拟“靶向治疗”
一:源码: #include <iostream>void targetedTherapy(bool* flag) {if (*flag == false) {*flag = true;} }int main() {//代表一系列癌细胞//true为健康细胞 false为癌变细胞bool cancerCell[7] = {true, false, true, true, true, true, false};for (int i = 0; i &…...
如何开启idea中的断言功能?
目录 一、什么是断言? 二、Java断言的语法 三、开启断言 一、什么是断言? 断言(assert)是 Java 中的一条语句,一种在程序中的逻辑(如一个结果为真或假的逻辑判断式),目的是验证软…...
大模型之语言大模型技术
本文作为大模型综述第二篇,介绍语言大模型基本技术。 近年来,在 Transformer 架构基础上构建的预训练语言模型为自然语言处理领域带来了一系列突破式进展,成为人工智能主流技术范式。预训练语言模型采用“预训练+微调”方法,主要分为两步: 1)将模型在大规模无标注数据上…...
浮点数例外 (核心已转储) 的问题记录
一般这种问题,是程序运行过程中出现浮点数运算错误导致的程序崩溃 浮点异常可能由以下几个原因引起: 除以零:当程序中出现除以零的操作时,会触发浮点异常。例如,当一个数除以0时,会导致浮点异常。数值溢出…...
Vite项目中根据不同打包命令配置不同的后端接口地址,proxy解决跨域
在vite.config.ts同级目录添加两个文件 .env.development #开发环境 VITE_APP_ENV developmentVITE_APP_BASE_API .env.production #生产配置 VITE_APP_ENV productionVITE_APP_BASE_API https://www.bdjw.work代码中使用路径 const request axios.create({baseURL: i…...
Java新手启航:JDK 21 版本安装,开启编程之行
在Java开发前,JDK是必不可少的环境,接下来,让我们一起完成JDK 21版本的下载和安装! 种一棵树最好的时间是10年前,其次就是现在,加油! …...
Redis学习[5] ——Redis过期删除和内存淘汰
六、Redis过期键值删除 6.1 Redis的过期键值删除策略 6.1.1 什么是过期键值删除? Redis中是可以对key设置过期时间的,所以需要有相应的机制将已过期的键值对删除,也就是**过期键值删除策略。Redis会用一个过期字典(expires dic…...
书生大模型学习笔记 - Python
Python实现wordcount 请实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。 解题思路:首先把字母转小写>然后把单词取出来去除标点>循环单词列表>key已存…...
JavaScript青少年简明教程:面向对象编程入门
JavaScript青少年简明教程:面向对象编程入门 JavaScript 支持多种编程范式(programming paradigms),即支持多种不同的编程风格和方法。 前面介绍的编程方式,主要是面向过程编程(Procedural Programming&am…...
山乙建设公司网站/百度舆情
设置vscode为中文ctrshiftp 输入 configure language 进 en更改为zh-cn , 重启vscode即可 , 如果还不行,就安装插件 转载于:https://www.cnblogs.com/enych/p/10550095.html...
怎么制作网站维护公告效果/新一轮疫情最新消息
微信开始严打第三方网页强制跳转行为,禁止使用提供诱导或强制点击跳转阅读全文功能,违规导流网站一律封杀!微信方面表示,近期大量用户投诉,在微信中打开第三方网站链接内容总是出现诱导或强制点击才能阅读链接全文行为,…...
杭州亚运村建设指挥部网站/个人怎么开跨境电商店铺
刚开始学习C#的时候就写过了,直接给地址了: 委托、匿名函数、Lambda表达式和事件的学习 委托学习续:Action、Func和Predicate...
吉林做网站多少钱/重庆百度推广优化
多线程面试时,经常会考到一个用3个线程循环打印abcabcabc的问题 现用两种方法做了一下,也看了网上的其他 人的思路,大差不差一个对象,一个状态位控制,代码如下:package com.myTread.abcabc.my;import java.…...
asp.net获取网站地址/舆情报告范文
1.与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13{public static void main(String[] args){int a129;int b128;…...
政府网站建设 江苏省/百度新闻官网
Android的包文件APK分为两个部分:代码和资源,所以打包方面也分为资源打包和代码打包两个方面,这篇文章就来分析资源和代码的编译打包原理。 具体说来: 1.通过AAPT工具进行资源文件(包括AndroidManifest.xml、布局文件、…...