詳解深度學習中的圖神經網絡GNN

引言?

圖片

圖神經網絡GNN是深度學習的一個分支。

深度學習的四個分支對應了四種常見的數據格式,前饋神經網絡FNN處理表格數據,表格數據可以是特征向量,卷積神經網絡CNN處理圖像數據,循環神經網絡RNN處理時序數據,圖神經網絡GNN處理圖數據。

這里的FNN指的是如下圖所示的帶有輸入層,隱藏層,輸出層的網絡。

圖片

但這四種對應關系并不是一成不變。

如果將圖像拉直成向量,同樣可以用FNN來處理。

聲音文本這類時序數據,用RNN類型的網絡最適合,但如果你把一個句子當作一個1*N的矩陣,那就可以用CNN處理了,只不過,CNN需要堆疊多個層來抓取時序數據中的上下文信息,這在圖像領域被稱為感受野。

注意:雖然可以通過一定的技巧把句子表示成矩陣然后用CNN處理,但從本質上來說,CNN還是不如RNN更適合處理時序數據。

如果將圖像劃分成patch,這些pathces組成序列,同樣也可以用Transformer處理,這就是Vision Transformer:ViT。

而今天要講的GNN,既能處理表格數據,又能處理圖像,文本。

更準確地說,只要能表示成GNN兼容的圖數據結構就能用GNN處理。

今天的文章來自distill發布的一篇博文:A Gentle Introduction to Graph Neural Networks。

網址:https://distill.pub/2021/gnn-intro/B站沐神視頻講解:https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.999.0.0

這篇文章寫的非常好,亮點是不光有交互式圖表,還有PlayGround,可見作者是下了一番功夫的。

先科普一下什么是Playground?

Playground通常指在機器學習和人工智能領域用來交互式體驗和可視化AI模型的一種系統或平臺。

下面展示兩個AI?Playground。

圖片

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/playground/models/clip

圖片

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/playground/models/codellama

NVIDIA NGC或者Hugging face上有更多好玩的AI Playground,大家可以親自去體驗一下。https://huggingface.co/

https://catalog.ngc.nvidia.com/

A Gentle Introduction to Graph Neural Networks

https://distill.pub/2021/gnn-intro/

但我不會將上面的文章原樣照搬過來,而是進行概括性的總結,大家一定一定去閱讀原文,因為原文里有大量的交互式圖表和Playground,能加速對GNN的理解。

今天的主角是GNN,而GNN處理的對象是圖Graph。跟其它神經網絡一樣,在其出現之前,都有傳統的方法來處理對應的數據結構。

但是在數據量和算力的加持下,為了完成更復雜的任務,對應的神經網絡應運而生,GNN也是如此。

后續內容主要分為四部分

1.什么樣的數據可以很自然的表示成圖

2.圖與其它類型數據的不同之處以及如何應對這種不同

3.構建一個GNN

4.構建一個Playground在真實數據上進行訓練

什么是圖?

圖是由節點和邊組成的,用于表示對象之間關系的數據結構。

圖也分為有向圖無向圖,例如,社交媒體中,如果互相關注了則是無向圖,如果像B站這樣,我關注了你,但你并沒有關注我,則是有向圖。

圖片

圖片

節點有自己的屬性,邊有自己的屬性,整個圖也有自己的屬性,如上圖,屬性可以用標量或者向量表示。向量大小可以不一致。

前面已經透漏了GNN可以處理圖像和文本,那么圖像和文本就可以表示成圖。

先透露一下計算機如何存儲圖,一種是鄰接矩陣,一種是鄰接表

圖像的每個像素即是一個節點,節點的屬性自然就是RGB值,相鄰像素之間用一條邊來表示相鄰關系,這里用鄰接矩陣來表示連接性。

圖片

同理,一個句子中每個字符,每個單詞,每個Token都可以看作是一個節點,相鄰節點之間可以用一條有向邊相連,這就構成了一個有向圖。

圖片

除此之外,還有很多其它數據可以表示成圖。

分子由兩個或多個原子通過共用電子對構成化學鍵而連接成一個整體,分子之間不同的連接方式構成了不同的物質。

圖片

社會是一個大家庭,所有成員和之間的關系構成了一個復雜的社交網絡。

圖片

如果能夠充分利用這個網絡,就能發揮巨大價值,例如,知識圖譜,推薦系統。

引用關系也可以組織成圖,例如,維基百科中每個網頁都會列出引用資料。

好了,到此我們已經能夠把很多事物表示成圖的形式,這樣就夠用GNN來處理了,那到底能干什么呢?

GNN主要能處理三種類型的任務。

圖層面任務

對圖的整體進行預測,GNN輸出對整個圖的預測屬性,例如,下圖中分辨出具有兩個環的圖,這就是一個針對整個圖的分類任務。

圖片

對于圖像和文本而言,圖層面的任務類似于MINIS數字分類,或者句子情感分析,例如。判斷一個句子表達的是正向情緒還是負面情緒。

頂點層面任務

GNN預測圖中每一個節點的屬性,例如,下圖,預測社交網絡中的成員是否是詐騙分子。這就是一個節點分類任務。

圖片

對于圖像和文本而言,頂點層面的任務類似于圖像分割,圖像分割不就是對每個像素分類嘛,對于文本,就是預測句子中每個單詞的詞性(例如名詞、動詞、副詞等)。

邊層面任務

邊的存在與否是一種結構屬性,也就是連接性,GNN也可以預測圖中邊的非結構屬性,什么是非結構屬性?對于一個社交網絡而言,邊代表節點之間有關系,但如何度量親疏程度呢?這就涉及邊的非結構屬性了。

預測親疏程度是一個回歸任務,下圖則是一個分類任務,每一條邊只能是watching,fighting,standing on中的一種。

圖片

圖片

后面我們會看到,這三類任務可以用一個統一的GNN網絡解決。

???????

GNN所面對的挑戰

前面對于節點,邊,圖的屬性預測GNN都能處理,但對于節點之間的連接性預測卻是一種挑戰,前面說過用鄰接矩陣來表示連接性,當節點數增加,矩陣會變得非常稀疏,內存利用率很低,

例如,下圖,僅有四個節點的隨機組合對應的鄰接矩陣就非常龐大了。

何況更多節點呢?

圖片

另外,當你將矩陣轉置后,GNN輸出結果不應該改變,因為轉置沒有改變節點之間的關系。

圖片

圖片

為了解決鄰接矩陣帶來的挑戰,鄰接列表應運而生。

圖片

到此我們已經掃清了所有障礙,接下來我們就構建一個簡單的分類網絡,來看看GNN是如何做預測的?

圖片

前面我們說過節點,邊,圖的屬性就是一堆向量,也就是前面說的表格數據,處理向量用MLP就可以了,當然你也可以用其他網絡,如上圖,節點,邊,圖各有一個MLP,所有點參數共享,也就是所有點共用一個MLP,所有邊共用一個MLP。

另外,Layner n+1與上一層相比,圖的連接性沒變,只改變了屬性。也就是可以繼續使用初始的鄰接鏈表。

上圖構成了一個GNN block,也叫做GNN層,類似CNN中的卷積層,多個GNN 層可以進行累加形成更復雜的網絡。

有了GNN block,如果要構建一個節點二分類任務,那么用下面這個網絡就夠了。

圖片

但是,如果一個圖只有邊有信息,而節點沒有存儲信息,又要對節點進行分類,該怎么辦?

此時就需要把邊的信息利用起來了,這被稱為信息聚合

圖片

如上圖,當對一個節點進行預測時,將所有與其相連的邊的信息聚合起來作為節點的屬性。

聚合操作可以時平均值,最大值,總和

所以,有了信息聚合后,如果只有邊的屬性,要對節點分類,網絡結構如下:

圖片

同理,有了信息聚合后,如果只有節點信息,要對邊分類,網絡結構如下:

圖片

有了信息聚合后,只有節點信息,對圖分類:

圖片

最終的GNN結構如下:

圖片

有了信息聚合,就能構建更復雜的GNN網絡,這個網絡不僅能二分類同樣適用于多分類問題。

但是你發現沒,上面這個簡單的GNN網絡并沒有利用連接性信息,每個節點以及每條邊和全局上下文都是獨立處理的。只有在聚合信息進行預測時才使用連接性。

所以,我們可以更進一步的利用聚合信息操作,這樣就能進行更復雜的預測。

那么該怎么做呢?

我們可以使用消息傳遞的方法來實現這一點,即相鄰節點或邊之間交換信息并影響彼此更新的嵌入。

圖片

如上圖,也就是在處理當前節點時,把相鄰節點的信息聚合過來。

這跟卷積操作有點像,一個特征圖的像素對應上一層的一個相鄰區域。

圖片

有了信息傳播操作后,我們的GNN網絡更新如下:

節點層面任務:

圖片

邊層面任務:

圖片

圖層面任務:

圖片

最后,展示了一個Playground,可以改變網絡的層數,聚合操作類型,以及各個屬性向量的長度,可以通過最終的模型性能來展示各個參數的影響。

圖片

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166521.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android的canvas的clipRegion廢棄替代代碼

由于clipRegion的一些問題,導致他被廢棄了,但又有時候會用到,所以寫了一個工具類來替代它 代碼如下 package com.example;import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.g…

c++|類和對象(上)

目錄 一、面向過程和面向對象初步認識 二、類的引入和定義 2.1類的引入 2.2類的定義 三、類的訪問限定符及封裝 3.1訪問限定符 3.2封裝 四、類的作用域 五、類的實例化 六、類的對象大小的計算 6.1如何計算對象的大小 6.2類對象的存儲方式 七、類成員函數的thi…

【Docker】從零開始:7.Docker命令:容器命令及參數詳解

【Docker】從零開始:7.幫助啟動類命令 一、幫助啟動類命令啟動Docker停止Docker重啟Docker查看Docker狀態開機啟動查看docker概要信息查看docker總體幫助文檔查看docker命令幫助文檔 二、鏡像命令列出本地主機上的鏡像運行示例返回說明操作參數 搜索倉庫里的某個鏡像…

Python-Django的“日志功能-日志模塊(logging模塊)-日志輸出”的功能詳解

01-綜述 可以使用Python內置的logging模塊來實現Django項目的日志記錄。 所以與其說這篇文章在講Django的“日志功能-日志模塊-日志輸出”,不如說是在講Pthon的“日志功能-日志模塊-日志輸出”,即Python的logging模塊。 下面用一個實例來進行講解。 …

2023年亞太杯數學建模A題水果采摘機器人的圖像識別功能(免費思路)

中國是世界上最大的蘋果生產國,年產量約為 3500 萬噸。同時,中國也是世界上最大的蘋果出口國,世界上每兩個蘋果中就有一個出口到國。世界上每兩個蘋果中就有一個來自中國,中國出口的蘋果占全球出口量的六分之一以上。來自中國。中…

保護服務器免受攻擊:解析攻擊情境與解決之道

在數字化時代,服務器安全問題日益突出,因為它們是企業和個人網絡活動的核心。服務器被攻擊可能引發一系列問題,理解攻擊的不同情境以及采取相應的解決方法變得至關重要。 DDoS 攻擊(分布式拒絕服務攻擊) 情境&#xff…

基于51單片機超聲波測距汽車避障系統

**單片機設計介紹, 基于51單片機超聲波測距汽車避障系統 文章目錄 一 概要二、功能設計設計思路 三、 軟件設計原理圖 五、 程序六、 文章目錄 一 概要 基于51單片機的超聲波測距汽車避障系統是一種用于幫助汽車避免碰撞和發生事故的設備,以下是一個基本…

Visual Studio 2022安裝教程(千字圖文詳解),手把手帶你安裝運行VS2022以及背景圖設置

VS2022最新最全安裝教程 很高興你打開了這篇博客,接下來我們一起安裝并且使用VS2022吧 文章目錄 VS2022最新最全安裝教程一.官網下載二.安裝啟動三.項目測試1.創建新項目2.選擇我們使用的模板(C空項目),繼續沖!3.進入…

docker的使用方法

文章目錄 為什么要用dockerdocker安裝docker工作原理docker命令docker搭建練習docker可視化docker鏡像docker容器數據卷DockerFiledocker全流程Docker網絡原理docker composedocker swarm 為什么要用docker 官網:https://www.docker.com文檔地址:https:…

Stream流開發常用場景

一、Stream流 1.將某個集合中的金額字段相加 Bigdecimal amount list.stream().map(TransInfoEntity::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); 2.將集合中某兩個字段組合成一個map Map<Long, String> map list.stream().collect(Collectors.t…

ImgUtil.scale會在某些圖片壓縮之后自動旋轉90度

需要的jar依賴&#xff1a; <dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.16.0</version> <!-- 請檢查最新版本 …

ceph編譯報錯解決

1.執行./install-deps.sh提示deb無法安裝 解決方案&#xff1a; 直接使用dpkg -i來安裝deb&#xff0c;會提示缺失3個庫&#xff0c;庫名如下&#xff1a; cython python dh-systemd 其中cython和python手動安裝好后&#xff0c;也會依舊報錯。此時修改debian/control文件&…

系列五、聲明式事務(xml方式)

一、概述 聲明式事務(declarative transaction management)是Spring提供的對程序事務管理的一種方式&#xff0c;Spring的聲明式事務顧名思義就是采用聲明的方式來處理事務。這里所說的聲明&#xff0c;是指在配置文件中聲明&#xff0c;用在Spring配置文件中聲明式的處理事務來…

搞笑的客服日常,今天遇到的曬白客服,你遇到過嗎?

大家看看這個 https://blog.csdn.net/a871923942/article/details/129778391?utm_mediumdistribute.pc_feed_404.none-task-blog-2 今天遇到傻逼審核 開頭第一句就使用快捷話術 客服感覺自己發錯了 然后就撤回消息 第二次繼續發話術&#xff0c;說違規&#xff0c;審核不通過…

案例015:Java+SSM+uniapp基于微信小程序的校園防疫系統

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

互聯網上門洗鞋店小程序

上門洗鞋店小程序門店版是基于原平臺版進行增強的&#xff0c;結合洗鞋行業的線下實際運營經驗和需求&#xff0c;專為洗鞋人和洗鞋店打造的高效、實用、有價值的管理軟件系統。 它能夠幫助洗鞋人建立自己的私域流量&#xff0c;實現會員用戶管理&#xff0c;實現用戶與商家的點…

【SpringCloud】微服務架構設計模式

一、聚合氣微服務設計模式 最常見、最簡單的設計模式&#xff0c;效果如圖所示&#xff1a; 聚合器調用多個服務實現應用程序所需的功能 它可以是一個簡單的 Web 頁面&#xff0c;將檢索到的數據進行處理并展示&#xff0c;也可以是一個更高層次的組合微服務&#xff0c;對…

記錄ruoyi-plus-vue部署的問題

ruoyi-vue-plus5.x 后端 ruoyi-vue-plus5.x 前端 前端本地啟動命令 # 克隆項目 git clone https://gitee.com/JavaLionLi/plus-ui.git# 安裝依賴 npm install --registryhttps://registry.npmmirror.com# 啟動服務 npm run dev# 構建生產環境 yarn build:prod # 前端訪問地址…

[C++歷練之路]vector的介紹以及底層模擬實現

W...Y的主頁 &#x1f60a; 代碼倉庫分享 &#x1f495; &#x1f354;前言&#xff1a; 我們學習了STL中的string以及其所有重要接口并進行了模擬實現&#xff0c;但是STL中包含的內容不止于此。學習了string之后繼續學習STL中的vector&#xff0c;學習成本會大大降低&#…