Skip to content

Neural Networks and LLMs:從神經元、反向傳播到 decoder-only 模型|Stanford CS124 第 6 週

2026年8月22日1 分鐘
TL;DR第 6 週分兩半。預錄內容教神經網路:一個神經元怎麼算、為什麼需要隱藏層、softmax、用詞向量做分類與語言模型、反向傳播。現場課介紹大型語言模型:它是什麼、三種架構、為什麼各種任務都能改寫成接話、怎麼取樣、怎麼預訓練、怎麼變成助理。

🌏 English version

這是 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₂ANDORXOR
00000
01011
10011
11110

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₂
00000
01101
10101
11210

看 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]

z0.61.1−1.51.23.2−1.1
e 的 z 次方1.823.000.223.3224.530.33
除以總和 33.230.0550.0900.0070.1000.7380.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 的平方根是__」:需要算術。
  • 「《自己的房間》的作者是__」:需要事實。

三種架構

架構例子怎麼訓練主要用途
DecoderGPT、Claude、Llama、DeepSeek、Mistral由左到右預測下一個 token生成文字。一般說的 LLM 指的是這種
EncoderBERT 家族遮住一些詞,用兩邊的上下文去猜取上下文向量,微調後做分類
Encoder-decoderFlan-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 週的最後一堂。

預訓練的演算法只有幾行:

  1. 拿一大份文字。
  2. 在每一個位置,要模型預測下一個詞。
  3. 用梯度下降調整權重,讓預測錯得少一點。

這叫自監督:不需要人標註,文字裡的下一個詞就是答案。

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。多數的錯誤是矩陣放反了,對一下形狀就抓得到。

自我檢查

  1. 用投影片那個神經元(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。
  2. 把 XOR 網路的 ReLU 全部拿掉,輸入 (1, 1) 會得到什麼?答案:h₁ = 2,h₂ = 1,y = 2 − 2 = 0,這一筆碰巧還是對的。但輸入 (0, 0) 時 h₂ = −1,y = 0 − 2×(−1) = 2,錯了。沒有 ReLU 把負數截成 0,網路就壞了。
  3. 計算圖的例子裡,如果 c 從 −2 改成 −1.9,L 大約變多少?答案:∂L/∂c = 5,c 增加 0.1,L 大約增加 0.5,從 −10 變成 −9.5。實際算:−1.9 × 5 = −9.5。
  4. 模型對下一個詞的機率分布是:「貓」0.5、「狗」0.3、「魚」0.2,正確答案是「魚」。這個位置的 loss 是多少?答案:−ln(0.2) ≈ 1.61。
  5. 三個詞的分數是 [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 與安全各節,以及自我檢查。

參考資料