<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Transformers是一種圖神經(jīng)網(wǎng)絡

          共 5226字,需瀏覽 11分鐘

           ·

          2022-07-22 10:33













          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

          作者:

          編譯:ronghuaiyang

          導讀

          這個觀點的目的是構建Transformer結構背后的NLP上的直覺,以及與圖神經(jīng)網(wǎng)絡的聯(lián)系。

          工程師朋友經(jīng)常問我:“圖深度學習”聽起來很厲害,但有什么大的商業(yè)成功的故事嗎?它有沒有被部署在實際app中?

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

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

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

          NLP的表示學習

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

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

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

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


          拆解Transformer

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

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

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

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

          多頭注意力機制

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

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

          多個頭可以讓注意力機制從本質(zhì)上“對沖賭注”,觀察前一層隱藏特征的不同的轉換或不同的方面。我們稍后會詳細討論。


          尺度問題以及前饋層

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

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

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

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


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

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

          用GNNs構建圖的表示

          讓我們暫時離開NLP。

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

          以這個表情社交網(wǎng)絡為例:GNN產(chǎn)生的節(jié)點特征可以用于預測任務,如識別最有影響力的成員或提出潛在的聯(lián)系

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

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

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

          聽起來耳熟嗎?

          也許一個pipeline有助于建立聯(lián)系:

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


          句子是完全聯(lián)通的詞圖

          為了使這種聯(lián)系更加明確,可以把一個句子看作是一個完全連通的圖,其中每個單詞都與其他單詞相連?,F(xiàn)在,我們可以使用GNN為圖(句子)中的每個節(jié)點(單詞)構建特征,然后我們可以使用它執(zhí)行NLP任務。

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

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

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

          現(xiàn)在我們已經(jīng)在Transformers和GNN之間建立了聯(lián)系,讓我來談談……

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

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

          如何學習長期的依賴?

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

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

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

          Transformers在學習“神經(jīng)語法嗎” ?

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

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

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

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

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

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

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

          為什么訓練Transformers 這么難?

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

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

          image-20200611142642846

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

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

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

          進一步的閱讀

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

          好消息!

          小白學視覺知識星球

          開始面向外開放啦??????




          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學視覺公眾號后臺回復:Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  翔田千里全部A片 | 俺也搞俺也色俺也干 | 可以看黄片在线看 | 亚洲综合二区 | 无码人妻一区二区三区 |