三、轉換器 (Transformer)**
(**註:關於 RNN/ LSTM/ Transformer 系列.1&RNN 說明,請參考以下網址: https://vocus.cc/article/68bf7c99fd897800013126c7)
(**註:關於 RNN/ LSTM/ Transformer 系列.2&LSTM 說明,請參考以下網址: https://vocus.cc/article/68bf7ff0fd897800013204e5)
▷ Transformer 的概念
1.誕生
Transformer 就是為了解決 RNN、LSTM 傳統處理序列關係的模型所遭遇的問題而發明的。**
以自然語言處理 (NLP) 領域來說,一個語句就是一個序列,由於 RNN 和 LSTM 必須token by token 按照次序地處理,導致「規模」與「速度」上都極度受限,尤其是在養成期需要大量數據強力訓練時,這使得模型無法有效地成長。
而Transformer (轉換器)以一種完全「不是」依序處理序列的方式,「注意力」機制,取代「依序」處理序列的方式,以「平行運算」的方式,同時處理序列中的所有 token,從而大幅提升速度。
(**註:在2017 年 Google 團隊提出的 《Attention is All You Need》 論文中,說明只以Transformer 概念的注意力和前饋網路,即可處理序列關係。這意味著完全取代 RNN 結構。)
如上段所說,RNN與 LSTM 最大的問題是必須 token by token 依序處理序列,這使得長序列的運算效率很低。
Transformer 的「注意力 (Attention)」機制,能夠一次性地、同時處理序列中的所有 token,意即:判斷出每個 token 對其他 token 的重要性。每當經歷一次 Transformer 的注意力,每個 token 便能更新它當下的最新對所有其他 token 的關係;這形同於每個 token 都能自帶最新的上下文。這是如何做到的?
▪︎「注意力」的運作原理
(a) 賦值(賦予 Q、K、V)
在 Transformer 模型中,每一個 token 都會被賦予一個查詢 (Query, Q)、一個鍵 (Key, K)、一個值 (Value, V)
(b) 掃描與更新
網路 (即 Transformer) 將每個 token 的 Q,與句子中所有 token 的 K 進行比對,給予數值。
(c) 給出「注意力分數/Attention Scores」
依據比對結果所得的數值,越高代表兩個 token 的相關性**越強,也代表它們之間需要給予越多的「注意力」。
(**註:每兩個 token的兩個關係都必須計算:「→」&「←」。)
(d) 計算每個 token 的「注意力輸出/Attention Output」**
將注意力分數對所有 token 的 V 進行加權平均;這裡的注意力分數,只用與該 token 相關的注意力分數,與每一個 token 進行加權計算,加權後數值,相加所得即為該 token的注意力輸出。
(**註:亦稱「上下文向量/Context Vector」。)
(e) 賦予每個 token「新向量」
最終,所計算得出的該 token 的注意力輸出,也就是該 token 新的向量,意即:該 token 被賦予了一個新的「包含其他所有單字相關資訊」的向量,這個新向量等同是讓該 token 直接包含了整個序列的上下文資訊,所以能在最終輸出時起到關鍵作用。
→透過(a)-(e)的過程,一個 token 便得到一個新的向量,可以在下一個階段用來運算,協助產出最終輸出。
→舉例:句子「小狗追著貓,但牠跑掉了。」
在注意力的機制中,處理「牠」這個 token 時,會以「牠」的 Q 會去比對句子中所有其他 token 的 K。
「牠」的 Q 和「小狗」的 K 比對結果:得到一個低分
「牠」的 Q 和「貓」的 K 比對結果:得到一個高分
依據以上比對結果,「貓」的 V 將被給予最高權重,從而判斷「牠」與「貓」的關係是:「牠」指涉「貓」。
▷ Transformer 的運作流程
▪︎ 基本架構步驟:
原始輸入 → 位置編碼 → 進入Transformer 隱藏層/區塊 (hidden layer / block) → 最終輸出
Step.1 原始輸入:
不像 RNN 和 LSTM 是 token by token 按照次序地處理,Transformer 是將整個序列**一次性地輸入。
(**註:如果是圖片,則是所有區塊一次性輸入。)
Step.2 位置編碼:
由於一次性同時輸入,注意力機制沒有 token 的順序,所以每個 token 須先加上「位置編碼」,這是 token 標記「在序列中的位置」的標籤。
Step.3 進入Transformer 隱藏層/區塊 (hidden layer / block):
在 Transformer 區塊,主要以兩個層處理所有資訊:
▪︎ 自我注意力層 (Self-Attention Layer)
作用:計算所有 token 之間的加權組合
說明:這裡就是「注意力」運作的地方,負責計算所有詞元之間的關聯。這是 Transformer 的最關鍵突破。
通過「注意力」的運作**,最終將產生一個包含上下文意義的新向量的 token,這意味著,透過這個過程,讓每個 token 都包含了整個序列最新的上下文資訊。
(**註:「注意力」運作請參考前述。)
▪︎ 前饋網路層 (Feed-Forward Layer)
作用:對每個 token 的表徵做非線性轉換
說明:在這一層,會對每一個 token 在上一層 (i.e.自我注意力層) 產生的新向量(亦說「新表徵」),進行獨立的非線性轉換。
→ Transformer 區塊主要是透過疊加作用,除了是將「自我注意力層」與「前饋網路層」疊加,其實這兩層也都進行了相同的動作,層正規化 (Layer Normalization)&殘差連接 (Residual Connection)。這是另一個疊加。所以整個 bolck結構是:
資訊進入 block ↓
[自我注意力層] 層正規化 → 自我注意力 → 殘差連接↓
[前饋網路層] 層正規化 → 前饋網路 → 殘差連接↓
資訊從 block 出去
Step.4 最終輸出:
當所有資訊處理完從block 出來後,便要將其通用格式的向量依照任務的需求轉換,ex人類可以理解的自然語言或是機器可以執行的特定格式,最終輸出。
→→從整個運作流程,我們可以看到 Transformer 的自我注意力 (Self-Attention) 如何在一次計算中讓每個 token 和序列裡所有其他 token 建立關聯。
對比於 RNN/ LSTM「token by token 按照次序地處理」的方式,Transformer 可以一次性全都對齊,這不只可以避免一步一步傳遞訊息所造成的「梯度消失」問題,更從而改善運算速度。
▷ 總結:
1. Transformer 標記了 AI 在自然語言領域的新時代
透過「注意力」機制,Transformer 得以一次性地(平行)處理一段序列中的每一個token,從而更有效地理解長篇文章的上下文,也所以它在翻譯、摘要和問答等任務上表現出色。
這是徹底翻轉了自然語言處理的方式,而落於實際營用場景上,Transformer 模型成為許多大型語言模型的基石。
2. Transformer 從序列到空間的跨越
回歸到 Transformer 的設計邏輯,即可發現Transformer 的核心能力是理解「關係」,無論這個關係是時間上的 (ex語句中的詞元先後順序),或空間上的 (ex圖像中不同像素或區塊的位置)。
因此,Transformer 的應用,便從處理自然語言語句的「序列」關係,延伸到處理電腦圖像視覺領域的「空間」關係。
大略說明 Transformer 處理圖片的方式:將一張圖片分切成小區塊,然後以「序列」來處理小區塊,意即,透過「注意力」機制去處理小區塊在空間上的關係,從而實現了圖像辨識等功能。
3. 新的 (還是根本的?) 難題
儘管業務力超強,但高度急速的發展仍是很快地使 Transformer 難以招架,尤其是當數據越發龐大,「上下文」的限制,始終是一個根本上有待解決的問題:當數據越大(序列越長),每一次的運算成本是隨著量體平方成長;當上下文因為運算不停長大,變得綿延不絕、極其冗長,這不只是挑戰運算速度,更真正的挑戰將會是資源。而在目前主流的幾種解決方案中,Transformer 仍佔有一席之地:持續改造或優化Transformer。
不過不論如何,Transformer 肯定是近年 AI 領域最重大的突破之一。