預訓練GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks

一.文章概述

本文提出了一種自監督屬性圖生成任務來預訓練GNN,使得其能捕圖的結構和語義屬性。作者將圖的生成分為兩個部分:屬性生成和邊生成,即給定觀測到的邊,生成節點屬性;給定觀測到的邊和生成的節點屬性,生成剩余的邊。通過這種方式使得模型能捕獲每個節點屬性和結構之間的依賴關系。對于每個節點,GPT-GNN可以同時計算其屬性生成和邊生成損失。另外,為了使得GPT-GNN可以處理大圖,作者采用了子圖采樣技術,并提出自適應嵌入隊列來緩解負采樣帶來的不準確損失。

二.預備知識

之前關于圖上預訓練的工作可以分為兩類:

  • network/graph embedding:直接參數化節點嵌入向量,并通過保留一些相似度量來參數化的優化節點嵌入。但該種方式學到的嵌入不能用于初始化其他模型,以便對其他任務進行微調。
  • transfer learning setting:預訓練一個可用于處理不同任務的通用GNN。

三.GNN的生成式預訓練

3.1 GNN預訓練問題

為什么需要預訓練?

獲取足夠的標注數據通常具有挑戰性,尤其是對于大圖,這阻礙了通用GNN的訓練。為此,有必要探索GNN的預訓練,它能用很少的標簽進行泛化。

GNN預訓練的正式定義:GNN預訓練的目標是完全基于單個(大規模)圖 G = ( V , E , X ) G=(\mathcal{V}, \mathcal{E}, \mathcal{X}) G=(V,E,X) 學習一個通用的GNN模型 f θ f_\theta fθ?,而不需要標注數據,這使得 f θ f_\theta fθ?對于同一個圖或同一領域的圖上的各種下游任務是一個良好的初始化。

3.2 生成式預訓練框架

作者提出GPT-GNN,它通過重建/生成輸入圖的結構或屬性來預訓練GNN。

給定輸入圖 G = ( V , E , X ) G=(\mathcal{V}, \mathcal{E}, \mathcal{X}) G=(V,E,X),GNN模型 f θ f_\theta fθ?,作者用GNN f θ f_\theta fθ?建模圖上的似然(likelihood)為 p ( G ; θ ) p(G;\theta) p(G;θ),其表示圖 G G G中的節點是如何歸屬(attributed)和連接(connected)的。GPT-GNN旨在預訓練GNN來最大化圖似然,即 θ ? = max θ p ( G ; θ ) \theta^{*} = \text{max}_{\theta}\ p(G;\theta) θ?=maxθ??p(G;θ)

3.2.1 如何建模 p ( G ; θ ) p(G;\theta) p(G;θ)

現有的大多數圖生成方式采用自回歸的方式對概率目標進行因式分解,即按圖中的節點順序來,通過將每個新到達的節點連接到現有節點來生成邊。類似地,作者用排列(permutation)向量 π \pi π來確定節點順序,其中 i π i^{\pi} iπ表示排列 π \pi π中第 i i i個位置的節點id。因此,圖分布 p ( G , θ ) p(G,\theta) p(G,θ)等價于所有可能排列的期望的可能性,即:
p ( G ; θ ) = E π [ p θ ( X π , E π ) ] , p(G ; \theta)=\mathbb{E}_\pi\left[p_\theta\left(X^\pi, E^\pi\right)\right], p(G;θ)=Eπ?[pθ?(Xπ,Eπ)],
其中 X π ∈ R ∣ V ∣ × d X^\pi \in \mathbb{R}|\mathcal{V}| \times d XπRV×d表示排列的節點屬性, E E E是邊集, E i π E_i^\pi Eiπ?表示與 i π i^{\pi} iπ相連的所有邊。為了簡化,作者假設觀察任何節點排列 π \pi π的概率相同。給定一個排列順序,可以自回歸分解log四讓,每次迭代生成一個節點:
log ? p θ ( X , E ) = ∑ i = 1 ∣ V ∣ log ? p θ ( X i , E i ∣ X < i , E < i ) \log p_\theta(X, E)=\sum_{i=1}^{|\mathcal{V}|} \log p_\theta\left(X_i, E_i \mid X_{<i}, E_{<i}\right) logpθ?(X,E)=i=1V?logpθ?(Xi?,Ei?X<i?,E<i?)
在每一步 i i i,作者使用 i i i之前的所有生成的節點,以及其對應的屬性 X < i X_{<i} X<i?、節點間的結構 E < i E_{<i} E<i?來生成新的節點 i i i,包括 i i i的屬性 X i X_i Xi?和與已有節點的連接 E i E_i Ei?

3.3 分解屬性圖生成

對于條件概率 p θ ( X i , E i ∣ X < i , E < i ) p_\theta\left(X_i, E_i \mid X_{<i}, E_{<i}\right) pθ?(Xi?,Ei?X<i?,E<i?) 的建模,一個簡單的解決方案是假設 X i X_i Xi? E i E_i Ei?是獨立的,即:
p θ ( X i , E i ∣ X < i , E < i ) = p θ ( X i ∣ X < i , E < i ) ? p θ ( E i ∣ X < i , E < i ) p_\theta\left(X_i, E_i \mid X_{<i}, E_{<i}\right)=p_\theta\left(X_i \mid X_{<i}, E_{<i}\right) \cdot p_\theta\left(E_i \mid X_{<i}, E_{<i}\right) pθ?(Xi?,Ei?X<i?,E<i?)=pθ?(Xi?X<i?,E<i?)?pθ?(Ei?X<i?,E<i?)
采用該種方式時,對每個節點其屬性和連接之間的依賴關系被完全忽略了,但這種忽略的依賴性確是屬性圖的核心屬性,也是GNN中卷積聚合的基礎,因此,這種樸素的分解不能為預訓練GNN提供指導。

為了解決這一問題,作者提出了依賴感知(dependency-aware)分解機制來進行屬性圖的生成。具體來說,在估計一個新節點的屬性時,其結構信息會被給定,反之亦然,即屬性圖的生成可以分為兩步:

  • 給定觀測到的邊,生成節點屬性;
  • 給定觀察到的邊和生成的節點屬性,生成剩余的邊。

通過這種方式,模型可以捕獲每個節點的屬性和結構之間的依賴關系。

o o o表示 E i E_i Ei?中所有觀察到的邊的索引向量,則 E i , o E_{i,o} Ei,o?表示觀測到的邊。 ? o \neg o ?o表示所有掩去邊的索引,即待生成的邊。基于此,條件概率可以重寫為所有觀察到的邊的期望可能性:
p θ ( X i , E i ∣ X < i , E < i ) = ∑ o p θ ( X i , E i , ? o ∣ E i , o , X < i , E < i ) ? p θ ( E i , o ∣ X < i , E < i ) = E o [ p θ ( X i , E i , ? o ∣ E i , o , X < i , E < i ) ] = E o [ p θ ( X i ∣ E i , o , X < i , E < i ) ? 1)?generate?attributes? ? p θ ( E i , ? o ∣ E i , o , X ≤ i , E < i ) ? 2)?generate?edges? ] . \begin{aligned} & p_\theta\left(X_i, E_i \mid X_{<i}, E_{<i}\right) \\ = & \sum_o p_\theta\left(X_i, E_{i, \neg o} \mid E_{i, o}, X_{<i}, E_{<i}\right) \cdot p_\theta\left(E_{i, o} \mid X_{<i}, E_{<i}\right) \\ = & \mathbb{E}_o\left[p_\theta\left(X_i, E_{i, \neg o} \mid E_{i, o}, X_{<i}, E_{<i}\right)\right] \\ = & \mathbb{E}_o[\underbrace{p_\theta\left(X_i \mid E_{i, o}, X_{<i}, E_{<i}\right)}_{\text {1) generate attributes }} \cdot \underbrace{p_\theta\left(E_{i, \neg o} \mid E_{i, o}, X_{\leq i}, E_{<i}\right)}_{\text {2) generate edges }}] . \end{aligned} ===?pθ?(Xi?,Ei?X<i?,E<i?)o?pθ?(Xi?,Ei,?o?Ei,o?,X<i?,E<i?)?pθ?(Ei,o?X<i?,E<i?)Eo?[pθ?(Xi?,Ei,?o?Ei,o?,X<i?,E<i?)]Eo?[1)?generate?attributes? pθ?(Xi?Ei,o?,X<i?,E<i?)???2)?generate?edges? pθ?(Ei,?o?Ei,o?,Xi?,E<i?)??].?
其中 p θ ( X i ∣ E i , o , X < i , E < i ) p_\theta\left(X_i \mid E_{i, o}, X_{<i}, E_{<i}\right) pθ?(Xi?Ei,o?,X<i?,E<i?)表示節點 i i i的屬性生成,基于觀測到的邊 E i , o E_{i, o} Ei,o?,可以聚集目標節點 i i i的鄰域信息來生成屬性 X i X_i Xi? p θ ( E i , ? o ∣ E i , o , X ≤ i , E < i ) p_\theta\left(E_{i, \neg o} \mid E_{i, o}, X_{\leq i}, E_{<i}\right) pθ?(Ei,?o?Ei,o?,Xi?,E<i?)表示生成掩去的邊,基于觀測到的邊 E i , o E_{i, o} Ei,o?和生成的屬性 X i X_i Xi?,可以生成目標節點 i i i的表示,然后預測 E i , ? o E_{i, \neg o} Ei,?o?內的每條邊是否存在。

3.4 高效的屬性和邊生成

作者希望同時進行屬性生成和邊生成,但邊的生成需要節點屬性作為輸入,可以泄露給屬性生成。為了避免信息泄露,作者將每個節點設計為兩種類型:

  • Attribute Generation Nodes:作者將這些節點的屬性掩去,并使用dummy token代替它們的屬性,并學得一個共享的向量 X i n i t X^{init} Xinit來表示它。
  • Edge Generation Nodes:對這些節點保持其屬性,并將其作為GNN的輸入。

作者使用 h A t t r h^{A t t r} hAttr h E d g e h^{E d g e} hEdge來分別表示Attribute Generation和Edge Generation節點,由于Attribute Generation Nodes被掩去, h Attr? h^{\text {Attr }} hAttr? h E d g e h^{E d g e} hEdge包含更少的信息。因此,在進行GNN的消息傳遞的時候,僅使用Edge Generation Nodes的輸出 h E d g e h^{E d g e} hEdge作為對外信息。然后,使用這兩組節點的表示來生成具有不同解碼器的屬性和邊。

對于屬性生成,將其對應解碼器表示為 Dec A t t r ( ? ) \text{Dec}^{Attr}(\cdot) DecAttr(?),它以 h Attr? h^{\text {Attr }} hAttr?作為輸入,生成被掩去的屬性。建模的選擇取決于屬性的類型。例如如果一個節點的輸入屬性是文本,則使用文本生成器模型(例如,LSTM)來生成它。此外,作者定義距離函數來作為生成屬性和真實值間的度量,即屬性生成損失定義為:
L i Attr? = Distance? ( Dec? Attr? ( h i Attr? ) , X i ) . \mathcal{L}_i^{\text {Attr }}=\text { Distance }\left(\text { Dec }^{\text {Attr }}\left(h_i^{\text {Attr }}\right), X_i\right) . LiAttr??=?Distance?(?Dec?Attr?(hiAttr??),Xi?).
對于邊的生成,作者假設每條邊的生成都是獨立的,然后可以隱式分解似然:
p θ ( E i , ? o ∣ E i , o , X ≤ i , E < i ) = ∏ j + ∈ E i , ? o p θ ( j + ∣ E i , o , X ≤ i , E < i ) . p_\theta\left(E_{i, \neg o} \mid E_{i, o}, X_{\leq i}, E_{<i}\right)=\prod_{j^{+} \in E_{i, \neg o}} p_\theta\left(j^{+} \mid E_{i, o}, X_{\leq i}, E_{<i}\right) . pθ?(Ei,?o?Ei,o?,Xi?,E<i?)=j+Ei,?o??pθ?(j+Ei,o?,Xi?,E<i?).
在獲取到Edge Generation node表示 h E d g e h^{E d g e} hEdge后,可以通過 Dec ? E d g e ( h i E d g e , h j E d g e ) \operatorname{Dec}^{E d g e}\left(h_i^{E d g e}, h_j^{E d g e}\right) DecEdge(hiEdge?,hjEdge?)來建模節點 i i i與節點 j j j連接的可能性,其中 D e c E d g e Dec^{E d g e} DecEdge表示成對(pairwise)得分函數。最后,采用負對比估計(negative contrastive estimation)來計算每個鏈接節點 j + j^{+} j+的似然。作者將為連接的節點表示為 S i ? S_i^{-} Si??,對比損失計算公式如下:
L i E d g e = ? ∑ j + ∈ E i , ? o log ? exp ? ( Dec ? E d g e ( h i E d g e , h j + E d g e ) ) ∑ j ∈ S i ? ∪ { j + } exp ? ( Dec ? E d g e ( h i E d g e , h j E d g e ) ) \mathcal{L}_i^{E d g e}=-\sum_{j^{+} \in E_{i, \neg o}} \log \frac{\exp \left(\operatorname{Dec}^{E d g e}\left(h_i^{E d g e}, h_{j^{+}}^{E d g e}\right)\right)}{\sum_{j \in S_i^{-} \cup\left\{j^{+}\right\}} \exp \left(\operatorname{Dec}^{E d g e}\left(h_i^{E d g e}, h_j^{E d g e}\right)\right)} LiEdge?=?j+Ei,?o??logjSi??{j+}?exp(DecEdge(hiEdge?,hjEdge?))exp(DecEdge(hiEdge?,hj+Edge?))?
下圖便展示了屬性圖生成的過程:

  • 確定輸入圖的節點排列順序;
  • 隨機選取目標節點邊的一部分作為觀測邊 E i , o E_{i,o} Ei,o?,剩下的邊掩去作為 E i , ? o E_{i, \neg o} Ei,?o?,需要將被掩去的邊從圖中刪除。
  • 將節點劃分為Attribute Generation和Edge Generation節點。
  • 使用修改的鄰接矩陣來計算節點3、4和5的表示,包括它們的Attribute和Edge Generation節點。
  • 通過每個節點的屬性預測和掩去邊預測任務并行訓練GNN模型。

在這里插入圖片描述

3.5 擴展到異配和大圖

本節主要介紹如何在大圖和異配圖上應用GPT-GNN進行預訓練。

異配圖:對于異配圖,所提出的GPT-GNN框架可以直接應用于預訓練異構GNN。唯一的區別是每種類型的節點和邊都可以有自己的解碼器,這是由異構gnn指定的,而不是預訓練框架。所有其他組件保持完全相同。

大圖:對于大圖,則需要使用子圖采樣進行訓練。為了估計GPT-GNN提出的對比損失,需要遍歷輸入圖的所有節點。然而,只能訪問子圖中的采樣節點來估計這個損失,使得(自)監督只關注局部信號。為了緩解這個問題,作者提出了自適應隊列(Adaptive Queue),它將之前采樣的子圖中的節點表示存儲為負樣本。每次處理一個新的子圖,可以通過添加最新的節點表示并刪除最舊的節點表示來逐步更新這個隊列。自適應隊列可以使用更大的負樣本池 S i ? S_i^{-} Si??,此外,不同采樣子圖上的節點可以為對比學習帶來全局結構指導。

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

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

相關文章

自動駕駛港口車輛故障及事故處理機制

1、傳感器故障&#xff1a; &#xff08;1&#xff09;單一傳感器數據異常處理。自動駕駛電動平板傳感方案為冗余設置&#xff0c;有其他傳感器能夠覆蓋故障傳感器觀測區域&#xff0c;感知/定位模塊將數據異常情況發給到規劃決策模塊&#xff0c;由“大腦”向中控平臺上報故障…

視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺接入RTSP設備出現離線情況的排查

安防視頻監控/視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺可拓展性強、視頻能力靈活、部署輕快&#xff0c;可支持的主流標準協議有國標GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持廠家私有協議與SDK接入&#xff0c;包括海康Ehome、海大宇等設備的SDK等。平臺既具備傳統安…

QT處理日志文件

由于實際生產需要&#xff0c;軟件系統的運行&#xff0c;會產生大量的日志文件&#xff0c;有時候一天就能產生超過百萬條log記錄&#xff0c;那么為了能夠處理日志文件&#xff0c;查詢并且找到我們想要的報錯信息&#xff0c;因此不得不考慮怎么實現&#xff0c;打開大日志文…

ARM--day2(cpsr、spsr、數據搬移指令、移位操作指令、位運算操作指令、算數運算指令、比較指令、跳轉指令)

.text .global _gcd _gcd:mov r0,#9mov r1,#15b loop loop:cmp r0,r1beq stopsubhi r0,r1bhi loopsubcc r1,r0bcc loopstop:b stop.end用for循環實現1~100之間和5050 .text .global _gcd _gcd:mov r0,#0x0mov r1,#0x1mov r2,#0x64b loop loop:cmp r1,r2bhi stopadd r0,r0,r1ad…

【Unity】坐標轉換經緯度方法(應用篇)

【Unity】坐標轉換經緯度方法&#xff08;應用篇&#xff09; 解決地圖中經緯度坐標轉換與unity坐標互轉的問題。使用線性變換的方法&#xff0c;理論上可以解決小范圍內所以坐標轉換的問題。 之前有寫過[Unity]坐標轉換經緯度方法&#xff08;原理篇),在實際使用中&#xff0c…

R語言實現免疫浸潤分析(2)

原始數據承接免疫浸潤分析&#xff08;1&#xff09;&#xff0c;下面展示免疫浸潤結果&#xff1a; #直接使用IOBR包內的cell_bar_plot pic<-cell_bar_plot(input quantiseq_immo_de[1:20,], title "quanTiseq Cell Fraction") #使用ggplot2 library(ggplot2)…

大疆飛卡30運載無人機技術分享

大疆飛卡30是大疆公司面向運輸領域推出的一款專業運載無人機。它采用了優秀的設計,裝備了多種先進傳感器,以解決運輸中的難題。以下我們來了解一下其主要特點: 【應用領域】 飛卡30適用于山地救災、農業化肥施用、工程材料運送等交通不便的山區應用,也適用于海島聯通等運輸鏈…

管理類聯考——邏輯——真題篇——按知識分類——匯總篇——二、論證邏輯——削弱——第一節 推理論證

文章目錄 第七章 削弱質疑第一節 削弱-題型1-推理論證-論證為預測結果題-削弱質疑-預測-推理論證-分類1-削弱論點真題(2019-24)-削弱質疑-預測-推理論證-分類1-削弱論點真題(2019-42)-削弱質疑-預測-推理論證-分類1-削弱論點真題(2011-32)-削弱質疑-預測-推理論證-分類…

機器學習基礎之《分類算法(3)—模型選擇與調優》

作用是如何選擇出最好的K值 一、什么是交叉驗證&#xff08;cross validation&#xff09; 1、定義 交叉驗證&#xff1a;將拿到的訓練數據&#xff0c;分為訓練和驗證集。以下圖為例&#xff1a;將數據分成5份&#xff0c;其中一份作為驗證集。然后經過5次(組)的測試&#x…

通過請求頭傳數據向后端發請求

axios &#xff08;get post請求、頭部參數添加&#xff09;傻瓜式入門axios_axiospost請求參數_web_blog的博客-CSDN博客

ByteBuffer 使用

ByteBuffer 使用 1 java.nio包中的類定義的緩沖區類型2 緩沖區常用屬性2.1緩沖區的容量(capacity)2.2 緩沖區的位置(position)2.3 緩沖區的限制(limit)2.4 緩沖區的標記(mark)2.5 剩余容量 remaining/hasRemaining 3 緩沖區常用方法3.1 創建緩沖區3.1.1 allocate方法3.1.2 wrap…

【mybatis】mapper.xml中foreach的用法,含批量查詢、插入、修改、刪除方法的使用

一、xml文件中foreach的主要屬性 foreach元素的屬性主要有 collection&#xff0c;item&#xff0c;index&#xff0c;separator&#xff0c;open&#xff0c;close。 collection: 表示集合&#xff0c;數據源 item &#xff1a;表示集合中的每一個元素 index &#xff1a;用于…

blender 發射體粒子

發射體粒子的基礎設置 選擇需要添加粒子的物體&#xff0c;點擊右側粒子屬性&#xff0c;在屬性面板中&#xff0c;點擊加號&#xff0c;物體表面會出現很多小點點&#xff0c;點擊空格鍵&#xff0c;粒子會自動運動&#xff0c;像下雨一樣&#xff1b; bender 粒子系統分為兩…

【100天精通python】Day40:GUI界面編程_PyQt 從入門到實戰(完)_網絡編程與打包發布

目錄 8 網絡編程 8.1 使用PyQt 網絡模塊進行網絡通信 服務器端示例 客戶端示例 8.2 處理網絡請求和響應 9 打包和發布 9.1 創建可執行文件或安裝程序 9.2 解決依賴問題 9.3 發布 PyQt 應用到不同平臺 9.3.1 發布到 Windows 9.3.2 發布到 macOS 9.3.3 發布到 Linux 9…

sap ui5刷新頁面的方式

1.第一種 window.location.reload();2.第二種 如果你想在UI5應用程序中使用MVC模式來處理頁面刷新,可以通過重新加載當前路由來實現刷新。首先,確保你有一個Router對象實例: var oRouter = sap.ui.core.UIComponent.getRouterFor(this);然后&

[保研/考研機試] KY43 全排列 北京大學復試上機題 C++實現

題目鏈接&#xff1a; 全排列https://www.nowcoder.com/share/jump/437195121692001512368 描述 給定一個由不同的小寫字母組成的字符串&#xff0c;輸出這個字符串的所有全排列。 我們假設對于小寫字母有a < b < ... < y < z&#xff0c;而且給定的字符串中的字…

Docker vs. Kubernetes:選擇合適的場景

在決定使用 Docker 還是 Kubernetes 之前&#xff0c;讓我們看看一些實際的場景&#xff0c;以便更好地理解它們的適用性。 使用 Docker 的場景 假設您正在開發一個微服務應用程序&#xff0c;其中每個微服務都需要一些特定的依賴項和環境。在這種情況下&#xff0c;Docker 是一…

HJ6 質數因子

描述 功能:輸入一個正整數&#xff0c;按照從小到大的順序輸出它的所有質因子&#xff08;重復的也要列舉&#xff09;&#xff08;如180的質因子為2 2 3 3 5 &#xff09; 數據范圍&#xff1a; 1≤n≤210914 1≤n≤210914 輸入描述&#xff1a; 輸入一個整數 輸出描述&…

學習Vue:聲明式路由和程序式路由

在Vue.js中&#xff0c;路由與導航是構建單頁應用程序&#xff08;SPA&#xff09;的關鍵概念。在使用Vue Router時&#xff0c;您可以使用兩種方式來進行路由與導航&#xff1a;聲明式路由和程序式導航。本文將詳細介紹這兩種方式&#xff0c;幫助您理解它們的用法和優勢。 聲…

Ceph入門到精通-Aws Iam(user,role,group,policy,resource)架構圖和快速入門

-- Aws Iam(identity,user,role,group,policy,resource,)架構圖和快速入門. 【官網】&#xff1a;Cloud Computing Services - Amazon Web Services (AWS) 應用場景 aws 云服務運維,devops過程中經常涉及各項服務&#xff0c;權限&#xff0c;角色的處理。 為了更好的使用各項…