圖神經網絡(GNN)這個概念近幾年很火,確實如此。
然而今天,一位Reddit網友卻「背道而馳」地提出了強烈反對觀點。例如:
過去5年中,大多數GNN論文提供的結果,對從業者沒有太多幫助。
我太煩Node2Vec了,引用量不應該達到7500這個數量。
就玩那些沒用的、小數據,效率提不上來,很難取得進步。
添加一些新的圖層/超參數,編一個可愛的數學故事來解釋它為什麼重要。
當前的圖形數據結構,簡直糟糕透了。
全局方法,是個死胡同。
……
點評、分析之犀利,瞬間引來了眾多網友的圍觀。
接下來便來細看下這位網友,為什麼對GNN如此之厭惡。
(為了方便閱讀,以下內容將以第一人稱進行表述)
模型與壓縮有關先來簡單回顧一下基礎知識。
大家都說圖(graph)是一種「非歐幾裡得」數據類型,但事實並非如此。
一個正則圖(regular graph)只是思考特殊矩陣(鄰接矩陣)的另一種方式而已。
很奇怪的一點就是,當我們看到滿滿都是實數的矩陣時候,就決定稱之為「非歐幾裡得矩陣」。
但這背後也有其實際的原因,因為大多數的圖都是非常稀疏的,也就是說矩陣裡面大多數的數值都是零。
基於這一點,矩陣裡面非零的數字就顯得格外重要。這就使得問題更加接近離散數學,而不是簡單連續、梯度友好的數學。
如果你有一個全矩陣(full matrix),那事情就會變得相當容易如果我們暫時不考慮這些惱人的點,假設用一整個鄰接矩陣也沒什麼大不了的,那我們就決絕了一大堆的問題。
首先,網絡節點嵌入(network node embedding)就不再是個難題了。一個節點只是矩陣中的一行,所以它已經是一個數字向量。
其次,還解決了所有的網絡預測問題。
一個足夠強大且經過良好調優的模型,將提取網絡和我們附加到節點上的任何目標變量之間的所有信息。
NLP也只是花式的矩陣壓縮讓我們從圖形切入到NLP。
正如我們將要看到的,我們所做的大多數NLP問題,都可以用圖來表示,所以這並不是什麼「題外話」。
首先,請注意,像Word2Vec和GloVe這樣的Ye Olde詞嵌入模型,只是矩陣分解。
GloVe 算法是對舊的詞袋(bag of word)矩陣的一種變形。它遍歷這些句子,並創建一個(隱含的)共現圖(co-occurence graph),其中節點是單詞,而邊則根據單詞在句子中出現的頻率進行加權。
然後,GloVe對共生圖的矩陣表示進行矩陣分解,Word2Vec在數學上是等價的。
甚至語言模型也只是矩陣壓縮語言模型風靡一時,可以說,它們主宰了 NLP 的大部分技術。
讓我們以BERT為例,BERT會根據句子的上下文,來預測了一個單詞:
這使得我們要構造的矩陣,從對單詞的平均共現(co-occurence),增加到了對句子上下文的條件共存:
正如 Hanh 和 Futrell 的論文中所指出,我們正在組合地構造「理想矩陣」:
人類語言和語言模型具有無限的統計複雜性,但是在較低的層次上可以很好地近似。這個觀察結果有兩個含義:
1)我們可以用相對較小的模型獲得較好的結果;2)我們的模型有很大的擴展潛力。
語言模型處理如此大的問題空間,以至於他們可能近似於柯氏複雜性(Kolmogorov Complexity)意義上的整個語言的壓縮。也有可能龐大的語言模型,只是記住了大量的信息,而不是壓縮信息。
那我們能像語言模型一樣,對圖進行上採樣嗎?答案是:我們已經在做了。
我們把圖的一階嵌入,稱為直接分解圖的鄰接矩陣或拉普拉斯矩陣(Laplacian Matrix)的方法。
如果使用拉普拉斯特徵映射或者取拉普拉斯主分量來嵌入圖,則為一階。
同樣,GloVe 方法也是對詞共現圖的一階方法。
我最喜歡的圖的一階方法之一是ProNE,它和大多數方法一樣好用,但是速度快兩個數量級。
高階方法就是我們在圖上做的 「上採樣」。
在大型鄰域「上採樣」的 GNN 和 node2vec 等基於隨機漫步的方法都是在做高階嵌入。
性能增益,在哪兒呢?過去5年中,大多數GNN論文提供的結果,對從業者沒有太多幫助。
正如OpenGraphsBenchmark(OGB)論文所指出的那樣,GNN論文的實證部分是在少數具有2000-20000個節點的小圖(Cora、CiteSeer、PubMed)上進行的。
這些數據集不能區分不同的方法。
最近的一些研究工作雖然解決了這個難題,但是為什麼研究人員長期關注小型的、無用的數據集,是值得討論的問題。
性能表現受任務分類的影響一個讓很多可能會感到驚訝的事實是,即使語言模型在很多NLP任務中有著良好的表現,但如果你所做的只是將句子嵌入到下遊模型中,那麼通過簡單的方法,比如將單個 Word2Vec單詞嵌入相加,從語言模型嵌入中並不會得到多少好處。
類似地,我發現對於許多圖而言,簡單的一階方法在圖聚類和節點標記預測任務上的表現,與高階嵌入方法一樣好。
事實上,高階方法對於這些用例來說,在計算上是非常浪費的。
但高階方法並不是說沒有用,它通常在鏈路預測任務中表現得更好。
有趣的是,連結預測性能的差距,在人工創建的圖中是不存在的。這表明高階方法,確實學習了一些真實世界圖形固有的結構。
但對於可視化而言,一階方法會更好一些。高階方法的可視化往往有其採樣的偽影。
例如,Node2Vec可視化往往具有拉長/絲狀結構,這些結構來自於長單鏈隨機漫步的嵌入。
下面是 Owen Cornec 的可視化效果:
最後,有時簡單的方法勝過高階方法(在 OGB 論文中有一個實例)。
這裡存在的一個問題是,我們不知道一個方法什麼時候比另一個方法會更好些,我們絕對不知道其中的原因。
不同的圖類型,對於不同的方法表示所反映出來的性能好壞,是有其原因的,但這是一個懸而未決的問題。
很大一部分的原因,是研究領域被沒用的新算法給淹沒了。
為什麼會這樣呢?繼續往下看。
學術的激勵(incentive),與學術的進步背道而馳下面是「憤世嫉俗者」對機器學習論文製作的一些觀點:
採用現存的一些算法
添加一些新的圖層/超參數,編一個可愛的數學故事來解釋它為什麼重要
網格搜索你的超參數,直到你打破原始文件的基線
絕對不要在你的搜索結果區域中,將你正在比較的東西網格化
為你的新方法做一個可愛的首字母縮寫,把不可能使用的Python2代碼放到GitHub上
BTW:我太討厭Node2Vec了我一個副項目是一個節點嵌入庫,目前最流行的方法是 Node2Vec。
不要使用Node2Vec!
取p=1和q=1的Node2Vec是Deepwalk算法,Deepwalk是一種實際的創新。
Node2Vec 的作者們緊跟著剛才提到的那5個步驟,包括步驟5提到的名字上的加分(因為word2vec很出名)。
這並不是什麼學術造假,而是讓ML社區變得更糟。
當然,Node2Vec也不應該被引用7500次。
學術進步,應該更加關注實際40多年來,我們已經知道如何訓練神經網絡。然而,直到2012年,它們才在 AlexNet 上大受歡迎。
是因為實現和硬體達到了深度學習可行的程度。
類似地,我們至少在20年前就知道把單詞共現矩陣分解成單詞嵌入。
但詞條嵌入直到2013年,隨著Word2Vec才爆發。
這裡的突破在於,基於小批量(minibatch)的方法,可以讓你在硬體上訓練維基百科規模的嵌入模型。
如果對少量數據進行訓練,還需要數天或數周,那麼一個領域的方法就很難取得進展。
效率對於學術進步至關重要深度學習研究之所以能夠取得如此成功,是因為它提高了效率,並且擁有了更好的庫和硬體支持。
學術規範太糟糕你花費在 p 和 q 上的 Node2Vec 網格搜索的時間,都可以更好地利用 Deepwalk 本身的網格搜索。
問題是人們不會在Deepwalk中網格搜索,因為實現都很糟糕。
體系結構並不重要今年最重要的論文之一是 OpenAI 的「Scaling laws」論文,其中模型中參數的原始數量是整體性能最具預測性的特徵。
這一點,甚至在原始的BERT論文中也有所提及,並且推動了2020年大規模語言模型的增長。
Transformer也可能取代卷積。正如Yannic Kilcher所說,Transformer正在毀掉一切,他們在圖上進行研究,事實上,它是在基準測試時似乎是比較成功的方法之一。
研究人員似乎在結構上投入了大量的精力,但是最終這並不重要,因為你可以通過疊加更多的層來近似任何東西。
效率的勝利是偉大的,但神經網絡架構只是實現這一目標的一種方式,而且由於對這一領域的過度研究,我們將在其他地方留下遺憾。
圖形數據結構簡直糟糕透了NetworkX是個糟糕的庫。
如果你在為嬰兒做小圖,它很好,但對於任何嚴肅的事情,它都會讓你窒息,迫使你重寫所有的東西……
這叫庫?Really?
在這一點上,大多數處理大型圖的人,最終都會手工滾動一些數據結構。
但這很困難,因為你的計算機內存是一個由1和0組成的一維數組,一個圖沒有明顯的一維映射。
如果我們考慮更新圖表(添加/刪除一些節點/邊) ,這就更難了。
全局方法是個死胡同一次處理整個圖的方法不能利用計算,因為它們在一定規模上耗盡了RAM。
因此,任何希望成為新標準的方法,都需要能夠對圖的某些部分進行逐段更新。
今後,採樣效率(Sampling Efficiency)將在未來更加重要:
邊緣局部方法:我所知道的包括GloVe 和 GGVec。
隨機漫步採樣:Deepwalk 及其後代使用這種方法,通常用於節點嵌入,而不是 GNN 方法。
近鄰採樣:這是目前GNN中最常見的一種,可以是低階或高階,這取決於鄰居的大小。
但對於這樣的猛烈抨擊,Reddit網友們mhwalker,似乎有不一樣的聲音。
大多數情況下,規模問題在工業上得到了解決。我們在數十億個節點和數百億個邊上訓練GNN。我們可以毫無問題地水平擴展。
但也正如你說的,這些文獻大多數是無用的。
至於被問如何解決的,帖子作者做出了回復,並提到了阿里巴巴的一篇論文:
阿里巴巴有一篇關於其基礎設施的論文,闡述了他們是如何做到這一點的。
Pinterest主要使用GraphSAGE與鄰裡抽樣。Instagram使用一個node2vec實現(可能是handrolled)。
那麼對於這樣的討論,你怎麼看?
參考連結:
https://www.reddit.com/r/MachineLearning/comments/kqazpd/d_why_im_lukewarm_on_graph_neural_networks/
本文系網易新聞•網易號特色內容激勵計劃籤約帳號【量子位】原創內容,未經帳號授權,禁止隨意轉載。
一鍵三連「分享」、「點讚」和「在看」
科技前沿進展日日相見~