作者:
newwu (frankwu)
2025-09-12 07:59:19※ 引述《Supasizeit (Shitpost King)》之銘言:
: 阿北當年聯考數學95
: 可是沒有念資工
: 今天心血來潮
: 嘗試理解LLM transformer 原理
: 可是講到token就聽不懂了
: 然後又變成embedding
: 弄一弄變成weights
: 怎麼突然就變成attention block
: 這不是大學生每個都懂的東西嗎
不是
: 我是不是失智了
所謂語言模型在處理什麼?其實就是人類的語言嘛。
所以除了要數學上的思考,也要站在人類語言的角度去理解。
那麼,token 是什麼?
其實就是模型讀入的最小單位。
這個 token 可能是word subword(類似字首字根) character等等。
英文主流的做法多半是用subword來分(如果有錯請糾正 XD)。
為什麼要這樣分?
想一想其實很合理。對人類來說,語言中意義的最小單位是什麼?
像 "dog" 這個字沒什麼好拆的,如果拆成 "d" 和 "og",對人類完全沒意義,和「狗」無關。
但有些字是由小單位的意義組成,例如 re-organ-ization。
怎麼切的話,算是演算法決定的,
不過,表現好的切法,通常人類看了也會覺得切得有道理。
Embedding 就是把每個詞轉換成向量。
因為模型只能處理數字,
所以需要建立一個 token → embedding(向量) 的對應表,
再把語言的意義透過向量來處理。
問題是,怎麼建立這個對應表?
在機器學習裡,最簡單的方式就是 one-hot。
例如:
dog → (1,0,0)
cat → (0,1,0)
mouse → (0,0,1)
可是這樣效率很差。
語言裡動輒上萬個 token,多語言甚至可能上百萬。
這樣輸入輸出的維度就超大,還有很多同義詞、近義詞白白浪費空間。
因此通常不會用 one-hot,而是對應到一個「較小維度」的向量空間(幾百到幾千維)。
而且這些向量對應不是隨便定義,而是透過模型訓練學出來的。
這樣才能讓向量比較具備語義,例如:
cat 與 kitty 的距離最近
cat 與 dog 比較遠
cat 與 car 幾乎沒關係
簡單來說,embedding 就是在機器學習裡,
模型可讀取的意義/資訊表達,通常是一個多維向量。
是機器理解概念的方式。
至於 Transformer,可以想成對人類理解語言方式的一種模仿。
網路流行說:「每個字都看得懂,但合起來卻看不懂。」
這正是語言理解的關鍵——
人會先讀懂單字,再把上下文合起來理解。
文字擺在一起才有整體意義,
而單字的意義常常是上下文決定的。
舉例:
英文的 interest 可以指「利益」、「利息」、「興趣」。
當前後文提到貸款和數字時,我們會理解成「利息」。
當出現娛樂相關語境時,就會理解成「興趣」。
Transformer 的重點就是:
從原本的單詞意義出發(token/embedding),找出上下文關聯,合成新的語意,
新的、更精準的含上下文embedding (contextual embedding)。
哪些字彼此有關聯,模型就會把它們合起來看。
例如 interest 與 loan 一起出現時,模型就會發現它們高度相關,進而推斷這裡指的是
「利息」。
Transformer 的核心是 自注意力機制。
它的訓練目標之一,就是讓模型學會:
某個 token(或 embedding)應該去「注意」哪些其他 token。
這就是所謂的「注意力」。
意思是:當看到這個詞時,應該去關注哪些相關的詞,
而這些相關詞會幫助模型正確理解它的意義。
所以不管是 token → embedding 的對應,還是 Transformer 的結構與訓練,
核心其實都是 字與字之間的關係。
也因此可以說:單一詞彙本身不構成意義,關係才構成意義。
現代機器學習方法,很多都是在模仿人類思考。
有時候拿來跟人類的理解、學習、思考方式對比,
會發現很有趣。