Cover

帶課的人 Harry 張祺煒

  • 臺大資工準新生(特殊選才)
  • 奧義智慧(CyCraft)研究實習生
  • 研究「怎麼讓 AI 更安全」:發過兩篇論文(TMLR、EACL)
  • SITCON 2025、2026 年會講者
  • 下課想聊的都歡迎:攝影、剪片、英文辯論
關於我
Outline

開始之前,一個約定 有問題,隨時舉手

今天的東西,第一次聽卡住很正常。

有任何聽不懂的地方,隨時舉手打斷我

「這個詞沒聽過」「這張圖在畫什麼」「太快了,再講一次」,都是舉手的好理由。

你卡住的地方,旁邊的人多半也卡住了。

Outline
文字怎麼變數字

上一堂的模型,看不懂字 模型只吃數字,這堂的輸入卻是一句話

上一堂

餵進去的是一排數字。

[5.1, 3.5, 1.4, 0.2]

花瓣長度、寬度,本來就是數字。

這堂

餵進去的是一句話

「今天天氣真好」

模型看不懂字,得先把字變成數字。

差的那一步,就是把文字變成數字

文字怎麼變數字

第一步:先切成小塊 為什麼要先切塊?

句子有無限多種,沒辦法一句一句對應到數字。

先把句子切成一小塊一小塊,這些小塊就叫 token。

塊的種類是有限的,每一塊才能在詞表裡有自己的編號。

負責切塊的工具,就叫 tokenizer,下一站就去玩它。

文字怎麼變數字

換你動手 Tokenizer 探索站

你要動的旋鈕

輸入任意文字,切換切分方式(字元/詞/BPE),看同一句話切出不同的 token 與編號

試試看

  • 中英混寫「機器學習的 tokenization」,字元/詞/BPE 各按一次
  • 標點與空格「你好!!!」,看空格怎麼被標記
  • 罕見詞、自己的名字「祺煒」,在字元/詞模式看會不會變成 [UNK](沒看過的詞)

你應該會看到

換一種切法,同一句話就變成不同數量、不同邊界的 token。

檢核點

我按過三種切法,看到同一句話的 token 數和切分邊界都不一樣。

🛠 講師畫面/各組電腦已開好 · /tokenizer

文字怎麼變數字

模型眼中,只有 Token 和編號

Text 視角

彩色切塊:一句話被切成一顆顆 token

Token IDs 視角

每顆 token 一個編號,是座號不是語意

所以在模型眼中,只有 token 和它的編號。

文字怎麼變數字

細與多的折衷 為什麼切成這樣?

🔡
照字母切Character-level
'hello' → ['h', 'e', 'l', 'l', 'o'],切最細,一句話變超長。
📚
照整詞切Word-level
'祺煒' → [UNK],詞表爆炸,還老是遇到新詞。
✂️
照字塊切Subword
'tokenizer' → ['token', 'izer'],長度與詞表兩邊都顧到。
文字怎麼變數字

編號,只是座號 光看號碼,答得出像不像嗎?

「貓」是 3711 號、「狗」是 890 號、「桌子」是 12690 號。

只看號碼回答:哪兩個比較像?

號碼只回答「是哪個字」,沒回答「跟哪些字像」。

文字怎麼變數字

開門之前,先想一想 一張字的地圖

聽說有人把幾萬個字,搬進了同一張地圖,每個字有自己的位置。

照什麼規則排,這張地圖才有用?

想像一下:「貓」隔壁會住誰? 英文的 cat 會住哪裡? 「蘋果」的鄰居又是誰?

文字怎麼變數字

換你動手 語意地圖站

你要動的旋鈕

打一個詞去搜,切平面/立體地圖(2D/3D),調 Top K 看誰住它隔壁

試試看

  • 搜「貓」,把鄰居一個個唸出來,跟你剛剛的猜想對一對
  • 找 cat:英文字自己住一區,還是就在「貓」隔壁?
  • 搜「蘋果」:鄰居真的是水果嗎?

你應該會看到

有的字擠成一團、有的字離得老遠;擠在一起的字,意思好像都有關係。

檢核點

我驗完了自己的三個猜想,還能用一句話說出這張地圖排位置的規則。

🛠 講師畫面/各組電腦已開好 · /embedding

文字怎麼變數字

你剛剛逛的,是一張字的地圖 這個做法,叫 embedding

規則只有一條:意思像的字,住得近。

每個字的位置,其實是一排學出來的數字,像門牌住址;光有座號,做不到這件事

把字變成住址的這個做法,就叫 embedding

文字怎麼變數字

這張地圖,是誰排的? 語意是怎麼學出來的

沒有人動手排。位置是模型在海量文字上玩「猜字遊戲」玩出來的。

圖:同一句話的兩種玩法,一種猜被遮住的字,一種猜旁邊的字

能在同一種句子裡互換的字,遊戲玩久了,就會被搬到隔壁:貓和狗就是這樣變成鄰居的。

文字怎麼變數字

連「怎麼走」都有意義,偏見一起學進來

文字怎麼變數字

文字,就這樣變成數字 Loop 0 小結

✂️
切詞成塊
一句話先切成一顆顆 token,才有能處理的單位。
🔢
編號無意
光給編號,查得到是哪個字,答不出誰跟誰像。
🗺️
鄰居即語意
embedding 給每個字一個住址,意思像的字住得近。
⚖️
偏見殘留
語料裡藏著的偏見,也會一起被學進字的位置裡。
文字怎麼變數字

現在,每個字都是一排數字了

那……就能餵給上一堂的 MLP 了嗎?

MLP:上一堂教的網路,一疊會學習的神經元,把一排數字變成答案

文字怎麼變數字
MLP 吃文字

早上那顆 MLP,看到的不是「圖」 先回頭看清楚它拿到什麼

今天早上,你們親手訓練了一顆 MLP 認 CIFAR-10。

它拿到的不是圖:一張圖先攤平成 3,072 個數字,排成一排才餵進去。

文字也剛剛變成一排數字。先弄清楚:一排數字進去,MLP 到底「看」到什麼?

MLP 吃文字

先跟你打個賭 把每一顆像素都打亂

把每張圖的 1,024 顆像素全部搬家,每張圖都照同一張搬家對照表,訓練和考試都是。

你,還認得嗎?

它,還學得會嗎?

MLP 吃文字

換你動手 像素撞牆站

你要動的旋鈕

「▶ 訓練」讓兩顆一樣的 MLP 同時開練;「圖片 ‹ ›」換驗證圖;點神經元看它在找的圖案(權重樣板);按「還原排列 π⁻¹」把像素搬回家

試試看

  • 按「▶ 訓練」,盯著兩條 loss 曲線(錯誤分數,越低越好),等它自己跑完
  • 用「圖片 ‹ ›」多換幾張,對照「你看到的」和「模型看到的」
  • 按「⏸ 暫停」,點兩邊網路圖上同一顆隱藏神經元,再按「還原排列 π⁻¹」

你應該會看到

兩條 loss 曲線疊在一起,收在同一個準度,參考曲線終點 38% 對 38%;像素搬回家之後,打亂那顆神經元在找的圖案,跟原始那顆長得一樣。

檢核點

我看到打亂像素那顆 MLP,學得跟原始那顆一模一樣好。

🛠 講師畫面/各組電腦已開好 · /pixel-shuffle

MLP 吃文字

你看到的 vs. 它看到的 同一張圖

圖:站上同一張驗證圖(貓),右邊每顆像素照同一個固定排列 π 搬家,數值一個都沒變

對 MLP,位置只是編號;把編號換掉,題目沒變。

MLP 吃文字

故事 vs. 事故 換到文字,同一道牆

圖的排列、句子的詞序,對這種模型都只是編號。

圖:📖 故事 與 💥 事故 是同一袋「故」+「事」,順序對調,一袋字的模型輸出完全相同

語意天差地遠,它卻 分不出來

MLP 吃文字

問題不在準度,在假設

準度一分都沒掉:MLP 的設計裡,根本沒有「排列有意義」這個假設。

圖:詞袋把字丟成一堆(無序)· 序列讓字一個接一個(有序)

我們需要一個 假設順序有意義 的架構 → RNN。

RNN:一次讀一個字、把記憶往後傳的網路,下一節的主角

MLP 吃文字

休息 10 分鐘 喝口水,等等回來拆牆

10 分鐘後回來,準時開始 RNN。

實際回來時間由講師現場宣布。

MLP 吃文字
RNN

先玩個遊戲 猜下一個字

今天天氣真 __

你腦中大概已經有答案了,可能是: 好/熱/冷

今天是夏天,溫度 40 度,今天天氣真 __

前文一多,答案立刻收斂:

RNN

換你動手 next-token 站

你要動的旋鈕

前文視窗(context)大小:模型能看到最後幾個 token;Temperature/Top-k 是進階旋鈕,好奇再玩

試試看

  • 點預設句「今天天氣真」,看 Qwen3 列出的候選字;再點 40 度的加長版,看「熱」怎麼衝上第一
  • 把前文視窗縮到只剩 1~2 個 token,再放寬,看候選字怎麼變
  • 找一句「視窗小會押錯、放寬就押對」的話

你應該會看到

前文看得越多,押得越有把握:第一名的把握變大,其他選項縮小。

檢核點

我看到前文視窗放寬後,模型把把握集中到更少的字上。

🛠 講師畫面/各組電腦已開好 · /next-token

RNN

看得越多,越有把握 可是句子會一直變長

圖:能看到的前文越長,下一個字押得越有把握(示意圖)

猜下一個字靠前文,可是句子會一直變長,得把前面 記住 、一路帶著走。

RNN

RNN 一次吃一個字,把記憶往後傳

圖:每讀一個字,更新記憶再傳下去;第一個字的資訊會沿途變淡

每讀一個字,就更新一次記憶,再把記憶傳給下一個字。

RNN

讀一個字,更新記憶,傳下去 同一個網路,重複用四次

圖:「今天天氣真好」切成四顆 token,一步吃一顆;記憶盒每一步都一樣大

上一步傳出來的記憶,就是下一步的輸入

RNN

換你動手 RNN 視覺化站

你要動的旋鈕

拖曳滑桿逐 token 前進,看記憶(hidden state)一列列填進格子圖;也可自己打一句丟給 GPU 上的 RNN

試試看

  • 點預設句:短句「the cat sat」、長句「the cat sat by the door…」各跑一次
  • 盯住底下那條「影響」列,第一個字到句尾還剩多少
  • 拖到句尾,看最早的 token 怎麼被逐漸沖淡

你應該會看到

記憶(hidden state)一格格往後填;句子一長,最早那個 token 在「影響」列幾乎歸零

檢核點

我看到長句跑到句尾時,第一個字的資訊幾乎不見了。

🛠 講師畫面/各組電腦已開好 · /rnn-viz

RNN

RNN 撞到的兩道牆 所以還需要下一個架構

🧠 記憶健忘

越長越記不住

句子一長,前面的資訊被沖淡,長句記不住開頭。

⚡ 訓練不穩

越練越亂跳

訓練時的糾正得從句尾一站一站傳回句首,站一多,不是越傳越走樣,就是傳到沒聲音。

記憶得一站一站傳,那能不能讓每個字 直接互看 ?

RNN
Transformer

換個想法 不用一站一站傳

左:RNN 記憶一站一站傳,越傳越淡;右:每個字直接連到所有字

與其接力傳記憶,不如讓每個字直接看所有字,這就是 attention(注意力)。

用這一招疊出來的新架構,名字就叫 Transformer。

Transformer

換你動手 Transformer 站・attention 連線

你要動的旋鈕

滑過注意力格子圖,看某個字把多少注意力分給另一個字;再動 Layer(第幾層)× Head(哪一種眼光)換層換頭。

試試看

  • 點預設句「我的媽媽說她很開心」,滑到「她」,亮起來的格子就是它在看誰
  • 自己打一句有指代的句子,讓 GPU 跑一次真實 pipeline,再看一次
  • 轉 Layer/Head,看不同層、不同頭的關注模式怎麼變

你應該會看到

每個字直接對整句算注意力,但只看得到自己左邊(右邊還沒出生),相關的字一格就連上,沒有逐站接力。

檢核點

我滑到一格,就看到某個字把注意力直接分給了相關的字。

🛠 講師畫面/各組電腦已開好 · /transformer

Transformer

剛剛動的 Head,到底是什麼? 多頭注意力 Multi-head

圖:常見的頭大概長這幾種樣子;真實的頭更亂,找不到個性也正常

一個頭一次只能用一種眼光看「誰看誰」,所以 Transformer 開好幾個頭,各看各的,最後再合起來;這件事還疊了很多層,每層都有自己的一組頭。

回站上獵頭:動 Layer × Head,找一個個性最明顯的頭,跟隔壁比誰找到的頭最有戲。

Transformer

拼起來,就是 Transformer 這個 Loop 的三塊

👀
注意機制Attention
每個字直接看到句子裡的所有字,不必逐站傳記憶。
🎭
多頭Multi-head
好幾個頭同時看同一句話,各看各的,最後再合起來。
🕶️
只看左邊Causal
接龍時右邊的字還沒出生,每個字只看得到自己左邊。
Transformer
架構即樂高

三個架構,其實是三個假設 MLP → RNN → Transformer

MLP

沒有任何順序假設,句子在它眼中只是一袋字。

RNN

假設順序有意義,用一份記憶把前文一路帶著走。

Transformer

假設每個字都能直接互看,還開好幾個頭各看各的。

架構即樂高

零件拼起來,就是大模型 銜接第三堂

切塊、住址、記憶、直接互看,

這些零件拼起來,就是你正在用的大模型。

下一堂,我們拿它來:LoRA、生成、RL。

架構即樂高

帶回家的對照表 今天出現過的名字,每個一句話

token
句子先切成的小塊,模型閱讀的單位。

tokenizer
負責切塊的工具。

embedding
給每個字一個地圖上的住址,意思像的住得近。

MLP
上一堂的網路,把一排數字變成答案。

RNN
一次讀一個字,把記憶往後傳。

attention
每個字直接看所有字,決定看誰、看多重。

multi-head
好幾個頭各看各的,最後合起來。

Transformer
用 attention 疊出來的架構,大模型的骨架。

架構即樂高

附錄 給想深挖的你

接下來這幾頁課堂上不會講

是留給想自己深挖的你,回家慢慢看。

💻 今天所有互動站的程式碼 · github.com/Harrychangtw/sitcon-camp-2026-ml-pt2

附錄

attention 的盲點 為什麼需要位置資訊

圖:把同一堆字打散重排,attention 算出來一模一樣

它對順序無感,就像 Loop 1 的詞袋牆:「故事」和「事故」看起來一樣。

附錄

補丁一:把順序塞回去 Positional Embedding

圖:每個字的「詞資訊」加上「第幾個」,一起丟進 attention

attention 分不出誰前誰後,補一塊 positional embedding 把「第幾個」塞回去。

想一想:如果不塞位置資訊,把句子打亂重排,attention 會不會算出一樣的結果?

附錄

補丁二:給資訊一條捷徑 Residual Connection

圖:捷徑繞過層;沒有它,錯誤分數(loss)亂跳,有它就穩(示意圖)

網路疊得深,訓練就亂跳;補一條 residual 給資訊一條捷徑繞過層,訓練就穩。

圖示:關掉捷徑,深層訓練亂跳;補上捷徑,就穩。

附錄

attention 怎麼決定看誰 Query · Key · Value

🔍 Query 我想找什麼 🏷️ Key 每個字的標籤 📦 Value 那個字的內容

一個字的問題對上哪把鑰匙,就多讀那個字的 內容

🛠 poloclub.github.io/transformer-explainer

附錄