Transformers是一種圖神經(jīng)網(wǎng)絡(luò)
點(diǎn)擊上方“AI公園”,關(guān)注公眾號,選擇加“星標(biāo)“或“置頂”
作者:Chaitanya Joshi
編譯:ronghuaiyang
這個(gè)觀點(diǎn)的目的是構(gòu)建Transformer結(jié)構(gòu)背后的NLP上的直覺,以及與圖神經(jīng)網(wǎng)絡(luò)的聯(lián)系。

工程師朋友經(jīng)常問我:“圖深度學(xué)習(xí)”聽起來很厲害,但有什么大的商業(yè)成功的故事嗎?它有沒有被部署在實(shí)際app中?
除了Pinterest、阿里巴巴和Twitter的推薦系統(tǒng)外,一個(gè)非常小的成功就是Transformer結(jié)構(gòu),這個(gè)結(jié)構(gòu)帶來了NLP的風(fēng)暴。
通過這篇文章,我想在Graph Neural Networks (GNNs)和transformer之間建立聯(lián)系。我會討論NLP和GNN社區(qū)中,模型架構(gòu)背后的直覺,使用方程和圖把這兩者建立聯(lián)系,并討論如何把這兩個(gè)放到一起工作來得到進(jìn)展。
讓我們先談?wù)勀P图軜?gòu)的目的 —— 表示學(xué)習(xí)。
NLP的表示學(xué)習(xí)
在較高的層次上,所有的神經(jīng)網(wǎng)絡(luò)架構(gòu)都將輸入數(shù)據(jù)構(gòu)建為向量/嵌入的“表示”,它們編碼和數(shù)據(jù)有關(guān)的有用的統(tǒng)計(jì)和語義信息。這些潛在的或隱藏的表示可以用于執(zhí)行一些有用的操作,比如對圖像進(jìn)行分類或翻譯句子。神經(jīng)網(wǎng)絡(luò)通過接收反饋(通常是通過誤差/損失函數(shù))來“學(xué)習(xí)”,建立越來越好的表示。
對于自然語言處理(NLP),通常,遞歸神經(jīng)網(wǎng)絡(luò)(RNNs)以順序的方式構(gòu)建句子中每個(gè)單詞的表示,即,一次一個(gè)單詞。直觀地說,我們可以把RNN層想象成一條傳送帶,上面的文字從左到右進(jìn)行遞歸處理。最后,我們得到了句子中每個(gè)單詞的隱藏特征,我們將其傳遞給下一個(gè)RNN層或用于我們的NLP任務(wù)。

Transformers最初是為機(jī)器翻譯而引入的,現(xiàn)在已經(jīng)逐漸取代了主流NLP中的RNNs。這個(gè)架構(gòu)使用了一種全新的方式來進(jìn)行表示學(xué)習(xí):不需要進(jìn)行遞歸,Transformers使用注意力機(jī)制構(gòu)建每個(gè)單詞的特征,找出句子中的其他詞對于前面之前的詞的重要程度。知道了這一點(diǎn),單詞的特征更新就是所有其他單詞特征的線性變換的總和,并根據(jù)它們的重要性進(jìn)行加權(quán)。
拆解Transformer
讓我們通過將前一段翻譯成數(shù)學(xué)符號和向量的語言來發(fā)展關(guān)于架構(gòu)的直覺。我們在句子S中從第l層到第l+1層更新第i個(gè)單詞的隱藏特征h:

其中j∈S表示句子中的詞集,Q、K、V為可學(xué)習(xí)的線性權(quán)值(分別表示注意力計(jì)算的Query、Key和V值)。對于Transformers,注意力機(jī)制是對句子中的每個(gè)單詞并行執(zhí)行的,RNNs是一個(gè)詞一個(gè)詞的進(jìn)行更新。
通過以下pipeline,我們可以更好地了解注意力機(jī)制:

用這個(gè)詞的特征h_i ^?^和句子中的其他的詞的特征h_j ^?^,?j∈S,我們通過點(diǎn)積為每一對(i, j)計(jì)算注意力權(quán)重w~ij~,然后對所有的j計(jì)算softmax。最后,對所有的h_j ^?^進(jìn)行加權(quán)求和,產(chǎn)生更新的詞的特征h_i ^{?+ 1}。句子中的每個(gè)詞都并行地經(jīng)歷同一個(gè)pipeline,以更新其特征。
多頭注意力機(jī)制
要讓這種點(diǎn)積注意力機(jī)制發(fā)揮作用是很棘手的,因?yàn)殡S機(jī)初始化會破壞學(xué)習(xí)過程的穩(wěn)定性。我們可以通過并行地執(zhí)行多個(gè)“頭”的注意力,并連接結(jié)果來克服這個(gè)問題(現(xiàn)在每個(gè)頭都有獨(dú)立的可學(xué)習(xí)的權(quán)重):

其中,Q^k^,K^k^,V^k^是第k個(gè)注意力頭的可學(xué)習(xí)的權(quán)重,O是降維投影,為了匹配特征的維度。
多個(gè)頭可以讓注意力機(jī)制從本質(zhì)上“對沖賭注”,觀察前一層隱藏特征的不同的轉(zhuǎn)換或不同的方面。我們稍后會詳細(xì)討論。
尺度問題以及前饋層
Transformer架構(gòu)的一個(gè)關(guān)鍵問題是,詞的特征在注意力機(jī)制之后可能是不同尺度,(1)這是由于當(dāng)對其他的單詞特征進(jìn)行求和的時(shí)候,這些單詞的權(quán)重可能有非常shape的分布。(2)在個(gè)體的特征向量層面上,拼接多個(gè)注意力頭可能輸出不同的尺度的值,導(dǎo)致最后的值具有很寬的動態(tài)范圍。照傳統(tǒng)的ML的經(jīng)驗(yàn),在pipeline中添加一歸一化層似乎是合理的。
Transformer通過LayerNorm克服了問題,它在特征級別歸一化和學(xué)習(xí)仿射變換。此外,通過特征維度的平方根來縮放點(diǎn)積注意力有助于抵消問題(1)。
最后,作者提出了另一個(gè)控制尺度問題的“技巧”:一個(gè)position-wise的2層MLP。多頭的注意力之后,通過一個(gè)可學(xué)習(xí)的權(quán)重,他們把向量*h_i ^{?+ 1}*投影到更高的維度上,然后通過ReLU再投影回原來的尺寸,再接另一個(gè)歸一化:

老實(shí)說,我不確定這個(gè)過于參數(shù)化的前饋?zhàn)訉颖澈蟮拇_切直覺是什么,而且似乎也沒有人對它提出問題!我認(rèn)為LayerNorm和縮放的點(diǎn)積并沒有完全解決這個(gè)問題,所以大的MLP是一種獨(dú)立地重新縮放特征向量的hack。
Transformer層的最終看起來是這樣的:

Transformer架構(gòu)也非常適合深度網(wǎng)絡(luò),使得NLP社區(qū)在模型參數(shù)和數(shù)據(jù)方面都能進(jìn)行擴(kuò)展。每個(gè)多頭注意子層和前饋?zhàn)訉拥妮斎牒洼敵鲋g的殘差連接是疊加Transformer層的關(guān)鍵(但為了清楚起見在圖中省略)。
用GNNs構(gòu)建圖的表示
讓我們暫時(shí)離開NLP。
圖神經(jīng)網(wǎng)絡(luò)(GNNs)或圖卷積網(wǎng)絡(luò)(GCNs)構(gòu)建圖數(shù)據(jù)中的節(jié)點(diǎn)和邊的表示。它們通過鄰域聚合(或消息傳遞)來實(shí)現(xiàn),其中每個(gè)節(jié)點(diǎn)從其鄰域收集特征,以更新其周圍的局部的圖結(jié)構(gòu)的表示。堆疊幾個(gè)GNN層使模型能夠在整個(gè)圖中傳播每個(gè)節(jié)點(diǎn)的特征 —— 從它的鄰居傳播到鄰居的鄰居,等等。

在其最基本的形式中,GNN在第?層通過對節(jié)點(diǎn)自身的特征和鄰居節(jié)點(diǎn)的特征非線性變換的方式進(jìn)行聚合,更新節(jié)點(diǎn)i的隱藏特征h:

其中U、V為GNN層的可學(xué)習(xí)權(quán)重矩陣,σ為ReLU等非線性變換。
鄰居節(jié)點(diǎn)的總和*j∈N(i)*可以被其他輸入大小不變的聚合函數(shù)代替,比如簡單的mean/max,或者更強(qiáng)大的函數(shù),比如通過注意力機(jī)制的加權(quán)和。
聽起來耳熟嗎?
也許一個(gè)pipeline有助于建立聯(lián)系:

如果我們將多個(gè)并行的鄰域頭進(jìn)行聚合,并將鄰域j的求和替換為注意力機(jī)制,即加權(quán)和,我們就得到圖注意力網(wǎng)絡(luò) (GAT)。加上歸一化和前饋MLP,看,我們得到一個(gè)圖Transformer!
句子是完全聯(lián)通的詞圖
為了使這種聯(lián)系更加明確,可以把一個(gè)句子看作是一個(gè)完全連通的圖,其中每個(gè)單詞都與其他單詞相連。現(xiàn)在,我們可以使用GNN為圖(句子)中的每個(gè)節(jié)點(diǎn)(單詞)構(gòu)建特征,然后我們可以使用它執(zhí)行NLP任務(wù)。

廣義上說,這就是Transformers 正在做的事情:它們是帶有多頭注意力的GNN,作為鄰居的聚合函數(shù)。標(biāo)準(zhǔn)的GNNs從其局部鄰居節(jié)點(diǎn)j∈N(i)中聚合特征,而NLP的Transformers將整個(gè)句子S作為局部鄰居,從每一層的每個(gè)單詞j∈S中聚合特征。
重要的是,各種針對特定問題的技巧 —— 比如位置編碼、因果/隱藏聚合、學(xué)習(xí)率策略和預(yù)訓(xùn)練 ——對Transformers 的成功至關(guān)重要,但很少在GNN社區(qū)中出現(xiàn)。同時(shí),從GNN的角度來看Transformers可以讓我們擺脫架構(gòu)中的許多花哨的東西。
我們可以相互學(xué)到點(diǎn)什么?
現(xiàn)在我們已經(jīng)在Transformers和GNN之間建立了聯(lián)系,讓我來談?wù)劇?/span>
全連通圖是NLP的最佳輸入格式嗎?
在統(tǒng)計(jì)NLP和ML之前,像Noam Chomsky這樣的語言學(xué)家專注于發(fā)展語言結(jié)構(gòu)的正式理論,比如語法樹/圖。Tree LSTMs已經(jīng)嘗試過了,但是也許transformer/GNNs是更好的架構(gòu),可以讓語言理論和統(tǒng)計(jì)NLP的世界更靠近?

如何學(xué)習(xí)長期的依賴?
完全連通圖的另一個(gè)問題是,它們讓學(xué)習(xí)單詞之間的長期依賴關(guān)系變得很困難。這僅僅是因?yàn)閳D中的邊的數(shù)量是如何隨著節(jié)點(diǎn)的數(shù)量以平方量級增長的。在一個(gè)有n個(gè)單詞的句子中,一個(gè)Transformer/GNN將對n^2^個(gè)單詞對進(jìn)行計(jì)算。對于非常大的n,就沒辦法處理了。
NLP社區(qū)對長序列和依賴問題的看法很有趣:讓注意力力機(jī)制變得稀疏或者可以自適應(yīng)輸入的大小,對每一層添加遞歸或壓縮,使用局部敏感哈希來獲得有效的注意力,都是改善Transformer的有前途的新想法。
看到來自GNN社區(qū)的想法加入其中將是很有趣的,例如使用劃分二部圖的方式用于句子圖稀疏化似乎是另一種令人興奮的方法。

Transformers在學(xué)習(xí)“神經(jīng)語法嗎” ?
有幾個(gè)有趣的文章來自NLP社區(qū),是有關(guān)Transformers可能正在學(xué)習(xí)的內(nèi)容。它的基本前提是,對句子中的所有詞進(jìn)行關(guān)注,以確定對哪些詞最感興趣,從而使“Transformers”能夠?qū)W習(xí)一些類似于特定任務(wù)語法的東西。在多頭注意力中,不同的頭也可能“看”不同的句法屬性。
用圖的術(shù)語來說,通過在全圖上使用GNN,我們能從GNN如何在每一層執(zhí)行鄰居的聚合來恢復(fù)最重要的邊緣(以及它們可能包含的內(nèi)容)嗎?對于這個(gè)觀點(diǎn),我并不那么信服。

為什是多頭注意力?為什么是注意力?
我更贊同多頭機(jī)制的優(yōu)化視圖 —— 擁有多個(gè)注意力頭改進(jìn)了學(xué)習(xí)并克服了錯(cuò)誤的隨機(jī)初始化。例如,這些論文表明Transformer 頭可以在訓(xùn)練被“修剪”或刪除,而不會對性能產(chǎn)生顯著影響。
多頭鄰居聚合機(jī)制在GNNs中也被證明是有效的,例如,GAT使用相同的多頭注意力和MoNet使用多個(gè)高斯核聚合特征。雖然是為了穩(wěn)定注意力機(jī)制而發(fā)明的,但是多頭機(jī)制會成為壓榨模型性能的標(biāo)準(zhǔn)操作嗎?
相反,具有簡單聚合函數(shù)(如sum或max)的GNN不需要多個(gè)聚合頭進(jìn)行穩(wěn)定的訓(xùn)練。如果我們不需要計(jì)算句子中每個(gè)詞對之間的配對兼容性,對Transformers來說不是很好嗎?
Transformers能從完全擺脫注意力中獲益嗎?Yann Dauphin和合作者的最近工作提出了一種替代的ConvNet的架構(gòu)。Transformers也可能最終會做一些類似的事情。

為什么訓(xùn)練Transformers 這么難?
閱讀Transformer的新論文讓我覺得,在確定最佳學(xué)習(xí)率策略、熱身策略和衰變設(shè)置時(shí),訓(xùn)練這些模型需要類似于“黑魔法”的東西。這可能只是因?yàn)槟P吞罅?,而NLP的研究任務(wù)太具有挑戰(zhàn)性了。
最近的研究結(jié)果認(rèn)為,也可能是因?yàn)闅w一化的具體排列和架構(gòu)內(nèi)的殘差連接的原因。

在這一點(diǎn)上,我很憤怒,但這讓我懷疑:我們真的需要多個(gè)頭的昂貴的兩兩的注意力嗎,過分參數(shù)化的MLP層,和復(fù)雜的學(xué)習(xí)率策略嗎?
我們真的需要擁有這么大的模型嗎?
對于手頭的任務(wù)來說,具有良好的歸納偏差的架構(gòu)不應(yīng)該更容易訓(xùn)練嗎?
進(jìn)一步的閱讀
這個(gè)博客并不是第一個(gè)將GNNs和Transformers聯(lián)系起來的博客:以下是Arthur Szlam關(guān)于注意力/記憶網(wǎng)絡(luò)、GNNs和Transformers之間的歷史和聯(lián)系的精彩演講:https://ipam.wistia.com/medias/1zgl4lq6nh。同樣,DeepMind的明星云集的position paper引入了圖網(wǎng)絡(luò)框架,統(tǒng)一了所有這些想法。DGL團(tuán)隊(duì)有一個(gè)關(guān)于把seq2seq問題轉(zhuǎn)化為GNN的很好的教程:https://docs.dgl.ai/en/latest/tutorials/models/4_old_wines/7_transformer.html

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