這是 Stanford CS124 導讀的第 6 週。前面五週的零件在這一週組起來:第 3 週的邏輯迴歸疊成多層,輸入換成第 5 週的詞向量,訓練目標用第 2 週的「預測下一個詞」,得到的就是神經語言模型。
這一週有兩部分:
- 預錄內容:神經網路的基礎,配 PA5。
- 現場課「LLMs and Transformers!」:Dan Jurafsky 介紹大型語言模型。這堂課沒有錄影,投影片公開。Transformer 內部怎麼運作放在下一週的導讀,和實作它的 PA6a 一起講。
本週材料:Neural Networks 投影片、Introduction to Large Language Models 投影片、PA5。指定閱讀是教科書 2025 年 8 月版的第 6 章。
第一部分:神經網路
一個神經元
神經元做的事和第 3 週的邏輯迴歸一樣:把輸入加權總和、加上偏差、再通過一個函數。
z = w·x + b,輸出 a = f(z)
投影片的例子:w = [0.2, 0.3, 0.9],b = 0.5,輸入 x = [0.5, 0.6, 0.1]。
z = 0.2×0.5 + 0.3×0.6 + 0.9×0.1 + 0.5 = 0.87
用 sigmoid 當 f,輸出是 σ(0.87) ≈ 0.70。
f 叫啟動函數(activation function)。除了 sigmoid,投影片介紹另外兩個:
- tanh:形狀和 sigmoid 類似,但輸出在 −1 到 1 之間。
- ReLU:z 大於 0 就原樣輸出,小於 0 就輸出 0。寫成 max(z, 0)。這是現在最常用的。
為什麼一個神經元不夠:XOR
投影片用一個經典例子說明單一神經元的極限。考慮三個邏輯函數,輸入是兩個 0 或 1:
| x₁ | x₂ | AND | OR | XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
AND 和 OR 都可以用一個神經元算出來:把四個點畫在平面上,用一條直線就能把輸出是 0 和輸出是 1 的點分開。XOR 不行。輸出是 1 的兩個點在對角,輸出是 0 的兩個點在另一條對角,沒有任何一條直線分得開。單一神經元的決策邊界就是一條直線,所以它算不出 XOR。
解法是加一層。投影片給了一個兩層的網路,中間有兩個使用 ReLU 的隱藏單元:
- h₁ = ReLU(x₁ + x₂)
- h₂ = ReLU(x₁ + x₂ − 1)
- y = h₁ − 2×h₂
四種輸入逐一代進去:
| x₁ | x₂ | h₁ | h₂ | y = h₁ − 2h₂ |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 2 | 1 | 0 |
看 h₁ 和 h₂ 這兩欄:原本分不開的四個點,在隱藏層被搬到新的位置,(0,1) 和 (1,0) 兩個輸入都變成 (1,0),疊在一起了。在這個新的空間裡,一條直線就能分開。隱藏層的作用是把輸入換成一種比較好分的表示。 這個例子的權重是人設計的;實際的網路靠訓練自己學出這種表示。
中間一定要有非線性的啟動函數。如果拿掉 ReLU,兩層線性運算合起來還是一個線性運算,等於沒有加層。
前饋網路與 softmax
把很多神經元排成一層、幾層疊起來,每一層的輸出是下一層的輸入,就是前饋網路(feedforward network)。一個兩層的網路寫成:
- h = f(Wx + b) (隱藏層)
- z = Uh (輸出層的分數)
- y = softmax(z)
W 和 U 是權重矩陣。投影片把它形容成「在邏輯迴歸前面多加一層」。
輸出有很多類別時,sigmoid 換成 softmax:把每個分數取指數,再除以全部的總和,得到一組加起來等於 1 的機率。投影片的例子:
z = [0.6, 1.1, −1.5, 1.2, 3.2, −1.1]
| z | 0.6 | 1.1 | −1.5 | 1.2 | 3.2 | −1.1 |
|---|---|---|---|---|---|---|
| e 的 z 次方 | 1.82 | 3.00 | 0.22 | 3.32 | 24.53 | 0.33 |
| 除以總和 33.23 | 0.055 | 0.090 | 0.007 | 0.100 | 0.738 | 0.010 |
(投影片印的第三、四個值是 0.006 和 0.099,尾數被截掉了。)最大的分數 3.2 拿走了 74% 的機率。softmax 會放大差距:3.2 只比 1.2 多 2,機率卻是七倍多。
用在文字上
投影片示範兩種用途。
情感分類。 第 3 週的特徵是人挑的(正面詞幾個、有沒有驚嘆號)。現在改成把每個詞換成它的詞向量,再把一句話裡所有詞的向量合成一個(取平均,或每一維取最大值),丟進前饋網路。特徵不用人設計,網路自己學。
語言模型。 輸入是前幾個詞的向量,接在一起丟進網路,輸出層對整個詞彙表做 softmax,得到下一個詞的機率。因為網路的輸入長度是固定的,所以用一個固定大小的視窗往右滑。
它比 n-gram 好在哪裡,投影片舉的例子是:訓練資料裡有「the cat gets fed」,但從來沒有「the dog gets fed」。n-gram 沒看過「dog gets」後面接什麼,就沒有辦法。神經語言模型裡,cat 和 dog 的向量很接近,網路對相近的輸入會給相近的輸出,所以即使沒看過,也會預測 fed。第 2 週結尾留下的問題(n 越大越只能照抄)在這裡有了解法。
反向傳播
訓練還是用梯度下降,需要算 loss 對每一個權重的梯度。邏輯迴歸只有一層,梯度可以直接寫出來;多層網路裡,前面幾層的權重要穿過後面好幾層才影響到 loss。
做法是把整個計算畫成一張計算圖,每個節點是一個簡單運算。先從左到右算出每個節點的值(forward pass),再從右到左,用連鎖律把梯度一步一步傳回去(backward pass)。
投影片的例子是 L(a, b, c) = c × (a + 2b),輸入 a = 3、b = 1、c = −2。拆成三步:
Forward:
- d = 2 × b = 2
- e = a + d = 5
- L = c × e = −10
Backward: 從 L 出發,每一步只需要知道「這個節點對它的直接輸入的微分」。
- L = c × e,所以 ∂L/∂e = c = −2,∂L/∂c = e = 5
- e = a + d,所以 ∂e/∂a = 1,∂e/∂d = 1。連鎖律:∂L/∂a = −2 × 1 = −2,∂L/∂d = −2 × 1 = −2
- d = 2 × b,所以 ∂d/∂b = 2。連鎖律:∂L/∂b = −2 × 2 = −4
結果:∂L/∂a = −2,∂L/∂b = −4,∂L/∂c = 5。
可以驗算:把 b 從 1 改成 1.1,L 變成 −2 × (3 + 2.2) = −10.4,下降了 0.4,正好是 −4 × 0.1。
要注意的是,backward 用到了 forward 算出來的值(e = 5 被拿來當 ∂L/∂c)。所以訓練時一定是先 forward 再 backward,而且 forward 的中間結果要留著。PyTorch 這類框架做的就是自動建這張圖、自動跑 backward。
第二部分:大型語言模型
它是什麼
投影片的定義很短:大型語言模型是一個神經網路,輸入是一段前文,輸出是下一個詞的機率分布。
這和第 2 週的 n-gram 做的是同一件事。不同的地方是它用神經網路(Transformer)來算這個分布,而且用非常大量的文字訓練。投影片的核心論點是:文字裡包含大量的知識,光是學會猜下一個詞,就被迫學到這些知識。它列了幾個例子,要接對下面這些句子,各需要不同的東西:
- 「有玫瑰、大理花和牡丹,我被__包圍」(花):需要詞義的上下位關係。
- 「這房間不只是大,簡直是__」(巨大):需要知道程度。
- 「4 的平方根是__」:需要算術。
- 「《自己的房間》的作者是__」:需要事實。
三種架構
| 架構 | 例子 | 怎麼訓練 | 主要用途 |
|---|---|---|---|
| Decoder | GPT、Claude、Llama、DeepSeek、Mistral | 由左到右預測下一個 token | 生成文字。一般說的 LLM 指的是這種 |
| Encoder | BERT 家族 | 遮住一些詞,用兩邊的上下文去猜 | 取上下文向量,微調後做分類 |
| Encoder-decoder | Flan-T5、Whisper | 把一個序列對應到另一個序列 | 機器翻譯、語音辨識 |
第 5 週 PA4 用來取上下文向量的 BERT 是 encoder。這堂課之後只講 decoder。它有幾個別名,指的是同一件事:causal、autoregressive、left-to-right。
各種任務都是接話
Decoder 只會一件事:看前文、產生下一個 token,把它接到前文後面,再產生下一個。這叫 conditional generation。
投影片稱之為關鍵的歷史洞見:很多 NLP 任務都可以改寫成這個形式。
- 情感分析:給模型
The sentiment of the sentence "I like Jackie Chan" is:這段文字,然後比較下一個詞是 positive 的機率高,還是 negative 的機率高。 - 問答:給模型
Q: Who wrote the book 'The Origin of Species'? A:,看它接什麼。
第 3 週要為情感分類專門訓練一個分類器。現在同一個模型,換一段前文,就做另一個任務。
這段前文叫 prompt。投影片補充了三件事:prompt 裡可以放幾個範例(demonstrations)讓模型照著做;實際的產品在使用者的訊息前面,會自動接上一段使用者看不到的 system prompt;system prompt 可以很長。
投影片在這裡提醒了一句:我們直覺上把這當成在跟模型對話,但要記得,模型做的只是 conditional generation。
取樣:下一個詞怎麼選
模型輸出的是整個詞彙表上的機率分布,還得從裡面選一個詞。
每次都選機率最高的(greedy decoding)看起來合理,但實際上不這樣做:它產生的文字太容易預測,通用而且重複。
照機率隨機抽(random sampling)也有問題。詞彙表裡有非常多機率很低的怪詞,個別機率很小,加起來卻佔了不小的比例,所以常常會被抽到,句子就歪掉了。
兩者之間有一個取捨:偏重高機率的詞,文字比較正確、連貫,但無聊;給中低機率的詞多一點機會,文字比較有變化,但容易出錯。
溫度取樣用一個參數控制這個取捨。做法是在 softmax 之前,把每個分數除以溫度 τ。
本文自擬一組數字:三個詞的分數是 [2, 1, 0]。
| 溫度 τ | 除以 τ 之後 | softmax 後的機率 |
|---|---|---|
| 1 | [2, 1, 0] | 0.67、0.24、0.09 |
| 0.5 | [4, 2, 0] | 0.87、0.12、0.02 |
| 2 | [1, 0.5, 0] | 0.51、0.31、0.19 |
溫度低於 1,分數的差距被拉大,機率集中到最高的那個詞,接近每次都選最高的;溫度高於 1,差距被壓小,機率比較平均。τ 趨近 0 時,就等於 greedy decoding。第 3 週實作課二裡「把 z 除以一個數再丟進 sigmoid」的題目,預告的就是這個。
預訓練:只教它猜下一個詞
投影片用一張圖把 LLM 的訓練分成三個階段:預訓練、instruction tuning、preference alignment。這堂課講前兩個,偏好對齊留到第 10 週的最後一堂。
預訓練的演算法只有幾行:
- 拿一大份文字。
- 在每一個位置,要模型預測下一個詞。
- 用梯度下降調整權重,讓預測錯得少一點。
這叫自監督:不需要人標註,文字裡的下一個詞就是答案。
Loss 是「模型給正確的下一個詞的機率」取負對數:−log p(正確的詞)。這和第 3 週的 cross-entropy 是同一個東西。正確答案的分布在正確的詞上是 1、其他都是 0,所以 cross-entropy 的式子裡只有一項會留下來。
訓練時有一個細節叫 teacher forcing。在位置 t,模型看到的是正確的前 t 個詞,算出對第 t+1 個詞的 loss。到了位置 t+1,不管模型剛才猜了什麼,接到前文後面的都是正確的那個詞。模型在訓練時不會被自己猜錯的詞帶偏。
訓練資料
主要來源是網路。投影片舉的例子:Common Crawl 是一個非營利組織定期抓取的整個網路的快照,有數十億個網頁;2025 年的 FineWeb 語料從 2013 到 2024 年的 96 份 Common Crawl 資料整理出 18.5 兆個英文 token。
資料要先過濾:去掉樣板文字和色情內容、在網址、文件甚至單行的層級去除重複、偵測惡意內容。
其他語言怎麼辦?世界上有超過七千種語言。投影片說,答案出乎意料地簡單:把所有語言的資料丟進同一個檔案一起預訓練。FineWeb2 涵蓋一千種語言、五十億份文件。第 2 週提過這樣做的代價:token 的分配偏向英文,其他語言被切得比較碎。
Instruction tuning:把接話的模型變成助理
只做完預訓練的模型還不能當助理用。它是一個文字預測器,不知道你要它「回答」。投影片舉了兩個例子:
- 給它「用幾句話向六歲小孩解釋登月」,它接的是「向六歲小孩解釋重力理論」。它把你的話當成一串題目的第一題,繼續出題。
- 給它「翻譯成法文:The small dog」,它接的是「The small dog crossed the road」。它把句子寫完了,沒有翻譯。
解法是 instruction tuning,也叫監督式微調(supervised fine-tuning,SFT):拿預訓練好的模型,用一大批「指令加上正確回應」的資料繼續訓練。資料涵蓋各種任務:問答、翻譯、分類、摘要、寫作。訓練方式和預訓練完全一樣,還是預測下一個詞,只是資料換成了這種格式。投影片提到的一份多語言資料集 Aya,有 114 種語言、5 億多筆指令。
這和 prompt 裡放範例是兩回事。放範例時模型的權重沒有變,只是前文不同;instruction tuning 是用梯度下降真的改了權重。
評估與安全
評估語言模型,用的還是第 2 週的 perplexity:把測試文字的機率對長度做正規化,越低越好,而且只能在斷詞相同的模型之間比較。投影片另外列了三個要看的面向:模型大小、訓練耗能與公平性。
現場課的最後一節談安全與倫理。投影片從《科學怪人》講起:瑪麗·雪萊在 1816 年寫的就是「造出一個有行動能力的東西,卻不為它的行為負責」的故事。具體到 LLM,投影片列的問題有:模型會說出不符事實的話,因為訓練目標只要求文字通順好預測,沒有任何機制要求它為真;模型可能建議危險或違法的行為;訓練資料大量來自有著作權的文字,合不合法在各國都還沒有定論;網站擁有者不一定同意被抓取;資料多半出自美國的作者,主題和觀點因此偏向一邊。
PA5
PA5 的 notebook 分三段:先看邏輯迴歸為什麼不夠用;再自己寫一個網路的初始化、forward、backward 和預測;最後用詞向量當輸入,做 Yelp 評論的分類,並回答倫理題。寫的時候建議養成一個習慣:每個矩陣運算前先寫下輸入和輸出的形狀。一批 m 筆資料、每筆 d 維、隱藏層 h 個單元,那麼 X 是 m×d,W 是 d×h,隱藏層的輸出是 m×h。多數的錯誤是矩陣放反了,對一下形狀就抓得到。
自我檢查
- 用投影片那個神經元(w = [0.2, 0.3, 0.9],b = 0.5),啟動函數換成 ReLU,輸入 x = [0.5, 0.6, 0.1] 的輸出是多少?如果 b 改成 −1 呢?答案:z = 0.87,ReLU 輸出 0.87。b = −1 時 z = −0.63,ReLU 輸出 0。
- 把 XOR 網路的 ReLU 全部拿掉,輸入 (1, 1) 會得到什麼?答案:h₁ = 2,h₂ = 1,y = 2 − 2 = 0,這一筆碰巧還是對的。但輸入 (0, 0) 時 h₂ = −1,y = 0 − 2×(−1) = 2,錯了。沒有 ReLU 把負數截成 0,網路就壞了。
- 計算圖的例子裡,如果 c 從 −2 改成 −1.9,L 大約變多少?答案:∂L/∂c = 5,c 增加 0.1,L 大約增加 0.5,從 −10 變成 −9.5。實際算:−1.9 × 5 = −9.5。
- 模型對下一個詞的機率分布是:「貓」0.5、「狗」0.3、「魚」0.2,正確答案是「魚」。這個位置的 loss 是多少?答案:−ln(0.2) ≈ 1.61。
- 三個詞的分數是 [2, 1, 0],溫度調到 0.1,會發生什麼事?答案:除以 0.1 之後是 [20, 10, 0],第一個詞的機率超過 0.9999,幾乎等於 greedy decoding。
這週和後面的關係
- 這週把 Transformer 當成一個黑盒子:前文進去,機率分布出來。下一週打開它,看 attention 怎麼讓每個 token 參考前面的 token。
- 這週的取樣和 loss,下一週的 PA6a 要自己寫出來。
- 訓練的第三個階段,偏好對齊,在第 10 週。
系列導覽:上一篇 第 5 週:Embeddings and Social NLP|下一篇 第 7 週:Transformers and Speech Processing
更新紀錄
- 2026-10-13:依 2026 年版公開投影片重寫。現場課的來源從 2025 年的舊檔換成官方課表現在連結的 2026 年版;補上神經元、XOR、softmax、計算圖的手算,新增 conditional generation、溫度取樣、預訓練、訓練資料、instruction tuning 與安全各節,以及自我檢查。
參考資料
- CS124 Winter 2026 課程網站與課表
- Neural Networks 投影片 — 神經元例子、XOR、softmax 例子、前饋網路的應用、計算圖
- Introduction to Large Language Models 投影片 — LLM 的定義、三種架構、conditional generation、取樣、預訓練、訓練資料、instruction tuning、評估與安全
- CS124 PA5
- Speech and Language Processing 2025 年 8 月版第 6 章
Loading...