圖表示學(xué)習(xí)入門3——圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Networks)

圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Network)在社交網(wǎng)絡(luò)玄坦、推薦系統(tǒng)、知識圖譜上的效果初見端倪,成為近2年大熱的一個研究熱點煎楣。然而豺总,什么是圖神經(jīng)網(wǎng)絡(luò)?圖和神經(jīng)網(wǎng)絡(luò)為什么要關(guān)聯(lián)择懂?怎么關(guān)聯(lián)喻喳?

本文將以淺顯直覺的方式,介紹GNN的靈感來源困曙,構(gòu)造方法表伦,訓(xùn)練方式等,根據(jù)《Representation Learning on Networks》中GNN部分慷丽,做了具體的解讀和詮釋绑榴,并增補了一些代碼中才有的實現(xiàn)細節(jié),幫助初學(xué)者理解盈魁。

代碼實現(xiàn):(https://github.com/leichaocn/graph_representation_learning

目錄
卷積神經(jīng)網(wǎng)絡(luò)的啟示
核心想法
傳播機制
傳播機制舉例
訓(xùn)練的方式
一般的設(shè)計步驟
Node2Vec與GNN的對比
總結(jié)
參考文獻


卷積神經(jīng)網(wǎng)絡(luò)的啟示

回顧對圖像的簡單卷積:

3im1.png

圖1.卷積網(wǎng)絡(luò)的基本操作(source

如圖1所示:一幅圖(image)所抽取的特征圖(features map)里每個元素翔怎,可以理解為圖(image)上的對應(yīng)點的像素及周邊點的像素的加權(quán)和(還需要再激活一下)。

同樣可以設(shè)想:一個圖(graph)所抽取的特征圖(也就是特征向量)里的每個元素杨耙,也可以理解為圖(graph)上對應(yīng)節(jié)點的向量與周邊節(jié)點的向量的加權(quán)和赤套。
澄清幾個概念:

特征向量:一條數(shù)據(jù)(image、word珊膜、node等)的數(shù)字化表示容握,是機器學(xué)習(xí)任務(wù)的必備輸入。
embedding:更好的特征向量车柠,蘊含潛在語義信息剔氏,是來自network訓(xùn)練后的結(jié)果,如果能找到優(yōu)秀的embedding竹祷,將有效提升后面機器學(xué)習(xí)任務(wù)的性能表現(xiàn)谈跛。例如從word2vec網(wǎng)絡(luò)中抽出的word embedding向量,“北京”“巴黎”這兩個詞就比較相似塑陵,因為都是首都感憾;從CNN網(wǎng)絡(luò)中抽出的image embedding,暹羅貓令花、無耳貓兩個圖片的向量就比較相似阻桅,因為都有貓。
features map :由cnn生成的特征向量兼都,也就是image embedding嫂沉。image 經(jīng)過一層CNN前向傳播后的輸出,是一個二維的矩陣扮碧,只要進行拉直(flatten)趟章,就轉(zhuǎn)變?yōu)榱艘痪S的特征向量。類似于全連接神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)里每一層里都能獲取的一維的特征向量。

這種遷移聯(lián)想值得好好體會尤揣。

體會明白后搔啊,那具體怎么做呢柬祠?

核心想法

正如上面討論的北戏,歸納為一句話:用周圍點的向量傳播出自己的Embedding

一個非常簡單的例子就能搞明白漫蛔。

3im2.png

圖2.一個圖(graph)的例子(source

對于圖2來說嗜愈,要計算節(jié)點A的Embedding,我們有以下的兩條想法:

  • 節(jié)點A的Embedding莽龟,是它的鄰接節(jié)點B蠕嫁、C、D的Embedding傳播的結(jié)果
  • 而節(jié)點B毯盈、C剃毒、D的Embedding,又是由它們各自的鄰接節(jié)點的Embedding傳播的結(jié)果搂赋。

但是你可能會說赘阀,這樣不斷追溯,何時能結(jié)束脑奠?所以為了避免無窮無盡基公,我們就做兩層,可以構(gòu)造圖3的傳播關(guān)系宋欺。

3im3.png

圖3.由兩層傳播生成節(jié)點A的Embedding(source

第0層即輸入層轰豆,為每個節(jié)點的初始向量(根據(jù)所處領(lǐng)域里特征數(shù)據(jù)進行構(gòu)建),不妨稱為初始Embedding齿诞。

  • 第一層

    節(jié)點B的Embedding來自它的鄰接點A酸休、C的Embedding的傳播。

    節(jié)點C的Embedding來自它的鄰接點A祷杈、B雨席、C、D的Embedding的傳播吠式。

    節(jié)點D的Embedding來自它的鄰接點A的Embedding的傳播陡厘。

  • 第二層

    節(jié)點A的Embedding來自它的鄰接點B、C特占、D的Embedding的傳播糙置。

好了,大概可能有點感覺了是目,可是傳播到底是什么谤饭?圖中的小方塊里到底在什么什么?

(注意:圖中所有的方塊代表的操作均相同,大小揉抵、顏色的差異沒有任何含義)

傳播機制

小方塊里做的就兩件事:

  • 收集(Aggregation)

    簡言之亡容,就是對上一層的所有鄰接節(jié)點的Embedding,如何進行匯總冤今,獲得一個Embedding闺兢,供本層進行更新。

  • 更新(Update)

    即對本層已“收集完畢”的鄰接點數(shù)據(jù)戏罢,是否添加自身節(jié)點的上一層Embedding屋谭,如果是如何添加,如何激活龟糕,等等方式桐磁,最終輸出本層的Embedding。

表達成數(shù)學(xué)公式讲岁,即下面這個式子:

3im4.png

先解釋其中的符號含義:h表示節(jié)點的Embedding我擂,下標(biāo)vu表示節(jié)點的索引,上標(biāo)k表示第幾層的意思缓艳,\sigma表示激活函數(shù)校摩,W_kB_k表示矩陣,N(v)表示節(jié)點v的鄰接點集合郎任,AGG(\cdot)表示收集操作秧耗。

這個公式的右邊就做了兩件事:

  • 收集:即AGG(\cdot)部分
  • 更新:除了AGG(\cdot)外的其他部分。

這個公式太抽象舶治,我們舉例說明三種常見的圖神經(jīng)網(wǎng)絡(luò)分井,看看是如何設(shè)計的。

傳播機制舉例

基礎(chǔ)版本

3im5.png

1)收集

即直接對上一層所有節(jié)點的Embedding求平均霉猛。

2)更新

即為用收集完畢的Embedding與本節(jié)點上一層的Embedding進行了加權(quán)和尺锚,然后再激活。顯然惜浅,由于上一層Embedding與本層Embedding維度相同瘫辩,所以W_kB_k為方陣。

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

3im6.png

1)收集

u\in N(v)\cup v可知坛悉,收集的輸入Embeddings不僅僅包括節(jié)點v的鄰接點們的Embedding伐厌,還包括節(jié)點v自身的Embedding,而分母變成了\sqrt{\mid N(u) \mid \mid N(v) \mid}裸影,是一種更復(fù)雜的加權(quán)和挣轨,不僅考慮了節(jié)點v的鄰接點的個數(shù),還考慮了每個鄰接點u自身的鄰接接個數(shù)轩猩。(基礎(chǔ)版本中的平均是最簡單的加權(quán)和)

2)更新

顯然比基礎(chǔ)版本簡單多了卷扮,不再考慮節(jié)點v自己的上一層Embedding荡澎,直接讓收集好的Embedding乘上矩陣W_k后再激活完事。

之所以叫圖卷積網(wǎng)絡(luò)晤锹,是因為和卷積網(wǎng)絡(luò)的套路類似摩幔,對自己和周邊節(jié)點(像素)進行加權(quán)求和。

GraphSAGE

3im7.png

這不就是咱們上面提到的那個概念公式鞭铆?是的或衡,GraphSAGE由于其變體較多,所以需要用這個最抽象的公式來概括它衔彻。

1)收集

可以有如下的收集方式:

  • 直接平均

    這是最簡單的收集方式

3im8.png
  • 池化
3im9.png
  • LSTM
3im10.png

2)更新

收集好的Embedding經(jīng)過矩陣A_k變換薇宠,節(jié)點v自己上一層的Embedding經(jīng)過矩陣B_k變換偷办,我們即可得到兩個Embedding艰额,把它倆給按列拼接起來。

這里要注意:它倆不是相加椒涯;矩陣A_k和矩陣B_k都不是方陣柄沮,均自帶降維功能。AGG(\cdot)輸出是d維废岂,h^{k-1}_vd維祖搓,但是經(jīng)過軍陣變換后,它倆都成了d/2維湖苞,經(jīng)過拼接拯欧,又恢復(fù)成d維。

訓(xùn)練的方式

無監(jiān)督的訓(xùn)練

跑不同的Aggregation和Update方法财骨,結(jié)合自定義的損失函數(shù)镐作,都可以訓(xùn)練出這些權(quán)重。這里的自定義損失函數(shù)隆箩,需要根據(jù)你對節(jié)點Embedding的最終期望该贾,讓它附加上一個什么樣的效果來設(shè)計。

例如word2vec利用序列中的上下文信息捌臊,用一個詞預(yù)測周圍詞杨蛋,構(gòu)造分類損失來訓(xùn)練。圖的無監(jiān)督訓(xùn)練也可以用一個節(jié)點預(yù)測周圍節(jié)點理澎,構(gòu)造分類損失來訓(xùn)練逞力。當(dāng)然,還有其他的無監(jiān)督套路糠爬,這個視頻不錯(18min~21min):https://www.bilibili.com/video/av53422483/

在無監(jiān)督任務(wù)中寇荧,獲取經(jīng)過神經(jīng)網(wǎng)絡(luò)優(yōu)化的Embedding秩铆,就是我們的目的灯变。

有監(jiān)督的訓(xùn)練

如果我們想要實現(xiàn)節(jié)點分類捅膘,那么我們就需要有帶標(biāo)簽的訓(xùn)練數(shù)據(jù),設(shè)計損失函數(shù)寻仗,即可進行訓(xùn)練。

例如署尤,我們有一批帶label的圖結(jié)構(gòu)的數(shù)據(jù),已經(jīng)標(biāo)記好了哪些是水軍曹体,哪些是普通用戶俗扇。我們就可以構(gòu)造如下的交叉熵損失函數(shù)箕别。

3im11.png

圖4.有監(jiān)督訓(xùn)練中損失函數(shù)的構(gòu)造(source

  • 轉(zhuǎn)換矩陣

    注意其中的z_v即節(jié)點v的Embedding铜幽,y_v是節(jié)點v的label,那\theta是什么鬼串稀?

    如剛才我們討論的除抛,圖神經(jīng)網(wǎng)絡(luò)的傳播結(jié)果,是所有節(jié)點經(jīng)過“傳播”優(yōu)化的Embedding母截,這些Embedding的維度均為d維(在初始化時定義好的)到忽,而我們分類任務(wù)可能是c類,所以清寇,需要再前向傳播的最后一層喘漏,加入矩陣,把d維的輸出映射成c維的輸出颗管,這樣才能讓交叉熵損失函數(shù)對應(yīng)起來陷遮。

    由于我們列舉的是二分類任務(wù),圖4中也用的是二分類的交叉熵損失垦江,因此只需要1維輸出足矣帽馋,所以在這里的c為1,\theta為一個向量(可視為把d維壓縮為1維的特殊矩陣)比吭。

在有監(jiān)督任務(wù)中绽族,獲取經(jīng)過神經(jīng)網(wǎng)絡(luò)優(yōu)化的Embedding,還需要進行分類衩藤。所以Embedding不是目的吧慢,只是實現(xiàn)分類的手段。

一般的設(shè)計步驟

綜上赏表,各類圖神經(jīng)網(wǎng)絡(luò)架構(gòu)主要區(qū)別是:

  • 傳播機制的區(qū)別检诗,即收集和更新的設(shè)計(圖3中小方塊)匈仗。
  • 有無監(jiān)督及損失函數(shù)的區(qū)別。

設(shè)計圖神經(jīng)網(wǎng)絡(luò)的一般步驟是:

  1. 定義收集與更新方式逢慌。
  2. 定義損失函數(shù)悠轩。
  3. 在一批節(jié)點上進行訓(xùn)練。
  4. 生成Embedding攻泼,即使是模型未見過的Embedding火架,模型也可以對其初始化Embedding進行“傳播優(yōu)化”。

Node2Vec與GNN的對比

由于Embedding這個術(shù)語被我以廣義的方式忙菠,用了太多次何鸡,很容易導(dǎo)致混淆,所以這里對Embedding在不同狀態(tài)時做一個總結(jié)牛欢。

3im12.png

總結(jié)

  • 圖神經(jīng)網(wǎng)絡(luò)是以鄰接點Embedding的淺層傳播來訓(xùn)練Embedding骡男。

  • 改變Aggregation和update的方式洞翩,可以構(gòu)造不同的圖神經(jīng)網(wǎng)絡(luò)焰望;

  • 既可以用無監(jiān)督的方式獲得Embedding已亥,也可以用有監(jiān)督的方式直接訓(xùn)練分類任務(wù)。

參考文獻

[1] Jure Leskovec, 《Graph Representation Learning》

[2] Jure Leskovec, 《Representation Learning on Networks》

http://snap.stanford.edu/proj/embeddings-www/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末震鹉,一起剝皮案震驚了整個濱河市传趾,隨后出現(xiàn)的幾起案子泥技,更是在濱河造成了極大的恐慌珊豹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕便,死亡現(xiàn)場離奇詭異轿腺,居然都是意外死亡,警方通過查閱死者的電腦和手機族壳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門螺垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖歌,“玉大人,你說我怎么就攤上這事孽亲≌垢福” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵篮绿,是天一觀的道長亲配。 經(jīng)常有香客問我惶凝,道長苍鲜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任洒疚,我火速辦了婚禮拳亿,結(jié)果婚禮上愿伴,老公的妹妹穿的比我還像新娘。我一直安慰自己鹅经,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布贷痪。 她就那樣靜靜地躺著蹦误,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舱沧。 梳的紋絲不亂的頭發(fā)上熟吏,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天牵寺,我揣著相機與錄音恩脂,去河邊找鬼。 笑死杏节,一個胖子當(dāng)著我的面吹牛典阵,可吹牛的內(nèi)容都是我干的壮啊。 我是一名探鬼主播撑蒜,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼座菠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拓萌?” 一聲冷哼從身側(cè)響起升略,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炕倘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啊央,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡劣挫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年压固,在試婚紗的時候發(fā)現(xiàn)自己被綠了靠闭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡拦键,死狀恐怖芬为,靈堂內(nèi)的尸體忽然破棺而出蟀悦,到底是詐尸還是另有隱情,我是刑警寧澤询张,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布份氧,位于F島的核電站弯屈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏厅缺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一阎抒、第九天 我趴在偏房一處隱蔽的房頂上張望且叁。 院中可真熱鬧秩伞,春花似錦、人聲如沸展氓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽空入。三九已至族檬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埋凯,已是汗流浹背扫尖。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工藏斩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓兆览,卻偏偏與公主長得像塞关,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355