L05|從零打造模型:線性模型到深度網路(From-scratch model)

零基礎提示

  • 先讀 數學補充:§4 指數與對數、§6 標準化、§7 矩陣乘法
  • 看不懂的詞查 白話小辭典
  • 字幕:離線網站選「中英」(電腦翻譯,大意正確)
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 視角)★★★★☆ 進階

影片

本課重點

  1. 資料清理:用 pandas 讀鐵達尼號 train.csv,找出缺失值,用眾數(mode)補上。最簡單的方法通常夠用,也不要隨便刪欄或刪列。
  2. 資料轉換:長尾分布的欄位(如 Fare)用 log(1+x) 轉換;類別欄位轉成虛擬變數;各欄正規化(除以最大值)讓範圍一致。
  3. 張量與廣播:把資料轉成 PyTorch tensor,形狀如 (891, 12),rank 是維度數。廣播(broadcasting)讓「每列資料 × 一組係數」不用寫迴圈,而且在 GPU 上很快。
  4. 訓練迴圈:隨機初始化係數 → 算預測 → 算損失(Jeremy 預設用平均絕對誤差)→ loss.backward() 算梯度 → 係數減去學習率 × 梯度 → 重複。把探索步驟封裝成 init_coeffs、one_epoch、train_model 等函數。
  5. Sigmoid 與準確率:預測「是否生還」只該落在 0 到 1。sigmoid 把任意數字壓到 0 到 1,讓優化容易很多,學習率可以從 0.1 提高到 2。準確率是給人看的指標,不適合當損失函數。
  6. 從神經網路到深度學習:把係數向量換成矩陣(@ 矩陣乘法),加一層隱藏層和常數項,就是神經網路;再加一層就是深度學習。手動調初始化和學習率非常繁瑣,在表格資料上也沒有明顯更好。
  7. 用框架與集成:fastai 的 tabular_learner 自動處理補值、正規化、類別、學習率搜尋(lr_find)。訓練 5 個只差在初始值的模型取平均(ensemble),成績就能提升。最後介紹 OneR:只用一個欄位切一刀當基準模型。

關鍵概念

英文術語中文一句話解釋
Tensor張量PyTorch 的多維陣列,可以放在 GPU 上計算
Rank / Shape維度數/形狀向量 rank 1,表格 rank 2;形狀如 (891, 12)
Broadcasting廣播形狀不同的張量自動對齊後逐元素運算
Mode眾數出現最多次的值,常用來補缺失值
SigmoidS 型函數1 / (1 + e^(−x)),把任意數字壓到 0 與 1 之間
Hidden layer隱藏層輸入與輸出之間的層
Activation function激活函數加在層與層之間的非線性函數,如 ReLU、sigmoid
Metric: accuracy準確率答對比例,給人看,不適合求梯度
Ensemble集成把多個模型的預測合併(通常取平均)
OneR單規則模型只用一個欄位做一次切分的簡單基準模型

認識關聯圖與重點圖

L05_關聯圖_202611041526

迷你範例:sigmoid

import torch
torch.sigmoid(torch.tensor([-2., 0., 2.]))   # tensor([0.1192, 0.5000, 0.8808])

練習題

  1. 算出 sigmoid(−2)、sigmoid(0)、sigmoid(2)(取三位小數)。為什麼預測「是否生還」要在最後加 sigmoid?
  2. 一個 tensor 的形狀是 (891, 12)。它的 rank 是多少?891 和 12 各代表什麼?
  3. Age 欄有很多缺失值。為什麼課程用眾數補,而不是直接刪掉那些乘客?
  4. 算出 log(1+0)、log(1+9)、log(1+99)(自然對數,取三位小數)。為什麼要加 1?
  5. 課程訓練了 5 個只差在初始值的模型再取平均。為什麼這樣會比單一模型好?

資源連結

英文延伸資源(零基礎可以先略過,點開看)

相關筆記

Built with LogoFlowershow