一文讀懂注意力機制,從原理到應用

自從 2017 年**《Attention Is All You Need》**這篇論文發表以來,注意力機制(Attention)已經被廣泛應用在多個領域,主要包括自然語言處理(NLP)和計算機視覺(CV),因爲大家逐漸認識到它們的強大作用。但對我來說,光看論文還不足以真正理解它的原理。

爲了搞清楚注意力機制是怎麼工作的,我查閱了很多文章、看了不少視頻。所以在這篇文章中,我會盡量把我的理解和學習過程寫下來,希望你不需要再像我一樣東奔西找,就能搞懂注意力機制到底是什麼,以及它是如何運作的。

注意力機制簡介

我們用一個例子來理解注意力機制(Attention)。如果我問你,這句臺詞 “A Lannister Always Pays His Debts” 出自哪部美劇?你在思考這個問題時,大腦並不會平均地關注這句話裏的每一個詞。實際上,如果你看過這部劇,你會知道,光是看到 “Lannister” 這個詞,就足以判斷出這句臺詞來自《權力的遊戲》,說這句話的人是 Tyrion Lannister。

這正是注意力機制的核心思想:在處理輸入信息時,並不是所有部分都同等重要,模型需要學會 “關注” 那些真正關鍵的部分。

所以,Attention 機制的核心,其實是一個很符合常識的直覺:當我們在處理大量信息時,往往會更關注其中某些特別關鍵的部分。

那爲什麼我們一開始就需要注意力機制?

注意力機制的引入,解決了模型 “記憶力” 不足的問題。它讓 Transformer 模型擁有了非常強的長期記憶能力。在生成文本的過程中,Transformer 可以對之前生成的所有 token 進行 “關注” 或“聚焦”,從而更好地理解上下文,提升生成效果。

圖片來源:Michael Phi 撰寫的 “Illustrated Guide to Transformers — Step by Step Explanation”

循環神經網絡(RNN)確實也可以參考之前的輸入,但它的 “記憶窗口” 比較短——也就是說,當文本或故事變長時,RNN 很難回憶起序列中較早生成的詞。即使是改進版的 Gated Recurrent Units(GRU)和 Long Short-Term Memory(LSTM)網絡,雖然在參考歷史信息方面比傳統 RNN 更強,但它們依然受限於窗口長度。

相比之下,注意力機制在理論上是可以擁有 “無限的上下文窗口” 的——只要計算資源足夠,它就可以在生成文本的過程中參考整個上下文。因此,注意力機制能夠比 RNN、GRU 或 LSTM 更全面地理解語義和故事線,生成更加連貫和準確的文本。

圖片來源:Michael Phi 撰寫的 “Illustrated Guide to Transformers — Step by Step Explanation”

什麼是自注意力機制(Self-Attention)?

自注意力機制(Self-Attention)指的是模型在處理一段文本時,能夠考慮同一句話中各個詞之間的關係。也就是說,在處理當前詞時,不是孤立地看這個詞,而是結合整句話中其他詞的含義進行理解和編碼。

要更深入理解自注意力,我們需要先搞清楚以下三個核心概念:

1:什麼是 Query、Key 和 Value?

2:什麼是位置編碼(Positional Encoding)?

3:我們到底把什麼傳給 Query、Key 和 Value?

爲了回答這三個問題,我們接下來將深入剖析論文《Attention is All You Need》中提出的編碼器(Encoder)結構。

什麼是 Query、Key 和 Value?

****圖片來源:Visual Guide to Transformer Neural Networks — (Episode 2) Multi-Head & Self-Attention

在自注意力機制中,你會看到三個線性變換層,它們分別生成 **Query、Key 和 Value **這三個向量。爲了更好地理解這三者的含義,我們用一個日常例子來類比說明。

假設你在 YouTube 或 Google 上搜索信息:你在搜索框中輸入的那段文字,就是 Query;搜索結果中每個視頻或網頁的標題,相當於是 Key;而這些視頻或網頁中包含的具體內容,就是 Value。

爲了找出最匹配的結果,Query 會去和各個 Key 進行比較,計算它們之間的相似度。相似度越高,對應的 Value 就越值得關注。

在實際計算中,我們常用餘弦相似度(Cosine Similarity)來衡量 Query 和 Key 的相似程度。餘弦相似度的取值範圍是 -1 到 +1,其中 +1 表示完全相似,-1 表示完全相反。通過這種方式,模型可以判斷哪些詞之間最相關,並將注意力(權重)集中到最相關的部分上,從而實現更精準的表達和理解。

我們可以把前面的公式重新整理一下。

由於我們要計算兩個矩陣之間的乘積,我們可以對其中的 B 矩陣(也就是 Key 矩陣)進行轉置操作。

通過這種方式,我們就可以計算出 Query 和 Key 向量矩陣之間的相似度。因此,最終我們可以將 Self-Attention 的計算公式寫成一個清晰的矩陣乘法表達式。

現在我們已經理解了 “相似度” 的概念,以及 Query、Key 和 Value 的作用,那接下來我們來回答第二個問題。

什麼是位置編碼( Positional Encoding)?

衆所周知,在處理文本數據時,我們必須先將其轉換成數字形式,才能輸入到任何機器學習模型中,包括神經網絡。嵌入層的作用就是將每個詞轉換成一個固定長度的向量。這個向量是稠密的,包含的是實數值,而不是隻有 0 和 1 的稀疏表示。由於所有詞都被映射爲相同長度的向量,這不僅降低了數據的維度,還能更有效地表示詞的語義。因此,嵌入層的本質就像一個查找表——詞是表中的 Key,而稠密的詞向量就是對應的 Value。

之所以還需要引入位置編碼,是因爲 Transformer 與 LSTM 不同。LSTM 是逐個處理每個 token 的嵌入,天然具備順序信息;而 Transformer 是一次性並行處理整個句子的所有 token。雖然這種方式極大地提升了計算效率,但也導致模型無法感知詞序。爲了解決這個問題,《Attention is All You Need》論文的作者提出了一個非常巧妙的辦法:他們利用不同頻率的正弦波和餘弦波來表示 token 的位置,從而將位置信息 “注入” 進每個 embedding 中。這種方式簡單有效,使得模型在處理詞語之間的關係時能兼顧語義與語序。

我們暫時不深入講解位置編碼的具體計算細節,現在你只需要知道:位置編碼的作用是爲每個詞的嵌入加上唯一的位置信息,這樣模型在處理整個句子時,就不會丟失詞語的順序。

接下來我們來回答第三個問題:

我們到底把什麼傳給 Query、Key 和 Value?

我們將帶有位置編碼的詞嵌入輸入到 Query 層,然後再將這個嵌入複製兩次,分別輸入到 Key 和 Value 層。這看起來似乎沒有什麼意義,爲什麼要把相同的嵌入輸入到這三個層呢?對吧?其實,這正是自注意力機制發揮作用的地方。

舉個例子,假設你想輸入一句話:“Hi, How are you?”,並希望你的 **Transformer **輸出 “I am fine”。

爲了實現這個,我們會將輸入序列傳遞給輸入嵌入層,然後進行位置編碼。接着,我們將這些帶有位置感知的嵌入傳遞給線性層。

現在,讓我們關注 Query 和 Key 矩陣。如果你還記得,我們使用它們來計算相似度。Query 和 Key 線性層的輸出會傳遞到網絡中的矩陣乘法步驟。

這個點積的輸出可以稱爲注意力過濾器

如果我們專注於注意力過濾器。

最開始,注意力過濾器中的權重基本上是隨機的數字。但一旦訓練過程完成,它們會變得更加有意義,最終變成注意力分數。接下來,我們對這些注意力分數進行縮放。

《Attention is All You Need》論文的作者將注意力分數除以鍵向量維度的平方根,在我們的例子中,即除以 6。

最後,我們通過使用 Softmax 函數將注意力分數壓縮到 0 和 1 之間。

然後我們就得到了最終的注意力過濾器。

網絡中的最後一步是將我們創建的注意力過濾器與最開始忽略的值矩陣相乘。

如果你還在問,我們爲什麼要經歷這一切?這個注意力過濾器的目的是什麼?讓我們稍作繞道,通過一個計算機視覺的例子來理解。

如果我們處理的是一張圖片,那麼當我們將注意力過濾器與值矩陣相乘時,所有不必要的信息就會被拋棄。

Visual Guide to Transformer Neural Networks — (Episode 2) Multi-Head & Self-Attention

我希望現在你能明白爲什麼注意力過濾器是必要的。

最後,我們將注意力過濾器與值矩陣相乘後的結果傳遞給一個線性層,以得到期望的輸出形狀。

所以,這就是自注意力的含義以及我們如何一步一步地實現它。正是由於這個網絡,NLP 和計算機視覺領域都受益匪淺,並且使用這個網絡他們取得了很好的成果。

參考文獻

  1. 視覺指南:Transformer 神經網絡 — (第二集)多頭與自注意力:https://www.youtube.com/watch?v=mMa2PmYJlCo&t=309s

  2. Illustrated Guide to Transformers — 步驟分解解釋:

    https://towardsdatascience.com/illustrated-guide-to-transformers-step-by-step-explanation-f74876522bc0

  3. 《Attention Is All You Need》:

    https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf

  4. 深度學習簡介:注意力機制:

    https://www.youtube.com/watch?v=d25rAmk0NV

  5. 從頭開始瞭解注意力機制:

    https://machinelearningmastery.com/the-attention-mechanism-from-scratch/

  6. 每個人都能理解的深度學習中的注意力機制全面指南:

    https://www.analyticsvidhya.com/blog/2019/11/comprehensive-guide-attention-mechanism-deep-learning/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/sWJr7ytPmPQTNgti-2m_3g