0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用10行代碼搞定圖Transformer

jf_78858299 ? 來源:機器之心 ? 作者:機器之心 ? 2023-03-08 10:55 ? 次閱讀

讓所有人都能快速使用圖機器學(xué)習(xí)。

2019 年,紐約大學(xué)、亞馬遜科技聯(lián)手推出圖神經(jīng)網(wǎng)絡(luò)框架 DGL (Deep Graph Library)。如今 DGL 1.0 正式發(fā)布!DGL 1.0 總結(jié)了過去三年學(xué)術(shù)界或工業(yè)界對圖深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(GNN)技術(shù)的各類需求。從最先進模型的學(xué)術(shù)研究到將 GNN 擴展到工業(yè)級應(yīng)用,DGL 1.0 為所有用戶提供全面且易用的解決方案,以更好的利用圖機器學(xué)習(xí)的優(yōu)勢。

圖片

DGL 1.0 為不同場景提供的解決方案。

DGL 1.0 采用分層和模塊化的設(shè)計,以滿足各種用戶需求。本次發(fā)布的關(guān)鍵特性包括:

  • 100 多個開箱即用的 GNN 模型示例,15 多個在 Open Graph Benchmark(OGB)上排名靠前的基準模型;
  • 150 多個 GNN 常用模塊,包括 GNN 層、數(shù)據(jù)集、圖數(shù)據(jù)轉(zhuǎn)換模塊、圖采樣器等,可用于構(gòu)建新的模型架構(gòu)或基于 GNN 的解決方案;
  • 靈活高效的消息傳遞和稀疏矩陣抽象,用于開發(fā)新的 GNN 模塊;
  • GPU 和分布式訓(xùn)練能力,支持在百億規(guī)模的圖上進行訓(xùn)練。

圖片

DGL 1.0 技術(shù)棧圖

圖片

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

此版本的亮點之一是引入了 DGL-Sparse,這是一個全新的編程接口,使用了稀疏矩陣作為核心的編程抽象。DGL-Sparse 不僅可以簡化現(xiàn)有的 GNN 模型(例如圖卷積網(wǎng)絡(luò))的開發(fā),而且還適用于最新的模型,包括基于擴散的 GNN,超圖神經(jīng)網(wǎng)絡(luò)和圖 Transformer。

DGL 1.0 版本的發(fā)布在外網(wǎng)引起了熱烈反響,深度學(xué)習(xí)三巨頭之一 Yann Lecun、新加坡國立大學(xué)副教授 Xavier Bresson 等學(xué)者都點贊并轉(zhuǎn)發(fā)。

圖片

圖片

在接下來的文章中,作者概述了兩種主流的 GNN 范式,即消息傳遞視圖和矩陣視圖。這些范式可以幫助研究人員更好地理解 GNN 的內(nèi)部工作機制,而矩陣視角也是 DGL Sparse 開發(fā)的動機之一。

消息傳遞視圖和矩陣視圖

電影《降臨》中有這么一句話:「你所使用的語言決定了你的思維方式,并影響了你對事物的看法。」這句話也適合 GNN。

表示圖神經(jīng)網(wǎng)絡(luò)有兩種不同的范式。第一種稱為消息傳遞視圖,從細粒度、局部的角度表達 GNN 模型,詳細描述如何沿邊交換消息以及節(jié)點狀態(tài)如何進行相應(yīng)的更新。第二種是矩陣視角,由于圖與稀疏鄰接矩陣具有代數(shù)等價性,許多研究人員選擇從粗粒度、全局的角度來表達 GNN 模型,強調(diào)涉及稀疏鄰接矩陣和特征向量的操作。

圖片

消息傳遞視角揭示了 GNN 與 Weisfeiler Lehman (WL)圖同構(gòu)測試之間的聯(lián)系,后者也依賴于從鄰居聚合信息。而矩陣視角則從代數(shù)角度來理解 GNN,引發(fā)了一些有趣的發(fā)現(xiàn),比如過度平滑問題。

總之,這兩種視角都是研究 GNN 不可或缺的工具,它們互相補充,幫助研究人員更好地理解和描述 GNN 模型的本質(zhì)和特性。正是基于這個原因,DGL 1.0 發(fā)布的主要動機之一就是在已有的消息傳遞接口基礎(chǔ)之上,增加對于矩陣視角的支持。

DGL Sparse:為圖機器學(xué)習(xí)設(shè)計的稀疏矩陣庫

DGL 1.0 版本中新增了一個名為 DGL Sparse 的庫(dgl.sparse),它和 DGL 中的消息傳遞接口一起,完善了對于全類型的圖神經(jīng)網(wǎng)絡(luò)模型的支持。DGL Sparse 提供專門用于 圖機器學(xué)習(xí)的稀疏矩陣類和操作,使得在矩陣視角下編寫 GNN 變得更加容易。在下一節(jié)中,作者演示多個 GNN 示例,展示它們在 DGL Sparse 中的數(shù)學(xué)公式和相應(yīng)的代碼實現(xiàn)。

圖卷積網(wǎng)絡(luò)(Graph Convolutional Network)

GCN 是 GNN 建模的先驅(qū)之一。GCN 可以同時用消息傳遞視圖和矩陣視圖來表示。下面的代碼比較了 DGL 中用這兩種方法實現(xiàn)的區(qū)別。

圖片

圖片

使用消息傳遞 API 實現(xiàn) GCN

圖片

使用 DGL Sparse 實現(xiàn) GCN

基于圖擴散的 GNN

圖擴散是沿邊傳播或平滑節(jié)點特征或信號的過程。PageRank 等許多經(jīng)典圖算法都屬于這一類。一系列研究表明,將圖擴散與神經(jīng)網(wǎng)絡(luò)相結(jié)合是增強模型預(yù)測有效且高效的方法。下面的等式描述了其中比較有代表性的模型 APPNP 的核心計算。它可以直接在 DGL Sparse 中實現(xiàn)。

圖片

圖片

超圖神經(jīng)網(wǎng)絡(luò)

超圖是圖的推廣,其中邊可以連接任意數(shù)量的節(jié)點(稱為超邊)。超圖在需要捕獲高階關(guān)系的場景中特別有用,例如電子商務(wù)平臺中的共同購買行為,或引文網(wǎng)絡(luò)中的共同作者等。超圖的典型特征是其稀疏的關(guān)聯(lián)矩陣,因此超圖神經(jīng)網(wǎng)絡(luò) (HGNN) 通常使用稀疏矩陣定義。以下是超圖卷積網(wǎng)絡(luò)(Feng et al., 2018)和其代碼實現(xiàn)。

圖片

圖片

圖 Transformer

Transformer 模型已經(jīng)成為自然語言處理中最成功的模型架構(gòu)。研究人員也開始將 Transformer 擴展到圖機器學(xué)習(xí)。Dwivedi 等人開創(chuàng)性地提出將所有多頭注意力限制為圖中連接的節(jié)點對。通過 DGL Sparse 工具,只需 10 行代碼即可輕松實現(xiàn)該模型。

圖片

圖片

DGL Sparse 的關(guān)鍵特性

相比 scipy.sparse 或 torch.sparse 等稀疏矩陣庫,DGL Sparse 的整體設(shè)計是為圖機器學(xué)習(xí)服務(wù),其中包括了以下關(guān)鍵特性:

  • 自動稀疏格式選擇:DGL Sparse 的設(shè)計讓用戶不必為了選擇正確的數(shù)據(jù)結(jié)構(gòu)存儲稀疏矩陣(也稱為稀疏格式)而煩惱。用戶只需要記住 dgl.sparse.spmatrix 創(chuàng)建稀疏矩陣,而 DGL 在內(nèi)部則會根據(jù)調(diào)用的算子來自動選擇最優(yōu)格式;
  • 標量或矢量非零元素:很多 GNN 模型會在邊上學(xué)習(xí)多個權(quán)重(如 Graph Transformer 示例中演示的多頭注意力向量)。為了適應(yīng)這種情況,DGL Sparse 允許非零元素具有向量形狀,并擴展了常見的稀疏操作,例如稀疏 - 稠密 - 矩陣乘法(SpMM)等??梢詤⒖?Graph Transformer 示例中的 bspmm 操作。

通過利用這些設(shè)計特性,與之前使用消息傳遞接口的矩陣視圖模型的實現(xiàn)相比,DGL Sparse 將代碼長度平均降低了 2.7 倍。簡化的代碼還使框架的開銷減少 43%。此外DGL Sparse 與 PyTorch 兼容,可以輕松與 PyTorch 生態(tài)系統(tǒng)中的各種工具和包集成。

開始使用 DGL 1.0

DGL 1.0 已經(jīng)在全平臺發(fā)布,并可以使用 pip 或 conda 輕松安裝。除了前面介紹的示例之外,DGL Sparse 的第一個版本還包括 5 個教程和 11 個端到端示例,所有教程都可以在 Google Colab 中直接體驗,無需本地安裝。

想了解更多關(guān)于 DGL 1.0 的新功能,請參閱作者的發(fā)布日志。如果您在使用 DGL 的過程中遇到任何問題或者有任何建議和反饋,也可以通過 Discuss 論壇或者 Slack 聯(lián)系到 DGL 團隊。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4678

    瀏覽量

    128616
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1201

    瀏覽量

    24622
  • GNN
    GNN
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    6325
收藏 人收藏

    評論

    相關(guān)推薦

    何用10代碼輕松在ZYNQ MP上實現(xiàn)圖像識別

    Vitis-AI工具,如何僅僅使用10代碼,就能在ZYNQ MP器件上部署深度學(xué)習(xí)模型實現(xiàn)圖像分類。 簡介 Xilinx Vitis-AI 是用于 Xilinx 硬件平臺上的 AI 推理的開發(fā)堆棧。它由優(yōu)化的 IP、工具、庫
    的頭像 發(fā)表于 10-09 10:47 ?4617次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>10</b><b class='flag-5'>行</b><b class='flag-5'>代碼</b>輕松在ZYNQ MP上實現(xiàn)圖像識別

    【DFRobot Beetle ESP32-C3開發(fā)板試用體驗】6代碼搞定OLED顯示

    ? ???作為 單片機 的輸出方式,最常用的是串口,顯示屏等,OLED(ssd1306)相比串口會直觀一些,下面介紹如何用python搞定OLED顯示。 【步聚】 1、工具uPyCraft。 2、接線原理
    的頭像 發(fā)表于 11-28 14:17 ?1820次閱讀
    【DFRobot Beetle ESP32-C3開發(fā)板試用體驗】6<b class='flag-5'>行</b><b class='flag-5'>代碼</b><b class='flag-5'>搞定</b>OLED顯示

    10分鐘搞定pld

    10f分鐘你絕對能搞定
    發(fā)表于 08-30 15:33

    請教大神如何用AD10畫MAX1678/1811的封裝?

    求助大神如何用AD10軟件畫max1678和max1811的pcb封裝?;蛘哒l有這些封裝,求分享...
    發(fā)表于 09-06 17:21

    搞定獨立按鍵

    最近自己在做單片機的東西,準備參加比賽,偶然發(fā)現(xiàn)了獨立按鍵的神助攻——三搞定獨立按鍵,看到網(wǎng)上很多描述的不清晰,自己又花時間整理了一下,話不多說先上代碼:void Key_Read(void
    發(fā)表于 12-07 11:05

    【DFRobot Beetle ESP32-C3開發(fā)板試用體驗】6代碼搞定OLED顯示

    【目的】學(xué)習(xí)使用OLED顯示作為單片機的輸出方式,最常用的是串口,顯示屏等,OLED(ssd1306)相比串口會直觀一些,下面介紹如何用python搞定OLED顯示。【步聚】1、工具uPyCraft
    發(fā)表于 05-31 16:36

    【鴻蒙IPC開發(fā)板開發(fā)板體驗】+ 10代碼 搞定HiSpark IPC DIY Camera

    上電腦,自動識別:5、打pycharm,敲上10代碼:import cv2cap = cv2.VideoCapture(0)while True: ret, frame = cap.read
    發(fā)表于 08-21 15:43

    第一代碼——Android

    android開發(fā)。第一代碼開發(fā)入門 。
    發(fā)表于 03-21 11:40 ?0次下載

    第一代碼——Android

    第一代碼——Android
    發(fā)表于 03-19 11:24 ?0次下載

    如何實現(xiàn)計算機視覺的目標檢測10Python代碼幫你實現(xiàn)

    只需10Python代碼,我們就能實現(xiàn)計算機視覺中目標檢測。 沒錯,用這寥寥10代碼,就能
    的頭像 發(fā)表于 02-03 11:35 ?3032次閱讀

    濤思數(shù)據(jù)開源TDengine,10多萬C代碼,登頂GitHub!

    7月12日,濤思數(shù)據(jù)宣布將TDengine開源,10多萬C代碼,包括最核心的存儲引擎和計算引擎都上傳到了GitHub上。
    的頭像 發(fā)表于 07-31 16:07 ?1.3w次閱讀

    Transformer模型結(jié)構(gòu),訓(xùn)練過程

    所以我們?yōu)榇宋恼聦懥似⒔馕臋n,并給出了一行行實現(xiàn)的Transformer代碼。本文檔刪除了原文的一些章節(jié)并進行了重新排序,并在整個文章中加入了相應(yīng)的注解。此外,本文檔以Jupyter
    的頭像 發(fā)表于 06-20 14:26 ?3788次閱讀

    【C語言應(yīng)用】如何用C代碼生成一維碼?

    【C語言應(yīng)用】如何用C代碼生成一維碼?
    的頭像 發(fā)表于 08-25 12:42 ?2381次閱讀
    【C語言應(yīng)用】如<b class='flag-5'>何用</b>C<b class='flag-5'>代碼</b>生成一維碼?

    教你如何用代碼搞定YOLOv8各種模型推理

    大家好,YOLOv8 框架本身提供的API函數(shù)是可以兩代碼實現(xiàn) YOLOv8 模型推理,這次我把這段代碼封裝成了一個類,只有40代碼左右
    的頭像 發(fā)表于 06-18 11:50 ?2945次閱讀
    教你如<b class='flag-5'>何用</b>兩<b class='flag-5'>行</b><b class='flag-5'>代碼</b><b class='flag-5'>搞定</b>YOLOv8各種模型推理

    Transformer能代替神經(jīng)網(wǎng)絡(luò)嗎

    Transformer作為一種在處理序列數(shù)據(jù)方面表現(xiàn)出色的深度學(xué)習(xí)模型,自其提出以來,已經(jīng)在自然語言處理(NLP)、時間序列分析等領(lǐng)域取得了顯著的成果。然而,關(guān)于Transformer是否能完全代替神經(jīng)網(wǎng)絡(luò)(GNN)的問題,需
    的頭像 發(fā)表于 07-12 14:07 ?359次閱讀