圖1.來源:Arseny Togulev在Unsplash上的照片
一、說明
????????這是一篇 長文 ,幾乎討論了人們需要了解的有關注意力機制的所有信息,包括自我注意、查詢、鍵、值、多頭注意力、屏蔽多頭注意力和轉換器,包括有關 BERT 和 GPT 的一些細節。因此,我將本文分為兩部分。在本文中,我將介紹所有注意力塊,在下一個故事中,我將深入探討變壓器網絡架構。
二、RNN背景知識提要?
- RNN 面臨的挑戰以及轉換器模型如何幫助克服這些挑戰
- 注意力機制
2.1 自我注意
2.2 查詢、鍵和值
2.3 注意力的神經網絡表示
2.4 多頭注意力
3. 變形金剛(下篇繼續)
2.1 介紹
????????注意力機制于2014年首次用于計算機視覺,試圖理解神經網絡在進行預測時正在查看的內容。這是嘗試理解卷積神經網絡(CNN)輸出的第一步。2015年,注意力首先用于對齊機器翻譯中的自然語言處理(NLP)。最后,在2017年,注意力機制被用于Transformer網絡中的語言建模。此后,變壓器已經超越了遞歸神經網絡(RNN)的預測精度,成為NLP任務的最新技術。
2.2 . RNN 的挑戰以及轉換器模型如何幫助克服這些挑戰
????????1.1?RNN 問題 1?— 遇到長期依賴問題。RNN 不適用于長文本文檔。
????????變壓器解決方案?— 變壓器網絡幾乎只使用注意力塊。注意力有助于在序列的任何部分之間建立連接,因此長期依賴不再是問題。對于變壓器,長期依賴性與任何其他短程依賴性具有相同的可能性。
????????1.2.?RNN 問題 2?— 遭受梯度消失和梯度爆炸。
????????變壓器解決方案?— 幾乎沒有梯度消失或爆炸問題。在變壓器網絡中,整個序列是同時訓練的,并且在此基礎上僅添加幾層。因此,梯度消失或爆炸很少成為問題。
????????1.3. RNN?問題 3 — RNN?需要更大的訓練步驟才能達到局部/全局最小值。RNN可以可視化為一個非常深的展開網絡。網絡的大小取決于序列的長度。這產生了許多參數,并且這些參數中的大多數是相互關聯的。因此,優化需要更長的訓練時間和很多步驟。
????????變壓器解決方案?— 比 RNN 需要更少的訓練步驟。
????????1.4. RNN?問題 4 — RNN?不允許并行計算。GPU 有助于實現并行計算。但是RNN作為序列模型工作,也就是說,網絡中的所有計算都是按順序進行的,不能并行化。
????????變壓器解決方案?— 變壓器網絡中沒有重復出現,允許并行計算。因此,每一步都可以并行進行計算。
三. 注意力機制
3.1 自我注意
圖2.解釋自我注意的示例(來源:作者創建的圖片)
????????考慮一下這句話——“吠叫很可愛,他是一只狗”。這句話有9個單詞或標記。如果我們只考慮句子中的“他”這個詞,我們會發現“和”是“是兩個非常接近它的詞。但這些詞并沒有給“他”這個詞任何上下文。相反,“吠叫”和“狗”這兩個詞與句子中的“他”更相關。由此,我們了解到接近并不總是相關的,但上下文在句子中更相關。
????????當這個句子被饋送到計算機時,它將每個單詞視為一個標記t,并且每個標記都有一個單詞嵌入V。但是這些詞嵌入沒有上下文。因此,我們的想法是應用某種權重或相似性來獲得最終的單詞嵌入Y,它比初始嵌入V具有更多的上下文。
????????在嵌入空間中,相似的單詞看起來更靠近或具有相似的嵌入。比如“國王”這個詞會更與“女王”和“皇室”這個詞相關,而不是與“斑馬”這個詞相關。同樣,“斑馬”與“馬”和“條紋”的關系比與“情感”一詞的關系更大。要了解有關嵌入空間的更多信息,請訪問Andrew Ng(NLP和單詞嵌入)的視頻。
????????因此,直覺上,如果“國王”一詞出現在句子的開頭,而“女王”一詞出現在句子的末尾,它們應該相互提供更好的上下文。我們使用這個想法來找到權重向量?W,通過將單詞嵌入相乘(點積)以獲得更多的上下文。所以,在句子中,Bark非常可愛,他是一只狗,而不是按原樣使用單詞嵌入,我們將每個單詞的嵌入相乘。圖 3 應該能更好地說明這一點。
圖3.查找權重并獲得最終嵌入(來源:作者創建的圖像)
????????如圖 3 所示,我們首先通過將第一個單詞的初始嵌入乘以(點積)與句子中所有其他單詞的嵌入來找到權重。這些權重(W11 到 W19)也歸一化為總和為 1。接下來,將這些權重乘以句子中所有單詞的初始嵌入。
????????W11 V1 + W12 V2 + ....W19 V9 = Y1
????????W11 到 W19 都是具有第一個單詞 V1 上下文的權重。因此,當我們將這些權重乘以每個單詞時,我們實際上是在將所有其他單詞重新加權到第一個單詞。因此,從某種意義上說,“吠叫”這個詞現在更傾向于“狗”和“可愛”這兩個詞,而不是緊隨其后的詞。這在某種程度上提供了一些背景。
????????對所有單詞重復此操作,以便每個單詞從句子中的其他單詞中獲得一些上下文。
圖4.上述步驟的圖形表示(來源:作者創建的圖像)
????????圖4使用圖形圖更好地理解了獲得Y1的上述步驟。
????????有趣的是,沒有訓練權重,單詞的順序或接近度彼此沒有影響。此外,該過程不依賴于句子的長度,也就是說,句子中更多或更少的單詞無關緊要。這種為句子中的單詞添加一些上下文的方法稱為自我注意。
3.2 查詢、鍵和值
????????自我注意的問題在于沒有任何東西被訓練。但也許如果我們添加一些可訓練的參數,網絡就可以學習一些模式,從而提供更好的上下文。此可訓練參數可以是訓練其值的矩陣。因此,引入了查詢、鍵和值的概念。
????????讓我們再考慮一下前面的一句話——“吠叫很可愛,他是一只狗”。在自我注意的圖 4 中,我們看到初始詞嵌入 (V) 使用了 3 次。1st作為句子中第一個單詞嵌入和所有其他單詞(包括其自身,2nd)之間的點積以獲得權重,然后再次將它們(第3次)乘以權重,以獲得帶有上下文的最終嵌入。這 3 個出現的 V 可以替換為三個術語查詢、鍵和值。
????????假設我們想使所有單詞與第一個單詞 V1 相似。然后,我們將 V1 作為查詢詞發送。然后,這個查詢詞將對句子中的所有單詞(V1 到 V9)做一個點積——這些就是鍵。因此,查詢和鍵的組合為我們提供了權重。然后將這些權重再次與充當值的所有單詞(V1 到 V9)相乘。我們有它,查詢,鍵和值。如果您仍然有一些疑問,圖 5 應該能夠清除它們。
圖5.表示查詢、鍵和值(來源:作者創建的圖像)
????????但是等等,我們還沒有添加任何可以訓練的矩陣。這很簡單。我們知道,如果將 1 x k 形向量乘以 k x k 形矩陣,我們得到一個 1 x k 形向量作為輸出。記住這一點,讓我們將每個鍵從 V1 乘以 V10 到 V1(每個形狀為 6 x k),并乘以形狀為 k x k 的矩陣 Mk(鍵矩陣)。類似地,查詢向量乘以矩陣 Mq(查詢矩陣),值向量乘以值矩陣 Mv。這些矩陣 Mk、Mq 和 Mv 中的所有值現在都可以由神經網絡訓練,并且比僅僅使用自我注意提供更好的上下文。同樣,為了更好地理解,圖 <> 顯示了我剛才解釋的內容的圖形表示。
圖6.鍵矩陣、查詢矩陣和值矩陣(來源:作者創建的圖像)
????????現在我們知道了鍵、查詢和值的直覺,讓我們看看數據庫分析以及注意力背后的官方步驟和公式。
????????讓我們通過查看數據庫的示例來嘗試理解注意力機制。因此,在數據庫中,如果我們想根據查詢?q 和鍵 k i 檢索某個值 vi,可以執行一些操作,其中我們可以使用查詢來識別對應于某個值的鍵。注意力可以被認為是與此數據庫技術類似的過程,但以更概率的方式。下圖對此進行了演示。
????????圖 7 顯示了在數據庫中檢索數據的步驟。假設我們將一個查詢發送到數據庫中,一些操作會找出數據庫中哪個鍵與查詢最相似。找到密鑰后,它將發送與該密鑰對應的值作為輸出。在圖中,該操作發現查詢與鍵 5 最相似,因此為我們提供了值 5 作為輸出。
圖7.數據庫中的值檢索過程(來源:作者創建的圖像)
????????注意力機制是一種模仿這種檢索過程的神經架構。
- 注意力機制測量查詢 q 和每個鍵值 k i 之間的相似性。
- 此相似性為每個鍵值返回一個權重。
- 最后,它生成一個輸出,該輸出是我們數據庫中所有值的加權組合。
????????從某種意義上說,數據庫檢索和注意力之間的唯一區別是,在數據庫檢索中,我們只得到一個值作為輸入,但在這里我們得到一個值的加權組合。在注意力機制中,如果查詢與鍵 1 和鍵 4 最相似,那么這兩個鍵將獲得最多的權重,輸出將是值 1 和值 4 的組合。
????????圖 8 顯示了從查詢、鍵和值獲取最終注意力值所需的步驟。下面將詳細解釋每個步驟。(鍵值?k?是向量,相似性值?S?是標量,權重值 (softmax) 值?a?是標量,值?V?是向量)
圖8.獲得注意力值的步驟(來源:作者創建的圖像)
第 1 步。
????????步驟 1 包含鍵和查詢以及相應的相似性度量。查詢?q?會影響相似性。我們擁有的是查詢和鍵,并計算相似性。相似性是查詢?q?和鍵?k?的某些函數。查詢和鍵都是一些嵌入向量。相似性?S?可以使用各種方法計算,如圖 9 所示。
圖9.計算相似性的方法(Souce:作者創建的圖像)
????????相似性可以是查詢和鍵的簡單點積。它可以是縮放點積,其中q和k的點積除以每個鍵的維數d的平方根。?這是查找相似性最常用的兩種技術。
????????通常,使用權重矩陣 W 將查詢投影到新空間中,然后使用鍵?k?創建點積。內核方法也可以用作相似性。
第 2 步。
????????第 2 步是查找權重?a。這是使用“SoftMax”完成的。公式如下所示。(exp 是指數級的)
????????相似性像完全連接的層一樣與權重相連。
第 3 步。
????????步驟 3 是 softmax (a) 的結果與相應值 (V) 的加權組合。a 的第一個值乘以?V 的第一個值,然后與?a?的第 1 個值與值?V?的第 2 個值的乘積相加,依此類推。我們獲得的最終輸出是所需的結果注意力值。
三個步驟的摘要:
W在查詢?q?和鍵?k?的幫助下,我們獲得注意值,它是值 V 的加權和/線性組合,權重來自查詢和鍵之間的某種相似性。
3.3 注意力的神經網絡表示
圖 10.注意力塊的神經網絡表示(來源:作者創建的圖像)
圖 10 顯示了注意力塊的神經網絡表示。詞嵌入首先傳遞到一些線性層中。這些線性層沒有“偏差”項,因此只不過是矩陣乘法。其中一個層表示為“鍵”,另一個表示為“查詢”,最后一個層表示為“值”。如果在鍵和查詢之間執行矩陣乘法,然后進行規范化,我們將得到權重。然后將這些權重乘以值并相加,得到最終的注意力向量。這個塊現在可以在神經網絡中使用,被稱為注意力塊。可以添加多個這樣的注意力塊以提供更多上下文。最好的部分是,我們可以獲得梯度反向傳播來更新注意力塊(鍵、查詢、值的權重)。
3.4 多頭注意力
????????為了克服使用單頭注意力的一些陷阱,使用了多頭注意力。讓我們回到那句話——“吠叫很可愛,他是一只狗”。在這里,如果我們使用“狗”這個詞,從語法上我們理解“吠叫”、“可愛”和“他”應該與“狗”這個詞有某種意義或相關性。這些話說,狗的名字叫樹皮,是公狗,是一只可愛的狗。僅憑一種注意力機制未必能正確識別出這三個詞與“狗”相關,我們可以說,這里用“狗”這個詞來表示這三個詞更好。這減少了一個注意力查找所有重要單詞的負擔,也增加了輕松找到更多相關單詞的機會。
????????因此,讓我們添加更多的線性層作為鍵、查詢和值。這些線性層是并行訓練的,并且彼此具有獨立的權重。所以現在,每個值、鍵和查詢都為我們提供了三個輸出,而不是一個。這 3 個鍵和查詢現在提供三種不同的權重。然后用矩陣乘以這三個值,得到三個倍數輸出。這三個注意力塊最終連接起來,給出一個最終的注意力輸出。此表示如圖 11 所示。
圖 11.具有3個線性層的多頭注意力(來源:作者創建的圖像)
????????但 3 只是我們選擇的隨機數。在實際場景中,這些可以是任意數量的線性層,這些層稱為頭部(h)。也就是說,可以有 h?個線性層,給出?h?個注意力輸出,然后將其連接在一起。這正是它被稱為多頭注意力(多頭)的原因。圖 11 的簡化版本,但頭部數量為?h?如圖 12 所示。
圖 12.具有“h”層的多頭注意力(來源:作者創建的圖片)
????????N由于我們了解了注意力、查詢、鍵、值和多頭注意力背后的機制和思想,我們已經涵蓋了變壓器網絡的所有重要構建塊。在下一個故事中,我將討論所有這些塊如何堆疊在一起形成變壓器網絡,并討論一些基于變壓器的網絡,例如BERT和GPT。
四、引用:
2017. 注意力就是你所需要的一切。第31屆神經信息處理系統國際會議論文集(NIPS'17)。Curran Associates Inc.,Red Hook,NY,USA,6000–6010。