Transformers是一種圖神經網絡

ai公園 發佈 2020-07-02T23:55:13+00:00

通過這篇文章,我想在Graph Neural Networks 和transformer之間建立聯繫。我會討論NLP和GNN社區中,模型架構背後的直覺,使用方程和圖把這兩者建立聯繫,並討論如何把這兩個放到一起工作來得到進展。

作者:Chaitanya Joshi

編譯:ronghuaiyang

導讀

這個觀點的目的是構建Transformer結構背後的NLP上的直覺,以及與圖神經網絡的聯繫。

工程師朋友經常問我:「圖深度學習」聽起來很厲害,但有什麼大的商業成功的故事嗎?它有沒有被部署在實際app中?

除了Pinterest、阿里巴巴和Twitter的推薦系統外,一個非常小的成功就是Transformer結構,這個結構帶來了NLP的風暴。

通過這篇文章,我想在Graph Neural Networks (GNNs)和transformer之間建立聯繫。我會討論NLP和GNN社區中,模型架構背後的直覺,使用方程和圖把這兩者建立聯繫,並討論如何把這兩個放到一起工作來得到進展。

讓我們先談談模型架構的目的 —— 表示學習。

NLP的表示學習

在較高的層次上,所有的神經網絡架構都將輸入數據構建為向量/嵌入的「表示」,它們編碼和數據有關的有用的統計和語義信息。這些潛在的或隱藏的表示可以用於執行一些有用的操作,比如對圖像進行分類或翻譯句子。神經網絡通過接收反饋(通常是通過誤差/損失函數)來「學習」,建立越來越好的表示。

對於自然語言處理(NLP),通常,遞歸神經網絡(RNNs)以順序的方式構建句子中每個單詞的表示,即,一次一個單詞。直觀地說,我們可以把RNN層想像成一條傳送帶,上面的文字從左到右進行遞歸處理。最後,我們得到了句子中每個單詞的隱藏特徵,我們將其傳遞給下一個RNN層或用於我們的NLP任務。

RNNs以順序的方式構建句子中每個單詞的表示。一次一個單詞。另一方面,Transformers 使用一種注意機制來判斷句子中其他詞對上述詞的重要性。

Transformers最初是為機器翻譯而引入的,現在已經逐漸取代了主流NLP中的RNNs。這個架構使用了一種全新的方式來進行表示學習:不需要進行遞歸,Transformers使用注意力機制構建每個單詞的特徵,找出句子中的其他詞對於前面之前的詞的重要程度。知道了這一點,單詞的特徵更新就是所有其他單詞特徵的線性變換的總和,並根據它們的重要性進行加權。


拆解Transformer

讓我們通過將前一段翻譯成數學符號和向量的語言來發展關於架構的直覺。我們在句子S中從第l層到第l+1層更新第i個單詞的隱藏特徵h:

其中j∈S表示句子中的詞集,Q、K、V為可學習的線性權值(分別表示注意力計算的Query、Key和V值)。對於Transformers,注意力機制是對句子中的每個單詞並行執行的,RNNs是一個詞一個詞的進行更新。

通過以下pipeline,我們可以更好地了解注意力機制:

用這個詞的特徵h_i ^ℓ^和句子中的其他的詞的特徵h_j ^ℓ^,∀j∈S,我們通過點積為每一對(i, j)計算注意力權重w~ij~,然後對所有的j計算softmax。最後,對所有的h_j ^ℓ^進行加權求和,產生更新的詞的特徵h_i ^{ℓ+ 1}。句子中的每個詞都並行地經歷同一個pipeline,以更新其特徵。

多頭注意力機制

要讓這種點積注意力機制發揮作用是很棘手的,因為隨機初始化會破壞學習過程的穩定性。我們可以通過並行地執行多個「頭」的注意力,並連接結果來克服這個問題(現在每個頭都有獨立的可學習的權重):

其中,Q^k^,K^k^,V^k^是第k個注意力頭的可學習的權重,O是降維投影,為了匹配特徵的維度。

多個頭可以讓注意力機制從本質上「對沖賭注」,觀察前一層隱藏特徵的不同的轉換或不同的方面。我們稍後會詳細討論。


尺度問題以及前饋層

Transformer架構的一個關鍵問題是,詞的特徵在注意力機制之後可能是不同尺度,(1)這是由於當對其他的單詞特徵進行求和的時候,這些單詞的權重可能有非常shape的分布。(2)在個體的特徵向量層面上,拼接多個注意力頭可能輸出不同的尺度的值,導致最後的值具有很寬的動態範圍。照傳統的ML的經驗,在pipeline中添加一歸一化層似乎是合理的。

Transformer通過LayerNorm克服了問題,它在特徵級別歸一化和學習仿射變換。此外,通過特徵維度的平方根來縮放點積注意力有助於抵消問題(1)。

最後,作者提出了另一個控制尺度問題的「技巧」:一個position-wise的2層MLP。多頭的注意力之後,通過一個可學習的權重,他們把向量*h_i ^{ℓ+ 1}*投影到更高的維度上,然後通過ReLU再投影回原來的尺寸,再接另一個歸一化:

老實說,我不確定這個過於參數化的前饋子層背後的確切直覺是什麼,而且似乎也沒有人對它提出問題!我認為LayerNorm和縮放的點積並沒有完全解決這個問題,所以大的MLP是一種獨立地重新縮放特徵向量的hack。


Transformer層的最終看起來是這樣的:

Transformer架構也非常適合深度網絡,使得NLP社區在模型參數和數據方面都能進行擴展。每個多頭注意子層和前饋子層的輸入和輸出之間的殘差連接是疊加Transformer層的關鍵(但為了清楚起見在圖中省略)。

用GNNs構建圖的表示

讓我們暫時離開NLP。

圖神經網絡(GNNs)或圖卷積網絡(GCNs)構建圖數據中的節點和邊的表示。它們通過鄰域聚合(或消息傳遞)來實現,其中每個節點從其鄰域收集特徵,以更新其周圍的局部的圖結構的表示。堆疊幾個GNN層使模型能夠在整個圖中傳播每個節點的特徵 —— 從它的鄰居傳播到鄰居的鄰居,等等。

以這個表情社交網絡為例:GNN產生的節點特徵可以用於預測任務,如識別最有影響力的成員或提出潛在的聯繫

在其最基本的形式中,GNN在第ℓ層通過對節點自身的特徵和鄰居節點的特徵非線性變換的方式進行聚合,更新節點i的隱藏特徵h:

其中U、V為GNN層的可學習權重矩陣,σ為ReLU等非線性變換。

鄰居節點的總和*j∈N(i)*可以被其他輸入大小不變的聚合函數代替,比如簡單的mean/max,或者更強大的函數,比如通過注意力機制的加權和。

聽起來耳熟嗎?

也許一個pipeline有助於建立聯繫:

如果我們將多個並行的鄰域頭進行聚合,並將鄰域j的求和替換為注意力機制,即加權和,我們就得到圖注意力網絡 (GAT)。加上歸一化和前饋MLP,看,我們得到一個圖Transformer


句子是完全聯通的詞圖

為了使這種聯繫更加明確,可以把一個句子看作是一個完全連通的圖,其中每個單詞都與其他單詞相連。現在,我們可以使用GNN為圖(句子)中的每個節點(單詞)構建特徵,然後我們可以使用它執行NLP任務。

廣義上說,這就是Transformers 正在做的事情:它們是帶有多頭注意力的GNN,作為鄰居的聚合函數。標準的GNNs從其局部鄰居節點j∈N(i)中聚合特徵,而NLP的Transformers將整個句子S作為局部鄰居,從每一層的每個單詞j∈S中聚合特徵。

重要的是,各種針對特定問題的技巧 —— 比如位置編碼、因果/隱藏聚合、學習率策略和預訓練 ——對Transformers 的成功至關重要,但很少在GNN社區中出現。同時,從GNN的角度來看Transformers可以讓我們擺脫架構中的許多花哨的東西。

我們可以相互學到點什麼?

現在我們已經在Transformers和GNN之間建立了聯繫,讓我來談談……

全連通圖是NLP的最佳輸入格式嗎?

在統計NLP和ML之前,像Noam Chomsky這樣的語言學家專注於發展語言結構的正式理論,比如語法樹/圖。Tree LSTMs已經嘗試過了,但是也許transformer/GNNs是更好的架構,可以讓語言理論和統計NLP的世界更靠近?

如何學習長期的依賴?

完全連通圖的另一個問題是,它們讓學習單詞之間的長期依賴關係變得很困難。這僅僅是因為圖中的邊的數量是如何隨著節點的數量以平方量級增長的。在一個有n個單詞的句子中,一個Transformer/GNN將對n^2^個單詞對進行計算。對於非常大的n,就沒辦法處理了。

NLP社區對長序列和依賴問題的看法很有趣:讓注意力力機制變得稀疏或者可以自適應輸入的大小,對每一層添加遞歸或壓縮,使用局部敏感哈希來獲得有效的注意力,都是改善Transformer的有前途的新想法。

看到來自GNN社區的想法加入其中將是很有趣的,例如使用劃分二部圖的方式用於句子圖稀疏化似乎是另一種令人興奮的方法。

Transformers在學習「神經語法嗎」 ?

有幾個有趣的文章來自NLP社區,是有關Transformers可能正在學習的內容。它的基本前提是,對句子中的所有詞進行關注,以確定對哪些詞最感興趣,從而使「Transformers」能夠學習一些類似於特定任務語法的東西。在多頭注意力中,不同的頭也可能「看」不同的句法屬性。

用圖的術語來說,通過在全圖上使用GNN,我們能從GNN如何在每一層執行鄰居的聚合來恢復最重要的邊緣(以及它們可能包含的內容)嗎?對於這個觀點,我並不那麼信服。

為什麼是多頭注意力?為什麼是注意力?

我更贊同多頭機制的優化視圖 —— 擁有多個注意力頭改進了學習並克服了錯誤的隨機初始化。例如,這些論文表明Transformer 頭可以在訓練被「修剪」或刪除,而不會對性能產生顯著影響。

多頭鄰居聚合機制在GNNs中也被證明是有效的,例如,GAT使用相同的多頭注意力和MoNet使用多個高斯核聚合特徵。雖然是為了穩定注意力機制而發明的,但是多頭機制會成為壓榨模型性能的標準操作嗎?

相反,具有簡單聚合函數(如sum或max)的GNN不需要多個聚合頭進行穩定的訓練。如果我們不需要計算句子中每個詞對之間的配對兼容性,對Transformers來說不是很好嗎?

Transformers能從完全擺脫注意力中獲益嗎?Yann Dauphin和合作者的最近工作提出了一種替代的ConvNet的架構。Transformers也可能最終會做一些類似的事情。

為什麼訓練Transformers 這麼難?

閱讀Transformer的新論文讓我覺得,在確定最佳學習率策略、熱身策略和衰變設置時,訓練這些模型需要類似於「黑魔法」的東西。這可能只是因為模型太大了,而NLP的研究任務太具有挑戰性了。

最近的研究結果認為,也可能是因為歸一化的具體排列和架構內的殘差連接的原因。

在這一點上,我很憤怒,但這讓我懷疑:我們真的需要多個頭的昂貴的兩兩的注意力嗎,過分參數化的MLP層,和複雜的學習率策略嗎?

我們真的需要擁有這麼大的模型嗎?

對於手頭的任務來說,具有良好的歸納偏差的架構不應該更容易訓練嗎?

進一步的閱讀

這個博客並不是第一個將GNNs和Transformers聯繫起來的博客:以下是Arthur Szlam關於注意力/記憶網絡、GNNs和Transformers之間的歷史和聯繫的精彩演講:https://ipam.wistia.com/medias/1zgl4lq6nh。同樣,DeepMind的明星雲集的position paper引入了圖網絡框架,統一了所有這些想法。DGL團隊有一個關於把seq2seq問題轉化為GNN的很好的教程:https://docs.dgl.ai/en/latest/tutorials/models/4_old_wines/7_transformer.html

英文原文:https://towardsdatascience.com/transformers-are-graph-neural-networks-bca9f75412aa

關鍵字: