模組 08 · 從零弄懂大模型

神經網路基礎

從一條直線開始,手寫梯度下降和反向傳播,訓練出第一個小網路,再換成 PyTorch 識別手寫數字,並親眼看到過擬合和對付它的辦法。

各課

  1. 01
    用 numpy 做線性迴歸

    從一個最簡單的問題出發:根據面積預測房價。用一條直線當模型,用均方誤差衡量好壞,再用最笨的辦法把九萬條直線挨個試一遍,看清楚"訓練"到底在找什麼。

    35 分鐘 · 入門
  2. 02
    梯度下降

    不再盲目地試,而是每一步都算出往哪個方向改參數、改多少。從斜率講起理解導數,手算梯度,寫出梯度下降的迴圈,再親眼看看學習率太小、太大和資料沒有標準化時會發生什麼。

    45 分鐘 · 入門
  3. 03
    手寫反向傳播

    寫一個幾十行的類,讓每個數都記住自己是怎麼算出來的,就能從損失出發,用鏈式法則把梯度一路傳回每個參數。用數值求導核對它,再用它訓練一個小網路學會異或。

    60 分鐘 · 進階
  4. 04
    PyTorch 入門

    把前三課手寫的東西用 PyTorch 再做一遍:張量、自動求導、nn.Module、最佳化器。每一步都和手寫的版本對照,算出的梯度、訓練出的參數完全一樣。

    45 分鐘 · 入門
  5. 05
    識別手寫數字

    第一個真正的分類任務:讓網路認出 8×8 畫素的手寫數字。講清楚分類和迴歸的區別,softmax 和交叉熵在做什麼,為什麼要分小批訓練,最後用混淆矩陣看它錯在哪裡。

    45 分鐘 · 進階
  6. 06
    過擬合和怎麼對付它

    網路在訓練集上全對,在沒見過的資料上卻不見長進,這叫過擬合。故意製造一次過擬合,再試權重衰減、dropout、早停和增加資料這幾種辦法,看真實的結果裡哪一個最管用。

    40 分鐘 · 進階

第二部分"從零弄懂大模型"從這裡開始。

第一部分裡,大模型對你來說是一個介面:發文字過去,拿文字回來。這一部分要開啟它,弄明白它是怎麼訓練出來的。這個模組先打地基:不管模型有多大,訓練它的核心步驟都一樣,都是算損失、算梯度、更新參數。這個模組用最小的例子把這幾步親手做一遍。

不需要 GPU,所有程式碼在普通筆記型電腦的 CPU 上幾秒鐘就能跑完。數學只用到高中的導數,並且每個公式都會用程式碼和數值驗證。

為什麼是這個順序

先用 numpy 手寫,再換 PyTorch。第 1 到 3 課不用任何深度學習框架:用一條直線理解"訓練在找什麼",用梯度下降理解"怎麼找",用反向傳播理解"梯度從哪裡來"。有了這些,第 4 課的 PyTorch 就不是黑箱,每個函式你都知道它背後在做什麼。

後兩課處理真實的資料。第 5 課做一個分類任務,引出 softmax 和交叉熵,它們在下一個模組會原樣用在 GPT 上。第 6 課講過擬合,這是訓練任何模型都會遇到的問題。

學完的標準

  • 能說出"訓練"在做什麼:找一組參數,讓損失儘可能小。
  • 能手寫梯度下降的迴圈,並說出學習率太小、太大時分別會怎樣,以及為什麼要標準化輸入。
  • 能用鏈式法則解釋反向傳播,並用數值求導核對一段自己寫的梯度計算。
  • 能用 PyTorch 寫出完整的訓練迴圈:模型、損失函式、最佳化器、清零梯度、反向傳播、更新參數。
  • 能說出分類任務為什麼用 softmax 和交叉熵,以及 10 分類的網路剛開始訓練時損失大約是多少。
  • 能從訓練日誌裡認出過擬合,並說出幾種應對辦法各自的作用和侷限。

本模組的程式碼

程式碼和執行結果保留原樣(簡體中文),與實際執行時完全一致。