(AAAI2020 Yao) Graph Few-shot Learning via knowledge transfer

lynk發表於2022-05-14

22-5-13 seminar上和大家分享了這篇文章,重新整理一下在部落格裡備個份
[0]Graph few-shot learning via knowledge transfer

起因是在MLNLP的公眾號上看到了張初旭老師講的小樣本圖學習,雖然沒看到錄影,但是把ppt下下來研究了一下。所以本文中出現的圖片許多都是張老師ppt中的圖,在張老師的主頁上能夠找到的這份PPT。

前置知識

圖與圖表示學習

首先,老生常談的,自然界中有許多的圖資料和應用,包括社交的,安全的,醫學的,化學的等等等等。
其中一種方法稱為圖表示學習,通過一個模型生成嵌入,可以用於下游任務中,包括節點級別的,邊級別的,圖級別的各種任務。 這裡的嵌入指的是資料輸入模型後得到的輸出,往往是資料的低維表示。
這種圖表示學習,對於具體的任務,非常依賴充足的標籤資料。
於是就遇到了相應的挑戰,在圖上,有許多資料只有很少的標籤資料。例如在社交圖中有4000個以上的類別只有不到100個節點,在ins上的毒品交易,天生樣本量就很少等等。
於是就發現小樣本學習是研究這種問題的一個解決方案。

小樣本學習簡介

小樣本學習的訓練流程

概念:小樣本學習是一類具有很少監督資訊,或者是幾個標籤的機器學習問題。
小樣本學習的目標是,通過補充其他的訓練資料來模擬目標的小樣本學習任務,來從補充資料中學習到一種元知識。
具體來說,使用的是一種稱為n-way k-shot 的學習方式。
如圖所示,為一個5-way 1-shot的小樣本學習。
image
way,指的是資料集中類別的數量,圖中為5個類別。shot,指的是資料集中每個類別圖片的數量,圖中每個類別只有一張圖片。
小樣本學習分為兩個階段,第一個階段稱為元訓練,第二個階段稱為元測試。然後每個資料集被分成兩組,一組稱為支援集,另一組叫查詢集。這裡需要明確的是,小樣本學習會有非常非常多不同的資料集,每個資料集都十分的小,都被分成查詢集和支援集兩個部分。
在元訓練的階段,首先會用許多不同的資料集對模型進行訓練,這些資料集的類別可以毫不相干。如上圖所示,meta-training階段的兩個資料集,除了鳥那一類是相同的類別,其他九個類別都不相同。這表明小樣本學習並不希望模型學習到類別的特徵,而是去學習如何更好的區分類別與類別之間的不同。
在這個階段中,支援集就可以看做普通機器學習中的訓練集,用於模型的訓練,而查詢集就可以看作是測試集,用於判斷模型是否訓練到最優
得到訓練過的模型以後,進入第二個階段,稱為元測試。首先使用元測試的支援集上訓練模型,讓模型對該資料集進行一定的微調,讓這個模型更好的適應這個元測試階段的資料集,然後在查詢集上執行,檢視測試結果。

基於度量的方法

基於度量的方法,代表模型為prototypical net[1]和matching net[2]
這個方法和我們做嵌入的方法很像,就是通過距離來判斷類別。通過計算支援集和查詢集的相似度,來學習embedding函式。如圖所示,
image
公式為\(\mathbf{c}_{k}=\frac{1}{\left|S_{k}\right|} \sum_{\left(\mathbf{x}_{i}, y_{i}\right) \in S_{k}} f_{\phi}\left(\mathbf{x}_{i}\right)\),嵌入函式即為\(f_{\phi}(xi)\),大致是說對於每個類別,取這個類別中所有embedding的平均作為這個類的embedding,稱為ck。然後對於一個查詢集中的點,輸入\(f_{\phi}(xi)\)得到embedding,計算和各個ck之間的距離,來判斷是哪個類別。

基於梯度/優化的方法

基於梯度的方法,有時候也被稱為基於優化的方法,代表作為MAML[3]
如下圖所示:
image
對於這個模型,初始化一個引數θ。在meta training的過程中,對於每個類別,在優化過程中會學習到自己的引數φ。會有各自自己的優化過程。那麼通過優化過程平均這個φ,作為meta-testing的初始化。這樣一個初始化的引數在學習新的support set時就會學的非常快。

本文內容

本文來自AAAI2020,文章題目叫通過知識遷移的圖小樣本學習,張初旭老師為本文的第二作者。
和其他圖表示學習工作一樣,圖的小樣本學習也分三個類別,即節點級別的,邊級別的,圖級別的。本文為節點級別的小樣本學習。
所有其他領域的方法要遷移到圖領域往往會面臨一個問題,圖特有的資料形式,使得它不只有每個節點自身的特徵,還有節點與節點之間的結構關係,如何處理這種結構關係就是將方法應用到圖領域的關鍵。

Method


首先,在meta training的階段,我們擁有幾張小樣本訓練圖,可能一張圖上有幾個類別,每個類別有個位數到十位數左右的節點,例如圖上左邊的那個子圖。

目標是,通過meta training得到的模型,在meta testing階段,通過少數幾個支援集的樣本對模型引數進行一定的調整,來預測查詢集中的標籤。

它的idea是,通過補充圖、補充類上訓練的模型,進行知識遷移,來提取出一種元知識。所謂的知識遷移,就是指的在元訓練階段和元測試階段所使用的完全不同的資料集,用別的資料集訓練出來的模型做本資料集的任務,就可以叫知識遷移。

這裡所謂的補充圖,補充類,就是前文小樣本學習中提到的補充集。第一張圖中有T1,T2,一個T就是一個補充集,放到圖上,對於節點分類任務,一個圖就是一個資料集,所以稱之為補充圖。
本文的模型架構具體來說分為三個模組

第零步

對一張圖,使用GNN生成各個節點之間的embedding,然後可以直接使用prototypical net的方法,計算個點之間的距離。即每個點的embedding就是一個1*多少多少維的向量,可以根據類別,直接生成每個每個類別的embedding,然後計算查詢集之中的embedding和每個類別的embedding之間的距離,也就是這個損失函式。

這就是第0步,啥都不用,直接使用prototypical net,直接生成embedding。

step a

上面的第零步這種情況,就是沒有考慮圖的結構資訊,只使用了每個節點的embedding,為了利用圖的結構資訊,作者首先增加了a模組,稱作圖結構原型(graph structure prototype)。

它說,第a步用來計算圖結構原型。思想是對每一個類別的支援集節點,提取結構來描述互動作用。
作者在研究如何保留圖的結構資訊時,做出了一個理論上的假設。詳情見論文4.1小節開頭,在作者說,在絕大多數情況下,圖上的節點有兩個重要的角色。一是和類別可能不同的鄰居節點的區域性互動,二是和距離很遠的相同類別的節點的互動,這種互動可以被全域性檢視,這也就是作者所認為的“全域性結構資訊”。那麼對於第一種作用,就是上面提到的用GNN生成embedding,這個過程就是和鄰居節點通過訊息傳播做聚合的過程,可以體現出和不同類別鄰居節點的區域性互動。對於第二點,作者說(見圖上detail的部分),提取第k類節點的關係結構,通過GNN學習原型。

具體做法是,通過某些相似性度量方法,將一張圖拆分成k個子圖,每個子圖包括這個類別的全部節點。這裡說的相似性度量,文章中提到,是兩個節點k跳中相同鄰居的數量,或者是節點間的逆拓撲距離。
就以圖上這個藍色的類為例,可以看到這三個節點非常的近,它們k跳的相同鄰居肯定很多,那麼就認為在子圖的結構上,他們是相連的,而這個藍色的點離這三個點非常的遠,所以它只能和這三個點中最近的點有一個連線。(具體細節上這一塊是個什麼操作我並不很確定,可能需要看程式碼才能明白)

通過這樣子對每個類別構建子圖,作者說他捕獲了每個類別的關係結構,然後將這每個子圖都輸入一個PGNN,原型圖神經網路,在本文中,就是一個一層的GNN,可以對每個子圖的embedding再做一次1跳的訊息傳播,得到新的embedding,然後做一個池化操作,生成這個類別的embedding ck,式子如下

\[\mathbf{c}_{i}^{k}=\operatorname{Pool}_{j=1}^{n_{i}^{k}}\left(\operatorname{PGNN}_{\phi}\left(\mathcal{R}_{i}^{k}, f_{\theta}\left(\mathcal{S}_{i}^{k}\right)\right)[j]\right) \]

那麼這樣得到的embedding可以代表這個類別的資訊。然後再拿查詢集中的點的embedding和每個類別進行比較,和上文相同。只不過上文第0步這個ck是簡單的取平均,而這邊是使用PGNN生成的。

step b

然後啊,這個step b模組,稱之為分層圖表示門控(Hierachical Graph Representation Gate)。這個分層圖表示學習,是早期的一個文章[4],主要是用於圖分類。圖資訊都是層級表示的,例如地圖、概念圖、流程圖等,捕獲層級資訊將能更加完整高效地表示圖。為什麼作者要引入這個模組呢?因為在小樣本學習中,不止這一張圖。一個meta-training 的過程有很多張圖,不同的圖就會有不同的拓撲結構。對於這個HGR,具體內容如下

第一步,見橙色的區域a,學習分層圖表示的基礎模組。對於拿到手的一個鄰接矩陣A和特徵X,通過這個分層網路的兩個步驟,AGNN和FGNN,對圖進行分層,可以得到對應每一個層級的表示,或者說embedding。

這一塊有一個不是很確定的點,具體這個層級的意思。如圖,每一個臨近節點組成的一個小子圖,可以看做一個層級。因為可以看到,圖結構中的一個小子圖,在第一個層級被聚合成了一個小簇,再到第二層又被聚合成了更小的簇,最後得到了一個嵌入,這個嵌入就可以視為這個圖的拓撲資訊,在圖分類的領域中,這個向量在後續通過神經網路訓練來實現圖分類。
所以我們理解這個第一步的功能,就是得到圖在圖分類層面的表示,也就是每一個層級圖的嵌入。
第二步,回到這個Fig2,見藍色的區域b。在得到這個層級的特徵表示後,做一個池化操作可以得到這個層級的圖表示,對每個層級做這個操作以後,就得到了引入一個qi,可以認為是一種注意力機制,乘上每一個embedding做聚合,得到了這個圖的嵌入表示hi。那麼這個hi,作者就認為,視作這個圖結構的高度概括,是這張圖的圖表示。
第三步,見綠色的區域c。文中4.2節的最後一段說到,前人的研究表明,相似的圖在GNN上會有相似的引數。所以作者引入了一個門控函式來彌補圖的具體化資訊。一般來說,遇到的所謂的門控,基本上都是矩陣的哈達瑪積。先將hi放入一個可學習的線性層,\(\mathbf{g}_{i}=\mathcal{T}\left(\mathbf{h}_{i}\right)=\sigma\left(\mathbf{W}_{g} \mathbf{h}_{i}+\mathbf{b}_{g}\right)\),然後和上文中step a中的PGNN的引數做一次哈達瑪積,也就是矩陣中對應位置的值做乘積。

如圖右邊的公式所示啊,\(\phi\)就是step a中PGNN訓練的引數,這裡稱為全域性共享引數,一般來說就是一個權重矩陣。經過\(\phi_{i}=\mathbf{g}_{i} \circ \phi=\mathcal{T}\left(\mathbf{h}_{i}\right) \circ \phi\)後,得到的\(\phi_i\),稱之為圖具體引數,就是說這時候我的PGNN的引數,針對不同的資料集的補充圖,做過不同的特化。

step c

為什麼有這個第三步呢,作者說,僅僅靠這個,非常遙遠的這個匹配損失,來訓練本身的節點表示,是非常非常困難的。第一步所使用的損失函式

\[\mathcal{L}_{i}^{k}=-\sum_{\left(\mathbf{x}_{i, j}^{q_{i}}, y_{i, j}^{q_{i}}\right) \in \mathcal{Q}_{i}^{k}} \log \frac{\exp \left(-d\left(f_{\theta}\left(\mathbf{A}, \mathbf{x}_{i, j}^{q_{i}}\right), \mathbf{c}_{i}^{k}\right)\right)}{\sum_{k^{\prime}} \exp \left(-d\left(f_{\theta}\left(\mathbf{A}, \mathbf{x}_{i, j}^{q_{i}}\right), \mathbf{c}_{i}^{k^{\prime}}\right)\right)}, \]

同時負責了這個PGNN,這個HGRG,和原本的這個嵌入函式fθ的優化過程。估計是單靠這一個損失函式訓練的效果不是很好,那麼作者就說,在生成節點的embedding表示這一步,要新增一個新的限制,來控制這個原本的embedding節點的質量,稱作補充圖重構。
具體來說,用一個圖的自編碼器來重構這個圖。增加了損失函式

\[\mathcal{L}_{r}\left(\mathbf{A}_{i}, \mathbf{X}_{i}\right)=\left\|\mathbf{A}_{i}-\mathrm{GNN}_{d e c}\left(\mathbf{Z}_{i}\right) \mathrm{GNN}_{d e c}^{T}\left(\mathbf{Z}_{i}\right)\right\|_{F}^{2}, \]

Zi就是一個編碼器,也就是一個GNN,生成圖中每個節點的表示,然後通過一個解碼器,在乘以其轉置,得到的這個結果用於描述圖的結構,和鄰接矩陣相減做F範數。

這個損失函式的含義是,要求圖的結構儘量的不變,然後得到正常的embedding。Intuition部分說這是一種自監督的方法,用自監督的重構損失來提高節點標識的質量。
這樣,損失函式就變成了

\[\min _{\Theta} \sum_{i=1}^{N_{t}} \mathcal{L}_{i}+\gamma \mathcal{L}_{r}\left(\mathbf{A}_{i}, \mathbf{X}_{i}\right) \]

Algorithm


最後是總體的演算法:

  1. 初始化引數Θ,
  2. 取樣一些圖,得到領接矩陣和特徵矩陣
  3. 對於每一個圖,取樣出支援集和查詢集
  4. 計算embedding和重構損失Lr stepc中的內容
  5. 計算這個圖的圖表示,和引數φ做門控 stepb中的內容
  6. 構建關係圖並計算圖原型
  7. 計算圖原型和查詢集中embedding的距離,並構成損失函式Li
  8. 反向傳播更新引數

experiment

setting

在論文第五章節的右邊部分,作者說到,他們沿用了傳統的小樣本學習設定。對於每一張圖,每個類別中去N的帶標籤的節點來作為支援集,身下的節點都是用於評估表現的查詢集,如下圖。

由於step b的分層網路有一個注意力機制qi,所以實驗了使用mean和attention兩種情況,稱為GFL-mean和GFL-att。GFL-mean表示對hi的聚合採用的平均池化(論文中等式6),GFL-att表示對hi的聚合採用的注意力聚合(論文中等式7)。

result


KNN往上都傳統的圖神經網路方法,可以看到效果都不咋樣。在Meta-train階段只有100多個甚至幾十個節點訓練出來的模型,在剩下的查詢集上表現糟糕是理所應當的。
三種經典的小樣本學習表現很好,說明即使沒有考慮圖的結構資訊,全靠節點資訊,小樣本學習方法依舊可以奏效。
本文的方法在原本的小樣本方法上更進一步,大概提升在二到三個點左右,可以看到這麼複雜的結構還是有用的。

對我的啟發

小樣本學習有一種方法稱作MAML,和我正在做的某個方法有一定相似之處,目前正在研究如何考慮結構資訊,將原方法遷移到圖上來。那麼MAML乃至整個小樣本學習遷移到圖領域所做的方法,對我現在這個方法遷移到圖上能有一定的參照。

引用文獻:
[1] Snell J, Swersky K, Zemel R. Prototypical networks for few-shot learning[J]. Advances in neural information processing systems, 2017, 30.
[2] Vinyals O, Blundell C, Lillicrap T, et al. Matching networks for one shot learning[J]. Advances in neural information processing systems, 2016, 29.
[3] Finn C, Abbeel P, Levine S. Model-agnostic meta-learning for fast adaptation of deep networks[C]//International conference on machine learning. PMLR, 2017: 1126-1135.
[4] Ying Z, You J, Morris C, et al. Hierarchical graph representation learning with differentiable pooling[J]. Advances in neural information processing systems, 2018, 31.

相關文章