探索大語言模型:理解Self Attention| 京東物流技術團隊

一、背景知識

在ChatGPT引發全球關注之後,學習和運用大型語言模型迅速成爲了熱門趨勢。作爲程序員,我們不僅要理解其表象,更要探究其背後的原理。究竟是什麼使得ChatGPT能夠實現如此卓越的問答性能?自注意力機制的巧妙融入無疑是關鍵因素之一。那麼,自注意力機制究竟是什麼,它是如何創造出如此驚人的效果的呢?今天,就讓我們共同探索這一機制背後的原理。

在億萬年的進化中,人類具備了快速關注環境中變化因素的能力,從而可以更好地趨利避害。這種能力就是注意力。在機器學習領域中,仿生學的理念也被廣泛的使用。與神經網絡、遺傳算法相同,注意力機制在上世紀80年代,就已經在相關的研究中出現。在初期階段,注意力機制常用於識別和提取圖片中的關鍵信息。比如下圖中,通過注意力算法提取圖片中“停止指示牌”。

 

 

伴隨深度學習算法的進步,在序列輸入(Sequence Input)處理中,注意力機制也得到了較多的應用,其中比較有名的就屬Transformer模型中的自注意力機制了。與無差別的對待每個順序輸入內容的算法相比,自注意力機制可以提取出輸入內容間的相關性,因而取得了更好地結果表現。以詞性分析爲例,現在需要模型來分析句子中每個詞的詞性,輸入的句子爲“I saw a saw”。句子中出現了兩個saw,第一個爲動詞,表示“看到了”的意思。而第二個爲名詞,表示“鋸子”的意思。如果單獨分析每個單詞的詞性,算法模型是無法判斷此單詞是名詞還是動詞。因此,必須要將兩個詞放入同一個上下文中分析,纔可以得到預期的結果。我們通過設置窗口的方式,來獲取連續上下文的效果。窗口的長度與計算的成本將成正相關。因此文本的長度越長,算法模型處理的資源消耗就越多。在大模型中,自注意力機制的引用,就是爲了打破窗口長度與文本內容長度的相關性而設計的。

使用自注意力的模型可以直接計算出當前字符的結果,而不需要依賴前序內容的計算結果。這樣可以保證計算的並行進行,並且不依賴窗口的限制。所以在處理超長序列內容時,其效率會有巨大的提升。

 

 

二、理解注意力機制(Attention mechanism)

注意力機制是模擬人的注意力的算法。可以將其理解成一個函數,可以用來計算兩個向量的相關程度。如果兩個向量相關程度越高,則注意力得分(Attention score)越高。如下圖所示,是計算I向量在N向量上的注意力,I向量是由輸入的第i個token進行詞嵌入得來。N向量輸入第n個token進行詞嵌入得來。其O向量代表結果,是向量I在N上的注意力得分。在對O做處理後(比如多值時的Softmax處理),可以認爲是I在輸入N上的權重。經過注意力計算後,向量I與向量N的得分越高,則說明I與N的相關度越高。這樣在後續的計算中,就可以只關注注意力得分高的向量關係,從而優化了計算效率。

 

 

Attention function是一個確定的函數,在下一章節中會詳細解釋。簡單的理解,在算法層面的注意力,就是兩個向量的相似度計算。當兩個向量相似度高時,此時輸入向量的權重將更大,更抽象的講,此時的輸入向量將獲得更多的注意力傾斜。

三、理解Self Attention

在Transformer框架(一種基於自注意力機制的深度學習模型)中,引用的注意力機制被稱爲自注意力機制(Self Attention,有時稱爲intra-attention)。這是在上一節介紹的基礎上,對順序輸入內容進行了上下文相關的增強,使注意力機制可以更好的注意到整段輸入內其他輸入token的關聯性信息,從而可以爲提取更多信息創造條件。正是自注意力的作用,使得使用Transformer框架的GPT模型,在內容生成方面的效果出衆。

如下圖所示,輸入是一組向量a1~a4,輸出爲經過自注意力計算後的向量組b1~b4。輸入向量a1可能是一組原始的輸入在經過詞嵌入後,得到的向量。輸入向量a1也可能是前序的某隱藏層的輸出。換而言之,自注意力的計算結果,通常會作爲其他層的輸入,幫助模型的後續部分更好的理解輸入向量組中,關聯程度高的向量關係。

 

 

在上圖中,輸出向量b1是,輸入向量a1經過考慮與所有輸入向量的相關性(relevant)後,得到的結果。那麼如何計算a1與a(n)的相關性α呢?這裏就是上一章中提到的計算方式了。下面我們來看下,attention function中具體做了哪些計算。

首先,a1與Wq相乘得到向量q,a(n)與Wk得到向量k。然後,再用向量q與k做點積(Dot Product)計算,得到a1與a(n)的相關性αn。整體過程如下圖所示。其中,WqWk是兩個通過模型訓練而學習得的矩陣,可以理解爲確定的常量,其代表着注意力關注的重點(也可以理解爲知識)。

 

 

在attention function的選擇上,並沒有一個確定的公式。比如在Transformer中,就是使用了一種名爲Scaled Dot-Product Attention的公式算法。因此,具體使用何種算法作爲attention function,是一個開放性的問題,可以根據自己的理解,而嘗試不同的算法。

下面我們來具體看下Transformer的Self Attention都做了哪些優化。在Self Attention中,注意力函數被抽象爲,將Query信息與一個Key-Value數據集進行相關性計算的過程,計算的Output結果爲Key-Value數據集中每對元素與Query的權重值。其中Query、Key、Value和Output均爲向量。此函數被稱爲Scaled Dot-Product Attention。

 

 

讓我們繼續以a1-a4的輸入爲例,拆解一下Transformer中的Scaled Dot-Product Attention的計算過程。

1、將a1與Wq相乘得到向量q1。

2、分別將Wq與a1、a2、a3、a4相乘,得到k1、k2、k3、k4。

3、分別將q1與k(n)點乘,得到a1,n​

4、將a1,1​、a1,2、a1,3​、a1,4​進行softmax計算,得到a1,1′​、a1,2、a1,3′​、a1,4′​這裏使用softmax是一個可替換的方案,也可以使用其他函數代替,比如ReLU

5、分別將Wv與a1、a2、a3、a4相乘,得到v1、v2、v3、v4。

6、最後 ,將v(n)乘以a1,(n)′​,得到矩陣b1。b2、b3、b4的計算過程同理,將輸入的a1分別換成b2、b3、b4即可。

上述過程可以由下圖描述得來。

 

 

如果將a1、a2、a3、a4作爲向量矩陣Ainput,一次性的輸入到self-attention中。我們就可以得到對應的矩陣Q、K、V,即如下公式所示。其中Wq、Wk、Wv是通過模型訓練而學習到的常量係數。

1715676433_664325114362bcf4a29ce.png!small

位置編碼(Positional Encoding)

在上述的自注意力模型中,沒有token對應的位置信息的輸入。但是對於序列輸入來講,位置信息也包含了很重要的信息。比如之前的例子“I saw a saw”中,若去掉了位置信息,兩個saw就無法判別具體是哪種含義。爲了讓Transformer模型關注到位置信息,模型設計者將位置進行了編碼和向量化。這被成爲了位置編碼(Positional Encoding)。

模型設計者使用了sine、cosine函數,對位置進行編碼,函數如下圖。其中,pos代表當前位置,i代表維度。每個維度的位置預測都是一個正弦波,數值在10000⋅2π之間。dmodel​代表了詞嵌入向量維度,使得生成的位置編碼,可以使編碼結果與詞向量直接相加。

 

 

之所以選擇在有限幅度循環震盪的sine、cosine函數進行位置編碼,是爲了讓模型可以預測超過訓練文本最大長度的內容。從而取得更好的泛化效果。

上述的位置編碼函數,只是Transformer模型中使用的。編碼函數的選擇,也是一個暫無確定解的問題。模型的設計者,可以通過自身對位置的理解,而設計不同的位置編碼函數。甚至在有一些論文中,已經使用模型訓練的方式來動態生成位置編碼信息。

四、理解Multi-head attention

Transformer架構爲了能並行提取輸入向量在不同維度的特徵,在Self-attention的基礎上,又提出了多頭注意力(Multi-head attention)的概念。例如,在之前的訓練中,模型分別學習了詞性和句意兩種維度的特徵,分別記爲ΩattributeΩsemanticΩ=(Wq,Wk,Wv)這裏就可以理解爲由兩個頭(head)組成,分別用於提取不同注意力下的特徵。多頭注意力可以用下圖表示,由h個頭組成,分別用於計算不同的特徵值。最後,由Concat方法,將特徵進行合併,並送入下一層處理。

 

 

五、總結

自注意力概念首次在《Attention is all you need》這篇劃時代的論文中被提出,標誌着對注意力機制理解的一大突破。自注意力機制突破了傳統注意力算法的性能侷限,極大地提高了處理大規模數據集的效率。得益於此,模型在處理大數據集的訓練效率主要取決於所投入的硬件資源,效果與之成正比。同時,自注意力機制的並行處理特性與GPU的並行計算能力相得益彰,進一步提升了訓練的效率。因此,隨着時間的流逝和對訓練資源的持續投入,採用自注意力機制的大型語言模型在參數規模上也呈現出穩步的增長。

此外,本文只對與Transformer相關的自注意力機制做了介紹,而對比較經典的注意力機制介紹較少。但是瞭解注意力機制的發展過程,可以更好的幫助自注意力機制的理解。因此,推薦感興趣的讀者,讀一下這篇專門介紹注意力機制發展史的論文《Attention Mechanism in Neural Networks: Where it Comes and Where it Goes》。

文章鏈接

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

Learning to Encode Position for Transformer with Continuous Dynamical Model

臺大視頻鏈接:

https://b23.tv/jBK3VXe

作者:京東物流 陳昊龍

來源:京東雲開發者社區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章