Skip to content

把 Logistic Regression 從 likelihood 寫成分類器|CMU 10-301 作業 4

2026年8月22日1 分鐘
TL;DRHW4 把機率解釋、cross-entropy 梯度與程式實作綁在一起,驗收的是一條可追蹤的訓練流程。

🌏 English version

官方 ZIP 內 handout 完整題名是 Homework 4: Logistic Regression,屬於 written+programming。Written 題組包含 linear regression、logistic-regression warm-up/analysis/adversarial attack、vectorization and pseudocode、word embeddings and gender biases,以及 empirical questions。程式要先以 feature.py 將 Yelp sentiment text 轉成 GloVe 平均向量,再以 lr.py 訓練 logistic regression。ZIP 提供兩份 starter 與 glove_embeddings.txt;資料與部分 reference output 由課程作業環境配發,這個公開 ZIP 並未包含它們。

能力交付點

先手算單筆樣本的 logit、機率、loss 與梯度,再讓程式逐項重現。若只看最終 accuracy,sign 錯誤、平均方式或 bias 處理都可能被資料偶然掩蓋。訓練迴圈至少要能輸出每 epoch loss,並固定資料順序與初始化。

第一個可執行動作與完成判準

先解開 bundle,執行 python feature.py --help 與 python lr.py --help,確認 starter 的參數介面;公開 ZIP 缺 Yelp train/validation/test,因此不能誠實給出一條可完成官方資料流程的命令。取得合法資料後,再做 finite-difference gradient check。完成判準是 feature 檔格式可重現、單筆 gradient 通過數值檢查、train/validation/test 輸出齊全;沒有官方資料與 hidden tests 時只能算部分完成。

追蹤單筆 logistic 更新

以下是本文自編的教學例子,不是官方作業答案。

自編單筆 x=2、y=1,模型 z=wx+b,從 w=b=0 開始。sigmoid(0)=0.5,cross-entropy loss=-ln0.5≈0.693。單筆梯度為 (p-y)x=-1,bias 梯度 p-y=-0.5。若 learning rate=0.1,一步 gradient descent 得 w=0.1、b=0.05。

檢查與答案: 新 logit 是多少?答案 0.1×2+0.05=0.25,比原本零大;正標籤的機率因此上升。這不是官方 Yelp 資料結果。

更新紀錄

  • 2026-10-11:補上自編例子、完整計算或推理,以及理解檢查答案。

參考資料