L05|從零打造模型:線性模型到深度網路
只用 Python 和 PyTorch,從單層線性模型一路做到兩層隱藏層的深度學習模型,並學會 sigmoid 和評估指標。
L05|從零打造模型:線性模型到深度網路(From-scratch model)

只用 Python 和 PyTorch,從單層線性模型一路做到兩層隱藏層的深度學習模型,並學會 sigmoid 和評估指標。 (Using only Python and PyTorch, build from a one-layer linear model up to a deep model with two hidden layers, plus sigmoid and metrics.)
| 項目 | 內容 |
|---|---|
| 所屬 | Part 1:Practical Deep Learning |
| 影片 | YouTube |
| 對應書本章節 | 第 4 章、第 9 章 |
| 原始頁面 | Lessons/lesson5 |
| 難度(F3 視角) | ★★★★☆ 進階 |
影片
本課重點
- 資料清理:用 pandas 讀鐵達尼號 train.csv,找出缺失值,用眾數(mode)補上。最簡單的方法通常夠用,也不要隨便刪欄或刪列。
- 資料轉換:長尾分布的欄位(如 Fare)用 log(1+x) 轉換;類別欄位轉成虛擬變數;各欄正規化(除以最大值)讓範圍一致。
- 張量與廣播:把資料轉成 PyTorch tensor,形狀如 (891, 12),rank 是維度數。廣播(broadcasting)讓「每列資料 × 一組係數」不用寫迴圈,而且在 GPU 上很快。
- 訓練迴圈:隨機初始化係數 → 算預測 → 算損失(Jeremy 預設用平均絕對誤差)→ loss.backward() 算梯度 → 係數減去學習率 × 梯度 → 重複。把探索步驟封裝成 init_coeffs、one_epoch、train_model 等函數。
- Sigmoid 與準確率:預測「是否生還」只該落在 0 到 1。sigmoid 把任意數字壓到 0 到 1,讓優化容易很多,學習率可以從 0.1 提高到 2。準確率是給人看的指標,不適合當損失函數。
- 從神經網路到深度學習:把係數向量換成矩陣(@ 矩陣乘法),加一層隱藏層和常數項,就是神經網路;再加一層就是深度學習。手動調初始化和學習率非常繁瑣,在表格資料上也沒有明顯更好。
- 用框架與集成:fastai 的 tabular_learner 自動處理補值、正規化、類別、學習率搜尋(lr_find)。訓練 5 個只差在初始值的模型取平均(ensemble),成績就能提升。最後介紹 OneR:只用一個欄位切一刀當基準模型。
關鍵概念
| 英文術語 | 中文 | 一句話解釋 |
|---|---|---|
| Tensor | 張量 | PyTorch 的多維陣列,可以放在 GPU 上計算 |
| Rank / Shape | 維度數/形狀 | 向量 rank 1,表格 rank 2;形狀如 (891, 12) |
| Broadcasting | 廣播 | 形狀不同的張量自動對齊後逐元素運算 |
| Mode | 眾數 | 出現最多次的值,常用來補缺失值 |
| Sigmoid | S 型函數 | 1 / (1 + e^(−x)),把任意數字壓到 0 與 1 之間 |
| Hidden layer | 隱藏層 | 輸入與輸出之間的層 |
| Activation function | 激活函數 | 加在層與層之間的非線性函數,如 ReLU、sigmoid |
| Metric: accuracy | 準確率 | 答對比例,給人看,不適合求梯度 |
| Ensemble | 集成 | 把多個模型的預測合併(通常取平均) |
| OneR | 單規則模型 | 只用一個欄位做一次切分的簡單基準模型 |
認識關聯圖與重點圖
迷你範例:sigmoid
import torch
torch.sigmoid(torch.tensor([-2., 0., 2.])) # tensor([0.1192, 0.5000, 0.8808])
練習題
- 算出 sigmoid(−2)、sigmoid(0)、sigmoid(2)(取三位小數)。為什麼預測「是否生還」要在最後加 sigmoid?
- 一個 tensor 的形狀是 (891, 12)。它的 rank 是多少?891 和 12 各代表什麼?
- Age 欄有很多缺失值。為什麼課程用眾數補,而不是直接刪掉那些乘客?
- 算出 log(1+0)、log(1+9)、log(1+99)(自然對數,取三位小數)。為什麼要加 1?
- 課程訓練了 5 個只差在初始值的模型再取平均。為什麼這樣會比單一模型好?
- 中文學生作答:L05_中文F3學生_202611041526
- English student answers: L05_EN_F3_Student_202611041526
資源連結
英文延伸資源(零基礎可以先略過,點開看)
Lesson notebooks
- Linear model and neural net from scratch
- Why you should use a framework
- How random forests really work
Links from the lesson
- OneR paper
- 1
- 2
- 3
- 4