昨天開始挑戰學習近年來爆紅的 LLM (large language model) 背後原理 – transformer deep learning model。
其實我之前有稍微看過 Wikipedia 上 transformer 講解,結果看到一堆超長的文章與數學,只好放棄,挑戰失敗😅
昨天想到如果有影片教學應該會較容易懂,就到 YouTube 搜了一下,並找點擊率高的影片,就是 3Blue1Brown 這系列的 3 部:
https://youtu.be/wjZofJX0v4M?si=ykj9XakqJ-MU9NW9
https://youtu.be/eMlx5fFNoYc?si=dR7MT45IAu6kuYUZ
https://youtu.be/9-Jl0dxWQs8?si=Q-Jgph37PAAtauKU
這教學做得真不錯,講者會用淺顯的例子作講解 transformer 的各部分的用意。不過講者也坦白 transformer 還有一些部分很難解釋。這一點我非常理解,因為機器學習往往處理的問題是「不清楚的模型」,只能退而求其次用經驗與試誤法找出的次佳模型。即便是次佳模型,往往也難解釋其中由試誤法找出的部分。
所以我認為學習 ML 模型要有對於模型可解釋呈度的認知:最好能完美解釋一個複雜模型,但是少數天才才能做的事。我們如果花了很多力氣卻無法完美解釋,可以退而求其次、不求完美,但盡可能的「自圓其說」。也就是雖然沒有嚴謹的證明解釋完全正確,但能用一些例子說得有其道理,無嚴重瑕疵,那可能就是一個當時最好的解釋。甚至可能未來找到的完美解釋是基於此不完美解釋的修正!(例如古典力學)
以下就是我看了 YT 頻道 3Blue1Brown 講解 transformer 架構後,我的心得:完整 transformer 架構分成 encoder, decoer. 我只詮釋爆紅的 GPT LLM 所用到的 decoder. Transformer decoder 會先將輸入的文字切成 tokens(比如 1 個英文單字或中文單詞對應 1 個 token),再將各 token 用 embedding 轉成數值向量。token 被向量化後,向量之間的距離能代表 token 在語言上的相關性。
接著 embeddings 進到 attention(注意力) ,它處理一段文字 embeddings 之間的相關性的提取與訊息混合,使用 Q, K, V 三個矩陣作處理。其中 Q, K 矩陣將 embeddings 用不同方式映射至同一維度子空間,找出 Q 映射與 K 映射 embeddings 之間的相關性。比如有 2 個 embeddings 分別對映 tokens 「權力」、「皇后」,各自經由 Q, K 映射至「形容詞」子空間就會有高度相關。反觀「公主」 embedding 映射至「形容詞」子空間後,與「皇后」的相關性反而不如「權力」。Q, K 映射找出 embeddings 之間相關性得到一矩陣,估且計作 C。再來將 embeddings 之間相關性資訊用 V 矩陣混合至 embeddings。比如「權力」與「皇后」混合的 embedding 是「有實權的皇后」,那麼 「權力」 embedding 要經由 V 的轉換再與「皇后」 embedding 相加,而 C 矩陣則是 embeddings 間資訊相關性的權重,影響了資訊混合的比重。
transformer decoder 不只一次只用一個 attention,而是多個,稱之 multiheaded attentions。這也能合理解釋,因為每個 head 的注意力只在一特定事物上,例如上面舉例的「形容詞」就是某個 head 所專注的事, 別的 head 可能專注在「副詞」、「動詞」…。另外 attention 一次能處理的輸入 embeddings 數有限,稱之 context window,類似於人腦在處理一件事情時,只有有限的專注力,例如看了一本很厚的書,看到後面忘了前面😅
接著是 multilayer perceptron (MLP) ,它在處理混合資訊 embeddings 與預訓練知識的因果性(文字接龍),它的結構是 linear -> ReLU -> linear。我的詮釋是:2 個 linear 層的作用為分類器 (classifiers),ReLU 加入非線性特性,此時如果 loss function 定為預測輸入文字的下一個字預測失敗,那麼 model optimizer 會將分類器優化成「學習預測下一個字」的機率(嚴格說是 logits)。比如 decoer 在預訓練時學習文本「有實權的皇后施政順利」,那麼 MLP 就學習「施政、順利」這幾個字緊接在「一位有權力的皇后」之後。因此「有實權的皇后」經過 MLP 後,能最終預測下一個字是「施政」。
以上 attention + MLP 只是 transformer decoder 的一級,實際上的 GPT LLM 是串好幾級,為什麼?我問 ChatGPT 得到一個滿合理的詮釋:因為文字具有階層性。如:
單子 -> 句子 -> 語意 -> 主題。
單一級 attention + MLP 只能完成部分的階層,要經由多層處理才能達成高階的文字意含。
以上內容是我學習一些深度學習 GPT transformer 的詮釋後,自己的詮釋。不保證完美無瑕😅但起碼不必一股腦的死記它的架構。甚至未來想在架構上作出調整,會比較有方向,幸運的話能順利調出自己的模型。