今天就簡單的介紹一下graphsage,graphsage其實是從兩個方面對於gcn做了改動,一方面是通過取樣鄰居的策略將gcn由全圖(full batch)的訓練方式改造成以節點為中心的小批量(mini batch)訓練方式,這使得大規模圖資料的分布式訓練成為可能;另一方面是該演算法對聚合鄰居的操作進行了拓展,提出了替換gcn操作的幾種新的方式。接下來就從取樣鄰居和聚合鄰居兩個方面來講解。
在之前的gcn模型中,訓練方式是一種全圖形式, 也就是一輪迭代,所有節點樣本的損失只會貢獻一次梯度資料,無法做到dnn中通常用到的小批量式更新,這從梯度更新的次數而言,效率是很低的。另外,對於很多實際的業務場景資料而言,圖的規模往往是十分巨大的,單張顯示卡的視訊記憶體容量很難達到一整張圖訓練時所 需的空間,為此採用小批量的訓練方法對大規模圖資料的訓練進行分布式拓展是十分必要的。graphsage 從聚合鄰居的操作出發,對鄰居進行隨機取樣來控制實際運算時節點k階子圖的資料規模,在此基礎上對取樣的子圖進行隨機組合來完成小批量式的訓練。
在gcn模型中,我們知道節點在第(k+1)層的特徵只與其鄰居在k層的特徵有關,這種區域性性質使得節點在第k層的特徵只與自己的k階子圖有關。對於下圖中的中心節點(0號節點),假設gcn模型的層數為2,若要想得到其第2層特徵,圖中所有的節點都需要參與計算。
但是對於一共大規模的圖資料來說,我們之間將此思路遷移過來會存子圖的節點數呈指數級增長的問題。假設平均鄰居數為n,則k層gcn需要取樣1+n+n^2+...+n^k個節點,會導致極大的計算複雜度。graphsage採用的取樣策略就是隨機選擇m個節點進行取樣而不是用全部節點,這樣需要取樣的節點個數就變為1+m+m^2+...+m^k,這樣就會使得m^k<
graphsage研究了聚合鄰居操作所需要的性質,(1)聚合操作必須要對聚合節點的數量做到自適應。不管節點的鄰居數量怎麼變化,進行聚合操作後輸出的維度必須是一致的。(2)聚合操作對聚合節點具有排列不變性。這就要求不管鄰居節點的排列順序如何,輸出的結果必須是一樣的,比如agg(v1,v2) = agg(v2,v1)。基於這些性質然後提出了幾種新的聚合(aggregator)操作:
①平均/加和聚合運算元
②池化聚合運算元
其實**中給出的這個演算法只是聚合操作,其呼叫聚合操作完成對每個節點鄰居特徵的整合輸出(第四行),然後將聚合後的鄰居特徵與中心節點上一層的特徵進行拼接,送到乙個單層網路中得到中心節點新的特徵(第五行),最後對節點的特徵向量進行歸一化處理,將所有節點的向量都統一到單位尺度上(第七行)。
值得一提的是,graphsage演算法的計算過程中完全沒有使用拉普拉斯矩陣l的參與,每個節點的特徵學習過程只與其k階鄰居有關,而不需要考慮全圖的結構資訊,這樣的方法適合用於歸納學習。總的來說,graphsage是對空域視角下的gcn做了一次解構,提出了幾種鄰居的聚合操作運算元,同時通過取樣鄰居,大大提公升了演算法的工程價值。
學習心得 python學習心得
自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...
學習心得 我的學習心得
我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...
Spring學習心得
不看不知道,一看便學到,會不會與您產生共鳴呢?喜歡再捧場拍磚 spring使用從一年前開始,邊學習邊開發。這裡講講我的學習心得。第一條 記住ioc就是spring的一切。而掌握ioc的唯一方法就是使用和思考。spring是ioc為核心的,所以第一步就是要深刻理解ioc,最好是能盡快把ioc作為教條式...