0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用10行代码搞定图Transformer

jf_78858299 来源:机器之心 作者:机器之心 2023-03-08 10:55 次阅读

让所有人都能快速使用图机器学习

2019 年,纽约大学、亚马逊科技联手推出图神经网络框架 DGL (Deep Graph Library)。如今 DGL 1.0 正式发布!DGL 1.0 总结了过去三年学术界或工业界对图深度学习和图神经网络(GNN)技术的各类需求。从最先进模型的学术研究到将 GNN 扩展到工业级应用,DGL 1.0 为所有用户提供全面且易用的解决方案,以更好的利用图机器学习的优势。

图片

DGL 1.0 为不同场景提供的解决方案。

DGL 1.0 采用分层和模块化的设计,以满足各种用户需求。本次发布的关键特性包括:

  • 100 多个开箱即用的 GNN 模型示例,15 多个在 Open Graph Benchmark(OGB)上排名靠前的基准模型;
  • 150 多个 GNN 常用模块,包括 GNN 层、数据集、图数据转换模块、图采样器等,可用于构建新的模型架构或基于 GNN 的解决方案;
  • 灵活高效的消息传递和稀疏矩阵抽象,用于开发新的 GNN 模块;
  • GPU 和分布式训练能力,支持在百亿规模的图上进行训练。

图片

DGL 1.0 技术栈图

图片

地址:https://github.com/dmlc/dgl

此版本的亮点之一是引入了 DGL-Sparse,这是一个全新的编程接口,使用了稀疏矩阵作为核心的编程抽象。DGL-Sparse 不仅可以简化现有的 GNN 模型(例如图卷积网络)的开发,而且还适用于最新的模型,包括基于扩散的 GNN,超图神经网络和图 Transformer。

DGL 1.0 版本的发布在外网引起了热烈反响,深度学习三巨头之一 Yann Lecun、新加坡国立大学副教授 Xavier Bresson 等学者都点赞并转发。

图片

图片

在接下来的文章中,作者概述了两种主流的 GNN 范式,即消息传递视图和矩阵视图。这些范式可以帮助研究人员更好地理解 GNN 的内部工作机制,而矩阵视角也是 DGL Sparse 开发的动机之一。

消息传递视图和矩阵视图

电影《降临》中有这么一句话:「你所使用的语言决定了你的思维方式,并影响了你对事物的看法。」这句话也适合 GNN。

表示图神经网络有两种不同的范式。第一种称为消息传递视图,从细粒度、局部的角度表达 GNN 模型,详细描述如何沿边交换消息以及节点状态如何进行相应的更新。第二种是矩阵视角,由于图与稀疏邻接矩阵具有代数等价性,许多研究人员选择从粗粒度、全局的角度来表达 GNN 模型,强调涉及稀疏邻接矩阵和特征向量的操作。

图片

消息传递视角揭示了 GNN 与 Weisfeiler Lehman (WL)图同构测试之间的联系,后者也依赖于从邻居聚合信息。而矩阵视角则从代数角度来理解 GNN,引发了一些有趣的发现,比如过度平滑问题。

总之,这两种视角都是研究 GNN 不可或缺的工具,它们互相补充,帮助研究人员更好地理解和描述 GNN 模型的本质和特性。正是基于这个原因,DGL 1.0 发布的主要动机之一就是在已有的消息传递接口基础之上,增加对于矩阵视角的支持。

DGL Sparse:为图机器学习设计的稀疏矩阵库

DGL 1.0 版本中新增了一个名为 DGL Sparse 的库(dgl.sparse),它和 DGL 中的消息传递接口一起,完善了对于全类型的图神经网络模型的支持。DGL Sparse 提供专门用于 图机器学习的稀疏矩阵类和操作,使得在矩阵视角下编写 GNN 变得更加容易。在下一节中,作者演示多个 GNN 示例,展示它们在 DGL Sparse 中的数学公式和相应的代码实现。

图卷积网络(Graph Convolutional Network)

GCN 是 GNN 建模的先驱之一。GCN 可以同时用消息传递视图和矩阵视图来表示。下面的代码比较了 DGL 中用这两种方法实现的区别。

图片

图片

使用消息传递 API 实现 GCN

图片

使用 DGL Sparse 实现 GCN

基于图扩散的 GNN

图扩散是沿边传播或平滑节点特征或信号的过程。PageRank 等许多经典图算法都属于这一类。一系列研究表明,将图扩散与神经网络相结合是增强模型预测有效且高效的方法。下面的等式描述了其中比较有代表性的模型 APPNP 的核心计算。它可以直接在 DGL Sparse 中实现。

图片

图片

超图神经网络

超图是图的推广,其中边可以连接任意数量的节点(称为超边)。超图在需要捕获高阶关系的场景中特别有用,例如电子商务平台中的共同购买行为,或引文网络中的共同作者等。超图的典型特征是其稀疏的关联矩阵,因此超图神经网络 (HGNN) 通常使用稀疏矩阵定义。以下是超图卷积网络(Feng et al., 2018)和其代码实现。

图片

图片

图 Transformer

Transformer 模型已经成为自然语言处理中最成功的模型架构。研究人员也开始将 Transformer 扩展到图机器学习。Dwivedi 等人开创性地提出将所有多头注意力限制为图中连接的节点对。通过 DGL Sparse 工具,只需 10 行代码即可轻松实现该模型。

图片

图片

DGL Sparse 的关键特性

相比 scipy.sparse 或 torch.sparse 等稀疏矩阵库,DGL Sparse 的整体设计是为图机器学习服务,其中包括了以下关键特性:

  • 自动稀疏格式选择:DGL Sparse 的设计让用户不必为了选择正确的数据结构存储稀疏矩阵(也称为稀疏格式)而烦恼。用户只需要记住 dgl.sparse.spmatrix 创建稀疏矩阵,而 DGL 在内部则会根据调用的算子来自动选择最优格式;
  • 标量或矢量非零元素:很多 GNN 模型会在边上学习多个权重(如 Graph Transformer 示例中演示的多头注意力向量)。为了适应这种情况,DGL Sparse 允许非零元素具有向量形状,并扩展了常见的稀疏操作,例如稀疏 - 稠密 - 矩阵乘法(SpMM)等。可以参考 Graph Transformer 示例中的 bspmm 操作。

通过利用这些设计特性,与之前使用消息传递接口的矩阵视图模型的实现相比,DGL Sparse 将代码长度平均降低了 2.7 倍。简化的代码还使框架的开销减少 43%。此外DGL Sparse 与 PyTorch 兼容,可以轻松与 PyTorch 生态系统中的各种工具和包集成。

开始使用 DGL 1.0

DGL 1.0 已经在全平台发布,并可以使用 pip 或 conda 轻松安装。除了前面介绍的示例之外,DGL Sparse 的第一个版本还包括 5 个教程和 11 个端到端示例,所有教程都可以在 Google Colab 中直接体验,无需本地安装。

想了解更多关于 DGL 1.0 的新功能,请参阅作者的发布日志。如果您在使用 DGL 的过程中遇到任何问题或者有任何建议和反馈,也可以通过 Discuss 论坛或者 Slack 联系到 DGL 团队。

原文链接:https://www.dgl.ai/release/2023/02/20/release.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4700

    浏览量

    128686
  • 数据集
    +关注

    关注

    4

    文章

    1205

    浏览量

    24640
  • GNN
    GNN
    +关注

    关注

    1

    文章

    31

    浏览量

    6328
收藏 人收藏

    评论

    相关推荐

    何用10代码轻松在ZYNQ MP上实现图像识别

    Vitis-AI工具,如何仅仅使用10代码,就能在ZYNQ MP器件上部署深度学习模型实现图像分类。 简介 Xilinx Vitis-AI 是用于 Xilinx 硬件平台上的 AI 推理的开发堆栈。它由优化的 IP、工具、库
    的头像 发表于 10-09 10:47 4625次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>10</b><b class='flag-5'>行</b><b class='flag-5'>代码</b>轻松在ZYNQ MP上实现图像识别

    【DFRobot Beetle ESP32-C3开发板试用体验】6代码搞定OLED显示

         作为 单片机 的输出方式,最常用的是串口,显示屏等,OLED(ssd1306)相比串口会直观一些,下面介绍如何用python搞定OLED显示。 【步聚】 1、工具uPyCraft。 2、接线原理
    的头像 发表于 11-28 14:17 1837次阅读
    【DFRobot Beetle ESP32-C3开发板试用体验】6<b class='flag-5'>行</b><b class='flag-5'>代码</b><b class='flag-5'>搞定</b>OLED显示

    10分钟搞定pld

    10f分钟你绝对能搞定
    发表于 08-30 15:33

    请教大神如何用AD10画MAX1678/1811的封装

    求助大神如何用AD10软件画max1678和max1811的pcb封装。或者谁有这些封装,求分享...
    发表于 09-06 17:21

    搞定独立按键

    最近自己在做单片机的东西,准备参加比赛,偶然发现了独立按键的神助攻——三搞定独立按键,看到网上很多描述的不清晰,自己又花时间整理了一下,话不多说先上代码:void Key_Read(void
    发表于 12-07 11:05

    【DFRobot Beetle ESP32-C3开发板试用体验】6代码搞定OLED显示

    【目的】学习使用OLED显示作为单片机的输出方式,最常用的是串口,显示屏等,OLED(ssd1306)相比串口会直观一些,下面介绍如何用python搞定OLED显示。【步聚】1、工具uPyCraft
    发表于 05-31 16:36

    【鸿蒙IPC开发板开发板体验】+ 10代码 搞定HiSpark IPC DIY Camera

    上电脑,自动识别:5、打pycharm,敲上10代码:import cv2cap = cv2.VideoCapture(0)while True: ret, frame = cap.read
    发表于 08-21 15:43

    第一代码——Android

    android开发。第一代码开发入门 。
    发表于 03-21 11:40 0次下载

    第一代码——Android

    第一代码——Android
    发表于 03-19 11:24 0次下载

    如何实现计算机视觉的目标检测10Python代码帮你实现

    只需10Python代码,我们就能实现计算机视觉中目标检测。 没错,用这寥寥10代码,就能
    的头像 发表于 02-03 11:35 3038次阅读

    涛思数据开源TDengine,10多万C代码,登顶GitHub!

    7月12日,涛思数据宣布将TDengine开源,10多万C代码,包括最核心的存储引擎和计算引擎都上传到了GitHub上。
    的头像 发表于 07-31 16:07 1.3w次阅读

    Transformer模型结构,训练过程

    所以我们为此文章写了篇注解文档,并给出了一行行实现的Transformer代码。本文档删除了原文的一些章节并进行了重新排序,并在整个文章中加入了相应的注解。此外,本文档以Jupyter
    的头像 发表于 06-20 14:26 3803次阅读

    【C语言应用】如何用C代码生成一维码?

    【C语言应用】如何用C代码生成一维码?
    的头像 发表于 08-25 12:42 2395次阅读
    【C语言应用】如<b class='flag-5'>何用</b>C<b class='flag-5'>代码</b>生成一维码?

    教你如何用代码搞定YOLOv8各种模型推理

    大家好,YOLOv8 框架本身提供的API函数是可以两代码实现 YOLOv8 模型推理,这次我把这段代码封装成了一个类,只有40代码左右
    的头像 发表于 06-18 11:50 2971次阅读
    教你如<b class='flag-5'>何用</b>两<b class='flag-5'>行</b><b class='flag-5'>代码</b><b class='flag-5'>搞定</b>YOLOv8各种模型推理

    Transformer能代替神经网络吗

    Transformer作为一种在处理序列数据方面表现出色的深度学习模型,自其提出以来,已经在自然语言处理(NLP)、时间序列分析等领域取得了显著的成果。然而,关于Transformer是否能完全代替神经网络(GNN)的问题,需
    的头像 发表于 07-12 14:07 374次阅读